Przewidywanie awarii sprzętu x86_64
Napisał: Patryk Krawaczyński
24/08/2011 w Administracja Brak komentarzy. (artykuł nr 322, ilość słów: 601)
M
achine Check Exception (MCE) jest typem błędu sprzętu komputerowego, który jest wykrywany za pomocą 64 bitowego procesora (CPU) takich producentów jak AMD i Intel. W systemach Windows wyświetlany jest za pomocą niebieskiego ekranu śmierci (ang. blue screen of death), a w systemie Linux (w jądrach do wersji 2.6.4) błędy te były zapisywane do dziennika jądra za pomocą daemona klogd lub wyświetlane bezpośrednio na ekranie konsoli (głównie w przypadku poważnego błędu, po którym następowało zawieszenie maszyny):
CPU 0: Machine Check Exception: 0000000000000004 Bank 2: f200200000000863 Kernel panic: CPU context corrupt
Głównymi przyczynami, z powodu których występują błędy MCE to:
- Błędy szyny systemowej (komunikacja pomiędzy procesorem, a płytą główną),
- Błędy pamięci (związane z kontrolą parzystości, systemem kodowania korekcyjnego),
- Błędy pamięci cache procesora,
- Nieprawidłowa instalacja komponentów sprzętu,
- Overclockingiem,
- Przeładowaniem jednostki zasilającej
Powodem błędów może być również samo oprogramowanie – na przykład aplikacja wykonująca operacje odczytu / zapisu z lub do nieistniejącego obszaru pamięci może doprowadzić do błędów procesora lub płyty głównej.
Jądro systemu Linux od wersji 2.6.4 nie loguje już błędów MCE do dziennika jądra. Zamiast tego wszystkie błędy są zapisywane do specjalnego buforu jądra dostępnego poprzez urządzenie /dev/mcelog
. Do ich zdekodowania możemy użyć np. programu mcelog, który służy do odczytywania błędów z /dev/mcelog
i wyświetlania ich na standardowym wyjściu. Jego instalacja nie powinna stanowić problemu, ze względu na istnieje pakietów w takich dystrybucjach jak:
RHEL, CentOS, Fedora:
yum install mcelog
Debian / Ubuntu:
apt-get install mcelog
Slackware:
slackpkg install mcelog
Jak zalecają autorzy aplikacji – ważną rzeczą jest, aby program został odpalony w postaci daemona (w starszych wersjach programu – jego wywoływanie odbywa się za pomocą crond), dzięki czemu otrzymujemy rozszerzone możliwości wyłapywania błędów pamięci RAM oraz uruchamiania wyzwalaczy (ang. triggers). Na przykład uruchomienie programu w postaci:
./mcelog --daemon --logfile=/var/log/mcelog
Uruchomi program w tle powodując zapisywanie każdej aktywności MCE do pliku dziennika /var/log/mcelog
, który może być dalej sprawdzany za pomocą skryptu wyłapującego błędy sprzętowe:
root@stardust:~# cat /var/log/mcelog MCE 0 HARDWARE ERROR. This is *NOT* a software problem! Please contact your hardware vendor CPU 2 4 northbridge TSC 1157b0af355f7d MISC c008064f00000000 ADDR 40db12ae0 Northbridge Chipkill ECC error Chipkill ECC syndrome = 7273 bit46 = corrected ecc error bit59 = misc error valid bus error 'local node response, request didn't time out generic read mem transaction memory access, level generic' STATUS 9c39c00072080a13 MCGSTATUS 0
Tak zaraportowany błąd może zostać wyłapany, a ostrzeżenie wysłane na odpowiedni adres e-mail:
[ $(grep -c "hardware error" /var/log/mcelog) -gt 0 ] && echo "Hardware Error Found $(hostname) @ $(date) !" | mail -s 'H/w Error' monitoring@mail.com
Jak sprawdzić czy nasz procesor obsługuje MCE?
agresor@stardust:~$ grep mce /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce
Jak sprawdzić czy nasz system obsługuje MCE?
agresor@stardust:~$ grep MCE /boot/config-2.6.x CONFIG_X86_MCE=y CONFIG_X86_MCE_INTEL=y CONFIG_X86_MCE_XEON75XX=m CONFIG_X86_MCE_AMD=y
Od strony konfiguracji jądra są to opcje:
Processor type and features --> [x] Machine Check / overheating reporting [*] Intel MCE features [*] AMD MCE features
Jaka jest sama skuteczność tego programu? Według Barr’ego Abrahamson’a – inżyniera pracującego w firmie Automattic odpowiedzialnej m.in. za WordPress’a po zaraportowaniu przez mcelog błędów w poszczególnych serwerach w 9 z 10 doszło do awarii, co w takiej ilości prób dało 90% skuteczność.
Więcej informacji: linux/Documentation/x86/x86_64, Intel 64 and IA-32 Architectures Software Developer’s Manual – Interrupt 18-Machine-Check Exception (#MC), man mcelog, mcelog: memory error handling in user space, Machine check handling on Linux, Machine Check Exception Daemon.