Linux内核下RAS(Reliability, Availability and Serviceability)功能分析记录

news2024/11/28 2:43:48

1 简介

Reliability, Availability and Serviceability (RAS) — The Linux Kernel documentation

在服务器 和 卫星等领域,对设备的稳定性要求很高,需要及时的发现并处理软/硬件上的错误。RAS功能可以用来及时的发现硬件上的错误。

RAS功能需要硬件的支持。

目录我了解到的linux内核下的RAS功能有以下几类:

  • EDAC:主要用来检测物理内存 和 PCI硬件错误
  • APEI:基于ACPI的RAS
  • ARMv8架构的RAS:使用这个功能的CPU很少,目前只知道飞腾D2000V使用了这个功能。
  • AMDGPU的RAS

2 EDAC(Error Detection And Correction)

2.1 简介

The ``edac`` kernel module's goal is to detect and report hardware errors that occur within the computer system running under linux.
                                《<kernel_src/Documentation/admin-guide/ras.rst>》

2.2 EDAC的核⼼模块:edac_core.ko

2.2.1 中断 或者 轮训模式 来获取硬件错误信息

全局变量edac_op_state用来控制使用中断 或者 轮训模式,可以通过模块参数来设置edac_op_state的值,例如:

drivers/edac/amd64_edac.c:3753:module_param(edac_op_state, int, 0444);
drivers/edac/x38_edac.c:523:module_param(edac_op_state, int, 0444);

默认为轮训模式。轮训模式下,内核会创建专用的工作队列——edac-poller来周期获取硬件错误信息。

 

2.2.2 创建专用工作队列——edac-poller

edac_init();
    -> edac_workqueue_setup();
        -> alloc_ordered_workqueue("edac-poller", WQ_MEM_RECLAIM);

对应的可以在系统下看到一个工作队列处理线程

# ps aux | grep edac-
root         124  0.0  0.0      0     0 ?        I<   10:09   0:00 [edac-poller]

2.2.3 向专用工作队列(edac-poller)添加工作项

bool edac_queue_work(struct delayed_work *work, unsigned long delay)                                                                                    
{
    return queue_delayed_work(wq, work, delay);
}
EXPORT_SYMBOL_GPL(edac_queue_work);

 

2.2.4 模块参数

# ls /sys/module/edac_core/parameters/
check_pci_errors  edac_mc_log_ue       edac_mc_poll_msec
edac_mc_log_ce    edac_mc_panic_on_ue  edac_pci_panic_on_pe

2.3 通过EDAC功能来获取物理内存的硬件ECC错误

2.3.1 ECC功能简介

ECC的⼯作原理

As mentioned on the previous section, ECC memory has extra bits to be
used for error correction. So, on 64 bit systems, a memory module
has 64 bits of *data width*, and 74 bits of *total width*. So, there are
8 bits extra bits to be used for the error detection and correction
mechanisms. Those extra bits are called *syndrome*\ [#f1]_\ [#f2]_.

So, when the cpu requests the memory controller to write a word with 
*data width*, the memory controller calculates the *syndrome* in real time,
using Hamming code, or some other error correction code, like SECDED+,
producing a code with *total width* size. Such code is then written
on the memory modules.

At read, the *total width* bits code is converted back, using the same
ECC code used on write, producing a word with *data width* and a *syndrome*.
The word with *data width* is sent to the CPU, even when errors happen.

The memory controller also looks at the *syndrome* in order to check if
there was an error, and if the ECC code was able to fix such error.
If the error was corrected, a Corrected Error (CE) happened. If not, an
Uncorrected Error (UE) happened.
                                《<kernel_src>/Documentation/admin-guide/ras.rst》

2.3.2 数据结构——struct mem_ctl_info;

struct mem_ctl_info {
    ......
    /* pointer to edac checking routine */
    void (*edac_check) (struct mem_ctl_info * mci);
    ......
};

2.3.3 创建/sys/devices/system/edac/mc/下的文件 并 创建工作项

edac_mc_add_mc_with_groups();
    -> edac_create_sysfs_mci_device();
    -> INIT_DELAYED_WORK(&mci->work, edac_mc_workq_function);

2.3.4 工作项处理函数——edac_mc_workq_function();

edac_mc_workq_function();
    -> mci->edac_check(mci);      //获取硬件错误的具体函数
    -> edac_queue_work(&mci->work, msecs_to_jiffies(edac_mc_get_poll_msec()));    //不断周期运行

上面的程序会周期运行,周期为模块参数/sys/module/edac_core/parameters/edac_mc_poll_msec。

2.3.5 /sys/devices/system/edac/mc/

请参考《<kernel_src>/Documentation/admin-guide/ras.rst》

2.3.6 实际用例(Freescale的MPC8572处理器) 

MPC8572手册上的DDR Memory Controllers信息,《MPC8572E PowerQUICC™ III Integrated Host Processor Family Reference Manual》Page9-1

 

设备树

//arch/powerpc/boot/dts/fsl/mpc8572si-post.dtsi
    memory-controller@2000 {
        compatible = "fsl,mpc8572-memory-controller";
        reg = <0x2000 0x1000>;
        interrupts = <18 2 0 0>;
    };  

    memory-controller@6000 {
        compatible = "fsl,mpc8572-memory-controller";
        reg = <0x6000 0x1000>;
        interrupts = <18 2 0 0>;
    };

edac驱动

fsl_mc_err_probe();    //drivers/edac/mpc85xx_edac.c
    -> mci->edac_check = fsl_mc_check;    //获取物理内存错误信息的关键函数
    -> edac_mc_add_mc_with_groups(mci, fsl_ddr_dev_groups);

2.4 通过EDAC功能来获取PCI硬件错误

Linux下通过EDAC功能检测PCIE硬件错误_linux如何查询pcie误码率-CSDN博客

2.5 通过EDAC功能获取其他类型硬件的错误

edac_device_add_device();
    -> edac_device_create_sysfs();
    -> edac_device_workq_setup();
        -> INIT_DELAYED_WORK(&edac_dev->work, edac_device_workq_function);

3 APEI(ACPI Platform Error Interface)

3.1 简介

APEI allows to report errors (for example from the chipset) to the operating system. This improves NMI handling especially. In addition it supports error serialization and error injection.
                                《<kernel_src>/drivers/acpi/apei/Kconfig》

ACPI Platform Error Interfaces (APEI), which provide a means for a computer platform to convey error information to OSPM.
APEI consists of four separate tables:

  • Error Record Serialization Table (ERST)
  • Boot Error Record Table (BERT)
  • Hardware Error Source Table (HEST)
  • Error Injection Table (EINJ)

                                《Advanced Configuration and Power Interface (ACPI) Specification》P793

3.2 APEI Generic Hardware Error Source(GHES)

内核配置:CONFIG_ACPI_APEI_GHES

Generic Hardware Error Source provides a way to report platform hardware errors (such as that from chipset). It works in so called "Firmware First" mode, that is, hardware errors are reported to firmware firstly, then reported to Linux by firmware. This way, some non-standard hardware error registers or non-standard hardware link can be checked by firmware to produce more valuable hardware error information for Linux.
                                《drivers/acpi/apei/Kconfig》

3.3 APEI PCIe AER logging/recovering support

内核配置:CONFIG_ACPI_APEI_PCIEAER

PCIe AER errors may be reported via APEI firmware first mode. Turn on this option to enable the corresponding support.
                                《drivers/acpi/apei/Kconfig》

调试方法

/sys/kernel/debug/tracing/events/ras/aer_event/

3.4 APEI memory error recovering support

内核配置: CONFIG_ACPI_APEI_MEMORY_FAILURE

Memory errors may be reported via APEI firmware first mode. Turn on this option to enable the memory recovering support.
                                《drivers/acpi/apei/Kconfig》

调试方法

/sys/kernel/debug/tracing/events/ras/mc_event/

3.5 APEI Error INJection (EINJ)

3.5.1 简介

内核配置: CONFIG_ACPI_APEI_EINJ

EINJ provides a hardware error injection mechanism, it is mainly used for debugging and testing the other parts of APEI and some other RAS features.
                                《drivers/acpi/apei/Kconfig》

3.5.2 Error Injection Table

The Error Injection (EINJ) table provides a generic interface mechanism through which OSPM can inject hardware errors to the platform without requiring platform specific OSPM software. System firmware is responsible for building this table, which is made up of Injection Instruction entries.
                                《Advanced Configuration and Power Interface (ACPI) Specification》P832

3.5.3 是否支持EINJ

是否存在 /sys/firmware/acpi/tables/EINJ。

go into BIOS setup to see if the BIOS has an option to enable error injection. Look for something called WHEA or similar. Often, you need to enable an ACPI5 support option prior, in order to see the APEI,EINJ,... functionality supported and exposed by the BIOS menu.
                                《Documentation/firmware-guide/acpi/apei/einj.rst》

3.5.4 /sys/kernel/debug/apei/einj/

使用方法:服务器内存故障预测居然可以这样做

3.6 ARMv8架构下对APEI中断的支持

APEI requires the equivalent of an SCI and an NMI on ARMv8. The SCI is used to notify the OSPM of errors that have occurred but can be corrected and the system can continue correct operation, even if possibly degraded. The NMI is used to indicate fatal errors that cannot be corrected, and require immediate attention.

Since there is no direct equivalent of the x86 SCI or NMI, arm64 handles these slightly differently. The SCI is handled as a high priority interrupt; given that these are corrected (or correctable) errors being reported, this is sufficient. The NMI is emulated as the highest priority interrupt possible. This implies some caution must be used since there could be interrupts at higher privilege levels or even interrupts at the same priority as the emulated NMI. In Linux, this should not be the case but one should be aware it could happen.
                                《<kernel_src>/Documentation/arm64/acpi_object_usage.rst》

3.7 关键函数——ghes_do_proc();

3.8 调试方法

# ls /sys/kernel/debug/tracing/events/ras/ -l
总用量 0
drwxr-x--- 2 root root 0 5月  13 10:09 aer_event
drwxr-x--- 2 root root 0 5月  13 10:09 arm_event
-rw-r----- 1 root root 0 5月  13 10:09 enable
drwxr-x--- 2 root root 0 5月  13 10:09 extlog_mem_event
-rw-r----- 1 root root 0 5月  13 10:09 filter
drwxr-x--- 2 root root 0 5月  13 10:09 mc_event
drwxr-x--- 2 root root 0 5月  13 10:09 memory_failure_event
drwxr-x--- 2 root root 0 5月  13 10:09 non_standard_event

4 ARMv8 的 RAS

RAS System Architecture,请看《Arm Architecture Reference Manual for Aprofile architecture》Page11593

我目前接触过的ARM处理器中,只有飞腾D2000V使用了ARMv8手册中所描述的RAS功能。

5 AMDGPU RAS Support

https://www.kernel.org/doc/html/latest/gpu/amdgpu/ras.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1670911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网页版五子棋的自动化测试

目录 前言 一、主要技术 二、测试环境的准备部署 三、测试用例 四、执行测试 4.1、公共类设计 创建浏览器驱动对象 测试套件 释放驱动类 4.2、功能测试 登录页面 注册页面 游戏大厅页面 游戏房间页面 测试套件结果 4.3、界面测试 登录页面 注册页面 游戏大…

5.13网络编程

只要在一个电脑中的两个进程之间可以通过网络进行通信那么拥有公网ip的两个计算机的通信是一样的。但是一个局域网中的两台电脑上的虚拟机是不能进行通信的&#xff0c;因为这两个虚拟机在电脑中又有各自的局域网所以通信很难实现。 socket套接字是一种用于网络间进行通信的方…

基于微信小程序+JAVA Springboot 实现的【网上商城小程序】app+后台管理系统 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称&#xff1a; 基于微信小程序的网上商城 项目技术栈 该项目采用了以下核心技术栈&#xff1a; 后端框架/库&#xff1a; Java, SSM框架数据库&#xff1a; MySQL前端技术&#xff1a; 微信开发者工具&#xff0c;微信小程序框架 项目展示 5.1 管理员服务…

链表+环-链表是否有环的判断

链表是否有环的判断 在数据结构中&#xff0c;链表是一种常见的数据结构&#xff0c;它允许我们在不需要预先知道数据总量的情况下进行数据的动态存储。然而&#xff0c;由于链表的特性&#xff0c;有时我们可能会遇到链表中出现环的情况&#xff0c;即链表的某个节点指向了链…

每日互动(个推)与您相约2024 AI+研发数字峰会(AiDD)上海站

伴随着人工智能在众多行业领域的广泛应用及其带来的颠覆性变革&#xff0c;软件的开发模式、方式和实践也将发生巨大的变化。 5月17-18日&#xff0c;2024 AI研发数字峰会&#xff08;AiDD&#xff09;上海站即将重磅开幕。峰会设置了15个主题论坛&#xff0c;策划60精彩议题内…

道格拉斯普克算法(DP)的点云轮廓线简化

1、背景介绍 由于点云无法精确刻画目标对象边缘信息&#xff0c;因此常规提取的边缘点直接相连所生成的轮廓线&#xff0c;锯齿现象显著&#xff0c;与真实情况相差甚远&#xff08;图b所示&#xff09;。 道格拉斯-普克&#xff08;Douglas-Peuker&#xff09;抽稀算法是用来对…

java 使用hh或者HH异常

故障描述 使用了HH或者hh使用时间format、DatetimeFormat注解时序列化失败 故障原因 当使用hh的时候&#xff0c;小时只能是1-24 使用KK的时候&#xff0c;小时只能是0-23 比如&#xff1a;凌晨0:30&#xff0c;使用hh就是0:30 am&#xff0c; kk就是12:30 24小时制的话,使…

01-02-4

1、中级阶段-day1作业 使用的代码 #include<stdio.h> typedef struct Student {int num;char name[20];char sex; }Stu; int main() {Stu s;scanf("%d%s %c", &s.num, s.name, &s.sex);//读取字符串时&#xff0c;scanf()的占位符用%s即可&#xff0c…

重大升级 | OpenSCA SaaS全面接入供应链安全情报!

结合社区用户反馈及研发小伙伴的积极探索&#xff0c; OpenSCA 项目组再次发力&#xff0c;SaaS版本重大升级啦&#xff01; 用户的需求是OpenSCA前进的动力&#xff0c;欢迎更多感兴趣的朋友们积极试用和反馈~ 更 新 内 容 1.全面接入云脉XSBOM供应链安全情报 2.强大的资产…

【异常】SpringBoot整合RabbitMQ-发送消息报错

错误信息 reply-code406, reply-textPRECONDITION_FAILED - inequivalent arg ‘x-message-ttl’ for queue ‘hello-queue’ in vhost ‘/lq’: received none but current is the value ‘10000’ of type ‘signedint’, class-id50, method-id10 错误原因 hello-queue这…

省公派访学|社科老师赴世界名校牛津大学开展研究

F老师已获某省公派出国访学半年的资助&#xff0c;希望落实的学校尽量知名。但因为F老师只是硕士毕业而无博士学位&#xff0c;专业方向又是社科类&#xff0c;所以申请到世界知名高校有一定难度。经过努力&#xff0c;最终我们获得了世界顶尖高校-英国牛津大学的访问学者邀请函…

C++常见十种排序方式

目录 前言 1、选择排序 介绍 参考代码 2、冒泡排序 介绍 参考代码 3、插入排序 介绍 参考代码 4、希尔排序 介绍 参考代码 5、快速排序 介绍 参考代码 6、并归排序 介绍 参考代码 7、堆排序 介绍 参考代码 8、基数排序 介绍 参考代码 9、计数排序 介绍 参考代…

用户需求甄别和筛选的6大标准

产品经理日常经常接收到大量的需求&#xff0c;并不是所有的需求都需要开发&#xff0c;需要进行甄别和筛选&#xff0c;这样有利于确保项目的成功、优化资源利用以及提高产品质量。 那么针对这些用户需求进行甄别或筛选的评判标准是什么&#xff1f;需求筛选可以说是初步的需求…

设计模式-工厂模式设计与详解

一、设计模式介绍 设计模式是我们开发中常常需要面对的核心概念&#xff0c;它们是解决特定问题的模板或者说是经验的总结。这些模式被设计出来是为了让软件设计更加清晰、代码更加可维护且能应对未来的变化。良好的设计模式不仅能解决重复代码的问题&#xff0c;还能使团队中…

关于修改ant-design-vue的table组件背景色遇到闪动的问题

项目中需要修改表格的背景色为以下样式 修改完之后发现表格行还有个hover的背景色&#xff0c;于是再次重置样式如下 .ant-table-tbody > tr {&:hover {td {// background: red !important;background: transparent !important;}}}这样重置之后&#xff0c;hover的样式…

【中级软件设计师】上午题16-算法(应试考试简略版)

上午题16-算法 1 回溯法1.1 n皇后问题 2 分治法3 动态规划3.1 0-1背包问题3.2 最长公共子序列3.3 矩阵连乘 4 贪心算法5 分支限界法总结 1 回溯法 深度优先方法搜索 1.1 n皇后问题 2 分治法 一般来说&#xff0c;分治算法在每一层递归上都有3个步骤 &#xff08;1&#xff…

【C++】详解STL的适配器容器之一:优先级队列 priority_queue

目录 堆算法 概述 向下调整建堆 向上调整建堆 建堆算法 仿函数 概述 使用介绍 emtpy size top push pop 模拟实现 仿函数 框架 向下调整算法 向上调整算法 pop push empty top 要理解优先级队列&#xff0c;需要有如下知识 STL容器之一的vector&#xf…

嵌入式:基于STM32的RFID访问控制系统

在商业和住宅建筑中&#xff0c;访问控制系统是确保安全的关键组件。使用射频识别&#xff08;RFID&#xff09;技术&#xff0c;我们可以创建一个安全、方便的门禁系统。本教程将详细说明如何使用STM32微控制器实现RFID基础的门禁系统&#xff0c;该系统能够控制电子锁并记录访…

品鉴中的品鉴笔记:如何记录和分享自己的品鉴心得

品鉴云仓酒庄雷盛红酒的过程&#xff0c;不仅是品尝美酒&#xff0c;更是一次与葡萄酒深度对话的旅程。为了更好地记录和分享自己的品鉴心得&#xff0c;养成写品鉴笔记的习惯是十分必要的。 首先&#xff0c;选择一个适合的记录工具。可以是传统的笔记本&#xff0c;也可以是…

爆!1688「搜索推广」实操打法,8大要点快速上手!

想要1688平台上提高商品的搜索排名和曝光率&#xff0c;吸引更多的潜在客户并提升销量&#xff0c;店雷达将尽量具体地介绍相关操作方法和运营思路&#xff0c;建议大家收藏起来慢慢看。 一、了解1688平台搜索方式 1、品搜&#xff1a;这是买家最常用的搜索方式&#xff0c;通…