您当前的位置: 首页 >> 电娱要闻

NVMe协议分析

作者:泉冠电子交流圈电子网 日期:2025-05-15 点击数:1

NVM Express(NVMe)是一种下功能、可扩大的接心和谈,用于经过PCI express(PCIe)总线,完成主机硬件取NVM装备之间的通讯。今朝,因为NVMe SSD比拟于SATA SSD具有更下的吞吐量、更快的拜访速率战更低的功耗,曾经被普遍使用于各类计较范畴战存储零碎。

NVMe行列

NVMe和谈采取成对的提交行列(Submission Queue,SQ)战完成行列(Completion Queue,CQ)机造。SQ用于寄存提交号令,而CQ则用于寄存完成疑息。行列形态疑息经过门铃存放器(Door Bell,DB)去检测。那两个行列采取了环形行列构造,行列能够映照就任何PCIe可拜访的内存中,凡是放正在主机侧内存。关于提交行列,主机端是消费者,NVMe SSD是消耗者。完成行列的状况恰好相反。因而SQ Tail指针战CQ Head指针由主机更新,而其他两个指针由NVMe节制器更新。NVMe的行列构造如图1所示。

wKgZO2gkwbuAWT8mAABF1kereXY912.png

图1 行列表示图

NVMe行列的深度是牢固的,经过Tail战Head去辨别指背行列的尾尾地位,行列实践可用的巨细是行列巨细加1,当Head条目指针即是Tail条目指针时,行列为空。当Head条目指针比Tail条目指针多一个时,行列为谦。

NVMe和谈中依据号令范例将行列分为了Admin行列战I/O行列,Admin行列用去缓存治理Admin号令,如获得SSD属性、创立I/O行列等。而I/O行列用去缓存治理I/O号令,如读、写、辨认等。正在一个零碎中只能有一对Admin SQ/CQ,但能够存正在多对IO SQ/CQ。Admin SQ/CQ仅用去停止Admin号令的交互,I/O SQ/CQ仅用去停止I/O号令的交互。关于多核零碎来讲,每一个核内固然只要1个I/O CQ,可是能够存正在多个I/O SQ,如图2所示。

wKgZO2gkweCAJTnXAACY4M0wpQE862.png

图2 NVMe多行列表示图

因为Host端能够存正在多个流火线,多行列的设想可让零碎的功能最年夜化。同时,能够经过对分歧的行列设置分歧的劣先级,去包管下劣先级行列的号令更快完成。NVMe和谈中规则Admin SQ/CQ的行列深度最年夜能够撑持4096(4K),I/O SQ/CQ的行列深度最年夜能够撑持65536(64K)。正在一个实践设想中,SQ的个数战深度的设置能够依据项目需乞降硬件资本停止设置装备摆设。行列深度的设置次要战零碎中行列消耗者战消费者之间的速度有闭。

2. NVMe分层构造

NVMe和谈栈构造分为使用层战传输层两个条理。正在使用层中完成NVMe号令死成、行列治理战流程节制,而传输层则借助PCIe和谈停止完成。PCIe和谈分为三层,即事件层、数据链路层战物理层。事件层担任将数据传输恳求战呼应挨包成事件停止传输,数据链路层则担任数据传输的牢靠性战流节制,经过链路层节制器(Link Layer Controller, LLC)完成。物理层则担任物理传输,包罗电旌旗灯号的收射战接纳、时序节制战线路治理等。其分层构造图如图3所示。起首,正在使用层死成NVMe号令传输至事件层。其次,正在事件层会对下层传输的数据增加尾部战校验,启拆成TLP(Transaction Level Packet)传输至数据链路层。然后,正在数据链路层会对TLP增加序列号战校验,启拆成DLLP。最初,正在物理层对数据包停止编码战并转串处置后,经过SerDes(Serializer/Deserializer)将数据收收至PCIe链路中。

wKgZPGgkwkGASPqqAAAq5AczZIQ365.png

图3 分层构造

因为NVMe和谈是基于PCIe和谈完成的,上面经过正在PCIe拓扑构造中引见NVMe和谈中的SQ、CQ战DB的地位,和数据正在Host战NVMe SSD之间的传输流程。NVMe SSD正在PCIe拓扑构造中的地位如图4所示。

wKgZO2gkwmyAHsPoAAB11BHX2C8488.png

图4 PCIe拓扑构造

PCIe的拓扑构造由三局部构成,根结合体(Root Complex, RC)、PCIe交流器(PCIe Switch)战端面(Endpoint, EP)。根结合体位于拓扑构造的根部,最接近CPU。端面装备位于PCIe的端终。交流机位于根结合体战端面装备之间。PCIe运用串止链路衔接,一个链路的两头只能有两个装备。因而PCIe需求经过PCIe Switch扩大PCIe链路后,才干衔接多个EP装备。正在NVMe存储构造中,NVMe SSD也做为PCIe的一个EP端挂载正在RC上。

NVMe和谈中的SQ战CQ位于Host内存中,主机正在初初化时依据行列的个数战深度正在主机内存开拓出响应的内存空间,去寄存SQ、CQ号令。DB存放器位于NVMe SSD中,且被映照到BAR(Base Address Register)空间中,Host能够经过拜访BAR空间去更新DB存放器的值。

当Host需求背NVMe SSD收送死令时,起首将号令寄存正在主机内存开拓的SQ地区中,其次经过拜访BAR空间的DB存放器去通知NVMe SSD到主机端内存地区与走待履行的号令。待号令履行完成后,NVMe SSD背主机内存的CQ地区写进完成号令。

3. NVMe数据构造

NVMe和谈中规则每一个提交号令的巨细为64字节,完成号令巨细为16字节,NVMe号令分为Admin战IO两类,NVMe的数据块构造体例有PRP战SGL两种。提交号令的格局如图5所示。

wKgZO2gkw0qAYp3VAAGl2DVQsHU382.png

图5 提交号令数据格局

NVMe提交号令的数据格局属性以下:

(1)Opcode(OPC):号令操纵码,分歧操纵号令的Opcode皆有对应的值;

(2)Fused Operation(FUSE):交融操纵,可选字段,用于将两个号令交融为一条号令;

(3)PRP or SGL for Data Transfer(PSDT):PRP或SGL数据传输;

(4)Command Identifier(CID):号令ID;

(5)Namespace Identifier(NSID):定名空间ID;

(6)Metadata Pointer(MPTR):元数据指针;

(7)PRP Entry 1/2:物理地区页项;

(8)SGL Entry:集列散开列表。

Admin号令散界说了能够提交到Admin SQ的号令。NVM号令散界说了能够提交到IO SQ的号令。表1战表2辨别列出了Admin号令散战NVM号令集合的经常使用号令、操纵码战扼要的功用描绘。

表1Admin号令散

号令 必选/可选 Opcode 功用
删除I/O提交行列 必选 00h 删除I/O提交行列
创立I/O提交行列 必选 01h 创立I/O提交行列
删除I/O完成行列 必选 03h 删除I/O完成行列
创立I/O完成行列 必选 04h 创立I/O完成行列
辨认 必选 05h 前往描绘装备的疑息
设置特征 必选 07h 设置SSD节制器特征
获得特征 必选 08h 读与SSD节制器特征
获得日记页 必选 02h 读与日记页表,如SMART日记
号令空间治理 可选 0Ah 治理号令空间,如创立战删除操纵

表2NVMe号令散

号令 必选/可选 Opcode 功用
肃清 必选 00h 将缓存内容革新至非易掉性存储器
必选 01h 将数据写进指定逻辑块
必选 02h 从指定逻辑块读与数据
写进不成改正的毛病 必选 03h 标志规模内的逻辑块有效
写进齐0 可选 05h 将指定的逻辑块值设置为0
数据散治理 可选 06h 指定逻辑块属性

接上去引见NVMe和谈中的觅址体例。正在NVMe和谈中界说了两种觅址体例,PRP战SGL。经过PRP战SGL去记载Host内存中物理页的地位。NVMe号令中的PRP战SGL字段用去背NVMe SSD通报将要读写数据正在内存中的地位。NVMe和谈中规则Admin号令只能经过PRP通知NVMe SSD号令正在内存中物理地点。而SGL次要是正在NVMeoF中运用,因而本设想将采取PRP觅址体例。

Host能够经过设置装备摆设NVMe Controller的CC.MPS存放器去设定物理页的巨细,物理页的巨细可设定的规模是4KB~128MB之间。物理页对应的地点记载正在PRP Entry中,PRP Entry的数据格局。PRP Entry的数据格局由物理页肇端地点战页偏偏移地点两局部构成,如图6所示。因为物理地点只能是四字节对齐,因而将偏偏移地点的最低2bit置为0。另外,图6中n的与值取设置的物理页巨细有闭,比方,将物理页巨细设置为4KB,则n=11,经过偏偏移地点[11:2]去暗示正在一个内存页内的偏偏移地点。

wKgZPGgkw7aAMJhfAAALwzOSowY232.png

图6 PRP Entry格局

一个PRP Entry只能指背一个物理页。NVMe和谈中只界说了两个PRP Entry,当传输数据量巨细年夜于两个内存页巨细时,PRP Entry2将没有指背物理页,而是指背由多少个PRP构成的PRP List。如图7所示,NVMe号令中的PRP1指背第一个内存页,PRP2指背一个新的PRP链表的尾地点。假如需求指定更年夜的内存空间能够经过每个PRP List的最初一个PRP Entry指背新的PRP List。

wKgZPGgkw9aAUoG_AAAz95sEZgw574.png

图7 PRP道理表示图

完成号令的数据格局如图8所示。

wKgZO2gkw_2AczmRAADQvN0vCKk657.png

图8 完成号令数据格局

NVMe完成行列的号令格局属性以下:

(1)SQ Header pointer:SQ头指针;

(2)SQ Identifier:SQ ID;

(3)Command Identifier:号令ID;

(4)P:相位标记phase tag,完成行列出有head/tail交互,经过相位标记完成完成行列项的开释;

(5)Status Field:形态域。

NVMe任务流程

NVMe和谈中的Admin号令战IO号令履行流程相反,次要经过SQ、CQ战DB存放器三个要害部件之间的互相合作去完成。NVMe的号令处置流程分为了8个步调,如图9所示。

wKgZPGgkxBKAJX76AAChfYFHCOw544.png

图9 NVMe号令处置流程

Host战SSD之间经过更新DB(DoorBell)存放器的值去完成行列疑息的交互。每一个SQ战CQ皆具有一个Head存放器战Tail存放器。关于SQ而行,Host是消费者,担任背行列收收提交号令,SSD是消耗者,担任履行号令,因而Host担任更新Tail DB存放器,SSD担任更新Head DB存放器。关于CQ而行,SSD是消费者,担任背行列收收完成号令,Host是消耗者,担任反省完成疑息,因而SSD担任更新Tail DB存放器,Host担任更新Head DB存放器。而DB存放器皆存正在于SSD内,且只能停止写操纵,不克不及停止读操纵。因而NVMe和谈中规则SSD经过完成疑息背Host反应CQ Tail战SQ Head存放器的值。

NVMe号令处置的步调以下:

(1)主机提交新的NVMe号令。主机死成新的NVMe号令并增加ID号后,将其寄存正在SQ Tail指针指背的内存空间中;

(2)主机更新SQ Tail DB存放器。主机经过Memory Write事件更新SQ Tail DB存放器的值,以告诉NVMe SSD节制器来主机端读与SQ中缓存的号令;

(3)NVMe SSD读与号令。NVMe SSD节制器检测到SQ Tail DB存放器的转变后,经过Memory Read事件来读与SQ内缓存的号令,那个进程,NVMe SSD停止突收读与,一次读与多条号令,等候与号令完成后更新SQ Head DB存放器的值;

(4)NVMe SSD履行号令。NVMe SSD节制器依据外部的仲裁机造去履行读与到的NVMe号令,其履行进程其实不是依照行列的前后挨次去履行号令;

(5)NVMe SSD节制器将完成号令写进CQ。NVMe SSD节制器将NVMe号令的履行后果写进主机的CQ内存地区中,完成号令包罗NVMe号令中的ID号战SQ Head DB存放器的值;

(6)NVMe SSD告诉主机反省完成号令。NVMe SSD节制器经过Memory Write事件背主机收回MSI-X中缀旌旗灯号,奉告主机反省CQ中的完成疑息。正在本设想中,打消了完成行列的设想,而采取FPGA的并止处置体例,经过主机端及时监测CQ疑息,以节流硬件资本战进步NVMe号令处置速率;

(7)主机反省完成号令。主机从CQ内存中读与完成疑息,并依据形态字段判别NVMe号令的履行状况。若号令曾经履行完成,主时机开释该ID号对应的提交号令空间,以便给新的号令运用;

(8)主机更新CQ Head DB存放器。主机经过Memory Write事件更新CQ Head DB存放器的值,以告诉NVMe SSD节制器CQ中的完成疑息曾经反省。

对相干NVM安e设想感兴味的能够看本专客,更多的睹csdn用户: tiantianuser
视频睹B站 用户: 专注取守视

考核编纂 黄宇

本站所有文章、数据、图片均来自网友原创提供和互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱: