1. 工具rasdaemon
1.1. 流程分析
Rasdaemon无论是以后台服务启动,还是以前台方式运行,其核心处理流程都是函数handle_ras_events,该函数通过ftrace机制监听每个cpu上的ras事件。
对应的监控路径是/sys/kernel/debug/tracing/instances/rasdaemon/events/。
监控范围包括ras/mc_event、ras/aer_event、ras/non_standard_event、ras/arm_event、mce/mce_record、ras/extlog_mem_event、net/net_dev_xmit_timeout、devlink/devlink_health_report、block/block_rq_error or k/block_rq_complete、ras/memory_failure_event。
以ras/mce_record为例,rasdaemon监听到的,实际上是内核mce_early_notifier通知处理流程输出的trace数据。
当监听到期望的ras事件后,会基于ftrace的输出格式,自动对数据进行解析并输出,同时支持保存到数据库文件(对应-r启动参数)。
命令”ras-mc-ctl --errors”,可用于查看保存在数据库中的ras事件,示例如下。
新版本Rasdaemon还支持,基于针对同一地 址在一定周期内,连续出现CE错误并超过一定阈值时,主动对该CE内存进行隔离处理。
相关配置信息,可通过PAGE_CE_THRESHOLD、PAGE_CE_REFRESH_CYCLE环境变量,在启动时传递给rasdaemon进程,默认配置阈值每天50次。
2. 工具edac-util
2.1. 流程分析
Edac-util -r命令可用于查询内核记录的内存故障统计信息,但只能精确到那根DIMM存在故障以及故障的次数,无法确认具体的故障位置。
由于这部分数据未被持久化,因此edac-util只能查询,自设备启动以后发生的内存故障信息。
执行流程直接遍历并读取内核提供的/sys/devices/system/edac/mc/mcx/*文件,进而获取并输出内存故障的ce/uce统计值。
虽然edac-util命令只能查看内存故障的统计值,但是内核edac机制会基于不同的硬件实现,提供更加详细的内存故障解码信息,并输出到日志文件。
同时内核edac机制还会通过trace_mc_event事件,将解码后的故障信息上报出去,这些信息会被rasdaemon监控并保存。
3. 工具mcelog
3.1. 流程分析
Mcelog可用于直接查看或后台监控设备的mce问题,其监控信息可通过日志的方式输出到syslog或指定文件。
除此之外还支持用户态自定义mce故障处理,例如内存隔离、关闭cpu等,详见/etc/mcelog/mcelog.conf及相关trigger处理文件。
Mcelog通过/dev/mcelog和内核交互,/dev/mcelog内部维护了一个缓存区,用于缓存已发生的mce信息,并且在读取后会被立即清理。
Mcelog的数据来源和前面提到的trace_mce_record、trace_mc_event基本一样,都是来源于mce_register_decode_chain通知链。
由于该通知链由异步work执行,再通过trace或缓存区传递到用户态,因此其执行过程不会影响mce的中断处理流程。同时在严重的mce场景,也可能还没执行设备就复位了,因此记录的信息可能存在缺失。
除此之前mcelog还支持从bios erst中读取mce信息,这部分信息通常在mce发生后,在内核的mce_panic流程中,被保存到bios erst区域。
同时mcelog支持通过软件模拟mce错误,但本质上是基于mce-inject.ko的功能,而mce-inject.ko自身就提供了debugfs注入接口。其故障注入原理是通过nmi触发对应的cpu进入特定处理流程,并调用do_machine_check处理注入的软件mce故障信息。
4. 分析总结
在mce领域rasdaemon、edac-util、mcelog获取的数据同源,都来自内核mce解码通知链。
其中rasdaemon监控范围最全,包括除mce外的多种硬件故障,同时还支持数据持久化功能。
其中edac-util只能查看内核edac机制保存的mce故障统计信息,且该功能已被rasdaemon涵盖。
其中mcelog支持自定义mce故障处理,但未看到自定义处理的明显必要性,且现有自定义处理功能已被rasdaemon涵盖。同时mcelog还支持从bios erst中读取mce故障信息,可考虑移植该功能到rasdaemon。
z上所述,建议选型rasdaemon作为系统默认ras监控服务,同时这也是业界的演进趋势。