Další chyba objevená v procesorech AMD Ryzen: nefunguje DOS a 16bitové programy

16. 5. 2017

Sdílet

 Autor: Redakce

Po vypuštění procesorů Ryzen se chvíli řešila hardwarová chyba jejich jader, která způsobovala zatuhnutí systému při použití instrukcí FMA (ovšem jen ve speciálním kódu, nikoliv v reálném softwaru). Ta byla docela rychle opravena aktualizací mikrokódu, ale pro milovníky procesorových „errata“ je tu náhrada. V Ryzenu byla totiž potvrzena další hardwarová (respektive možná mikrokódová) chyba, která tentokrát má dopad i pro uživatele. Při testech ale asi proklouzla síty proto, že se projevuje jen ve starém softwaru. V době, kdy zuří kontroverze okolo toho, zda Ryzeny budete moci komfortně používat s Windows 7, či nikoliv, totiž postihuje zejména historický operační systém DOS.

Tento problém architektury Zen se totiž týká 16bitového režimu, který je coby „legacy“ mód stále podporován jak Intelem, tak AMD. I dnešní 64bitová CPU do něj mohou přejít z 32bitového režimu, například pokud je třeba emulovat tzv. reálný režim („real mode“) pro nějakou starou DOSovou aplikaci. Intel pro tento režim tzv. „Virtual Mode 8086“ v devadesátých letech vyvinul určitá rozšíření označená VME (Virtual Mode Enhancements) a právě v nich, specificky asi v instrukci INT, má zřejmě Ryzen chybu. Její použití totiž vede k pádům nebo zatuhnutí systému – což za určitých okolností může být kritický problém, zneužitelný třeba na virtualizovaném serveru.

Problémy s DOSovými a podobnými aplikacemi byly hlášené hned po uvedení Ryzenů, ovšem chvíli trvalo, než se podařilo izolovat příčinu. Na chybu VME upozornil například blog OS/2 Museum (OS/2 je také postižen, jelikož VME používá při spuštění 16bitových DOSových aplikací). Problém se projevuje pádem nebo zamrznutím systému na řadě 32bitových systémů Windows při pokusu spustit DOSovou aplikaci v příkazovém řádku (který VME při emulaci reálného režimu používá). Problém se vyskytne, i pokud se nacházíte v rámci například VirtualBoxu či jiného hypervizoru.

Pád aplikace pro DOS na virtualizovanám OS/2 kvůli chybě intrukcí VME na Ryzenu (Zdroj: OS/2 Museum) Pád aplikace pro DOS na virtualizovanám OS/2 kvůli chybě intrukcí VME na Ryzenu (Zdroj: OS/2 Museum)

Windows XP nemusíte spustit vůbec, kvůli 16bitovém ovladači VESA režimu

Některé operační systémy jsou chybou postiženy i přímo, například FreeDOS na Ryzenu údajně vůbec nespustíte, jelikož má ve výchozím stavu aktivní správce paměti JemmEX, jenž VME používá a tedy chybu vyvolá. Překvapivě ale selhávají také Windows XP a Windows 2003 Server, ačkoliv jsou 32bitové. Tyto údajně mohou zatuhnout i při svém spouštění, aniž byste se pokoušeli pouštět 16bitové aplikace. Problém je zdá se v jejich výchozím grafickém ovladači, který používá režim VESA BIOS Extension (VBE). Kód BIOSu odpovědný za VBE je zřejmě spouštěn právě pomocí emulovaného reálného režimu a s instrukcemi VME, takže je chybou postižen.

Jelikož se týká starého softwaru, který obvykle spouštět nebudete, neohrožuje tato chyba nijak běžné uživatele. Pokud na ni ale narazíte třeba při pokusu instalovat Windows XP do virtuálky (což není úplně vzácné), lze potíž řešit tak, že zamezíte použití instrukcí VME, což by měly třeba hypervizory umožňovat ve svých nastaveních. Také v rámci již nainstalovaných Windows by se mělo použití VME dát zakázat (volba DisableVME v registrech). Tyto instrukce totiž nejsou systémem samy o sobě vyžadovány. Po takovémto zákroku je možné DOS, FreeDOS nebo WindowsXP s emulací 16bitových aplikací normálně používat.

bitcoin školení listopad 24

Jelikož Ryzeny budou asi směřovat i do firemních sestav, kde se s virtualizací legacy softwaru často počítá, AMD by mělo mít motivaci chybu opravit pomocí aktualizace mikrokódu a nenechat ji prostě být. Navíc tím, že její spuštění ve virtualizovaném hostu může způsobit pád hostitelského počítače, je bezpečnostním problémem. Problém by měl být mikrokódem řešitelný, jelikož postižené instrukce byly již pravděpodobně beztak implementovány v mikrokódu. Vzhledem k typu operace asi ani nehrozí nějaké negativní účinky typu ztráty výkonu. Ovšem zda se pro tuto chybu počítá s nějakou opravou nebo kdy by mohla být dostupná, zatím není známo.

AMD Ryzen 3 1200, údajně reálný exemplář (Zdroj: Hardware Battle) AMD Ryzen 3 1200 (Zdroj: Hardware Battle)

Errata jsou v CPU běžná věc

Jako obvykle u hardwarových chyb procesorů je asi namístě upozornit, že není třeba propadat panice. Tzv. „Errata“ jsou v jakémkoli dnešním procesoru běžnou věcí, s kterou inženýři počítají. Nepostihují také jen nové architektury jako je Zen, desítky až stovky jich mají i zralejší jádra, která prošla řadou evolucí. V dnešní době jsou tyto problémy prakticky vždy řešitelné aktualizací mikrokódu, pokud si jejich závažnost vůbec opravu vyžádá. Výjimkou byla snad jen chyba v implementaci rozšíření TSX u procesorů Haswell a Broadwell, která si vynutila zpětnou deaktivaci této funkce, jelikož zřejmě nebylo možné ji nějak obejít. Z pohledu běžného uživatele se dnes podobných problémů asi není třeba příliš bát (ani u AMD, ani u Intelu).