AMDGPU
Az AMDGPU az AMD Radeon és más GPU-k nyílt forráskódú grafikus illesztőprogramja.
A régebbi Radeon kártyákat a radeon illesztőprogram támogatja.
Telepítés
Az AMDGPU használatához szükséges rendszer beállításához meg kell határozni a megfelelő kártyát, telepíteni kell a megfelelő firmware-t, be kell állítani a kernelt, és telepíteni kell az X11 illesztőprogramot.
Előfeltételek
Hardver észlelése
A megfelelő illesztőprogram kiválasztásához először észlelje a grafikus kártyát. Használja a lspci funkciót ehhez a feladathoz:
root #
lspci | grep -i VGA
Ellenőrizze a kimenetet az alábbi táblázatban a felsorolt terméknevek egyikéért.
Sajátosságtámogatás
Az AMDGPU illesztőprogram által támogatott videomagok az OpenGL 4.6 és az OpenGL ES 3.2 verziót tartalmazzák. A VIDEO_CARDS változót "amdgpu radeonsi"
-ra kell állítani. A media-libs/mesa-n keresztül (20.0-s vagy újabb verzió) az illesztőprogram emellett támogatja a Vulkan-t (RADV
illesztőprogram), és az OpenCL 2.0 pedig elérhető a ROCm-en keresztül (dev-libs/rocm-opencl-runtime). A VDPAU és a VAAPI is támogatva van a radeonsi
-n keresztül.
Család | Lapkakészlet neve | Mikroarchitektúra[1] | ISA[2] | Termék neve | Megjegyzés |
---|---|---|---|---|---|
Southern Islands | CAPE VERDE, PITCAIRN, TAHITI, OLAND, HAINAN | GCN1.0+ | DCE 6.x | HD7750-HD7970, R9 270, R9 280, R9 370X, R7 240, R7 250 | Kísérleti. Opcionális támogatás a kernel 4.9-rc1 óta. A gcn1.x stabil támogatása megtalálható a régebbi radeon illesztőprogramban. |
Sea Islands | BONAIRE, KABINI, KAVERI, HAWAII, MULLINS | GCN2.x | DCE 8.x | HD7790, R7 260, R9 290, R7 360, R9 390 | A támogatás nem kötelező a kernelben, és aktiválni kell a DRM_AMDGPU_CIK=y paraméterrel, különben a régebbi radeon meghajtó stabil támogatást nyújt a Sea Islands (GCN2.x) kártyákhoz.
|
Volcanic Islands | CARRIZO, FIJI, STONEY, TONGA, TOPAZ, WANI | GCN3.x | DCE 10/11.x | R9 285, R9 380, R9 380X, R9 Fury, R9 Nano, R9 Fury X, Pro Duo | A 4.7-rc6 kernel óta. |
Arctic Islands | POLARIS10/11/12, VEGAM | GCN4.x | DCE 11.2 | RX 460, RX 470, RX 480, RX 540, RX 550, RX 560, RX 570, RX 580, RX 590, Pro WX 3200 | A 4.15 kernel óta. |
Vega | VEGA10/11/12/20 | GCN5.x | DCE 12.x | RX Vega 56, RX Vega 64, Radeon Vega II, Radeon VII | A 4.15 kernel óta. |
Vega | RAVEN | GCN5.x | DCN 1.0 | Raven Ridge APU series | A 4.16 kernel óta[3][4]. |
Vega | RENOIR | GCN5.x | DCN 2.1 | Renoir, Lucienne, and Cezanne APU series | |
Navi | NAVI10/14 | RDNA | DCN 2.0 | RX 5500, RX 5500 XT, RX 5600, RX 5600 XT, RX 5700, RX 5700 XT | Megköveteli legalább a kernel 5.3 -t, Mesa 19.2 -t és LLVM 9.0 meglétét.[5]. |
Navi | NAVI21/22/23/24 | RDNA2 | DCN 3.0 | RX 6500 XT, RX 6600, RX 6600 XT, RX 6650 XT, RX 6700, RX 6700 XT, RX 6750 XT, RX 6800, RX 6800 XT, RX 6900 XT, RX 6950 XT | RX 6*00 sorozat az 5.9.12-es kernel óta a CONFIG_DRM_AMD_DC_DCN3_0=Y konfigurációval.[6][7]
|
Navi | NAVI31 | RDNA 3 | RX 7000 |
Firmware
Szükséges a megfelelő firmware (vagy mikrokód) telepítése a kártyához. A firmware fájlokat a sys-kernel/linux-firmware biztosítja.
A firmware betöltésének két fő módja van:
- Generálja le az AMDGPU-t modulként, és egyszerűen telepítse a sys-kernel/linux-firmware-t (a firmware futás közben töltődik be),
- Generálja le az AMDGPU-t és a szükséges firmware-t a kernelbe (a firmware az fordítási időben töltődik be).
A legegyszerűbb, ha először az elsőt csinálja, majd ha akarja, akkor találja ki, hogy melyik firmware-blobokra (zárt forráskódú bináris illesztőprogramokra) van szüksége, és csinálja meg a másodikat.
USE flags for sys-kernel/linux-firmware Linux firmware files
+initramfs
|
Create and install initramfs for early microcode loading in /boot (only AMD for now) |
+redistributable
|
Install also non-free (but redistributable) firmware files |
bindist
|
Flag to enable or disable options for prebuilt (GRP) packages (eg. due to licensing issues) |
compress-xz
|
Compress firmware using xz (app-arch/xz-utils) before installation |
compress-zstd
|
Compress firmware using zstd (app-arch/zstd) before installation |
deduplicate
|
Create symlinks for all firmware that is duplicate using rdfind |
dist-kernel
|
Enable subslot rebuilds on Distribution Kernel upgrades |
savedconfig
|
Allows individual selection of firmware files |
unknown-license
|
Install firmware files whose license is unknown |
Ha a savedconfig USE jelölőzászlót használja, akkor győződjön meg arról, hogy a hardverhez szükséges összes fájl benne van a konfigurációs fájlban. Ha kétségei vannak, akkor kapcsolja ki a savedconfig-ot, amíg nem tudja, mire van szüksége.
root #
emerge --ask sys-kernel/linux-firmware
Az így telepített firmware fájlok beépülnek a kernelbe.
A Navi10 kártyákhoz (RX 5700, RX 5700XT [FE]) a sys-kernel/linux-firmware legalább 20190923-as verziója szükséges.
Kernel
A telepítés legegyszerűbb módja, ha az "AMD GPU"-t választja modulnak (M), és nem tartalmazza az initramfs-ben. Ez egy kicsit később tölti be az illesztőprogramot, amint az udev aktiválódik, és ebben az esetben a firmware-t soha nem kell manuálisan kezelni. Ellenkező esetben figyelmesen olvassa el az alábbi részt a firmware-ről.
A fent említett grafikus lapkakészletekhez állítsa be a következő kernelopciókat:
Processor type and features ---> [*] MTRR (Memory Type Range Register) support Search for <code>CONFIG_MTRR</code> to find this item. Memory Management options ---> [*] Memory hotplug Search for <code>CONFIG_MEMORY_HOTPLUG</code> to find this item. ---> [*] Allow for memory hot remove Search for <code>CONFIG_MEMORY_HOTREMOVE</code> to find this item. [*] Device memory (pmem, HMM, etc...) hotplug support Search for <code>CONFIG_ZONE_DEVICE</code> to find this item. [*] Unaddressable device memory (GPU memory, ...) Search for <code>CONFIG_DEVICE_PRIVATE</code> to find this item. Device Drivers ---> Graphics support ---> <*/M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) Search for <code>CONFIG_DRM</code> to find this item. ---> [*] Enable legacy fbdev support for your modesetting driver Search for <code>CONFIG_DRM_FBDEV_EMULATION</code> to find this item. < > ATI Radeon Search for <code>CONFIG_DRM_RADEON</code> to find this item. <M/*> AMD GPU Search for <code>CONFIG_DRM_AMDGPU</code> to find this item. [ /*] Enable amdgpu support for SI parts Search for <code>CONFIG_DRM_AMDGPU_SI</code> to find this item. (only needed for Southern Islands GPUs with the amdgpu driver) [ /*] Enable amdgpu support for CIK parts Search for <code>CONFIG_DRM_AMDGPU_CIK</code> to find this item. (only needed for Sea Islands GPUs with the amdgpu driver) ACP (Audio CoProcessor) Configuration ---> [*] Enable AMD Audio CoProcessor IP support Search for <code>CONFIG_DRM_AMD_ACP</code> to find this item. (only needed for APUs) Display Engine Configuration ---> [*] AMD DC - Enable new display engine Search for <code>CONFIG_DRM_AMD_DC</code> to find this item. [ /*] DC support for Polaris and older ASICs Search for <code>CONFIG_DRM_AMD_DC_PRE_VEGA</code> to find this item. (only needed for Polaris, Carrizo, Tonga, Bonaire, Hawaii) [ /*] AMD FBC - Enable Frame Buffer Compression Search for <code>CONFIG_DRM_AMD_DC_FBC</code> to find this item. [ /*] DCN 1.0 Raven family Search for <code>CONFIG_DRM_AMD_DC_DCN</code> to find this item. (only needed for Vega RX as part of Raven Ridge APUs) [ /*] DCN 3.0 family Search for <code>CONFIG_DRM_AMD_DC_DCN3_0</code> to find this item. (only needed for NAVI21/Sienna Cichlid GPUs with the amdgpu driver) [*] HSA kernel driver for AMD GPU devices Search for <code>CONFIG_HSA_AMD</code> to find this item. [*] Enable HMM-based shared virtual memory manager Search for <code>CONFIG_HSA_AMD_SVM</code> to find this item. <*/M> Sound card support Search for <code>CONFIG_SOUND</code> to find this item. ---> <*/M> Advanced Linux Sound Architecture Search for <code>CONFIG_SND</code> to find this item. ---> [*] PCI sound devices Search for <code>CONFIG_SND_PCI</code> to find this item. ---> HD-Audio ---> <*> HD Audio PCI Search for <code>CONFIG_SND_HDA_INTEL</code> to find this item. [ /*] Support initialization patch loading for HD-audio Search for <code>CONFIG_SND_HDA_PATCH_LOADER</code> to find this item. <*> Build whatever audio codec your soundcard needs codec support <*> Build HDMI/DisplayPort HD-audio codec support Search for <code>CONFIG_SND_HDA_CODEC_HDMI</code> to find this item. (2048) Pre-allocated buffer size for HD-audio driver Search for <code>CONFIG_SND_HDA_PREALLOC_SIZE</code> to find this item.
Néhány régebbi grafikus kártyát az amdgpu és a radeon kernel modul is támogat. Az AMDGPU használatakor ajánlatos kikapcsolni az ATI Radeon beállítást, hogy a radeon modul ne generálódjon le, vagy feketelistára kell tenni a radeon modult. (Újraindítás után ellenőrizze az lsmod | grep radeon segítségével, hogy a feketelistára tétel valóban működött-e). A két modul nem egyidejű betöltésre való, kivéve, a speciális rendszereknél, amelyek ezt igénylik, pl. multiseat konfigurációkhoz.
A hangkártya-támogatás menü opcióit csak akkor kell beállítani, ha a kártya támogatja a HDMI vagy DisplayPort-hangot, és ennek használata kívánatos. Az újabb kerneleken, ahol az Enable AMD Audio CoProcessor IP support megjelenik, ezt is be kell állítani.
Az AMDGPU a Display Core -val először a VEGA10 (GCN5.0) és RAVEN (DCN 1.0 -vel) GPUs/APUs számára valósult meg. A 4.17-es verzió előtti kernelek (kísérleti) DC-támogatással rendelkeznek a régebbi kártyákhoz (GCN1.1 és újabbak) az amdgpu.dc=1 parancssori paraméterrel, ami jobban működik, mint a régebbi radeon kernelmodul. Hasonlóképpen, ha a DC-t valamilyen okból ki kell kapcsolni, akkor az amdgpu.dc=0 paraméter használható a kernel parancssorban.
Lásd a radeon cikket a HDMI/DisplayPort-audió használatának további részleteiért.
Beépített firmware
A firmware-csomag amely telepítve lett egy korábbi szakaszban fájlokat biztosít a /lib/firmware/amdgpu -ban. (Volcanic Islands és a újabb kártyákhoz). Valamint/vagy a /lib/firmware/radeon (a Southern Islands és a Sea Island -hoz tartozó kártyákhoz). Az AMDGPU-nak hozzá kell férnie a megfelelő firmware-fájlokhoz, amikor betöltődik.
Ha az
amdgpu
modul betölthető kernelmodulként van fordítva (azaz a kernelkonfigurációban az AMDGPU M
értékre van állítva), a firmware-fájloknak elérhetőnek kell lenniük a betöltéskor. Különösen, ha a modult egy initrd/initramfs-ből töltik be, a kernel inicializálja a korai rendszerindítás során, ugyanúgy, mint amikor a modul közvetlenül a kernelbe van beépítve (azaz az amdgpu a kernelkonfigurációban *
-ra van állítva). Ahhoz, hogy a firmware-fájlok elérhetőek legyenek ebben a szakaszban, vagy szerepelniük kell az initrd/initramfs-ben (amelyet a rendszerbetöltőnek kell betöltenie, például a GRUB-nak), vagy közvetlenül a kernelképben kell szerepelniük.Device Drivers ---> Generic Driver Options ---> Firmware loader ---> [*] Firmware loading facility Search for <code>CONFIG_FW_LOADER</code> to find this item. (amdgpu/<YOUR-MODEL>.bin or radeon/<YOUR-MODEL>.bin) External firmware blobs to build into the kernel binary Search for <code>CONFIG_EXTRA_FIRMWARE</code> to find this item. (/lib/firmware) Firware blobs root directory Search for <code>CONFIG_EXTRA_FIRMWARE_DIR</code> to find this item.
sys-kernel/genkernel > 4.0 esetén könnyen lehetséges, hogy meghatározott firmware fájlokat beépítsünk az initramfs-be. Tekintse meg a genkernel cikk firmware betöltése szakaszát. Hasonlóképpen a Dracut segítségével is könnyen lehet fájlokat hozzáadni a képhez.
A kernel 4.19.9[8] (2018. december) sikeres indításához az itt felsoroltaktól eltérő (régebbi) firmware-fájlokra van szükség. Minden jelenlegi kernel esetében ajánlott mindig megbizonyosodni arról, hogy a sys-kernel/linux-firmware frissítve van-e.
Abban az esetben, ha a firmware-t bele kell foglalni a kernelbe vagy egy initramfs-be, és ha a savedconfig USE jelölőzászló használva van a sys-kernel/linux-firmware fájlhoz, akkor győződjön meg arról, hogy a savedconfig konfigurációs fájl a firmware-fájlok megváltozott készletével is frissül (mint a fent említett 2018-as változás). Építse be az összes újonnan hozzáadott fájlt a kernel konfigurációs fájljába a firmware-sorban, majd fordítsa újra és telepítse az új kernelképet. Ellenkező esetben valószínűleg a rendszerindítás üres képernyővel meghiúsul és firmware-betöltési hibák jelennek meg a kernelnaplóban.
Fontos, hogy tartalmazza az összes firmware-blobot (zárt forráskódú bináris illesztőprogramot), amelyre az illesztőprogramnak szüksége van. A szükséges blobok meghatározhatja a felfedezés által, vagy ha ismeri a kártyamodelljét, akkor a következő szakaszban található táblázat segítségével határozhatja meg.
Annak felderítése, hogy melyik firmware-blobokra van szükség
Abban az esetben, ha nem biztos abban, hogy mely blobokra van szükség, a próba- és hibamódszer gyakran vezet sikerhez. Egy többlépcsős folyamatban egy alap indítható rendszer is elegendő lehet a szükséges információk megszerzéséhez: A hiányzó firmware-t a dmesg amdgpu hibája jelzi, amely segít azonosítani a szükséges firmware fájlokat.
Ez a módszer firmware-fájlok nélkül nagy valószínűséggel üres képernyőt eredményez, mivel az AMDGPU illesztőprogram nem működik megfelelően firmware nélkül. Egy nagyon alapvető módszer a szükséges információk megszerzéséhez, ha begépeljük, a dmesg parancsot és elmentjük a kimenetét egy fájlba, amely az AMDGPU meghajtó használata nélkül elemezhető újraindításkor. Jobb választás lehet az összes firmware szakaszos belefoglalása, az
amdgpu/*
-ba, mivel a dmesg általában azt mutatja, hogy melyik firmware-t töltötték be a rendszermagban beállított CONFIG_GENTOO_PRINT_FIRMWARE_INFO=y
-hoz kötve, vagy azt mutatja meg, hogy melyik másik framebuffer illesztőprogram használata lett kikényszerítve (például vesafb vagy efifb).root #
dmesg -t | grep amdgpu | grep firmware
amdgpu 0000:07:00.0: Direct firmware load for amdgpu/green_sardine_sdma.bin failed with error -2 [drm:sdma_v4_0_early_init] *ERROR* sdma_v4_0: Failed to load firmware "amdgpu/green_sardine_sdma.bin" amdgpu 0000:07:00.0: Direct firmware load for amdgpu/green_sardine_asd.bin failed with error -2
root #
dmesg -t | grep amdgpu | grep firmware
Loading firmware: amdgpu/green_sardine_sdma.bin Loading firmware: amdgpu/green_sardine_asd.bin Loading firmware: amdgpu/green_sardine_ta.bin Loading firmware: amdgpu/green_sardine_pfp.bin Loading firmware: amdgpu/green_sardine_me.bin Loading firmware: amdgpu/green_sardine_ce.bin Loading firmware: amdgpu/green_sardine_rlc.bin Loading firmware: amdgpu/green_sardine_mec.bin Loading firmware: amdgpu/green_sardine_dmcub.bin Loading firmware: amdgpu/green_sardine_vcn.bin
A következő csak akkor működik, ha a sys-kernel/linux-firmware telepítve van, és a szükséges (de a fenti példában hiányzó) firmware valóban elérhető. Nagyon új grafikus kártyáknál a firmware az instabil csomagban szerepelhet, ami a
~
segítségével telepíthető az ACCEPT_KEYWORDS-ben. Például az ~amd64
, mint az ACCEPT_KEYWORDS="~amd64" emerge --ask sys-kernel/linux-firmware vagy hozzáadva az /etc/portage/package.accept_keywords fájlhoz.Az AMDGPU firmware-fájlok elnevezése szerint minden, a GPU-modell kódnevével kezdődő fájl a megfelelő firmware-blob. A fenti példában a kódnév "Green Sardine". Így a green_sardine
parancsot keresve megkapjuk a szükséges listát a CONFIG_EXTRA_FIRMWARE számára:
user $
ls /lib/firmware/amdgpu/green_sardine*.bin | sed 's/\/lib\/firmware\///' | echo $(cat)
amdgpu/green_sardine_asd.bin amdgpu/green_sardine_ce.bin amdgpu/green_sardine_dmcub.bin amdgpu/green_sardine_me.bin amdgpu/green_sardine_mec2.bin amdgpu/green_sardine_mec.bin amdgpu/green_sardine_pfp.bin amdgpu/green_sardine_rlc.bin amdgpu/green_sardine_sdma.bin amdgpu/green_sardine_ta.bin amdgpu/green_sardine_vcn.bin
A genkernel használata esetén nézze meg az ott található firmware-betöltési részt. A Dracut használata esetén olvassa el a Fájlok hozzáadása a képhez részt.
Firmware-blobok egy ismert kártyamodellhez
Ha tudja, milyen kártyamodellje van, akkor ez a rész megmondja, hogy mely zárt forráskódú bináris illesztőprogramokra (angolul blob -ok ra) van szüksége.
Az amdgpu/<ÖN-MODELLJE>.bin
vagy a radeon/<ÖN-MODELLJE>.bin
fájlokat le kell cserélni a lapkakészlet nevével együtt megadott fájlnevek teljes listájára az alábbi táblázatban, szóközzel elválasztva. Az echo segítségével bontsa ki a fájlneveket. Például a Volcanic Islands/TONGA esetén futtassa:
user $
echo amdgpu/tonga_{ce,k_smc,mc,me,mec2,mec,pfp,rlc,sdma1,sdma,smc,uvd,vce}.bin
amdgpu/tonga_ce.bin amdgpu/tonga_k_smc.bin amdgpu/tonga_mc.bin amdgpu/tonga_me.bin amdgpu/tonga_mec2.bin amdgpu/tonga_mec.bin amdgpu/tonga_pfp.bin amdgpu/tonga_rlc.bin amdgpu/tonga_sdma1.bin amdgpu/tonga_sdma.bin amdgpu/tonga_smc.bin amdgpu/tonga_uvd.bin amdgpu/tonga_vce.bin
Majd a amdgpu/tonga_ce.bin amdgpu/tonga_k_smc.bin amdgpu/tonga_mc.bin amdgpu/tonga_me.bin amdgpu/tonga_mec2.bin amdgpu/tonga_mec.bin amdgpu/tonga_pfp.bin amdgpu/tonga_rlc.bin amdgpu/tonga_sdma1.bin amdgpu/tonga_sdma.bin amdgpu/tonga_smc.bin amdgpu/tonga_uvd.bin amdgpu/tonga_vce.bin
lesz az a karakterlánc, amit be kell helyezni a kernel konfigurációjába.
Miután kibontotta a firmware fájlneveket a következő táblázatból, és átmásolta azokat a kernelkonfigurációba, mentse el a konfigurációt. Majd fordítsa le és telepítse az új kernelt és modulokat.
Lapkakészlet neve | Firmware |
---|---|
CAPE VERDE | radeon/verde_{ce,mc,me,pfp,rlc,smc}.bin radeon/TAHITI_{uvd,vce}.bin |
PITCAIRN | radeon/pitcairn_{ce,mc,me,pfp,rlc,smc,k_smc}.bin radeon/TAHITI_{uvd,vce}.bin |
TAHITI | radeon/tahiti_{ce,mc,me,pfp,rlc,smc,uvd,vce}.bin |
OLAND | amdgpu/oland_{uvd,smc,rlc,pfp,me,mc,ce}.bin |
HAINAN | radeon/hainan_{ce,mc,me,pfp,rlc,smc}.bin radeon/TAHITI_uvd.bin |
BONAIRE | radeon/bonaire_{ce,k_smc,mc,me,mec,pfp,rlc,sdma1,sdma,smc,uvd,vce}.bin |
KABINI | radeon/kabini_{ce,me,mec,pfp,rlc,sdma1,sdma,uvd,vce}.bin |
KAVERI | radeon/kaveri_{ce,me,mec2,mec,pfp,rlc,sdma1,sdma,uvd,vce}.bin |
HAWAII | amdgpu/hawaii_{ce,k_smc,mc,me,mec,pfp,rlc,sdma,sdma1,smc,uvd,vce}.bin |
MULLINS | radeon/mullins_{ce,me,mec,pfp,rlc,sdma1,sdma,uvd,vce}.bin |
CARRIZO | amdgpu/carrizo_{ce,me,mec2,mec,pfp,rlc,sdma1,sdma,uvd,vce}.bin |
FIJI | amdgpu/fiji_{ce,mc,me,mec2,mec,pfp,rlc,sdma1,sdma,smc,uvd,vce}.bin |
TONGA | amdgpu/tonga_{ce,k_smc,mc,me,mec2,mec,pfp,rlc,sdma1,sdma,smc,uvd,vce}.bin |
TOPAZ | amdgpu/topaz_{ce,mc,me,mec2,mec,pfp,rlc,sdma1,sdma,smc}.bin |
STONEY | amdgpu/stoney_{ce,me,mec,pfp,rlc,sdma,uvd,vce}.bin |
POLARIS10 | amdgpu/polaris10_{ce,ce_2,k_smc,k2_smc,k_mc,mc,me,me_2,mec2,mec2_2,mec,mec_2,pfp,pfp_2,rlc,sdma1,sdma,smc,smc_sk,uvd,vce}.bin |
POLARIS11 | amdgpu/polaris11_{ce,k_smc,k2_smc,k_mc,mc,me,mec2,mec,pfp,rlc,sdma1,sdma,smc,smc_sk,uvd,vce}.bin |
POLARIS12 | amdgpu/polaris12_{ce,ce_2,k_mc,k_smc,mc,me,me_2,mec,mec2,mec2_2,mec_2,pfp,pfp_2,rlc,sdma,sdma1,smc,uvd,vce}.bin |
VEGA10 | amdgpu/vega10_{acg_smc,asd,ce,gpu_info,me,mec,mec2,pfp,rlc,sdma,sdma1,smc,sos,uvd,vce}.bin |
RAVEN | amdgpu/raven_{asd,ce,gpu_info,me,mec,mec2,pfp,rlc,sdma,vcn}.bin |
VEGA12 | amdgpu/vega12_{asd,ce,gpu_info,me,mec,mec2,pfp,rlc,sdma,sdma1,smc,sos,uvd,vce}.bin |
RENOIR | amdgpu/renoir_{asd,ce,dmcub,gpu_info,me,mec2,mec,pfp,rlc,sdma,ta,vcn}.bin |
CEZANNE | amdgpu/green_sardine_{asd,ce,dmcub,me,mec2,mec,pfp,rlc,sdma,ta,vcn}.bin |
REMBRANDT | amdgpu/yellow_carp_{asd,ce,dmcub,me,mec2,mec,pfp,rlc,sdma,ta,toc,vcn}.bin |
NAVI10 | amdgpu/navi10_{asd,ce,gpu_info,me,mec2,mec,pfp,rlc,sdma1,sdma,smc,sos,ta,vcn}.bin |
NAVI14 | amdgpu/navi14_{asd,ce,ce_wks,gpu_info,me,mec2,mec2_wks,mec,mec_wks,me_wks,pfp,pfp_wks,rlc,sdma1,sdma,smc,sos,ta,vcn}.bin |
NAVI21 | amdgpu/sienna_cichlid_{ce,dmcub,me,mec2,mec,pfp,rlc,sdma,smc,sos,ta,vcn}.bin |
NAVI22 | amdgpu/navy_flounder_{ce,me,mec2,rlc,smc,ta,dmcub,mec,pfp,sdma,sos,vcn}.bin |
NAVI23 | amdgpu/dimgrey_cavefish_{ce,me,mec2,rlc,smc,ta,dmcub,mec,pfp,sdma,sos,vcn}.bin |
NAVI24 | amdgpu/beige_goby_{ce,ta,rlc,sos,dmcub,smc,sdma,mec,mec2,pfp,vcn,me}.bin |
NAVI31 | amdgpu/gc_11_0_0_{imu,pfp,me,rlc,mec,mes,mes1,mes_2}.bin amdgpu/psp_13_0_0_{sos,ta}.bin amdgpu/smu_13_0_0.bin amdgpu/dcn_3_2_0_dmcub.bin amdgpu/sdma_6_0_0.bin amdgpu/vcn_4_0_0.bin |
NAVI32 | amdgpu/dcn_3_2_0_dmcub.bin amdgpu/gc_11_0_3_{imu,me,mec,mes1,mes_2,pfp,rlc}.bin amdgpu/psp_13_0_10_{sos,ta}.bin amdgpu/sdma_6_0_3.bin amdgpu/smu_13_0_10.bin amdgpu/vcn_4_0_0.bin |
X11 illesztőprogram
Emerge
A portage a VIDEO_CARDS USE_EXPAND változót használja a különféle grafikus kártyák támogatására a csomagokban. Ha a VIDEO_CARDS-t amdgpu radeonsi
-ra állítja (lásd fentebb a jellemzőmátrix részt), és arra kéri a portage-et, hogy frissítse a megváltozott USE jelölőzászlókat a @world beállításával, akkor behúzza a megfelelő illesztőprogramot:
VIDEO_CARDS="amdgpu radeonsi"
Az
amdgpu
által támogatott összes AMD videokártyához a video_cards_radeonsi
szükséges a media-libs/mesa által biztosított OpenGL támogatás engedélyezéséhez. Ez kemény függőséget ad az x11-libs/libdrm-hez a video_cards_radeon
engedélyezésével, amely az /etc/portage/package.use fájlon keresztül kielégíthető, ha a régi radeon
kernel-illesztőprogram támogatása nem kívánatos.root #
emerge --ask --deep --changed-use @world
A rendszernek most fel kell készülnie az amdgpu használatára a következő újraindítás után.
Energiagazdálkodás
Ez a rész csak az újabb AMDGPU dinamikus energiagazdálkodási (Dynamic Power Management - DPM) módszereket fedi le (a Radeon HD 2000 sorozattól / r600-tól kezdve). Régebbi dynpm és profile metódusok megtalálhatók a radeon wiki oldalán.
A dinamikus energiagazdálkodás (Dynamic Power Management - DPM) egy olyan technika, amely lehetővé teszi a meghajtó számára, hogy dinamikusan állítsa be a mag órajel-frekvenciáját, a memória órajel-frekvenciáját és a feszültségszinteket az aktuális GPU-igény alapján. A 3.13-as kernel óta a DPM alapértelmezés szerint engedélyezve van az AMD hardverek többségén.[9]
Az AMDGPU támogatja a PowerPlay profilokat. Ezek a profilok felváltották a power_dpm_state
értéket az újabb hardvereken.
A következő szekciók feltételezik, hogy a card0 azok a GPU-felhasználók, amelyet módosítani szeretnének. Azonosítsa a megfelelő kártyaszámot a /sys/class/drm/ fájlban, és ennek megfelelően módosítsa a parancsokat.
Ellenőrizze az (eszközökhöz tartozó) sysfs könyvtárnak a tartalmát, annak megállapításához, hogy a rendszer PowerPlay-t használ-e:
user $
ls /sys/class/drm/card0/device/pp_*
Minden pp_
előtaggal visszaadott fájl azt jelzi, hogy a PowerPlay-t az illesztőprogramok valósítják meg.
A 'fájlok' a /sys/class/drm/card0/device/ könyvtárban alacsony szintű grafikus API-kat tesznek közzé. Tartalmuk megváltoztatása speciális parancsműveleteket igényel, és visszavonhatatlanul károsíthatja a rendszer hardverét.[10]
DPM és PowerPlay funkciók engedélyezése
DPM
A következő kernelparaméterrel kifejezetten engedélyezhető (1) vagy letiltható (0) DPM. Az alapértelmezett érték -1 (auto)[11].
amdgpu.dpm=1
PowerPlay tulajdonság elfedése
Úgy tűnik, hogy a DPM engedélyezése a PowerPlay engedélyezését is lehetővé teszi, ha támogatott, mivel az
amdgpu.powerplay
kernelparamétert a 4.5-ös kernel óta nem dokumentálták[12].A PowerPlay szolgáltatásmaszk kernel paramétere felülírja a GPU megjelenítési jellemzőit. Fel kell oldani a hozzáférést az órajelek és a feszültségek beállításához a sysf-ben. A maszk 32 bitből áll, jelenleg 20 szolgáltatás van megvalósítva[13]. Az alapértelmezett a stabil megjelenítési jellemzők jelenlegi készlete[14].
* @PP_SCLK_DPM_MASK: Dynamic adjustment of the system (graphics) clock.
* @PP_MCLK_DPM_MASK: Dynamic adjustment of the memory clock.
* @PP_PCIE_DPM_MASK: Dynamic adjustment of PCIE clocks and lanes.
* @PP_SCLK_DEEP_SLEEP_MASK: System (graphics) clock deep sleep.
* @PP_POWER_CONTAINMENT_MASK: Power containment.
* @PP_UVD_HANDSHAKE_MASK: Unified video decoder handshake.
* @PP_SMC_VOLTAGE_CONTROL_MASK: Dynamic voltage control.
* @PP_VBI_TIME_SUPPORT_MASK: Vertical blank interval support.
* @PP_ULV_MASK: Ultra low voltage.
* @PP_ENABLE_GFX_CG_THRU_SMU: SMU control of GFX engine clockgating.
* @PP_CLOCK_STRETCH_MASK: Clock stretching.
* @PP_OD_FUZZY_FAN_CONTROL_MASK: Overdrive fuzzy fan control.
* @PP_SOCCLK_DPM_MASK: Dynamic adjustment of the SoC clock.
* @PP_DCEFCLK_DPM_MASK: Dynamic adjustment of the Display Controller Engine Fabric clock.
* @PP_OVERDRIVE_MASK: Over- and under-clocking support.
* @PP_GFXOFF_MASK: Dynamic graphics engine power control.
* @PP_ACG_MASK: Adaptive clock generator.
* @PP_STUTTER_MODE: Stutter mode.
* @PP_AVFS_MASK: Adaptive voltage and frequency scaling.
* @PP_GFX_DCS_MASK: GFX Async DCS.
Határozza meg az aktuális rendszermaszkot:
user $
printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask)))"
amdgpu.ppfeaturemask=0x0007bfff
A funkciók megváltoztathatók a kernel paraméterének rendszerindításkor történő beállításával.
amdgpu.ppfeaturemask=0x0007bfff
Az összes 32 bit (
0xffffffff
) beállítása nem ajánlott, mivel ez alapértelmezés szerint engedélyezi a potenciálisan instabil funkciókat.A funkciók engedélyezése vagy letiltása a szándékuk megértése nélkül hardverkárosodáshoz vagy adatvesztéshez vezethet.
Konfiguráció
Az utasítások némelyike közvetlenül kapcsolódik a hardverhez, és visszafordíthatatlanul károsíthatja az eszközt. Végrehajtás előtt olvassa el a parancsokat.
Az AMDGPU a hardver konfigurálását exponált API-ken keresztül kezeli, a /sys/class/drm/card0/device/ könyvtárban található sysfs fájlok használatával. Az ebben a könyvtárban található fájlok az engedélyezett hardvertől és szolgáltatásoktól függenek. A fájlok egy részét a felhasználó biztonságosan elolvashatja cat
, less
vagy bármilyen más nem root szövegszerkesztő programmal. Bár sok fájl olyan bináris adatot ad ki, amely ember által nem olvasható.
Az órajelek és a feszültségek beállítása (alulhajtás/túlhajtás) a DPM és a PowerPlay API-k segítségével valósítható meg. A teljes dokumentáció a kernel.org webhelyen található, és a folytatás előtt át kell tekinteni.
Aktuális mutatók megtekintése
Az AMDGPU illesztőprogram egy sysfs API-t biztosít az aktuális GPU-mérő adatok lekéréséhez a gpu_metrics
fájlon keresztül, és egyidejűleg pillanatképet ad az összes érzékelőről. Ez magában foglalja a hőmérsékletet, a frekvenciát, a motorok kihasználtságát, az energiafogyasztást, a fojtószelep állapotát, a ventilátor sebességét és a processzormag statisztikáit (csak az APU-nál érhető el).
Egy olyan szkript segítségével elemezhető, mint az amdgpu_metrics.py
Funkciómaszk frissítése
Mielőtt bármilyen paramétert módosítani lehetne, a megfelelő szolgáltatásmaszkot be kell állítani egy kernelparaméterrel. Általában a PP_OVERDRIVE_MASK bit 0x4000 beállítása a rendszer aktuális maszkjával együtt elegendő a profil, az órajel és a feszültség értékeinek beállításához.
Határozza meg az új rendszermaszkot.
user $
printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))"
amdgpu.ppfeaturemask=0x0007ffff
Frissítse a kernel paramétert.
amdgpu.ppfeaturemask=0x0007ffff
Teljesítményprofilok
Az AMDGPU illesztőprogram egy sysfs API-t biztosít bizonyos tápellátással kapcsolatos paraméterek beállításához. A power_dpm_force_performance_level
fájl használható erre a célra. A profilok teljes leírása a kernel dokumentációjában található. Az alapértelmezett beállítás az "auto".
A teljesítményprofilt manuálisra kell állítani a teljesítményprofilok, órajelek és feszültségek módosításához.
Az aktuális profil megváltoztatásához:
root #
echo 'manual' > /sys/class/drm/card0/device/power_dpm_force_performance_level
Ezek a változtatások az újraindítás után nem maradnak meg. Nem tartósak.
Power állapotok
Az AMDGPU illesztőprogram egy sysfs API-t biztosít a teljesítményszintek közötti váltáshoz kapcsolódó heurisztikák beállításához egy energiaállapotban. Ehhez a pp_power_profile_mode
fájl szolgál. A profilok teljes leírása a kernel dokumentációjában található.
A támogatott profilok megtekintéséhez nézze meg a pp_power_profile_mode
fájl tartalmát. (A csillag * az aktuális profilt mutatja)
A parancs kimenete az adott hardvertől és kernel-illesztőprogramoktól függően változik.
user $
cat /sys/class/drm/card0/device/pp_power_profile_mode
PROFILE_INDEX(NAME) CLOCK_TYPE(NAME) FPS MinFreqType MinActiveFreqType MinActiveFreq BoosterFreqType BoosterFreq PD_Data_limit_c PD_Data_error_coeff PD_Data_error_rate_coeff 0 BOOTUP_DEFAULT : 0( GFXCLK) 0 5 1 0 4 800 4587520 -65536 0 1( SOCCLK) 0 5 1 0 1 0 3276800 -6553 -6553 2( MEMLK) 0 5 1 0 4 800 327680 -65536 0 1 3D_FULL_SCREEN : 0( GFXCLK) 0 5 1 0 4 650 4587520 -3276 -65536 1( SOCCLK) 0 5 1 0 1 0 655360 -6553 -6553 2( MEMLK) 0 5 4 850 4 800 327680 -65536 0 2 POWER_SAVING : 0( GFXCLK) 0 5 1 0 3 0 5898240 -65536 0 1( SOCCLK) 0 5 1 0 1 0 3407872 -6553 -6553 2( MEMLK) 0 5 1 0 3 0 1966080 -65536 0 3 VIDEO*: 0( GFXCLK) 0 5 1 0 4 500 4587520 -65536 0 1( SOCCLK) 0 5 1 0 1 0 3473408 -6553 -6553 2( MEMLK) 0 5 1 0 4 500 1966080 -65536 0 4 VR : 0( GFXCLK) 0 5 4 1000 1 0 3932160 0 0 1( SOCCLK) 0 5 1 0 1 0 655360 -6553 -6553 2( MEMLK) 0 5 1 0 4 800 327680 -65536 0 5 COMPUTE : 0( GFXCLK) 0 5 4 1000 1 0 3932160 0 0 1( SOCCLK) 0 5 1 0 1 0 655360 -6553 -6553 2( MEMLK) 0 5 4 850 3 0 327680 -65536 -32768 6 CUSTOM : 0( GFXCLK) 0 5 1 0 4 800 4587520 -65536 0 1( SOCCLK) 0 5 1 0 1 0 3276800 -6553 -6553 2( MEMLK) 0 5 1 0 4 800 327680 -65536 0
Az energiaprofil frissítéséhez először állítsa át a teljesítmény módot kézire.
root #
echo 'manual' > /sys/class/drm/card0/device/power_dpm_force_performance_level
Majd frissítse a pp_power_profile_mode
elemet az előre meghatározott profil számával.
root #
echo '3' > /sys/class/drm/card0/device/pp_power_profile_mode
A teljesítményprofilok a pp_power_profile_mode
fájlba küldött parancsokkal módosíthatók. A parancs szintaxisa a profil indexszámával kezdődik, majd az óratípus számával, majd a kimenet minden oszlopához tartozó számmal.
Például az CUSTOM
teljesítményprofil GFXCLK
erősítő frekvenciájának megváltoztatásához 800-ról 500-ra.
root #
echo '6 0 0 5 1 0 4 500 4587520 -65536 0' > /sys/class/drm/card0/device/pp_power_profile_mode
Ezek a változtatások az újraindítás után nem maradnak meg. Nem tartósak.
Power szintek
Az AMDGPU illesztőprogram egy sysfs API-t biztosít az adott energiaállapothoz engedélyezett teljesítményszintek beállításához. Ehhez a pp_dpm_sclk
, pp_dpm_mclk
, pp_dpm_socclk
, pp_dpm_fclk
, pp_dpm_dcefclk
and pp_dpm_pcie
fájlokat használják. A profilok teljes leírása a kernel dokumentációjában található.
A pp_dpm_socclk
és pp_dpm_dcefclk
interfészek csak a Vega10 és újabb ASICs-okhoz érhetők el. A pp_dpm_fclk
interfész csak a Vega20 és újabb ASICs-okhoz érhető el.
A fájlok visszaolvasása megmutatja az energiaállapoton belül elérhető teljesítményszinteket és az ezekhez tartozó órainformációkat.
user $
cat /sys/class/drm/card0/device/pp_dpm_sclk
0: 500Mhz 1: 700Mhz * 2: 2765Mhz
user $
cat /sys/class/drm/card0/device/pp_dpm_mclk
0: 96Mhz * 1: 541Mhz 2: 675Mhz 3: 1094Mhz
Órajel és feszültség
Az AMDGPU illesztőprogramja egy sysfs API-t biztosít az órajelek és a feszültségek beállításához az egyes teljesítményszinteken egy teljesítményállapoton belül. A pp_od_clk_voltage
szolgál erre a célra. A profilok teljes leírása a kernel dokumentációjában található.
Határozza meg az aktuális értékeket.
user $
cat /sys/class/drm/card0/device/pp_od_clk_voltage
OD_SCLK: 0: 700Mhz 1: 2744Mhz OD_MCLK: 0: 97Mhz 1: 1094MHz OD_VDDGFX_OFFSET: 0mV OD_RANGE: SCLK: 500Mhz 3150Mhz MCLK: 674Mhz 1200Mhz
Itt a memóriavezérlő tényleges órajelei láthatók, nem pedig a DRAM-ok effektív órajelei.
Az órajelek és feszültségek frissítéséhez először állítsa át a teljesítmény módot manuálisra.
root #
echo 'manual' > /sys/class/drm/card0/device/power_dpm_force_performance_level
Majd minden beállításhoz írjon egy karakterláncot a fájlba. Kövesse a kernel dokumentációjában megadott szintaxist.
root #
echo 's 1 2410' > /sys/class/drm/card0/device/pp_od_clk_voltage
root #
echo 'm 1 1024' > /sys/class/drm/card0/device/pp_od_clk_voltage
Ha végzett, hajtsa végre a változtatásokat.
root #
echo 'c' > /sys/class/drm/card0/device/pp_od_clk_voltage
user $
cat /sys/class/drm/card0/device/pp_od_clk_voltage
OD_SCLK: 0: 700Mhz 1: 2410Mhz OD_MCLK: 0: 97Mhz 1: 1024MHz OD_VDDGFX_OFFSET: 0mV OD_RANGE: SCLK: 500Mhz 3150Mhz MCLK: 674Mhz 1200Mhz
Ezek a változások visszaállíthatók.
root #
echo 'r' > /sys/class/drm/card0/device/pp_od_clk_voltage
Ezek a változások nem maradnak meg újraindítás után.
Hibaelhárítás
Hibakereső eszközök
x11-apps/mesa-progs
Hasznos lehet az x11-apps/mesa-progs csomag telepítése, amely tartalmazza a glxgears és a glxinfo segédprogramokat.
app-misc/radeontop
Tekintse meg a GPU kihasználtságát mind a teljes aktivitás százalékában, mind az egyes blokkokban:
user $
radeontop
Collecting data, please wait.... radeontop 1.4, running on RAVEN bus 06, 120 samples/sec │ Graphics pipe 0.00% │ ─────────────────────────────────────────┼────────────────────────────────────── Event Engine 0.00% │ │ Vertex Grouper + Tesselator 0.00% │ │ Texture Addresser 0.00% │ │ Shader Export 0.00% │ Sequencer Instruction Cache 0.00% │ Shader Interpolator 0.00% │ │ Scan Converter 0.00% │ Primitive Assembly 0.00% │ │ Depth Block 0.00% │ Color Block 0.00% │ │ 67M / 2016M VRAM 3.35% │ 23M / 3063M GTT 0.76% │ 1.20G / 1.20G Memory Clock 100.00% │████████████████████████████████████████ 0.20G / 1.20G Shader Clock 16.67% │██████ │
A használatban lévő grafikus kártya azonosítása
Először győződjön meg arról, hogy a kernel a következő beállításokkal lett lefordítva:
Device Drivers ---> Graphics support ---> [*] VGA Arbitration Search for <code>CONFIG_VGA_ARB</code> to find this item. [*] Laptop Hybrid Graphics - GPU switching support Search for <code>CONFIG_VGA_SWITCHEROO</code> to find this item.
Ellenőrizze, hogy a különálló grafikus kártya fel lett-e ismerve:
user $
lspci -k
[...] 01:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Mars [Radeon HD 8670A/8670M/8750M] Subsystem: Lenovo Mars [Radeon HD 8670A/8670M/8750M] Kernel driver in use: radeon [...]
Azután, győződjön meg arról, hogy a /sys/kernel/debug/ elérési út sikeresen fel lett csatolva:
root #
findmnt debugfs
TARGET SOURCE FSTYPE OPTIONS /sys/kernel/debug debugfs debugfs rw,nosuid,nodev,noexec,relatime
Majd ellenőrizze, hogy a vga_switcheroo illesztőprogram sikeresen betöltődött-e, és ki tudja-e adni a következő értékeket:
root #
cat /sys/kernel/debug/vgaswitcheroo/switch
0:DIS: :DynOff:0000:01:00.0 1:IGD:+:Pwr:0000:00:02.0
Ennek a kimenetnek a szerkezete a következő:[15]:
Iterátor | ID | Aktív állapot | Power állapot | Eszköz ID (xxxx:xx:xx.x) |
---|---|---|---|---|
0 | DIS | inactive (denoted by the lack of a + symbol)
|
DynOff | 0000:01:00.0 |
1 | IGD | active (denoted by + symbol)
|
Pwr | 0000:00:02.0 |
A DIS
a diszkrét grafikus kártyát jelöli, amely inaktív, de jelenleg disconnected (le van választva) (DynOff
).
Az IGD
az integrált grafikus kártya, amely aktív (+
) és jelenleg használatban van (Pwr
).
Az állapot a következő paranccsal módosítható:
root #
echo "<some_parameter>" > /sys/kernel/debug/vgaswitcheroo/switch
Cserélje ki a <some_parameter>
értéket a következő paraméterek egyikére[16]:
Paraméter | Leírás |
---|---|
ON | Bekapcsolja a leválasztott GPU-t, ami jelenleg nem jelenít meg semmit és nem kapcsol kimenetet. |
IGD | Összeköti az integrált grafikus kártyát a kijelzővel. |
DIS | Összeköti a diszkrét grafikus kártyát a kijelzővel. |
OFF | Kikapcsolja a grafikus kártyát, amely jelenleg le van választva. |
DIGD | Egy X session belsejében: Sorba állítja az integrált grafikus kártyára való váltást az X szerver következő újraindításakor. |
DDIS | Inside of an X session: Queues a switch to the discrete graphics card to occur, when the X server is next restarted. |
A DRI_PRIME=1
környezeti változó használatával a különálló grafikus kártya egyenként is használható:
user $
DRI_PRIME=1 glxgears
Ezzel megnyílik egy X ablak forgó fogaskerekekkel.
Futtassa a háttérben, és ellenőrizze újra a vga_switcheroo
-t:
root #
cat /sys/kernel/debug/vgaswitcheroo/switch
0:DIS: :DynPwr:0000:01:00.0 1:IGD:+:Pwr:0000:00:02.0
Ezúttal a diszkrét grafikus kártya állapota DynPwr-re váltott, ami azt jelenti, hogy aktív és fut.
Egy másik indikátor a hőmérséklet-érzékelők ellenőrzésére szolgál. Ehhez sys-apps/lm-sensors szükséges:
user $
sensors
[...] radeon-pci-0100 Adapter: PCI adapter temp1: +42.0°C (crit = +120.0°C, hyst = +90.0°C) [...]
Amikor a
vga_switcheroo
megjeleníti a DynOff
állapotát, az sensors
N/A
-ként vagy valami másként jelenítik meg a hőmérsékletet, aminek lehet, hogy nincs értelme. Például: -128°C.A különálló grafikus kártya globális használatához beállíthatja a környezeti változót az /etc/environment fájlban:
DRI_PRIME=1
Alternatívaként exportálhatjuk a ~/.bashrc fájlba:
export DRI_PRIME=1
Vagy egyenként a parancs előtt, mint fent a glxgears használatával:
user $
DRI_PRIME=1 /usr/bin/chromium
user $
DRI_PRIME=1 /usr/bin/vlc
Prime szinkronizáció
Az x11-drivers/xf86-video-amdgpu illesztőprogram nem támogatja az elsődleges szinkronizálást. Ez szaggatást(tearing) okozhat az integrált GPU-hoz csatlakoztatott monitorokon, ha az AMG GPU van beállítva elsődleges GPU-ként. Az egyik lehetséges megoldás a modesetting illesztőprogram használata. Ehhez távolítsa el az amdgpu
elemet a VIDEO_CARDS változóból. Vagy használjon xorg konfigurációs fájlt a modesetting illesztőprogram kikényszerített használatára. Ennek ellenére más problémák is adódhatnak a modeseting illesztőprogram[17] kapcsán.
Section "Device"
Identifier "modesetting"
Driver "modesetting"
EndSection
Egy másik lehetséges megoldás, ha az integrált GPU-t állítjuk be elsődleges GPU-nak. Ez nem teszi lehetővé a Prime szinkronizálást. A szakadást ennek ellenére megakadályozzuk az AMD TearFree segítségével.
Ebben az esetben a DRI_PRIME=1
,VDPAU_DRIVER=radeonsi
(VDPAU-nak) és LIBVA_DRIVER_NAME=radeonsi
(VAAPI-nak) változókat kell használni azokon az alkalmazásokon, amelyeket az AMD GPU-n kell megjeleníteni.
Tartalék illesztőprogram
Ha másik gépünk nincs a weboldalak böngészésére a megoldások után, akkor az X elindítható a vesa vagy fbdev illesztőprogram segítségével 3D és 2D gyorsítás nélkül is.
VIDEO_CARDS="... vesa fbdev"
root #
emerge --ask --update --newuse --deep @world
Kernel
Régebbi kernelek
A régebbi kernelek, amelyek nem támogatják az AMDGPU illesztőprogramot, nem biztosítják az AMDGPU opciót. A VEGEA és újabb chipeknél nincs videokimenet DC (Display Code - megjelenítési kód) nélkül, ami először a vanília Kernel 4.15-ben került bele. Mindkét esetben egy meglehetősen friss kernel tudja biztosítani a szükséges illesztőprogramokat. Nagyon új AMD grafikus kártyákhoz és APU-hoz egy instabil (~ kulcsszóval jelölt) kernellel való próbálkozás biztosíthatja a szükséges kernelforrásokat.
AMD biztonságos memóriatitkosítás
Ha az AMDGPU nem töltődik be, vagy a képernyő lefagy, akkor lehet, hogy az AMDGPU modul nem kompatibilis az AMD biztonságos memóriatitkosítással (AMD Secure Memory Encryption - (SME)).
Az SME ideiglenesen letiltható a kernel parancssorában (a GRUB használatával, az /etc/default/grub fájlban vagy a GRUB_CMDLINE_LINUX részeként) a mem_encrypt=off hozzáadásával. Ha ez megoldja a problémát, akkor ez a végleges megoldás a rendszermag megfelelő konfigurálása.
Processor type and features ---> [*] AMD Secure Memory Encryption (SME) support Search for <code>CONFIG_AMD_MEM_ENCRYPT</code> to find this item. [ ] Activate AMD Secure Memory Encryption (SME) by default Search for <code>CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT</code> to find this item.
Az AMD_MEM_ENCRYPT engedélyezve maradhat, de vagy az AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT paramétert be kell állítani, vagy a kernel mem_encrypt=off parancssori paraméterét kell használni a memóriatitkosítás kikapcsolásához. Hasonlóképpen a mem_encrypt=on paranccsal a SME aktiválható a nem érintett rendszereken a kernel parancssorában, vagy még tartósabban a GRUB_CMDLINE_LINUX használatával a /etc/default/grub fájlban a GRUB számára.
AMDGPU/RadeonSI illesztőprogramok nem működnek
Ha a grafikus kártya nem támogatja az amdgpu
és az radeonsi
egyedüli beépítését a VIDEO_CARDS-ba, akkor próbálja meg hozzáadni a radeon
elemet a make.conf fájlban a video_cards definíciójánál. Például:
VIDEO_CARDS="amdgpu radeonsi radeon"
Az értékek beállítása után frissítse a rendszert, hogy a változtatások érvénybe lépjenek:
root #
emerge --ask --changed-use --deep @world
Teljes képernyős ablakok rosszul működnek
A sys-devel/llvm telepített verziója túl régi lehet. Próbáljon ki telepíteni egy instabil/tesztelő verziót.
A GPU neve ID-ként jelenik meg
Az x11-libs/libdrm telepített verziója túl régi lehet. Próbáljon ki egy Try emerging an instabil/tesztelő verziót. Ez is javíthatja a teljesítményt.
Az Xrandr nem lát HDMI portot hibrid rendszerrel
AMD iGPU-val és dGPU-val rendelkező hibrid rendszeren az xrandr csak az eDP portot tudja megjeleníteni, a HDMI portot nem:
user $
xrandr
Screen 0: minimum 320 x 200, current 1920 x 2160, maximum 16384 x 16384 eDP connected primary 1920x1080+0+1080 (normal left inverted right x axis y axis) 382mm x 215mm 1920x1080 144.03*+ 60.01 1680x1050 144.03 1280x1024 144.03 1440x900 144.03 1280x800 144.03 1280x720 144.03 1024x768 144.03 800x600 144.03 640x480 144.03
Mivel az Xorg napló azt mutatja, hogy a portot észlelték, és a monitor EDID dekódolása probléma nélkül megtörtént:
user $
cat /var/log/Xorg.0.log
[...] [ 8.282] (II) AMDGPU(G0): Output HDMI-A-1-0 has no monitor section [ 8.294] (II) AMDGPU(G0): EDID for output HDMI-A-1-0 [ 8.295] (II) AMDGPU(G0): Manufacturer: DEL Model: a11e Serial#: 843731010 [...] [ 8.295] (II) AMDGPU(G0): Supported established timings: [ 8.295] (II) AMDGPU(G0): 720x400@70Hz [...] [ 8.295] (II) AMDGPU(G0): EDID (in hex): [ 8.295] (II) AMDGPU(G0): 00ffffffffffff0010ac1ea142504a32 [ 8.295] (II) AMDGPU(G0): 0c1f010380351e78ea05f5a557529c27 [...] [ 8.296] (II) AMDGPU(G0): Printing probed modes for output HDMI-A-1-0 [ 8.296] (II) AMDGPU(G0): Modeline "1920x1080"x60.0 148.50 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync (67.5 kHz eP) [...]
Ha nem, akkor az más kérdés, és először azzal kell foglalkozni.
Az Xrandr-nek 2 szolgáltatója lenne, mivel 2 GPU van:
user $
xrandr --listproviders
Providers: number : 2 Provider 0: id: 0x54 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 4 outputs: 1 associated providers: 1 name:Unknown AMD Radeon GPU @ pci:0000:07:00.0 Provider 1: id: 0x84 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 5 outputs: 1 associated providers: 1 name:Radeon RX 5500M @ pci:0000:03:00.0
And we need to link source with output:
user $
xrandr --setprovideroutputsource provider source
In provided example it would be this:
user $
xrandr --setprovideroutputsource 1 0
After this xrandr shows HDMI and can manipulate layout properly:
user $
xrandr
Screen 0: minimum 320 x 200, current 1920 x 2160, maximum 16384 x 16384 eDP connected primary 1920x1080+0+1080 (normal left inverted right x axis y axis) 382mm x 215mm 1920x1080 144.03*+ 60.01 [...] HDMI-A-1-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 527mm x 296mm 1920x1080 60.00*+ 50.00 59.94 [...]
Képernyő Tearing
Az egyik módszer a képernyőszaggatás (screen tearing) megelőzésére az Xorg-on az, hogy engedélyezzük a TearFree opciót X11-ben, így:
Section "OutputClass"
Identifier "AMDgpu"
MatchDriver "amdgpu"
Driver "amdgpu"
Option "TearFree" "true"
EndSection
Villogó és fehér képernyő
Erről a problémáról már beszámoltak a Gentoo fórumain: https://forums.gentoo.org/viewtopic-t-1160883.html.
A javasolt javítás az upstream szinten az sg_display modul paraméterének a következőképpen történő beállítása: amdgpu.sg_display=0
Alternatívaként alkalmazza a következő javítást a kernel forráskódjához: https://patchwork.freedesktop.org/patch/519023
Úgy tűnik, hogy a 6.1.4 és nagyobb verziószámú linux kernelekre vonatkozik.
Gyakori és szórványos összeomlások
Egyes felhasználók gyakori és látszólag véletlenszerű grafikus kártya összeomlásokat tapasztalhatnak az AMDGPU illesztőprogramok használata közben. A kernelnapló ellenőrzése sok különböző hibát mutathat, néhány gyakori hiba például: *ERROR* Waiting for fences timed out!
, és *ERROR* ring gfx timeout
. Ezt általában a grafikus eszköz/illesztőprogramok visszaállítása (reszetelése) követi.
Ezt a hardver nem szándékos túlhajtása okozhatja, akár az AMDGPU illesztőprogramja, akár az eszköz firmware-je által. A következő lépések megmutatják, hogyan ellenőrizhető a rendszer aktuális konfigurációja és állapota. Ha eltéréseket talál, tekintse meg a fenti Power management részt az értékek módosításának részleteiért.
Ez egy konkrét példa, amelyet egy felhasználó fedezett fel. Az alábbi példák feltételezik, hogy a GPU a
CARD0
, és a kimenet egy Radeon™ RX 6650 XT EAGLE 8G-re vonatkozik.Ez csak azokra a hardverekre vonatkozik, amelyeknél engedélyezve van a dinamikus energiagazdálkodás (DPM). A DPM alapértelmezés szerint be van kapcsolva a legtöbb modern AMDGPU-k esetén.
Kezdje a grafikus kártya specifikációinak keresésével egy adatbázis, például a TechPowerUp GPU adatbázis vagy a gyártó specifikációi segítségével.
Alap órajel | Játék órajel | Boost órajel | Effektív memória órajel | Effective VRAM busz | Sávszélesség | |
---|---|---|---|---|---|---|
Specifikáció | 2055 MHz | 2410 MHz | 2635 MHz | 2190 MHz (17.5 Gbps) | 128-bit | 280.3 GBps |
Ebben a példában:
- Az Alap órajel - Az alapértelmezett órajel.
- A játék órajel - A tipikus játékalkalmazások futtatásakor várható órajel.
- A boost órajel - A maximális órajel sebesség sorozatos (ritka) munkaterhelés futtatásakor.
- A Memória órajel - A memória effektív (tényleges) órajele. Az alap DRAM órajel szorozva a csatornák számával.
- A VRAM busz - Az adatbusz tényleges bitszélessége.
- A "Sávszélesség" - Az adatátvitel sebessége (data_rate * bus_width / 8).
Navigáljon az eszköz AMDGPU sysfs könyvtárába.
user $
cd /sys/class/drm/card0/device/
Megtekintheti a pp_dpm_sclk
és a pp_dpm_mclk
fájlokban felsorolt mag és memória órajeleket. A rendszer ezeket az értékeket használja az órajelek automatikus beállítására különböző terhelések esetén. Az aktuális rátát csillag jelöli.
user $
cat pp_dpm_sclk
0: 500Mhz 1: 700Mhz * 2: 2765Mhz
user $
cat pp_dpm_mclk
0: 96Mhz * 1: 541Mhz 2: 675Mhz 3: 1094Mhz
Ellenőrizze, hogy az SCLK
motorórajel a hardver határain belül van-e. Ebben az esetben a minimális frekvencia 500 MHz, terhelés alatt 700 MHz-ig, majd maximum 2765 MHz-ig növekszik.
Ellenőrizze, hogy az OD_MCLK
DRAM memória órája a hardver határain belül van-e. Ebben az esetben a minimális jelzett sebesség 96 MHz, a maximális pedig 1094 MHz.
Ez az eszköz GDDR6-ot (G6) használ, amely kétcsatornás kettős adatátviteli sebesség (DDR) memória[18][19][20].
- A maximális adatátviteli sebesség átvitelben másodpercenként = óraciklusok másodpercenként * átvitel órajelenként * adatfrekvencia szorzó. 1094 MHz * 2 T (dupla adatátviteli sebesség) * 8 = 17504 MT/s. Ez 17.5 Gbps-nak felel meg.
- A busz szélessége chipenként és csatornánként értendő. Ebben az esetben 4 fizikai IC van a kártyán[21]. Mindegyik csatornánként 16 bit I/O szélességgel. 16 bit * 2 csatorna * 4 IC = 128 bit teljes effektív VRAM buszszélesség.
- A sávszélesség = átvitel másodpercenként * busz szélessége. 17504 MT/s * 128 bit/T = 2240512 Mb/s (280064 MB/s).
Most tekintse meg a túlhajtási (többszöri) órajelet és a feszültségkonfigurációt a pp_od_clk_voltage
fájlban.
user $
cat pp_od_clk_voltage
OD_SCLK: 0: 700MHz 1: 2744MHz OD_MCLK: 0: 97MHz 1: 1094MHz OD_VDDGFX_OFFSET: 0mV OD_RANGE: SCLK: 500MHz 3150MHz MCLK: 674MHz 1200MHz
Az overdrive (boost) motor SCLK tartománya úgy van beállítva, hogy a motor órajele 500 MHz és 3150 MHz közötti értékeket engedjen meg. Diszkrét lépésekkel 700 MHz-en és 2744 MHz-en.
Az túlhajtás (boost) memória MCLK tartománya úgy van beállítva, hogy 674 MHz és 1200 MHz közötti értékeket engedjen meg a tényleges memória órajel számára (effektív 1348 MHz és 2400 MHz). Diszkrét lépésekkel 97 MHz-en és 1094 MHz-en.
Az OD_SCLK, OD_MCLK, és OD_RANGE közötti kapcsolat nincs megfelelően dokumentálva. A fent bemutatott értékek a kérdéses rendszeren voltak.
Az összes információ kombinálása, valamint a jelentett és a megadott értékek összehasonlítása eltérést mutat az órajelek között, és néhány jóval meghaladja az ajánlott értékeket. Ezeknek a határoknak a módosítása (az alapbeállítások alatti órajel) nulla összeomlást eredményezett, és javult a termikus és FPS teljesítmény.
Base Clock | Game Clock | Boost Clock | Effective Memeory Clock | Effective VRAM Bus | Bandwidth | |
---|---|---|---|---|---|---|
Specification | 2055 MHz | 2410 MHz | 2635 MHz | 2190 MHz (17.5 Gbps) | 128-bit | 280.3 GBps |
sysfs | - MHz | 2765 MHz | 2744/3150 MHz | 2400 MHz (19.2 Gbps) | 128-bit | 307.2 GBps (@1200 MHz) |
Hiányzik a kurzor az RDNA3 grafikus processzorokon
A hardveres kurzor nem működik új GPU-n. A kurzor láthatóvá tételéhez hozzá kell adni a szoftveres kurzor opciót a 20-amdgpu.conf fájlhoz.
Section "Device"
Identifier "AMD"
Driver "amdgpu"
Option "SWCursor" "True"
EndSection
További olvasnivaló a témában
- AMDGPU-PRO — the next generation closed source graphics component that operates on top of the open source AMDGPU drivers for newer AMD/ATI Radeon graphics cards.
- AMDVLK — an open-source Vulkan driver for AMD Radeon™ graphics adapters on Linux
Külső források
Hivatkozások
- ↑ AMD previously called the microarchitecture Display Core (DC). GCN stands for Graphics Core Next and was introduced with the Radeon HD7000 series (GCN1.0). It was superseded by RDNA, short for Radeon DNA, introduced with the Radeon RX 5000 series (NAVI) in 2019.
- ↑ The actual Instruction Set Architecture (ISA) is defined by the Display Core Engine (DCE), which was superseded by Display Core Next (DCN), introduced with the Raven Ridge APUs (mobile Vega graphics core).
- ↑ Phoronix - Report: Ryzen "Raven Ridge" APU Not Using HBM2 Memory
- ↑ Phoronix - 25 More AMDGPU DC Patches, Mostly Focused On Raven DCN
- ↑ https://www.phoronix.com/scan.php?page=news_item&px=Radeon-RX-6900-XT
- ↑ https://cateee.net/lkddb/web-lkddb/DRM_AMD_DC_DCN3_0.html
- ↑ Linux kernel commit 39bdb32 with added firmware files to POLARIS10 and POLARIS11
- ↑ https://kernelnewbies.org/Linux_3.11#AMD_Radeon_experimental_dynamic_power_management_support
- ↑ https://www.kernel.org/doc/html/latest/gpu/amdgpu/thermal.html
- ↑ https://www.kernel.org/doc/html/latest/gpu/amdgpu/module-parameters.html
- ↑ https://www.phoronix.com/news/AMDGPU-PP-4.5-Steps
- ↑ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/amd/include/amd_shared.h
- ↑ https://www.kernel.org/doc/html/latest/gpu/amdgpu/module-parameters.html?highlight=ppfeaturemask
- ↑ https://github.com/torvalds/linux/blob/be8454afc50f43016ca8b6130d9673bdd0bd56ec/drivers/gpu/vga/vga_switcheroo.c#L653-L660
- ↑ https://help.ubuntu.com/community/HybridGraphics
- ↑ https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues/11
- ↑ https://www.micron.com/-/media/client/global/documents/products/technical-note/dram/tned03_gddr6.pdf
- ↑ http://monitorinsider.com/GDDR5X.html
- ↑ http://monitorinsider.com/GDDR6.html
- ↑ https://csstalker.gjisland.net/blog/archives/6848