Ryzeny 3000 mají chybu, kvůli které neběží Linux či Destiny 2. Oprava je už na cestě

13. 7. 2019

Sdílet

Při vydání Ryzenů 3000 – prvních 7nm desktopových CPU od AMD a zároveň prvních procesorů s architekturou Zen 2 – se objevila informace, že tyto procesory vykazují chybu, kdy nejsou schopné nabootovat nejnovější Linuxové distribuce (což není zrovna drobnost). A také se poté objevily informace, že na těchto CPU se nechce spustit hra Destiny 2. Oba problémy zdá se jsou skutečně zaviněné procesorem a dokonce mají zřejmě společnou příčinu. Naštěstí je již na světě řešení a chyba bude opravena aktualizací.  

Systemd/Linux nefunguje kvůli RdRand

O co v této chybě jde? Při vydání Phoronix hned upozorňoval na to, že se mu dařilo na Ryzenu 3000 spustit jen starší distribuce jako Ubuntu 18.04 LTS, ale s posledními verzemi pohořel. Přesněji vzato novější verze jádra Linuxu fungovala plně při ruční aktualizaci starších dister, takže přímo v jádru problém zřejmě nebyl. Zdá se, že nastává v systemd, takže například Gentoo. nepoužívající tuto komponentu, by mělo fungovat bez potíží.

Příčinou má být chybné chování instrukce RdRand, což je speciální funkce CPU, generující náhodná čísla pro různé účely. Zdá se, že Ryzeny 3000 nekorektně vracejí nenáhodnou a konstantní hodnotu (0xFFFFFFFFFFFFFFFF), ovšem chybnost programy nedetekovaly, protože v carry výsledku byl nekorektně indikován úspěch instrukce (čímž CPU říká, že vrácená hodnot je podle něj náhodná). A systemd, což je sada základních systémových služeb pro Linux, používá RdRand pro své účely (generování identifikátorů pro procesy například) a navrácená chybná hodnota ho rozbije, takže operační systém nenabootuje.

Mimochodem, rozbití RdRand se objevilo před delším časem i u některých starších APU od AMD (Kabini) a systemd pro ně má v kódu opravu. Ale tam nastávala špatná výstupní hovnota po PC probuzení ze spánku, kdežto u Ryzenu 3000 vždy. Dlužno říct, že toto je hodně očividná chyba a je s podivem, že nebyla odhalena a opravena před vydáním.

Stejná chyba rozbíjí i hru Destiny

Destiny 2 snad údajně také instrukci RdRand využívá, a separátně tak nabourala do stejného problému, nebo se za to tak momentálně má, protože nefungování této hry má údajně vyřešit stejná oprava. Je třeba říct, že chybný výstup je i potenciální bezpečností problém, protože pokud tuto hodnotu použije nějaký kryptografický software (což je jedna z hlavních aplikací náhodných čísel), budou jím generované klíče a hodnoty poměrně předvídatelné a tedy zranitelné pro útoky. Tuto chybu je tedy třeba rychle opravit, nebo zajistit, aby takové programy kontrolovaly při použití RdRand, zda nedostávají z procesoru ono „FFFF…“.

AMD Ryzen 9 3900X a Ryzen 7 3900X foto PC Perspective AMD Ryzen 9 3900X a Ryzen 7 3900X (foto: PC Perspective)

Oprava v následujících dnech?

Nadcházející verze systemd 243 bude tuto chybu obcházet, ale kardinální příčina v chování CPU bude muset být řešena přímo v jeho rámci. Oprava je už údajně na cestě. Podle AMD byla příčina odhalena a bude opravena či jinak řešena v aktualizaci BIOSu pro základní desky. To patrně znamená aktualizaci AGESA nebo mikrokódu procesoru, kterou výrobci desek začlení do vlastních BIOSů. Kód od AMD už údajně mají, jen bude třeba počkat, až novou verzi otestují a pak vydají vlastní aktualizace BIOSů pro své základní desky. Ty pak budou uživatelé muset naflashovat do svých desek. Podle AMD by údajně aktualizace měla být dostupná koncovým užviatelům snad už docela brzy, „v nadcházejících dnech“.

bitcoin_skoleni

AMD has identified the root cause and implemented a BIOS fix for an issue impacting the ability to run certain Linux distributions and Destiny 2 on Ryzen 3000 processors. We have distributed an updated BIOS to our motherboard partners, and we expect consumers to have access to the new BIOS over the coming days.

Povaha řešení nebyla AMD nějak rozvedena. Kromě toho, že bude instrukce RdRand přivedena ke korektnímu fungování, by teoreticky mohl nastat i třeba jen nějaký částečný „workaround“. Možností je například i úplné odstranění podpory pro RdRand, pokud by se nepovedlo ji opravit. Nejde totiž o centrální součást instrukční sady, ale o poměrně nedávné rozšíření, bez kterého tedy Linux i jiný software musí normálně fungovat – pokud RdRand není nalezeno, použije se jiný zdroj entropie.

Aktualizace by neměla mít negativní dopady na výkon procesoru, protože chyba nebude asi v ničem, co by přímo ovlivňovalo obecné výpočty v ALU/FPU a dalších částech CPU. Instrukce RdRand pravděpodobně již předtím fungovala skrze mikrokód, takže se jen nějak změní její implementace a chování v rámci mikrokódu. Je možné, že se může nějak změnit třeba latence či výkon zpracování přímo této instrukce, ovšem to by asi u žádného programu nemělo mít podstatné dopady.

Galerie: Architektura jádra AMD Zen 2 (prezentace z E3 2019, červen 2019)