В течение апреля и мая 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, то данное предупреждение можно игнорировать.
→ Список всех процессоров Skylake
→ Список всех процессоров Kaby Lake
Некоторые процессоры из списка не подвержены ошибке, потому что не поддерживают HyperThreading
Баг действительно неприятный. «Непредсказуемое поведение системы» может проявиться в непроизвольных ошибках приложений и системных ошибках, повреждении данных и потере данных.
Предупреждение опубликовано в списке рассылки Debian, потому что проблема уже затронула нескольких пользователей стабильной ветки Debian. В то же время аналогичные неприятности могут возникнуть у пользователей на любой операционной системе, не только Debian и не только Linux.
Чтобы избежать проблемы, необходимо или отключить HyperThreading, как уже упоминалось, или установить официальный фикс. Компания Intel задокументировала описание бага в документации для Core 6-го поколения, Core 7-го поколения, Xeon v5 и v6, а также X series Core 6-го поколения.
В списке рассылки для пользователей Debian владельцам процессоров Kaby Lake рекомендуется связаться с производителями материнской платы и запросить обновление BIOS/UEFI, а до того момента отключить HyperThreading.
Для владельцев процессоров Skylake, в зависимости от модели, может быть доступен пакет intel-microcode
. В списке рассылки Debian объясняется, кто может установить этот пакет с номером версии 3.20170511.1 на операционных системах Debian GNU/Linux 9 «Stretch» и Debian GNU/Linux 8 «Jessie». Сначала нужно узнать номер модели и степпинг своего процессора. Пакет с микрокодом подходит только для процессоров модели 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-сгенерированном коде.
Автор: alizar