Errores de chipkill de ECC: ¿qué DIMM?

8

A menudo tenemos DIMM en nuestros servidores que funcionan mal con los siguientes errores en syslog:

7 de mayo 09:15:31 kernel nolcgi303: EDAC k8 MC0: error general del bus: procesador participante (respuesta del nodo local), tiempo de espera (sin tiempo de espera) tipo de transacción de memoria (lectura genérica), mem o I / o (acceso mem) , nivel de caché (genérico)
7 de mayo 09:15:31 kernel nolcgi303: MC0: CE página 0xa0, offset 0x40, grano 8, síndrome 0xb50d, fila 2, canal 0, etiqueta "": k8_edac
7 de mayo 09:15:31 kernel nolcgi303: MC0: CE - no hay información disponible: k8_edac Error Overflow set
7 de mayo 09:15:31 kernel nolcgi303: EDAC k8 MC0: código de error extendido: error ECC chipkill x4

Podemos usar el CD HP SmartStart para determinar qué DIMM tiene el error, pero eso requiere sacar el servidor de producción. ¿Hay una manera astuta de averiguar qué busto de DIMM mientras el servidor está activo? Todos nuestros servidores son hardware de HP con RHEL 5.

Markdrayton
fuente
memtest86 + pero supongo que no puedes ejecutarlo mientras RHEL se está ejecutando
Alex Bolotov
¿Está ejecutando la página de inicio de HP SIM (o SIM completa en realidad) en la caja? si es así, ofrecerá mucha más información. De lo contrario, necesitaría saber un poco más de información sobre el desplazamiento de memoria debido a un error más detallado.
Chopper3
No estamos ejecutando ninguna de las cosas de HP SIM en la caja, ya que generalmente encontramos más problemas de lo que vale. Si no podemos determinar qué DIMM está muerto mientras está en línea, no es un espectáculo: estoy buscando formas de ahorrar tiempo: ~)
markdrayton

Respuestas:

4

Además de usar los códigos EDAC, puede usar las utilidades de CLI solo de HP para determinar esto mientras la máquina está en línea. Las versiones cli son mucho más livianas que las basadas en la web y no requieren que abras puertos o tengas un demonio corriendo constantemente.

hpasmcli le dará el cartucho y los números de módulo de los módulos fallidos. Un poco más rápido que analizar EDAC.

Ejemplo:

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

El estado cambiará para los módulos fallidos.

Josh
fuente
Ah, eso es asombroso! También requiere un conjunto bastante pequeño de paquetes: OpemIPMI, OpenIPMI-libs y hp-health. Al menos eso es lo que funcionó en un BL465: no pude hacer que el demonio ipmi se ejecutara en un BL25: kernel: ipmi_si: ¿No puedo encontrar ninguna interfaz de sistema? ¿Ideas? No hay mucho en Internet :(
markdrayton
Tampoco me he encontrado con ese problema. Solo utilicé las utilidades en los servidores DL380 / 5 y DL580 / 5.
Josh
17

MC0, fila 2 y canal 0 son significativos. Intente reemplazar DIMMA1 en CPU0.

A modo de ejemplo, tuve que identificar un DIMM defectuoso en un servidor Linux con 16 ranuras DIMM completamente pobladas y dos CPU. Estos son los errores que vi en la consola:

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

El DIMM incorrecto en mi servidor era DIMMA0 en la CPU1.

EDAC significa Detección y corrección de errores y está documentado en http://www.kernel.org/doc/Documentation/edac.txt y /usr/share/doc/kernel-doc-2.6*/Documentation/drivers/edac/edac .txt en mi sistema (RHEL5). CE significa "errores corregibles" y, como lo indica la documentación, "los CE proporcionan indicaciones tempranas de que un DIMM está comenzando a fallar".

Volviendo a los errores EDAC anteriores que vi en la consola de mi servidor, MC1 (Controlador de memoria 1) significa CPU1, la fila 1 se conoce como csrow1 (Chip-Select Row 1) en la documentación de Linux EDAC, y el canal 0 significa el canal de memoria 0 Verifiqué la tabla en http://www.kernel.org/doc/Documentation/edac.txt para ver que csrow1 y Channel 0 corresponden a DIMM_A0 (DIMMA0 en mi sistema):

            Channel 0       Channel 1
    ===================================
    csrow0  | DIMM_A0       | DIMM_B0 |
    csrow1  | DIMM_A0       | DIMM_B0 |
    ===================================

    ===================================
    csrow2  | DIMM_A1       | DIMM_B1 |
    csrow3  | DIMM_A1       | DIMM_B1 |
    ===================================

(Como otro ejemplo, si hubiera visto errores en MC0, csrow4 y Channel 1, habría reemplazado DIMMB2 en CPU0).

Por supuesto, en realidad hay dos ranuras DIMM llamadas DIMMA0 en mi servidor (una para cada CPU), pero nuevamente el error MC1 corresponde a la CPU1, que aparece en "Localizador de bancos" en la salida de 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:

(En mi estación de trabajo, dmidecode realmente muestra el número de pieza y el número de serie de mis DIMM, lo cual es muy útil).

Además de buscar errores en la consola y en los registros, también puede ver los errores por MC / CPU, fila / csrow y canal al examinar / sys / devices / system / edac. En mi caso, los errores fueron solo en MC1, csrow1, canal 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

Espero que este ejemplo sea útil para cualquiera que intente identificar un DIMM incorrecto basado en errores de EDAC. Para obtener más información, le recomiendo leer toda la documentación de Linux EDAC en http://www.kernel.org/doc/Documentation/edac.txt

Philip Durbin
fuente
1
¡Excelente respuesta! Esta es, de lejos, la mejor respuesta aquí y lo guía perfectamente a través de cómo clasificar el problema y aislar el DIMM malo.
slm
Y qué hacer si el mensaje es MC0: UE row 0, channel-a= 2 channel-b= 3.
Mitar