×
高级产品搜索菜单

SSD硬盘盒链路性能损耗分析
日期: 2022.03.29

下面介绍PCIe SSD硬盘盒在PCIe协议层面导致性能损耗的因素。
1.Encode和Decode
这个就是我们通常说的8/10转换(Gen3是128/130,但是道理一样),简单来说就是对硬盘盒数据重新编码,从而保证链路上实际传输的时候“1”和“0”的总体比例相当,且不要过多连续的“1”或“0”。同时把时钟信息嵌入数据流,避免高频时钟信号产生EMI的问题。Gen1或者Gen2,正常的1个Byte数据,经过8bit/10bit转换在实际物理链路上传输的时候就变成了10bit,也就是一个Symbol,8bit/10bit转换会带来20%的性能损耗。对Gen3,由于是128/130编码,这部分硬盘盒性能损耗可以忽略。
 
2.TLP Packet Overhead
硬盘盒PCIe SSD通过MemWr或者CplD这两种TLP与主机传输数据,整个TLP里Payload是有效的传输Data,而PCIe协议在外面穿了一层又一层的衣服,Transaction Layer(事务层或传输层)、Link Layer(链路层)和PHY(物理层)分别在数据包(Payload)外增加了不少东西。PCIe必须靠这些东西来保证传输的可靠性。
硬盘盒 PCIe 2.0TLP格式
Transaction Layer:TLP Header、ECRC;Data Link Layer:Sequence、LCRC;PHY Layer:Start、End这些七七八八的加起来,大概每个TLP会带来20~30Byte的额外开销。
 
3.Traffic Overhead
硬盘盒PCIe协议为了进行时钟偏差补偿,会发送Skip,作用有点像SATA协议的ALIGN。Gen1/Gen2一个Skip是4Byte,Gen3是16Byte,Skip是定期发送的,以Gen2为例,每隔1538个symbol time(symbol time就是PCIe Link上发送一个Byte需要花费的时间)就必须发一个。PCIe协议不允许在TLP中间插入Skip Order-set,只能在两个TLP的间隔中间发,这也会带来损耗。
 
4.Link Protocol Overhead
硬盘盒PCIe是个有态度的协议,RC(主机)和EP(PCIe SSD)之间发送的每一个TLP,都需要对方告知接收的情况。
以主机传输数据给SSD为例:
·主机发送一个MemWr的TLP以后,会把这个TLP存在自己这边Data Link Layer Replay Buffer里,同时等SSD回复。
·硬盘盒SSD收到这个TLP以后,如果没问题,就回复ACK。
·主机收到ACK以后就知道Replay Buffer备份的TLP没用了,可以用后续的TLP覆盖。
·硬盘盒SSD收到TLP如果发现有问题,比如说LCRC错误,就回复NAK。
·主机收到NAK以后就把Replay Buffer里的TLP拿出来,再发给SSD一次。
·硬盘盒SSD再检查,然后再回复ACK。
有态度是要付出代价的,ACK和NAK的发送本身也会造成性能损耗,另外这里还要一个平衡需要掌握:硬盘盒PCIe要求每一个TLP,都需要对方发送ACK确认,但是允许对方接收几个TLP以后再发一个ACK确认,这样可以减少ACK发送的数量,对性能有所帮助。但是这个连续发送TLP的数量也不能太多,因为Replay buffer是有限的,一旦满了后面的TLP就不能发送了。
 
5.Flow control
PCIe是个有腔调的协议,自带一个流控机制,目的是防止接收方receiver buffer overflow。
RC跟EP之间通过交换一种叫UpdateFC的DLLP来告知对方自己目前receive buffer的情况,显然发送这个也会占用带宽,从而对性能产生影响。
跟ACK类似,UpdateFC的发送需要考虑频率问题,更低的频率对性能有好处,但是要求设备有较大的receiver buffer。
 
6.System Parameters
硬盘盒System Parameters主要有三个,MPS(Max Payload Size)、Max Read Request Size和RCB(Read Completion Boundary),前两个前面已经介绍过了,这里简单说一下RCB。
看PCIe Trace时候,经常遇到的情况是,PCIe SSD向主机发了一个MemRd的TLP要求数据,虽然MPS是256Byte甚至是512Byte,结果主机回复了一堆的64Byte或者128Byte的CplD。
导致这个情况的原因就是RCB,RC允许使用多个CplD回复一个Read Request,而这些回复的CplD通常以64Byte或128Byte为单位(也有32Byte的),原则就是在Memory里做到地址对齐。
研究完这些因素,需要量化计算。
下面用一个公式说明:
Bandwidth=[(Total Transfer Data Size)/(Transfer Time)]
已知条件:
·200个MemWr TLP;
·MPS=128;
·PCIe Gen1x8。
准备活动:
·计算硬盘盒Symbol Time,2.5Gbps换算成1个Byte传输时间是4ns;
 
·8个Lane,所以每4ns可以传输8个Byte;
·TLP传输时间:[(128Bytes Payload+20Byte overhead)/8Byte/Clock]×[4ns/Clock]=74ns;
·DLLP传输时间:[8Bytes/8Byte/Clock]×[4ns/Clock]=4ns。
假设:
·每5个TLP回复1个ACK;
·每4个TLP发送一个FC Update。
硬盘盒正式计算:
·总共的数据:200×128Byte=25600Byte;
·传输时间:200×74ns+40×4ns+50×4ns=15160ns;
·性能:25600Bytes/15160ns=1689MB/s。
可将MPS调整到了512B。重新计算,结果增加到了1912MB/s,看到这个数字可知,以前的SATA SSD可以退休了。
以上的例子是以MemWr为例,而使用MemRd的时候,情况略有不同:MemWr的TLP自带Data Payload,而MemRd是先发一个Read Request TLP,而后对方回复CplD进行Data传输,而硬盘盒CplD Payload的Size则会受到RCB的影响。
 

高级产品搜索菜单
提交 清除 取消
找不到合适的产品?提交您的请求HERE
ICY DOCK使用cookies来确保您在我们的网站上为您提供最佳体验。了解更多
我同意