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

PCIE Transaction Layer(事务)详解 一

一、事务层的高层关键特性 (High-Level Key Aspects)

事务层的四大核心机制,它们是整个PCIe协议高效、可靠运行的基础。
  1. 流水线式完全拆分事务协议 (A pipelined full Split-Transaction protocol)
  • 含义:这是PCIe性能的关键。它将一次事务(如读取内存)拆分为请求 (Request)完成 (Completion)两个独立的阶段。
  • 优势:请求者(如CPU)发出读请求后,无需等待数据返回即可继续处理其他任务。当目标设备(如SSD)准备好数据后,会单独发送一个“完成”数据包(TLP)返回数据。这极大地提升了总线利用率,实现了“流水线化”的并发操作。PCIe官方规范明确指出,这是一种“流水线化的完全拆分事务协议”。
  1. 区分TLP排序和处理需求的机制 (Mechanisms for differentiating the ordering and processing requirements of TLPs)
  • 含义:不同的数据包(TLP)有不同的优先级和处理要求。例如,一个中断消息需要被优先处理,而一个大块的文件传输则可以稍后完成。
  • 实现:事务层通过流量类别 (Traffic Class, TC)虚拟通道 (Virtual Channel, VC)来实现这种区分。TC定义了0-7共8个优先级,事务层会将不同优先级的TLP分配到不同的VC中,硬件仲裁器会根据优先级和仲裁规则来调度各VC的传输,从而保障服务质量(QoS)。
  1. 基于信用的流控制 (Credit-based flow control)
  • 核心思想:这是一种防止接收端缓冲区溢出、避免数据丢失的高效机制。它像一个“银行账户”,接收端在初始化时或处理完数据后,会向发送端通告自己还有多少“信用”(即可接收的TLP头部或数据负载量)。
  • 工作流程:发送端在发送TLP前,必须确保自己有足够的信用(如:HdrFC ≥ 1 且 DataFC ≥ payload_dwords)。每发送一个TLP,就消耗对应的信用。当信用耗尽时,发送端必须暂停发送,直到接收端处理完数据并通过 UpdateFC DLLP 返还信用。
  1. 可选支持数据中毒和端到端数据完整性检测 (Optional support for data poisoning and end-to-end data integrity detection)
  • 数据中毒 (Data Poisoning):如果一个设备在传输过程中检测到一个TLP的数据负载已经损坏(例如,ECC校验失败),它会将TLP头部中的“中毒”标志位(EP位)置1。这个标记会一路传递到最终接收者,接收者发现中毒标志后,可以采取相应措施(如触发错误恢复机制)。
  • 端到端数据完整性检测 (ECRC):事务层提供了一个可选的32位增强型循环冗余校验码(ECRC, Enhanced CRC)。ECRC被添加到TLP的尾部,对Header和Data Payload进行校验。它与数据链路层的LCRC不同,LCRC只负责一段链路的完整性,而ECRC提供了从发送端事务层到接收端事务层的端到端错误检测能力。

二、事务层涵盖的具体内容 (Transaction Layer Comprehends)

这部分描述了事务层需要实现的具体功能和构成模块。
  1. TLP的构建与处理 (TLP construction and processing)
  • 构建:事务层接收来自设备核心或软件层的请求(如一个内存写操作),然后根据请求的类型、目标地址、数据等信息,生成一个标准格式的事务层数据包——TLP (Transaction Layer Packet)。TLP的结构是严格定义的,包括:
    • Header (头部)必选,长度为3个或4个双字(DW,32位),包含了事务类型(Type)、格式(Fmt)、流量类别(TC)、地址、长度(Length)、请求者ID、标签(Tag)等关键信息。
    • Data Payload (数据负载)可选,用于存放要写入的数据(如写请求)或返回的数据(如读完成的响应)。最大可达4096字节。
    • ECRC (尾部)可选,用于端到端CRC校验。
  • 处理:当接收到一个TLP时,事务层负责解析其头部,识别事务类型,并将数据负载正确传递给上层或设备核心。
  1. 事务级机制与设备资源的关联 (Association of transaction-level mechanisms with device resources)
  • 流控制 (Flow Control):如上所述,这是事务层的核心资源管理机制。每个设备都有用于接收不同类型TLP的缓冲区,流控制机制通过信用值来管理这些缓冲区的使用,防止拥塞。
  • 虚拟通道管理 (Virtual Channel management):VC是物理链路上独立的逻辑通道,允许多个不同优先级的流量(即不同TC的TLP)在同一根物理链路上同时、有序地传输。事务层负责配置和管理这些VC,包括TC到VC的映射以及各VC的仲裁策略(如严格优先级或轮询)。
  1. TLP排序和管理的规则 (Rules for ordering and management of TLPs)
  • PCI/PCI-X兼容排序:为了向后兼容,TLP的排序规则需要遵循传统PCI/PCI-X协议定义的基本顺序,确保老驱动和新设备都能正常工作。
  • 流量类别区分 (Traffic Class differentiation):如前所述,通过TC和VC实现,这是实现QoS的基础。例如,网卡的高优先级网络包可以映射到高优先级的VC上,从而在交换机处优先转发。
  • UIO排序 (UIO Ordering):UIO (User-IO) 排序是PCIe规范中定义的一种更宽松、更高效的排序模型,允许在某些情况下进行重排序,以提升性能。

三、事务类型 (Address Spaces, Transaction Types, and Usage)

事务是请求者(Requester)和完成者(Completer)之间信息传输的基础。PCIe定义了四种地址空间,每种空间都有对应的事务类型和用途。
地址空间
事务类型
基本用途及说明
Memory (内存)
Read, Write, AtomicOp
最常用用于向系统内存或设备的MMIO(内存映射I/O)区域读写数据。支持32位和64位地址,64位地址是必须支持的。
I/O
Read, Write
传统兼容
用于兼容旧式设备的I/O映射区域。规范已明确指出未来可能不再支持此地址空间,所以现代设备应尽量避免使用。
Configuration (配置)
Read, Write
设备初始化与枚举
用于访问每个PCIe功能(Function)的配置寄存器(4KB空间),是BIOS/操作系统发现设备、分配资源(如BAR地址)和配置设备工作模式的关键机制。
Message (消息)
Baseline, Vendor-Defined
带内信号
用于替代传统PCI总线上的边带信号(如中断、错误报告、电源管理等)。所有消息都以TLP的形式在PCIe链路上传输,实现了事件信息的统一管理
PCIe事务层(Transaction Layer)的核心职责:它向上承接软件和硬件的请求,向下驱动数据链路层,通过拆分事务、信用流控、优先级调度和错误检测四大机制,以及严格的TLP标准化封装,实现了高带宽、低延迟、高可靠性和可扩展的数据传输,是现代高性能IO总线技术的基石

四、TLPPacket

  1. TLP的串行化视图(Non-Flit Mode)
一个完整的Non-Flit Mode TLP由以下部分组成,按传输先后顺序排列:
  • 可选的TLP前缀(TLP Prefixes, Optional):用于实现高级功能,如地址转换服务(ATS)、TLP处理提示(TPH)等。
  • TLP头部(TLP Header):这是TLP的核心,包含了路由信息、事务类型、长度、事务ID等所有关键控制信息。
  • 数据负载(Data Payload, included when applicable):这是实际要传输的数据。并非所有TLP都携带数据,例如“存储器读请求”(Memory Read Request)TLP就没有数据负载。
  • 可选的TLP摘要(TLP Digest, Optional):通常用于存放端到端CRC(ECRC),用于数据的完整性校验。
  1. 传输顺序与优化
TLP的字节是按照从左到右的顺序在链路上传输的。更重要的是,TLP头部(Header)的布局针对串行互连的性能进行了优化,其核心原则是“the most time critical information be transferred first”。
地址字段的最高有效字节(MSB)会被最先传输。这样,接收端可以在收到完整的地址之前就开始进行地址解码,从而缩短处理延迟,提高性能。这也解释了为什么在现代PCIe规范中,字节的布局与传统PCI规范(通常将最低有效字节放在右侧)有所不同。
  1. 详细的TLP格式(Generic TLP Format)
  • 字节编号与传输顺序:TLP内的数据负载(Data Payload)以最低寻址字节(byte J)开始,显示在左上角。而头部则从byte H开始。无论图示如何,所有字节在链路上都是按字节编号递增的顺序传输的。
  • 字节0的布局:TLP头部(Header)的第一个双字(DW0)的字节0(Byte 0),其高位(bit 7:5)是Fmt字段,低位(bit 4:0)是Type字段。 这两个字段共同决定了TLP的格式(3DW/4DW头部、有无数据)和类型(如Memory Read、Memory Write、Configuration Read等)。
  1. TLP头部的字段组成
TLP头部根据包类型的不同,会包含以下类型的字段:
  • 包的格式(Fmt)和类型(Type):如上面所述,标识了该TLP的基本属性和路由方式。
  • 关联数据的长度(Length):以双字(DW,4字节)为单位,表示数据负载的长度。注意,值为0时表示1024个DW(即4096字节)。
  • 事务描述符(Transaction Descriptor):这是一个包含多个子字段的复杂结构,用于唯一标识和管理一个事务。它包括:
    • 事务ID(Transaction ID):由请求者ID(Requester ID)和标签(Tag)组成。Requester ID标识了发起请求的设备的Bus:Device:Function。 Tag则用于区分该设备发起的多个未完成的请求。完成包(Completion)必须回显此ID,以便发起者将完成与原始请求匹配起来。
    • 属性(Attributes, Attr):用于控制TLP的排序规则(如Relaxed Ordering)和缓存一致性(No-snoop)。
    • 流量类别(Traffic Class, TC):用于服务质量(QoS)管理。TC值(0-7)越高的TLP,可以通过独立的虚拟通道(VC)获得更高的优先级服务。
  • 地址/路由信息(Address/routing information):对于存储器请求,这是目标内存地址。对于配置请求,则包含BDF号和寄存器偏移。
  • 字节使能(Byte Enables, BE):First DW BE和Last DW BE字段,用于指示数据负载的第一个和最后一个双字中哪些字节是有效的,从而实现非对齐或部分字节的访问。
  • 消息编码(Message encoding):对于消息请求TLP,此字段指示消息的具体类型(如MSI中断、电源管理事件等)。
  • 完成状态(Completion status):仅出现在完成包中,用于指示请求的处理结果(如成功完成、数据中毒等)。
  1. Fmt[2:0] 格式字段取值
  1. Type[4:0] 与 Fmt[2:0] 组合定义
  1. Length[9:0] 长度字段
  1. 非Flit模式 vs Flit模式的差异
  1. 关键规则
  • 保留编码处理(Table 2-3 底部说明):
    • 所有表中未列出的Fmt+Type组合都是保留的。
    • 接收端遇到保留TLP时:
      • 如果FC类型是PR或NPR:更新FC信用后丢弃。
      • 如果FC类型是CPL:视为意外完成(Unexpected Completion)。
    • 交换机端口需按路由规则转发保留TLP(包括保留条目)。
    • 端点上/根端口只需缓冲最大头部及OHC,允许丢弃不支持的字段。
  • NOP TLP
    • 当没有其他TLP要发送时,必须发送NOP。
    • 接收端直接丢弃,不产生任何影响。
    • 只有Type字段有意义,其他字段保留。
  • 错误中毒(EP=1)
    • 表明TLP数据已损坏。
    • 接收端需根据EP处理策略(可能丢弃或标记错误)。
  • TLP摘要(TD=1)
    • 在TLP末尾额外包含1 DW的CRC(TLP Digest)。
    • 用于增强数据完整性检查。

五、 关键设计原则:保留位(Reserved)与格式转换

  • 保留位处理:所有TLP字段中标记为“保留”(R)的位,在构造TLP时必须填充为0。接收方必须忽略这些位,而交换机(Switch)在转发时也不能修改它们。 这是为了确保协议的向前兼容性。
  • NFM与FM格式转换:原文特别提到,Non-Flit Mode(NFM)和Flit Mode(FM)下的TLP头部格式是不同的。 如果TLP从一个处于NFM的端口进入交换机,而要从一个FM模式的端口离开,交换机内部必须执行格式转换。如果某些情况下无法转换,则需要根据规范定义的规则进行处理。
http://www.gsyq.cn/news/1584168.html

相关文章:

  • 案例四:资讯聚合APP与数据看板演示系统开发项目
  • 制造业AI视觉质检实战:5万张产品图的数据本地化训练与存储
  • 基于AI宏观因子模型的黄金市场分析:通胀压力边际缓和下的黄金低位回升多因子定价框架
  • Beyond Compare 5:3步快速激活与开源密钥生成工具终极指南
  • 大学AI通识课实操平台推荐:让文科生也能轻松学AI
  • storage + Monitoring 2026-6-23
  • 终极视频加速指南:如何用Video Speed Controller提升3倍学习效率
  • 躺床上刷手机总乱转?一键关掉自动旋转,再也不晃眼!
  • 2026年腾讯云 618 活动说明及 Hermes Agent/OpenClaw配置Token Plan新手快速入门
  • 深圳地区等保2.0超融合方案选型指南与行业实践案例
  • 如何零成本解锁Wand专业版功能?开源增强工具为你提供完美解决方案
  • 建议收藏!Wireshark 流量分析超详细例题精讲,零基础从入门到精通实战教程
  • 用JDBC + AOP 实现的数据库加密切面能不能切西瓜?
  • AI 辅助客服系统:情感分析驱动的智能邮件处理方案
  • AI 营销自动化:从线索评分到转化优化的全链路实践
  • Meta SilverTorch 解读:为什么推荐系统要把索引也做成模型
  • 3D Web 开发实战:Three.js 场景构建与 GPU 渲染性能优化的工程化路径
  • Python_40题详细解析
  • 计算机毕业设计之工厂员工办公用品订购管理系统
  • VMware Workstation Pro 17 完整免费激活指南:1000+许可证密钥与简单教程
  • Boogu-Image - 闪电出图,产品图、海报、国风插画样样精通 一键整合包下载
  • 大气层整合包系统:解决Switch破解难题的终极完整指南
  • 3个场景解决你的Mac窗口管理难题:Topit窗口置顶神器完全指南
  • Git 安装以及快速使用
  • 计算机毕业设计之居家养老服务小程序
  • 3分钟让Figma说中文?这款神器让你的设计效率翻倍
  • Docker/Kubernetes为何成为AI智能体视觉(TVA)的“细胞与组织”(17)
  • SITS 2026实战手记:从数据基建到商业闭环,我们帮37家制造业客户完成AI能力分级(附可运行评估矩阵表)
  • 小白程序员必看:大模型技能检索增强(SRA)实战指南,轻松提升AI Agent能力
  • 必看收藏!暑假逆袭指南:3个高价值网络安全技能,零基础入门高薪职业,比打零工强一万倍