PCI-Express 总线传输效率提升的技术分析*

2022-06-07 08:56潘金龙李德建王于波董长征冯文楠
电子技术应用 2022年5期
关键词:接收端存储器报文

潘金龙,李德建,王于波,冯 曦,董长征,冯文楠

(北京智芯微电子科技有限公司,北京 100192)

0 引言

随着现代处理器技术的飞速发展,使用高速差分总线替代并行总线的应用场景越来越多。与单端信号相比,高速差分信号可以使用更高的时钟频率,使用更少的信号线,完成之前需要很多单端并行数据信号才能达到的总线带宽[1]。如何高效地利用总线带宽,通过何种配置达到最优应用,给设计者带来了挑战。

1 总线概述

PCI-Express(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,简称PCIe。PCIe属于高速串行点对点双通道高带宽传输,互联设备之间独立传输,主要有主动电源管理、错误报告、端对端的可靠性传输、热插拔以及服务质量等功能。PCIe 是一种分层协议,由传输层、数据链路层和物理层组成[1-3],层级结构如图1 所示[4-5]。PCIe A 设备与B 设备之间通过发送端与接收端进行互联。

图1 PCIe 层级结构图

2 传输效率影响因素分析

数据在PCIe 总线各层级传输所产生的开销主要在以下几个方面。

2.1 数据编码开销

数据编码开销主要是PCIe 的物理层产生的,GEN(generation)1/2使用8b/10b编码,GEN3/4/5使用128b/130b 编码,编码的目的是保持直流平衡(DC balance)[6-7]。

PCIe 各版本传输速率如表1 所示(Xn 表示存在n 条物理链路,例如X4 表示存在4 条物理链路)。

表1 PCIe 传输速率

例如 PCIe 1.0 使用8b/10b 编码方案,导致占用了20%(2/10)的原始信道带宽。那么PCIe 1.0 实际上单通道的有效带宽就是2.5 Gb/s×80%/8=250 MB/s。

2.2 TLP(Transaction Layer Packet)开销

PCIe 报文为分层封装协议的报文。数据报文在Device A 产生之后,在事务层(Transaction Layer) 报文由数据头(Header)、报文净荷(Payload)、端到端的CRC(ECRC)组成,经过数据链路层(Data Link Layer)后增加序列号(Sequence Number)、链路层CRC(LCRC)、开始(Start)、结束(End)数据块,然后通过物理层(Physical Layer)发出[8-9]。PCIe Gen1/2报文格式如图2所示[2],PCIe Gen3/4/5/报文格式如图3 所示[2]。

图2 PCIe Gen1/2 报文格式

图3 PCIe Gen3/4/5 报文格式

PCIe Gen3/4/5 的报文结构开始(Start)标识是4 B,且没有结束(End)标识,这是与Gen1/2 报文结构上的区别。

在TLP 传输过程中,相关的报文标识就增加了20~30B的开销[10-11]。

2.3 控制报文开销

控制报文来自于数据链路层,报文长度为6 B,主要功能是保证来自事务层的TLP 在PCIe 链路中正确传递。报文的类型主要有应答Ack(Acknowledge)、非应答Nak(No acknowledge)、功耗管理PM(Power Manage)、流控FC(Flow Control)等[12]。

2.3.1 Ack与Nak报文开销

发送端发出TLP 报文之后,需要接收端回应Ack 或者Nak 报文,来确认发送的TLP 是否被成功接收。发送端在发送TLP 的同时需要将TLP 复制一份保存在TLP retry buffer(TLP 重传缓存)中,直到收到Ack 即表示成功接收的回应[13-14]。如果收到了Nak 则表示未成功接收的回应,需要将存储在TLP retry buffer 中的TLP 再次发送,直到被正确接收。Ack 不需要与TLP 一一对应,可以设置一个计数器N,发送N 个TLP 之后,接收端回应一个Ack。接收端会对报文进行错误检查(Error Check),如果查询到接收的报文序号不正确或有其他的错误,则回应一个Nak,发送端将会重新发送TLP。数据传输结构如图4 所示[1]。

图4 PCIe 数据链路层传输结构示意图

2.3.2 PM 报文开销

PCIe 设备进入L0 状态 (PCIe 设备的正常工作状态)后,物理层为了解决接收时钟与本地时钟之间漂移所带来的频差问题,每一个链路(Lane)需要在传输1 180~1 538个字符后发送一个SKP(PCIe 链路层传输的一种报文)请求来进行时钟补偿,在TLP 的传输过程中不会插入时钟补偿[1]。

2.3.3 流量控制报文开销

流量控制的主要作用是在发送端和接收端进行数据传递时,通过FC 报文传递本端存储空间的使用状态,避免因为接收端缓冲区由于存储空间不足导致丢弃来自发送端的数据。如果FC 报文没有及时发送,会导致本地存储空间不够而丢弃报文,反之FC 报文发送太过频繁,就会导致PCIe 传输的性能下降,带宽利用率低[1]。

2.4 系统参数对传输效率的影响

系统配置参数如下:

有效负载最大值:MPS(Maximum Payload Size)。PCIe设备所传送所有类型报文的数据大小不能超过MPS。MPS支持的大小有6种:128B、256 B、512 B、1 024 B、2 048 B、4 096 B。当PCIe 设备所传送的数据大小超过MPS 参数时,数据将被分割为多个TLP 进行发送了。

最大读请求数据:MRRS(Maximum Read Request Szie),PCIe 设备一次能从目标设备读取的最大数据,如果一次存储器读操作需要读取的数据范围大于MRRS 时,该PCIe 设备需要向目标设备发送多个存储器读操作。MRRS 的大小同样有6 种:128 B、256 B、512 B、1 024 B、2 048 B、4 096 B。

RCB(Read Completion Boundary):RCB 可配置为64 B或者128 B,RCB 的大小与完成报文的有效负载相关。在PCIe 总线中,一个存储器读请求TLP 可能收到目标设备发出的多个读完成报文后,才能完成一次存储器读操作[15-16]。

3 传输效率计算

报文在PCIe 总线传输过程中,实际的有效带宽和物理带宽之间的关系是如何呈现的?下面以存储器写请求TLP 和存储器读请求TLP 传输为例来分析PCIe 总线的性能。

3.1 存储器写请求TLP

(1)应用场景

①PCIe 物理层为Gen2,2Lane;

②发送的报文数目Num 为200 个,每个报文的长度和MPS 相同;

③MPS 设置为1 024 B;

④Ack 功能配置为传输10 个TLP 报文回复1 个Ack;

⑤FC 功能配置为传输5 个报文回复1 个FC;

⑥传输层数据的报文头为4DW,再加上其他开销共计28 B。

(2)带宽计算

①需要传递的报文总长度:200×1 024=204 800 B。

②实际传递的报文总长度

不含有PM 报文开销的长度:(1 024+28)×200+(6+2)×200/10+(6+2)×200/20=210 640 B。

PM 报文开销,定义1 200 bit 插入1 个PM 报文。210 640×8/1 200=1 404 个,注意在TLP 每个报文发送过程中不能插入PM 报文,所以在TLP 发送间隔时会插入多个PM 报文。

总传递报文长度为:210 640+1 404×(6+2)=221 872 B。

③有效带宽

需要传递的报文总长度/总传递报文长度=204 800/221 872=92.31%。

PCIe Gen2 的物理有效带宽为80%,所以最终2 个Lane 的传输性能为:92.31%×0.8=73.84%,带宽为5 Gb/s×2×73.84%=7.384 Gb/s,即10 Gb/s 的物理传输通道有效带宽为7.384 Gb/s。

(3)导出公式

根据以上计算结果,可以推到出如下公式:

(4)延伸拓展

报文在总线传输过程中,配置都是固化好的,通过对有效带宽的计算公式可以看出在报文实际传输的过程中,报文的有效数据长度和MPS 参数越接近越好,这样可以减少传输的次数。另外MPS 参数的值越大,有效带宽就越高。将MPS 参数设置为128 B、256 B、512 B、1 024 B、2 048 B、4 096 B,TLP报文的有效数据长度同MPS参数,存储器写请求TLP 的不同MPS 配置的带宽效率结果如表2 所示。

表2 不同MPS 配置带宽效率表

从计算结果来看,随着MPS 的增大,带宽有效利用率在提高,但是增加幅度在变小。

(5)其他说明

在上面第4 点中对带宽的利用率做了表格的描述,但是实际上还应该算上PCIe Gen2 物理带宽8b/10b 解码的开销,即实际的带宽效率还应在上面计算的基础上乘以0.8 才是最终的带宽效率。

3.2 存储器读请求TLP

(1)应用场景

①PCIe 物理层为Gen2,2Lane;

②发送的报文数目Num 为200 个;

③MRRS 设置为1 024 B;

④Ack 功能配置为传输10 个TLP 报文回复1 个Ack;

⑤FC 功能配置为传输5 个报文回复1 个FC;

⑥传输层数据的报文头为4DW,再加上其他开销共计28 B;

⑦RCB 设置为64 B。

(2)带宽计算

①需要传递的报文总长度:200×1 024=204 800 B。

②实际传递的报文总长度

每个存储器读请求TLP 需要传输的次数:MRRS/RCB=1 024 B/64 B=16,即需要返回16 个TLP 读完成报文才能将此次读的数据全部获取。

不含有PM 报文开销的长度:(1 024+28×16)×200+(6+2)×200/10+(6+2)×200/20=294 640 B。

PM 报文开销,定义1 200 bit 插入1 个PM 报文。210 640×8/1 200=2 个,注意在TLP 每个报文发送过程中不能插入PM 报文,所以在TLP 发送间隔时会插入多个PM 报文。

总传递报文长度为:294 640+1 964×(6+2)=310 354 B。

③有效带宽

需要传递的报文总长度/总传递报文长度=204 800/310 354=65.99%。

PCIe Gen2 的物理有效带宽为80%,所以最终的2 个Lane 的传输性能为:65.99%×0.8=52.79%,带宽为5 Gb/s×2×52.79%=5.279 Gb/s,即10 Gb/s 的物理传输通道,有效带宽为5.279 Gb/s。

(3)导出公式

根据以上计算结果,可以推到出如下公式:

(4)延伸拓展

将MRRS 参数设置为128 B、256 B、512 B、1 024 B、2 048 B、4 096 B,存储器读请求TLP 的不同MRRS 带宽效率如表3 所示。

表3 不同MRRS(RCB/64 B)配置带宽效率结果

从计算结果来看,随着MRRS 的增大,带宽有效利用率并没有显著提高,基本上没有明显的变动。将RCB的参数由64 B 修改为128 B 的结果如表4 所示。

对比表3 和表4,相同的MRRS 配置,RCB 的值由64 B 变成了128 B,带宽有效利用率有了明显的提升。例如MRRS 配置为128 B,RCB 配置为64 B,带宽有效率是65.62%;而当RCB 配置为128 B,带宽有效率是77.30%,带宽提升了12.04%。

表4 不同MRRS(RCB/128 B)配置带宽效率结果

(5)其他说明

与存储器写请求TLP 相同,存储器读请求TLP 的实际带宽也需要考虑PCIe Gen2 物理传输通道编解码的开销。

4 结论

本文介绍了PCIe 总线的基本结构,列举了影响PCIe总线传输效率的多种原因,从实际应用中进行举例说明并计算。当然上面存储器写请求与存储器读请求的带宽有效利用率的计算只是粗略的估算,报文在实际的发送与接收过程中会涉及软件、硬件的配合处理与其他多种原因的影响,实际应用中会比理论值要低一些。如何高效地应用PCIe 总线,只有深入理解了总线传输的原理,才能通过合理、有效的配置提高传输效率。

猜你喜欢
接收端存储器报文
基于J1939 协议多包报文的时序研究及应用
基于扰动观察法的光通信接收端优化策略
静态随机存储器在轨自检算法
基于多接收线圈的无线电能传输系统优化研究
低轨星座短报文通信中的扩频信号二维快捕优化与实现
CTCS-2级报文数据管理需求分析和实现
手机无线充电收发设计
浅析反驳类报文要点
存储器——安格尔(墨西哥)▲
电视电子节目指南的原理及实现方法