一种基于NVMe的数据写入方法、装置及系统转让专利

申请号 : CN201880004981.3

文献号 : CN111542803B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 维克多·吉辛李君瑛周冠锋林嘉树

申请人 : 华为技术有限公司

摘要 :

一种基于NVMe的数据写入方法、装置和系统。该方法包括:主机触发写指令,并向NVMe控制器推送数据报文,该数据报文中携带载荷数据和关联标识,该关联标识用于关联载荷数据和主机触发的写指令;NVMe控制器接收到数据报文后,根据关联标识获取对应的写指令和载荷数据,并根据写指令将载荷数据写入存储介质。写指令中不再需要携带存储待写入数据的地址信息,主机可以随时向NVMe控制器推送数据报文,从而实现流水线操作,减少了待写入数据占用的存储空间和写操作的时延。

权利要求 :

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的数据写入方法、装置及系统

技术领域

[0001] 本申请涉及存储领域,尤其涉及一种基于非易失性高速传输总线(non‑volatile memory express,NVMe)的数据写入的方法、装置和存储设备。

背景技术

[0002] 随着存储技术的发展,尤其是在使用闪存(Flash)作为存储介质的固态硬盘(solid state drive,SSD)中,传统的机械硬盘设计的串行高级技术附件(serial 
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)接口之上,为企业级和消费级固态存储做了优化具有性能
高、访问时延低的优势。
[0003] NVMe基于成对的提交队列(英文全称:submission queue,缩写SQ)和完成队列(英文全称:completion queue,缩写:CQ)机制。命令由主机放到提交队列。完成信息由控制器
放到对应的完成队列。每个提交队列条目(submission queue entry,SQE)是一个命令,在
写指令中,用于数据传输的内存地址通过内存区域页(Physical Region Page,PRP)或散列
链(Scatter Gather List,SGL)进行指定。NVMe获取到写指令后,通过PCIe读操作从用于传
输数据的内存地址指示的存储空间内读取待写入数据,并写入存储介质。

发明内容

[0004] 本申请公开了一种基于NVMe的数据写入方法、装置和系统。主机直接向NMVe控制器推送数据报文,并在推送的数据报文中携带载荷数据和关联标识,关联标识用于关联载
荷数据与写指令。NVMe控制器接收到主机推送的数据报文后,根据关联标识确定于数据报
文关联的写指令,并根据写指令将数据报文中的载荷数据写入存储介质。
[0005] 第一方面,本申请公开了一种基于NVMe的数据写入系统,该系统包括主机、NVMe控制器和存储介质。其中,存储介质为非易失存储介质,用于存储主机数据。主机用于触发写
指令,并向NVMe控制器发送数据报文,该数据报文携带载荷数据和关联标识,关联标识用于
关联载荷数据和该写指令。NVMe控制器根据关联标识获取到有关联关系的载荷数据和写指
令后,根据写指令将载荷数据写入存储介质。
[0006] 其中,写指令可以具体为SQE,主机触发写指令的具体流程可以为主机将SQE写入SQ,并通过门铃通知NMVe控制器。主机向NVMe控制器发送数据报文具体为主机向NMVe控制
器主动推送该数据报文。更具体的,主机通过数据入口向NVMe控制器推送数据报文,入口地
址可以为NVMe控制器向主机开放的PCIe地址,主机通过该PCIe地址向NVMe控制器推送待写
入数据,即该数据报文为PCIe写报文,数据报文中携带该入口地址。主机通过数据报文主动
向NVMe控制器推送数据报文,在触发SQE之前,不需要提前将待写入数据完全存入PRP或SGL
指示的存储空间。本申请可以实现流水线操作,从而减少主机因准备待写入数据带来的时
延,且节省了用于完全存储待写入数据的存储空间,且SQE中不再需要PRP或SGL字段,减少
了对带宽的占用。
[0007] 根据第一方面,在第一方面第一种可能的实现方式中,该NVMe控制器包含内部存储器,NVMe控制器将载荷数据写入存储介质之前,还用于为载荷数据在内部存储器中分配
存储空间,将载荷数据存入分配的存储空间,并记录分配的存储空间与关联标识之间的映
射关系。
[0008] 该内部存储空间可以为NVMe控制器的私有内存,不再通过PCIe寻址的方式供主机访问,不是也不作为命令内存缓冲区(Command memory Buffer,CMB)。NVMe控制器接收到主
机推送的数据报文后,并没有将载荷数据写入入口地址指示的存储空间,而是在本地内部
存储空间为该入口分配对应的存储空间,使用内部存储器对载荷数据进行缓存。
[0009] 根据第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,NVMe控制器将其内部存储器组织成内存块的形式,该内部存储器包含多个内存块,NVMe控
制器还用于向主机提供内部存储器的内存块的数目和内存块的大小,该主机包含计数器,
计数器用于指示未被占用的内存块数量,主机向NVMe控制器发送数据报文后,还用于将计
数器的数值减少。
[0010] NMVe控制器可以通过配置信息等形式向主机开放其内部存储器中的内存块数量和大小,主机通过读取配置信息获取内存块数量和大小,并通过维护计数器来判断其可用
的存储块的数量,计数器的初始值可以为NVMe控制器的内存块的数量,随着数据推送逐渐
减少,当计数器为0时,主机不能再向NMVe控制器发送数据报文,从而避免了内存溢出,保证
了数据安全。
[0011] 根据第一方面第二种可能的实现方式,在第一方面第三种可能的实现方式中,NVMe控制器将载荷数据写入存储介质后,还用于触发内存块释放报告,内存块释放报告用
于指示NVMe控制器释放出内存块,主机获取内存释放报告后,还用于根据内存块释放报告
将计数器的数值增加。
[0012] NMVe控制器可以通过门铃触发内存释放报告,为了降低主机处理门铃的压力,NVMe控制器可以聚合多个门铃。主机获取内存释放报告后,根据NVMe控制器释放的内存块
的数目对计数器的数据进行增加。
[0013] 根据第一方面第三种可能的实现方式,在第一方面第四种可能的实现方式中,主机包含多个计数器,其中,每个计数器对应至少一个写指令,内存块释放报告中还包括关联
标识,主机还用于根据内存释放报告和关联标识,将写指令对应的计数器的数值增加。
[0014] 例如,主机可以根据写操作优先级的不同,将写操作分为多个层级,每个层级对应各自的计数器,不同层级对应的计数器表示该层级的写操作可用的未被占用的内存块的数
量。主机根据内存释放报告中的关联标识判断释放的内存块属于的层级,并对应的将该层
级的计数器的数值增加。主机也可以为单独的写指令或者SQ维护计数器,本发明不限定计
数器的具体实现。
[0015] 根据第一方面或第一方面以上任一种可能的实现方式,在第一方面第五种可能的实现方式中,该数据报文为PCIe报文,关联标识为PCIe报文的第一地址信息,NVMe控制器还
用于根据第一地址信息确定第二地址信息,并根据第二地址信息获取写指令,第二地址信
息用于指示写指令的存储位置。
[0016] 其中,该数据报文可以为事务层包(transaction layer packet,TLP),载荷数据可以为TLP中携带的负荷(payload),该关联标识可以为TLP的PCIe地址或者TLP的PCIe地址
的部分字段,即关联标识可以为写指令对应的入口地址或者入口地址的部分字段。第二地
址信息为写指令在SQ中存储的槽位的地址的全部或者部分字段。NVMe控制器维护有第一地
址信息和第二地址信息之间的映射关系。
[0017] 根据第一方面或第一方面以上任一种可能的实现方式,在第一方面第六种可能的实现方式中,关联标识包含写指令的部分字段,NVMe控制器还用于根据关联标识获取写指
令。
[0018] 例如,如果每个SQ中的SQE的命令标识是唯一的,关联标识可以为“队列ID+命令标识CID”;如果整个系统每个SQE的命令标识CID是唯一的,关联标识可以为SQE的命令标识
CID或者CID的部分字段。NVMe控制器可以根据关联标识便利SQ,寻找对应的SQE。
[0019] 根据第一方面以上任一种可能的实现方式,在第一方面第七种可能的实现方式中,NVMe控制器还用于根据写指令确定关联标识,并根据关联标识从分配的存储空间中获
取载荷数据。
[0020] 主机采用推送数据报文的形式向NMVe控制器发送载荷数据,数据有可能先于写指令到达NVMe控制器,NVMe控制器将接收到的数据存储自己的内存空间,并记录该内存空间
与关联标识的对应关系,获取到写指令后,NVMe控制器还可以根据写指令确定关联标识,并
根据关联标识查找存储的载荷数据。
[0021] 根据第一方面或第一方面以上任一种可能的实现方式,在第一方面第八种可能的实现方式中,NVMe控制器还用于根据接收数据报文的顺序确定载荷数据在待写入数据中的
顺序。
[0022] 因为每个数据报文可以携带的载荷数据的大小受限,主机可能将待写入数据分为多个数据报文传输,NVMe控制器在接收到数据报文后,需要对数据报文中携带的载荷数据
进行重新排序,如果主机发送数据报文的时候是按照载荷数据在待写入数据中的顺序严格
保序发送的,则NVMe控制器可以根据接收到数据报文的顺序对载荷数据进行排序。
[0023] 根据第一方面或第一方面以上任一种可能的实现方式,在第一方面第九种可能的实现方式中,数据报文还携带顺序标识,顺序标识用于指示载荷数据在待写入数据中的顺
序。
[0024] 该顺序标识可以为载荷数据在待写入数据中的偏移量,主机发送数据报文的时候在数据报文中携带载荷数据在待写入数据的偏移量,就可以实现对数据报文的乱序传输,
能够更大限度的利用带宽资源。
[0025] 第二方面,本申请公开了一种基于NVMe的数据写入方法,该方法包括:NVMe控制器接收主机发送的数据报文,该数据报文携带载荷数据和关联标识,关联标识用于关联载荷
数据和写指令,NVMe控制器获取写指令,并根据写指令将载荷数据写入存储介质。
[0026] 其中,写指令可以具体为SQE。该数据报文可以具体由主机推送至该NVMe控制器。根据本申请公开的技术方案,主机在触发SQE之前,不需要提前将待写入数据完全存入PRP
或SGL指示的存储空间。本申请可以通过流水线操作减少主机准备待写入数据的时延,且节
省了用于完全存储待写入数据的存储空间,且SQE中不再需要PRP或SGL字段,减少了对带宽
的占用。
[0027] 根据第二方面,在第二方面第一种可能的实现方式中,NVMe控制器包含内部存储器,NVMe控制器将载荷数据写入存储介质之前,该方法还包括:NVMe控制器为载荷数据在内
部存储器中分配存储空间,将载荷数据存入分配的存储空间,并记录分配的存储空间与关
联标识之间的映射关系。
[0028] 该内部存储空间可以为NVMe可以为NVMe控制器的私有内存,不再通过PCIe寻址的方式供主机访问,不是也不作为命令内存缓冲区。NMVe控制器将数据写入存储介质之前,可
以使用内存存储器对数据进行缓存。
[0029] 根据第二方面第一种可能的实现方式,在第二方面第二种可能的实现方式中,NVMe控制器将其内部存储器组织成内存块的形式,该内部存储器包含多个内存块,该方法
还包括:NVMe控制器向主机提供内部存储器的内存块的数目和内存块的大小。
[0030] NMVe控制器可以通过配置信息等形式向主机开放其内部存储器中的内存块数量和大小,主机通过读取配置信息获取内存块数量和大小,并通过维护计数器来判断其可用
的存储块的数量,当计数器为0时,主机不能再向NMVe控制器发送数据报文,从而避免了内
存溢出,保证了数据安全。
[0031] 根据第二方面第二种可能的实现方式,在第二方面第三种可能的实现方式中,NVMe控制器将载荷数据写入存储介质后,该方法还包括:NVMe控制器触发内存块释放报告,
内存块释放报告用于指示NVMe控制器释放出内存块。
[0032] NMVe控制器可以通过门铃触发内存释放报告,为了降低主机处理门铃的压力,NVMe控制器可以聚合多个门铃。主机获取内存释放报告后,根据NVMe控制器释放的内存块
的数目对计数器的数据进行增加。
[0033] 根据第二方面第三种可能的实现方式,在第二方面第四种可能的实现方式中,主机维护有对个计数器,每个计数器对应至少一个写指令,则内存块释放报告中还包括关联
标识,内存释放报告用于指示NVMe控制器释放出关联标识对应的写操作占用的内存块。
[0034] 例如,主机可以根据写操作优先级的不同,将写操作分为多个层级,每个层级对应各自的计数器,不同层级对应的计数器表示该层级的写操作可用的未被占用的内存块的数
量。主机根据内存释放报告中的关联标识判断释放的内存块属于的层级,并对应的将该层
级的计数器的数值增加。主机也可以为单独的写指令或者SQ维护计数器,本发明不限定计
数器的具体实现。
[0035] 根据第二方面或第二方面以上任一种可能的实现方式,在第二方面第五种可能的实现方式中,该数据报文为PCIe报文,关联标识为PCIe报文的第一地址信息,该方法还包
括:NVMe控制器根据第一地址信息确定第二地址信息,并根据第二地址信息获取写指令,第
二地址信息用于指示写指令的存储位置。
[0036] 其中,该数据报文可以为事务层包(transaction layer packet,TLP),载荷数据可以为TLP中携带的负荷(payload),该关联标识可以为TLP的PCIe地址或者TLP的PCIe地址
的全部或部分字段。第二地址信息为写指令在SQ中存储的槽位的地址的全部或者部分字
段。NVMe控制器维护有第一地址信息和第二地址信息之间的映射关系。
[0037] 根据第二方面或第二方面以上任一种可能的实现方式,在第二方面第六种可能的实现方式中,关联标识包含写指令的部分字段,该方法还包括:NVMe控制器根据关联标识获
取写指令。
[0038] 例如,如果每个SQ中的SQE的命令标识是唯一的,关联标识可以为“队列ID+命令标识CID”;如果整个系统每个SQE的命令标识CID是唯一的,关联标识可以为SQE的命令标识
CID或者CID的部分字段。NVMe控制器可以根据关联标识便利SQ,寻找对应的SQE。
[0039] 根据第二方面以上任一种可能的实现方式,在第二方面第七种可能的实现方式中,该方法还包括:NVMe控制器根据写指令确定关联标识,并根据关联标识从分配的存储空
间中获取载荷数据。
[0040] 主机采用推送数据报文的形式向NMVe控制器发送载荷数据,数据有可能先于写指令到达NVMe控制器,NVMe控制器将接收到的数据存储自己的内存空间,并记录该内存空间
与关联标识的对应关系,获取到写指令后,NVMe控制器还可以根据写指令确定关联标识,并
根据关联标识查找存储的载荷数据。
[0041] 根据第二方面或第二方面以上任一种可能的实现方式,在第二方面第八种可能的实现方式中,该方法还包括:NVMe控制器根据接收数据报文的顺序确定载荷数据在待写入
数据中的顺序。
[0042] 因为每个数据报文可以携带的载荷数据的大小受限,主机需要将待写入数据分为多个数据报文传输,NVMe控制器在接收到数据报文后,需要对数据报文中携带的载荷数据
进行重新排序,如果主机发送数据报文的时候是按照载荷数据在待写入数据中的顺序严格
保序发送的,则NVMe控制器可以根据接收到数据报文的顺序对载荷数据进行排序。
[0043] 根据第二方面或第二方面以上任一种可能的实现方式,在第二方面第九种可能的实现方式中,数据报文还携带顺序标识,顺序标识用于指示载荷数据在待写入数据中的顺
序。
[0044] 该顺序标识可以为载荷数据在待写入数据中的偏移量,主机发送数据报文的时候在数据报文中携带载荷数据在待写入数据的偏移量,就可以实现乱序传输,能够更大限度
的利用带宽资源。
[0045] 第三方面,本申请提供了一种可读介质,包括执行指令,当计算设备的处理器执行该执行指令时,该计算设备执行以上第二方面或以上第二方面的任一种可能的实现方式中
的方法。
[0046] 第四方面,本申请提供了一种计算设备,包括:处理器、存储器和总线;存储器用于存储执行指令,处理器与存储器通过总线连接,当计算设备运行时,处理器执行存储器存储
的执行指令,以使计算设备执行以上第二方面或以上第二方面的任一种可能的实现方式中
的方法。
[0047] 第五方面,本申请公开了一种基于NVMe的数据写入方法,该方法包括:主机触发写指令,并向NVMe控制器发送数据报文,数据报文携带载荷数据和关联标识,关联标识用于关
联载荷数据和写指令。
[0048] 其中,写指令可以具体为SQE,主机触发写指令的具体流程可以为主机将SQE写入SQ,并通过门铃通知NMVe控制器。主机向NVMe控制器发送数据报文具体为主机向NMVe控制
器主动推送该数据报文。主机通过向NMVe控制器主动推送数据报文,并通过数据报文中携
带的关联标识关联载荷数据和写指令,从而实现对数据的写入。根据本申请公开的技术方
案,主机在触发SQE之前,不需要提前将待写入数据完全存入PRP或SGL指示的存储空间。本
申请可以通过流水线操作减少主机准备待写入数据的时延,且节省了用于完全存储待写入
数据的存储空间,且SQE中不再需要PRP或SGL字段,减少了对带宽的占用。
[0049] 根据第五方面,在第五方面第一种可能的实现方式中,数据报文为PCIe报文,关联标识为PCIe报文的第一地址信息,第一地址信息和第二地址信息之间存在映射关系,第二
地址信息用于指示写指令的存储位置。
[0050] 其中,该数据报文可以为事务层包(transaction layer packet,TLP),载荷数据可以为TLP中携带的负荷(payload),该关联标识可以为TLP的PCIe地址或者TLP的PCIe地址
的全部或部分字段。第二地址信息为写指令在SQ中存储的槽位的地址的全部或者部分字
段。NVMe控制器维护有第一地址信息和第二地址信息之间的映射关系。
[0051] 根据第五方面,在第五方面第二种可能的实现方式中,关联标识包含写指令的部分字段,关联标识用于唯一的确定写指令。
[0052] 例如,如果每个SQ中的SQE的命令标识是唯一的,关联标识可以为“队列ID+命令标识CID”;如果整个系统每个SQE的命令标识CID是唯一的,关联标识可以为SQE的命令标识
CID或者CID的部分字段。NVMe控制器可以根据关联标识便利SQ,寻找对应的SQE。
[0053] 根据第五方面或第五方面以上任一种可能的实现方式,在第一方面第三种可能的实现方式中,该方法还包括:主机获取NVMe控制器的内部存储器的内存块的数目和内存块
的大小,内存块用于存储主机发送的数据。
[0054] NVMe控制器将其内部存储器组织成内存块的形式,该内部存储器包含多个内存块,NMVe控制器可以通过配置信息等形式向主机开放其内部存储器中的内存块数量和大
小,主机通过读取配置信息获取内存块数量和大小。
[0055] 根据第五方面第三种可能的实现方式,在第五方面第四种可能的实现方式中,主机还包含计数器,计数器用于指示NVMe控制器的内存存储器中未被占用的内存块数量,主
机向NVMe控制器发送数据报文后,该方法还包括:主机将计数器的数值减少。
[0056] 主机通过维护计数器来判断其可用的存储块的数量,当计数器为0时,主机不能再向NMVe控制器发送数据报文,从而避免了内存溢出,保证了数据安全。
[0057] 根据第五方面第四种可能的实现方式,在第五方面第五种可能的实现方式中,该方法还包括:主机获取NVMe控制器触发的内存块释放报告,内存块释放报告用于指示NVMe
控制器释放出内存块,主机根据内存块释放报告将计数器的数值增加。
[0058] NMVe控制器可以通过门铃触发内存释放报告,为了降低主机处理门铃的压力,NVMe控制器可以聚合多个门铃。主机获取内存释放报告后,根据NVMe控制器释放的内存块
的数目对计数器的数据进行增加。
[0059] 根据第五方面第五种可能的实现方式,在第五方面第六种可能的实现方式中,主机包含多个计数器,其中,每个计数器对应至少一个写指令,内存块释放报告中还包括关联
标识,该方法还包括:主机根据内存释放报告和关联标识,将写指令对应的计数器的数值增
加。
[0060] 例如,主机可以根据写操作优先级的不同,将写操作分为多个层级,每个层级对应各自的计数器,不同层级对应的计数器表示该层级的写操作可用的未被占用的内存块的数
量。主机根据内存释放报告中的关联标识判断释放的内存块属于的层级,并对应的将该层
级的计数器的数值增加。主机也可以为单独的写指令或者SQ维护计数器,本发明不限定计
数器的具体实现。
[0061] 第六方面,本申请提供了一种可读介质,包括执行指令,当计算设备的处理器执行该执行指令时,该计算设备执行以上第五方面或以上第五方面的任一种可能的实现方式中
的方法。
[0062] 第七方面,本申请提供了一种计算设备,包括:处理器、存储器和总线;存储器用于存储执行指令,处理器与存储器通过总线连接,当计算设备运行时,处理器执行存储器存储
的执行指令,以使计算设备执行以上第五方面或以上第五方面的任一种可能的实现方式中
的方法。
[0063] 第八方面,本申请公开了一种基于NVMe的数据写入装置,该装置包括:接收单元,用于接收主机发送的数据报文,数据报文携带载荷数据和关联标识,关联标识用于关联载
荷数据和写指令;处理单元,用于获取写指令,并根据写指令将载荷数据写入存储介质。
[0064] 根据第八方面,在第八方面第一种可能的实现方式中,该装置还包含内部存储器,处理单元将载荷数据写入存储介质之前,还用于为载荷数据在内部存储器中分配存储空
间,将载荷数据存入分配的存储空间,并记录分配的存储空间与关联标识之间的映射关系。
[0065] 根据第八方面第一种可能的实现方式,在第八方面第二种可能的实现方式中,该内部存储器包含多个内存块;处理单元还用于向主机提供内部存储器的内存块的数目和内
存块的大小。
[0066] 根据第八方面第二种可能的实现方式,在第八方面第三种可能的实现方式中,处理单元将载荷数据写入存储介质后,还用于触发内存块释放报告,内存块释放报告用于指
示装置释放出内存块。
[0067] 根据第八方面第三种可能的实现方式,在第八方面第四种可能的实现方式中,内存块释放报告中还包括关联标识,内存释放报告用于指示装置释放出关联标识对应的写操
作占用的内存块。
[0068] 根据第八方面或第八方面以上任一种可能的实现方式,在第八方面第五种可能的实现方式中,数据报文为PCIe报文,关联标识为PCIe报文的第一地址信息;处理单元还用于
根据第一地址信息确定第二地址信息,并根据第二地址信息获取写指令,第二地址信息用
于指示写指令的存储位置。
[0069] 根据第八方面或第八方面以上任一种可能的实现方式,在第八方面第六种可能的实现方式中,关联标识包含写指令的部分字段;处理单元还用于根据关联标识获取写指令。
[0070] 根据第八方面以上任一种可能的实现方式,在第八方面第七种可能的实现方式中,处理单元还用于根据写指令确定关联标识,并根据关联标识从分配的存储空间中获取
载荷数据。
[0071] 根据第八方面或第八方面以上任一种可能的实现方式,在第八方面第八种可能的实现方式中,该处理单元还用于根据接收数据报文的顺序确定载荷数据在待写入数据中的
顺序。
[0072] 根据第八方面或第八方面以上任一种可能的实现方式,在第八方面第九种可能的实现方式中,数据报文还携带顺序标识,顺序标识用于指示载荷数据在待写入数据中的顺
序。
[0073] 第八方面为第二方面方法对应的装置实现方式,第二方面或第二方面任一种可能的实现方式中的描述对应适用于第八方面或第八方面任一种可能的实现方式,在此不再赘
述。
[0074] 第九方面,本申请公开了一种基于NVMe的数据写入装置,该装置包括:处理单元,用于触发写指令,并向NVMe控制器发送数据报文,数据报文携带载荷数据和关联标识,关联
标识用于关联载荷数据和写指令。
[0075] 根据第九方面,在第九方面第一种可能的实现方式中,该数据报文为PCIe报文,关联标识为PCIe报文的第一地址信息,第一地址信息和第二地址信息之间存在映射关系,第
二地址信息用于指示写指令的存储位置。
[0076] 根据第九方面,在第九方面第二种可能的实现方式中,关联标识包含写指令的部分字段,关联标识用于唯一的确定写指令。
[0077] 根据第九方面或第九方面以上任一种可能的实现方式,在第一方面第三种可能的实现方式中,处理单元还用于获取NVMe控制器的内部存储器的内存块的数目和内存块的大
小,内存块用于存储装置发送的数据。
[0078] 根据第九方面第三种可能的实现方式,在第九方面第四种可能的实现方式中,该装置还包含计数器,计数器用于指示NVMe控制器的内存存储器中未被占用的内存块数量;
处理单元向NVMe控制器发送数据报文后,还用于将计数器的数值减少。
[0079] 根据第九方面第四种可能的实现方式,在第九方面第五种可能的实现方式中,处理单元还用于获取NVMe控制器触发的内存块释放报告,并根据内存块释放报告将计数器的
数值增加,内存块释放报告用于指示NVMe控制器释放出内存块。
[0080] 根据第九方面第五种可能的实现方式,在第九方面第六种可能的实现方式中,装置包含多个计数器,其中,每个计数器对应至少一个写指令;内存块释放报告中还包括关联
标识;处理单元用于根据内存释放报告和关联标识,将写指令对应的计数器的数值增加。
[0081] 第九方面为第五方面方法对应的装置实现方式,第五方面或第五方面任一种可能的实现方式中的描述对应适用于第九方面或第九方面任一种可能的实现方式,在此不再赘
述。
[0082] 根据本发明实施例公开的技术方案,在进行基于NVMe的写操作时,主机主动将待写入数据通过数据报文的形式推送给NVMe控制器,并在报文中携带关联标识,用于关联待
写入数据与写指令SQE,不需要在SQE中携带数据存储的位置信息,主机在发出SQE之前不再
需要将数据完全准备好,从而减少了写操作的时延,并减少了主机存储待写入数据的存储
空间。另外,SQE中可以不再携带待写入数据的地址信息,减小了总线负载。

附图说明

[0083] 图1为依据本申请一实施例的NVMe系统的逻辑结构示意图;
[0084] 图2为一种基于NVMe标准的数据写入方法的信令图;
[0085] 图3为依据本申请一实施例的NVMe控制器的硬件结构示意图;
[0086] 图4为依据本申请一实施例的主机的硬件结构示意图;
[0087] 图5为依据本申请一实施例的基于NMVe的数据写入方法的流程示意图。
[0088] 图6为依据本发明一实施例的入口组织结构示意图;
[0089] 图7为依据本发明一实施例的入口组织结构示意图;
[0090] 图8为依据本发明一实施例的PCIe地址结构示意图;
[0091] 图9为依据本发明一实施例的数据存储结构示意图;
[0092] 图10为依据本发明一实施例的基于NVMe的数据写入方法的信令图;
[0093] 图11(a)为依据本申请一实施例的NVMe系统的逻辑结构示意图;
[0094] 图11(b)为依据本申请一实施例的NVMe系统的逻辑结构示意图;
[0095] 图12为依据本申请一实施例的NVMe控制器的逻辑结构示意图;
[0096] 图13为依据本申请一实施例的计算设备的逻辑结构示意图。

具体实施方式

[0097] 下面将结合附图,对本发明实施例进行描述。
[0098] 本发明实施例采用术语第一和第二等来区分各个对象,例如第一地址和第二地址等,但各个“第一”和“第二”之间不具有逻辑或时序上的依赖关系。
[0099] 在本发明实施例中,“数据报文”是指主机向NVMe控制器发送的携带载荷数据的数据包,载荷数据属于待写入数据。此处的待写入数据可以是用户数据或者用户数据的元数
据,本发明实施例不限定数据报文中携带的数据的类型。在以下描述中,除非另有说明,本
发明实施例使用“数据”一词来表示数据报文中携带的各类数据。
[0100] 在本发明实施例中,推送一词是指主机主动向NVMe控制器发送数据报文。
[0101] 在本发明实施例中,入口为NVMe控制器向主机开放的地址空间,入口地址可以具体为PCIe地址,数据报文可以为PCIe写报文。主机通过入口向NVMe控制器推送数据报文,数
据报文中携带入口地址。NMVe控制器接收到数据报文后,识别入口地址,在本地的内部存储
器中为该入口分配对应的存储空间,并将数据报文携带的载荷数据写入分配的存储空间进
行缓存,而不是将载荷数据写入入口地址指示的存储空间。内部存储器可以具体为NVMe控
制器的私有内存空间。
[0102] 在本发明实施例总,数据报文中携带的关联标识用于关联载荷数据和写指令。关联标识可以具体为入口地址或者入口地址的部分字段。
[0103] 在本发明实施例中,写操作可以为NVMe命令集中主机向NVMe控制器传输数据的任何操作。指示写操作的指令为写指令。写指令的具体实现方式可以为SQE。
[0104] 在本发明实施例中,命令发起者为直接向NVMe控制器提交待执行指令的系统主体,在本发明实施例中也称为命令源。数据发起者为产生数据并发起数据传输的系统主体,
在本发明实施例中也称为数据源。在本发明实施例中,命令发起者和数据发起者可以是相
同或者相互分离的主体。“主机”一词可以指代数据源与命令源分离场景下的命令源或者二
者未分离场景下与NMVe控制器通信的计算设备。
[0105] 在传统方式中,在进行NVMe写操作时,写指令通过PRP或SGL携带待写入数据的地址信息,NVMe控制器获取写指令后,根据该地址信息获取待写入数据,然后将待写入数据写
入存储介质中。基于以上机制,主机在触发写指令前,需要提前将数据存储于控制器可访问
的存储区域,即该技术需要将写命令对应的数据全部存入到控制器可寻址的存储区域后才
能触发写命令到提交队列。
[0106] 图1为依据本发明一实施例的NVMe系统100的架构图,如图1所示,系统100中数据源101和命令源103不是同一主体,二者相互分离,通过网络102互联。命令源103可以通过
PCIe总线与NVMe控制器105互联,NVMe控制器105连接有存储介质106。
[0107] 在本发明实施例中,存储介质106一般为非易失存储介质,用于永久存储数据。存储介质106可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如光盘)、或者半导体介质
(例如闪存(Flash)等,本发明实施例不限定存储介质106的具体实现形式。在一些实施例
中,存储介质106还可能进一步包括与NVMe控制器105分离的远程存储器,例如通过网络与
NVMe控制器105互联的存储介质。
[0108] 在本发明实施例中,网络102可以用于指代数据源101与命令源103互联的任意方式或互联协议等,例如可以为PCIe总线,计算机设备内部互联总线,因特网,内联网(英文:
intranet),局域网(英文全称:local area network,缩写:LAN),广域网络(英文全称:wide 
area network,缩写:WAN),存储区域网络(英文全称:storage area network,缩写:SAN)
等,或者以上网络的任意组合。本发明实施例不限定网络102的具体实现形式。
[0109] 在系统100中,数据源101与NVMe控制器105需要经过命令源103进行通信。基于现有的NVMe标准,命令源103触发的写指令需要携带待写入数据的地址信息,当进行写操作
时,数据源101需要首先将待写入数据从数据源101完全转移至命令源103,存入NVMe控制器
105可PCIe寻址的存储空间后,命令源103才可以触发写指令。
[0110] 具体如图2所示,基于传统方式,当数据源需要将数据写入存储介质时,数据源首先向命令源发送写请求,并根据反馈信号将待写入数据转移至命令源。命令源等待待写入
数据完全存入NVMe控制器可寻址的存储空间后,向提交队列写入SQE,SQE的PRP或SGL字段
携带有待写入数据的地址信息。命令源随后通过门铃机制通知NVMe控制器有新的SQE,NVMe
控制器接收到门铃后,去SQ中读取该SQE,并根据SQE中携带的地址信息使用PCIe读指令读
取待写入数据,然后将待写入数据写入存储介质。在写操作完成后,NVMe控制器向完成队列
写入完成队列条目,并通过中断机制通知命令源,命令源处理中断,获取CQE,并向数据源反
馈写完成。
[0111] 由图2可知,在命令源发起写指令前,需要将待写入数据完全从数据源完全搬移至NVMe控制器可寻址的地址空间,这一过程的延迟与待写入数据的大小成正比。此外,命令源
需要大量的存储空间存储待写入数据,且从命令源为待写入数据分配存储空间至获取到
NVMe控制器CQE释放存储空间之间的时间段,写操作会一直占用这一部分存储空间。
[0112] 图3为依据本申请一实施例的NVMe控制器300的结构示意图。
[0113] 如图3所示,NVMe控制器300包括处理器301,处理器301与系统内存302连接。处理器301可以为中央处理器(CPU),图像处理器(英文:graphics processing unit,GPU),现场
可编程门阵列(英文全称:Field Programmable Gate Array,缩写:FPGA),专用集成电路
(英文全称:Application Specific Integrated Circuit,缩写:ASIC)或数字信号处理器
(英文:digital signal processor,DSP)等计算逻辑或以上任意计算逻辑的组合。处理器
301可以为单核处理器或多核处理器。
[0114] 在本发明实施例中,处理器301内部还可以包含寄存器,该寄存器可以开放给主机访问。更具体的,该寄存器可以作为PCIe地址空间开放给主机,供主机通过PCIe地址进行访
问。
[0115] 在本申请的一个实施例中,处理器301还可以包括写操作逻辑305,写操作逻辑305可以为具体的硬件电路或集成在处理器301中的固件模块。如果写操作逻辑305为具体的硬
件电路,则写操作逻辑305执行本申请实施例的方法,如果写操作逻辑305为固件模块,则处
理器301执行写操作逻辑305中的固件代码来实现本申请实施例的技术方案。写操作逻辑
305包括:(1)用于接收主机发送的数据报文的逻辑(电路/固件代码),数据报文携带载荷数
据和关联标识,关联标识用于关联载荷数据和写指令;(2)用于获取写指令的逻辑(电路/固
件代码);(3)用于根据写指令,将载荷数据写入存储介质的逻辑(电路/固件代码)。
[0116] 总线307用于在NVMe控制器300的各部件之间传递信息,总线307可以使用有线的连接方式或采用无线的连接方式,本申请并不对此进行限定。总线307还可以连接有通信接
口303。
[0117] 通信接口303用来实现与其他设备或网络之间的通信,通信接口303可以通过有线或者无线的形式与其他设备或网络互联。例如,NVMe控制器300通过通信接口303与主机和
存储介质互联,NVMe控制器300也可以通过通信接口303连接网络,并通过网络与主机或存
储介质互联。
[0118] 本申请实施例的一些特征可以由处理器301执行系统内存302中的软件代码来完成/支持。系统内存302可以包括一些软件,例如,操作系统304(例如Darwin、RTXC、LINUX、
UNIX、OS X、WINDOWS、macOS或嵌入式操作系统(例如Vxworks))和写操作模块306等。
[0119] 在本申请的一个实施例中,处理器301执行写操作模块306来实现本申请实施例的技术方案。写操作模块306包括:(1)用于接收主机发送的数据报文的代码,数据报文携带载
荷数据和关联标识,关联标识用于关联载荷数据和写指令;(2)用于获取写指令的命令日
志,并存储写事务的命令日志的代码;(3)用于根据写指令,将载荷数据写入存储介质的代
码。
[0120] 此外,图3仅仅是一个NVMe控制器300的例子,NVMe控制器300可能包含相比于图3展示的更多或者更少的组件,或者有不同的组件配置方式。同时,图3中展示的各种组件可
以用硬件、软件或者硬件与软件的结合方式实施。
[0121] 图4为依据本申请一实施例的主机400的结构示意图。
[0122] 如图4所示,主机400包括处理器401,处理器401与系统内存402连接。处理器401可以CPU,GPU,FPGA,ASIC或DSP等计算逻辑或以上任意计算逻辑的组合。处理器401可以为单
核处理器或多核处理器。
[0123] 在本申请的一个实施例中,处理器401还可以包括写操作逻辑410,写操作逻辑410可以为具体的硬件电路或集成在处理器401中的固件模块。如果写操作逻辑410为具体的硬
件电路,则写操作逻辑410执行本申请实施例的方法,如果写操作逻辑410为固件模块,则处
理器410执行写操作逻辑410中的固件代码来实现本申请实施例的技术方案。写操作逻辑
410包括:(1)用于触发写指令的逻辑(电路/固件代码);(2)用于向NVMe控制器发送数据报
文的逻辑(电路/固件代码),数据报文携带载荷数据和关联标识,关联标识用于关联载荷数
据和写指令。
[0124] 总线409用于在主机400的各部件之间传递信息,总线409可以使用有线的连接方式或采用无线的连接方式,本申请并不对此进行限定。总线409还连接有输入/输出接口405
和通信接口403。
[0125] 输入/输出接口405连接有输入/输出设备,用于接收输入的信息,输出操作结果。输入/输出设备可以为鼠标、键盘、显示器、或者光驱等。
[0126] 通信接口403用来实现与其他设备或网络之间的通信,通信接口403可以通过有线或者无线的形式与其他设备或网络互联。例如,主机400可以通过通信接口403与NVMe控制
器互联,主机400还可以通过通信接口403与网络互联,并通过网络连接NVMe控制器。
[0127] 本申请实施例的一些特征可以由处理器401执行系统内存402中的软件代码来完成/支持。系统内存402可以包括一些软件,例如,操作系统408(例如Darwin、RTXC、LINUX、
UNIX、OS X、WINDOWS或嵌入式操作系统(例如Vxworks)),应用程序407,和写操作模块406
等。
[0128] 在本申请的一个实施例中,处理器401执行写操作模块406来实现本申请实施例的技术方案。写操作模块406包括:(1)用于触发写指令的代码;(2)用于向NVMe控制器发送数
据报文的代码,数据报文携带载荷数据和关联标识,关联标识用于关联数据报文和写指令。
[0129] 此外,图4仅仅是一个主机400的例子,主机400可能包含相比于图4展示的更多或者更少的组件,或者有不同的组件配置方式。同时,图4中展示的各种组件可以用硬件、软件
或者硬件与软件的结合方式实施。
[0130] 为了降低写指令的延迟和节省写操作占用的内存空间,本发明实施例提供了一种基于NVMe的数据写入方法,如图5所示,方法500包括:
[0131] 步骤501:NVMe控制器接收主机发送的数据报文,该数据报文携带载荷数据和关联标识。
[0132] 主机向NVMe控制器发送数据报文可以具体为主机向NMVe控制器主动推送该数据报文。载荷数据属于待写入数据。因为数据报文携带的载荷数据的大小受限,主机可以将待
写入数据分为多个数据报文推送至NVMe控制器。
[0133] 其中,数据报文中携带的关联标识用于关联数据报文和写指令,更具体的,关联标识用于关联数据报文中的载荷数据和载荷数据对应的写指令。其中,写指令为数据报文携
带的载荷数据对应的写指令。
[0134] 本发明实施例不限定关联标识的具体实现方式,关联标识可以具体用于指示载荷数据对应的写指令,关联标识可以直接或间接的指示数据报文中携带的载荷数据对应的写
指令。
[0135] 在传统方式中,主机通过SQE的PRP或SGL字段指示待存储数据的地址信息,NVMe控制器根据该地址信息通过PCIe读操作读取待存储数据。在本发明实施例中,主机直接向
NVMe控制器推送数据报文,数据报文中携带载荷数据。
[0136] 在本发明实施例中,数据报文可以为PCIe写操作报文,更具体的,数据报文可以是事务层包,载荷数据可以为TLP中携带的负荷(payload),该关联标识可以为TLP的PCIe地址
或者PCIe地址的部分字段。
[0137] 步骤502:NVMe控制器获取写指令。
[0138] 在本发明实施例中,写指令可以具体为SQE,在以下描述中,以写指令为SQE进行举例说明,但应理解,本发明实施例并不限定写指令的具体实现形式。
[0139] 在本发明实施例中,主机向NVMe控制器触发写指令的流程可以参照NMVe标准,具体为,主机将SQE写入SQ,并通过门铃通知NVMe控制器有新的SQE,NVMe控制器根据门铃去SQ
获取SQE。本发明实施例不限定主机向NVMe控制器触发读指令的具体流程,例如主机还可以
直接向NVMe控制器推送SQE。
[0140] 本发明实施例中的SQE的格式可以与NVMe标准规定的一致,但因为本发明实施例通过关联标识关联了载荷数据和写指令,且数据报文由主机主动推送至NVMe控制器,不再
需要NVMe控制器主动通过PCIe读操作去获取载荷数据,所以SQE中不需要再通过SGL域或者
PRP域携带待写入数据的地址信息。NVMe控制器可以根据SQE和数据的关联方法来处理SQE
中的SGL域或者PRP域,如果在具体实现中SGL域或者PRP域中不携带其他信息,则NVMe控制
器对SGL域或者PRP域的处理方法可以为“忽略”,即本发明实施例可以省略SGL或者PRP。
[0141] 步骤503:NVMe控制器根据写指令将载荷数据写入存储介质。
[0142] 在本发明实施例中,NVMe控制器通过数据报文中携带的关联标识关联载荷数据和写指令。NVMe控制器获取到数据报文和写指令后,根据写指令将载荷数据写入存储介质。此
处的存储介质一般为非易失存储介质。
[0143] 在本发明实施例中,数据报文可以具体为PCIe写报文,主机向NVMe控制器推送数据报文可以为主机通过PCIe写报文向NVMe控制器写入载荷数据。
[0144] 在本发明实施例中,NVMe控制器将其一部分存储空间开放给主机,更具体的,开放的存储空间可以作为主机的PCIe地址空间,主机通过PCIe地址访问这部分向主机开放的地
址空间。以基地址寄存器举例说明,NVM控制器可以将基地址寄存器的一部分PCIe地址组织
成多个入口(portal)的形式,每一个入口占据特定的主机可寻址的PCIe地址空间。入口即
主机向NVMe控制器进行PCIe写操作的数据入口,在下面的描述中,会对入口的功能进行更
详细的描述。主机向NVMe控制器推送的数据报文为PCIe写报文,主机通过将与写命令关联
的数据通过入口写入到NVMe控制器,PCIe写报文的地址段指示写操作对应的入口,即入口
地址可以为数据报文中PCIe地址或者PCIe地址的部分字段。
[0145] 关联标识可以为入口地址或者入口地址的部分字段,本发明不限定PCIe地址空间里的入口的组织方式,只需要保证每个入口和具体的写操作唯一对应。每个入口唯一地关
联到具体的写操作。“唯一”是指主机在任一时刻只能发起一个NVMe写操作关联到一个特定
的入口。
[0146] NVMe控制器可以将基地址寄存器的一部分PCIe地址组织成通孔(aperture)的形式,每一个通孔中包含多个入口,即入口的组织可以用数组的形式,通过数组基地址加入口
偏移量寻址到入口,这个数组称为通孔。图6为基地址寄存器的结构示意图,如图6所示,每
个通孔由一组入口P 0~P N组成
[0147] 更具体的,如图7所示,在本发明实施例中,通孔可以分为元数据通孔和数据通孔。主机通过PCIe写操作将数据推送到数据通孔包含的入口DP 0~DP N,将元数据推送到元数
据通孔包含的入口MP 0~MP N。为了描述方便,在以下描述中,除非另有说明,本发明实施
例将元数据和数据统称为数据。
[0148] 在本发明实施例中,关联标识可以用于指示具体的入口,例如,关联标识可以为具体的入口的地址信息,NVMe控制器维护有入口与SQE的对应关系,可以根据关联标识唯一的
确定一个入口,进而确定与该入口关联的SQE。
[0149] 图8为依据本发明一实施例的PCIe数据报文中的PCIe地址结构。如图8所示,PCIe地址结构中包含BAR的基地址、通孔偏移量以及入口偏移量。其中,BAR和通孔偏移量用于唯
一的确定通孔,入口偏移量用于指示该通孔中具体的入口。
[0150] 在本发明实施例中,入口还可以任意分布在PCIe地址空间,在PCIe空间中任意分布的入口称为任意的“数据入口”和“元数据入口”。
[0151] 在本发明实施例中,数据由主机通过PCIe BAR空间的通孔“推送”到NVMe控制器。“推送”指的是主机发起的PCIe写事务。与NVMe写指令关联的数据通过入口写入到NVMe控制
器。
[0152] 在本发明实施例中,入口用于接收数据报文,是主机向NVMe控制器进行PCIe写操作的入口,但NVMe控制器接收到数据报文后,用于存储数据报文中数据的内存可以是NVMe
控制器的内部存储器,而不是将载荷数据存入入口地址指示的存储空间。NVMe控制器为每
个入口在自己的内部内存中分配具体的存储块,用于存储该入口接收到的数据报文中携带
的数据。为了便于数据管理和查询,VNMe控制器可以建立存储块与入口的映射关系,在接收
到数据报文后,会根据关联标识的指示将载荷数据存入对应的存储块。
[0153] NVMe控制器用于存储数据的内部存储器可以不再通过PCIe寻址的方式供主机访问,不是也不作为命令内存缓冲区,本发明实施例不限定用于存储数据的内存的具体实现
方式。
[0154] 可选的,NVMe控制器可以使用根数据结构对从入口接收的数据进行组织,如图9所示,NVMe控制器接收到数据报文后,可以将数据组织成根数据结构,以方便数据的管理。
[0155] 在本发明实施例中,NVMe控制器接收到数据报文后,解码数据报文的地址并识别关联标识,根据关联标识识别入口和根数据结构,从内存存储器中为数据分配空闲的内存
块,并将数据保存至分配的内存块,将内存块附到根数据结构。NVMe控制器首先将数据存储
在自己的内部存储器中,在满足一定的条件时,将自己的内部存储器中存储的数据存储至
存储介质。此处的满足条件可以为NVMe控制器接收到了对应的写指令,或者数据量积累到
NMVe控制器可以对存储介质进行一次写操作的程度。NVMe控制器的内部存储器可以为NVMe
控制器的私有内存。
[0156] 在本发明实施例中,如果将入口组织成数组的形式,即入口连续,入口偏移量可以设置为从0递增到MSP‑1的数值。其中MSP表示通孔支持的最大入口数。数据偏移量根据具体
实现方式的不同而不同,在下文会有详细描述。主机通过在TLP中地址字段的BAR,通孔偏移
量和入口偏移量唯一的确定数据写入的入口。同理,NVMe控制器通过对TLP中地址字段的解
析,通过BAR,通孔偏移量和入口偏移量唯一的确定数据对应的入口。
[0157] 在本发明实施例中,数据报文可以为PCIe报文,关联标识为PCIe报文的第一地址信息,NVMe控制器还用于根据第一地址信息确定第二地址信息,并根据第二地址信息获取
写指令,第二地址信息用于指示写指令的存储位置。该第一地址信息可以为数据报文的入
口地址或入口地址的部分字段,即关联标识可以为入口地址或者入口地址的部分字段。第
二地址信息可以具体为读指令在提交队列的存储的槽位地址。
[0158] 以写指令为SQE进行举例说明,在本发明实施例的一种可选的实现方式中,主机和控制器可以维护有入口与SQ中槽位的对应关系,SQ槽位与入口数目相同且一一对应。主机
通过入口与SQ中槽位的对应关系,将SQE和SQE对应的数据分别写入相互对应的SQ槽位和入
口。控制器根据SQ槽位与入口的对应关系,可以确定SQE与数据的对应关系,并根据SQE将数
据写入存储介质。
[0159] 本发明实施例中,可以使用存储SQE的SQ槽位将入口与写指令关联起来,通过SQ槽位确定入口对应的写指令,但本发明实施例不限定写指令与入口之间进行关联的具体实现
方式。
[0160] 在本发明实施例的其他实现方式中,关联标识还可以包含写指令的部分字段,NVMe控制器根据关联标识获取写指令。具体的,关联标识可以为具体SQE的指示信息,用于
唯一的确定一个SQE。主机还可以通过在数据报文中携带SQE的指示信息,从而直接实现SQE
与入口的关联,而不是通过SQ槽位实现间接的关联。例如,如果一个SQ中的每个SQE有各自
独特的命令标识CID,则关联标识可以由“队列ID+CID”组成。如果在NVMe控制器所处理的每
个SQE的CID都是唯一的,则关联标识可以为对应SQE携带的CID。在其他实现方式中,关联标
识还可以为CID的一部分。在本发明实施例中,关联标识还可以使用特别定义的SGL类型或
者SGL子类型或者SQE中其他字段指定。本发明实施例不限定关联标识的具体实现方式。
[0161] 在本发明实施例中,系统可以同时支持基于入口的数据传递方式和传统的数据传输方式,例如,主机可以使用CID中的一个或者多个比特来指示与写指令关联的数据是使用
基于入口的传递方式进行传递还是基于传统的数据传输方式进行传递。
[0162] 在本发明实施例中,NVMe控制器可以根据关联标识从提交队列SQ中获取写指令。NVMe控制器也可以通过基于入口的形式接收主机推送的写指令。本发明实施例对NVMe控制
器获取写指令的形式不进行限定。
[0163] 本发明实施例不限定NVMe控制器获取数据报文和写指令的顺序,NVMe控制器可以先接收到主机推送的数据报文,并根据关联标识确定写指令。NVMe控制器也可以先获取写
指令,再根据写指令获取对应入口接收到的数据,例如,NVMe控制器可以根据写指令确定该
关联标识,然后根据关联标识确定对应的入口,并根据关联标识从为该入口分配的存储空
间中获取存储的载荷数据。
[0164] 本发明实施例不限定主机发出写指令和数据报文的顺序,即本发明实施例不限定与写指令对应的数据和写指令本身的到达NVMe控制器的顺序。
[0165] 如果SQE先于数据到达NVMe控制器,NVMe控制器根据SQE携带的信息确定SQE对应的入口。NVMe控制器可以维护有SQ槽位与入口的一一对应关系,当从一个槽位中获取到SQE
后,可以根据维护的对应关系确定该SQE对应的入口。如果NVMe检测到对应的入口还没有数
据到达,则NVMe控制器挂起SQE,等待数据到来。直至NVMe控制器检测到对应的入口有数据
到达,且通过入口获取合适部分的数据后,便可以执行这部分数据的写操作。合适部分的数
据可以为该部分数据的地址和大小与NVMe控制器向存储介质的一次写操作的内部实现对
齐。
[0166] 如果一部分数据先于SQE到达控制器,NVMe根据数据报文中携带的关联标识检测到数据对应的SQE还没有到达NVMe控制器或者对应的SQ槽位。则NVMe控制器可以将数据附
到根数据结构,等待相关的SQE到来,直至对应的SQE到达NVMe控制器或者NVMe控制器可寻
址的SQ槽位,NVMe控制器获取该SQE,并根据SQE将数据写入存储介质。
[0167] 同理,如果当前通过入口接收的数据处理完成,即当前通过入口接收到的数据已经完全写入存储介质,但系统需要更多的数据来完成写操作,NVMe控制器则挂起SQE等待数
据到来。
[0168] 在本发明实施例中,NVMe控制器通过入口接收主机推送的数据和NVMe控制器向存储介质的写操作可以并行执行。
[0169] 在本发明实施例中,主机可以采用保序方式或者不保序方式对数据报文进行发送,NVMe控制器可以支持下列任意一种或者同时支持两种顺序模式:
[0170] “严格”模式:
[0171] 这种模式下,主机根据数据偏移单调递增的顺序发送数据报文。NVMe控制器根据数据报文的顺序确定载荷数据在待写入数据中的顺序。在这一种模式下,不需要偏移量,即
图8所示的入口宽度可以只为两个bit(标准规定)。
[0172] “宽松”模式:
[0173] 这种模式下,主机可以以任意顺序发送数据报文,但数据报文中携带载荷数据的顺序标识(例如,偏移量)。NVMe控制器根据数据报文中携带的偏移量重组载荷数据。在这种
模式下,数据报文中需要携带数据的偏移量,即图8所示的入口宽度需要大于或者等于最大
数据传输大小。
[0174] 因价格、功耗和物理尺寸等原因的限制,NVMe控制器内部存储器的大小是有限的。因为NVMe的内部存储器的存储空间的容量是有限的,为了防止缓冲区溢出,需要限制同时
支持的入口数量。这个数量要受到“NVMe控制器内部存储器容量”除以“最大数据传输大小”
的限制。本发明提供反压机制来解决缓冲区溢出和缓解NVMe控制器内部存储器容量限制的
问题。
[0175] 在本发明实施例中,NVMe控制器以内存块的形式对内部存储器进行管理,内存块可以为为NVMe操作的不可分的最小单位。当数据到达NVMe控制器时,NVMe控制器为数据分
配内存块,当NVMe控制器将内存块中的数据写入到存储介质后,NVMe控制器释放内存块。
[0176] 在本发明实施例中,NVMe控制器可以将内部存储器中的内存块组织成内存池的形式,当数据从主机到达NVMe控制器后,如果还没有分配内存块,则NVMe控制器从内存池中给
数据分配内存块。当某个内存块中的数据完全被NVMe控制器根据SQE写入存储介质后,NVMe
控制器将该内存块释放到内存池中。
[0177] 在本发明实施例中,NVMe控制器向主机提供以下参数:
[0178] 1、入口可用内存块的最大数量MNAC。
[0179] 2、内存块大小C。
[0180] 在本发明实施例中,主机维护有计数器,该计数器用于指示未被占用的内存块数量,即可用内存块数量NAC。NAC用于表示内存池中可以被入口使用的内存块的剩余数量。在
某一种意义上,NAC可以理解为虚拟内存池的状态,就像硬件资源虚拟化一样,虚拟内存池
是指这个内存池并没有实际的占有具有实际物理地址的物理内存块,整个虚拟内存池的状
态仅仅由NAC进行表示。虚拟内存池中的内存块可以被所有写操作共享。
[0181] 在本发明实施例中,主机还可以根据QP优先级或者写操作优先级等规则向NVMe控制器为特定的QP或写操作申请一定数量的内存块,这种情况下,主机需要分别为不同主体
(QP或写操作)维护不同的虚拟内存池,即主机需要对应的为不同的QP或者写操作维护多个
NAC计数器。
[0182] 在本发明实施例中,针对一个写操作,主机向NVMe控制器推送的数据量最大值是主机为该写操作申请的预留内存块数量乘以每个内存块的大小(如果所有写操作共享内存
池,则最大数据量为MNAC*C)。
[0183] 本发明实施例不限定内存池的数量或具体实现方式,在以下描述中,本发明实施例以一个内存池进行举例说明。在初始化时,主机将NAC设置为MNAC,主机在向NVMe控制器
推送数据报文的过程中,会逐渐递减计数器,直至将NAC减到0后,主机不能再向NVMe控制器
推送数据。当NVMe控制器将内存块中的数据写入到存储介质后会发出内存块释放报告,主
机根据NMVe控制器释放的内存块数目对计数器进行加操作。
[0184] 在本发明实施例中,NVMe控制器可以通过“内存块释放门铃”向主机报告释放内存块的操作,门铃是最小的PCIe写操作。本发明实施例不限定内存释放门铃的具体实现方式,
但是内存释放门铃中需要携带NVMe控制器释放的内存块数量。
[0185] 可选的,内存释放门铃还可以携带关联标识,该关联标识用于指示释放的内存块对应的入口(写操作)。如果主机维护多个计数器,即主机为QP或者写操作单独分配了虚拟
内存池,则需要在内存释放门铃中携带关联标识。
[0186] 进一步的,NVMe控制器还可以向主机提供每一个写操作建议分配的内存块数量PWCC。
[0187] 在本发明实施例中,主机需要向NVMe控制器提供接收门铃的PCIe地址,且主机不能丢失门铃。为了降低主机处理门铃的压力,NVMe控制器可以聚合多个门铃。主机将内存释
放门铃中释放的内存块数量加入到总的虚拟内存池(写操作共享虚拟内存池,门铃信号中
不携带关联标识)或者加入到关联标识指示的入口对应的虚拟内存池(门铃中携带关联标
识,主机维护多个虚拟资源池)。
[0188] 本发明实施例中,主机在进行写操作时,需要为写操作预留内存块,本发明实施例不限定主机预留内存块的策略,以下策略仅仅是举例说明。
[0189] 策略1:每个写操作从“虚拟内存块池”分配不超过写操作所需数量的固定数量的内存块。这个策略不需要在门铃中携带关联标识。一旦内存块被释放,主机可以将新的内存
块分配出去。这个策略允许最大数量的写操作同时执行。
[0190] 策略2:每个写操作分配写操作所需数量的内存块。这个策略也不需要在门铃中携带关联标识。主机在不能为写操作分配所需数量的内存块时挂起该写操作。
[0191] 策略3:主机为每个写操作计算“最佳写内存块数量”。这个策略需要在门铃中携带关联标识。“最佳写内存块数量”让NVMe控制器达到了执行单个写操作执行的最大性能,再
预留更多些内存块也不能进一步提升性能。“最佳写内存块数量”可以根据写操作大小,主
机与NVMe控制器之间循环时间RTT和PWCC等参数确定。主机尝试预留“最佳写内存块数量”,
如果预留成功,主机将开始执行写操作,释放回来的写内存块再次被被该写操作占用,直至
给该写操作分配的全部内存块达到写操作所需内存块数量。如果预留不到任何内存块,主
机可以将挂起该写操作。如果预留的内存块数量小于“最佳写内存块数量”,主机仍可以开
始执行写操作,释放回来的内存块再次被该写操作占用,直至给该写操作分配的全部内存
块达到写操作所需内存块数量。主机也可以预留其它写操作释放到“虚拟内存块池”的内存
块,直至该写操作占用的内存块达到“所需内存块数量”。
[0192] 根据本发明实施例公开的技术方案,在进行基于NVMe的写操作时,主机主动将待写入数据通过数据报文的形式推送给NVMe控制器,并在报文中携带关联标识,用于关联待
写入数据与写指令SQE,不需要在SQE中携带数据存储的位置信息,主机在发出SQE之前不再
需要将数据完全准备好,从而减少了写操作的时延,并减少了主机存储待写入数据的存储
空间。另外,SQE中可以不再携带待写入数据的地址信息,减小了总线负载。
[0193] 图1000为依据本发明一实施例的一种基于NVMe的写入方法的交互流程图。如图8所示,方法1000的应用场景为数据源与命令源分离的场景。数据源需要将待写入数据通过
NVMe控制器写入存储介质。
[0194] 举例而言,在本发明实施例中,数据源和命令源分离的场景可以为基于NOF(英文全称:NVMe over fabric,缩写:NOF)的闪存簇(英文全称:Just a Bunch Of Flash,缩写:
JBOF)。如图11(a)所示,数据源为需要访问存储介质的主机,命令源为与主机通过fabric互
联的NOF桥,更具体的,命令源可以为NOF桥中的NOF引擎。NOF桥通过PCIe总线与NVMe控制器
互联,NVMe连接有存储介质。
[0195] 在本发明实施例中,数据源和命令源分离的场景还可以为主机与加密加速器,如图11(b)所示,数据源为主机,命令源为与主机互联的加密加速器,更具体的,命令源为加密
加速器的加速引擎。加密加速器通过PCIe总线与NVMe控制器互联,NVMe控制器连接有存储
介质。
[0196] 在本发明实施例中,命令源在接收到数据源发送的部分数据后,就可以向NVMe控制器触发SQE并推送接收到的部分数据。SQE不需要等待待写入数据完全从数据源发送至命
令源。本发明实施例不限定命令源向NVMe控制器触发SQE的具体形式,命令源可以将SQE写
入SQ,并通过门铃通知NVMe控制器或者通过其他形式将SQE发送至NVMe控制器。
[0197] 在本发明实施例中,数据源与命令源分离,二者通过互联网络连接,数据源不能直接与NVMe控制器通信,例如,NVMe控制器可能不可以直接访问数据源的存储空间,当数据源
需要将待写入数据通过NVMe控制器写入存储介质时,需要将数据数据发送至命令源。
[0198] 当数据源有写需求时,通过互联网络向命令源发出写请求。命令源接收到数据源的写请求后,可以不等待数据到达,就直接向NVMe控制器触发SQE。命令源接收到写请求后,
向数据源发送数据请求,数据源根据数据请求向命令源发送数据,命令源在接收到部分数
据后,就可以向NVMe控制器推送该数据,不需要等待数据完全到达后才将数据推送至NVMe
控制器。命令源可以做到流水线方式,即命令源可以并行处理接收数据源发送的数据和向
NVMe控制器推送已经接收到的数据,流水线方式一方面节省了用于缓存数据的存储空间,
另一方面也加快了写操作的处理速度。
[0199] 图12为依据本申请一实施例的一种NVMe控制器1200的逻辑结构示意图,如图12所示,NVMe控制器1200包括:
[0200] 接收单元1202,用于接收主机发送的数据报文,该数据报文携带载荷数据和关联标识,关联标识用于关联载荷数据和写指令。
[0201] 处理单元1204,用于获取该写指令,并根据写指令将载荷数据写入存储介质。
[0202] 可选的,NVMe控制器1200还包含内部存储器,处理单元1204将载荷数据写入存储介质之前,还用于为载荷数据在内部存储器中分配存储空间,将载荷数据存入分配的存储
空间,并记录分配的存储空间与关联标识之间的映射关系。
[0203] 可选的,该内部存储器包含多个内存块,处理单元1204还用于向主机提供内部存储器的内存块的数目和内存块的大小。
[0204] 可选的,处理单元1204将载荷数据写入存储介质后,还用于触发内存块释放报告,内存块释放报告用于指示NVMe控制器1200释放出内存块。
[0205] 可选的,内存块释放报告中还包括关联标识,内存释放报告用于指示NVMe控制器1200释放出关联标识对应的写操作占用的内存块。
[0206] 可选的,数据报文为PCIe报文,关联标识为PCIe报文的第一地址信息,处理单元1204还用于根据第一地址信息确定第二地址信息,并根据第二地址信息获取写指令,第二
地址信息用于指示写指令的存储位置。
[0207] 可选的,关联标识包含写指令的部分字段,处理单元1204还用于根据关联标识获取写指令。
[0208] 可选的,处理单元1204还用于根据写指令确定关联标识,并根据关联标识从分配的存储空间中获取载荷数据。
[0209] 可选的,处理单元1204还用于根据接收数据报文的顺序确定载荷数据在待写入数据中的顺序。
[0210] 可选的,数据报文还携带顺序标识,顺序标识用于指示载荷数据在待写入数据中的顺序。
[0211] 在本申请实施例中,接收单元1202和处理单元1204可以具体由图3中的处理器301中的写操作逻辑305来实现,或者由图3中的处理器301和系统内存302中的写操作模块304
来实现。
[0212] 本申请实施例为以上实施例对应的NVMe控制器的装置实施例,以上实施例部分的特征描述适用于本申请实施例,在此不再赘述。
[0213] 图13为依据本申请一实施例的一种计算设备1300的逻辑结构示意图,如图13所示,计算设备1300包括:
[0214] 处理单元1302,用于触发写指令,并向NVMe控制器推送数据报文,数据报文携带载荷数据和关联标识,关联标识用于关联该数据报文和该写指令。
[0215] 可选的,数据报文为PCIe报文,关联标识为PCIe报文的第一地址信息,第一地址信息和第二地址信息之间存在映射关系,第二地址信息用于指示写指令的存储位置。该第一
地址信息可以为TLP包头中的PCIe地址部分的全部或部分字段,第二地址信息也可以为SQ
槽位的地址信息的全部或部分字段。
[0216] 可选的,关联标识包含写指令的部分字段,关联标识用于唯一的确定写指令。例如,关联标识可以为SQE的CID或者CID的部分字段等。
[0217] 可选的,处理单元1302还用于获取NVMe控制器的内部存储器的内存块的数目和内存块的大小,内存块用于存储计算设备13001300发送的数据。
[0218] 主机还可以包含计数器1304,该计数器1304用于指示NVMe控制器的内存存储器中未被占用的内存块数量,处理单元1302向NVMe控制器发送数据报文后,还用于将计数器
1304的数值减少。
[0219] 可选的,处理单元1302还用于获取NVMe控制器触发的内存块释放报告,并根据内存块释放报告将计数器1304的数值增加,该内存块释放报告用于指示NVMe控制器释放出内
存块。
[0220] 可选的,计算设备13001300包含多个计数器1304,其中,每个计数器1304对应至少一个写指令;内存块释放报告中还包括关联标识;处理单元1302用于根据内存释放报告和
关联标识,将写指令对应的计数器1304的数值增加。
[0221] 在本申请实施例中,接收单元1302可以具体由图4中的处理器401中的写操作逻辑410来实现,或者由图4中的处理器401和系统内存402中的写操作模块406来实现。计数器
1304可以由系统内存402或者处理器401中的寄存器来实现。
[0222] 本申请实施例为以上实施例对应的主机的的装置实施例,以上实施例部分的特征描述适用于本申请实施例,在此不再赘述。
[0223] 以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施
例所记载的技术方案进行修改,或者替换其中部分技术特征;而这些修改或者替换,并不使
相应技术方案脱离权利要求的保护范围。