【PCIe 总线及设备入门学习专栏 9.1 -- PCIe AER 中的 aer_layer 与 aer_agent】

文章目录

  • [AER(Advanced Error Reporting)](#AER(Advanced Error Reporting))
  • [aer_layer=Transaction Layer 的含义](#aer_layer=Transaction Layer 的含义)
    • [常见 Transaction Layer 错误类型](#常见 Transaction Layer 错误类型)
  • [aer_agent=Requester ID 的含义](#aer_agent=Requester ID 的含义)
      • [Requester ID = 作为 TLP 发起者的设备 侦测到错误](#Requester ID = 作为 TLP 发起者的设备 侦测到错误)
  • 日志示例解读
  • [Requester ID 的意义 --- 如何定位设备?](#Requester ID 的意义 — 如何定位设备?)
  • 在实际系统中的典型场景
      • [DMA 发起非法访问](#DMA 发起非法访问)
      • [RC 下发非法 TLP(Host 代码 Bug)](#RC 下发非法 TLP(Host 代码 Bug))
      • [EP/RC 返回 Completion 异常](#EP/RC 返回 Completion 异常)
      • [中间设备(PCIe Switch)校验失败](#中间设备(PCIe Switch)校验失败)
  • 总结

AER(Advanced Error Reporting)

AER 是 PCIe 协议用于增强错误检测与报告的机制,主要用于捕捉:

  • 链路级错误(Physical Layer)

  • 数据链路级错误(Data Link Layer)

  • 传输层错误(Transaction Layer)

  • 协议违规(Protocol Violations)

  • TLP / DLLP 格式错误

当系统内核或 PCIe RC(Root Complex)侦测到错误时,会在 dmesg 或 AER trace 中打印:

makefile 复制代码
AER: aer_layer=Transaction Layer, aer_agent=Requester ID

aer_layer=Transaction Layer 的含义

PCIe 是三层架构:

层级 作用
Physical Layer 电气、编码、SERDES
Data Link Layer (DLL) ACK/NAK、重传、Sequence Number
Transaction Layer (TL) 构造/解析 TLP,地址/命令协议,Completer 操作

所以 Transaction Layer 报错 表示:

错误发生在 PCIe TLP(Transaction Layer Packet)处理过程中,通常属于:

常见 Transaction Layer 错误类型

错误类型 说明
Malformed TLP TLP 格式非法(Header 无效、长度错误)
Unsupported Request 接收到对端不支持的请求
Completer Abort (CA) Device 无法完成请求 Completioin
Completion Timeout (CTO) 没收到 Completion,超时
Unexpected Completion 未请求却收到 Completion
Poisoned TLP (EP-bit) TLP 被标记为 EP(poisoned)
ACS Violation 隔离检查失败

当 aer_layer=Transaction Layer,就说明:

错误不是链路物理问题,而是协议级(TLP)的问题

通常与 Host、RC、Endpoint 的 TLP 处理有关。

aer_agent=Requester ID 的含义

AER 日志中会告诉你是哪一个"Agent"检测到错误:

aer_agent 含义
Requester ID 发起 TLP 的设备发现错误
Completer ID 作为 Completion 处理者的设备发现错误
Receiver ID 接收该 TLP 的设备检测到错误
Transmitter ID 发送该 TLP 的设备发现错误

其中:

Requester ID = 作为 TLP 发起者的设备 侦测到错误

Requester ID 在 PCIe 中代表:

vbnet 复制代码
Bus:Device.Function of the device that initiated the request

解释:

  • 此错误来源于 发起 TLP 的设备(Requester)

  • Requester 在收到 Peer/RC 返回的 Completion 或 DLL 错误指示时,发现了问题

  • 因此 TLP 生命周期中,Requester 认为"我发出去的请求出现了异常"

日志示例解读

例如:

vbnet 复制代码
AER: Corrected error received: id=00e0
AER:   aer_layer=Transaction Layer
AER:   aer_agent=Requester ID
AER:   status=0x00000040 (Unsupported Request)

解释:

  • Transaction Layer → 收到的 Completion 或响应 TLP 在协议层非法

  • Requester ID → 错误是发起访问的一方(通常是 RC 或 EP endpoint DMA)发现的

  • Unsupported Request → 对端设备不支持此请求,返回 UR

此错误一般来源于:

  • DMA 发起无效地址访问

  • RC 下发了 EP 不支持的 TLP(如 I/O 访问)

  • TLP Format/Type 不符合规范

  • 访问 BAR 未启用或窗口越界

Requester ID 的意义 --- 如何定位设备?

Requester ID 通常会打印为:

ini 复制代码
id=00e0

PCIe ID 编码(PCI config space header)为:

javascript 复制代码
Bits [15:8] = Bus Number
Bits [7:3]  = Device Number
Bits [2:0]  = Function Number

例:

ini 复制代码
id=00e0 → Bus 00, Device 0x1c (28), Function 0

你可以用:

nginx 复制代码
lspci -s 00:1c.0 -vvv

查看相关设备。

在实际系统中的典型场景

以下为常见导致 Transaction Layer + Requester ID 的情况:

DMA 发起非法访问

  • DMA Engine 发出的地址超出 BAR

  • 未设置 IOMMU,虚拟地址非法

  • 访问 RC 不允许的空间(如 PCIe 配置空间)

RC 下发非法 TLP(Host 代码 Bug)

  • 内核驱动读写未映射地址

  • 访问未启用的 BAR

  • I/O Space 访问 EP 不支持导致 UR

EP/RC 返回 Completion 异常

  • EP 返回了 Malformed TLP

  • Completion Lost 或 Timeout

中间设备(PCIe Switch)校验失败

  • Switch 判定 TLP 格式错误

  • ACS/ATS 请求不被允许

总结

字段 意义
aer_layer=Transaction Layer 错误发生在 PCIe 事务层(TLP 协议级错误)
aer_agent=Requester ID 发起 TLP 的设备(DMA/RC/EP)发现错误

因此:

该 AER 日志表示:发起 PCIe 请求的设备在处理返回的 Completion 或协议时发现 TLP 错误。

多数情况由 非法访问、UR、格式错误、Completion Timeout 导致。

相关推荐
aprilaaaaa29 分钟前
(HaloOS 基于TC397学习笔记)一、环境搭建到编译demo成功
python·学习·dds·tc397
水天需01031 分钟前
ps 命令全面详解
linux·服务器·网络
知识分享小能手34 分钟前
CentOS Stream 9入门学习教程,从入门到精通,CentOS Stream 9 使用 LNMP 架构部署网站 —— 语法详解与实战案例(12)
学习·架构·centos
wgego37 分钟前
http协议中各个网段含义
网络·网络协议·http
张太行_39 分钟前
TCP连接长时间未进行数据交互是否会断开?如何维持?
网络·tcp/ip·智能路由器
Felven43 分钟前
基于DPDK的高性能网络方案
网络·dpdk·lwip
崇山峻岭之间1 小时前
C++ Prime Plus 学习笔记037
c++·笔记·学习
π同学1 小时前
遗传算法学习一之求函数的最值
学习