AMDGPU

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page AMDGPU and the translation is 100% complete.

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:

  1. 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),
  1. 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.

Note
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

Note
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:

KERNEL A kernel konfigurálása AMD grafikához (Linux kernels 4.15 és újabb)
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.
Note
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.

Important
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.
KERNEL A firmware-t a kernelbe (4.18 és újabb) belerakni
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.
Note
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.
Important
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.

Note
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
Important
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
Note
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:

FILE /etc/portage/make.conf
VIDEO_CARDS="amdgpu radeonsi"
Note
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

Note
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.

Important
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.

Warning
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].

CODE Enable DPM
amdgpu.dpm=1

PowerPlay tulajdonság elfedése

Note
Ú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].

CODE kernel:root/drivers/gpu/drm/amd/include/amd_shared.h
* @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.

CODE A PowerPlay maszk beállítása
amdgpu.ppfeaturemask=0x0007bfff
Note
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.
Warning
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ó

Warning
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.

CODE kernel parameter: PowerPlay feature mask
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
Note
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)

Note
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
Note
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
Note
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
Note
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:

KERNEL Activate VGA Arbitration and Laptop Hybrid Graphics
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
Note
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)
[...]
Note
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:

FILE /etc/environment
DRI_PRIME=1

Alternatívaként exportálhatjuk a ~/.bashrc fájlba:

FILE /home/larry/.bashrc
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.

FILE /etc/X11/xorg.conf.d/force-modesetting.conf
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.

  • vesa a klasszikus BIOS rendszerekhez
  • fbdev az UEFI segítségével indított rendszerekhez
FILE /etc/portage/make.conf
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.

KERNEL
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:

FILE /etc/portage/make.conf
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:

FILE /usr/share/X11/xorg.conf.d/10-amdgpu.conf
Section "OutputClass"
	Identifier "AMDgpu"
	MatchDriver "amdgpu"
	Driver "amdgpu"
    Option "TearFree" "true"
EndSection

Villogó és fehér képernyő

Note
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.

Note
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.
Note
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.

Radeon™ RX 6650 XT EAGLE 8G
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.

Note
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.

Radeon™ RX 6650 XT EAGLE 8G
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.

FILE /etc/X11/xorg.conf.d/20-amdgpu.conf
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

  1. 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.
  2. 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).
  3. Phoronix - Report: Ryzen "Raven Ridge" APU Not Using HBM2 Memory
  4. Phoronix - 25 More AMDGPU DC Patches, Mostly Focused On Raven DCN
  5. Phoronix - AMD Navi 10 Firmware Finally Lands In The Linux-Firmware Tree
  6. https://www.phoronix.com/scan.php?page=news_item&px=Radeon-RX-6900-XT
  7. https://cateee.net/lkddb/web-lkddb/DRM_AMD_DC_DCN3_0.html
  8. Linux kernel commit 39bdb32 with added firmware files to POLARIS10 and POLARIS11
  9. https://kernelnewbies.org/Linux_3.11#AMD_Radeon_experimental_dynamic_power_management_support
  10. https://www.kernel.org/doc/html/latest/gpu/amdgpu/thermal.html
  11. https://www.kernel.org/doc/html/latest/gpu/amdgpu/module-parameters.html
  12. https://www.phoronix.com/news/AMDGPU-PP-4.5-Steps
  13. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/amd/include/amd_shared.h
  14. https://www.kernel.org/doc/html/latest/gpu/amdgpu/module-parameters.html?highlight=ppfeaturemask
  15. https://github.com/torvalds/linux/blob/be8454afc50f43016ca8b6130d9673bdd0bd56ec/drivers/gpu/vga/vga_switcheroo.c#L653-L660
  16. https://help.ubuntu.com/community/HybridGraphics
  17. https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues/11
  18. https://www.micron.com/-/media/client/global/documents/products/technical-note/dram/tned03_gddr6.pdf
  19. http://monitorinsider.com/GDDR5X.html
  20. http://monitorinsider.com/GDDR6.html
  21. https://csstalker.gjisland.net/blog/archives/6848