RX 7900XTX-Stabilisierung
Seit ich mir vor etlichen Monaten eine Radeon RX 7900XTX gekauft habe, hatte ich immer wieder Probleme mit dem Gerät. Gerade beim Experimentieren mit verschiedenen KI-Anwendungen stürzte der Treiber unter Linux regelmäßig ab und die Logs wurden mit Fehlermeldungen wie der folgenden geflutet:
amdgpu: [gfxhub] page fault (src_id:0 ring:153 vmid:0 pasid:0)
amdgpu: in page starting at address 0x0000000000000000 from client 10
amdgpu 0000:03:00.0: amdgpu: GCVM_L2_PROTECTION_FAULT_STATUS:0x00000B32
amdgpu 0000:03:00.0: amdgpu: Faulty UTCL2 client ID: CPC (0x5)
amdgpu 0000:03:00.0: amdgpu: MORE_FAULTS: 0x0
amdgpu 0000:03:00.0: amdgpu: WALKER_ERROR: 0x1
amdgpu 0000:03:00.0: amdgpu: PERMISSION_FAULTS: 0x3
amdgpu 0000:03:00.0: amdgpu: MAPPING_ERROR: 0x1
amdgpu 0000:03:00.0: amdgpu: RW: 0x0
In den verschiedenen Internetforen, auf den Mailinglisten der Kernel-Entwickler und in diversen Bugtrackern finden sich Spuren immer desselben Fehlers. Neue Versionen der AMD-Treiber, von ROCM, libdrm. mesa und so weiter brachten keine Abhilfe, so richtig kommt man dem Problem nicht auf die Spur.
Der Lüfter zur Rettung!
Die neueren Radeon-Karten haben ein gewaltiges Problem, das AMD derzeit eher stiefmütterlich behandelt: Während man die Overclocking-Parameter der Karten auf normalem Wege auch unter Linux erreicht, sieht das bei der Lüftersteuerung ganz anders aus. Standardmäßig gibt es keine Möglichkeit, bei einer RX 7900XTX die Lüfterkurven manuell zu konfigurieren oder zu übersteuern - jedenfalls nicht unter Linux, unter Windows soll es angeblich out of the box funktionieren.
Bei meiner letzten Debugging-Session hatte ich nebenher auch die Ausgaben der Temperatursensoren meiner gesamten Hardware offen und staunte nicht schlecht, als die Temperatur im Die des Grafikprozessors auf über 100°C hochschoss. Theoretisch wird es für die Komponenten erst ab 110° ungemütlich, aber das war dann doch deutlich zu nah am Grenzwert, um es zu ignorieren.
Ich machte mich also auf die Suche nach einer Möglichkeit, den Lüfter schon bei leichter Temperaturerhöhung hochzupowern - im Normalbetrieb dümpelt er nämlich gerne ziemlich lange im Leerlauf, also bei 0 Umdrehungen herum. Offensichtlich dachte sich AMD, dass geräuscharmer Betrieb wichtiger als Stabilität sei…
Wie dem auch sei, ich wurde fündig. Ich tüftelte sowohl mit dem Tool corectrl
als auch mit LACT
herum, aber die eingestellten Werte wurden von der GPU komplett ignoriert. Durch einen Foreneintrag kam ich auf die Lösung: Ein Kernel-Parameter sorgte dafür, dass die benötigten Gerätepfade für die Lüftersteuerung beschreibbar wurden:
amdgpu.ppfeaturemask=0xffffffff
wird in der Datei /etc/default/grub
an die Grub-Kommandozeile für den Kernel angehangen und danach mit sudo grub2-mkconfig -o /boot/grub2/grub.cfg
der Bootloader neu konfiguriert.
Nach einem Neustart konnte ich dann endlich mit corectrl die Lüfterkurve anpassen, aktivieren und schließlich speichern.
Fazit: Tut - mit Abstrichen!
Wenn ich jetzt GPU-intensive Berechnungen fahre, beispielsweise mit Stable Diffusion, röhrt zwar der Lüfter schon nach den ersten Sekunden herum, dafür läuft der Prozess aber in der Regel durch, ohne das ganze Betriebssystem mit ihren Abstürzen in den Abgrund zu reißen. Die Fehlermeldungen tauchen zwar dennoch auf, führen jedoch deutlich seltener zu kompletten Abstürzen. Von Zeit zu Zeit hängt sich die UI auf und recovert einige Sekunden später, richtig harte Lockdowns hatte ich seither aber nicht mehr.
Ich hoffe, dass AMD in zukünftigen Treiberversionen die Gerätepfade zur manuellen Lüftersteuerung standardmäßig freischaltet, denn die stunden-, tage-, wochen- und gar monatelange Fehlersuche kann man sich dann sparen. Außerdem halte ich das voreingestellte Verhalten der Lüfter, möglichst lange im Leerlauf zu bleiben und dann nur langsam in den Wirkbetrieb zu schalten, für äußerst bedenklich. Ich kann mir vorstellen, dass die permanente Überhitzung die Hardware früher als notwendig altern lässt, und das ist bei einer Grafikkarte dieser Preisklasse das letzte, was die Kunden wollen werden.
Und ich bin guter Dinge, dass auch die Fehlermeldungen irgendwann behoben sein werden. Ob die Ursache nun bei mesa oder im Kernel liegt ist mir persönlich dabei relativ egal.