NFsec Logo

Przewidywanie awarii sprzętu x86_64

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.

Kategorie K a t e g o r i e : Administracja

Tagi T a g i : , , , , , , , ,

Komentowanie tego wpisu jest zablokowane.