it-swarm-es.com

Errores de chipkill ECC: ¿qué DIMM?

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 a mem) , nivel de caché (genérico) 
 7 de mayo 09:15:31 nolcgi303 kernel: MC0: CE página 0xa0, desplazamiento 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: ECC chipkill x4 error

Podemos usar el CD de HP SmartStart para determinar qué DIMM tiene el error, pero eso requiere sacar el servidor de producción. ¿Existe una forma ingeniosa de averiguar qué DIMM se estropea mientras el servidor está activo? Todos nuestros servidores son hardware HP que ejecutan RHEL 5.

8
markdrayton

Además de usar los códigos EDAC, puede usar las utilidades de HP únicamente de CLI para determinar esto mientras la máquina está en línea. Las versiones de cli son mucho más ligeras que las basadas en web y no requieren que abra puertos o tenga un demonio en ejecución constantemente.

hpasmcli le dará el número de cartucho y 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.

4
Josh

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 llenas 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 defectuoso en mi servidor era DIMMA0 en CPU1.

EDAC significa Error Detection And Correction 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 indica la documentación, "los CE proporcionan indicaciones tempranas de que un DIMM está comenzando a fallar".

Volviendo a los errores de 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 . Revisé 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 CPU1, que se enumera en "Bank Locator" en la salida de dmidecode:

[[email protected] ~]# 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 errores por MC/CPU, fila/csrow y canal examinando/sys/devices/system/edac. En mi caso, los errores fueron solo en MC1, csrow1, canal 0:

[[email protected] ~]# 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 defectuoso según los errores de EDAC. Para obtener más información, recomiendo leer toda la documentación de EDAC de Linux en http://www.kernel.org/doc/Documentation/edac.txt

17
Philip Durbin