[DRAM Memory Address Mapping]在LINUX环境下,获取DRAM行列地址(DRAM Address)的编程实现

DRAM行列地址定义

CPU SOCKET---->Memory Controller----->Channel------->DIMM------->Rank------->Chip------------>Bank Group-------->Bank-------->Memory Array------->Row&Column

物理地址和DRAM行列地址的映射

[DRAM Memory Address Mapping]DRAM的结构原理剖析-CSDN博客

在LINUX环境下,获取DRAM行列地址的编程实现


Machine Check Exception (MCE) 是一种硬件错误,通常与CPU、内存、电源或者散热系统等硬件问题相关。当系统的硬件组件发生故障或者不能正确执行指令时,硬件会生成一个MCE错误,操作系统会捕获这个错误并显示给用户。

解决方法:

查看日志:检查dmesg日志或者系统日志文件,如/var/log/messages或/var/log/syslog,以获取MCE错误的详细信息。

硬件测试:如果日志显示硬件故障,可以使用内置工具如memtest(内存测试)、memtest86+等来检查内存问题。

硬件检查:检查CPU散热器和电源供应是否正常,确保没有硬件故障。

BIOS更新:检查并更新BIOS/UEFI固件到最新版本。

驱动更新:更新硬件驱动到最新版本。

硬件更换:如果确定是硬件故障,可能需要更换相应的硬件组件。

系统修复:如果问题依然存在,可以尝试重装操作系统或者使用恢复工具进行系统恢复。

联系支持:如果以上步骤无法解决问题,可以联系硬件制造商的技术支持。

MCE(Machine Check Exception)是由CPU侦测出来的错误,它错误包含两种主要类型:notice(提示)/warning(警告),和fatal exception(致命性的错误)。Warning(警告)将会在你的系统log下输出一条类似于"Machine Check Event logged"的信息,我们可以通过一些linux的应用程序对这部分log进行详细的信息查看;而fatal MCE(致命的错误)会导致机器停止响应,MCE的详细信息也将会输出到系统的console中。

什么会导致MCE错误出现?

       常见原因有以下几种:

            1. 内存错误或ECC问题

            2. 冷却不足、CPU过热

            3. 系统总线错误

            4. 缓存处理器或硬件错误

如何找出MCE错误对应的含义?

       Linux系统下,如果在Console或者系统log中看到MCE的错误,可以运行mcelog命令从系统内核中读取详细的信息。需要注意的是,一旦运行了mcelog,我们将无法再通过这条命令去查询已经出现的错误,所以最好运行mcelog的时候讲文本输出到文件中以做进一步的分析,参考命令如下:

       root @ localhost:/ root> / usr / sbin / mcelog> mcelog.ou

       有些系统会定期执行这个操作,并将文件输出到/var/log/mcelog中,因此,如果系统log中发现了MCE信息,但是使用mcelog查询不到任何数据时,可以试着查看/var/log/mcelog文件。

致命的MCE错误导致机器停止响应后我们需要怎么办?

       致命的MCE错误通常都是由硬件错误所引起的,我们通过重启设备重新进入系统后,首先需要查看系统log,一个典型的MCE相关的错误log如下:

       CPU 1: Machine Check Exception: 4 Bank 4: f600200137080813

       TSC b0ce27165dd3 ADDR 180ee1b40

这时我们可以通过mcelog去将这条error log的详细信息dump出来,命令如下:

       root@localhost:/root> /usr/sbin/mcelog --ascii < myerror

得到的详细错误信息如下:

       HARDWARE ERROR. This is *NOT* a software problem!

       Please contact your hardware vendor

       CPU 1 4 northbridge TSC b0ce27165dd3

       Northbridge Chipkill ECC error

       Chipkill ECC syndrome = 3700

       bit32 = err cpu0

       bit45 = uncorrected ecc error

       bit57 = processor context corrupt

       bit61 = error uncorrected

       bit62 = error overflow (multiple errors)

       bus error 'local node origin, request didn't time out

       generic read mem transaction

       memory access, level generic'

       STATUS f600200137080813 MCGSTATUS 4

       这表示发生了Uncorrected ECC error,意味着其中一根内存模块出现了问题。

什么是机器检查异常(Machine Check Exception)?
联想服务器学习笔记一

一 名词解释:
RSA: Reliability, availability and serviceability 新的可靠性,可用性和可维护性

MCA: Machine Check Architecture 机器检查架构:CPU将硬件错误报告给操作系统

MCE: Machine Check Exception 机器检查异常

CMCI: Corrected Machine Check Interrupt 可纠正的机器检查中断

IMC:集成内存控制器

二:MCE中最常见的4种错误
1、内存错误或纠错码(ECC)问题
2、CPU温度高/散热问题
3、系统总线错误
4、处理器或硬件中的缓存错误
三:MCE错误类型
Corrected Error (CE): 硬件能纠正的错误
Uncorrected Error (UC): 硬件不能纠正此错误,os不能继续运行
Uncorrected Recoverable Error (UCR): 未更正的可恢复错误
Software Recoverable Action Required (SRAR): 检测到错误,并且处理器已经占用了内存。 建议系统重启
Software Recoverable Action Optional (SRAO) : 内存中的某些数据已损坏。 但是尚未消耗数据,系统可以执行恢复操作。
Uncorrected No Action Required (UCNA) : 内存中的某些数据已损坏,但尚未消耗掉,系统可能会继续运行
四:MCE的特征
4.1 MCA Recovery
新的英特尔至强可扩展系列处理器支持基于MCA的恢复机制,从某些内存错误中进行恢复。 这要求操作系统将内存页面声明为“这个东西有毒!”,并终止与该页面关联的进程,并避免以后再使用该页面。

MCA机制用于检测,发信号和记录机器故障信息。 这些故障中的一些是可以纠正的,而另一些是无法纠正的。 MCA机制为了帮助CPU设计人员和CPU调试人员诊断,隔离和了解处理器故障。 帮助系统管理员检测在服务器长期运行期间遭受的短暂故障和与老化有关的故障

MCA恢复功能是基于intel 至强可扩展系列处理器(lga3467)的服务器的容错功能的一部分。 这些功能使系统在检测到未纠正的错误时可以继续运行。 如果没有这些功能,则系统将崩溃,并且可能需要更换硬件或重新引导系统.

MCA Recovery处理以下2种错误:

SRAR
SRAO
下面是linux操作系统错误处理流程:

可以看出来。
针对可以纠正的错误(UCNA和CE),直接反映给mcelog daemon。
针对不可纠正错误,操作系统不能继续运行的(UC),直接传递到linux内核错误上去。
针对未纠正可恢复的错误(UCR),如果是SRAR,需要系统重启的,传递到内核空间,然后在用户空间杀死进程。如果是SRAO,在内核空间中忽略,在用户空间隔离。

能够有效的避免系统错误,导致server异常。

具体获取内存故障位置的办法参见:

Linux操作系统mcelog如何工作 - 张兴龙 - 博客园

硬件排查
日志报错查看/var/log/messages或/var/log/mcelog 有报错,不知道有什么方法可以找出mc0: csrow6: CPU_SrcID#0_Ha#0_Channel#3是哪个内存DIMM,其中的chanel和csrow分别代表什么意思?
[30200989.742558] {1}[Hardware Error]: Hardware error from APEIGeneric Hardware Error Source: 65534
[30200989.742562] {1}[Hardware Error]: It has been corrected by h/wand requires no further action
[30200989.742566] {1}[Hardware Error]: event severity: corrected
[30200989.742568] {1}[Hardware Error]: Error 0, type: corrected
[30200989.742571] {1}[Hardware Error]: section type: unknown,330f1140-72a5-11df-9690-0002a5d5c51b
[30200989.742578] {2}[Hardware Error]: Hardware error from APEIGeneric Hardware Error Source: 0
[30200989.742580] {2}[Hardware Error]: It has been corrected by h/wand requires no further action
[30200989.742608] {2}[Hardware Error]: event severity: corrected
[30200989.742609] {2}[Hardware Error]: Error 0, type: corrected
[30200989.742610] {2}[Hardware Error]: fru_text: A5
[30200989.742614] {2}[Hardware Error]: section_type: memory error
[30200989.742615] {2}[Hardware Error]: error_status:0x0000000000000400
[30200989.742617] {2}[Hardware Error]: physical_address:0x0000000f98cf5fc0
[30200989.742619] {2}[Hardware Error]: node: 1 card: 1 module: 0rank: 1 bank: 1 row: 42861 column: 192
[30200989.742621] {2}[Hardware Error]: error_type: 13, scrubcorrected error
[30200989.742623] {2}[Hardware Error]: DIMM location: not present.DMI handle: 0x0000
[30200989.742655] EDAC skx MC1: HANDLING MCE MEMORY ERROR
[30200989.742661] EDAC skx MC1: CPU 0: Machine Check Event: 0 Bank1: 940000000000009f
[30200989.742672] EDAC skx MC1: TSC 105192b3d65b124
[30200989.742674] EDAC skx MC1: ADDR f98cf5fc0
[30200989.742675] EDAC skx MC1: MISC 0
[30200989.742677] EDAC skx MC1: PROCESSOR 0:50654 TIME 1557145393SOCKET 0 APIC 0
[30200989.742694] EDAC MC1: 0 CE memory read error onCPU_SrcID#0_MC#1_Chan#1_DIMM#0 (channel:1 slot:0 page:0xf98cf5offset:0xfc0 grain:32 syndrome:0x0 - err_code:0000:009f socket:0imc:1 rank:1 bg:3 ba:1 row:a362 col:1a8)
[30200989.744952] __get_any_page: 0xf98cf5 free huge page
[30201088.985651] mce: [Hardware Error]: Machine check eventslogged

linux使用edac_util输出确认故障硬件位置  mc1: csrow0: CPU_SrcID#1_Ha#0_Chan#0_DIMM#0: 1 Corrected Errors
[root@zxl]# edac-util -v
mc0: 0 Uncorrected Errors with no DIMM info
mc0: 0 Corrected Errors with no DIMM info
mc0: csrow0: 0 Uncorrected Errors
mc0: csrow0: CPU_SrcID#0_Ha#0_Chan#0_DIMM#0: 0 Corrected Errors
mc0: csrow0: CPU_SrcID#0_Ha#0_Chan#1_DIMM#0: 0 Corrected Errors
mc0: csrow0: CPU_SrcID#0_Ha#0_Chan#2_DIMM#0: 0 Corrected Errors
mc0: csrow0: CPU_SrcID#0_Ha#0_Chan#3_DIMM#0: 0 Corrected Errors
mc1: 0 Uncorrected Errors with no DIMM info
mc1: 0 Corrected Errors with no DIMM info
mc1: csrow0: 0 Uncorrected Errors
mc1: csrow0: CPU_SrcID#1_Ha#0_Chan#0_DIMM#0: 1 Corrected Errors
mc1: csrow0: CPU_SrcID#1_Ha#0_Chan#1_DIMM#0: 0 Corrected Errors
mc1: csrow0: CPU_SrcID#1_Ha#0_Chan#2_DIMM#0: 0 Corrected Errors
mc1: csrow0: CPU_SrcID#1_Ha#0_Chan#3_DIMM#0: 0 Corrected Errors

既然LINUX MCE工具可以获取到定位到故障物理内存地址对应的内存位置,即DRAM行列地址。

那么,我们需要做的就是将MCE这部分代码移植到我们自己的项目中。

Reference:

1. Machine-check exception, https://en.wikipedia.org/wiki/Machine-check_exception

2. What are Machine Check Exceptions (or MCE)?

http://www.advancedclustering.com/act_kb/what-are-machine-check-exceptions-or-mce/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值