ECC Chipkill ошибки: какой DIMM?

На наших серверах часто возникают проблемы с DIMM со следующими ошибками в системном журнале:

7 мая 09:15:31 ядро ​​nolcgi303: EDAC k8 MC0: общая ошибка шины: участвующий процессор (ответ локального узла), тип транзакции памяти с тайм-аутом (без таймаута) (общее чтение), mem или I / O (доступ к памяти), уровень кэша (общий)
7 мая 09:15:31 nolcgi303 ядро: MC0: страница CE 0xa0, смещение 0x40, зерно 8, синдром 0xb50d, строка 2, канал 0, метка "": k8_edac
7 мая 09:15:31 ядро ​​nolcgi303: MC0: CE - информация отсутствует: k8_edac Ошибка переполнения установлена
7 мая 09:15:31 nolcgi303 ядро: EDAC k8 MC0: расширенный код ошибки: ошибка ECC chipkill x4

Мы можем использовать компакт-диск HP SmartStart, чтобы определить, в каком модуле DIMM произошла ошибка, но для этого требуется отключить сервер. Есть ли хитрый способ выяснить, какой бюст DIMM, когда сервер работает? Все наши серверы являются оборудованием HP с RHEL 5.

2 ответа

Решение

В дополнение к использованию кодов EDAC, вы можете использовать CLI только утилиты HP, чтобы определить это, когда устройство находится в сети. Кли-версии гораздо более легкие, чем веб-версии, и для них не требуется открывать порты или постоянно работать демон.

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

Статус изменится для неисправных модулей.

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 и канале 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

Другие вопросы по тегам