地址:深圳市宝安大道4018号华丰国际商务大厦二楼203号
电话: 0755-28230252
邮箱:shuang_jiang@kingbank.com
图片
金百达NVMe上线
作者:管理员    发布于:2018-03-19 17:07:46    文字:【】【】【
摘要:底层协议的改变带来速度的飞跃-NVMe

金百达在2018年的1月到2018年的3月引入了三款不同型号的NVMe,分别为SMI2263XT主控的KP230Phison5008主控的KP210Marvell1160主控的KM220NVMe是为固态硬盘所生的。NVMe出现之前,固态硬盘绝大多数走的是AHCISATA的协议,后者其实是为传统机械硬盘服务的。与机械硬盘相比,固态硬盘具有更低的延时和更高的性能,但随着时代发展,人们对数据的处理以及对传输速度的要求越来越高,AHCI模式已经不能跟上固态硬盘性能发展的步伐了,6GbpS已经成为限制固态硬盘传输速度的瓶颈。PCIe的出现,并没有直接改变瓶颈,直到将底层协议更改为NVMe

 

NVMe的优势:

从带宽上讲,简单的来说是因为暂时SATA不需要像PCIe这么快的速率。因为SATA的目标用途是提供廉价的南桥和硬盘之间的连接。基于此, PCIe支持不同的lane的个数,比如x1, x2, x4, x8, x16就是为了适应不同带宽的需求。而SATA/AHCI对带宽的需求没那么大,因此在设计上只有X1这一种规格。

从延迟上讲,之前的HDD延迟最高,其次是AHCI模式下的固态硬盘接着是NVMe最低的是如今是Intel推出3DXPOINT技术,计算机系统设计都是把SATA接到PCH再通过PCIe连到CPU。这样系统延迟就增加了很多。

 

                    PCIe协议:

本质上是因为PCIe是全双工架构,SATA是半双工架构。至于PCIe8GbSATA6Gb传输速率差别,那是因为物理层的能力不同,不是架构上的原因。PCIe协议和SATA协议都是分层协议,分为物理层,数据链路层,传输层,命令层和应用层。

硬件工程师主要关注物理层、数据链路层和传输层。所有CMD/data由应用层和命令层打下来,每向下走一层,多一层封装和变换,最后通过差分总线传输出去。

应用层和命令层打下来的CMD/dataTLP的格式封装起来,送给数据链路层,链路层给其加上sequence前缀和CRC后缀,成为一个完整的数据报文结构,送到物理层,经过8b/10b或者128b/130b编码后发送出去。关键点在于数据链路层有一个发送buffer,这个buffer可以存储一定量的TLP。每个传输层打下来的TLP首先送到这个发送buffer中,然后再发送给物理层。接收端也有一个接收buffer,可以一连串的接收多个TLP。如此,发送端无需等待接收端的回应,就可以先打多个TLP出去,接收端可以一股脑收起来,一个一个处理,如果接收正确,回复一个ACK DLLPDLLP是另一种数据结构,用来进行一些控制信息的沟通,不用来传递CMD/dataDLLP由数据链路层自动生成,发送给对方的数据链路层,传输层不知道DLLP的存在),发送端收到这个DLLP,可以择机清空发送buffer中对应的TLP。如果接收端接收到错误的TLP,则回复NACK DLLP,发送方看到之后择机将发送buffer中对应的TLP重新发一遍。这带来的好处有以下:

1) 发送端多个TLP可以pipe起来。一个TLP无需等待前一个TLP传完并收到ACK DLLP回应,就可以先发出去。反正有buffer可以先存着,物理层有空就发。

2) 两个设备可以同时给对方打TLP,即全双工通信。一个设备发送TLP的时候,另一个设备无需被动等待,它可以发自己的TLP。 总线两端的设备地位是对等的,谁都可以给对方打CMD或者传data

上图:PCIe的数据链路层结构

SATA协议:

以上说的两个好处,正好对应SATA总线的两个弱点:

1 SATA总线发送端不存在pipehost一个FIS(类似PCIe协议中的TLP)打下去之后,只有device端回复收到,并且通过CRC校验之后(通过R_OK原语,类似PCIeACK DLLP),host才能打下一笔FIS

2 SATA总线两端是不对等的,存在hostdevice的区别,只能主机给deviceCMD,不能device给主机打CMD。而且不论是host还是device,一方发送FIS的时候,另一方只能处于接收状态,不能发FIS出去。这就是半双工通信。假如host正往device里面写datadevice不可能在此时给hostdata的。所以同一时刻,SATARxTx只有一根线上是有效数据(payload)。

下图是SATA的一笔NCQ read CMD的总线传输。HOST通过Register FISCMD打下来,device收到之后,回复一个Register FISDevice准备好data后,发送DMA setup FIS 告知host,然后发送data FIS,将数据送给host。传完数据,device发送一个set device bits FIS告知host。整个过程中,不论是host还是deviceTP层只能一次发一个FIS,也不存在双方同时给对方发FIS的可能。

 
脚注信息
Copyright (C) 2009-2017 深圳金百达科技有限公司

粤ICP备17077787号