Loni v létě jsme tu měli zprávu o tom, že procesory Intel Raptor Lake (Core 13. a 14. generace) – u nichž byly v roce 2024 potvrzeny a poté postupně řešeny závažné problémy vedoucí k fyzickému degradování a ztrátě schopnosti spolehlivě fungovat – i rok od dostupnosti oprav způsobovaly pády aplikací. A to v takovém měřítku, že to zřetelně ukazovala telemetrie prohlížeče Mozilla Firefox. Překvapení ale je, že ani o rok později není problémům konec.
Raptor Lake stále trápí chyby a nestabilita
Mozilla vydala ve čtvrtek verzi 151.0.1 prohlížeče Firefox, která má jako jednu z novinek opravu pádů, které hlásili uživatelé procesorů Raptor Lake (v Bugzille pod číslem 1950764). Respektive je hlásila telemetrie z jejich počítačů – toto je ostatně jeden z jejích hlavních důvodů.
Tyto chyby, vedoucí k pádu karty v prohlížeči nebo celého programu, byly analyzovány už přes rok. Nejprve byly hlášené jenom ve vývojových verzích, ale vyskytovaly se velmi často, vždy však jenom na procesorech Raptor Lake. Buď asi kvůli problému s degradací čipů, nebo kvůli jiné nesouvisející chybě v logice procesorů Raptor Lake. Bohužel se ukázalo, že opravy mikrokódu ji nevyřešily, verze mikrokódu 0×12F naopak četnost problémů výrazně zvětšila (vývojář Gabrile Svelto mimochodem píše, že chyb, které se vyskytují pouze s procesory Raptor Lake, jsou tucty, nicméně tato je zřejmě jedna z nejvážnějších).
Na stejný problém zřejmě narazil také software Oodle, používaný mimo jiné ke kompresi shaderů. Možná si pamatujete, že dekomprese shaderů pomocí Oodle během jejich kompilace byla jednou z nejrozšířenějších cest, kterou se v první polovině roku 2024 ohlašovala nestabilita degradovaných procesorů Raptor Lake (nicméně vývojáři zaznamenávali problémy už od května 2023), zřejmě pro značnou optimalizaci a náročnosti dekompresního kódu.
Podle analýzy Oodle spočívá nyní probíraná chyba v tom, že procesory Raptor Lake nesprávně pracují s instrukcemi přistupujícími zvláštním způsobem k obecným registrům – ukládáním do horních 8 bitů registrů – tedy například „AH“ v případě obecného registru AX. Používání takovýchto operací je legitimní součást instrukční sady x86, ale na Raptor Lake vede často k tomu, že procesor vrátí chybné výsledky či data a to pak kaskádovitě vede k pádu celého programu.
Exkurz: Přístup k polovině registrů v instrukční sadě x86
Architektuře x86 je často vyčítáno, že je zatížena balastem dlouhé zpětné kompatibility a funkce, v které má Raptor Lake problém, je asi jedním z křiklavých příkladů. Možnost přistupovat jenom k polovině (původně 8 bitům) obecných registrů, které byly zpočátku 16bitové, jde zpět až do prvních 16bitových procesorů Intel 8086 a 8088, které jak známo zvolilo IBM pro první počítač PC „a zbytek je historie“. Tento detail ale dokonce je artefaktem z předchozích procesorů 8008 a 8080, které byly 8bitové a měly 8bitové registry. Procesory 8086/8088 s nimi nebyly kompatibilní, ale Intel navrhl jejich instrukční sadu (od které se x86 odvíjí) i registry tak, aby se daly programy pro procesor 8080 psané v assembleru jednoduchým programem překonvertovat do instrukční sady x86.
Poloviční přístup poskytoval možnost například u registru AX přistupovat buď k jeho horním (AH) či spodním (AL) 8 bitům. S přechodem na 32bitovou a 64bitovou architekturu toto chování bylo zachováno a tímto způsobem lze pořád přistupovat ke spodním částem 32bitových či 64bitových registrů, které jsou v nich namapované jako původní 16bitový registr kvůli kompatibilitě.
Historický procesor Intel Pentium
Kdysi tento architektonický rys sloužil právě kódu původně psanému pro procesory Intel 8080 (a Zilog Z80) typicky pro systém CP/M. Ale od té doby ho začaly používat i nativní aplikace a kompilátory a dnes je problémem, protože jde o obskurní vlastnost, která ale byla vlepena do jedné z nejzákladnějších částí fungování procesoru. Hodně tak komplikuje ověření správného fungování nových návrhů, ale také má zřejmě málo prostoru pro různé chyby a nestability, vznikající degradováním procesorů Raptor Lake.
Stokrát 8 bitů umořilo raptora
Řada poškozených čipů, které se chovají relativně normálně ve hrách i jiném softwaru, zřejmě už je nahlodaná tak, že občas selhává v těchto specifických a málo používaných instrukcích, a to je právě důvod, který vede k pádům Firefoxu (a Oodle) při používání procesorů Raptor Lake. Doufejme, že jde jen o problém procesorů, které zdegradovaly předtím, než byly dostupné opravy problémů degradaci způsobujících, a ne přímo o chybu v architektuře, která by postihovala všechny, i nově vyráběné a dnes prodávané procesory.
Každopádně Firefox 151.0.1 (dnes už je venku i verze 151.0.2) a vyšší nyní obsahuje opravu, či přesněji řečeno workaround – vývojáři pozměnili část kódu tak, aby kompilátory nevytvářely binárky, u nějž je šance, že toto nesprávné fungování procesorů Raptor Lake spustí. Podobný experimentální workaround by měla mít i knihovna Oodle od verze 2.9.14. Uživatelé Firefoxu na procesorech Raptor Lake by tedy asi měli aktualizovat prohlížeč co nejdřív.
Nejde o opravu v tom smyslu, že by procesor začal fungovat korektně, to by musel zajistit mikrokód od Intelu – a není jasné zda je oprava realizovatelná. Pokud je tato chyba manifestací oné rozvinuté nebo jen začínající nestability procesorů Raptor Lake kvůli degradaci, nemusí už oprava být možná – případně by mohla být proveditelná jen za cenu ztráty výkonu (tím, že by se postižené režimy práce s registry nějak obcházely pomocí sekvence mikrokódu). Na druhou stranu je teoreticky možné, že by se právě pomocí této chyby dal napsat kód, který by jejím reprodukováním odhaloval, zda jsou procesory nestabilní. Taková univerzální testovací aplikace schopná detekovat, zda procesor Raptor Lake už je vadný a potřebuje výměnu, bohužel stále chybí, řada majitelů tak nejspíš pořád nevědomky používá nestabilní PC.
