用于数据存取的方法及数据写入的控制器与流程

文档序号:26842045发布日期:2021-10-08 23:11阅读:127来源:国知局
用于数据存取的方法及数据写入的控制器与流程

1.本技术一般地涉及数据处理技术领域。更具体地,本技术涉及根据sgl/prp的一种用于数据存取的方法和一种控制从主机向设备写入数据的控制器。


背景技术:

2.图1a展示了固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如sata(serial advanced technology attachment,串行高级技术附件)、scsi(small computer system interface,小型计算机系统接口)、sas(serial attached scsi,串行连接scsi)、ide(integrated drive electronics,集成驱动器电子)、usb(universal serial bus,通用串行总线)、pcie(peripheral component interconnect express,pcie,高速外围组件互联)、nvme(nvm express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102(下文中,将固态存储设备简称为存储设备)包括接口103、控制部件104、一个或多个nvm芯片105以及dram(dynamic random access memory,动态随机访问存储器)110。
3.上述nvm芯片105包括nand闪存、相变存储器、feram(ferroelectric ram,铁电存储器)、mram(magnetic random access memory,磁阻存储器)、rram(resistive random access memory,阻变存储器)等是常见的存储介质。
4.上述接口103可适配于通过例如sata、ide、usb、pcie、nvme、sas、以太网、光纤通道等方式与主机交换数据。
5.上述控制部件104用于控制在接口103、nvm芯片105以及dram 110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件104可以是fpga(field

programmable gate array,现场可编程门阵列)、asic(application specific integrated circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理io(input/output)命令。控制部件104还可以耦合到dram110,并可访问dram 110的数据。在dram可存储ftl表和/或缓存的io命令的数据。
6.控制部件104以遵循nvm芯片105的接口协议的方式向nvm芯片105发出命令,以操作nvm芯片105,并接收从nvm芯片105输出的命令执行结果。已知的nvm芯片接口协议包括“toggle”、“onfi”等。
7.存储器目标(target)是nand闪存封装内的共享ce(chip enable,芯片使能)信号的一个或多个逻辑单元(lun,logic unit)。nand闪存封装内可包括一个或多个管芯(die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(plane)。逻辑单元内的多
region page,物理区域页),二是sgl(scatter/gather list,分散收集列表)。prp是链接起来的若干个prp条目,每个prp条目是一个64位内存物理地址,用于描述一个物理页(page)空间。sgl是一个链表,由一个或多个sgl段组成,每个sgl段又由一个或多个sgl描述符组成;每个sgl描述符描述了数据缓存的地址与长度,即每个sgl描述符对应一个主机内存地址空间;每个sgl描述符具有固定的大小(例如,16字节)。
17.无论是prp还是sgl,本质都是描述主机内存中的一个或多个地址空间,这些地址空间在主机内存中的位置是任意的。主机在nvme命令中携带prp或者sgl相关信息,告诉存储设备数据源在主机内存中的位置,或者从闪存中读出的数据应当放到主机内存中的位置。
18.如图1c展示了一种现有技术的主机命令处理单元1042的基本构成。现有技术中,主机命令处理单元1042在处理io命令时,需要根据io命令从主机获取对应的sgl或prp,并且对sgl或prp进行解析,以确定对应的主机内存地址。如图1c所示,主机命令处理单元1042主要包括共享存储器、dma模块和子cpu系统。其中,子cpu系统包括多个cpu,cpu用于运行程序以处理sgl或prp,以及配置dma模块。dma模块用于处理dma命令,实施主机与存储设备之间的数据传输。共享存储器(share memory)用于存储数据、nvme命令等。
19.以sgl为例进行说明,如图2所示,一个sgl包括三个sgl段,第一sgl段包括一个sgl描述符:sgl描述符0

1;第二sgl段包括三个sgl描述符:sgl描述符1

1、sgl描述符1

2和sgl描述符1

3;第三sgl段包括两个sgl描述符:sgl描述符2

1和sgl描述符2

2。
20.sgl描述符0

1描述了主机内存中一段3kb的数据空间,即存储块a;同理,sgl描述符1

1描述了2kb存储块b,sgl描述符1

2描述了2kb存储块c,sgl描述符1

3描述了1kb存储块d,sgl描述符2

1描述了4kb存储块e,sgl描述符2

2描述了1kb存储块f。一个sgl链表描述了共计13kb的数据空间。


技术实现要素:

21.存储设备从主机接收到io命令(读命令或写命令)之后,主机命令处理单元根据io命令获取sgl或prp,作为举例,主机命令处理单元根据io命令携带的sgl指针或prp指针从主机获取sgl或prp,并将sgl或prp放在共享存储器中,然后主机命令处理单元中的cpu需要解析sgl或prp生成一个或多个dma命令,而cpu解析sgl或prp生成dma命令会占用cpu资源,加重cpu的负担。另外,存储设备从主机接收的io命令是与sgl有关,还是与prp有关是不确定的,需要识别io命令是与sgl有关还是与prp有关,然后根据识别结果进行相应的处理,而对于sgl或prp处理的方式不同,提高了处理的复杂度;再者,主机所发送的io命令所指示的数据大小是不定长的,使得处理的便利性以及整齐性较差;而且,存储设备可接收主机发送的多个io命令,由于资源有限,多个io命令处理之间会抢占资源从而引发冲突。
22.本技术在主机命令处理单元中设置独立于cpu的硬件设备,通过该硬件设备对io命令相关的sgl或prp进行解析生成一个或多个dma命令,并将一个或多个dma命令存储到共享存储器中,使cpu从解析sgl或prp的工作中解脱出来,进而降低了cpu的负担。
23.进一步地,为了降低解析sgl或prp的复杂度,本技术在该硬件设备中设置一个或多个并行sgl和/或prp支路,通过sgl支路来对sgl进行解析,通过prp支路对prp进行解析,并且每个sgl支路或prp支路可处理一条io命令,一个或多个并行sgl和/或prp支路可同时
并行处理多个io命令。一方面,该硬件设备不仅可对sgl进行解析,也可以对prp进行解析,提供了一种统一的方式来处理sgl或prp,进而降低了处理的复杂度;另一方面,该硬件设备可同时并行处理多个io命令,减低了多个io命令处理之间抢占资源而引发冲突的可能性。
24.进一步地,本技术实施例所提供的方案中,通过该硬件设备将不定长的io命令拆分为多个定长的存储命令(如dma命令组),例如,每个存储命令指示4kb的数据,然后再根据每个存储命令生成一个或多个dma命令,进而提高了处理的便利性以及整齐性。
25.根据本技术的第一方面,提供了根据本技术第一方面的第一用于数据存取的方法,包括:响应于接收的io命令,获取与io命令对应的sgl或prp;根据所述sgl或prp来生成至少一个dma命令组,每个所述dma命令组包括至少一个dma命令;将所述dma命令组存储在共享存储器中,以便于根据所述dma命令组来进行数据的搬移。
26.根据本技术第一方面的第一用于数据存取的方法,提供了根据本技术第一方面的第二用于数据存取的方法,获取与io命令对应的sgl或prp包括:根据所述io命令来获取sgl指针或prp指针;根据所述sgl指针或prp指针,从主机获取sgl或prp,以及存储所述sgl或prp;或者,根据所述io命令来获取sgl或prp,存储所述sgl或prp。
27.根据本技术第一方面的第一用于数据存取的方法,提供了根据本技术第一方面的第三用于数据存取的方法,所述io命令指示的数据大小是非固定的;所述dma命令组指示的数据大小是固定值,或者是io命令指示的数据大小对所述固定值取模,并且所述dma命令组指示的数据大小之和等于所述io命令的指示的数据大小;所述dma命令指示的数据大小之和等于所属的dma命令组指示的数据大小。
28.根据本技术第一方面的第三用于数据存取的方法,提供了根据本技术第一方面的第四用于数据存取的方法,所述固定值为4kb。
29.根据本技术第一方面的第三用于数据存取的方法,提供了根据本技术第一方面的第五用于数据存取的方法,每个dma命令包括主机内存地址和存储设备内存地址。
30.根据本技术第一方面的第一至第五任意一项的用于数据存取的方法,提供了根据本技术第一方面的第六用于数据存取的方法,响应于接收的io命令,获取与io命令对应的sgl或prp包括:通过并行设置的一个或多个的sgl单元并行处理多个io命令,获取与io命令对应的sgl;通过并行设置的一个或多个prp单元并行处理多个io命令,获取与io命令对应的prp。
31.根据本技术第一方面的第六用于数据存取的方法,提供了根据本技术第一方面的第七用于数据存取的方法,所述io命令为写命令。
32.根据本技术第一方面的第七用于数据存取的方法,提供了根据本技术第一方面的第八用于数据存取的方法,根据所述dma命令组来进行数据的搬移包括:从所述共享存储器中获取存储的dma命令组;根据所述获取的dma命令组,执行从主机到存储设备的数据搬移。
33.根据本技术第一方面的第八用于数据存取的方法,提供了根据本技术第一方面的第九用于数据存取的方法,通过并行设置的一个或多个的sgl单元处理写命令,或者通过并行设置的一个或多个prp单元处理写命令,生成相应的sgl或prp;将每个写命令对应的一个或多个dma命令组存储到共享存储器中;响应于所述每个写命令对应的一个或多个dma命令组存储完成,根据dma命令组索引,从共享存储器中获取dma命令组的一个或多个dma命令,根据获取的一个或多个dma命令进行数据搬移。
34.根据本技术第一方面的第九用于数据存取的方法,提供了根据本技术第一方面的第十用于数据存取的方法,所述sgl单元根据第一写命令的sgl生成第一dma命令组写入共享存储器后,无论第一dma命令组是否被处理,都响应于接收的第二写命令,获取与第二写命令对应的sgl;根据第二写命令的sgl来生成至少一个第二dma命令组;所述prp单元根据第三写命令的prp生成第三dma命令组写入共享存储器后,无论第三dma命令组是否被处理,都响应于接收的第四写命令,获取与第四写命令对应的prp;根据第四写命令的prp来生成至少一个第四dma命令组。
35.根据本技术第一方面的第十用于数据存取的方法,提供了根据本技术第一方面的第十一用于数据存取的方法,在所述sgl单元根据第二写命令的sgl来生成至少一个第二dma命令组的同时,处理第一dma命令组的一个或多个dma命令;在所述prp单元根据第四写命令的prp来生成至少一个第四dma命令组的同时,处理第三dma命令组的一个或多个dma命令。
36.根据本技术第一方面的第九用于数据存取的方法,提供了根据本技术第一方面的第十二用于数据存取的方法,并行处理所述共享存储器中存储的多个dma命令组的dma命令。
37.根据本技术第一方面的第九用于数据存取的方法,提供了根据本技术第一方面的第十三用于数据存取的方法,根据dma命令组所对应的写命令的特征选择共享存储器中存储的多个dma命令组进行处理。
38.根据本技术第一方面的第九至第十三用于数据存取的方法,提供了根据本技术第一方面的第十四用于数据存取的方法,为sgl单元选择写命令并由该sgl单元根据所选择的写命令的sgl生成dma命令组;为prp单元选择写命令并有该prp单元根据所选择的写命令的prp生成dma命令组。
39.根据本技术第一方面的第十四用于数据存取的方法,提供了根据本技术第一方面的第十五用于数据存取的方法,为第一sgl单元选择具有第一特征的写命令;为第二sgl单元选择具有第一特征的写命令之外的其他写命令。
40.根据本技术第一方面的第十四或十五用于数据存取的方法,提供了根据本技术第一方面的第十六用于数据存取的方法,为第一prp单元选择具有第一特征的写命令;为第二prp单元选择具有第一特征的写命令之外的其他写命令。
41.根据本技术第一方面的第九用于数据存取的方法,提供了根据本技术第一方面的第十七用于数据存取的方法,当一个dma命令所指示的数据搬移结束时,或者当一个dma命令组所指示的数据搬移结束时,生成数据搬移结束的通知;根据所述数据搬移结束的通知,识别出第一写命令所对应的所有dma命令组所指示的数据都被搬移完成时,生成第一写命令执行完成的通知,并且释放所述第一写命令以及该写命令对应的dma命令组在共享存储器中的空间。
42.根据本技术第一方面的第十七用于数据存取的方法,提供了根据本技术第一方面的第十八用于数据存取的方法,识别出第一写命令所对应的所有dma命令组所指示的数据都被搬移完成时,无论第一写命令所对应的所有dma命令组所指示的数据是否被写入nvm,都生成第一写命令执行完成的通知。
43.根据本技术第一方面的第十八用于数据存取的方法,提供了根据本技术第一方面
的第十九用于数据存取的方法,识别出多个写命令所对应的所有dma命令组所指示的数据都被搬移完成时,生成对应多个写命令执行完成的通知,将所述多个写命令执行完成的通知共同发送给主机。
44.根据本技术的第二方面,提供了根据本技术第二方面的第一用于控制从主机向设备写入数据的控制器,包括:sgl单元和/或prp单元、写入控制电路、共享存储器,所述sgl单元用于:响应于接收的写命令,获取与写命令对应的sgl;根据所述sgl来生成至少一个dma命令组,每个所述dma命令组包括至少一个dma命令;将所述dma命令组存储在共享存储器中;所述prp单元用于:响应于接收的写命令,获取与写命令对应的prp;根据所述prp来生成至少一个dma命令组,每个所述dma命令组包括至少一个dma命令;将所述dma命令组存储在共享存储器中;所述写入控制电路,连接所述sgl单元和/或prp单元,用于:根据所述dma命令组来进行数据的搬移;所述共享存储器用于:存储写命令对应的dma命令组。
45.根据本技术第二方面的第一用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第二用于控制从主机向设备写入数据的控制器,所述sgl单元包括多个并行的sgl支路,所述prp单元包括多个并行的prp支路,每个sgl或prp支路独立地处理各自的写命令,生成各自的写命令对应的sgl或prp;将每个写命令对应的一个或多个dma命令组存储到共享存储器中。
46.根据本技术第二方面的第二用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第三用于控制从主机向设备写入数据的控制器,所述写入控制电路包括写入发起电路和dma传输电路;所述写入发起电路,连接所述各sgl支路和/或各prp支路,响应于每个写命令对应的一个或多个dma命令组存储完成,将所述dma命令组索引发送到dma传输电路;所述dma传输电路,连接所述写入发起电路,以接收所述dma命令组索引,根据所述dma命令组索引,从共享存储器中获取dma命令组的一个或多个dma命令,根据获取的一个或多个dma命令进行数据搬移。
47.根据本技术第二方面的第三用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第四用于控制从主机向设备写入数据的控制器,所述sgl支路根据第一写命令的sgl生成第一dma命令组写入共享存储器后,无论第一dma命令组是否被所述dma传输电路处理,都响应于接收的第二写命令,获取与第二写命令对应的sgl;根据第二写命令的sgl来生成至少一个第二dma命令组;所述prp支路根据第三写命令的prp生成第三dma命令组写入共享存储器后,无论第三dma命令组是否被所述dma传输电路处理,都响应于接收的第四写命令,获取与第四写命令对应的prp;根据第四写命令的prp来生成至少一个第四dma命令组。
48.根据本技术第二方面的第四用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第五用于控制从主机向设备写入数据的控制器,在所述sgl支路根据第二写命令的sgl来生成至少一个第二dma命令组的同时,写入发起电路处理第一dma命令组的一个或多个dma命令;在所述prp支路根据第三写命令的prp来生成至少一个第三dma命令组的同时,写入发起电路处理第三dma命令组的一个或多个dma命令。
49.根据本技术第二方面的第三用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第六用于控制从主机向设备写入数据的控制器,所述dma传输电路并行处理所述共享存储器中存储的多个dma命令组的dma命令。
50.根据本技术第二方面的第三用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第七用于控制从主机向设备写入数据的控制器,所述写入发起电路选择所述共享存储器中存储的多个dma命令组的一个或多个,指示所述dma传输电路处理所选择的一个或多个dma命令组。
51.根据本技术第二方面的第七用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第八用于控制从主机向设备写入数据的控制器,所述写入发起电路根据dma命令组所对应的写命令的特征选择所述共享存储器中存储的多个dma命令组。
52.根据本技术第二方面的第四用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第九用于控制从主机向设备写入数据的控制器,所述写入发起电路,将第一dma命令组索引发送到dma传输电路;无论第一dma命令组是否被dma传输电路处理,都选择第二dma命令组并将第二dma命令组索引发送给dma传输电路;
53.所述写入发起电路,将第三dma命令组索引发送到dma传输电路;无论第三dma命令组是否被dma传输电路处理,都选择第四dma命令组并将第四dma命令组索引发送给dma传输电路。
54.根据本技术第二方面的第三、第六或第九用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第十用于控制从主机向设备写入数据的控制器,为sgl支路选择写命令并由该sgl支路根据所选择的写命令的sgl生成dma命令组;
55.为prp支路选择写命令并由该prp支路根据所选择的写命令的prp生成dma命令组。
56.根据本技术第二方面的第十用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第十一用于控制从主机向设备写入数据的控制器,
57.为第一sgl支路选择具有第一特征的写命令;为第二sgl支路选择具有第一特征的写命令之外的其他写命令。
58.根据本技术第二方面的第十或第十一用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第十二用于控制从主机向设备写入数据的控制器,为第一prp支路选择具有第一特征的写命令;为第二prp支路选择具有第一特征的写命令之外的其他写命令。
59.根据本技术第二方面的第三用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第十三用于控制从主机向设备写入数据的控制器,所述dma传输电路还用于:当一个dma命令所指示的数据搬移结束时,或者当一个dma命令组所指示的数据搬移结束时,生成数据搬移结束的通知;根据所述数据搬移结束的通知,写入发起电路识别出第一写命令所对应的所有dma命令组所指示的数据都被搬移完成时,生成第一写命令执行完成的通知,并且释放该写命令对应的dma命令组在共享存储器中的空间。
60.根据本技术第二方面的第十三用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第十四用于控制从主机向设备写入数据的控制器,写入发起电路识别出第一写命令所对应的所有dma命令组所指示的数据都被搬移完成时,无论第一写命令所对应的所有dma命令组所指示的数据是否被写入nvm,都生成第一写命令执行完成的通知。
61.根据本技术第二方面的第十三或第十四用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第十五用于控制从主机向设备写入数据的控制器,写入
发起电路识别出多个写命令所对应的所有dma命令组所指示的数据都被搬移完成时,生成对应多个写命令执行完成的通知,将多个写命令执行完成的通知共同发送给主机。
62.根据本技术第二方面的第二用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第十六用于控制从主机向设备写入数据的控制器,所述sgl支路包括sgl获取子电路和sgl解析子电路,其中,所述sgl获取子电路用于:获取sgl,或者根据所述写命令的sgl指针从主机获取sgl;所述sgl解析子电路用于:根据所述sgl来生成至少一个dma命令组;将所述dma命令组存储在共享存储器中;所述prp支路包括prp获取子电路和prp解析子电路,其中,所述prp获取子电路用于:获取prp,或者根据所述写命令的prp指针从主机获取prp;所述prp解析子电路用于:根据所述prp来生成至少一个dma命令组,将所述dma命令组存储在共享存储器中。
63.根据本技术第二方面的第十六用于控制从主机向设备写入数据的控制器,提供了根据本技术第二方面的第十七用于控制从主机向设备写入数据的控制器,所述每个sgl支路还包括sgl缓存子电路,用于缓存sgl;所述每个prp支路还包括prp缓存子电路,用于缓存prp。
64.根据本技术的第三方面,提供了一种存储器,包括如本技术第二方面任一用于控制从主机向设备写入数据的控制器。
65.根据本技术的第四方面,提供了一种电子设备,包括如本技术第二方面任一用于控制从主机向设备写入数据的控制器。
附图说明
66.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
67.图1a为现有技术的固态存储设备的框图;
68.图1b为现有技术中的控制部件的结构示意图;
69.图1c为现有技术中的主机命令处理单元的结构示意图;
70.图2为sgl与主机内存地址空间的映射示意图;
71.图3为根据本技术实施例的一种用于数据存取的方法流程图;
72.图4a为根据本技术实施例的一种基于sgl的用于处理写命令的电路结构框图;
73.图4b为根据本技术实施例的一种基于prp的用于处理写命令的电路结构框图;
74.图5为根据本技术实施例的一种写命令处理电路结构图;
75.图6为根据本技术实施例的sgl/prp单元的结构图;
76.图7为根据本技术实施例的sgl解析子电路的原理示意图;
77.图8为sgl/prp单元和dma传输电路的并行处理机制示意图;
78.图9为sgl/prp单元、写入发起电路和dma传输电路的并行处理机制示意图;以及
79.图10为根据本技术实施例的多支路的sgl/prp单元的结构图。
具体实施方式
80.下面结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
81.如图3展示了本技术实施例的一种用于数据存取的方法流程图。
82.包括:首先,执行步骤301,根据接收的io命令,获取与io命令对应的sgl或prp。nvme有两种命令,一种是admin命令,用以主机管理和控制存储设备,另一种就是io命令,包括读命令和写命令等,用以控制主机和存储设备之间的数据传输。io命令中有关于sgl或prp的域(或者称为字段),表示数据在主机内存中的位置(对于写命令)或者数据需要写入的主机内存地址(对于读命令)。一个io命令可以传输例如128kb的数据。
83.另外,io命令还包含要访问的存储设备的起始逻辑地址(lba)以及数据长度。对于写命令,存储设备从主机内存获取数据后,将数据写入闪存,并且生成逻辑地址lba与物理地址的映射关系,通过ftl表记录。对于读命令,存储设备根据lba,查找ftl表,找到对应的物理地址,从该物理地址所对应的物理块中获得数据。
84.io命令中的prp域或sgl域可以是sgl或prp本身,指向要访问的主机内存地址空间,也可以是指针,指向sgl或prp链表,甚至也可以是指针的指针。不论是哪种形式,根据io命令,存储设备总是可以获取到对应的sgl或prp。具体来说,在nvme协议中,io命令的长度为64字节,因此在sgl或prp的大小较小(例如prp在8个字节以内,sgl在16个字节以内)时,io命令能够直接携带sgl或prp,在sgl或prp较大时(sgl或prp的大小正相关于sgl或prp描述的地址空间碎片化程度和/或所描述的地址空间的大小),io命令则用于携带sgl或prp的指针。
85.基于此,在一个实施例中,io命令携带了sgl或prp,响应于接收到该io命令,可以直接获取sgl或prp。在另一个实施例中,io命令携带了sgl或prp指针,响应于接收到该io命令,存储设备根据上述sgl或prp指针,访问主机,从主机获取sgl或prp。
86.在一个实施例中,获取sgl或prp可以由cpu执行,例如cpu从主机接口获取io命令,将io命令存储于共享存储器中。
87.接着,在步骤302中,根据sgl或prp来生成至少一个dma命令组,每个dma命令组包括至少一个dma命令。dma命令是用于控制dma执行数据传输的命令,每个dma命令用于在主机和存储设备之间执行一次数据搬移的操作。与sgl或prp对应地,dma命令组指示了主机内存地址空间与存储设备内存地址空间的映射关系。
88.dma(direct memory access,直接存储器访问)也称为组数据传送方式。dma传输将数据从一个地址空间复制到另一个地址空间,提供在主机和存储器之间或者存储器和存储器之间的高速数据传输。传输动作本身是由dma控制器来实现和完成的。dma传输方式无需cpu直接控制传输,也没有中断处理方式,通过硬件开辟一条直接传输数据的通道,使得cpu的效率大大提高。
89.上述的一条dma命令可以通过dma技术实施一次数据传输。dma命令包含主机内存地址和存储设备内存地址(例如dram地址)。对于写命令,主机内存地址为源地址,存储设备内存地址为目的地址。对于读命令,主机内存地址为目的地址,存储设备内存地址为源地
址。其中,dma命令所包含的主机内存地址是根据sgl或prp所描述的地址空间来确定的,存储设备内存地址由存储设备进行分配,存储设备可以分配连续的存储设备内存地址空间,以提高dma的处理效率。需要注意的是,存储设备内存地址与lba无关;本技术仅关注主机内存与存储设备内存之间的数据传输,而并不关注存储设备内存与闪存(可以表示为lba)之间的数据传输,换句话说,本技术的技术创新不在于存储设备内存与闪存之间的数据传输;存储设备内存与闪存之间的数据传输属于现有技术的范畴。
90.最后,在步骤303中,将所述dma命令组存储在共享存储器中,以便于根据所述dma命令组来进行数据的搬移。共享存储器,即share memory,不同于存储设备内存(dram)和闪存(nvm)。
91.根据步骤302和步骤303可知,由于预先根据sgl或prp生成了dma命令组,将dma命令组存储在共享存储器(share memory)中;因此,不论是读命令还是写命令,存储设备均可以直接访问dma命令组以得到需要的主机内存地址,从而避免了cpu在处理读/写命令时对sgl和prp进行解析操作,大大提高了处理效率。
92.在一个应用场景中,dma命令组可以是dma命令列表,一个dma命令列表列出了多个dma命令。一个dma命令列表用于操作指定长度的数据。本技术的例子中,指定长度可以是一个数据帧大小,即4kb;可以将4kb大小称为一个数据传输单元(dtu,data transfer unit),对应ftl表的每个表项;存储设备在处理io命令时,依照dtu为单位发起数据传输。
93.基于此,一个io命令可以包括一个或者多个dma命令组。例如,一个io命令指示的数据大小为4kb,则其对应一个dma命令组。又如,一个io命令指示的数据大小为12kb,则其对应3个dma命令组。
94.在另一个应用场景中,dma命令组所指示的数据大小还可能少于一个dtu的长度。例如,一个io命令指示的数据大小为13kb,则其对应于4个dma命令组,前3个dma命令组指示的数据大小为4kb,而第4个dma命令组指示的数据大小为1kb。也就是说,所述dma命令组指示的数据大小是一个固定值(4kb),或者是io命令指示的数据大小对所述固定值取模,即13kb对4kb取模,为1kb。
95.一个或者多个dma命令构成一个dma命令组,每个dma命令所指示的数据大小是不固定的。例如,一个dma命令组由4个dma命令构成,每个dma命令指示1kb的数据;又如一个dma命令组由5个dma命令构成,一个dma命令指示1kb的数据,另外四个dma命令指示0.5kb的数据。dma命令指示的数据大小与对应的sgl描述符所描述的地址空间大小有关,例如,sgl指示60个1kb的地址空间,则一个dma命令组可以包括4个指示1kb数据的dma命令;又如,sgl指示30个2kb的地址空间,则一个dma命令组包括2个指示2kb数据的dma命令。下文将根据图7进一步解释说明。
96.以上实施例中,dma命令组对应的数据(例如某个dtu)需要占用存储设备内存(例如dram)空间,因此在dma命令组处理完毕后,需要释放对应的存储设备内存空间。另外,io命令和对应的dma命令组存储于共享存储器中,在某个io命令结束后,它们所占用的共享存储器空间也需要被释放。
97.io命令主要包括读命令和写命令,本技术实施例能够支持读命令和写命令。当io命令为读命令时,则响应于接收的读命令,获取与读命令对应的sgl或prp;然后根据sgl或prp来生成至少一个dma命令组,将dma命令组存储在共享存储器中。当有数据从闪存中读出
时,根据该数据所对应的dma命令组,从所述共享存储器中获取存储的dma命令组,根据所述dma命令组向主机搬移数据。例如,读命令访问18kb的数据,表示为lba:0

17kb,则生成的dma命令组包括5个,前4个dma命令组对应4kb数,分别对应于lba:0

3kb,4

7kb,8

11kb,12

15kb,第5个dma命令组对应2kb数据,对应于lba:16

17kb。当一个dtu的数据从闪存读出时,例如该dtu对应于lba:12

15kb,则不需要复杂的运算便可以立即得出该dtu对应于第4个dma命令组;然后从共享存储器中获取第四个dma命令组执行数据搬移即可。依次类推,当某个需要访问的dtu的数据从闪存读出时,确定该dtu对应的dma命令组,然后执行数据搬移,直至最后一个dtu的数据被搬移完成,则一个读命令执行完成。
98.当io命令为写命令,则响应于接收的写命令,获取与写命令对应的sgl或prp;根据sgl或prp来生成至少一个dma命令组;将dma命令组存储在共享存储器中。在执行数据搬移时,从共享存储器中获取存储的dma命令组,根据dma命令组,执行从主机到存储设备的数据搬移。例如,需要将18kb的数据写入存储设备,则生成的dma命令组包括5个,前4个dma命令组对应4kb数,第5个dma命令组对应2kb数据。每个dma命令组包含若干个dma命令,在执行数据搬移时,根据这些dma命令访问对应的地址空间即可。
99.以上实施例公开了执行io命令的方法,其中sgl或prp的解析通过硬件电路实现,降低了cpu的开销,提高了io命令的处理效率。下面将介绍实现上述写命令处理的具体硬件电路。
100.图4a展示了一种基于sgl的用于处理写命令(即主机向存储设备写入数据)的电路结构。如图4a所示的实施例中,采用独立于cpu的硬件电路实现对sgl/prp的处理。图4a所展示的也是一种主机命令处理单元(如图1b中的主机命令处理单元)。
101.如图4a所示,该主机命令处理单元包括共享存储器、sgl单元和写入控制电路。sgl单元用于:响应于接收的写命令,获取与写命令对应的sgl;根据sgl来生成至少一个dma命令组,每个所述dma命令组包括至少一个dma命令;将dma命令组存储在共享存储器中。写入控制电路,连接sgl单元,用于:根据dma命令组来进行数据的搬移;共享存储器用于:存储写命令以及写命令对应的dma命令组。
102.图4b展示了一种基于prp的用于处理写命令的电路结构,包括:共享存储器、prp单元和写入控制电路。prp单元用于:响应于接收的写命令,获取与写命令对应的prp;根据prp来生成至少一个dma命令组,每个所述dma命令组包括至少一个dma命令;将dma命令组存储在共享存储器中。写入控制电路,连接prp单元,用于:根据dma命令组来进行数据的搬移;共享存储器用于:存储写命令以及写命令对应的dma命令组。图4b与图4a不同之处仅在于,采用prp单元替换了图4a中的sgl单元,prp单元用于处理写命令对应的prp。另外,在其他实施例中,写命令也可以不存储于共享存储器中,而存储于其他缓存器中。
103.在图4a和图4b的实施例的基础上,主机命令处理单元还可以同时包含sgl单元和prp单元。当写命令中携带prp或prp指针时,由prp单元进行处理,当写命令携带sgl或sgl指针时,由sgl单元进行处理。在一个实施例中,cpu(图中未示出)可以参与该过程以识别写命令的类型;例如,cpu提取写命令中的prp/sgl字段,提供给sgl单元或prp单元;也就是说,cpu可以通过写命令的相应字段识别该写命令对应的是sgl还是prp。在其他实施例中,也可以采用sgl单元和prp单元的硬件电路(例如图6中的sgl获取子电路和prp获取子电路)实现对sgl和prp类型的识别。
104.作为举例,图5展示了一种同时包含sgl单元和prp单元的写命令处理电路,即一种控制数据写入的控制器;其中将sgl单元和prp单元表示为sgl/prp单元。需要说明的是,图5所示的电路结构,也适用于图4a和图4b,如图5所示的电路中,写入控制电路具体包括写入发起电路和dma传输电路,写入发起电路和dma传输电路相互配合以实现对数据搬移至主机的控制。而且,写入发起电路、dma传输电路也是独立于cpu的,能够进一步降低cpu的负担。下面详细阐述一个写命令的处理过程。
105.如图5所示,主机通过主机接口向存储设备传输写命令,主机接口将写命令传输到共享存储器进行存储,该过程表示为过程(1)。cpu(图中未示出)提取写命令中的prp/sgl字段,将写命令提供给sgl/prp单元,该过程表示为过程(2)。以sgl单元的处理过程为例(prp单元的处理过程同理,故而不再叙述prp单元的处理过程),若写命令携带了sgl,则将sgl缓存在一个缓存单元,若写命令携带了sgl指针,则通过主机接口从主机中获取sgl并且缓存到缓存单元中,该过程表示为过程(3);接着,根据sgl中一个或多个sgl描述符所描述的信息生成一个或多个dma命令组,将dma命令组存储在共享存储器中,该过程表示为过程(4)。
106.dma命令组生成完成后,sgl单元通知写入发起电路,该过程表示为过程(5),将用于指示dma命令组在共享存储器中位置的dma命令组索引,例如dma命令组指针,传递给写入发起电路。dma传输电路接收上述dma命令组索引,并且根据上述dma命令组索引,从共享存储器中取出dma命令组的一个或多个dma命令,该过程表示为过程(7

1),dma传输电路执行数据搬移操作,从主机向存储设备(例如从主机内存到存储设备dram)传输数据,该过程表示为过程(7

2)。
107.当一个dma命令所指示的数据搬移结束时,以及当一个dma命令组所指示的数据搬移结束时,生成数据搬移结束的通知,该过程表示为过程(8)。在过程(5)中,写入发起电路除了获得dma命令组索引,还获得了写命令id。在一个实施例中,写命令id即写命令指针,用于指示写命令在共享存储器中的存储位置。因此,在某个dma命令组被处理完成后,向写入发起电路反馈相应的信息(例如,还包含了某个dma命令组所属的写命令id),写入发起电路由此便可以识别出是哪个写命令对应的dma命令组。例如,若某个写命令包含3个dma命令组,记为1#,2#和3#。当1#,2#和3#中每个dma命令组被处理完成时,写入发起电路均会得到相应的通知。例如,在一种实际场景中,按照1#,3#,2#的顺序执行对各dma命令组的处理,当2#被处理完成后,写入控制电路根据该写命令id即可判断该写命令对应的3个dma命令组全部被处理完成,生成该写命令执行完成的通知,以通知主机,该过程表示为过程(9)。在另一种实际场景中,按照1#,2#,3#的顺序执行对各dma命令组的处理,当3#被处理完成后,写入控制电路根据该写命令id即可判断该写命令对应的3个dma命令组全部被处理完成,生成该写命令执行完成的通知。根据nvme协议,该通知可以通过操作cq队列实现。在通知主机的同时,共享存储器可以释放写命令以及该写命令对应的dma命令组(1#,2#和3#)在共享存储器中的空间。在其他实施例中,io命令(包括写命令和读命令)也可以不存储于共享存储器中,而存储于其他的缓存中,因此在io命令执行完成时,可以相应地删除其中的io命令。
108.图5所示的实施例中,在dma命令组存储完成后,写入发起电路能够获知某个dma命令组存储完成,此时由sgl单元通知写入发起电路有新的dma命令组写入了共享存储器中。在其他实施例中,也可以通过检测共享存储器中的数据存储状态的方式,由其他电路通知写入发起电路。
109.需要注意的是,如图5所示的电路中,结合图1b可知,主机和主机接口并不属于写命令处理电路。另外,缓存单元用于缓存sgl或prp,在一些实施例中,根据sgl单元或prp单元的处理速度,缓存单元也可以考虑省略。再者,图5中的各个单元,包括sgl/prp单元、写入发起电路等,均由硬件电路(而不是cpu)实现,从而达到了降低cpu开销的目的。
110.图6展示了图5中sgl/prp单元的结构,其中包括一个sgl单元和一个prp单元;sgl单元包括一个sgl支路,prp单元包括一个prp支路。
111.sgl支路包括sgl获取子电路、sgl缓存子电路和sgl解析子电路,其中,sgl获取子电路,用于获取sgl,或者根据所述写命令的sgl指针从主机获取sgl;sgl缓存子电路,用于缓存sgl;sgl解析子电路,用于根据sgl来生成至少一个dma命令组,将dma命令组存储在共享存储器中。
112.prp支路包括prp获取子电路、prp缓存子电路和prp解析子电路,其中,prp获取子电路,用于获取prp,或者根据所述写命令的prp指针从主机获取prp;prp缓存子电路,用于缓存prp;prp解析子电路,用于根据prp来生成至少一个dma命令组,将dma命令组存储在共享存储器中。
113.其中,多路器用于连接写入发起电路。在dma命令组存储完成后,多路器将prp解析子电路连接到写入发起电路,或者将sgl解析子电路连接到写入发起电路,以向写入发起电路输出存储完成的通知。根据图5的描述可知,dma命令组存储完成时,也可以由其他电路通知写入发起电路,因此在其他实施例中,多路器可以省略。
114.prp获取子电路,prp解析子电路,sgl获取子电路,sgl解析子电路均可以通过硬件电路实现,例如可以通过硬件描述语言及相应的工艺生成这样的硬件电路。
115.根据图6可知,sgl/prp单元既包括sgl单元,也包括prp单元,故sgl/prp单元既能处理sgl,也能处理prp。作为举例,sgl/prp单元可同时处理与sgl相关的写命令和与prp相关的写命令,sgl/prp单元也可以单独处理与sgl相关的写命令,或单独处理与prp相关的写命令;若sgl/prp单元单独处理与sgl相关的写命令时,sgl/prp单元中prp单元不工作,若sgl/prp单元单独处理与prp相关的写命令时,sgl/prp单元中sgl单元不工作。
116.又作为一个举例,在某些场景中,仅需处理sgl相关的写命令或者是prp相关的写命令,为了降低成本以及节约硬件资源,可以对图6所示的sgl/prp单元进行改进得到另一种sgl/prp单元结构,该sgl/prp单元结构中只保留sgl单元或者prp单元,写命令处理电路中其他结构以及连接关系保持不变。具体的,改进后的sgl/prp单元以及其对应的写命令处理电路在此不做详细叙述。图6所示的实施例中,不仅可对sgl进行解析,也可以对prp进行解析,也就是说,提供了一种统一的方式来处理sgl或prp,cpu并不需要关心sgl和prp的区别,进而降低了处理的复杂度。
117.图7展示了sgl解析子电路的原理(prp解析子电路的原理同理,故而在此不再详细叙述)。图7采用了图2的中sgl例子,可以结合图2进行查看。如图7所示,一个写命令x对应的sgl包括sgl描述符0

1、sgl描述符1

1、sgl描述符1

2、sgl描述符1

3、sgl描述符2

1和sgl描述符2

2;上述sgl描述符依次对应着主机内存中的若干个地址空间,称为存储块a、存储块b、存储块c、存储块d、存储块e和存储块f。sgl解析子电路将根据上述sgl描述符生成若干个dma命令组。
118.作为举例,首先sgl描述符0

1对应的存储块a的大小为3kb,将存储块a对应的地址
纳入第一个dma命令组1;sgl描述符1

1对应的存储块b的大小为2kb,将存储块b的一部分存储块b

1(1kb)对应的地址也纳入第一个dma命令组1,从而生成了一个dma命令组1(4kb)。dma命令组1包括两个dma命令:dma命令1和dma命令2,dma命令1用于搬移3kb的数据,dma命令2用于搬移1kb的数据。
119.然后,将存储块b剩余的部分存储块b

2(1kb)对应的地址纳入第二个dma命令组2;再将sgl描述符1

2(存储块c,2kb)、sgl描述符1

3(存储块d,1kb)对应的地址纳入第二个dma命令组2,第二个dma命令组2生成完成。dma命令组2包括三个dma命令:dma命令3、dma命令4和dma命令5,dma命令3用于搬移1kb的数据,dma命令4用于搬移2kb的数据,dma命令5用于搬移1kb的数据。
120.接着,将sgl描述符2

1(存储块e,4kb)对应的地址纳入第三个dma命令组3,第三个dma命令组3生成完成。dma命令组3包括一个dma命令,即dma命令6,用于搬移4kb的数据。
121.最后,将sgl描述符2

2(存储块f,1kb)对应的地址纳入第四个dma命令组4,第四个dma命令组4生成完成。dma命令组4包括一个dma命令,即dma命令7,用于搬移1kb的数据。共计生成了4个dma命令组。其中,dma命令组1、dma命令组2和dma命令组3指示的数据大小为4kb,dma命令组4指示的数据大小为1kb。其中,各dma命令所指示的数据大小是不同的,且与sgl描述符所描述的地址空间大小有关,例如dma命令1所指示的数据大小与sgl描述符0

1描述的地址空间大小相同,而dma命令2所指示的数据大小与sgl描述符0

2描述的数据大小不同。一般来说,dma命令指示的数据大小小于或等于sgl描述符所描述的地址空间大小。
122.另外,图7中还显示了根据sgl进行解析生成dma命令组时,为dma命令组分配了存储设备内存空间(dram空间)。因此,dma命令组指示了主机内存地址空间与存储设备内存地址空间之间的映射关系。对于写命令来说,dma命令用于将主机内存中的数据搬移至dram中。
123.根据图7可知,本技术将不定长的io命令拆分为多个定长的dma命令组(仅最后一个dma命令组可能小于定长值),例如,每个存储命令指示4kb的数据,可以提高io命令处理的便利性以及整齐性。
124.为了提高对nvme命令的处理效率,作为举例,sgl/prp单元和写入控制电路可以同时并行处理不同的命令,例如,sgl/prp单元处理第一nvme命令生成一个或多个dma命令组,将该一个或多个dma命令组存储到共享存储器之后,写入控制电路根据第一nvme命令所对应的dma命令组执行数据搬移,同时sgl/prp单元处理下一个第二nvme命令并生成一个或多个dma命令组,即写入控制电路执行第一nvme命令进行数据搬移,与sgl/prp单元处理第二nvme命令生成dma命令组可以同时并行处理。
125.图8展示了sgl/prp单元和dma传输电路的并行处理机制,其中采用不同的填充背景图案来表示各模块所处的不同阶段。如图8所示,共享存储器中存储有三个写命令,分别为写命令a,写命令b和写命令c。
126.在一个实施例中,在当前时刻之前,写命令a已经生成了dma命令组a

1、dma命令组a

2和dma命令组a

3;写命令c已经生成了dma命令组c

1、dma命令组c

2和dma命令组c

3;写命令b已经生成了dma命令组b

1。而且,dma命令组a

1、dma命令组a

2和dma命令组c

1所指示的数据也已经被dma传输电路搬移完成。dma命令组b

1、dma命令组c

2所指示的数据等待被处理。
127.如图8所示,在当前时刻,sgl/prp单元正在处理写命令b,以生成dma命令组b

2(其右侧的空白部分表示根据写命令b还可能生成更多的dma命令组,例如dma命令组b

3、dma命令组b

4)。同时,dma传输电路正在搬移dma命令组a

3和dma命令组c

3所指示的数据。而dma命令组b

1、dma命令组c

2所指示的数据等待被处理。
128.由此可知,一方面,sgl/prp单元生成写命令对应的dma命令组与dma传输电路搬移数据是并行进行的。换言之,当sgl/prp单元根据写命令a生成dma命令组a(dma命令组a

1、a

2或a

3)并写入共享存储器后,无论dma命令组a是否被所述dma传输电路处理完成,都不会影响其接收到写命令b、写命令c,以及根据写命令b、写命令c继续生成相应的dma命令组b(dma命令组b

1、b

2或b

3)和dma命令组c(dma命令组c

1、c

2或c

3)。
129.另一方面,dma传输电路在处理dma命令时,并没有顺序性,并不区分这些dma命令是否属于某一个写命令。而且,dma传输电路可以同时并行处理多个dma命令组(如图8中,正在同时处理dma命令组a

3和dma命令组c

3)。
130.再一方面,共享存储器起到了数据缓存的作用,其中可能同时存储有多个写命令,以及这多个写命令所对应的dma命令组。
131.图9展示了sgl/prp单元、写入发起电路和dma传输电路的并行处理机制。图9中,t0

t6表示连续的时间周期,每个时间周期下方的内容表示在该时间周期中各个单元进行的操作内容。
132.在t0时间周期,共享存储器中存入了写命令1,sgl/prp单元根据写命令1生成dma命令组1、dma命令组2和dma命令组3(为了便于阅读,将连续的多个dma命令组表示为dma命令组1、2、3,下文用类似的方式表示)。由于t0时间周期,sgl/prp单元正在处理写命令1来生成dma命令组,共享存储器中并未存储有待处理的dma命令组,所以t0时间周期写入发起电路和dma传输电路处于空闲状态。
133.在t1时间周期,共享存储器中存入了待处理的写命令2,sgl/prp单元根据写命令2生成dma命令组4、5、6、7。由于t0时间周期,sgl/prp单元完成了处理写命令1生成dma命令组1、dma命令组2和dma命令组3的操作,故在t1时间周期,共享存储器中存储有写命令1所对应的dma命令组1、dma命令组2和dma命令组3。因此,在t1时间周期sgl/prp单元处理写命令2的同时,写入发起电路发起dma命令组1的处理,dma传输电路响应于写入发起电路,处理dma命令组1。
134.在t2时间周期,共享存储器中存入了待处理的写命令3,sgl/prp单元根据写命令3生成dma命令组8、9、10。由于在t0时间周期,sgl/prp单元处理写命令1生成了dma命令组1、2、3,在t1时间周期,sgl/prp单元处理写命令2生成了dma命令组4、5、6、7;而且在t1时间周期,dma命令组1已经被处理,因此,在t2时间周期,sgl/prp单元处理写命令3的同时,写入发起电路发起dma命令组2的处理,dma传输电路响应于写入发起电路,处理dma命令组2。
135.在t3时间周期,共享存储器中又存入了待处理的写命令4,sgl/prp单元根据写命令4生成dma命令组11、12、13

100。由于在t0、t1和t2时间周期,共存储器中存储有dma命令组1

10,而dma命令组1、dma命令组2已经被处理,因此,在t3时间周期sgl/prp单元处理写命令4的同时,写入发起电路发起dma命令组4的处理,dma传输电路响应于写入发起电路,处理dma命令组4。
136.在t4时间周期,没有新的写命令存入共享存储器中,因此sgl/prp单元处于等待状
态,等待有新的io命令到来。由于在t0、t1、t2和t3时间周期,共享存储器中存储有dma命令组1

100,而dma命令组1、dma命令组2、dma命令组4已经被处理,因此在t4时间周期,写入发起电路发起dma命令组3的处理,dma传输电路响应于写入发起电路,处理dma命令组3。
137.在t5时间周期,仍然没有新的写命令存入共享存储器中,因此sgl/prp单元处于等待状态,等待有新的io命令到来。由于在t0、t1、t2和t3时间周期,共享存储器中存储有dma命令组1

100,而在t0、t1、t2、t3和t4时间周期,dma命令组1、dma命令组2、dma命令组4、dma命令组3已经被处理,因此在t5时间周期,写入发起电路发起dma命令组7的处理,dma传输电路响应于写入发起电路,处理dma命令组7。另外,写入发起电路还识别出写命令1对应的dma命令组1、2、3全部处理完成,可以向主机接口发送写命令1被处理完成的通知。
138.在t6时间周期,共享存储器中存入了待处理的写命令5,sgl/prp单元根据写命令5生成dma命令组100、101

110。由于在t0、t1、t2和t3时间周期,共享存储器中存储有dma命令组1

100,而在t0、t1、t2、t3、t4和t5时间周期,dma命令组1、dma命令组2、dma命令组4、dma命令组3、dma命令组7已经被处理,而且写命令1已经被处理完成,写命令1包含的dma命令组1、dma命令组2和dma命令组3已经被清除,此时存储器中存储的dma命令组至少包括dma命令组4

100。在t6时间周期sgl/prp处理写命令5的同时,写入发起电路发起dma命令组8的处理,dma传输电路响应于写入发起电路,处理dma命令组8。
139.其中,在t3时间周期,写入发起电路并未按照写命令1的顺序发起dma命令组3的处理,而是发起了dma命令组4的处理。这说明,第一,在一种应用场景中,写入发起电路能够对待处理的多个dma命令组进行调度,确定哪个dma命令组被先处理,哪个dma命令组被后处理;在另一应用场景中,写入发起电路也可以随机地选择待处理的dma命令组进行处理。第二,dma传输电路响应于写入发起电路,对指定的dma命令组进行处理,其并不关心所处理的dma命令组对应于哪个写命令。第三,在sgl/prp单元根据写命令生成某个dma命令组的同时,写入发起电路处理发起另一个dma命令组的处理;也就是说,sgl/prp单元与写入发起电路也是并行进行处理的。
140.其中,当一个dma命令所指示的数据搬移结束时,或者当一个dma命令组所指示的数据搬移结束时,dma传输电路均会生成数据搬移结束的通知。例如,在dma命令组1、dma命令组2、dma命令组4和dma命令组3的数据搬移结束时,写入发起电路均会接收到相应的通知。在t4时间周期,写入发起电路收到dma命令组1、dma命令组2、dma命令组4的数据搬移结束的通知,此时写入发起电路可以判断出写命令1和写命令2均未完成。t5时间周期,写入发起电路又收到dma命令组3的数据搬移结束的通知,写入发起电路识别出dma命令组1、dma命令组2和dma命令组3属于同一个写命令1,而且是写命令1的全部dma命令组。在一种实施例中,写入发起电路可以在每个写命令(如写命令1、写命令2或写命令3)执行完成后,向主机发出执行完成的通知,并且释放写命令以及该写命令对应的dma命令组在共享存储器中的空间。需要说明的是,上述写命令执行完成,是指dma传输电路处理完成,与数据是否被写入闪存(nvm)无关。再者,在另一种实施例中,写入发起电路会识别出多个写命令所对应的所有dma命令组所指示的数据都被搬移完成,此时写入发起电路便生成多个写命令(如写命令1、写命令2和写命令3)均执行完成的通知,将多个写命令执行完成的通知共同发送给主机。
141.综合图8和图9的说明可知,本技术实施例所具有的并行处理特性进一步保证了io命令的处理效率,即生成sgl/prp与数据搬移并不冲突,数据搬移时可以直接利用已经生成
并且存储的sgl/prp,不会产生任何延迟;而且,这种并行处理特性并不要求一个写命令完全处理完成后才能处理下一个写命令,从而避免了写命令之间的冲突,使每个写命令都能够得到相对及时的响应。
142.图10展示了多支路的sgl/prp单元结构。图10与图6的区别在于,sgl单元包括两个并行的sgl支路,prp单元包括两个个并行的prp支路,每个sgl或prp支路独立地处理各自的写命令,生成各自的写命令对应的sgl或prp;将每个写命令对应的一个或多个dma命令组存储到共享存储器中。sgl支路和prp支路与图6中所展示的结构相同。在实际应用场景中,sgl单元所能够包含的sgl支路的数量可以是3个、4个、5个乃至更多。具体的sgl支路数量根据可以综合产品需求和成本来确定。同理,prp单元也可以包含更多的prp支路。通过多支路的方式同时并行处理多个io命令(例如写命令),可以减低多个io命令(例如写命令)处理之间抢占资源而引发冲突的可能性。
143.更多的sgl支路或prp支路能够使电路可以同时服务于更多的写命令。在一个实际应用场景中,图10所展示的多支路实施例适用于网络服务场景下,服务器同时服务于多个用户请求的工况。在这种工况下,不仅上述图8、图9所描述的并行处理方式同样适用于图10所展示的实施例,而且还可以选择具有特定特性的写命令由指定的支路进行处理,也就是说,可以优先选择某个sgl/prp支路生成的sgl/prp进行处理,相当于为各个写命令提供了优先级或qos(quality of service,服务质量)。
144.在一个实施例中,若干个支路(包括sgl支路和/或prp支路)并行工作时,每个支路处理一个写命令,而一个写命令可以仅由一个支路处理,而且在共享存储器中,各个写命令均拥有独占的空间。例如,支路1生成的dma命令组与支路2生成的dma命令组分别占用不同的空间,避免了支路并发工作对共享存储器资源的竞争。
145.在另一个实施例中,设有两个支路,有三个写命令到来;这三个写命令中,前两个写命令具有约定的特征,第三个写命令不具有约定的特征。那么,这两个支路优先响应前两个写命令,忽略第三个写命令,或者在完成对前两个写命令的处理后响应第三个写命令;还可以是其中一个支路处理前两个写命令,另外一个支路处理第三个写命令。
146.在又一个实施例中,设有10支路,可以将5个支路分配给vip用户a,将4个支路分配给vip用户b,剩下的1个支路由其他所有的普通用户使用。这样既可以保证vip用户优先享有多数支路,又避免vip用户占用所有的支路,为控制器提供了qos的能力。作为举例,可以将用户身份特征与写命令相关联,控制器在接收到写命令时,根据用户身份特征即可确定写命令是来自于vip用户还是普通用户,进而可以将写命令分配到对应的支路。
147.根据本技术的一个方面,本技术实施例还提供一种存储器,是指如图1a、图1b所示的存储设备102,存储设备102包括接口103、控制部件104、一个或多个nvm芯片105以及dram 110。控制部件中包括主机命令处理单元1042,主机命令处理单元1042采用上述实施例所描述的电路,由于上文已经详细介绍了该电路,因此在此不再详细叙述。
148.根据本技术的一个方面,本技术实施例还提供一种电子设备,该电子设备包括处理器和存储器,存储器为上述以上实施例所提及的存储器。由于上文中已经进行了详细地介绍,故而不再详细叙述。
149.需要说明的是,为了简明的目的,本技术将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本技术的方案并不受所描述的动作的顺序限
制。因此,依据本技术的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本技术所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本技术某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本技术对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本技术某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
150.在具体实现方面,基于本技术的公开和教导,本领域技术人员可以理解本技术所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
151.尽管已描述了本技术的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本技术范围的所有变更和修改。显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1