一种基于NVMe的数据写入方法、装置及系统转让专利
申请号 : CN201880004981.3
文献号 : CN111542803B
文献日 : 2021-10-01
发明人 : 维克多·吉辛 , 李君瑛 , 周冠锋 , 林嘉树
申请人 : 华为技术有限公司
摘要 :
权利要求 :
1.一种基于NVMe的数据写入系统,其特征在于,所述系统包括主机、NVMe控制器和存储介质;
所述存储介质用于存储数据;
所述主机用于触发写指令,并向所述NVMe控制器发送数据报文,所述数据报文携带载荷数据和关联标识,所述关联标识用于关联所述载荷数据和所述写指令;
所述NVMe控制器用于根据所述写指令将所述载荷数据写入所述存储介质;
所述NVMe控制器包含内部存储器,所述NVMe控制器将所述载荷数据写入所述存储介质之前,还用于为所述载荷数据在所述内部存储器中分配存储空间,将所述载荷数据存入所述分配的存储空间,并记录所述分配的存储空间与所述关联标识之间的映射关系。
2.根据权利要求1所述的系统,其特征在于,所述内部存储器包含多个内存块;
所述NVMe控制器还用于向所述主机提供所述内部存储器的内存块的数目和所述内存块的大小;
所述主机还包含计数器,所述计数器用于指示未被占用的内存块数量;
所述主机向所述NVMe控制器发送所述数据报文后,还用于将所述计数器的数值减少。
3.根据权利要求2所述的系统,其特征在于,所述NVMe控制器将所述载荷数据写入所述存储介质后,还用于触发内存块释放报告,所述内存块释放报告用于指示所述NVMe控制器释放出内存块;
所述主机还用于获取所述内存释放报告,并根据所述内存块释放报告将所述计数器的数值增加。
4.根据权利要求3所述的系统,其特征在于,所述主机包含多个计数器,其中,每个计数器对应至少一个写指令;
所述内存块释放报告中还包括关联标识;
所述主机还用于根据所述内存释放报告和所述关联标识,将所述写指令对应的计数器的数值增加。
5.根据权利要求1‑4任一项所述的系统,其特征在于,所述数据报文为PCIe报文,所述关联标识为所述PCIe报文的第一地址信息;
所述NVMe控制器还用于根据所述第一地址信息确定第二地址信息,并根据所述第二地址信息获取所述写指令,所述第二地址信息用于指示所述写指令的存储位置。
6.根据权利要求1‑4任一项所述的系统,其特征在于,所述关联标识包含所述写指令的部分字段;
所述NVMe控制器还用于根据所述关联标识获取所述写指令。
7.根据权利要求1‑4任一项所述的系统,其特征在于,所述NVMe控制器还用于根据所述写指令确定所述关联标识,并根据所述关联标识从所述分配的存储空间中获取所述载荷数据。
8.根据权利要求1‑4任一项所述的系统,其特征在于,所述NVMe控制器还用于根据接收所述数据报文的顺序确定所述载荷数据在待写入数据中的顺序。
9.根据权利要求1‑4任一项所述的系统,其特征在于,所述数据报文还携带顺序标识,所述顺序标识用于指示所述载荷数据在待写入数据中的顺序。
10.一种基于NVMe的数据写入方法,其特征在于,所述方法包括:NVMe控制器接收主机发送的数据报文,所述数据报文携带载荷数据和关联标识,所述关联标识用于关联所述载荷数据和写指令;
所述NVMe控制器获取所述写指令;
所述NVMe控制器根据所述写指令将所述载荷数据写入存储介质;
所述NVMe控制器包含内部存储器,所述NVMe控制器将所述载荷数据写入所述存储介质之前,所述方法还包括:
所述NVMe控制器为所述载荷数据在所述内部存储器中分配存储空间,将所述载荷数据存入所述分配的存储空间,并记录所述分配的存储空间与所述关联标识之间的映射关系。
11.根据权利要求10所述的方法,其特征在于,所述内部存储器包含多个内存块;
所述方法还包括:
所述NVMe控制器向所述主机提供所述内部存储器的内存块的数目和所述内存块的大小。
12.根据权利要求11所述的方法,其特征在于,所述NVMe控制器将所述载荷数据写入所述存储介质后,所述方法还包括:所述NVMe控制器触发内存块释放报告,所述内存块释放报告用于指示所述NVMe控制器释放出内存块。
13.根据权利要求12所述的方法,其特征在于,所述内存块释放报告中还包括关联标识,所述内存释放报告用于指示所述NVMe控制器释放出所述关联标识对应的写操作占用的内存块。
14.根据权利要求10‑13任一项所述的方法,其特征在于,所述数据报文为PCIe报文,所述关联标识为所述PCIe报文的第一地址信息;
所述方法还包括:
所述NVMe控制器根据所述第一地址信息确定第二地址信息,并根据所述第二地址信息获取所述写指令,所述第二地址信息用于指示所述写指令的存储位置。
15.根据权利要求10‑13任一项所述的方法,其特征在于,所述关联标识包含所述写指令的部分字段;
所述方法还包括:
所述NVMe控制器根据所述关联标识获取所述写指令。
16.根据权利要求10‑13任一项所述的方法,其特征在于,所述方法还包括:所述NVMe控制器根据所述写指令确定所述关联标识,并根据所述关联标识从所述分配的存储空间中获取所述载荷数据。
17.根据权利要求10‑13任一项所述的方法,其特征在于,所述方法还包括:所述NVMe控制器根据接收所述数据报文的顺序确定所述载荷数据在待写入数据中的顺序。
18.根据权利要求10‑13任一项所述的方法,其特征在于,所述数据报文还携带顺序标识,所述顺序标识用于指示所述载荷数据在待写入数据中的顺序。
19.一种基于NVMe的数据写入方法,其特征在于,所述方法包括:主机触发写指令;
所述主机向NVMe控制器发送数据报文,所述数据报文携带载荷数据和关联标识,所述关联标识用于关联所述载荷数据和所述写指令;所述数据报文为PCIe报文,所述关联标识为所述PCIe报文的第一地址信息,所述第一地址信息和第二地址信息之间存在映射关系,所述第二地址信息用于指示所述写指令的存储位置。
20.根据权利要求19所述的方法,其特征在于,所述关联标识包含所述写指令的部分字段,所述关联标识用于唯一的确定所述写指令。
21.根据权利要求19‑20任一项所述的方法,其特征在于,所述方法还包括:所述主机获取所述NVMe控制器的内部存储器的内存块的数目和所述内存块的大小,所述内存块用于存储所述主机发送的数据。
22.根据权利要求21所述的方法,其特征在于,所述主机还包含计数器,所述计数器用于指示所述NVMe控制器的内存存储器中未被占用的内存块数量;
所述主机向所述NVMe控制器发送所述数据报文后,所述方法还包括:所述主机将所述计数器的数值减少。
23.根据权利要求22所述的方法,其特征在于,所述方法还包括:所述主机获取所述NVMe控制器触发的内存块释放报告,所述内存块释放报告用于指示所述NVMe控制器释放出内存块;
所述主机根据所述内存块释放报告将所述计数器的数值增加。
24.根据权利要求23所述的方法,其特征在于,所述主机包含多个计数器,其中,每个计数器对应至少一个写指令;
所述内存块释放报告中还包括关联标识;
所述方法还包括:
所述主机根据所述内存释放报告和所述关联标识,将所述写指令对应的计数器的数值增加。
25.一种基于NVMe的数据写入装置,其特征在于,所述装置包括:接收单元,用于接收主机发送的数据报文,所述数据报文携带载荷数据和关联标识,所述关联标识用于关联所述载荷数据和写指令;
处理单元,用于获取所述写指令,并根据所述写指令将所述载荷数据写入存储介质;
所述装置还包含内部存储器,所述处理单元将所述载荷数据写入所述存储介质之前,还用于为所述载荷数据在所述内部存储器中分配存储空间,将所述载荷数据存入所述分配的存储空间,并记录所述分配的存储空间与所述关联标识之间的映射关系。
26.根据权利要求25所述的装置,其特征在于,所述内部存储器包含多个内存块;
所述处理单元还用于向所述主机提供所述内部存储器的内存块的数目和所述内存块的大小。
27.根据权利要求26所述的装置,其特征在于,所述处理单元将所述载荷数据写入所述存储介质后,还用于触发内存块释放报告,所述内存块释放报告用于指示所述装置释放出内存块。
28.根据权利要求27所述的装置,其特征在于,所述内存块释放报告中还包括关联标识,所述内存释放报告用于指示所述装置释放出所述关联标识对应的写操作占用的内存块。
29.根据权利要求25‑28任一项所述的装置,其特征在于,所述数据报文为PCIe报文,所述关联标识为所述PCIe报文的第一地址信息;
所述处理单元还用于根据所述第一地址信息确定第二地址信息,并根据所述第二地址信息获取所述写指令,所述第二地址信息用于指示所述写指令的存储位置。
30.根据权利要求25‑28任一项所述的装置,其特征在于,所述关联标识包含所述写指令的部分字段;
所述处理单元还用于根据所述关联标识获取所述写指令。
31.根据权利要求25‑28任一项所述的装置,其特征在于,所述处理单元还用于根据所述写指令确定所述关联标识,并根据所述关联标识从所述分配的存储空间中获取所述载荷数据。
32.根据权利要求25‑28任一项所述的装置,其特征在于,所述处理单元还用于根据接收所述数据报文的顺序确定所述载荷数据在待写入数据中的顺序。
33.根据权利要求25‑28任一项所述的装置,其特征在于,所述数据报文还携带顺序标识,所述顺序标识用于指示所述载荷数据在待写入数据中的顺序。
34.一种基于NVMe的数据写入装置,其特征在于,所述装置包括:处理单元,用于触发写指令,并向NVMe控制器发送数据报文,所述数据报文携带载荷数据和关联标识,所述关联标识用于关联所述载荷数据和所述写指令;
所述数据报文为PCIe报文,所述关联标识为所述PCIe报文的第一地址信息,所述第一地址信息和第二地址信息之间存在映射关系,所述第二地址信息用于指示所述写指令的存储位置。
35.根据权利要求34所述的装置,其特征在于,所述关联标识包含所述写指令的部分字段,所述关联标识用于唯一的确定所述写指令。
36.根据权利要求34‑35任一项所述的装置,其特征在于,所述处理单元还用于获取所述NVMe控制器的内部存储器的内存块的数目和所述内存块的大小,所述内存块用于存储所述装置发送的数据。
37.根据权利要求36所述的装置,其特征在于,所述装置还包含计数器,所述计数器用于指示所述NVMe控制器的内存存储器中未被占用的内存块数量;
所述处理单元向所述NVMe控制器发送所述数据报文后,还用于将所述计数器的数值减少。
38.根据权利要求37所述的装置,其特征在于,所述处理单元还用于获取所述NVMe控制器触发的内存块释放报告,并根据所述内存块释放报告将所述计数器的数值增加,所述内存块释放报告用于指示所述NVMe控制器释放出内存块。
39.根据权利要求38所述的装置,其特征在于,所述装置包含多个计数器,其中,每个计数器对应至少一个写指令;
所述内存块释放报告中还包括关联标识;
所述处理单元用于根据所述内存释放报告和所述关联标识,将所述写指令对应的计数器的数值增加。
40.一种可读介质,其特征在于,包括执行指令,当计算设备的处理器执行所述执行指令时,所述计算设备执行权利要求10‑18任一项所述的方法。
41.一种计算设备,其特征在于,包括:处理器、存储器和总线;
所述存储器用于存储执行指令,所述处理器与所述存储器通过所述总线连接,当所述计算设备运行时,所述处理器执行所述存储器存储的所述执行指令,以使所述计算设备执行权利要求10‑18任一项所述的方法。
42.一种可读介质,其特征在于,包括执行指令,当计算设备的处理器执行所述执行指令时,所述计算设备执行权利要求19‑24任一项所述的方法。
43.一种计算设备,其特征在于,包括:处理器、存储器和总线;
所述存储器用于存储执行指令,所述处理器与所述存储器通过所述总线连接,当所述计算设备运行时,所述处理器执行所述存储器存储的所述执行指令,以使所述计算设备执行权利要求19‑24任一项所述的方法。
说明书 :
一种基于NVMe的数据写入方法、装置及系统
技术领域
背景技术
advanced technology attachment,SATA)接口与串行ATA高级主控接口/高级主机控制器
接口(Serial ATA Advanced Host Controller Interface,AHCI)标准已经无法满足存储
设备的要求,成为限制存储设备处理能力的一大瓶颈。非易失性高速传输总线(non‑
volatile memory express,NVMe)应运而生,NVMe是一种允许主机(Host)和非易失性存储
(non‑volatile memory,NVM)子系统通信的接口,NVM子系统(包括控制器和存储介质)通信
的该接口以寄存器接口的方式附加到高速外围部件互连总线(Peripheral Component
Interconnect express,PCIe)接口之上,为企业级和消费级固态存储做了优化具有性能
高、访问时延低的优势。
放到对应的完成队列。每个提交队列条目(submission queue entry,SQE)是一个命令,在
写指令中,用于数据传输的内存地址通过内存区域页(Physical Region Page,PRP)或散列
链(Scatter Gather List,SGL)进行指定。NVMe获取到写指令后,通过PCIe读操作从用于传
输数据的内存地址指示的存储空间内读取待写入数据,并写入存储介质。
发明内容
荷数据与写指令。NVMe控制器接收到主机推送的数据报文后,根据关联标识确定于数据报
文关联的写指令,并根据写指令将数据报文中的载荷数据写入存储介质。
指令,并向NVMe控制器发送数据报文,该数据报文携带载荷数据和关联标识,关联标识用于
关联载荷数据和该写指令。NVMe控制器根据关联标识获取到有关联关系的载荷数据和写指
令后,根据写指令将载荷数据写入存储介质。
器主动推送该数据报文。更具体的,主机通过数据入口向NVMe控制器推送数据报文,入口地
址可以为NVMe控制器向主机开放的PCIe地址,主机通过该PCIe地址向NVMe控制器推送待写
入数据,即该数据报文为PCIe写报文,数据报文中携带该入口地址。主机通过数据报文主动
向NVMe控制器推送数据报文,在触发SQE之前,不需要提前将待写入数据完全存入PRP或SGL
指示的存储空间。本申请可以实现流水线操作,从而减少主机因准备待写入数据带来的时
延,且节省了用于完全存储待写入数据的存储空间,且SQE中不再需要PRP或SGL字段,减少
了对带宽的占用。
存储空间,将载荷数据存入分配的存储空间,并记录分配的存储空间与关联标识之间的映
射关系。
机推送的数据报文后,并没有将载荷数据写入入口地址指示的存储空间,而是在本地内部
存储空间为该入口分配对应的存储空间,使用内部存储器对载荷数据进行缓存。
制器还用于向主机提供内部存储器的内存块的数目和内存块的大小,该主机包含计数器,
计数器用于指示未被占用的内存块数量,主机向NVMe控制器发送数据报文后,还用于将计
数器的数值减少。
的存储块的数量,计数器的初始值可以为NVMe控制器的内存块的数量,随着数据推送逐渐
减少,当计数器为0时,主机不能再向NMVe控制器发送数据报文,从而避免了内存溢出,保证
了数据安全。
于指示NVMe控制器释放出内存块,主机获取内存释放报告后,还用于根据内存块释放报告
将计数器的数值增加。
的数目对计数器的数据进行增加。
标识,主机还用于根据内存释放报告和关联标识,将写指令对应的计数器的数值增加。
量。主机根据内存释放报告中的关联标识判断释放的内存块属于的层级,并对应的将该层
级的计数器的数值增加。主机也可以为单独的写指令或者SQ维护计数器,本发明不限定计
数器的具体实现。
用于根据第一地址信息确定第二地址信息,并根据第二地址信息获取写指令,第二地址信
息用于指示写指令的存储位置。
的部分字段,即关联标识可以为写指令对应的入口地址或者入口地址的部分字段。第二地
址信息为写指令在SQ中存储的槽位的地址的全部或者部分字段。NVMe控制器维护有第一地
址信息和第二地址信息之间的映射关系。
令。
CID或者CID的部分字段。NVMe控制器可以根据关联标识便利SQ,寻找对应的SQE。
取载荷数据。
与关联标识的对应关系,获取到写指令后,NVMe控制器还可以根据写指令确定关联标识,并
根据关联标识查找存储的载荷数据。
顺序。
进行重新排序,如果主机发送数据报文的时候是按照载荷数据在待写入数据中的顺序严格
保序发送的,则NVMe控制器可以根据接收到数据报文的顺序对载荷数据进行排序。
序。
能够更大限度的利用带宽资源。
数据和写指令,NVMe控制器获取写指令,并根据写指令将载荷数据写入存储介质。
或SGL指示的存储空间。本申请可以通过流水线操作减少主机准备待写入数据的时延,且节
省了用于完全存储待写入数据的存储空间,且SQE中不再需要PRP或SGL字段,减少了对带宽
的占用。
部存储器中分配存储空间,将载荷数据存入分配的存储空间,并记录分配的存储空间与关
联标识之间的映射关系。
以使用内存存储器对数据进行缓存。
还包括:NVMe控制器向主机提供内部存储器的内存块的数目和内存块的大小。
的存储块的数量,当计数器为0时,主机不能再向NMVe控制器发送数据报文,从而避免了内
存溢出,保证了数据安全。
内存块释放报告用于指示NVMe控制器释放出内存块。
的数目对计数器的数据进行增加。
标识,内存释放报告用于指示NVMe控制器释放出关联标识对应的写操作占用的内存块。
量。主机根据内存释放报告中的关联标识判断释放的内存块属于的层级,并对应的将该层
级的计数器的数值增加。主机也可以为单独的写指令或者SQ维护计数器,本发明不限定计
数器的具体实现。
括:NVMe控制器根据第一地址信息确定第二地址信息,并根据第二地址信息获取写指令,第
二地址信息用于指示写指令的存储位置。
的全部或部分字段。第二地址信息为写指令在SQ中存储的槽位的地址的全部或者部分字
段。NVMe控制器维护有第一地址信息和第二地址信息之间的映射关系。
取写指令。
CID或者CID的部分字段。NVMe控制器可以根据关联标识便利SQ,寻找对应的SQE。
间中获取载荷数据。
与关联标识的对应关系,获取到写指令后,NVMe控制器还可以根据写指令确定关联标识,并
根据关联标识查找存储的载荷数据。
数据中的顺序。
进行重新排序,如果主机发送数据报文的时候是按照载荷数据在待写入数据中的顺序严格
保序发送的,则NVMe控制器可以根据接收到数据报文的顺序对载荷数据进行排序。
序。
的利用带宽资源。
的方法。
的执行指令,以使计算设备执行以上第二方面或以上第二方面的任一种可能的实现方式中
的方法。
联载荷数据和写指令。
器主动推送该数据报文。主机通过向NMVe控制器主动推送数据报文,并通过数据报文中携
带的关联标识关联载荷数据和写指令,从而实现对数据的写入。根据本申请公开的技术方
案,主机在触发SQE之前,不需要提前将待写入数据完全存入PRP或SGL指示的存储空间。本
申请可以通过流水线操作减少主机准备待写入数据的时延,且节省了用于完全存储待写入
数据的存储空间,且SQE中不再需要PRP或SGL字段,减少了对带宽的占用。
地址信息用于指示写指令的存储位置。
的全部或部分字段。第二地址信息为写指令在SQ中存储的槽位的地址的全部或者部分字
段。NVMe控制器维护有第一地址信息和第二地址信息之间的映射关系。
CID或者CID的部分字段。NVMe控制器可以根据关联标识便利SQ,寻找对应的SQE。
的大小,内存块用于存储主机发送的数据。
小,主机通过读取配置信息获取内存块数量和大小。
机向NVMe控制器发送数据报文后,该方法还包括:主机将计数器的数值减少。
控制器释放出内存块,主机根据内存块释放报告将计数器的数值增加。
的数目对计数器的数据进行增加。
标识,该方法还包括:主机根据内存释放报告和关联标识,将写指令对应的计数器的数值增
加。
量。主机根据内存释放报告中的关联标识判断释放的内存块属于的层级,并对应的将该层
级的计数器的数值增加。主机也可以为单独的写指令或者SQ维护计数器,本发明不限定计
数器的具体实现。
的方法。
的执行指令,以使计算设备执行以上第五方面或以上第五方面的任一种可能的实现方式中
的方法。
荷数据和写指令;处理单元,用于获取写指令,并根据写指令将载荷数据写入存储介质。
间,将载荷数据存入分配的存储空间,并记录分配的存储空间与关联标识之间的映射关系。
存块的大小。
示装置释放出内存块。
作占用的内存块。
根据第一地址信息确定第二地址信息,并根据第二地址信息获取写指令,第二地址信息用
于指示写指令的存储位置。
载荷数据。
顺序。
序。
述。
标识用于关联载荷数据和写指令。
二地址信息用于指示写指令的存储位置。
小,内存块用于存储装置发送的数据。
处理单元向NVMe控制器发送数据报文后,还用于将计数器的数值减少。
数值增加,内存块释放报告用于指示NVMe控制器释放出内存块。
标识;处理单元用于根据内存释放报告和关联标识,将写指令对应的计数器的数值增加。
述。
写入数据与写指令SQE,不需要在SQE中携带数据存储的位置信息,主机在发出SQE之前不再
需要将数据完全准备好,从而减少了写操作的时延,并减少了主机存储待写入数据的存储
空间。另外,SQE中可以不再携带待写入数据的地址信息,减小了总线负载。
附图说明
具体实施方式
据,本发明实施例不限定数据报文中携带的数据的类型。在以下描述中,除非另有说明,本
发明实施例使用“数据”一词来表示数据报文中携带的各类数据。
据报文中携带入口地址。NMVe控制器接收到数据报文后,识别入口地址,在本地的内部存储
器中为该入口分配对应的存储空间,并将数据报文携带的载荷数据写入分配的存储空间进
行缓存,而不是将载荷数据写入入口地址指示的存储空间。内部存储器可以具体为NVMe控
制器的私有内存空间。
在本发明实施例中也称为数据源。在本发明实施例中,命令发起者和数据发起者可以是相
同或者相互分离的主体。“主机”一词可以指代数据源与命令源分离场景下的命令源或者二
者未分离场景下与NMVe控制器通信的计算设备。
入存储介质中。基于以上机制,主机在触发写指令前,需要提前将数据存储于控制器可访问
的存储区域,即该技术需要将写命令对应的数据全部存入到控制器可寻址的存储区域后才
能触发写命令到提交队列。
PCIe总线与NVMe控制器105互联,NVMe控制器105连接有存储介质106。
(例如闪存(Flash)等,本发明实施例不限定存储介质106的具体实现形式。在一些实施例
中,存储介质106还可能进一步包括与NVMe控制器105分离的远程存储器,例如通过网络与
NVMe控制器105互联的存储介质。
intranet),局域网(英文全称:local area network,缩写:LAN),广域网络(英文全称:wide
area network,缩写:WAN),存储区域网络(英文全称:storage area network,缩写:SAN)
等,或者以上网络的任意组合。本发明实施例不限定网络102的具体实现形式。
时,数据源101需要首先将待写入数据从数据源101完全转移至命令源103,存入NVMe控制器
105可PCIe寻址的存储空间后,命令源103才可以触发写指令。
数据完全存入NVMe控制器可寻址的存储空间后,向提交队列写入SQE,SQE的PRP或SGL字段
携带有待写入数据的地址信息。命令源随后通过门铃机制通知NVMe控制器有新的SQE,NVMe
控制器接收到门铃后,去SQ中读取该SQE,并根据SQE中携带的地址信息使用PCIe读指令读
取待写入数据,然后将待写入数据写入存储介质。在写操作完成后,NVMe控制器向完成队列
写入完成队列条目,并通过中断机制通知命令源,命令源处理中断,获取CQE,并向数据源反
馈写完成。
需要大量的存储空间存储待写入数据,且从命令源为待写入数据分配存储空间至获取到
NVMe控制器CQE释放存储空间之间的时间段,写操作会一直占用这一部分存储空间。
可编程门阵列(英文全称:Field Programmable Gate Array,缩写:FPGA),专用集成电路
(英文全称:Application Specific Integrated Circuit,缩写:ASIC)或数字信号处理器
(英文:digital signal processor,DSP)等计算逻辑或以上任意计算逻辑的组合。处理器
301可以为单核处理器或多核处理器。
问。
件电路,则写操作逻辑305执行本申请实施例的方法,如果写操作逻辑305为固件模块,则处
理器301执行写操作逻辑305中的固件代码来实现本申请实施例的技术方案。写操作逻辑
305包括:(1)用于接收主机发送的数据报文的逻辑(电路/固件代码),数据报文携带载荷数
据和关联标识,关联标识用于关联载荷数据和写指令;(2)用于获取写指令的逻辑(电路/固
件代码);(3)用于根据写指令,将载荷数据写入存储介质的逻辑(电路/固件代码)。
口303。
存储介质互联,NVMe控制器300也可以通过通信接口303连接网络,并通过网络与主机或存
储介质互联。
UNIX、OS X、WINDOWS、macOS或嵌入式操作系统(例如Vxworks))和写操作模块306等。
荷数据和关联标识,关联标识用于关联载荷数据和写指令;(2)用于获取写指令的命令日
志,并存储写事务的命令日志的代码;(3)用于根据写指令,将载荷数据写入存储介质的代
码。
以用硬件、软件或者硬件与软件的结合方式实施。
核处理器或多核处理器。
件电路,则写操作逻辑410执行本申请实施例的方法,如果写操作逻辑410为固件模块,则处
理器410执行写操作逻辑410中的固件代码来实现本申请实施例的技术方案。写操作逻辑
410包括:(1)用于触发写指令的逻辑(电路/固件代码);(2)用于向NVMe控制器发送数据报
文的逻辑(电路/固件代码),数据报文携带载荷数据和关联标识,关联标识用于关联载荷数
据和写指令。
和通信接口403。
器互联,主机400还可以通过通信接口403与网络互联,并通过网络连接NVMe控制器。
UNIX、OS X、WINDOWS或嵌入式操作系统(例如Vxworks)),应用程序407,和写操作模块406
等。
据报文的代码,数据报文携带载荷数据和关联标识,关联标识用于关联数据报文和写指令。
或者硬件与软件的结合方式实施。
写入数据分为多个数据报文推送至NVMe控制器。
带的载荷数据对应的写指令。
指令。
NVMe控制器推送数据报文,数据报文中携带载荷数据。
或者PCIe地址的部分字段。
获取SQE。本发明实施例不限定主机向NVMe控制器触发读指令的具体流程,例如主机还可以
直接向NVMe控制器推送SQE。
需要NVMe控制器主动通过PCIe读操作去获取载荷数据,所以SQE中不需要再通过SGL域或者
PRP域携带待写入数据的地址信息。NVMe控制器可以根据SQE和数据的关联方法来处理SQE
中的SGL域或者PRP域,如果在具体实现中SGL域或者PRP域中不携带其他信息,则NVMe控制
器对SGL域或者PRP域的处理方法可以为“忽略”,即本发明实施例可以省略SGL或者PRP。
处的存储介质一般为非易失存储介质。
址空间。以基地址寄存器举例说明,NVM控制器可以将基地址寄存器的一部分PCIe地址组织
成多个入口(portal)的形式,每一个入口占据特定的主机可寻址的PCIe地址空间。入口即
主机向NVMe控制器进行PCIe写操作的数据入口,在下面的描述中,会对入口的功能进行更
详细的描述。主机向NVMe控制器推送的数据报文为PCIe写报文,主机通过将与写命令关联
的数据通过入口写入到NVMe控制器,PCIe写报文的地址段指示写操作对应的入口,即入口
地址可以为数据报文中PCIe地址或者PCIe地址的部分字段。
联到具体的写操作。“唯一”是指主机在任一时刻只能发起一个NVMe写操作关联到一个特定
的入口。
偏移量寻址到入口,这个数组称为通孔。图6为基地址寄存器的结构示意图,如图6所示,每
个通孔由一组入口P 0~P N组成
据通孔包含的入口MP 0~MP N。为了描述方便,在以下描述中,除非另有说明,本发明实施
例将元数据和数据统称为数据。
确定一个入口,进而确定与该入口关联的SQE。
一的确定通孔,入口偏移量用于指示该通孔中具体的入口。
器。
控制器的内部存储器,而不是将载荷数据存入入口地址指示的存储空间。NVMe控制器为每
个入口在自己的内部内存中分配具体的存储块,用于存储该入口接收到的数据报文中携带
的数据。为了便于数据管理和查询,VNMe控制器可以建立存储块与入口的映射关系,在接收
到数据报文后,会根据关联标识的指示将载荷数据存入对应的存储块。
方式。
块,并将数据保存至分配的内存块,将内存块附到根数据结构。NVMe控制器首先将数据存储
在自己的内部存储器中,在满足一定的条件时,将自己的内部存储器中存储的数据存储至
存储介质。此处的满足条件可以为NVMe控制器接收到了对应的写指令,或者数据量积累到
NMVe控制器可以对存储介质进行一次写操作的程度。NVMe控制器的内部存储器可以为NVMe
控制器的私有内存。
实现方式的不同而不同,在下文会有详细描述。主机通过在TLP中地址字段的BAR,通孔偏移
量和入口偏移量唯一的确定数据写入的入口。同理,NVMe控制器通过对TLP中地址字段的解
析,通过BAR,通孔偏移量和入口偏移量唯一的确定数据对应的入口。
写指令,第二地址信息用于指示写指令的存储位置。该第一地址信息可以为数据报文的入
口地址或入口地址的部分字段,即关联标识可以为入口地址或者入口地址的部分字段。第
二地址信息可以具体为读指令在提交队列的存储的槽位地址。
通过入口与SQ中槽位的对应关系,将SQE和SQE对应的数据分别写入相互对应的SQ槽位和入
口。控制器根据SQ槽位与入口的对应关系,可以确定SQE与数据的对应关系,并根据SQE将数
据写入存储介质。
方式。
唯一的确定一个SQE。主机还可以通过在数据报文中携带SQE的指示信息,从而直接实现SQE
与入口的关联,而不是通过SQ槽位实现间接的关联。例如,如果一个SQ中的每个SQE有各自
独特的命令标识CID,则关联标识可以由“队列ID+CID”组成。如果在NVMe控制器所处理的每
个SQE的CID都是唯一的,则关联标识可以为对应SQE携带的CID。在其他实现方式中,关联标
识还可以为CID的一部分。在本发明实施例中,关联标识还可以使用特别定义的SGL类型或
者SGL子类型或者SQE中其他字段指定。本发明实施例不限定关联标识的具体实现方式。
基于入口的传递方式进行传递还是基于传统的数据传输方式进行传递。
器获取写指令的形式不进行限定。
指令,再根据写指令获取对应入口接收到的数据,例如,NVMe控制器可以根据写指令确定该
关联标识,然后根据关联标识确定对应的入口,并根据关联标识从为该入口分配的存储空
间中获取存储的载荷数据。
后,可以根据维护的对应关系确定该SQE对应的入口。如果NVMe检测到对应的入口还没有数
据到达,则NVMe控制器挂起SQE,等待数据到来。直至NVMe控制器检测到对应的入口有数据
到达,且通过入口获取合适部分的数据后,便可以执行这部分数据的写操作。合适部分的数
据可以为该部分数据的地址和大小与NVMe控制器向存储介质的一次写操作的内部实现对
齐。
到根数据结构,等待相关的SQE到来,直至对应的SQE到达NVMe控制器或者NVMe控制器可寻
址的SQ槽位,NVMe控制器获取该SQE,并根据SQE将数据写入存储介质。
据到来。
图8所示的入口宽度可以只为两个bit(标准规定)。
模式下,数据报文中需要携带数据的偏移量,即图8所示的入口宽度需要大于或者等于最大
数据传输大小。
支持的入口数量。这个数量要受到“NVMe控制器内部存储器容量”除以“最大数据传输大小”
的限制。本发明提供反压机制来解决缓冲区溢出和缓解NVMe控制器内部存储器容量限制的
问题。
配内存块,当NVMe控制器将内存块中的数据写入到存储介质后,NVMe控制器释放内存块。
数据分配内存块。当某个内存块中的数据完全被NVMe控制器根据SQE写入存储介质后,NVMe
控制器将该内存块释放到内存池中。
某一种意义上,NAC可以理解为虚拟内存池的状态,就像硬件资源虚拟化一样,虚拟内存池
是指这个内存池并没有实际的占有具有实际物理地址的物理内存块,整个虚拟内存池的状
态仅仅由NAC进行表示。虚拟内存池中的内存块可以被所有写操作共享。
(QP或写操作)维护不同的虚拟内存池,即主机需要对应的为不同的QP或者写操作维护多个
NAC计数器。
池,则最大数据量为MNAC*C)。
推送数据报文的过程中,会逐渐递减计数器,直至将NAC减到0后,主机不能再向NVMe控制器
推送数据。当NVMe控制器将内存块中的数据写入到存储介质后会发出内存块释放报告,主
机根据NMVe控制器释放的内存块数目对计数器进行加操作。
但是内存释放门铃中需要携带NVMe控制器释放的内存块数量。
内存池,则需要在内存释放门铃中携带关联标识。
放门铃中释放的内存块数量加入到总的虚拟内存池(写操作共享虚拟内存池,门铃信号中
不携带关联标识)或者加入到关联标识指示的入口对应的虚拟内存池(门铃中携带关联标
识,主机维护多个虚拟资源池)。
块分配出去。这个策略允许最大数量的写操作同时执行。
预留更多些内存块也不能进一步提升性能。“最佳写内存块数量”可以根据写操作大小,主
机与NVMe控制器之间循环时间RTT和PWCC等参数确定。主机尝试预留“最佳写内存块数量”,
如果预留成功,主机将开始执行写操作,释放回来的写内存块再次被被该写操作占用,直至
给该写操作分配的全部内存块达到写操作所需内存块数量。如果预留不到任何内存块,主
机可以将挂起该写操作。如果预留的内存块数量小于“最佳写内存块数量”,主机仍可以开
始执行写操作,释放回来的内存块再次被该写操作占用,直至给该写操作分配的全部内存
块达到写操作所需内存块数量。主机也可以预留其它写操作释放到“虚拟内存块池”的内存
块,直至该写操作占用的内存块达到“所需内存块数量”。
写入数据与写指令SQE,不需要在SQE中携带数据存储的位置信息,主机在发出SQE之前不再
需要将数据完全准备好,从而减少了写操作的时延,并减少了主机存储待写入数据的存储
空间。另外,SQE中可以不再携带待写入数据的地址信息,减小了总线负载。
NVMe控制器写入存储介质。
JBOF)。如图11(a)所示,数据源为需要访问存储介质的主机,命令源为与主机通过fabric互
联的NOF桥,更具体的,命令源可以为NOF桥中的NOF引擎。NOF桥通过PCIe总线与NVMe控制器
互联,NVMe连接有存储介质。
加速器的加速引擎。加密加速器通过PCIe总线与NVMe控制器互联,NVMe控制器连接有存储
介质。
令源。本发明实施例不限定命令源向NVMe控制器触发SQE的具体形式,命令源可以将SQE写
入SQ,并通过门铃通知NVMe控制器或者通过其他形式将SQE发送至NVMe控制器。
需要将待写入数据通过NVMe控制器写入存储介质时,需要将数据数据发送至命令源。
向数据源发送数据请求,数据源根据数据请求向命令源发送数据,命令源在接收到部分数
据后,就可以向NVMe控制器推送该数据,不需要等待数据完全到达后才将数据推送至NVMe
控制器。命令源可以做到流水线方式,即命令源可以并行处理接收数据源发送的数据和向
NVMe控制器推送已经接收到的数据,流水线方式一方面节省了用于缓存数据的存储空间,
另一方面也加快了写操作的处理速度。
空间,并记录分配的存储空间与关联标识之间的映射关系。
地址信息用于指示写指令的存储位置。
来实现。
地址信息可以为TLP包头中的PCIe地址部分的全部或部分字段,第二地址信息也可以为SQ
槽位的地址信息的全部或部分字段。
1304的数值减少。
存块。
关联标识,将写指令对应的计数器1304的数值增加。
1304可以由系统内存402或者处理器401中的寄存器来实现。
例所记载的技术方案进行修改,或者替换其中部分技术特征;而这些修改或者替换,并不使
相应技术方案脱离权利要求的保护范围。