我们经常在我们的服务器上使DIMM发生故障,并在syslog中出现以下错误:
5月7日09:15:31 nolcgi303内核:EDAC k8 MC0:一般总线错误:参与处理器(本地节点响应),超时(无超时)内存事务types(通用读取),内存或I / O(内存访问) ,caching级别(通用) 5月7日09:15:31 nolcgi303内核:MC0:CE页面0xa0,偏移量0x40,谷物8,症状0xb50d,第2行,通道0,标签“”:k8_edac 5月7日09:15:31 nolcgi303内核:MC0:CE - 无可用信息:k8_edac错误溢出设置 5月7日09:15:31 nolcgi303内核:EDAC k8 MC0:扩展错误代码:ECC chipkill x4错误
我们可以使用HP SmartStart CD来确定哪个DIMM出现错误,但需要将服务器停止生产。 有一个狡猾的方法来确定在服务器启动时哪个DIMM崩溃了吗? 我们所有的服务器都是运行RHEL 5的HP硬件。
除了使用EDAC代码之外,还可以使用仅限HP实用程序的HP实用程序在机器联机时确定这一点。 cli版本比基于web的版本轻得多,不需要你打开端口或守护进程不断运行。
hpasmcli会为您提供故障模块的墨盒和模块#。 比分析EDAC快一点。
例:
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
状态将改变失败的模块。
MC0,第2行和第0通道是重要的。 尝试更换CPU0上的DIMMA1。
举个例子,我不得不在一台Linux服务器上find一个坏的DIMM,它有16个完全填充的DIMM插槽和两个CPU。 这些是我在控制台上看到的错误:
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
我的服务器坏的DIMM是CPU1上的DIMMA0。
EDAC代表错误检测和纠正,logging在http://www.kernel.org/doc/Documentation/edac.txt和/usr/share/doc/kernel-doc-2.6*/Documentation/drivers/edac/edac .txt在我的系统上(RHEL5)。 CE代表“可纠正的错误”,正如文档所述,“CE提供了DIMM开始失败的早期迹象。”
回到上面的EDAC错误,我在服务器的控制台上看到,MC1(内存控制器1)意味着在Linux EDAC文档中,CPU1第一行被称为csrow1(片选第一行),而通道0意味着内存通道0 。我在http://www.kernel.org/doc/Documentation/edac.txt查看了图表,看到csrow1和Channel 0对应于DIMM_A0(我系统上的DIMMA0):
Channel 0 Channel 1 =================================== csrow0 | DIMM_A0 | DIMM_B0 | csrow1 | DIMM_A0 | DIMM_B0 | =================================== =================================== csrow2 | DIMM_A1 | DIMM_B1 | csrow3 | DIMM_A1 | DIMM_B1 | ===================================
(另外一个例子,如果我在MC0,csrow4和Channel 1上看到了错误,我会在CPU0上replaceDIMMB2。)
当然,在我的服务器上实际上有两个名为DIMMA0的DIMM插槽(每个CPU一个),但MC1错误又对应于dindcode输出中的“Bank Locator”下列出的CPU1:
[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:
(在我的工作站上,dmidecode实际上显示了我的DIMM的部件号和序列号,这非常有用。)
除了查看控制台和日志中的错误外,还可以通过检查/ sys / devices / system / edac来查看每个MC / CPU,行/ csrow和通道的错误。 在我的情况下,错误只在MC1,CS1,通道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
我希望这个例子对任何试图根据EDAC错误识别坏DIMM的人都有帮助。 欲了解更多信息,我强烈build议阅读所有的Linux EDAC文档http://www.kernel.org/doc/Documentation/edac.txt