注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

路雷米的博客

人生最难的就是在热爱和生计之间做选择, 愿每个人这一生 既对得起梦想又担得责任

 
 
 

日志

 
 

APEI介绍  

2015-02-12 13:20:44|  分类: X86知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

APEI(ACPI Platform Error Interface)

CPER & Serialization

标准错误接口 CPER(Common Platform Error Record)定义在 UEFI 2.1 specification 的 Appendix N 中。

Serialization 类似于 C++ 中的流,这里特指使用 CPER 的编码方式将记录保存在 non-volatile 的设备如 flash/NVRAM 上。

APEI 是定义在 ACPI4.0 规范中的一个面向硬件错误管理的接口。APEI 的产生,主要是为了统一 firmware/BIOS 和 OS 之间的错误交互机制,使用标准的错误接口进行管理,同时也扩展了错误接口的内容以便实现更加灵活丰富的功能,通过 APEI,firmware/BIOS 甚至可以在将错误报告到 OS 之前就进行解析,譬如通过 firmware/BIOS 提供一个简单的管理环境,不用进入 OS 就可以分析处理错误,或者利用 APEI 人为注入错误以测试某些特定的错误是否可以正确处理。本质上说,APEI 就是四张表:Error Record Serialization Table (ERST),BOOT Error Record Table (BERT),Hardware Error Source Table (HEST),Error Injection Table (EINJ)。ERST 用来保存错误记录,通过 daemon 程序可以定期写入到 flash 或者 NVRAM 这类非易失性介质中永久保存;BERT 用来记录本次启动之前保留下来的未处理的错误;HEST 则提供了对各式各样的硬件错误源的控制管理;EINJ 则是提供了一个便捷的错误注入接口以方便测试其他的 APEI 接口和相关的 RAS 特性。

APEI 所涵盖的硬件错误类型十分丰富,包括处理器,chipset,总线以及 I/O 设备产生的各种硬件错误。对于 MCE,NMI 这样的严重错误,根据错误的严重程度,可以选择通过 CPER 记录下来,或是需要重启系统,在重启系统之前同时使用 BERT 保存本次的出错信息供重启后继续处理;对于普通的错误则可以定期轮询并记录保存在磁盘上。

APEI 提供的 inject 机制十分便利。通过一个与 OS 无关的接口,注入需要的硬件错误,从而检测硬件是否可以正确的错误报告,从而达到了诊断硬件的目的。在这个基础上,OS 可以提供一个简便的错误处理机制来完善软件对硬件的诊断和管理。APEI 的 inject 实现基本上是一个 2 步操作:

  1. 软件通过 SET_ERROR_TYPE 这个动作每次在 EINJ 表中注入一个错误
  2. 软件通过 GET_TRIGGER_ERROR_ACTION_TABLE 得到需要的 Trigger Error Action 表,然后通过读写这个表来触发上一步注入的错误

从表二中可以清楚的看到 EINJ 工作的具体过程,具体的实现流程可以参见 ACPI 4.0 SPEC 的 17 章。

图 3. EINJ 执行过程
图 3. EINJ 执行过程

由于目前内核对 APEI 的支持才刚刚起步,相关的实现还没有合并到内核中。读者可以在 linux-acpi 的 git tree 中搜索相关的 patch(作者为 Huang Ying,实现主要放在 drivers/acpi/apei 目录下)。


  评论这张
 
阅读(623)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018