Erros de chipkill ECC: qual DIMM?

8

Geralmente, os DIMMs em nossos servidores ficam ruins com os seguintes erros no syslog:

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

Podemos usar o CD do HP SmartStart para determinar qual DIMM tem o erro, mas isso exige que o servidor fique fora da produção. Existe uma maneira inteligente de descobrir qual busto do DIMM enquanto o servidor está ativo? Todos os nossos servidores são hardware HP executando o RHEL 5.

    
por markdrayton 07.05.2009 / 10:20

2 respostas

4

Além de usar os códigos EDAC, você pode usar os utilitários da CLI somente da HP para determinar isso enquanto a máquina estiver on-line. As versões cli são muito mais leves do que as baseadas na web e não exigem que você abra portas ou tenha um daemon em execução constante.

O hpasmcli fornecerá o cartucho e o número do módulo dos módulos com falha. Um pouco mais rápido do que analisar o EDAC.

Exemplo:

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

O status será alterado para os módulos com falha.

    
por 01.06.2009 / 22:51
17

MC0, linha 2 e canal 0 são significativos. Tente substituir o DIMMA1 na CPU0.

Por exemplo, eu tive que identificar um DIMM ruim em um servidor Linux com 16 slots DIMM totalmente preenchidos e duas CPUs. Estes são os erros que vi no 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

O DIMM ruim no meu servidor era DIMMA0 na CPU1.

EDAC significa Error Detection And Correction e está documentado no link e / usr / share / doc /kernel-doc-2.6*/Documentation/drivers/edac/edac.txt no meu sistema (RHEL5). CE significa "erros corrigíveis" e, como a documentação indica, "CEs fornecem indicações antecipadas de que um DIMM está começando a falhar."

Voltando aos erros do EDAC acima que vi no console do meu servidor, MC1 (Controlador de Memória 1) significa CPU1, a linha 1 é referida como csrow1 (Chip-Select Row 1) na documentação do Linux EDAC e o canal 0 significa canal de memória 0. Verifiquei o gráfico no link para ver que csrow1 e Channel 0 correspondem a DIMM_A0 (DIMMA0 no meu 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 outro exemplo, se eu tivesse visto erros no MC0, no csrow4 e no canal 1, eu teria substituído o DIMMB2 na CPU0.)

É claro que existem dois slots DIMM chamados DIMMA0 no meu servidor (um para cada CPU), mas novamente o erro MC1 corresponde ao CPU1, listado em "Bank Locator" na saída do 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:

(Na minha estação de trabalho, o dmidecode na verdade mostra o número da peça e o número de série dos meus DIMMs, o que é muito útil.)

Além de observar erros no console e nos logs, você também pode ver erros por MC / CPU, linha / canal e canal examinando / sys / devices / system / edac. No meu caso, os erros foram apenas no 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 exemplo seja útil para qualquer um que esteja tentando identificar um DIMM incorreto com base em erros do EDAC. Para mais informações, eu recomendo a leitura de toda a documentação do Linux EDAC no link

    
por 15.05.2009 / 22:21