FMA3 инструкциите на процесорите Ryzen тотално крашват операционната система

5
298

Оказа се, че изпълнението на някои специфични FMA3 инструкции на процесорите AMD Ryzen водят до критично прекъсване работата на операционната система.

Инструкциите тип FMA3 (Fused-Multiply-Add) се поддържат и от Intel в процесорите Haswell. Това са инструкции от типа d = round(a × b + c), при които d трябва да е в същия процесорен регистър, в който се намират a, b и c. Ако направим сравнение с други процесорни команди, инструкциите FMA4 се поддържат само от AMD в процесорите Bulldozer и по-нови, но при FMA4,  a, b, c и d могат да бъдат в различни регистри.

Процесорният бъг се прояви в опростената и малко известна програма Flops version2 за тестване на процесори. Нейният създател я позиционира като специфична помощна програма за тестване, която е чувствителна към архитектурата на процесорите. В другите бенчмаркове бъгът не се проявява.

Flops version2 съдържа специфични машинни кодове за всички основни процесорни архитектури x64 (Core2, Bulldozer, Sandy Bridge, Piledriver, Haswell, Skylake). Засега версия на тази програма за тестване на Zen процесори няма нито за Windows, нито за Linux. Ето защо за тестване на Zen процесорите се използва същия изпълним код, предназначен за други архитектури и по-точно, кодът за Haswell.

Грешката при FMA3 инструкциите бе открита преди две седмици от самия създател на Flops.

Използвана е следната конфигурация:

  • Ryzen 7 1800X
  • Asus Prime B350M-A (BIOS 0502)
  • 4 x 8GB Corsair CMK32GX4M4A2400C14 @ 2133 MHz
  • Windows 10 Anniversary Update

При по-внимателен анализ се оказа, че операционната система увисва при изпълнението на следната инструкция:

Single-Precision - 128-bit FMA3 - Fused Multiply Add:

Понякога тази инструкция минава, но системата задължително крашва при някоя от следващите инструкции.

Програмистът подчерта, че неговата програма е с отворен код, може да бъде изтеглена от всеки от GitHub, да бъде компилирана с Visual Studio и експериментът да бъде повторен от всеки желаещ.

Програмистът сподели, че знае каква реакция ще предизвика неговото съобщение за грешка на новия процесор и каза, че е направил многобройни тестове. Процесорът крашва системата независимо от тактовата честота, а в еднопоточен режим ОС увисва при използването на което и да е ядро.

И други програмисти започнаха да правят подобни тестове. Крашването става при различни дънни платки и при различни версии на Windows и Linux.

През първите два дни след разпространението на новината, същите тестове стартираха и пет притежателя на процесори Ryzen. Ето резултатите:

Потвърдено крашване:

  • 1800X + Asus Prime B350M-A (BIOS 0502)
  • 1700 + Asus Prime B350M-A (BIOS ???)
  • 1700 + Asus Crosshair VI Hero
  • 1700 + Asus Crosshair VI Hero (BIOS 5803) (две плочки памет G.Skill + Kingston)
  • 1800X + Asus Crosshair VI Hero (Windows 7) — тестът един път е минал успешно, но при всички останали случаи ОС увисва

Безпроблемна работа:

  • Засега не е фиксирана

След като бе открита коя инструкция показва този бъг, програмистите провериха всички варианти на FMA инструкциите – 128 бита, 256 бита, единична точност, двойна точност. Във всички случаи компютърът замръзва безвъзвратно.

Създателят на въпросния бенчмарк не се успокои, понеже увисването на системата не се появява при другите тестове и бенчмаркове, като например prime95 и y-cruncher, въпреки че и при тях се използват FMA инструкции в тестовете. Остава някаква неизяснена неопределеност.

На 16 март AMD официално съобщи, че бъгът ще бъде оправен с новия микрокод на AGESA (AMD Generic Encapsulated Software Architecture) – протокола, използван и за инициализация ядрата на AMD процесорите. С други думи, AMD потвърди, че бъг има. След това тази информация бе официално споделена с медиите.

Бъгът без проблем се оправя без никакви промени или замени в хардуера – необходимо е само да се подмени микрокода. Бъгът е незначителен и в реални условия е слаба вероятността някой да се сблъска с него. Той не се отразява на производителността и работата на компютъра.

Лошото е, че този бъг може да се използва за DoS атаки и основният проблем е в информационната безопасност – обикновената програма, стартирана в user mode, а не на ниво ядрото на операционната система, по никакъв начин не трябва да се отразява на работата на компютъра. Но го прави.

Това че е стартиран програмен код за друга архитектура няма значение. Дори и процесорът да попадне на несъвместими инструкции, предназначени за друг процесор, програмата не би трябвало да крашва цялата система.

И още, този код при стартиране във виртуална машина също крашва цялата операционна система – домакин. Възможно е да се накара ОС да увисне дори само при използване на браузър.

Но както вече споменахме, AMD работи върху обновяване на протокола AGESA и пачове за всички видове дънни платки и BIOS-и ще излязат съвсем скоро.

Много специалисти забелязаха, че абсолютно същия проблем имаше и при процесорите SkyLake. Може да се каже, че новата архитектура на AMD наистина е много удачна и може да конкурира процесорите на Intel.


Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iOS и Huawei!

Абонирай се
Извести ме за
guest

5 Коментара
стари
нови оценка
Отзиви
Всички коментари