Серйозна помилка в багатопоточності процесорів Skylake і Kaby Lake

Протягом квітня і травня 2017 року компанія Intel оновила документацію до процесорів Skylake і Kaby Lake, додавши одне невеличке зауваження (errata KBL095, KBW095 для Kaby Lake, errata SKW144, SKL150, SKX150, SKZ7 для Skylake). Воно звучить наступним чином:

«У складних микроархитектурних умовах короткі цикли менш ніж з 64 інструкцій з використанням регістрів AH, BH, CH або DH, а також відповідних більш широких регістрів (наприклад, RAX, EAX або AX для AH) можуть викликати непередбачувану поведінку системи. Таке може статися тільки якщо активні обидва логічних процесора на одному фізичному процесорі».

Що означає це примітка — 25 червня 2017 року докладно пояснили в поштовому списку розсилки розробників Debian. Якщо коротко, то процесори Skylake і Kaby Lake з включеним HyperThreading можуть вести себе неадекватно. Розробники рекомендують негайно відключити HyperThreading в BIOS/UEFI, а потім оновити мікрокод процесора від Intel або дочекатися оновлень BIOS/UEFI від свого вендора.

Помилка торкнулася процесори Intel Core 6-го і 7-го поколінь, в тому числі десктопні, вбудовані, мобільні і HEDT, відповідні версії серверних процесорів (такі як Xeon v5 і Xeon v6), а також деякі моделі процесорів Intel Pentium. Самий ранній процесор з наявністю цього бага вийшов у вересні 2015 року. Якщо ваш процесор випущений раніше цього часу, або він не належить до сімейств Skylake і Kaby Lake, то дане попередження можна ігнорувати.

Деякі процесори зі списку не схильні помилятись, тому що не підтримують HyperThreading

Баг дійсно неприємний. «Непередбачувана поведінка системи» може проявитися у мимовільних помилках додатків і системних помилках, пошкодженні і втрати даних.

Попередження опубліковано в списку розсилки Debian, тому що проблема вже торкнулася кількох користувачів стабільної гілки Debian. У той же час аналогічні неприємності можуть виникнути у користувачів на будь-якій операційній системі, не тільки Debian і не тільки Linux.

Щоб уникнути проблеми, необхідно відключити HyperThreading, як вже згадувалося, або встановити офіційний фікс. Компанія Intel задокументувала опис бага в документації Core 6-го покоління Core 7-го покоління, Xeon v5 і v6, а також X series Core 6-го покоління.
Серйозна помилка в багатопоточності процесорів Skylake і Kaby Lake

У списку розсилки для користувачів Debian власникам процесорів Kaby Lake рекомендується зв’язатися з виробниками материнської плати і запросити оновлення BIOS/UEFI, а до того моменту відключити HyperThreading.

Для власників процесорів Skylake, залежно від моделі, може бути доступний пакет intel-microcode. У списку розсилки Debian пояснюється, хто може встановити цей пакет з номером версії 3.20170511.1 на операційних системах Debian GNU/Linux 9 «Stretch» і Debian GNU/Linux 8 «Джессі». Спочатку потрібно дізнатися номер моделі і степпінг свого процесора. Пакет з мікрокодом підходить тільки для процесорів моделі 78 або 94, з степінгом 3, тобто для процесорів з підписами 0x406E3 і 0x506E3. Щоб дізнатися характеристики, слід запустити з терміналу наступну команду:

grep -E ‘model|stepping’ /proc/cpuinfo | sort -u

Якщо процесор відповідає зазначеним умовам, то можете оновити мікрокод, дотримуючись інструкцій з вікі Debian.

В іншому випадку рада такий же: відключити HyperThreading і чекати оновлення BIOS/UEFI.

Intel випустила також мікрокод Kaby Lake, який виправляє баг, але він доступний тільки для виробників обладнання, тому слід чекати оновлення BIOS/UEFI, щоб отримати цей код. Розробники Debian відзначають, що Intel внесла зміни в мікрокод на початку квітня 2017 року. Тому є ймовірність, що мікрокод для Kaby Lake з номером ревізії 0x5d/0x5e (і більш пізній) *може* виправити проблему, але це тільки припущення.

Через непередбачуваною природи бага складно перевірити, яка програма може його викликати, а яка ні, і при яких умовах він може проявитися. Тому відключити HyperThreading на всяк випадок рекомендується всім. Розробникам Debian про ба повідомив Марк Шинвелл (Mark Shinwell), один з творців набору інструментів Ocaml. Він сказав, що компілятор OCaml легко викликає цей баг. Розробники Ocaml уважно досліджували проблему з січня 2017 року, а перші глюки були помічені ще в II кв. 2016 року, ніхто не міг зрозуміти, що відбувається і в чому причина. Компілятор і програма аварійно завершувалися зі збоєм, програма вела себе некоректно, у тому числі видавала некоректну видачу. Тільки тепер, коли Intel почала оновлювати документацію до процесорів, ситуація прояснилася. Важливо зазначити, що код, який призводить до прояву бага в процесорі, був присутній у gcc-створеному коді.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *