(原标题:PCIe Gen6来临之际:这些知识、概念您都了解吗?)
公众号记得加星标,第一时间看推送不会错过。
来源 : 内容转自公众号【企业存储技术】 。
今天分享的资料,来自SNIA Webniar《Everything You Wanted to Know About PCIe But Were Too Proud to Ask》。
摘要
由于PCI Express(PCIe)接口能在短距离内提供高带宽和低延迟,该接口已成为人工智能(AI)系统的重要组成部分。我们将从基础知识讲起,随后探讨其发展历程、技术要求及优势,还会涵盖 PCIe 第 6 代(Gen6)的特性,包括带宽、高级错误报告(AER)、下游端口隔离(DPC)、不同模式及信号传输技术。此外,我们也将介绍 PCIe 交换技术及其在 AI 领域的应用。主要内容包括:
- 什么是 PCIe?它为何重要?
- 设备发现 / 枚举与热插拔
- 非透明桥接(NTB)的应用场景与用途
- 共享信用 / 接收缓冲区
- 小帧(Flits)重放(重传)中的选择性否认(Selective NAK)与标准否认(Standard NAK)
- PCIe 第 6 代的增强功能
- PCIe 交换机及其在 AI 中的应用
PCI Express(PCIe)简介
- 外设组件互连(PCIe)是主板组件(如显卡、内存和存储设备)的标准化接口。
- PCIe 实现了从并行总线模式(PCI 或 PCI-X)到串行总线的重大转变 —— 与串行连接 SCSI(SAS)、SATA、InfiniBand 或光纤通道等串行接口类似。
- 兼容 PCI 的软件模型。
- 与 PCI 共享相同的地址空间。
- 支持现有的传统配置空间模型。
- PCI Express 扩展卡可与 PCI 卡共存。
PCI Express代际
- 迄今为止已发展出多个代际(第 1 代→第 2 代→第 3 代…… 第 6 代)。
- 每一代的带宽都实现了翻倍。
- 编码方式从第 2 代到第 3 代发生了变化,随后从第 5 代到第 6 代又有调整:
- 第 1 代和第 2 代采用 8b/10b 编码。
- 第 3 代到第 5 代采用 128/130 编码(每 128 位添加 2 位作为同步头)。
- 第 6 代通过 256B FLIT 实现 1:1 的编码比例。
根复合体(Root Complex)
- 将主机 CPU / 内存复合体连接至 PCI Express 层级结构。
- 不限于单个设备。
- 包含一个或多个下行端口。
交换机(Switch)
- 由多个逻辑 PCI 到 PCI 桥接器组成。
- 包含一个朝向根复合体的上行端口。
- 包含一个或多个下行端口。
- 交换机可进行堆叠。
- 支持对等流量传输。
端点(Endpoints)
- 原生 PCI Express 端点设备
- 示例:NVMe 控制器、存储控制器、GPU、网卡……
术语——端口、链路、通道
通道(Lane)
一组差分信号对,一对用于发送,一对用于接收。此处显示的是 2 个通道,即一个 x2 链路。
端口(Port)
位于同一芯片上的一组发射器和接收器,用于定义一条链路。
通常交换机是多端口的(此交换机有 4 个端口),而端点设备仅具备 1 个端口。
每个端口是两个设备之间物理连接的一端。
链路(Link)
两个组件之间的双工通信路径。
xN 链路由 N 个通道组成。
PCI Express分层结构
- 事务层生成包含数据和头部信息的数据包:
- 事务层数据包(TLP)处理
- 存储协商和已编程的配置信息
- 数据包的组装、拆解及高级错误检查
- 支持内存读写、配置读写、消息传递、I/O 读写
- 数据链路层
- 在事务层数据包(TLP)头部添加序列号,尾部添加链路 CRC(LCRC)以保障信号完整性
- 基于信用的流量控制机制的初始化与更新
- 事务层数据包的确认(确认 / 否认,Ack/Nak)
- 物理层
- 在数据包头部添加起始符号,尾部添加结束符号
- 初始化阶段的链路训练过程中,自动协商速度、链路宽度、通道反转和极性
PCIe枚举
总线-设备-功能ID(BDF ID)分配
- 深度优先搜索(Depth First Search)
- BDF ID:8 位总线号(Bus#)、5 位设备号(Device#)、3 位功能号(Function#)
- 主总线号(Primary Bus Number)包含桥接器上游侧所连接的总线号。
- 次总线号(Secondary Bus Number)包含桥接器下游侧所连接的总线号。
- 从属总线号(Subordinate Bus Number)包含桥接器下游侧最深层的总线号。
- 第 6 代(Gen6)引入了 <段(Segment)> 作为 BDF 的扩展。
基本地址分配
- 配置空间头部(Config Space Header)
- 端点设备(Endpoint):类型 0
- 桥接器(Bridge):类型 1
- 主机为端点设备和桥接器分配内存映射地址。
- 主机更新桥接器的可预取 / 不可预取内存基地址 / 限制值,以覆盖其下游所有设备的基地址寄存器(BAR)地址范围。
- 用于内存事务层数据包(TLP)的地址路由。
高级错误报告
错误报告消息
- 错误信号消息由检测到错误的设备生成。
- 三种类型的错误消息:
- ERR_COR(可纠正错误)
- ERR_NONFATAL(非致命错误)
- ERR_FATAL(致命错误)
- 错误消息始终路由至根复合体。
- 由根复合体将其转换为平台特定事件。
可纠正错误(Correctable Errors)
- 由硬件负责恢复,无需软件或应用程序参与。
- 可能会通过降低链路宽度或速度导致系统性能下降。
- 不会造成信息丢失 —— 硬件会重新发送相同的数据。
- 此类错误可被记录:
- 错误详情记录在高级错误报告(AER,Advanced Error Reporting)中。
- 向根复合体发送 ERR_CORR(可纠正错误)消息。
- 典型示例包括事务层数据包(TLP)重试事件或链路上的恢复操作:
- TLP 重试事件 —— 发起方收到连接设备返回的 NAK(否认)。
- 当链路检测到过多错误时,会启动恢复流程。
不可纠正错误(Uncorrectable Errors)
- 会导致数据丢失的错误:
- 可能需要设备重置或系统重新枚举。
- 错误处理方式因平台而异。
- 类似于 PCI/PCI-X 中的 SERR#(系统错误信号)。
- 错误严重程度可分为致命(Fatal)或非致命(Non-Fatal):
- 致命错误会向根复合体(RC)发送 ERR_FATAL 消息。
- 非致命错误会向根复合体(RC)发送 ERR_NONFATAL 消息。
- 典型示例为完成超时(CTO,Completion Time Out):
- 非 Posted 事务层数据包(TLP)的发起方未收到对应的完成包。
- 若发起方为 CPU,可能导致系统崩溃。
下游端口隔离(DPC,Downstream Port Containment)
- DPC 是指在下游端口(DSP,Downstream Port)检测到不可纠正错误后,自动禁用该链路。
- 将下游端口检测到的不可纠正错误或在下游端口接收到的不可纠正错误消息转换为系统中断。
- 防止数据损坏可能扩散到系统的其他部分。
- 增强 PCIe 错误隔离能力,并允许软件从异步移除事件中恢复 —— 意外热插拔操作可能导致链路上出现不可纠正错误。
热插拔
标准热插拔(Standard Hot-Plug)
- 有序移除 / 添加。
- 下游端口需要专用的硬件热插拔控制器来支持该功能。
- 支持热插拔的物理元件已列出,其定义取决于特定的外形规格,且可能为可选配置。
异步移除(Async Removal)
- 在未预先通知的情况下移除扩展卡,此前称为 “意外热插拔”,现称为 “异步移除”。
- 热插拔意外支持位(HotplugSurprise Support bit)
- 位于下游端口插槽能力寄存器中。
- 若该设备中此位被置位,在设备热移除过程中,可防止下游端口出现意外断开错误。
- PCIe 5.0 规范建议将异步移除作为下游端口隔离(DPC)事件处理,而非置位热插拔意外支持位。
非透明桥接(NTB,Non-Transparent Bridging)
- 非透明桥接的实现由供应商决定,并未在规范中定义。
- 两个独立 PCIe 层级结构中的主机可以相互通信。
- 标准 PCIe 层级结构是相互独立的。
- 通过非透明端点(NT EP)基地址寄存器(BAR)地址映射访问远程主机内存。
单根I/O虚拟化(Single Root IO Virtualization)
- SR-IOV 设备包含与单个根复合体相关联的物理功能(PF,Physical Functions)和虚拟功能(VF,Virtual Functions)。
- hypervisor 通过功能完整的物理功能(PF)为虚拟机(VM)配置虚拟功能(VF)。
- 经 hypervisor 配置后,虚拟机可通过 PCIe 直接访问分配给它的虚拟功能(VF)。
- 由于虚拟机可直接访问虚拟功能(VF),其性能得到提升。
PCIe交换机在AI中的应用
- 实现 xPU、网卡等设备之间的高速、低延迟互连。
- 支持对等通信(P2P,Peer-to-Peer Communication)。
- 具备结构链路支持,为 AI 集群提供灵活的拓扑结构。
- 支持资源池化与动态分配。
PCIe Gen6 - 新特性
PAM4 与 NRZ
- NRZ(非归零编码,Non-Return-to-Zero
- 用于 PCIe 第 1 代至第 5 代,速率从 2.5GT/s 到 32GT/s。
- 每个信号跃迁包含 2 种状态(1 位)。
- 误码率(BER):10⁻¹²。
- PAM44电平幅度调制,Amplitude Modulation 4-level
- 用于 PCIe 第 6 代,速率 64GT/s。
- 每个信号跃迁包含 4 种状态(2 位)。
- 误码率(BER):10⁻⁶。
编者注:按照我对上图的理解,在PCIe Gen6的FLIT模式下,每个数据传输小帧的256B中包含236B的数据包——即64GT/s的带宽利用效率为92.1875%(比PCIe Gen5的128b/130b有所降低),主要包括CRC和ECC校验等(注:PCIe 5.0也有CRC开销,但没有FEC/ECC)——这应该就是用来应对PAM4误码率提高的。
小帧模式(FLIT ModeFM
- PCIe 第 6 代新增了一种称为小帧模式的操作模式。
- 若启用小帧模式,则其对所有速率均生效。
- 启用后,该模式将保持启用状态,直至发生复位或链路断开。
- 以第 6 代速率运行时,必须启用小帧模式。
- 可通过链路控制 3 寄存器禁用小帧模式,但这会将链路速率限制为第 5 代。
- 在小帧模式下,传输的基本单位不再是数据包,而是固定大小(256B)的小帧(Flit)。
- 一个小帧中可包含一个或多个事务层数据包(TLP),单个事务层数据包也可能跨多个小帧(取决于最大有效载荷大小及在小帧中的起始位置)。
- 确认 / 否认(ACK/NAK)协议和重试机制基于小帧级别,而非事务层数据包级别。
小帧模式下的重放(重传)概述
- 仅重放小帧数据(Flit Data)中的事务层数据包(TLP),而非数据链路层数据包(DLP)端口。
- PCIe 第 6 代引入了一种新的重放机制,称为选择性重放(Selective Replay)—— 旧的重放机制称为标准重放(Standard Replay)。
- 标准重放:
- 接收方对具有特定序列号的小帧发送否认(Nak),发送方则重放该序列号之后的所有小帧。
- 选择性重放:
- 接收方对具有特定序列号的小帧发送否认(Nak),发送方仅重放该特定小帧。
- 为遵守排序规则,接收方在收到重放的小帧之前,需在其接收缓冲区中保留后续的有效小帧。
共享流量控制机制(Shared Flow Control Mechanism)
- 在第 6 代(Gen6)之前,为每个虚拟通道(VC,Virtual Channel)配备专用的流量控制(FC)资源,但其利用率效率有时并不稳定。
- 共享流量控制可降低实现多个虚拟通道的成本,因为所有已实现虚拟通道使用的流量控制资源集现在可共享。
- 拥有更大的共享资源公共池。
- 发送方仍可指示为特定事务层数据包(TLP)使用专用信用。
- 共享流量控制仅在小帧模式(FLIT mode)下使用。
L0p
- PCIe 第 6 代新增的省电状态 —— 允许两个连接的设备关闭链路中的部分通道,例如无需经过恢复流程即可将 x16 链路降级为 x8(通过关闭上方 8 个通道)。
- L0p 的支持与否由两个设备在链路训练的配置阶段协商确定。
- 切换至 L0p 状态需通过两个设备之间的链路管理数据链路层数据包(DLLP)进行握手。
- 支持扩容请求或缩容请求。
- 仅在小帧模式(FLIT mode)下支持。
资料来源 https://www.snia.org/educational-library/everything-you-wanted-know-about-pcie-were-too-proud-ask
注:本文只代表作者个人观点,与任何组织机构无关,如有错误和不足之处欢迎在留言中批评指正。如果您想在这个公众号上分享自己的技术干货,也欢迎联系我:)
*免责声明:本文由作者原创。文章内容系作者个人观点,半导体行业观察转载仅为了传达一种不同的观点,不代表半导体行业观察对该观点赞同或支持,如果有任何异议,欢迎联系半导体行业观察。
今天是《半导体行业观察》为您分享的第4192期内容,欢迎关注。
加星标第一时间看推送,小号防走丢
求推荐