Мы часто получаем неисправные модули DIMM на наших серверах со следующими ошибками в системном журнале:
May 7 09:15:31 nolcgi303 kernel: EDAC k8 MC0: general bus error: participating processor(local node response), time-out(no timeout) memory transaction type(generic read), mem or i/o(mem access), cache level(generic) May 7 09:15:31 nolcgi303 kernel: MC0: CE page 0xa0, offset 0x40, grain 8, syndrome 0xb50d, row 2, channel 0, label "": k8_edac May 7 09:15:31 nolcgi303 kernel: MC0: CE - no information available: k8_edac Error Overflow set May 7 09:15:31 nolcgi303 kernel: EDAC k8 MC0: extended error code: ECC chipkill x4 error
Мы можем использовать компакт-диск HP SmartStart, чтобы определить, в каком из модулей DIMM возникла ошибка, но для этого потребуется снять сервер с производства. Есть ли хитрый способ определить, какой модуль DIMM не работает, пока сервер работает? Все наши серверы - это оборудование HP, работающее под управлением RHEL 5.
MC0, строка 2 и канал 0 имеют значение. Попробуйте заменить DIMMA1 на CPU0.
В качестве примера мне пришлось идентифицировать неисправный DIMM на сервере Linux с 16 полностью заполненными слотами DIMM и двумя процессорами. Вот ошибки, которые я видел на консоли:
EDAC k8 MC1: general bus error: participating processor(local node origin), time-out(no timeout) memory transaction type(generic read), mem or i/o(mem access), cache level(generic)
EDAC MC1: CE page 0x103ca78, offset 0xf88, grain 8, syndrome 0x9f65, row 1, channel 0, label "": k8_edac
EDAC MC1: CE - no information available: k8_edac Error Overflow set
EDAC k8 MC1: extended error code: ECC chipkill x4 error
Плохой модуль DIMM на моем сервере был DIMMA0 на CPU1.
EDAC означает «Обнаружение и исправление ошибок» и задокументирован на http://www.kernel.org/doc/Documentation/edac.txt и /usr/share/doc/kernel-doc-2.6*/Documentation/drivers/edac/edac.txt в моей системе (RHEL5). CE означает «исправимые ошибки», и, как указано в документации, «CE предоставляют ранние признаки того, что DIMM начинает выходить из строя».
Возвращаясь к приведенным выше ошибкам EDAC, которые я видел на своей серверной консоли, MC1 (контроллер памяти 1) означает CPU1, строка 1 называется csrow1 (Chip-Select Row 1) в документации Linux EDAC, а канал 0 означает канал памяти 0 . Я проверил диаграмму на http://www.kernel.org/doc/Documentation/edac.txt чтобы увидеть, что csrow1 и канал 0 соответствуют DIMM_A0 (DIMMA0 в моей системе):
Channel 0 Channel 1
===================================
csrow0 | DIMM_A0 | DIMM_B0 |
csrow1 | DIMM_A0 | DIMM_B0 |
===================================
===================================
csrow2 | DIMM_A1 | DIMM_B1 |
csrow3 | DIMM_A1 | DIMM_B1 |
===================================
(В качестве другого примера, если бы я увидел ошибки на MC0, csrow4 и Channel 1, я бы заменил DIMMB2 на CPU0.)
Конечно, на моем сервере есть два слота DIMM, называемых DIMMA0 (по одному для каждого процессора), но опять же ошибка MC1 соответствует CPU1, который указан в разделе «Bank Locator» в выходных данных dmidecode:
[root@rce-8 ~]# dmidecode -t memory | grep DIMMA0 -B9 -A8
Handle 0x002E, DMI type 17, 27 bytes.
Memory Device
Array Handle: 0x002B
Error Information Handle: Not Provided
Total Width: 72 bits
Data Width: 64 bits
Size: 4096 MB
Form Factor: DIMM
Set: None
Locator: DIMMA0
Bank Locator: CPU0
Type: DDR2
Type Detail: Synchronous
Speed: 533 MHz (1.9 ns)
Manufacturer:
Serial Number:
Asset Tag:
Part Number:
--
Handle 0x003E, DMI type 17, 27 bytes.
Memory Device
Array Handle: 0x002B
Error Information Handle: Not Provided
Total Width: 72 bits
Data Width: 64 bits
Size: 4096 MB
Form Factor: DIMM
Set: None
Locator: DIMMA0
Bank Locator: CPU1
Type: DDR2
Type Detail: Synchronous
Speed: 533 MHz (1.9 ns)
Manufacturer:
Serial Number:
Asset Tag:
Part Number:
(На моей рабочей станции dmidecode фактически показывает номер детали и серийный номер для моих модулей DIMM, что очень полезно.)
Помимо просмотра ошибок на консоли и в журналах, вы также можете увидеть ошибки для MC / CPU, строки / csrow и канала, проверив / sys / devices / system / edac. В моем случае ошибки были только на MC1, csrow1, канале 0:
[root@rce-8 ~]# grep "[0-9]" /sys/devices/system/edac/mc/mc*/csrow*/ch*_ce_count
/sys/devices/system/edac/mc/mc0/csrow0/ch0_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow0/ch1_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow1/ch0_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow1/ch1_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow2/ch0_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow2/ch1_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow3/ch0_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow3/ch1_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow4/ch0_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow4/ch1_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow5/ch0_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow5/ch1_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow6/ch0_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow6/ch1_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow7/ch0_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow7/ch1_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow0/ch0_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow0/ch1_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow1/ch0_ce_count:6941652
/sys/devices/system/edac/mc/mc1/csrow1/ch1_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow2/ch0_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow2/ch1_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow3/ch0_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow3/ch1_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow4/ch0_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow4/ch1_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow5/ch0_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow5/ch1_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow6/ch0_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow6/ch1_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow7/ch0_ce_count:0
/sys/devices/system/edac/mc/mc1/csrow7/ch1_ce_count:0
Надеюсь, этот пример будет полезен всем, кто пытается определить неисправный модуль DIMM на основе ошибок EDAC. Для получения дополнительной информации я настоятельно рекомендую прочитать всю документацию Linux EDAC по адресу http://www.kernel.org/doc/Documentation/edac.txt
Помимо использования кодов EDAC, вы можете использовать только CLI-утилиты HP, чтобы определить это, когда машина находится в сети. Версии cli намного легче, чем веб-версии, и не требуют открытия портов или постоянного запуска демона.
hpasmcli предоставит вам картридж и номера модулей неисправных модулей. Немного быстрее, чем анализировать EDAC.
Пример:
hpasmcli -s "show dimm"
DIMM Configuration
------------------
Cartridge #: 0
Module #: 1
Present: Yes
Form Factor: 9h
Memory Type: 13h
Size: 1024 MB
Speed: 667 MHz
Status: Ok
Cartridge #: 0
Module #: 2
Present: Yes
Form Factor: 9h
Memory Type: 13h
Size: 1024 MB
Speed: 667 MHz
Status: Ok
Cartridge #: 0
Module #: 3
Present: Yes
Form Factor: 9h
Memory Type: 13h
Size: 1024 MB
Speed: 667 MHz
Status: Ok
Cartridge #: 0
Module #: 4
Present: Yes
Form Factor: 9h
Memory Type: 13h
Size: 1024 MB
Speed: 667 MHz
Status: Ok
Статус неисправных модулей изменится.