Erreurs ECC chipkill: quel module DIMM?

8

Nous obtenons souvent des modules DIMM dans nos serveurs qui vont mal avec les erreurs suivantes dans syslog:

7 mai 09:15:31 nolcgi303 noyau: EDAC k8 MC0: erreur de bus générale: processeur participant (réponse du nœud local), time-out (pas de timeout) type de transaction mémoire (lecture générique), mem ou i / o (accès mem) , niveau de cache (générique)
7 mai 09:15:31 noyau nolcgi303: MC0: page CE 0xa0, décalage 0x40, grain 8, syndrome 0xb50d, ligne 2, canal 0, étiquette "": k8_edac
7 mai 09:15:31 noyau nolcgi303: MC0: CE - aucune information disponible: k8_edac Error Overflow set
7 mai 09:15:31 noyau nolcgi303: EDAC k8 MC0: code d'erreur étendu: erreur ECC chipkill x4

Nous pouvons utiliser le CD HP SmartStart pour déterminer quelle barrette DIMM présente l'erreur, mais cela nécessite de retirer le serveur de la production. Existe-t-il un moyen astucieux de déterminer quel module DIMM tombe en panne lorsque le serveur est en marche? Tous nos serveurs sont du matériel HP exécutant RHEL 5.

Markdrayton
la source
memtest86 + mais je suppose que vous ne pouvez pas l'exécuter pendant que RHEL est en cours d'exécution
Alex Bolotov
Utilisez-vous la page d'accueil HP SIM (ou la carte SIM complète d'ailleurs) sur la boîte? si c'est le cas, cela offrira beaucoup plus d'informations. Sinon, j'aurais besoin de connaître un peu plus d'informations sur le décalage de la mémoire à partir d'une erreur plus détaillée.
Chopper3
Nous n'exécutons aucun des éléments HP SIM sur la boîte, car nous trouvons généralement plus de problèmes que cela ne vaut. Si nous ne pouvons pas déterminer quel module DIMM est mort en ligne, ce n'est pas un showstopper - je suis juste à la recherche de moyens de gagner du temps: ~)
markdrayton

Réponses:

4

En plus d'utiliser les codes EDAC, vous pouvez utiliser les utilitaires HP CLI uniquement pour le déterminer lorsque la machine est en ligne. Les versions cli sont beaucoup plus légères que celles basées sur le Web et ne nécessitent pas d'ouvrir des ports ou d'avoir un démon en cours d'exécution.

hpasmcli vous fournira la cartouche et les numéros de module des modules défectueux. Un peu plus rapide que l'analyse d'EDAC.

Exemple:

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

L'état changera pour les modules défaillants.

Josh
la source
Ah, c'est génial! Nécessite également un assez petit ensemble de packages: OpemIPMI, OpenIPMI-libs et hp-health. C'est du moins ce qui a fonctionné sur un BL465 - Je n'ai pas pu faire fonctionner le démon ipmi sur un BL25: kernel: ipmi_si: Impossible de trouver des interfaces système - des idées? Pas grand chose sur internet :(
markdrayton
Je n'ai pas rencontré ce problème non plus. Utilisé uniquement les utilitaires sur les serveurs DL380 / 5 et DL580 / 5.
Josh
17

MC0, ligne 2 et canal 0 sont significatifs. Essayez de remplacer DIMMA1 sur CPU0.

À titre d'exemple, j'ai dû identifier un mauvais module DIMM dans un serveur Linux avec 16 emplacements DIMM entièrement remplis et deux processeurs. Ce sont les erreurs que j'ai vues sur la console:

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

Le mauvais module DIMM de mon serveur était DIMMA0 sur CPU1.

EDAC signifie Error Detection And Correction et est documenté à http://www.kernel.org/doc/Documentation/edac.txt et /usr/share/doc/kernel-doc-2.6*/Documentation/drivers/edac/edac .txt sur mon système (RHEL5). CE signifie «erreurs corrigibles» et, comme l'indique la documentation, «les CE fournissent des indications précoces qu'un module DIMM commence à tomber en panne».

Pour revenir aux erreurs EDAC ci-dessus que j'ai vues sur la console de mon serveur, MC1 (contrôleur de mémoire 1) signifie CPU1, la ligne 1 est appelée csrow1 (Chip-Select Row 1) dans la documentation Linux EDAC, et le canal 0 signifie le canal de mémoire 0 J'ai vérifié le graphique à http://www.kernel.org/doc/Documentation/edac.txt pour voir que csrow1 et Channel 0 correspondent à DIMM_A0 (DIMMA0 sur mon système):

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

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

(Comme autre exemple, si j'avais vu des erreurs sur MC0, csrow4 et Channel 1, j'aurais remplacé DIMMB2 sur CPU0.)

Bien sûr, il y a en fait deux emplacements DIMM appelés DIMMA0 sur mon serveur (un pour chaque CPU), mais encore une fois l'erreur MC1 correspond à CPU1, qui est répertoriée sous "Bank Locator" dans la sortie 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:

(Sur mon poste de travail, dmidecode affiche en fait le numéro de pièce et le numéro de série de mes modules DIMM, ce qui est très utile.)

En plus de regarder les erreurs sur la console et dans les journaux, vous pouvez également voir les erreurs par MC / CPU, ligne / csrow et canal en examinant / sys / devices / system / edac. Dans mon cas, les erreurs étaient uniquement sur 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

J'espère que cet exemple est utile pour quiconque essaie d'identifier un mauvais module DIMM en raison d'erreurs EDAC. Pour plus d'informations, je recommande fortement de lire toute la documentation Linux EDAC sur http://www.kernel.org/doc/Documentation/edac.txt

Philip Durbin
la source
1
Super réponse! C'est de loin la meilleure réponse ici et vous guide parfaitement à la fois pour trier le problème et isoler le mauvais module DIMM.
slm
Et que faire si le message est MC0: UE row 0, channel-a= 2 channel-b= 3.
Mitar