LINUX.ORG.RU

Из RAM выделить больше видеопамяти для iGPU.

 , , , ,


0

2

Имеется ноутбук HP EliteBook 735 G6 на следующем железе: AMD Ryzen 5 PRO 3500U w/ Radeon Vega Mobile Gfx, 64Gb RAM 3200Mhz, Samsung EVO 970 Plus 1Tb, AMD Radeon Vega 8 Graphics.

В качетсве основной ОС используется Kubuntu 22.04. Ситуация следующая: для встроенной видеокарты выделяется лишь 2Гб памяти, а нужно выделить как минимум 8Гб, а лучше 16Гб. Как это сделать ума не приложу, уже столько страниц прочитал, а ответа нет. В настройках UEFI BIOS чего только нет, но нет пункта с выбором желаемого объёма для iGPU. Пробовал установить Windows, там ОС к 2Гб выделяет дополнительные 31Гб, итого получается AMD Radeon Vega 8 Graphics c 33Gb.

Возможно судествут способ настройки драйвера, или какая-то утилита, или ещё что. Но я не знаю.

Как в Linux выделить больше видеопамяти из RAM в пользу iGPU, аналогично как это сделано в Windows?



Последнее исправление: spectralwhite (всего исправлений: 2)

Ответ на: комментарий от annerleen

Если бы это было возможно, то я бы сделал это до того как писать сообщение. Но там нет таких конфигов. К тому же ноут бизнесс класса, так полно настроек безопасности и даже отключение/включение отдельных портов ноутубка и не только. Но настройка объём памяти отсутствует. Да даже если бы она и была, как на материнских платах ПК, то как правило там стоят жесткие ограничения до 2Гб, не встречал ещё материнок чтобы выделали встроенной графике те же 4Гб или 8Гб, всегда этим занималась Windows, но сейчас стоит задача сделать тоже самое в Linux.

spectralwhite
() автор топика

В параметры запуска ядра добавь строчку:

amdgpu.gttsize=8192

Потом после перезагрузки проверь вывод dmesg:

$ dmesg | grep amdgpu

Среди прочего, там должна быть строчка:

amdgpu: 8192M of GTT memory ready.

Вместо 8192 можешь любое нужное тебе значение написать.

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 2)
Ответ на: комментарий от Kron4ek

Большое спасибо за оперативный ответ. Я попробовал сделать то что вы написали, и на выходе получил вот такой результат:

[    0.142291] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-43-generic root=UUID=8456afe3-ceec-426a-b997-63ea4a50cba3 ro verbose splash vt.handoff=7 vis_vramlimit=16384 vramlimit=16384 amdgpu.gttsize=16384 vram_page_split=16384 amdgpu.vram_page_split=16384
[    2.075505] amdgpu: unknown parameter 'vram_page_split' ignored
[    2.076877] [drm] amdgpu kernel modesetting enabled.
[    2.080646] amdgpu: Topology: Add APU node [0x0:0x0]
[    2.081754] fb0: switching to amdgpu from EFI VGA
[    2.082892] amdgpu 0000:04:00.0: vgaarb: deactivate vga console
[    2.083020] amdgpu 0000:04:00.0: amdgpu: Trusted Memory Zone (TMZ) feature enabled
[    2.084671] amdgpu 0000:04:00.0: amdgpu: Fetched VBIOS from VFCT
[    2.084675] amdgpu: ATOM BIOS: SWBRT48929.001
[    2.084742] amdgpu 0000:04:00.0: amdgpu: VRAM: 2048M 0x000000F400000000 - 0x000000F47FFFFFFF (2048M used)
[    2.084746] amdgpu 0000:04:00.0: amdgpu: GART: 1024M 0x0000000000000000 - 0x000000003FFFFFFF
[    2.084750] amdgpu 0000:04:00.0: amdgpu: AGP: 267419648M 0x000000F800000000 - 0x0000FFFFFFFFFFFF
[    2.084836] [drm] amdgpu: 2048M of VRAM memory ready
[    2.084839] [drm] amdgpu: 16384M of GTT memory ready.
[    2.085294] amdgpu 0000:04:00.0: amdgpu: PSP runtime database doesn't exist
[    2.086427] amdgpu: hwmgr_sw_init smu backed is smu10_smu
[    2.086552] amdgpu 0000:04:00.0: amdgpu: Will use PSP to load VCN firmware
[    2.186475] amdgpu 0000:04:00.0: amdgpu: RAS: optional ras ta ucode is not available
[    2.196012] amdgpu 0000:04:00.0: amdgpu: RAP: optional rap ta ucode is not available
[    2.279453] kfd kfd: amdgpu: Allocated 3969056 bytes on gart
[    2.311330] amdgpu: HMM registered 2048MB device memory
[    2.311434] amdgpu: Topology: Add APU node [0x15d8:0x1002]
[    2.311445] kfd kfd: amdgpu: added device 1002:15d8
[    2.311718] amdgpu 0000:04:00.0: amdgpu: SE 1, SH per SE 1, CU per SH 11, active_cu_number 8
[    2.313622] fbcon: amdgpudrmfb (fb0) is primary device
[    2.350902] amdgpu 0000:04:00.0: [drm] fb0: amdgpudrmfb frame buffer device
[    2.373169] amdgpu 0000:04:00.0: amdgpu: ring gfx uses VM inv eng 0 on hub 0
[    2.373230] amdgpu 0000:04:00.0: amdgpu: ring comp_1.0.0 uses VM inv eng 1 on hub 0
[    2.373288] amdgpu 0000:04:00.0: amdgpu: ring comp_1.1.0 uses VM inv eng 4 on hub 0
[    2.373345] amdgpu 0000:04:00.0: amdgpu: ring comp_1.2.0 uses VM inv eng 5 on hub 0
[    2.373403] amdgpu 0000:04:00.0: amdgpu: ring comp_1.3.0 uses VM inv eng 6 on hub 0
[    2.373460] amdgpu 0000:04:00.0: amdgpu: ring comp_1.0.1 uses VM inv eng 7 on hub 0
[    2.373518] amdgpu 0000:04:00.0: amdgpu: ring comp_1.1.1 uses VM inv eng 8 on hub 0
[    2.373575] amdgpu 0000:04:00.0: amdgpu: ring comp_1.2.1 uses VM inv eng 9 on hub 0
[    2.373632] amdgpu 0000:04:00.0: amdgpu: ring comp_1.3.1 uses VM inv eng 10 on hub 0
[    2.373690] amdgpu 0000:04:00.0: amdgpu: ring kiq_2.1.0 uses VM inv eng 11 on hub 0
[    2.373747] amdgpu 0000:04:00.0: amdgpu: ring sdma0 uses VM inv eng 0 on hub 1
[    2.373802] amdgpu 0000:04:00.0: amdgpu: ring vcn_dec uses VM inv eng 1 on hub 1
[    2.373858] amdgpu 0000:04:00.0: amdgpu: ring vcn_enc0 uses VM inv eng 4 on hub 1
[    2.373914] amdgpu 0000:04:00.0: amdgpu: ring vcn_enc1 uses VM inv eng 5 on hub 1
[    2.373975] amdgpu 0000:04:00.0: amdgpu: ring jpeg_dec uses VM inv eng 6 on hub 1
[    2.381374] [drm] Initialized amdgpu 3.42.0 20150101 for 0000:04:00.0 on minor 0
[    4.250786] snd_hda_intel 0000:04:00.1: bound 0000:04:00.0 (ops amdgpu_dm_audio_component_bind_ops [amdgpu])```

https://i2.paste.pics/262c5109caccd1699e79347ec01516e1.png

Однако, кажется софт не использует эту память, я не сталкивался ранее с GTT и по правде говоря даже не знаю как мониторить её заполнение. В системном мониторинге нет нужного датчика для отображения её заполнения.

Возможно ли аналогичным путём поднять объем VRAM?
По подсказке из следующего сообщения от annerleen, я почитал варианты настройки  amdgpu на странице: 
 https://www.kernel.org/doc/html/v5.2/gpu/amdgpu.html
Но перепробовав разные варианты увеличения VRAM, так и не смог поднять его выше 2048Мб. Либо я что-то делаю не так, либо это технически не предусмотрено. 
spectralwhite
() автор топика
Ответ на: комментарий от spectralwhite

GTT - оперативка, VRAM - видеопамять. В случае с интегрированной графикой, GTT и VRAM - по сути, одно и тоже, так как своей собственной видеопамяти у интеграшки нету, в любом случае оперативка используется.

Однако, кажется софт не использует эту память

Установи и запусти radeontop, там будет показано сколько GTT используется.

Я понимаю, тебя смущает, что система и приложения видят всего 2 GB видеопамяти. Но это не значит, что видеодрайвер не вызалит за пределы этих 2 GB при необходимости.

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 1)
Ответ на: комментарий от Kron4ek

Проверил заполнение через radeontop, всё отлично работает. Столкнулся с странной штукой, ещё до мониторинга через radeontop. Не смотря на показатели после команды $ dmesg | grep amdgpu что памяти выделяется столько сколько я задал, в приложении всё равно отображалась полностью заполненная шкала, будто по прежнему всего 2Гб. Но после экспериментов с vis_vramlimit=16384 vramlimit=16384 gartsize=16384 gttsize=16384, и даже после их удаления, оставив лишь amdgpu.gttsize=16384, в приложении шкала заполнения видеопамяти перестала заполняться до максимума, что явно доказывало, что amdgpu.gttsize=16384 сделал своё дело.

На скрине можно наблюдать как заполнилось суммарно 7948Мб (1957VRAM+5991GTT) видеопамяти, почти впритык к 8Гб: https://i2.paste.pics/d238f64b751c9724ed1d5fd827f50b8d.png

Ещё раз огромное спасибо за помощь!

spectralwhite
() автор топика
Ответ на: комментарий от NonameKiriLL

Да полно может быть задач где требуется много видеопамяти:

  1. Работа с тяжелыми файлами в графических редакторах, где используется много слоёв высокого разрешения
  2. Работа с монтажом видеофайлов UHD4K, 5К и выше
  3. Работа с 3D сценами с текстурами высокого разрешения
  4. Да в конце концов современным играм требуется много видеопамяти.

Лично я часто работаю с графикой, заполнение 3-4Гб это пожалуй минимум с которым мне приходится сталкиваться. Редко, и то во время поездок могу поиграть в ту же Diablo II: Resurrected, которая уже в главном меню съедает больше 6Гб, а в самой игре иногда даже больше 8Гб. Благо встроенка AMD Radeon Vega 8 Graphics пока что ещё вывозит эти нагрузки.

spectralwhite
() автор топика
Ответ на: комментарий от spectralwhite

Редко, и то во время поездок могу поиграть в ту же Diablo II: Resurrected, которая уже в главном меню съедает больше 6Гб, а в самой игре иногда даже больше 8Гб. Благо встроенка AMD Radeon Vega 8 Graphics пока что ещё вывозит эти нагрузки.

А как они этого добиваются? Ну то есть понятно что движок уже трёхмерный, а не как в оригинале, но на что 8 гигов вообще?

shalom_ ★★
()
Ответ на: комментарий от shalom_

Очень детализированные текстуры, причем на столько, что Diablo III оказывается тааакааая мыльная, хотя её «вроде как» только вот-вот сделали, а оказывается что десяток лет прошло с момента выхода O_o Высокая детализация текстур в Diablo II не только в главном меню, но и в процессе игры, всё проработано до мелочей, вот пара примеров одной и той же локации в меню и в игре: https://i2.paste.pics/18c245b4cd4df96a4ba0620e4d651cdc.png https://i2.paste.pics/59637d436db4322586d89209cf748024.png

С такими текстурами на встроенке далеко не уедешь, так ещё и с 2Гб, потому что текстуры постоянно перезаливаются туда-сюда и fps падает до 10-15, а когда памяти достаточно, текстуры один раз записываются в процессе загрузки локации, и потом уже спокойно играешь с ~23-27fps. Малый фреймрейт даже немного даёт понастальгировать о оригинальной игре. При этом лагов и тормозов нет, понятное дело это не 60-165Hz, но иногда погонять в дороге более чем достаточно. К тому же можно выставить не FullHD, а ниже, или просто динамическое разрешение на желаемую частоту кадров. Но я так не делаю, в пиксельную Diablo II я уже наигрался за пару десятилений XD

spectralwhite
() автор топика