当前位置: 首页 > news >正文

PCIE 配置空间 拓展能力 定义

今天我们学习一下pcie配置空间所有可能的拓展能力,有点多,有点枯燥,但是又不是必须背完

了解一点是一点,每天早读一遍,日积月累就可以成为pcie协议的掌握者,可以搭配不同设备一点一点探索

pcie拓展能力的header都一样,定义如下所示

在linux仓库的 include/uapi/linux/pci_reg.h 清晰的定义了如下的cap id

标准能力定义:

拓展能力定义:

0x01 — Advanced Error Reporting (AER)

提供更细粒度的错误分类:致命(Fatal)、非致命(Non-Fatal)、可纠正(Correctable)。

支持记录错误源 Bus/Device/Function,保留触发错误的 TLP 头部,方便软件诊断。

在调试链路 CRC 错误、掉速、意外断连时非常有用。

常见位置:Root Port、Endpoint、Switch 调试经验lspci -vvvAER 条目,然后用 setpci 读写相应寄存器定位错误源。

Uncorrectable Error Status Register (Offset 04h)

Uncorrectable Error Mask Register (Offset 08h)

Uncorrectable Error Severity Register (Offset 0Ch)

Correctable Error Status Register (Offset 10h)

Correctable Error Mask Register (Offset 14h)

Advanced Error Capabilities and Control Register (Offset 18h)

Header Log Register (Offset 1Ch)

Root Error Command Register (Offset 2Ch)

Root Error Status Register (Offset 30h)

Error Source Identification Register (Offset 34h)

TLP Prefix Log Register (Offset 38h)


0x02 — Virtual Channel (VC)

允许在一条物理链路上建立多个“虚拟信道”,每个信道可独立调度带宽与优先级。

类似网络 QoS,可保证关键流量不被大流量设备占满链路。

常见位置:高端 Switch、Root Port、数据中心网卡 调试经验:很少在消费级设备上用,服务器和嵌入式 SoC 常配合 SR-IOV 做带宽隔离。

Cap id可以是2或者9都行


0x03 — Device Serial Number (DSN)

提供 64 位唯一设备序列号,不会因拓扑变化而改变。

可用于设备持久化标识、热插拔追踪、虚拟化环境中的 VM–PF/VF 绑定。

常见位置:绝大多数 PCIe 设备(网卡、GPU、存储) 调试经验lspci -nnvs <dev> 可直接看到序列号,便于多块卡区分。


0x04 — Power Budgeting

让设备上报功率预算(峰值、平均值),系统可据此在功耗紧张时分配电源资源。

主要用于服务器、笔记本、嵌入式 SoC 等有严格功耗限制的系统。

常见位置:笔记本 PCIe Root Port、服务器平台控制器 调试经验:可配合 ACPI 动态调节功率上限。


0x05 — Root Complex Link Declaration (RCLD)

声明 Root Complex 内部与外部链路的拓扑关系。

对于多链路、多 Root Port 的平台,RCLD 帮助固件/驱动识别链路结构。

常见位置:多 Root Port SoC、服务器主板 调试经验:一般固件读取用,驱动层很少直接操作。


0x06 — Root Complex Internal Link Control (RCILC)

控制 Root Complex 内部链路参数,比如速率、电源状态。

在 SoC 平台内部可能对应内部交换矩阵或片上互连。

常见位置:嵌入式 SoC Root Port 调试经验:主要是平台调优用,用户态很少接触。


0x07 — RCEC Endpoint Association

Root Complex Event Collector Endpoint Association Extended Capability

将 Root Complex Event Collector 与指定 Endpoint 绑定,用于集中管理错误事件。

减少 Root Complex 处理分散错误的开销。

常见位置:大型服务器、含多 RCEC 的 SoC 调试经验:配合 AER 使用,可以把错误收敛到单一上报点。


0x08 — Multi-Function Virtual Channel (MFVC)

是 VC 的多功能设备版本,让多 Function 设备每个 Function 都有独立信道。

多功能显卡、网卡在多租户场景下会用到。

常见位置:高端显卡、多功能 FPGA 调试经验:通常与 SR-IOV、QoS 联用。


0x0A — Root Complex Register Block (RCRB) Header Extended Capability

功能简介

  • 目的:为 Root Complex(RC)提供一种标准化方式来描述和定位 Root Complex Register Block (RCRB) 的内存映射位置。

  • 核心作用:在配置空间中放置一个“指路牌”,告诉系统 RCRB 在内存空间的哪里,以便系统软件(BIOS、OS、驱动)访问 RC 专用寄存器。

  • 适用范围:只适用于 Root Complex 类型的 PCIe Function(Root Port、Root Complex Integrated Endpoint)。

0x0B — Vendor-Specific Extended Capability (VSEC)

功能简介

  • 目的:为厂商提供一个 标准化入口,在 PCIe 配置空间里挂载自定义功能,而不必修改 PCIe 标准定义的其他 Capability 结构。

  • 关键点:VSEC 的格式是 PCI-SIG 定义好的,但具体内容由厂商自由定义。

  • 好处:保持与 PCIe 标准的兼容性,同时允许厂商在硬件中添加特有功能(调试寄存器、性能计数器、专用加速接口等)。

0x0D — Access Control Services (ACS)

用于隔离 PCIe 事务路径,防止设备绕过 IOMMU 访问其他设备内存。

包括 Request Redirect、Completion Redirect、Upstream Forwarding 等机制。

常见位置:Root Port、Switch 调试经验:虚拟化必须开启 ACS,否则 VF 可能跨 VM 越权访问。


0x0E — Alternative Routing-ID Interpretation (ARI)

允许一个 PCIe Function 号扩展到 256(而不是传统的 8 个),提升功能编号空间。

SR-IOV 大量 VF 场景中尤其重要。

常见位置:高端网卡、GPU、FPGA 调试经验:配合 setpci 可检查 ARI Enable 位是否置位。


0x0F — Address Translation Services (ATS)

允许 Endpoint 发起 IOVA 到物理地址的转换请求(减少 IOMMU 延迟)。

提高设备 DMA 访问效率,特别是 GPU/FPGA 等高频 DMA 设备。

常见位置:高性能 GPU、加速卡、NVMe 控制器 调试经验:通常与 PRI、PASID 一起出现。

ATS Capability Register (Offset 04h)

ATS Control Register (Offset 06h)


0x10 — Single Root I/O Virtualization (SR-IOV)

将单个物理设备虚拟为多个虚拟功能(VF),每个 VF 独立 DMA/中断。

是云计算虚拟机高性能直通的核心技术之一。内容比较多,以后再多介绍一下

常见位置:高端网卡、NVMe SSD、GPU 调试经验:通过 sysfs /sys/bus/pci/devices/.../sriov_totalvfs 控制。


0x12 — Multicast Extended Capability

功能简介

  • 目的:让 PCIe 设备支持 单次传输多目的地(multicast,即一个数据包可以被多个设备同时接收,而不必分别复制多份。

  • 核心作用:减少带宽占用与延迟,特别是在多个设备需要相同数据的场景(如多 GPU 训练、硬件视频分发、存储复制)。

  • 适用范围:主要用于 Non-Transparent Bridge(NTB)、高性能计算节点互连、多功能设备内部通信。

  • 标准定位:这是可选的扩展能力,PCIe Base Spec 规定了其寄存器格式与寻址方式。


0x15 — Resizable BAR

允许软件动态调整 BAR 空间大小,比如 GPU 将 BAR 从 256MB 扩到 8GB。

提升 CPU 与 GPU 间大数据传输效率。


0x16 — Dynamic Power Allocation (DPA)

动态分配 PCIe 设备功耗预算,优化整体能效。


0x17 — TPH (TLP Processing Hints) Requester Extended Capability

功能概述

  • 目的:允许 PCIe 设备在发送 TLP(Transaction Layer Packet) 时附加 TPH Hint,提示下游或 Root Complex 如何优化 TLP 的处理

  • 核心作用:通过提供 TLP 优先级、缓存策略、目标函数选择等信息,提升 DMA 和高性能 I/O 的效率。


0x18 — Latency Tolerance Reporting (LTR)

设备上报可容忍的最大访问延迟,平台据此调整低功耗策略。

可避免省电模式引起性能抖动。设备向平台报告可容忍的最大延迟,帮助平台在不影响性能的前提下降低功耗(比如延迟进入低功耗状态)。

LTR Extended Capability Header (Offset 00h)

Max Snoop Latency Register (Offset 04h)

Max No-Snoop Latency Register (Offset 06h)

0x19 — Secondary PCI Express

用于 PCIe-to-PCIe 桥设备,配置下游端口的特性,例如链路参数、错误处理等,和 0x10 类似但作用在下游链路。

Secondary PCI Express Extended Capability Header (Offset 00h)

Link Control 3 Register (Offset 04h)

Lane Error Status Register (Offset 08h)

Lane Equalization Control Register (Offset OCh)

Link Feature Extended Capability

0x1B — Process Address Space ID (PASID)

允许单个 Function 访问多个进程地址空间,实现更细粒度的 IOMMU 映射。

GPU 多进程共享时必备。

0x1C — LN (Lightweight Notification) Requester Extended Capability

功能概述

  • 目的:允许 PCIe 设备在发送 轻量级通知(Lightweight Notification, LN) 时,通过 PCIe 链路直接触发下游或根端事件,而无需完整的 DMA 或消息机制。

  • 核心作用:为高性能设备提供低延迟事件通知机制,用于加速响应和中断处理。

  • 适用范围:主要用于高性能计算设备、加速器、智能 NIC 或 NVMe 多队列等场景。

0x1D — Downstream Port Containment (DPC)

下游链路出错时隔离错误端口,防止错误向上游扩散。有点又臭又长,暂时不描述太多。


0x1E — L1 PM Substates

在 L1 电源状态基础上引入 L1.1/L1.2,进一步降低待机功耗。


0x1F — Precision Time Measurement (PTM)

纳秒级硬件时钟同步,用于 TSN 和时间敏感任务。


0x21 — FRS Queueing Extended Capability

功能概述

当设备的某个 Function 进入 Configuration-Ready(配置就绪) 状态时,会发出 FRS (Function Readiness Status) 消息。此能力定义了 消息入队和管理机制,以便上游 Root Port 或 RC Event Collector 记录和响应这些消息,而不是等待超时或轮询机制。

0x22 — Readiness Time Reporting (RTR) Extended Capability

功能概述

  • 目的:允许 PCIe 设备向系统报告 准备就绪时间,即从设备上电或复位后,到设备可以响应配置和 I/O 请求所需的时间。

  • 核心作用:帮助系统优化初始化顺序和延迟管理,尤其是在多设备启动和虚拟化环境中,提高平台启动效率。

  • 适用范围:主要用于 Root Port、Endpoint、加速卡或需要明确初始化时间的高性能设备。

0x23 — Designated Vendor-Specific Extended Capability (DVSEC)

厂商自定义扩展能力,通常包含私有寄存器和调试功能。


0x25 — Data Link Feature (DLF)

扩展数据链路层的状态报告能力。

Data Link Feature Capabilities Register (Offset 04h)

Data Link Feature Status Register (Offset 08h)


0x26 — Physical Layer 16.0 GT/s

声明设备支持 PCIe Gen4 物理层能力。


0x27 — Lane Margining at the Receiver

0x28 — Hierarchy ID Extended Capability (HID EC)

功能概述

  • 目的:为 PCIe 设备提供 拓扑层级信息(Hierarchy ID),让系统了解设备在 PCIe 拓扑中的位置。

  • 核心作用:帮助操作系统和驱动进行拓扑优化、虚拟化隔离和高性能路径选择。

  • 适用范围:主要用于 Root Complex、Switch、端点和多功能设备。

0x29 — Native PCIe Enclosure Management (NPEM) Extended Capability

功能概述

  • 目的:提供 原生 PCIe 机箱/机柜管理接口,让设备(通常是端点或 Root Complex)直接向系统或管理控制器报告机箱状态和接收管理命令。

  • 核心作用:在 PCIe 设备级别实现机箱监控和控制,无需单独的管理总线(如 IPMI、SMBus)。

  • 适用范围:主要用于高端服务器、刀片系统、多节点存储系统的 PCIe 扩展卡。

0x2A — Physical Layer 32.0 GT/s

声明设备支持 PCIe Gen5 物理层能力。

0x2B — Alternate Protocol Extended Capability (AP EC)

功能概述

  • 目的:允许 PCIe 设备支持 非标准 PCIe 协议,即在 PCIe 物理和链路层基础上,通过 Alternate Protocol 传输自定义协议数据。

  • 核心作用:提供一种标准化方式,让设备在 PCIe 通道上运行其他协议(如 NVMe over Fabrics、CXL、Gen-Z 等),而不破坏 PCIe 栈的兼容性。

  • 适用范围:主要用于支持 CXL、NVMe-oF、存储或加速卡 的 PCIe 端点和桥接设备。

0x2C — SFI (Serial Flash Interface) Extended Capability

功能概述

  • 目的:为 PCIe 设备提供标准化接口,访问 板载串行闪存(Serial Flash) 或类似非易失性存储器,通常用于固件存储和配置。

  • 核心作用:通过 PCIe 配置空间,系统或驱动可访问 SFI 设备的控制寄存器和状态寄存器,而无需额外总线(如 SPI 控制器独立驱动)。

  • 适用范围:主要用于高端服务器、加速卡、嵌入式设备中带板载 Flash 的 PCIe Endpoint 或 Root Complex。

http://www.lryc.cn/news/619943.html

相关文章:

  • mac环境下安装git并配置密钥等
  • 20250813测试开发岗(凉)面
  • 19. 重载的方法能否根据返回值类型进行区分
  • 完整源码+技术文档!基于Hadoop+Spark的鲍鱼生理特征大数据分析系统免费分享
  • Java Spring框架最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
  • 【C#】利用数组实现大数数据结构
  • 云电竞盒子对游戏性能有影响吗?
  • 《Python学习之基础语法1:从零开始的编程之旅》
  • 向量相似度计算与Softmax概率分布对比
  • 2025盛夏AI热浪:八大技术浪潮重构数字未来
  • String里常用的方法
  • el-table合并相同名称的列
  • java中在多线程的情况下安全的修改list
  • 基于C#、.net、asp.net的心理健康咨询系统设计与实现/心理辅导系统设计与实现
  • LCP 17. 速算机器人
  • 老生常谈智能指针:《More Effective C++》的条款28
  • Linux 服务:动态主机配置协议(DHCP)实战指南 —— 服务器部署与跨网段配置
  • 4.0 vue3简介
  • DAY 44 预训练模型
  • SQL 核心操作全解析:从基础查询到关联关系实战
  • 18. parseInt 的参数有几个
  • 多语言文本 AI 情感分析 API 数据接口
  • Python解包技巧全解析
  • Docker部署RAGFlow:生产环境开启Kibana与ES安全集成指南
  • Celery在Django中的应用
  • 【web站点安全开发】任务3:网页开发的骨架HTML与美容术CSS
  • Pytest+selenium UI自动化测试实战实例(超详细)
  • 第十三节:后期处理:效果增强
  • OpenBMC适配器模式小白学习指南
  • 服务器安全检测和防御技术