it-swarm-pt.tech

Erros de chipkill ECC: qual DIMM?

Freqüentemente, os DIMMs em nossos servidores apresentam problemas com os seguintes erros no syslog:

7 de maio 09:15:31 kernel nolcgi303: EDAC k8 MC0: erro de barramento geral: processador participante (resposta do nó local), tempo limite (sem tempo limite) tipo de transação de memória (leitura genérica), mem ou i/o (acesso mem) , nível de cache (genérico) 
 7 de maio 09:15:31 nolcgi303 kernel: MC0: CE página 0xa0, deslocamento 0x40, grão 8, síndrome 0xb50d, linha 2, canal 0, rótulo "": k8_edac 
 7 de maio 09:15:31 nolcgi303 kernel: MC0: CE - nenhuma informação disponível: conjunto de estouro de erro k8_edac 
 7 de maio 09:15:31 nolcgi303 kernel: EDAC k8 MC0: código de erro estendido: ECC chipkill x4 erro

Podemos usar o CD HP SmartStart para determinar qual DIMM apresenta o erro, mas isso exige que o servidor saia da produção. Existe uma maneira astuta de descobrir qual DIMM falha enquanto o servidor está funcionando? Todos os nossos servidores são hardware HP executando RHEL 5.

8
markdrayton

Além de usar os códigos EDAC, você pode usar os utilitários CLI apenas da HP para determinar isso enquanto a máquina está online. 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.

hpasmcli fornecerá o cartucho e o número do módulo dos módulos com falha. Um pouco mais rápido do que analisar 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 mudará para módulos com falha.

4
Josh

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

A título de exemplo, tive que identificar um DIMM com defeito 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 com defeito em meu servidor era DIMMA0 na CPU1.

EDAC significa Detecção e correção de erros e está documentado em http://www.kernel.org/doc/Documentation/edac.txt e /usr/share/doc/kernel-doc-2.6*/ Documentação/drivers/edac/edac.txt em meu sistema (RHEL5). CE significa "erros corrigíveis" e, como indica a documentação, "CEs fornecem indicações precoces de que um DIMM está começando a falhar".

Voltando aos erros EDAC acima, vi no console do meu servidor, MC1 (Controlador de memória 1) significa CPU1, linha 1 é referido como csrow1 (Chip-Select Row 1) na documentação do Linux EDAC, e canal 0 significa canal de memória 0 . Eu verifiquei o gráfico em http://www.kernel.org/doc/Documentation/edac.txt para ver se csrow1 e Canal 0 correspondem a DIMM_A0 (DIMMA0 em 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, csrow4 e Canal 1, eu teria substituído o DIMMB2 na CPU0.)

Claro, há realmente dois slots DIMM chamados DIMMA0 em meu servidor (um para cada CPU), mas novamente o erro MC1 corresponde a CPU1, que está listado em "Localizador de banco" na saída 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:

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

Além de verificar os erros no console e nos logs, você também pode ver os erros por MC/CPU, linha/csrow e canal examinando/sys/devices/system/edac. No meu caso, os erros ocorreram apenas em 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 exemplo seja útil para quem está tentando identificar um DIMM com defeito com base em erros EDAC. Para obter mais informações, recomendo a leitura de toda a documentação do Linux EDAC em http://www.kernel.org/doc/Documentation/edac.txt

17
Philip Durbin