一种用于控制数据读出到主机的方法及控制器

文档序号:115239 发布日期:2021-10-19 浏览:44次 >En<

阅读说明:本技术 一种用于控制数据读出到主机的方法及控制器 (Method for controlling data to be read out to host and controller ) 是由 刘传杰 张泽 于 2021-07-01 设计创作,主要内容包括:本申请涉及一种用于控制数据读出到主机的方法及控制器,控制器包括:SGL电路和/或PRP电路、读取控制电路和共享存储器,SGL电路响应于接收的读命令,获取与读命令对应的SGL;根据SGL来生成至少一个DMA命令组,每个DMA命令组包括至少一个DMA命令;将DMA命令组存储在共享存储器中;PRP电路响应于接收的读命令,获取与读命令对应的PRP;根据PRP来生成至少一个DMA命令组,每个DMA命令组包括至少一个DMA命令;将DMA命令组存储在共享存储器中;读取控制电路从共享存储器中获取存储的DMA命令组;以及响应于接收到某个DMA命令组对应的数据,根据DMA命令组确定对应的主机内存地址,向主机搬移数据;共享存储器存储DMA命令组。本申请的技术方案能够提高读命令的处理效率。(The present application relates to a method and a controller for controlling data read-out to a host, the controller comprising: the read control circuit comprises an SGL circuit and/or a PRP circuit, a read control circuit and a shared memory, wherein the SGL circuit responds to a received read command and acquires an SGL corresponding to the read command; generating at least one DMA command group according to the SGL, each DMA command group including at least one DMA command; storing the set of DMA commands in a shared memory; the PRP circuit responds to the received read command and acquires a PRP corresponding to the read command; generating at least one DMA command group according to the PRP, each DMA command group including at least one DMA command; storing the set of DMA commands in a shared memory; the reading control circuit acquires a stored DMA command group from the shared memory; responding to the received data corresponding to a certain DMA command group, determining a corresponding host memory address according to the DMA command group, and moving the data to the host; the shared memory stores a set of DMA commands. The technical scheme of the application can improve the processing efficiency of the read command.)

一种用于控制数据读出到主机的方法及控制器

技术领域

本申请一般地涉及数据处理技术领域。更具体地,本申请涉及一种用于控制数据读出到主机的方法及控制器。

背景技术

图1A展示了固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机系统接口)、SAS(Serial AttachedSCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component InterconnectExpress,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102(下文中,将固态存储设备简称为存储设备)包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM(Dynamic RandomAccess Memory,动态随机访问存储器)110。

上述NVM芯片105包括NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(Magnetic Random Access Memory,磁阻存储器)、RRAM(Resistive RandomAccess Memory,阻变存储器)等是常见的存储介质。

上述接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。

上述控制部件104用于控制在接口103、NVM芯片105以及DRAM 110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application SpecificIntegrated Circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IO(Input/Output)命令。控制部件104还可以耦合到DRAM110,并可访问DRAM 110的数据。在DRAM可存储FTL表和/或缓存的IO命令的数据。

控制部件104以遵循NVM芯片105的接口协议的方式向NVM芯片105发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。已知的NVM芯片接口协议包括“Toggle”、“ONFI”等。

存储器目标(Target)是NAND闪存封装内的共享CE(Chip Enable,芯片使能)信号的一个或多个逻辑单元(LUN,Logic UNit)。NAND闪存封装内可包括一个或多个管芯(Die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(Plane)。逻辑单元内的多个平面可以并行存取,而NAND闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。

存储介质上通常按页来存储和读取数据。而按块来擦除数据。块(也称物理块)包含多个页。块包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。

在存储设备102中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址(LBA)到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在相关技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是存储设备中的重要元数据。FTL表的数据项记录了存储设备中以数据单元为单位的地址映射关系。

主机以遵循存储协议的IO命令访问存储设备。控制部件根据来自主机的IO命令,生成一个或多个介质接口命令并提供给介质接口控制器。介质接口控制器根据介质接口命令生遵循NVM芯片的接口协议的存储介质访问命令(例如,编程命令、读命令、擦除命令)。控制部件还跟踪从一个IO命令生成的所有介质接口命令都被执行完成,并向主机指示IO命令的处理结果。

参看图1B,控制部件包括主机接口1041、主机命令处理单元1042、存储命令处理单元1043、介质接口控制器1044与存储介质管理单元1045。主机接口1041获取主机提供的IO命令。主机命令处理单元1042根据IO命令生成存储命令提供给存储命令处理单元1043。存储命令可以访问相同大小的存储空间,例如4KB。将NVM芯片中记录的对应一个存储命令所访问数据的数据单元称为数据帧。物理页记录一个或多个数据帧。例如,物理页的大小17664字节,而数据帧大小为4KB,则一个物理页能存储4个数据帧。

存储介质管理单元1045为每个存储命令维护逻辑地址到物理地址的转换。例如,存储介质管理单元1045包括FTL表(下文将对FTL进行解释)。对于读命令,存储介质管理单元1045输出存储命令所访问的逻辑地址(LBA)对应的物理地址。对于写命令,存储介质管理单元1045为其分配可用的物理地址,并记录其访问的逻辑地址(LBA)与分配的物理地址的映射关系。存储介质管理单元1045还维护诸如垃圾回收、磨损均衡等管理NVM芯片所需的功能。

存储命令处理单元1043根据存储介质管理单元1045提供的物理地址,操作介质接口控制器1044向NVM芯片105发出存储介质访问命令。

为了清楚的目的,将主机发送给存储设备102的命令称为IO命令,将主机命令处理单元1042发送给存储命令处理单元1043的命令称为存储命令,将存储命令处理单元1043发送给介质接口控制器1044的命令称为介质接口命令,而将介质接口控制器1044发送给NVM芯片105的命令称为存储介质访问命令。存储介质访问命令遵循NVM芯片的接口协议。

在NVMe协议中,固态存储设备102收到写命令后,通过主机接口1041去主机的内存中获取数据,然后把这些数据写入到闪存中。对于读命令,当数据从闪存中读出后,固态存储设备102会通过主机接口1041把数据搬移到主机内存中。

主机和存储设备之间传输的数据通过两种方式来描述:一是PRP(PhysicalRegion Page,物理区域页),二是SGL(Scatter/Gather List,分散收集列表)。PRP是链接起来的若干个PRP条目,每个PRP条目是一个64位内存物理地址,用于描述一个物理页(Page)空间。SGL是一个链表,由一个或多个SGL段组成,每个SGL段又由一个或多个SGL描述符组成;每个SGL描述符描述了数据缓存的地址与长度,即每个SGL描述符对应一个主机内存地址空间;每个SGL描述符具有固定的大小(例如16字节)。

无论是PRP还是SGL,本质都是描述主机内存中的一个或多个地址空间,这些地址空间在主机内存中的位置是任意的。主机在NVMe命令中携带PRP或者SGL相关信息,告诉存储设备数据源在主机内存中的位置,或者从闪存中读出的数据应当放到主机内存中的位置。

现有技术中,主机命令处理单元1042在处理IO命令时,需要根据IO命令从主机获取对应的SGL或PRP,并且对SGL或PRP进行解析,以确定对应的主机内存地址。如图1C展示了一种现有技术的主机命令处理单元1042的基本构成。如图1C所示,主机命令处理单元1042主要包括共享存储器、DMA模块和子CPU系统。其中,子CPU系统包括多个CPU,CPU用于运行程序以处理SGL或PRP,以及配置DMA模块。DMA模块用于处理DMA命令,实施主机与存储设备之间的数据传输。共享存储器(share memory)用于存储数据、NVMe命令等。

以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。

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的数据空间。

发明内容

存储设备从主机接收到IO命令,例如读命令之后,主机命令处理单元根据IO命令获取SGL或PRP,作为举例,主机命令处理单元根据读命令携带的SGL指针或PRP指针从主机获取SGL或PRP,并将SGL或PRP放在共享存储器中,然后主机命令处理单元中的CPU需要解析SGL或PRP生成一个或多个DMA命令,而CPU解析SGL或PRP生成DMA命令会占用CPU资源,加重CPU的负担。另外,存储设备从主机接收的读命令是与SGL有关,还是与PRP有关是不确定的,需要识别读命令是与SGL有关还是与PRP有关,然后根据识别结果进行相应的处理,而对于SGL或PRP处理的方式不同,提高了处理的复杂度;再者,主机所发送的读命令所指示的数据大小是不定长的,使得处理的便利性以及整齐性较差;而且,存储设备可接收主机发送的多个读命令,由于资源有限,多个读命令处理之间会抢占资源从而引发冲突。另外,在处理读命令的过程中,哪个DMA命令所对应的数据先读出来是不确定的,例如,若读命令所指示的逻辑地址为LBA0~LBAn,而当前处理的DMA命令所指示的逻辑地址为LBAm~LBAp,且0<m<n,m<p<n,即读命令所指示的逻辑地址中间范围的逻辑地址所对应的数据先读出来,为了将当前DMA命令所指示的数据从存储器搬移到主机,需要根据SGL来计算其所对应的主机内存地址,而通过SGL来计算主机内存地址,这个计算是复杂的。

本申请在主机命令处理单元中设置独立于CPU的硬件设备,通过该硬件设备对读命令相关的SGL或PRP进行解析生成一个或多个DMA命令,并将一个或多个DMA命令存储到共享存储器中,使CPU从解析SGL或PRP的工作中解脱出来,进而降低了CPU的负担。

进一步地,为了降低解析SGL或PRP的复杂度,本申请在该硬件设备中设置一个或多个并行SGL和/或PRP支路,通过SGL支路来对SGL进行解析,通过PRP支路对PRP进行解析,并且每个SGL支路或PRP支路可处理一条读命令,一个或多个并行SGL和/或PRP支路可同时并行处理多个读命令。一方面,该硬件设备不仅可对SGL进行解析,也可以对PRP进行解析,提供了一种统一的方式来处理SGL或PRP,进而降低了处理的复杂度;另一方面,该硬件设备可同时并行处理多个读命令,减低了多个读命令处理之间抢占资源而引发冲突的可能性。

进一步地,本申请实施例所提供的方案中,通过该硬件设备将不定长的读命令拆分为多个定长的存储命令(如DMA命令组),例如,每个存储命令指示4KB的数据,然后再根据每个存储命令生成一个或多个DMA命令,进而提高了处理的便利性以及整齐性。而且本申请的方案通过存储命令能够将每个存储命令所指示的逻辑地址在读命令所指示的逻辑地址中的位置直接对应到DMA命令,进而可以避免在响应于读命令的数据被读出到存储设备内存时的复杂计算,提高了读命令的整体处理效率。

根据本申请的第一方面,提供了根据本申请第一方面的第一用于控制数据读出到主机的方法,包括:响应于接收的读命令,获取与读命令对应的SGL或PRP;根据所述SGL或PRP来生成至少一个DMA命令组,每个所述DMA命令组包括至少一个DMA命令;将所述DMA命令组存储在共享存储器中;以及从所述共享存储器中获取存储的DMA命令组;响应于接收到对应某个DMA命令组指示的数据后,根据所述DMA命令组向主机搬移数据。

根据本申请第一方面的第一用于控制数据读出到主机的方法,提供了根据本申请第一方面的第二用于控制数据读出到主机的方法,获取与读命令对应的SGL或PRP包括:根据所述读命令来获取SGL指针或PRP指针;根据所述SGL指针或PRP指针,从主机获取SGL或PRP,以及存储所述SGL或PRP;或者,根据所述读命令来获取SGL或PRP,存储所述SGL或PRP。

根据本申请第一方面的第一用于控制数据读出到主机的方法,提供了根据本申请第一方面的第三用于控制数据读出到主机的方法,所述读命令指示的数据大小是非固定的;所述DMA命令组指示的数据大小是固定值,或者是IO命令指示的数据大小对所述固定值取模,并且所述DMA命令组指示的数据大小之和等于所述读命令指示的数据大小;所述DMA命令指示的数据大小之和等于所属的DMA命令组指示的数据大小。

根据本申请第一方面的第三用于控制数据读出到主机的方法,提供了根据本申请第一方面的第四用于控制数据读出到主机的方法,所述固定值为4KB。

根据本申请第一方面的第四用于控制数据读出到主机的方法,提供了根据本申请第一方面的第五用于控制数据读出到主机的方法,每个DMA命令包括主机内存地址和存储设备内存地址。

根据本申请第一方面的第五用于控制数据读出到主机的方法,提供了根据本申请第一方面的第六用于控制数据读出到主机的方法,通过一个或多个SGL处理单元并行处理多个读命令,或者一个或多个PRP处理单元并行处理多个读命令,得到每个读命令对应的SGL或PRP;将每个读命令对应的一个或多个DMA命令组存储到共享存储器中;对每个读命令进行处理,将每个读命令要访问的数据从NVM搬移到存储设备内存中;以及响应于对应第一DMA命令组的数据已被搬移到存储设备的内存中;从共享存储器中获取对应所述第一DMA命令组的一个或多个DMA命令,根据所述第一DMA命令组的一个或多个DMA命令进行数据搬移。

根据本申请第一方面的第六用于控制数据读出到主机的方法,提供了根据本申请第一方面的第七用于控制数据读出到主机的方法,所述SGL单元根据第一读命令的SGL生成第一DMA命令组读取共享存储器后,无论第一DMA命令组是否被处理,都响应于接收的第二读命令,获取与第二读命令对应的SGL;根据第二读命令的SGL来生成至少一个第二DMA命令组;和/或所述PRP单元根据第三读命令的PRP生成第三DMA命令组读取共享存储器后,无论第三DMA命令组是否被处理,都响应于接收的第四读命令,获取与第四读命令对应的PRP;根据第四读命令的PRP来生成至少一个第四DMA命令组。

根据本申请第一方面的第七用于控制数据读出到主机的方法,提供了根据本申请第一方面的第八用于控制数据读出到主机的方法,在所述SGL单元根据第二读命令的SGL来生成至少一个第二DMA命令组的同时,处理第一读命令;在所述PRP单元根据第四读命令的PRP来生成至少一个第四DMA命令组的同时,处理第三读命令。

根据本申请第一方面的第六用于控制数据读出到主机的方法,提供了根据本申请第一方面的第九用于控制数据读出到主机的方法,并行处理所述共享存储器中存储的多个DMA命令组的DMA命令。

根据本申请第一方面的第六用于控制数据读出到主机的方法,提供了根据本申请第一方面的第十用于控制数据读出到主机的方法,根据读命令的特征选择多个读命令进行处理。

根据本申请第一方面的第六至第十任意一项用于控制数据读出到主机的方法,提供了根据本申请第一方面的第十一用于控制数据读出到主机的方法,为SGL单元选择读命令并由该SGL单元根据所选择的读命令的SGL生成DMA命令组;和/或为PRP单元选择读命令并有该PRP单元根据所选择的读命令的PRP生成DMA命令组。

根据本申请第一方面的第十一用于控制数据读出到主机的方法,提供了根据本申请第一方面的第十二用于控制数据读出到主机的方法,为第一SGL单元选择具有第一特征的读命令;为第二SGL单元选择具有第一特征的读命令之外的其他读命令。

根据本申请第一方面的第十一或十二用于控制数据读出到主机的方法,提供了根据本申请第一方面的第十三用于控制数据读出到主机的方法,为第一PRP单元选择具有第一特征的读命令;为第二PRP单元选择具有第一特征的读命令之外的其他读命令。

根据本申请第一方面的第六用于控制数据读出到主机的方法,提供了根据本申请第一方面的第十四用于控制数据读出到主机的方法,当一个DMA命令所指示的数据搬移结束时,或者当一个DMA命令组所指示的数据搬移结束时,生成数据搬移结束的通知;根据所述数据搬移结束的通知,识别出第一读命令所对应的所有DMA命令组所指示的数据都被搬移完成时,生成第一读命令执行完成的通知,并且释放所述第一读命令对应的DMA命令组在共享存储器中的空间。

根据本申请第一方面的第十四用于控制数据读出到主机的方法,提供了根据本申请第一方面的第十五用于控制数据读出到主机的方法,识别出多个读命令所对应的所有DMA命令组所指示的数据都被搬移完成时,生成对应多个读命令执行完成的通知,将所述多个读命令执行完成的通知共同发送给主机。

根据本申请的第二方面,提供了根据申请第二方面的第一用于控制数据读出到主机的控制器,包括:SGL电路和/或PRP电路、读取控制电路和共享存储器,所述SGL电路用于:响应于接收的读命令,获取与读命令对应的SGL;根据所述SGL来生成至少一个DMA命令组,每个所述DMA命令组包括至少一个DMA命令;将所述DMA命令组存储在共享存储器中;所述PRP电路用于:响应于接收的读命令,获取与读命令对应的PRP;根据所述PRP来生成至少一个DMA命令组,每个所述DMA命令组包括至少一个DMA命令;将所述DMA命令组存储在共享存储器中;所述读取控制电路,用于:从所述共享存储器中获取存储的DMA命令组;以及响应于接收到某个DMA命令组对应的数据,根据所述DMA命令组确定对应的主机内存地址,向主机搬移数据。所述共享存储器用于:存储DMA命令组。

根据本申请第二方面的第一用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第二用于控制数据读出到主机的控制器,所述SGL电路包括多个并行的SGL支路,所述PRP电路包括多个并行的PRP支路,每个SGL或PRP支路独立地处理各自的读命令,生成各自的读命令对应的SGL或PRP;将每个读命令对应的一个或多个DMA命令组存储到共享存储器中。

根据本申请第二方面的第二用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第三用于控制数据读出到主机的控制器,所述读取控制电路包括读取发起电路和DMA传输电路;所述读取发起电路,请求后端模块对读命令进行处理,使后端模块将数据从NVM搬移到存储设备内存中;以及响应于对应第一DMA命令组的数据被搬移到存储设备内存中,将所述第一DMA命令组的索引提供给所述DMA传输电路;所述DMA传输电路,连接所述读取发起电路;根据从所述读取发起电路接收的DMA命令组索引,从共享存储器中获取对应DMA命令组的一个或多个DMA命令,根据获取的一个或多个DMA命令进行数据搬移。

根据本申请第二方面的第三用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第四用于控制数据读出到主机的控制器,所述SGL支路根据第一读命令的SGL生成第一DMA命令组读取共享存储器后,无论第一DMA命令组是否被处理,都响应于接收的第二读命令,获取与第二读命令对应的SGL;根据第二读命令的SGL来生成至少一个第二DMA命令组;和/或所述PRP支路根据第三读命令的PRP生成第三DMA命令组读取共享存储器后,无论第三DMA命令组是否被处理,都响应于接收的第四读命令,获取与第四读命令对应的PRP;根据第四读命令的PRP来生成至少一个第四DMA命令组。

根据本申请第二方面的第四用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第五用于控制数据读出到主机的控制器,在所述SGL支路根据第二读命令的SGL来生成至少一个第二DMA命令组的同时,读取发起电路处理第一读命令;和/或在所述PRP支路根据第四读命令的PRP来生成至少一个第四DMA命令组的同时,读取发起电路处理第三读命令。

根据本申请第二方面的第三用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第六用于控制数据读出到主机的控制器,所述DMA传输电路并行处理所述共享存储器中存储的多个DMA命令组的DMA命令。

根据本申请第二方面的第三用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第七用于控制数据读出到主机的控制器,所述读取发起电路根据读命令的特征选择多个读命令进行处理。

根据本申请第二方面的第四用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第八用于控制数据读出到主机的控制器,所述读取发起电路,请求后端模块处理第一读命令;无论第一读命令是否被后端模块处理,都请求后端模块处理第二读命令;所述读取发起电路,请求后端模块处理第三读命令;无论第三读命令是否被后端模块处理,都请求后端模块处理第四读命令。

根据本申请第二方面的第八用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第九用于控制数据读出到主机的控制器,为SGL支路选择读命令并由该SGL支路根据所选择的读命令的SGL生成DMA命令组;为PRP支路选择读命令并由该PRP支路根据所选择的读命令的PRP生成DMA命令组。

根据本申请第二方面的第九用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第十用于控制数据读出到主机的控制器,为第一SGL支路选择具有第一特征的读命令;为第二SGL支路选择具有第一特征的读命令之外的其他读命令。

根据本申请第二方面的第九或第十用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第十一用于控制数据读出到主机的控制器,为第一PRP支路选择具有第一特征的读命令;为第二PRP支路选择具有第一特征的读命令之外的其他读命令。

根据本申请第二方面的第三用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第十二用于控制数据读出到主机的控制器,当一个DMA命令所指示的数据搬移结束时,或者当一个DMA命令组所指示的数据搬移结束时,生成数据搬移结束的通知;根据所述数据搬移结束的通知,读取发起电路识别出第一读命令所对应的所有DMA命令组所指示的数据都被搬移完成时,生成第一读命令执行完成的通知,并且释放第一读命令对应的DMA命令组在共享存储器中的空间。

根据本申请第二方面的第九或第十二用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第十三用于控制数据读出到主机的控制器,读取发起电路识别出多个读命令所对应的所有DMA命令组所指示的数据都被搬移完成时,生成对应多个读命令执行完成的通知,将多个读命令执行完成的通知共同发送给主机。

根据本申请第二方面的第二用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第十四用于控制数据读出到主机的控制器,所述SGL支路包括SGL获取子电路和SGL解析子电路;所述SGL获取子电路用于:从读命令中获取SGL,或者根据所述读命令的SGL指针从主机获取SGL;所述SGL解析子电路用于:根据所述SGL来生成至少一个DMA命令组;将所述DMA命令组存储在共享存储器中;所述PRP支路包括PRP获取子电路和PRP解析子电路,其中,所述PRP获取子电路用于:从读命令中获取PRP,或者根据所述读命令的PRP指针从主机获取PRP;所述PRP解析子电路用于:根据所述PRP来生成至少一个DMA命令组,将所述DMA命令组存储在共享存储器中。

根据本申请第二方面的第十四用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第十五用于控制数据读出到主机的控制器,所述每个SGL支路还包括SGL缓存子电路,用于缓存SGL;所述每个PRP支路还包括PRP缓存子电路,用于缓存PRP。

根据本申请第二方面的第三或第十四或第十五用于控制数据读出到主机的控制器,提供了根据本申请第二方面的第十六用于控制数据读出到主机的控制器,所述读取发起电路包括CPU。

根据本申请的第三方面,提供了根据本申请第三方面的存储器,包括本申请第二方面任意一项的控制器。

根据本申请的第四方面,提供了根据本申请第四方面的电子设备,包括本申请第二方面任意一项的控制器。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1A为现有技术的固态存储设备的框图;

图1B为现有技术中的控制部件的结构示意图;

图1C为现有技术中的主机命令处理单元的结构示意图;

图2为SGL与主机内存地址空间的映射示意图;

图3为根据本申请实施例的用于控制数据读出到主机的方法的流程图;

图4A为根据本申请实施例的一种基于SGL的用于处理读命令的电路结构框图;

图4B为根据本申请实施例的一种基于PRP的用于处理读命令的电路结构框图;

图5为根据本申请实施例的一种读命令处理电路结构图;

图6为根据本申请实施例的SGL/PRP单元的结构图;

图7A为根据本申请实施例的SGL解析子电路的原理示意图;

图7B为根据现有技术中基于SGL解析的读命令处理方式示意图;

图7C为根据本申请实施例的基于SGL解析的读命令处理方式示意图;

图8为SGL/PRP单元和DMA传输电路的并行处理机制示意图;

图9为SGL/PRP单元、读取发起电路、DMA传输电路和后端模块的并行处理机制示意图;以及

图10为根据本申请实施例的多支路的SGL/PRP单元的结构图。

具体实施方式

下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

如图3展示了本申请实施例的用于控制数据读出到主机的方法流程图,即为处理读命令的方法。如图3所示,首先,执行步骤301,根据接收的读命令,获取与读命令对应的SGL或PRP。NVMe有两种命令,一种是admin命令,用以主机管理和控制存储设备,另一种就是IO命令,包括读命令和写命令等,用以控制主机和存储设备之间的数据传输。IO命令中有关于SGL或PRP的域(或者称为字段),表示数据在主机内存中的位置(对于写命令)或者数据需要写入的主机内存地址(对于读命令)。一个IO命令可以传输例如128KB的数据。

另外,IO命令还包含要访问的存储设备的起始逻辑地址(LBA)以及数据长度。对于写命令,存储设备从主机内存获取数据后,将数据写入闪存,并且生成逻辑地址LBA与物理地址的映射关系,通过FTL表记录。对于读命令,存储设备根据LBA,查找FTL表,找到对应的物理地址,从该物理地址所对应的物理块中获得数据。

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的指针。

基于此,在一个实施例中,读命令携带了SGL或PRP,响应于接收到该读命令,可以直接获取SGL或PRP。在另一个实施例中,读命令携带了SGL或PRP指针,响应于接收到该读命令,存储设备根据上述SGL或PRP指针,访问主机,从主机获取SGL或PRP。

在一个实施例中,获取SGL或PRP可以由CPU执行,例如CPU从主机接口获取读命令,将读命令存储于共享存储器中。

接着,在步骤302中,根据SGL或PRP来生成至少一个DMA命令组,每个DMA命令组包括至少一个DMA命令。DMA命令是用于控制DMA执行数据传输的命令,每个DMA命令用于在主机和存储设备之间执行一次数据搬移的操作。与SGL或PRP对应地,DMA命令组指示了主机内存地址空间与存储设备内存地址空间的映射关系。

DMA(Direct Memory Access,直接存储器访问)也称为组数据传送方式。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在主机和存储器之间或者存储器和存储器之间的高速数据传输。传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式,通过硬件开辟一条直接传输数据的通道,使得CPU的效率大大提高。

上述的一条DMA命令可以通过DMA技术实施一次数据传输。DMA命令包含主机内存地址和存储设备内存地址(例如DRAM地址)。对于读命令,主机内存地址为目的地址,存储设备内存地址为源地址。其中,DMA命令所包含的主机内存地址是根据SGL或PRP所描述的地址空间来确定的,存储设备内存地址由存储设备进行分配,存储设备可以分配连续的存储设备内存地址空间,以提高DMA的处理效率。需要注意的是,存储设备内存地址与LBA无关;本申请仅关注主机内存与存储设备内存之间的数据传输,而并不关注存储设备内存与闪存(可以表示为LBA)之间的数据传输,换句话说,本申请的技术创新不在于存储设备内存与闪存之间的数据传输;存储设备内存与闪存之间的数据传输属于现有技术的范畴。

在一个应用场景中,DMA命令组可以是DMA命令列表,一个DMA命令列表列出了多个DMA命令。一个DMA命令列表用于操作指定长度的数据。本申请的例子中,指定长度可以是一个数据帧大小,即4KB;可以将4KB大小称为一个数据传输单元(DTU,Data Transfer Unit),对应FTL表的每个表项;存储设备在处理读命令时,依照DTU为单位发起数据传输。

基于此,一个读命令可以包括一个或者多个DMA命令组。例如,一个读命令指示的数据大小为4KB,则其对应一个DMA命令组。又如,一个读命令指示的数据大小为12KB,则其对应3个DMA命令组。

在另一个应用场景中,DMA命令组所指示的数据大小还可能少于一个DTU的长度。例如,一个读命令指示的数据大小为13KB,则其对应于4个DMA命令组,前3个DMA命令组指示的数据大小为4KB,而第4个DMA命令组指示的数据大小为1KB。也就是说,所述DMA命令组指示的数据大小是一个固定值(4KB),或者是读命令指示的数据大小对所述固定值取模,即13KB对4KB取模,为1KB。

一个或者多个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命令。

再接着,在步骤303中,将所述DMA命令组存储在共享存储器中。共享存储器,即share memory,不同于存储设备内存(DRAM)和闪存(NVM)。

在一个实施例中,DMA命令组对应的数据(例如某个DTU)需要占用存储设备内存(例如DRAM)空间,因此在DMA命令组处理完毕后,需要释放对应的存储设备内存空间。另外,读命令和对应的DMA命令组存储于共享存储器中,在某个读命令结束后,它们所占用的共享存储器空间也需要被释放。

最后,在步骤S304中,响应于接收到对应某个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命令组,根据第四个DMA命令组的DMA命令执行数据搬移即可。依次类推,当某个需要访问的DTU的数据从闪存读出时,确定该DTU对应的DMA命令组,然后执行数据搬移,直至最后一个DTU的数据被搬移完成,则一个读命令执行完成。

根据步骤S301-步骤S304,本申请通过独立于CPU的硬件解析SGL或PRP,降低了CPU的开销。下面将进一步介绍实现上述读命令处理的具体硬件电路。

图4A展示了一种基于SGL的用于处理读命令(即主机从存储设备读取数据)的电路结构,即一种主机命令处理单元(如图1B中的主机命令处理单元)。如图4A所示的实施例中,采用独立于CPU的硬件电路实现对SGL/PRP的处理。

如图4A所示,该主机命令处理单元包括共享存储器、SGL单元和读取控制电路。SGL单元用于:响应于接收的读命令,获取与读命令对应的SGL;根据SGL来生成至少一个DMA命令组,每个所述DMA命令组包括至少一个DMA命令;将DMA命令组存储在共享存储器中;读取控制电路,从所述共享存储器中获取存储的DMA命令组;以及响应于接收到某个DMA命令组对应的数据,根据所述DMA命令组确定对应的主机内存地址,向主机搬移数据;共享存储器用于:存储读命令对应的DMA命令组。在一个实施例中,共享存储器也可以用于存储读命令。

图4B展示了一种基于PRP的用于处理读命令的电路结构,包括:共享存储器、PRP单元和读取控制电路。PRP单元用于:响应于接收的读命令,获取与读命令对应的PRP;根据PRP来生成至少一个DMA命令组,每个所述DMA命令组包括至少一个DMA命令;将DMA命令组存储在共享存储器中。读取控制电路,连接PRP单元,用于:根据DMA命令组来进行数据的搬移;共享存储器用于:存储读命令对应的DMA命令组。图4B与图4A不同之处仅在于,采用PRP单元替换了图4A中的SGL单元,PRP单元用于处理读命令对应的PRP。

在图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类型的识别。

作为举例,图5展示了一种同时包含SGL单元和PRP单元的读命令处理电路,即一种控制从存储设备读取数据的控制器;其中将SGL单元和PRP单元表示为SGL/PRP单元。需要说明的是,图5所示的电路结构,也适用于图4A和图4B,如图5所示的电路中,读取控制电路具体包括读取发起电路和DMA传输电路,读取发起电路和DMA传输电路相互配合以实现对数据搬移至主机的控制。下面详细阐述一个读命令的处理过程。

如图5所示,主机通过主机接口向存储设备传输读命令,主机接口将读命令传输到共享存储器进行存储,该过程表示为过程(1)。CPU(图中未示出)提取读命令中的PRP/SGL字段,将读命令提供给SGL/PRP单元,该过程表示为过程(2)。以SGL单元的处理过程为例(PRP单元的处理过程同理,故而不再叙述PRP单元的处理过程),若读命令携带了SGL,则将SGL缓存在一个缓存单元,若读命令携带了SGL指针,则通过主机接口从主机中获取SGL并且缓存到缓存单元中,该过程表示为过程(3);接着,根据SGL中一个或多个SGL描述符所描述的信息生成一个或多个DMA命令组,将DMA命令组存储在共享存储器中,该过程表示为过程(4)。DMA命令组生成完成后,SGL单元通知读取发起电路,该过程表示为过程(5),将用于指示DMA命令组在共享存储器中位置的DMA命令组索引,例如DMA命令组指针,传递给读取发起电路。

读取发起电路接收上述DMA命令组索引。同时,读取发起电路访问后端模块(后端模块是指存储设备中的其他器件,例如图1B中的存储命令处理单元和介质接口控制器等),请求后端模块将读命令所指示的数据从闪存(NVM)读出到存储设备内存(DRAM)中,该过程表示为过程(6)。读取发起电路等待后端模块将DMA命令组所指示的数据读出到存储设备内存中,当某个DMA命令组所指示的数据读出到存储设备内存中时,读取发起电路能够获知该信息,例如,可以是由后端模块通知读取发起电路,也可以由读取发起电路根据存储设备内存的状态获知,该过程表示为过程(7)。读取发起电路响应于某个DMA命令组所指示的数据读出到存储设备内存中,即可将上述DMA命令组索引提供给DMA传输电路,该过程表示为过程(8)。DMA传输电路根据DMA命令组索引,从共享存储器中取出DMA命令组的一个或多个DMA命令,该过程表示为过程(9-1),同时DMA传输电路执行数据搬移操作,从存储设备内存向主机内存搬移数据,该过程表示为过程(9-2)。

当一个DMA命令所指示的数据搬移结束时,以及当一个DMA命令组所指示的数据搬移结束时,生成数据搬移结束的通知,该过程表示为过程(10)。在过程(5)中,读取发起电路除了获得DMA命令组索引,还获得了读命令ID,用于标识读命令。在一个实施例中,在某个DMA命令组被处理完成后,向读取发起电路反馈相应的信息(例如,还包含了某个DMA命令组所属的读命令ID),读取发起电路由此便可以识别出是哪个读命令对应的DMA命令组。例如,若某个读命令包含3个DMA命令组,记为1#,2#和3#。当1#,2#和3#中每个DMA命令组均被处理完成时,读取发起电路均会得到相应的通知。例如,在一种实际场景中,按照1#,3#,2#的顺序执行对各DMA命令组的处理,当2#被处理完成后,读取控制电路根据该读命令ID即可判断该读命令对应的3个DMA命令组全部被处理完成,生成该读命令执行完成的通知,以通知主机,该过程表示为过程(11)。在另一种实际场景中,按照1#,2#,3#的顺序执行对各DMA命令组的处理,当3#被处理完成后,读取控制电路根据该读命令ID即可判断该读命令对应的3个DMA命令组全部被处理完成,生成该读命令执行完成的通知。根据NVMe协议,该通知可以通过操作CQ队列实现。在通知主机的同时,共享存储器可以释放读命令(若该读命令存储于共享存储器中)以及该读命令对应的DMA命令组(1#,2#和3#)在共享存储器中的空间。

图5所示的实施例中,在DMA命令组存储完成后,读取发起电路能够获知某个DMA命令组存储完成,此时由SGL单元通知读取发起电路有新的DMA命令组写入了共享存储器中。在其他实施例中,也可以通过检测共享存储器中的数据存储状态的方式,由其他电路通知读取发起电路。

需要注意的是,如图5所示的电路中,缓存单元用于缓存SGL或PRP,在一些实施例中,根据SGL单元或PRP单元的处理速度,缓存单元也可以考虑省略。另外,图5中的SGL/PRP单元是由CPU以外的硬件电路实现的,而读取发起电路既可以由CPU实现,也可以由CPU以外的硬件电路实现,该CPU可以采用图1C中的CPU。

图6展示了图5中SGL/PRP单元的结构,其中包括一个SGL单元和一个PRP单元;SGL单元包括一个SGL支路,PRP单元包括一个PRP支路。

SGL支路包括SGL获取子电路、SGL缓存子电路和SGL解析子电路,其中,SGL获取子电路,用于获取SGL,或者根据所述读命令的SGL指针从主机获取SGL;SGL缓存子电路,用于缓存SGL;SGL解析子电路,用于根据SGL来生成至少一个DMA命令组,将DMA命令组存储在共享存储器中。

PRP支路包括PRP获取子电路、PRP缓存子电路和PRP解析子电路,其中,PRP获取子电路,用于获取PRP,或者根据所述读命令的PRP指针从主机获取PRP;PRP缓存子电路,用于缓存PRP;PRP解析子电路,用于根据PRP来生成至少一个DMA命令组,将DMA命令组存储在共享存储器中。

其中,多路器用于连接读取发起电路。在DMA命令组存储完成后,多路器将PRP解析子电路连接到读取发起电路,或者将SGL解析子电路连接到读取发起电路,以向读取发起电路输出存储完成的通知。根据图5的描述可知,DMA命令组存储完成时,也可以由其他电路通知读取发起电路,因此在其他实施例中,多路器可以省略。

PRP获取子电路,PRP解析子电路,SGL获取子电路,SGL解析子电路均可以通过硬件电路实现,例如可以通过硬件描述语言及相应的工艺生成这样的硬件电路。

根据图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单元不工作。

又作为一个举例,在某些场景中,仅需处理SGL相关的读命令或者是PRP相关的读命令,为了降低成本以及节约硬件资源,可以对图6所示的SGL/PRP单元进行改进得到另一种SGL/PRP单元结构,该SGL/PRP单元结构中只保留SGL单元或者PRP单元,读命令处理电路中其他结构以及连接关系保持不变。具体的,改进后的SGL/PRP单元以及其对应的读命令处理电路在此不做详细叙述。图6所示的实施例中,不仅可对SGL进行解析,也可以对PRP进行解析,也就是说,提供了一种统一的方式来处理SGL或PRP,CPU并不需要关心SGL和PRP的区别,进而降低了处理的复杂度。

图7A展示了SGL解析子电路的原理(PRP解析子电路的原理同理,故而在此不再详细叙述)。图7A采用了图2的中SGL例子,可以结合图2进行查看。

如图7所示,一个读命令对应的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命令组。

作为举例,首先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的数据。

然后,将存储块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的数据。

接着,将SGL描述符2-1(存储块E,4KB)对应的地址纳入第三个DMA命令组3,第三个DMA命令组3生成完成。DMA命令组3包括一个DMA命令,即DMA命令6,用于搬移4KB的数据。

最后,将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描述符所描述的地址空间大小。

另外,图7A中还显示了根据SGL进行解析生成DMA命令组时,为DMA命令组分配了存储设备内存空间(DRAM空间)。因此,DMA命令组指示了主机内存地址空间与存储设备内存地址空间之间的映射关系。对于读命令来说,DMA命令用于将存储设备内存中的数据搬移至主机内存中。根据图7A可知,本申请将不定长的读命令拆分为多个定长的DMA命令组(仅最后一个DMA命令组可能小于定长值),例如,每个存储命令指示4KB的数据,可以提高读命令处理的便利性以及整齐性。

图7B展示了一种现有技术的读命令处理方式。如图7B所示,一个读命令X包含主机内存地址和逻辑地址(LBA),主机内存地址通过SGL表达,逻辑地址的范围表示为LBA:0-16KB,即读命令X需要从存储设备读取17KB的数据。根据物理页的大小(例如4KB),后端模块会在处理读命令X时,将其划分为5个DTU,如7B中的DTU0-DTU4。其中,DTU0,对应的逻辑地址为LBA:0-3KB;DTU1,对应的逻辑地址未LBA:4-7KB;DTU2,对应的逻辑地址未LBA:8-11KB;DTU3,对应的逻辑地址未LBA:12-15KB;DTU4,对应的逻辑地址未LBA:16KB;也就是说,前四个DTU的大小是4KB,最后一个DTU的大小是1KB。

对于读命令来说,由于存储介质包括多个物理单元,每个物理单元的工作状态是不同的,因此哪个DTU会先被处理、哪个DTU后被处理是无法预知的。例如,对于读命令X,DTU2首先被处理,即从存储介质中读出到存储设备内存中。此时,按照现有技术的方案,需要对SGL进行遍历以确定DTU2对应的主机内存地址。图7B中,SGL表示为若干个链表节点(相当于图7A中的SGL描述符)e1、e2、e3、e4、e5、e6、e7、e8、e9。在遍历SGL时,从e1开始计算各个节点的存储空间大小,由于DTU2对应的逻辑地址是8-11KB,直到计算到e4时发现e1(1KB)+e2(3KB)+e3(512B)+e4(3.5KB)=8KB,由此可知从e5开始为DTU2对应的主机内存地址,基于e5(2KB)+e6(1KB)+e7(1KB)=4KB,则DTU2对应的主机内存地址空间包括节点e5、e6和e7所指示的主机内存地址空间。由图7B可知,在某个逻辑地址范围内,靠中间、靠后的DTU被读出时,计算主机内存地址需要复杂的计算,导致对整个读命令的处理效率较低。

图7C展示了本申请处理读命令的方式。如图7C所示,其中的DMA命令组根据图7B中的SGL得到(例如由图5中的SGL/PRP单元解析得到,解析过程可以参照图7A),即根据SGL得到五个DMA命令组L0、L1、L2、L3和L4,其中L0-L3为4KB,L4为1KB。当读命令X中的DTU2首先从存储介质中读出到存储设备内存中时,读取发起电路(如图5所示)通过简单的计算即可获知DTU2对应于DMA命令组L2,例如:8(DTU2逻辑首地址)/4(固定的DTU大小)=2,即DMA命令组的序号L2。然后根据DMA命令组L2所包含的DMA命令,将DMA命令组L2所指示的数据搬移至主机内存中e5、e6和e7所指示的地址空间。由图7C可知,本申请的方案避免了复杂的计算过程,提高了读命令的整体处理效率。

为了提高对读命令的处理效率,作为举例,SGL/PRP单元和读取控制电路可以同时并行处理不同的命令,例如,SGL/PRP单元处理第一读命令生成一个或多个DMA命令组,将该一个或多个DMA命令组存储到共享存储器之后,读取控制电路根据第一NVMe命令所对应的DMA命令组执行数据搬移,同时SGL/PRP单元处理下一个第二NVMe命令并生成一个或多个DMA命令组,即读取控制电路执行第一NVMe命令进行数据搬移,与SGL/PRP单元处理第二NVMe命令生成DMA命令组可以同时并行处理。

图8展示了SGL/PRP单元和DMA传输电路的并行处理机制,其中采用不同的填充背景图案来表示各模块所处的不同阶段。如图8所示,共享存储器中存储有三个读命令,分别为读命令a,读命令b和读命令c。

在一个实施例中,在当前时刻之前,读命令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所指示的数据等待被处理。

如图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所指示的数据等待被处理。

由此可知,一方面,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)。

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

再一方面,共享存储器起到了数据缓存的作用,其中可能同时存储有多个读命令,以及这多个读命令所对应的DMA命令组。

图9展示了SGL/PRP单元、读取发起电路、DMA传输电路和后端模块的并行处理机制。图9中,T0-T7表示连续的时间周期,每个时间周期下方的内容表示在该时间周期中各个单元进行的操作内容。

在T0时间周期,共享存储器中存入了读命令1,SGL/PRP单元根据读命令1生成DMA命令组1、DMA命令组2和DMA命令组3(为了便于阅读,将连续的多个DMA命令组表示为DMA命令组1、2、3,下文用类似的方式表示)。由于T0时间周期,SGL/PRP单元正在处理读命令1来生成DMA命令组,所以T0时间周期读取发起电路、后端模块和DMA传输电路处于空闲状态。

在T1时间周期,共享存储器中存入了待处理的读命令2,SGL/PRP单元根据读命令2生成DMA命令组4、5、6、7。由于T0时间周期,SGL/PRP单元完成了处理读命令1生成DMA命令组1、2、3的操作,因此在T1时间周期,读取发起电路开始访问后端模块,并且等待读命令1的数据被读出到DRAM;后端模块开始处理读命令1,假设此时尚无任何数据被读出,则DMA传输电路仍然处于空闲状态。

在T2时间周期,共享存储器中存入了待处理的读命令3,SGL/PRP单元根据读命令3生成DMA命令组8、9、10。由于在T1时间周期,SGL/PRP单元处理读命令2生成了DMA命令组4、5、6、7;因此后端模块也开始处理读命令2,而且此时DMA命令组1的数据被读出到DRAM中,响应于此,读取发起电路发起DMA命令组1的处理,DMA传输电路开始处理DMA命令组1。

在T3时间周期,共享存储器中又存入了待处理的读命令4,SGL/PRP单元根据读命令4生成DMA命令组11、12、13…100。由于在T2时间周期,SGL/PRP单元处理读命令3生成了DMA命令组8、9、10,因此,后端模块也开始处理读命令3,而且此时DMA命令组2的数据被读出到DRAM中,响应于此,读取发起电路发起DMA命令组2的处理,DMA传输电路开始处理DMA命令组2。

在T4时间周期,没有新的读命令存入共享存储器中,因此SGL/PRP单元处于等待状态,等待有新的读命令到来。由于在T3时间周期,SGL/PRP单元处理读命令3生成了DMA命令组11-100,因此,后端模块也开始处理读命令4,而且此时DMA命令组4的数据被读出到DRAM中,响应于此,读取发起电路发起DMA命令组4的处理,DMA传输电路开始处理DMA命令组4。

在T5时间周期,仍然没有新的读命令存入共享存储器中,因此SGL/PRP单元处于等待状态,等待有新的读命令到来。此时后端模块仍然处理读命令1、2、3、4。同时,由于DMA命令组3的数据被读出到DRAM中,响应于此,读取发起电路发起DMA命令组3的处理,DMA传输电路开始处理DMA命令组3。

在T6时间周期,共享存储器中存入了待处理的读命令5,SGL/PRP单元根据读命令5生成DMA命令组100-110。此时DMA命令组7的数据被读出到DRAM中,响应于此,读取发起电路发起DMA命令组7的处理,DMA传输电路开始处理DMA命令组7。另外,由于在T5时间周期,DMA传输电路完成了对DMA命令组3的处理,因此读取发起电路还识别出读命令1对应的DMA命令组1、2、3全部处理完成,可以向主机接口发送读命令1被处理完成的通知;而且,由于读命令1被处理完成,后端模块不再处理读命令1。

在T7时间周期,没有新的读命令存入共享存储器中,因此SGL/PRP单元处于等待状态,等待有新的读命令到来。由于在T6时间周期SGL/PRP单元根据读命令5生成了DMA命令组100、101…110,因此,后端模块也开始处理读命令5,而且此时DMA命令组8的数据被读出到DRAM中,响应于此,读取发起电路发起DMA命令组8的处理,DMA传输电路开始处理DMA命令组8。由于仅读命令1被处理完成,后端模块处于正在处理读命令2、3、4、5的过程中。

根据图9内容可知,第一,读取发起电路响应于数据被读出到DRAM中的顺序,而与读命令的顺序或者DMA命令组的顺序无关。第二,DMA传输电路响应于读取发起电路,对指定的DMA命令组进行处理,其并不关心所处理的DMA命令组对应于哪个读命令。第三,在SGL/PRP单元根据读命令生成某个DMA命令组的同时,读取发起电路处理发起另一个DMA命令组的处理;也就是说,SGL/PRP单元与读取发起电路也是并行进行处理的。

其中,当一个DMA命令所指示的数据搬移结束时,或者当一个DMA命令组所指示的数据搬移结束时,DMA传输电路均会生成数据搬移结束的通知。例如,在DMA命令组1、DMA命令组2、DMA命令组4和DMA命令组3的数据搬移结束时,读取发起电路均会接收到相应的通知。在T5时间周期,读取发起电路收到DMA命令组1、DMA命令组2、DMA命令组4的数据搬移结束的通知,此时读取发起电路可以判断出读命令1和读命令2均未完成。T6时间周期,读取发起电路又收到DMA命令组3的数据搬移结束的通知,读取发起电路识别出DMA命令组1、DMA命令组2和DMA命令组3属于同一个读命令1,而且是读命令1的全部DMA命令组。在一种实施例中,读取发起电路可以在每个读命令(如读命令1、读命令2或读命令3)执行完成后,向主机发出执行完成的通知,并且释放读命令以及该读命令对应的DMA命令组在共享存储器中的空间。在另一种实施例中,读取发起电路会识别出多个读命令所对应的所有DMA命令组所指示的数据都被搬移完成,此时读取发起电路便生成多个读命令(如读命令1、读命令2和读命令3)均执行完成的通知,将多个读命令执行完成的通知共同发送给主机。

综合图8和图9的说明可知,本申请实施例所具有的并行处理特性进一步保证了IO命令的处理效率,即生成SGL/PRP与数据搬移并不冲突,数据搬移时可以直接利用已经生成并且存储的SGL/PRP,不会产生任何延迟;而且,这种并行处理特性并不要求一个读命令完全处理完成后才能处理下一个读命令,从而避免了读命令之间的冲突,使每个读命令都能够得到相对及时的响应。

图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支路。通过多支路的方式同时并行处理多个读命令,可以减低多个读命令处理之间抢占资源而引发冲突的可能性。

更多的SGL支路或PRP支路能够使电路可以同时服务于更多的读命令。在一个实际应用场景中,图10所展示的多支路实施例适用于网络服务场景下,服务器同时服务于多个用户请求的工况。在这种工况下,不仅上述图8、图9所描述的并行处理方式同样适用于图10所展示的实施例,而且还可以选择具有特定特性的读命令由指定的支路进行处理,也就是说,可以优先选择某个SGL/PRP支路生成的SGL/PRP进行处理,相当于为各个读命令提供了优先级或QoS(Quality of Service,服务质量)。

在一个实施例中,若干个支路(包括SGL支路和/或PRP支路)并行工作时,每个支路处理一个读命令,而一个读命令可以仅由一个支路处理,而且在共享存储器中,各个读命令均拥有独占的空间。例如,支路1生成的DMA命令组与支路2生成的DMA命令组分别占用不同的空间,避免了支路并发工作对共享存储器资源的竞争。

在另一个实施例中,设有两个支路,有三个读命令到来;这三个读命令中,前两个读命令具有约定的特征,第三个读命令不具有约定的特征。那么,这两个支路优先响应前两个读命令,忽略第三个读命令,或者在完成对前两个读命令的处理后响应第三个读命令;还可以是其中一个支路处理前两个读命令,另外一个支路处理第三个读命令。

在又一个实施例中,设有10支路,可以将5个支路分配给VIP用户A,将4个支路分配给VIP用户B,剩下的1个支路由其他所有的普通用户使用。这样既可以保证VIP用户优先享有多数支路,又避免VIP用户占用所有的支路,为控制器提供了QoS的能力。作为举例,可以将用户身份特征与读命令相关联,控制器在接收到读命令时,根据用户身份特征即可确定读命令是来自于VIP用户还是普通用户,进而可以将读命令分配到对应的支路。

根据本申请的一个方面,本申请实施例还提供一种存储器,是指如图1A、图1B所示的存储设备102,存储设备102包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM110。控制部件中包括主机命令处理单元1042,主机命令处理单元1042采用上述实施例所描述的电路,由于上文已经详细介绍了该电路,因此在此不再详细叙述。

根据本申请的一个方面,本申请实施例还提供一种电子设备,该电子设备包括处理器和存储器,存储器为上述以上实施例所提及的存储器。由于上文中已经进行了详细地介绍,故而不再详细叙述。

需要说明的是,为了简明的目的,本申请将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本申请的方案并不受所描述的动作的顺序限制。因此,依据本申请的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本申请所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本申请某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本申请对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本申请某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。

在具体实现方面,基于本申请的公开和教导,本领域技术人员可以理解本申请所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

29页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:语音记录方法、装置、充电坞以及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类