Erros de chipkill ECC: qual DIMM?

8

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

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

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

markdrayton
fonte
memtest86 +, mas eu suponho que você não pode executá-lo enquanto RHEL está em execução
Alex Bolotov
Você está executando a página inicial do HP SIM (ou SIM completo) na caixa? Nesse caso, oferecerá muito mais informações. Caso contrário, eu precisaria saber um pouco mais de informações sobre o deslocamento da memória devido a um erro mais detalhado.
Chopper3
Não estamos executando nenhum material HP SIM na caixa, pois geralmente encontramos mais problemas do que vale a pena. Se não pudermos descobrir qual DIMM está morto, enquanto on-line não é um showstopper - Estou à procura de maneiras de economizar tempo: ~)
markdrayton

Respostas:

4

Além de usar os códigos EDAC, você pode usar apenas os utilitários HP da CLI para determinar isso enquanto a máquina estiver online. As versões cli são muito mais leves 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 número do cartucho e 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.

Josh
fonte
Ah, isso é demais! Também requer um conjunto bastante pequeno de pacotes: OpemIPMI, OpenIPMI-libs e hp-health. Pelo menos foi o que funcionou em um BL465 - eu não consegui que o daemon ipmi rodasse em um BL25: kernel: ipmi_si: Não foi possível encontrar nenhuma idéia da Interface do Sistema? Não muito na internet :(
markdrayton
Também não encontrei esse problema. Utilizou apenas os utilitários nos servidores DL380 / 5 e DL580 / 5.
Josh
17

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

A título de 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 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*/Documentation/drivers/edac/edac .txt no 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 (Memory Controller 1) significa CPU1, a linha 1 é referida como csrow1 (Chip-Select Row 1) na documentação do Linux EDAC e o canal 0 significa o canal de memória 0 Verifiquei o gráfico em http://www.kernel.org/doc/Documentation/edac.txt para ver se o csrow1 e o canal 0 correspondem ao 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, csrow4 e Canal 1, eu teria substituído o DIMMB2 na CPU0.)

Obviamente, existem dois slots DIMM chamados DIMMA0 no meu servidor (um para cada CPU), mas novamente o erro MC1 corresponde à CPU1, listada em "Localizador de Banco" 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 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 examinar 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 foram apenas no canal MC1, csrow1, 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 pessoa que tente identificar um DIMM ruim com base nos erros do 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

Philip Durbin
fonte
11
Ótima resposta! Essa é, de longe, a melhor resposta aqui e mostra perfeitamente como triar o problema e isolar o DIMM ruim.
Slm
E o que fazer se a mensagem for MC0: UE row 0, channel-a= 2 channel-b= 3.
Mitar