CentOS 7. Kernel panic — not syncing: Fatal machine check on current CPU
Содержание

Провайдер услуг: ovh

Проц: Intel Xeon D-1521

ОС: CentOS 7.3

Ядро: 3.14 кастомное от ovh

Дело было на майских праздниках. Клиент, держащий сервис, написанный на php и использующий mysql как бд, попросил посмотреть, почему сервер внезапно перестаёт отвечать.

Предположили, что дело может быть в высокой нагрузке и отваливается сеть. Но нет, нагрузка так себе, на интерфейсе максимум 300 pps, трафик низкий, память не кушается, проц процентов на 40% загружен. В процессе выяснилось, что сервер не только перестаёт отвечать, но и сам перезагружается.

Ага! Настраиваем kdump. kdump не запускается на кастомном ядре 3.14 ovh. Ставим ванильное из родных реп

yum install kernel

Пересоздаём конфиг для загрузчика (grub2, да)

grub2-mkconfig -o /boot/grub2/grub.cfg

Грузимся в ванильное ядро, где kdump корректно работает.

Выловились такие ошибки при каждом ребуте

[  617.734479] Disabling lock debugging due to kernel taint
[  617.734483] mce: [Hardware Error]: CPU 4: Machine Check Exception: 5 Bank 4: be00000000800400
[  617.734490] mce: [Hardware Error]: RIP !INEXACT! 10:<ffffffff81390207> {intel_idle+0xd7/0x160}
[  617.734491] mce: [Hardware Error]: TSC 22f02fc14382 ADDR ffffffff81390200 MISC ffffffff81390207
[  617.734493] mce: [Hardware Error]: PROCESSOR 0:50663 TIME 1493660122 SOCKET 0 APIC 1 microcode 700000a
[  617.734494] mce: [Hardware Error]: Run the above through 'mcelog --ascii'
[  617.754549] mce: [Hardware Error]: Some CPUs didn't answer in synchronization
[  617.754550] mce: [Hardware Error]: Machine check: Processor context corrupt
[  617.754551] Kernel panic - not syncing: Fatal machine check on current CPU

Дело ясное - проблема в процессоре! Пишем в поддержку ovh с описанием проблемы. Нам отвечают, что да, похоже на проблемы с железом, но неплохо бы прогнать тесты, так что загрузитесь по pxe в наш специальный rescue-image и вперёд.

Далаем тесты. 64GB оперативки… ждём…

Тесты говорят нам, что всё в порядке О_О Как так? Нельзя просто заменить проц, чтобы всё было хорошо? Перезагружаем сервер и видим, что centos всё так же продолжает свой kernel panic.

Зато пока гнались тесты, нагуглились похожие проблемы, и, проанализировав их, появилось предположение, в которую нужно копать - питание и частота процессора (ну да, логично)

CPUs didn’t answer in synchronization

Идём в БИОС, ищем Advanced Power Management, начинаем читать… EIST и C-STATE позволяют снижать частоты процессора для экономии электроэнергии и уменьшения уровня шума. И они как раз включены. Отключаем.

Ребут. Запуск. Нагрузка. Работает!

Итого, мы имеем ядро, которое не умеет работать с некоторыми функциями относительно новых процессоров intel (D-1521 октябрь 2015). Вероятно, есть способ побороть это со стороны ОС.


Upd.: после сделанных изменений аптайм стал дольше, но внезапные ребуты, хоть и реже, но остались. Поддержка невнятная, онлайн проекту нужен срочно, поэтому клиент переехал на linode.


3.14.32-xxxx-grs-ipv6-64 3.10.0-514.16.1.el7.x86_64 4.11.0-1.el7.elrepo.x86_64 4.4.66-1.el7.elrepo.x86_64
CentOS 7 Kernel panic - not syncing Kernel panic - not syncing Kernel panic - not syncing см.ниже

[20131.766316] perf interrupt took too long (2501 > 2500), lowering kernel.perf_event_max_sample_rate to 50000

[21855.799002] conntrack: generic helper won’t handle protocol 47. Please consider loading the specific helper module.

[66335.445024] Kernel panic - not syncing: Timeout: Not all CPUs entered broadcast exception handler

Если мне когда-нибудь удастся протестировать с этим процессором, например, ubuntu 16.04.2 с ядром 4.8, то дополню заметку, как она ведёт себя при включённых EIST и C-STATE.