Machine Check Exception (аббр. MCE) - тип компьютерных ошибок, которые появляются при обнаружении неполадок с оборудованием.

Особенности и причины таких ошибок могут зависеть от компьютерной архитектуры и поколения процессора. В некоторых архитектурах, MCE ошибки всегда являются неустранимыми, они приостанавливают работу компьютера, требуя перезапуск. В других же архитектурах, некоторые ошибки MCE могут быть некритическими, например ошибка в одном бите ОЗУ, устраняемая памятью с коррекцией ошибок.

В некоторых архитектурах, например в PowerPC, некоторые программные ошибки (например, неправильный доступ к памяти) могут приводит к возникновению такого типа ошибок. В других же архитектурах, например в x86, MCE обычно возникает вследствие ошибок в работе оборудования.

Виды отчётов править

Операционные системы мейнфреймов IBM править

IBM System/360 Operating System (OS/360) записывает ошибки ввода/вывода в файл журнала под названием SYS1.LOGREC.

Тогда IBM ввела термин "error recording data set" (ERDS, набор данных записи ошибок) для следующих версий, который позволяет установщику выбирать имя для операционных систем, не производных от OS/360.[1]

OS/360 править

В OS/360, установщик может выбрать несколько степеней поддержки таких ошибок. Наиболее точным является Machine Check Handler (MCH), он записывает данные об ошибках в SYS1.LOGREC. Установка может отобразить эти данные с помощью службы Environmental Record Editing and Printing Program (EREP) или с помощью SEREP. MCH может обработать ошибки памяти в восстанавливаемых областях, считывая копии памяти из соответствующих файлов.

z/OS править

В z/OS установка может выбрать либо ERDS, либо может определить поток логирования z/OS System Logger для удержания данных об ошибках. Как и OS/360, установщик использует EREP для отображения таких ошибок, SEREP не поддерживается. MCH больше не является опциональным, и обрабатывает большее количество ситуаций, чем в OS/360.

Microsoft Windows править

В Microsoft Windows, в момент неустранимой ошибки MCE, система генерирует синий экран смерти.

Более поздние версии Windows используют механизм WHEA (Windows Hardware Error Architecture), и генерируют STOP код 0x124: WHEA_UNCORRECTABLE_ERROR.[2]

Пример такой ошибки продемонстрирован ниже. Параметры (в скобках) могут отличаться, но первый всегда 0x0 для MCE.

   STOP: 0x00000124 (0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000)

Более старые версии Windows напрямую используют Machine Check Architecture, и генерируют STOP код 0x9C, MACHINE_CHECK_EXCEPTION.

Пример такой ошибки:

   STOP: 0x0000009C (0x00000030, 0x00000002, 0x00000001, 0x80003CBA)

Linux править

В Linux, ядро посылает сообщения об ошибке MCE в журнал ядра и в консоль. Когда такая ошибка не является фатальной, сообщение о ней также копируется в системный журнал и/или журнал systemd. На некоторых системах, информация об устранимых ошибках также может быть передана через MCE.[3]

Пример такой ошибки:

   CPU 0: Machine Check Exception: 0000000000000004
   Bank 2: f200200000000863
   Kernel panic: CPU context corrupt

Типы проблем править

Некоторые из основных аппаратных неполадок могут приводить к MCE, например:

Возможные причины править

Часто MCE является следствием разгона или перегрева процессора. В некоторых случаях, во время перегрева, для предотвращения повреждения, процессор сам отключается. Но MCE может возникать и по причине ошибок шины данных, ошибок памяти, и т. д. Возможные причины включают в себя:

  • Плохое охлаждение процессора (например, вследствие забитости кулера пылью). Проблемы с охлаждением часто становятся очевидными при проверке.
  • Разгон процессора до частоты, на которой процессор перестаёт быть стабильным.
  • Неисправность материнской платы. Может быть обнаружена при помощи замены на заведомо исправный компонент.
  • Неисправность процессора. Может быть обнаружена при помощи замены на заведомо исправный компонент.
  • Неисправность оперативной памяти. Может быть выявлена с помощью тестов памяти (например, memtest86)
  • Неисправность контроллеров ввода/вывода.
  • Неисправность устройств ввода/вывода. Может быть выявлена при отсоединении или отключении устройств.
  • Неисправность блока питания. Если неисправность проявляется сразу после запуска ОС, то стоит обратить внимание на блок питания. Ошибки могут быть следствием пульсирующего или низкого напряжения при запуске всех устройств компьютера.

Декодирование ошибок править

Для архитектур IA-32 и x86-64, можно обратиться к Intel 64 and IA-32 Architectures Software Developer's Manual[4] Chapter 15 (Machine-Check Architecture) или Microsoft KB Article on Windows Exceptions.[5]

Программы для декодирования MCE на процессорах Intel и AMD править

  • rasdaemon[6] — программа логирования для Linux. Она записывает ошибки памяти, используя EDAC. EDAC - это подсистема Linux, обрабатывающая ошибки ECC от контроллеров памяти.[7][8][9][10]
  • mcelog[11] — демон для Linux, созданный Энди Клином для обработки MCE на архитектуре x86. mcelog считается устаревшим на момент 2017 года.[9][10] Его заменой является rasdaemon.[7][8]
  • parsemce[12] — программа для Linux, созданная Дейвом Джонсом для декодирования MCE на процессорах AMD K7.
  • mced[13] (mcedaemon) — программа для Linux, созданная Тимом Хокином для получения сведений о MCE от ядра и дальнейшего оповещения нужных процессов об этом. Стоит отметить, что эта программа именно оповещает другие процессы об MCE, она не интерпретирует данные об ошибках.
  • mcat — консольная программа для Windows от AMD, служащая для декодирования MCE на процессорах AMD K8, K10 и K11.

См. также править

Примечания править

  1. Environmental Record Editing and Printing Program (EREP) 3.5 - User's Guide. — IBM, September 30, 2021. — P. 1. — ISBN GC35-0151-50.
  2. Bug Check 0x124 WHEA_UNCORRECTABLE_ERROR - Windows drivers (англ.). learn.microsoft.com (4 января 2023). — В списке параметров можно увидеть, что причиной данной ошибки может быть Machine Check Exception. Дата обращения: 3 февраля 2024.
  3. mcelog not working with AMD processor family 16 and above on SLES11 SP3. SuSE (27 сентября 2022). Дата обращения: 11 декабря 2022. Архивировано 11 декабря 2022 года.
  4. Machine Check Architecture // Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3B: System Programming Guide, Part 2. — Intel Corporation, November 2018.
  5. Stop error message in Windows XP that you may receive: "0x0000009C (0x00000004, 0x00000000, 0xb2000000, 0x00020151)". MSDN (7 декабря 2015). Дата обращения: 13 июля 2017. Архивировано 8 января 2017 года.
  6. Mauro Carvalho Chehab (mchehab). rasdaemon is a RAS (Reliability, Availability and Serviceability) logging tool. github.com (20 февраля 2023). Дата обращения: 20 февраля 2023. Архивировано 20 февраля 2023 года.
  7. 1 2 Machine-check exception. wiki.archlinux.org (8 мая 2021). Дата обращения: 21 февраля 2023. Архивировано 21 февраля 2023 года.
  8. 1 2 ECC RAM. wiki.gentoo.org (30 декабря 2022). Дата обращения: 21 февраля 2023. Архивировано 21 февраля 2023 года.
  9. 1 2 x86/mce: Factor out and deprecate the /dev/mcelog driver. git.kernel.org (28 марта 2017). Дата обращения: 21 февраля 2023. Архивировано 21 февраля 2023 года.
  10. 1 2 x86/mce: Factor out and deprecate the /dev/mcelog driver. github.com/torvalds/linux/ (28 марта 2017). Дата обращения: 21 февраля 2023. Архивировано 21 февраля 2023 года.
  11. mcelog: Advanced hardware error handling for x86 Linux (20 апреля 2015). Дата обращения: 13 июля 2017. Архивировано 25 февраля 2021 года.
  12. parsemce: Linux Machine check exception handler parser. (22 июля 2003). Дата обращения: 13 июля 2017. Архивировано 22 июня 2013 года.
  13. Проект Machine Check Exception на сайте GitHub

Ссылки править