CN115599718A - 一种dma传输的方法及控制部件 - Google Patents
一种dma传输的方法及控制部件 Download PDFInfo
- Publication number
- CN115599718A CN115599718A CN202211021951.8A CN202211021951A CN115599718A CN 115599718 A CN115599718 A CN 115599718A CN 202211021951 A CN202211021951 A CN 202211021951A CN 115599718 A CN115599718 A CN 115599718A
- Authority
- CN
- China
- Prior art keywords
- dma
- command
- data
- memory
- space
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Bus Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请涉及一种DMA传输的方法及控制部件。方法包括:为IO命令在DMA设备的缓存中分配连续的缓存空间,根据IO命令的SCL中每个描述符生成第一DMA命令;基于第一DMA命令发起第一DMA传输;为IO命令分配一个或多个数据传输单元DTU,根据每个DTU生成DMA命令组,DMA命令组包括一个或多个第二DMA命令;基于第二DMA命令发起第二DMA传输。本申请提供了生成两次DMA传输的DMA命令方案。
Description
技术领域
本申请涉及DMA传输技术,特别地,涉及一种DMA传输的方法及控制部件。
背景技术
DMA(Direct Memory Access)是不依赖于CPU而在存储器之间直接搬移数据的技术。在多种电子设备中使用DMA技术。本申请中以固态存储设备为例,介绍所提供的利用缓存优化DMA传输的技术方案。图1展示了固态存储设备的框图。固态存储设备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 ComponentInterconnect Express,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件 104、一个或多个NVM芯片105以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。
NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(MagneticRandom Access Memory,磁阻存储器)、RRAM(Resistive Random Access Memory,阻变存储器)、XPoint存储器等是常见的NVM。
接口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还可以耦合到DRAM 110,并可访问DRAM 110的数据。在DRAM 可存储FTL表和/或缓存的IO命令的数据。
控制部件104包括闪存接口控制器(或称为介质接口控制器、闪存通道控制器),闪存接口控制器耦合到NVM芯片105,并以遵循NVM芯片105的接口协议的方式向NVM芯片105发出命令,以操作NVM芯片105,并接收从 NVM芯片105输出的命令执行结果。已知的NVM芯片接口协议包括“Toggle”、“ONFI”等。
图2展示了现有技术的DMA传输的示意图。
以主机与固态存储设备之间的DMA传输为例,通过DMA设备将主机存储器210中的数据,搬移到存储设备的设备存储器220。
主机存储器210存储了要被DMA设备搬移到设备存储器220的数据。根据DMA命令组(L1、L2、L3或L4),执行从主机存储器210到设备存储器 220的数据搬移。DMA命令组符包括多个DMA命令,每个DMA命令指示一次数据搬移。DMA命令中指示例如源地址(例如,主机存储器210地址)、目的地址(例如,设备存储器220的地址)与传输的数据长度。以DMA命令组L2为例,其包括6个DMA命令,参看图2,DMA命令0指示从源地址0x0000开始,搬移长度为0x0800的数据到目的地址0x0800,DMA命令1指示从源地址 0x0800开始,搬移长度为0x04000的数据到目的地址0x2400。图2中指示存储器地址的数字均为16进制,为了简要的目的,省去了16进制数字前的“0x”标识。
为了提高存储器的利用率,DMA命令指示的要搬移数据,在主机存储器210 与设备存储器220中都可以不连续的存储。利用DMA命令组L2指示的数据,在主机存储器210中被存储在3个区域,在设备存储器中被存储在6个区域(以横线阴影所示的区域)。然而在存储器中的多片数据,不利于数据传输的优化,为了每片数据的传输要为其提供DMA命令,更多的DMA命令增加了复杂度。
主机存储器210和/或设备存储器220各自包括多个存储器页,每页的大小为例如4KB。主机和/或存储设备的控制部件,生成DMA命令,并提供给DMA 设备。若主机生成DMA命令,则主机管理主机存储器210与设备存储器220的分配与释放;若存储设备生成DMA命令,则存储设备的控制部件管理主机存储器210与设备存储器220的分配与释放;或者主机与存储设备协同生成DMA 命令,由主机管理自身的主机存储器210,而由设备的控制部件来管理自身的设备存储器220。
发明内容
为了避免了数据在存储设备中多片存储以及加快DMA的传输,通过在DMA 设备的缓存中为IO命令分配连续的存储空间,从而在一些情况下减少了DMA 命令数量,进而减小了生成DMA传输过程的复杂度;连续的存储空间也有利于优化数据传输,从而加快DMA传输过程。而为了实现加快DMA传输,需要在 DMA设备的缓存中为IO命令分配连续的存储空间的基础上生成DMA命令,本申请提供了在DMA设备的缓存中为IO命令分配连续的存储空间的基础上生成DMA命令的方案。
根据本申请的第一方面,提供了根据本申请第一方面的第一DMA传输的方法,包括:为IO命令在DMA设备的缓存中分配连续的缓存空间,根据所述IO 命令获取SGL,并根据SCL中每个描述符生成第一DMA命令,所述第一DMA 命令用于描述从第一存储器空间向DMA设备缓存空间的DMA传输;基于所述第一DMA命令发起第一DMA传输;为所述IO命令分配一个或多个数据传输单元DTU,根据每个DTU生成DMA命令组,DMA命令组包括一个或多个第二DMA命令,第二DMA命令用于描述从缓存空间到第二存储器空间的DMA 传输;基于所述第二DMA命令发起第二DMA传输。
根据本申请的第一方面的第一DMA传输的方法,提供了根据本申请第一方面的第二DMA传输的方法,根据SCL中每个描述符生成第一DMA命令,包括:根据所述SCL中每个空洞描述符生成一个第一DMA命令;以及根据所述 SCL中每个数据块描述符生成一个第一DMA命令。
根据本申请的第一方面的第一或第二DMA传输的方法,提供了根据本申请第一方面的第三DMA传输的方法,为IO命令在DMA设备的缓存中分配连续的缓存空间,包括:为每个第一DMA命令分配连续的DMA设备缓存空间。
根据本申请的第一方面的第三DMA传输的方法,提供了根据本申请第一方面的第四DMA传输的方法,为SCL中相邻描述符所生成的第一DMA命令所分配的缓存空间是相邻的,且在后的描述符所生成的第一DMA命令所对应的缓存空间位于在前描述符所生成的第一DMA命令所对应的缓存空间之后。
根据本申请的第一方面的第四DMA传输的方法,提供了根据本申请第一方面的第五DMA传输的方法,为第一描述符所生成的第一DMA命令所分配的缓存空间地址为第一地址;为第二描述符所生成的第一DMA命令所分配的缓存空间地址为第二地址,其中,第一描述符和第二描述符为SCL中连续的数据块描述符或空洞描述符,第二地址等于第一地址加上第一描述符所指示的其所生成的第一DMA命令要传输的数据大小。
根据本申请的第一方面的第一至第五任一项DMA传输的方法,提供了根据本申请第一方面的第六DMA传输的方法,其中,对于SGL中段描述符,不生成DMA命令,段描述符用于获取下一个SGL段,SGL段里包括一个或多个 SGL描述符。
根据本申请的第一方面的第一至第五任一项DMA传输的方法,提供了根据本申请第一方面的第七DMA传输的方法,根据空洞描述符生成的第一DMA命令,要在该第一DMA命令所对应的DMA设备的缓存中填充无效数据,以使得能够把后续第一DMA命令所指示的数据写入正确的位置。
根据本申请的第一方面的第一至第七任一项DMA传输的方法,提供了根据本申请第一方面的第八DMA传输的方法,其中,所述第一DMA命令指示了源地址、目的地址以及所要传输的数据长度;响应于所述IO命令为写命令,且根据空洞描述符生成第一DMA命令,所述第一DMA命令中的源地址为空,目的地址为当前DMA设备的缓存中写入数据的位置。
根据本申请的第一方面的第八DMA传输的方法,提供了根据本申请第一方面的第九DMA传输的方法,其中,基于指示DMA设备的缓存中写入数据的位置的写指针来指示所述第一DMA命令的所述目的地址。
根据本申请的第一方面的第九DMA传输的方法,提供了根据本申请第一方面的第十DMA传输的方法,其中,响应于所述IO命令为读命令,基于指示当前从DMA设备的缓存中读取数据的位置的读指针来指示所述第一DMA命令的所述源地址。
根据本申请的第一方面的第十DMA传输的方法,提供了根据本申请第一方面的第十一DMA传输的方法,响应于向DMA设备的缓存中写数据完成,基于第一DMA命令所指示的所要传输的数据长度更新写指针;或者响应于从DMA 设备的缓存中读取数据完成,基于第一DMA命令所指示的所要传输的数据长度更新读指针。
根据本申请的第一方面的第一至第十一任一项DMA传输的方法,提供了根据本申请第一方面的第十二DMA传输的方法,还包括:为IO命令在第二存储器中分配一个或多个容纳DTU的缓存。
根据本申请的第一方面的第十二DMA传输的方法,提供了根据本申请第一方面的第十三DMA传输的方法,若从第二存储器中分配的一个或多个容纳DTU 的缓存不连续,则所述缓存包括多个存储区域,且多个存储区域容量和为4KB。
根据本申请的第一方面的第十三DMA传输的方法,提供了根据本申请第一方面的第十四DMA传输的方法,响应于容纳DTU的缓存不连续,根据每个DTU 的每个存储区域生成一个第二DMA命令。
根据本申请的第一方面的第十四DMA传输的方法,提供了根据本申请第一方面的第十五DMA传输的方法,所述第二DMA命令指示了当前从DMA设备缓存中读取数据的位置、要传输的数据的大小以及在第二存储器中的存储区域的位置;基于所述要传输的数据的大小更新从DMA设备缓存中读取数据的位置。
根据本申请的第一方面的第十五DMA传输的方法,提供了根据本申请第一方面的第十六DMA传输的方法,响应于基于第二DMA命令从DMA设备缓存空间中要读取的数据存在无效数据,在该第二DMA命令中还标记无效数据在 DMA设备缓存空间中存储的范围。
根据本申请的第一方面的第十六DMA传输的方法,提供了根据本申请第一方面的第十七DMA传输的方法,响应于处理标记无效数据范围的第二DMA命令,在传输到无效数据部分时,在总线上生成指示数据无效的无效信号。
根据本申请的第一方面的第十七DMA传输的方法,提供了根据本申请第一方面的第十八DMA传输的方法,所述无效信号为是遵循AXI协议的指示数据无效的WSTRB信号。
根据本申请的第二方面,提供了根据本申请第二方面的第一控制部件,包括: SGL单元以及DMA设备;所述SGL单元,响应于收到IO命令,为IO命令在 DMA设备的缓存中分配连续的缓存空间,根据所述IO命令获取SGL,并根据 SCL中每个描述符生成第一DMA命令,所述第一DMA命令用于描述从第一存储器空间向DMA设备缓存空间的DMA传输;以及为所述IO命令分配一个或多个数据传输单元DTU,根据每个DTU生成DMA命令组,DMA命令组包括一个或多个第二DMA命令,第二DMA命令用于描述从缓存空间到第二存储器空间的DMA传输;所述DMA设备基于所述第一DMA命令发起第一DMA传输;以及基于所述第二DMA命令发起第二DMA传输。
根据本申请的第二方面的第一控制部件,提供了根据本申请第二方面的第二控制部件,所述DMA设备用于将数据从第一存储器搬移到第二存储器,其包括:第一DMA模块、第二DMA模块和缓存;第一DMA模块根据每个第一DMA 命令将要传输的数据从第一存储器空间向缓存空间的DMA传输;第二DMA模块根据所每个第二DMA命令将要传输的数据从缓存空间到第二存储器空间的 DMA传输。
根据本申请的第二方面的第二控制部件,提供了根据本申请第二方面的第三控制部件,所述SGL单元为IO命令在第二存储器中分配一个或多个容纳DTU 的缓存。
根据本申请的第二方面的第三控制部件,提供了根据本申请第二方面的第四控制部件,若从第二存储器中分配的一个或多个容纳DTU的缓存不连续,则所述缓存包括多个存储区域,且多个存储区域容量和为4KB。
根据本申请的第二方面的第四控制部件,提供了根据本申请第二方面的第五控制部件,响应于容纳DTU的缓存不连续,所述SGL单元根据每个DTU 的每个存储区域生成一个第二DMA命令。
根据本申请的第二方面的第五控制部件,提供了根据本申请第二方面的第六控制部件,响应于基于第二DMA命令从DMA设备缓存空间中要读取的数据存在无效数据,所述SGL单元在该第二DMA命令中还标记无效数据在DMA设备缓存空间中存储的范围。
根据本申请的第二方面的第六控制部件,提供了根据本申请第二方面的第七控制部件,第二DMA模块响应于处理标记无效数据范围的第二DMA命令,在传输到无效数据部分时,在总线上生成指示数据无效的无效信号。
根据本申请的第三方面,提供了根据本申请第三方面的存储设备,包括如第二方面所述的控制部件,还包括第一存储器或第二存储器,其中,第一存储器和第二存储器均为耦合于DMA设备外部的存储器。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1展示了固态存储设备的框图;
图2展示了现有技术的DMA传输的示意图;
图3展示了本申请实施例所提供的数据传输过程的示意图;
图4A展示了本申请实施例所提供一种控制部件的结构图;
图4B展示了本申请实施例所提供一种DMA传输的框图;
图5A展示了本申请实施例提供的一种DMA设备缓存空间分配示意图;
图5B展示了本申请实施例提供的一种为数据传输单元DTU分配存储空间的示意图;
图6A展示了本申请实施例所提供的DMA传输的流程示意图;
图6B展示了本申请实施例所提供的DMA传输的示意图;
图6C展示了本申请实施例所提供的根据IO命令生成DMA命令的示意图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
通常NVMe命令需要描述要访问的数据长度以及要访问的数据地址信息,其中,要访问的数据地址信息用SGL描述符来描述,而且根据要访问的数据长度为SGL描述符提供连续的逻辑地址。图1所示的存储设备基于NVMe命令来对其要访问的数据进行传输以及处理,以下结合图3对数据传输过程进行说明。
图3展示了本申请实施例所提供的数据传输过程的示意图。如图3所示, NVMe命令(例如IO命令)描述的连续的LBA空间长度是13KB(图3中的 LBA x到LBAx+26,每个LBA可以代表0.5KB),其代表根据NVMe命令的指示主机需要向SSD中传输13KB的数据,但是其中真正只需要11KB数据,因此在13KB的连续的LBA空间中存在2KB空洞(不需要向该空洞传输数据)。而在主机内存中,可以用不连续的多块内存来容纳这11KB的数据。例如,可以将11KB数据放到3个大小不同的内存中,如图3中的3KB的数据块A、4KB 的数据块B和4KB的数据块C。其中,前述LBA空间中的2KB空洞存在于从 LBAx开始的7KB-9KB的区域(图3中的阴影部分)。
具体地,结合SGL来描述上述的数据传输场景。在图3中SGL使用了3 个段描述符SGL segment(例如,SGL segment 0、SGL segment 1和SGL segment 2)。其中,SGLSegment0描述将数据块A的3KB数据搬移到LBA x开始的3KB空间(也即LBA x,LBA x+6)。同时,SGL segment 0还描述了数据块A的地址(Address=A)以及下一个SGL segment 1的地址 (Address=segment 1)。SGL Segment1描述将数据块B的4KB数据搬移到 LBA空间接下来的4KB空间(也即LBA x+6,LBA x+14)。同时SGL segment 1还描述了数据块B的地址(Address=B),还描述了LBA空间再接下来的2KB 空间是空洞(称为bit buckeddescriptor,(LBA x+14,LBA x+18)),以及描述了下一个SGL segment 1的地址(Address=segment 1)。而SGL Segment2 描述将数据块C的4KB数据搬移到LBA空间接下来的4KB空间(LBA x+18, LBA x+26)。同时segment 2还描述了data block C的地址(Address=C)以及当前segment是该写命令的SGL的最后一个segment。即每个段描述符SGL segment用于描述一个或多个SGL描述符和描述下一个SGL段,其中,每个段描述符SGL segment所描述一个或多个SGL描述符包括数据块描述符和空洞描述符;而数据块描述符用于描述数据块,如SGLSegment0中描述数据块 A的3KB数据的描述符;空洞描述符用于描述空洞,如SGL segment1中描述 2KB空洞的描述符。
图4A展示了本申请实施例所提供一种控制部件的结构图。
作为举例,如图4A所示,控制部件包括DMA设备和SGL单元;其中,SGL 单元通过主机接口与主机((图中未标注))耦合以及与DMA设备耦合,通过主机接口从主机获取NVMe命令(如IO命令),并对NVMe命令进行解析得到SGL。NVMe命令在经过SGL解析后,可以根据SGL中一个或多个SGL描述符所描述的信息生成一个或多个DMA命令组。DMA命令组中的DMA命令(如数据搬移命令)经过DMA设备处理,将数据搬移到存储设备中的存储器 (同下文中存储器2)中或者从存储设备中的存储器中读取数据,该存储器为存储设备中如DRAM或SRAM存储器,而非NVM芯片(即非易失性存储器)。在数据传输过程中,例如,NVMe协议定义了传输的数据长度等于NVMe命令所指示的数据长度,才认为NVMe命令处理完成;基于此,当NVMe命令所指示的连续逻辑地址所对应的地址空间中存在空洞时,空洞的长度计入协议规定的NVMe命令要传输数据长度,依据累加的传输的数据长度识别NVMe命令对应的数据是否搬移完成。但是,由于空洞所存储的数据对应NVMe命令来说其是无效数据,在NVMe命令处理过程中,一般不希望往空洞中存入数据或者将空洞中的数据搬移到主机。本申请希望在计算校验信息,接收的数据长度不含空洞长度但要传输的数据长度包含空洞长度等,基于此,在数据搬移过程中需要对空洞所对应的无效数据作假搬移,其中,假搬移操作是对无效数据进行传输,而不将其存储到存储器(如DRAM)中。
图4B展示了本申请实施例所提供一种DMA传输的框图。
作为举例,在图4B,DMA设备包括DMA模块1、DMA模块2与缓存。 DMA设备与主机中存储器1耦合。DMA设备还耦合到存储设备中的存储器2。存储器2例如被集成到存储设备的控制部件内部,从而存储器2具有相对高的访问速度,以及相对高的单位存储容量的成本,例如存储器2是SRAM或DRAM。另外,存储器2也可作为耦合到控制部件的外部存储器。DMA模块1在存储器 1与DMA设备的缓存之间进行数据搬移,而DMA模块2在DMA设备的缓存与存储器2之间进行数据搬移。作为存储设备,为提供存储功能,控制部件还将从主机搬移到存储器2的数据写入NVM芯片,或者将从NVM芯片读出并存储在存储器2中的数据传输给主机。可选地,DMA模块1与DMA模块2为集成在DMA设备内部的DMA模块。
控制部件为DMA模块1与DMA模块2各自生成DMA命令,以指示DMA 模块1与DMA模块2的DMA传输。为生成DMA命令,控制部件管理缓存与存储器的分配与释放。作为举例,主机提供给控制部件的IO命令中,指示了IO 命令要传输的数据在主机存储器1中的地址以及要传输的数据长度。控制部件接收IO命令并对其解析得到SGL,并根据SGL中的描述符来生成DMA命令 1,DMA模块1基于DMA命令1发起DMA传输,其中,此处DMA传输是指 DMA模块1基于每个DMA命令1执行一次数据搬移。例如,若NVMe命令为写命令,DMA命令1用于将数据从存储器1搬移到DMA设备的缓存中;若 NVMe命令为读命令,DMA命令1用于将数据从DMA设备的缓存中搬移到存储器1。
又作为举例,NVMe命令所指示的SGL中可能包括一个或多个数据块描述符和/或一个或多个空洞描述符,控制部件基于每个数据块描述符生成一个DMA 命令1以及基于每个空洞描述符生成一个DMA命令1。也即本申请实施例所提供的方案中,控制部件基于SGL描述符来生成DMA模块1所执行的DMA命令1,其中,所生成的DMA命令1数目与NVMe命令所对应的SGL描述符数目有关,例如DMA命令1数目等于SGL中数据块描述符和空洞描述符之和。
为提高DMA传输效率,控制部件在DMA设备的缓存中为IO命令要传输的数据分配连续的缓存空间,其中,在DMA设备的缓存中为IO命令所分配的连续缓存空间大小为IO命令所指示的要传输数据大小。而DMA模块1以及 DMA模块2的DMA传输的数据均需占用DMA设备的缓存,例如为IO命令要传输的数据分配连续的存储空间包括为每个DMA命令1分配DMA设备缓存空间。
图5A展示了本申请实施例提供的一种DMA设备缓存空间分配示意图。
作为举例,在图5A中,控制部件基于NVMe命令所对应的SGL描述符为 DMA模块1生成DMA命令1包括DMA命令A1、DMA命令B1、DMA命令 C1、DMA命令D1。控制部件在DMA设备的缓存中为DMA命令A1分配缓存空间buffer1,为DMA命令B1分配缓存空间buffer2,为DMA命令C1分配缓存空间buffer3,以及为DMA命令D1分配缓存空间buffer4,其中,buffer1、 buffer2、buffer3以及buffer4都是一个连续的缓存空间。
又作为举例,若DMA命令A1和DMA命令B1为SGL中相邻或连续描述符所生成的DMA命令,DMA命令A1所对应的DMA设备缓存空间buffer1与 DMA命令B1所对应的DMA设备缓存空间buffer2在DMA设备缓存中相邻,且buffer2的缓存空间位于buffer1的缓存空间之后。也即,为SCL中相邻描述符所生成的DMA命令1所分配的缓存空间是相邻的,且在后的描述符所生成的 DMA命令1所对应的缓存空间位于在前描述符所生成的DMA命令1所对应的缓存空间之后。
又作为举例,还以DMA命令A1和DMA命令B1为SGL中相邻或连续描述符所生成的DMA命令为例进行说明。若DMA命令A1所指示要传输的数据长度为3KB,DMA命令B1所指示要传输的数据为2KB,即DMA命令A1所对应的DMA设备缓存空间buffer1大小为3KB,DMA命令B1所对应的DMA 设备缓存空间buffer2大小为2KB。若buffer1的起始地址为addr1,则buffer2 的起始地址为addr1+3KB。也即为SGL中相邻或连续两个描述符所生成的DMA 命令所分配的DMA设备缓存空间地址存在关联,例如,在后描述符所生成的 DMA命令所分配的DMA设备缓存空间地址等于在前描述符所生成的DMA命令所分配的DMA设备缓存空间地址与在前描述符所生成的DMA命令所分配的 DMA设备缓存空间大小之和。
由于用于DMA模块1的DMA传输的DMA命令1可以由数据块描述符生成,也可以由空洞描述符生成,而空洞所存储的数据对应NVMe命令来说其是无效数据,在NVMe命令处理过程中,一般不希望往空洞中存入数据或者将空洞中的数据搬移到主机。但是由于SGL中相邻或连续两个描述符所生成的DMA 命令所分配的DMA设备缓存空间地址存在关联,为了能够把空洞描述符之后所生成的DMA命令1所指示的数据写入正确的位置,例如在空洞描述符所对应的 DMA命令1所对应的DMA设备的缓存中填充无效数据。
为了使得DMA模块1能基于DMA命令1在存储器1与DMA设备的缓存之间进行数据搬移。作为举例,DMA命令1指示了源地址、目的地址以及所要传输的数据长度。例如,对于由数据块描述符所生成的DMA命令1。该DMA 命令1所指示的源地址为存储器1地址,目的地址为该DMA命令1所对应的 DMA设备缓存空间地址;或者该DMA命令1所指示的源地址为该DMA命令 1所对应的DMA设备缓存空间地址,目的地址为存储器1地址。对于由空洞描述符所生成的DMA命令1。该DMA命令1所指示的源地址为空,目的地址为该DMA命令1所对应的DMA设备缓存空间地址;或者该DMA命令1所指示的源地址为该DMA命令1所对应的DMA设备缓存空间地址,目的地址为空。
又作为举例,为每个DMA命令1分配DMA设备缓存空间的地址可以由指针指示。例如,若IO命令为写命令,基于指示DMA设备的缓存中写入数据的位置的写指针来指示所述DMA命令1的目的地址。又例如,若IO命令为读命令,基于指示当前从DMA设备的缓存中读取数据的位置的读指针来指示DMA 命令1的源地址。
又作为举例,响应于向DMA设备的缓存中写数据完成,基于DMA命令1 所指示的所要传输的数据长度更新写指针;或者响应于从DMA设备的缓存中读取数据完成,基于DMA命令1所指示的所要传输的数据长度更新读指针。例如,更新后写指针所指示DMA设备的缓存空间地址为更新前写指针所指示DMA 设备的缓存空间地址加上写入数据长度;更新后读指针所指示DMA设备的缓存空间地址为更新前读指针所指示DMA设备的缓存空间地址加上读取的数据长度。
进一步,为了将数据搬移到存储器2或者从存储器2搬移数据,控制部件在存储器2中,为IO命令要传输的数据分配存储空间,并生成用于DMA模块 2的DMA命令组,其中DMA命令组包括一个或多个DMA命令2。例如,每个 DMA命令组总的要传输的数据大小是指定的,如每个DMA命令组总的要传输的数据大小等于数据传输单元(Data transmission unit,DTU)大小,其中,数据传输单元是指传输数据的最小单元,例如4KB。DTU对应的逻辑地址LBA按4KB对齐,例如,某个DTU的LBA范围可以是0-3KB,但不可以是1-4KB)。 DMA模块2根据每个DMA命令2执行DMA传输,此处DMA传输是指DMA 模块2根据每个DMA命令2执行一次数据搬移,将数据从存储器2搬移到DMA 设备的缓存或者将数据从DMA设备的缓存搬移到存储器2。
作为举例,控制部件在存储器2中为一个或多个数据传输单元DTU分配存储空间,所分配存储空间的数量取决于IO命令要传输的数据占了多少了DTU。为提高存储器的利用率,在存储器2中为IO命令分配的存储空间可以是不连续的。例如,控制部件在存储器2中为一个或多个数据传输单元DTU所分配的存储空间不连续。
图5B展示了本申请实施例提供的一种为数据传输单元DTU分配存储空间的示意图。
作为举例,在图5B中,控制部件为IO命令分配三个数据传输单元,分别为DTU1、DTU2以及DTU3;在存储器2中为容纳DTU1、DTU2以及DTU3 分配了三个存储空间,分别为存储空间1、存储空间2以及存储空间3,其中,存储空间1用于容纳DTU1,存储空间2用于容纳DTU2,存储空间3用于容纳DTU3,其中,存储空间1、存储空间2以及存储空间3的大小均为4KB。而存储空间1和存储空间3为不连续存储空间,存储空间2为连续存储空间;存储空间1包括存储区域11和存储区域12,其中,存储区域11和存储区域12 之间不连续,且其大小均为2KB,且不连续,即DTU1所对应的数据在存储器 2中被存放在2个区域;存储空间3包括存储区域31和存储区域32,其中,存储区域31大小为1KB,存储区域32的大小为3KB,且存储区域31和存储区域32之间不连续,即DTU3所对应的数据在存储器2中也被存放在2个区域。控制部件根据DTU1生成DMA命令组1,根据DTU2生成DMA命令组2以及 DTU3生成DMA命令组3。
由于DTU1所对应的存储空间1包括两个存储区域,控制部件根据存储区域11生成一个DMA命令2以及根据存储区域12生成一个DMA命令2,即 DMA命令组1包括两个DMA命令2,分别为DMA命令A11和DMA命令A12。 DMA模块2根据DMA命令A11将2KB的数据从DMA设备的缓存搬移到存储区域11或者将2KB的数据从存储区域11搬移到DMA设备的缓存;以及根据 DMA命令A12将2KB的数据从DMA设备的缓存搬移到存储区域12或者将 2KB的数据从存储区域12搬移到DMA设备的缓存。由于DTU2所对应的存储空间2为连续存储空间,控制部件根据存储空间2生成一个DMA命令2,即 DMA命令组2包括一个DMA命令2,为DMA命令B。DMA模块2根据该DMA命令B将4KB的数据从DMA设备的缓存搬移到存储空间2或者将4KB 的数据从存储空间2搬移到DMA设备的缓存。由于DTU3所对应的存储空间3 包括两个存储区域,控制部件根据存储区域31生成一个DMA命令2以及根据存储区域32生成一个DMA命令2,即DMA命令组3包括两个DMA命令2,分别为DMA命令C31和DMA命令C32。DMA模块2根据DMA命令C31将 1KB的数据从DMA设备的缓存搬移到存储区域31或者将1KB的数据从存储区域31搬移到DMA设备的缓存;以及根据DMA命令C32将3KB的数据从 DMA设备的缓存搬移到存储区域32或者将3KB的数据从存储区域32搬移到 DMA设备的缓存。也即,本申请实施例所提供的方案中,若从存储器2中分配的一个或多个容纳DTU的缓存不连续,则该缓存包括多个存储区域,且多个存储区域容量和为4KB。DMA设备响应于容纳DTU的缓存不连续,根据每个DTU 的每个存储区域生成一个DMA命令2。作为举例,根据每个DTU所生成的DMA 命令组包括一个或多个DMA命令2。
又作为举例,每个DMA命令2指示了当前从DMA设备缓存中读取数据的位置、要传输的数据的大小以及在存储器2中的存储区域的位置;基于要传输的数据的大小更新从DMA设备缓存中读取数据的位置。例如,一个DMA命令2,记为CMD2(s_buffer_RP,sub_buffer,length),其中s_buffer_RP指示当前从DMA设备缓存中读出数据的位置,读数据完成后根据如下公式更新从DMA设备缓存中读取数据的位置s_buffer_RP=s_buffer_RP+length,length是当前要读取的数据的大小;sub_buffer是当前的存储器2中存储空间的地址。
图6A展示了本申请实施例所提供的DMA传输的流程示意图。
作为举例,在图6A中,主机向存储设备提供的IO命令,存储设备的控制部件,响应于接收了IO命令,并执行如下步骤以实现对IO命令所指示的数据的DMA传输。
步骤601,控制部件为IO命令在DMA设备的缓存中分配连续的缓存空间,根据所述IO命令获取SGL,并根据SCL中每个描述符生成DMA命令1(如图 4B所示),DMA命令1用于描述从存储器1(如图4B所示的存储器1)向DMA 设备缓存空间的DMA传输。
步骤602,控制部件中DMA模块1(参见图4B)基于DMA命令1发起第一DMA传输(如存储器1与DMA设备缓存之间的DMA传输)。
步骤603,控制部件为所述IO命令分配一个或多个数据传输单元DTU,根据每个DTU生成DMA命令组,DMA命令组包括一个或多个DMA命令2(参见图4B),DMA命令2用于描述从DMA设备缓存到存储器空间2的DMA传输。
步骤604,控制部件中DMA模块2基于DMA命令2发起DMA传输(如 DMA设备缓存到存储器空间2的DMA传输)。
图6B展示了本申请实施例所提供的DMA传输的示意图。
DMA模块1(也参看图4B)将存储器1的数据,通过DMA传输搬移到 DAM设备缓存,DMA模块2将DAM设备缓存的数据通过DMA搬移到存储器2。
作为举例,前述的DMA设备执行DMA传输的DMA命令可以根据NVMe 命令来生成。具体地,响应于收到NVMe命令,生成一个或多个DMA命令对,其中,DMA命令对包括一个DMA命令1和DMA命令2,即DMA命令1和 DMA命令2成对出现,DMA命令1的数目与DMA命令2的数目有关。在一些实施场景中,还可以在收NVMe命令时,生成可以生成一个或多个DMA命令1 与一个或多个DMA命令2,此处DMA命令1和DMA命令2可以不成对,DMA 命令1的数目与DMA命令2的数目无关,例如,DMA命令1数目与NVMe命令所指示的数据块描述符和/或空洞描述符有关,DMA命令2数据与为NVMe 命令分配的DTU数目以及在存储器2中为每个DTU所分配的存储区域数目有关。
若NVMe命令为写命令,DMA模块1可以响应于执行DMA命令1将其所指示的待搬移数据从存储器1搬移到DMA设备缓存中,DMA模块2响应于执行DMA命令2将其所指示的待搬移数据从DMA设备缓存搬移至存储器2。应理解,DMA模块1和DMA模块2在执行数据搬移时,并不是DMA模块1执行完成一次数据搬移,DMA模块2就可以基于DMA命令2执行一次数据搬移。例如,对于写命令,响应于DMA模块1从存储器1搬移到DMA设备缓存中的数据不小于一个DTU的数据时,DMA模块2可以基于DMA命令2执行一次数据搬移。或者DMA模块1将NVMe命令所要传输的全部数据都搬移到DMA 设备缓存中,DMA模块2开始执行数据搬移,具体DMA模块2执行DMA命令时机在此并不做限制。
作为举例,在图6B中,控制部件基于NVMe命令生成4个DMA命令1 (HL1、HL2、HL3以及HL4)以及5个DMA命令2(DL1、DL2、DL3、DL4 以及DL5),其中,HL1所指示要传输的数据1大小为2KB,HL2所指示的要传输的数据2大小为2KB,HL3所指示的要传输的数据3大小为4KB以及HL4 所指示的要传输的数据4大小为4KB。DL1指示要传输的数据大小为1KB、DL2 所指示要传输的数据大小为2KB、DL3所指示要传输的数据大小为1KB、DL4 所指示要传输的数据大小为4KB以及DL5所指示要传输的数据大小为4KB。
DMA模块1根据DMA命令1(HL1、HL2、HL3与HL4)进行DMA传输。每个DMA命令1记录了例如源地址、目的地址与数据长度。在图6B的例子中,源地址是存储器1地址,目的地址是DAM设备缓存的地址(也称为缓存地址)。可选地,DMA命令1也描述从DAM设备缓存到存储器1的DMA传输。例如, DMA模块1基于HL1命令将数据1从存储器1搬移到DMA设备缓存,然后基于HL2命令将数据2从存储器1搬移到DMA设备缓存,此时,DMA设备缓存所存储的数据大小为4KB,DMA模块2可以执DMA传输,如DMA模块2基于DL1、DL2以及DL3执行三次数据搬移将数据1和数据2所对应的4KB从 DMA设备缓存搬移到存储器2,进而实现将数据1和数据2从存储器1搬移到存储器2。DMA模块1执行HL3将数据3从存储器1搬移到DMA设备缓存,然后,DMA模块2执行DL4将数据3从DMA设备缓存搬移到存储器2,进而实现将数据3从存储器1搬移到存储器2。DMA模块1执行HL4将数据4从存储器1搬移到DMA设备缓存,然后,DMA模块2执行DL5将数据4从DMA 设备缓存搬移到存储器2,进而实现将数据4从存储器1搬移到存储器2。又例如,DMA模块1基于HL1、HL2、HL3以及HL4将NVMe命令所对应的所有数据均搬移到DMA设备缓存中之后,DMA模块2执行DL1、DL2、DL3、DL4 以及DL5将所有数据从DMA设备缓存搬移到存储器2,具体DMA模块1和 DMA模块2搬移数据的过程在此不做赘述。
进一步,由于DMA模块1所执行DMA命令1可以是由空洞描述符所生成的,而前文已将讲述过在空洞描述符所对应的DMA命令1所对应的DMA设备的缓存中填充无效数据,无效数据一般不希望往空洞中存入数据或者将空洞中的数据搬移到主机。在数据搬移过程中,为了识别所搬移的数据是无效数据还是有效数据。控制部件在生成DMA命令2时,若DMA设备缓存空间存在无效数据,对于基于该无效数据所对应的DMA设备缓存空间的地址,在生成该地址所对应的DMA命令2时,还在该DMA命令2中标记无效数据在DMA设备缓存空间中存储的范围,以便无效数据可以用标识进行标注以使得DMA模块2在基于DMA命令2从DMA设备缓存空间中要读取无效数据时其能识别出存在无效数据。
又作为举例,DMA模块2响应于处理标记无效数据范围的DMA命令2,在传输到无效数据部分时,在总线上生成指示数据无效的无效信号。例如,该无效信号为是遵循AXI协议的指示数据无效的WSTRB信号。
图6C展示了本申请实施例所提供的根据IO命令生成DMA命令的示意图。
参看图6C,作为举例,主机向存储设备提供的IO命令指示了用于向存储设备传输数据的一个或多个DMA命令510。
存储设备的控制部件,响应于接收了IO命令,为接收IO命令要传输的完整数据,而在DMA设备缓存(也参看图4B)中分配连续存储空间,使得在DMA 设备缓存中分配的连续存储空间能容纳IO命令要传输的完整数据。可选地,若 DMA设备缓存暂时无法提供连续的存储空间容纳IO命令要传输的完整数据,控制部件暂停对IO命令的处理,直到从DMA设备缓存可获得足够的连续存储空间。控制部件用DMA设备缓存中分配给IO命令要传输的完整数据的存储空间的地址生成一个或多个DMA命令540。每个DMA命令540指示了从存储器 1(也参看图4B)到DMA设备缓存的数据传输。对于每个DMA命令510目通过为其添加作为目的地址的DMA设备缓存的地址,来生成对应的DMA命令 540。可选地,DMA命令540,描述了从存储器1到DMA设备缓存的3次源地址与目的地址各自都连续的DMA传输。
响应于生成了DMA命令540,DMA模块1(参看图4B)发起从存储器1 到DMA设备缓存的DMA传输。响应于DMA命令540所指示的DMA传输完成,可向主机指示对应于DMA命令510的IO命令(写命令)的执行完成。
以及响应于生成了DMA命令540,而开始生成DMA命令550。DMA命令 550用于描述从DMA设备缓存到存储器2的DMA传输。控制部件在存储器2 中分配一段或多段存储空间,以容纳DMA命令510(DMA命令540)要搬移的完整数据。作为举例,从存储器2中分配了6段存储空间来容纳DMA命令 510要搬移的完整数据。对于每个DMA命令540,将其DMA设备缓存地址作为DMA命令550的源地址,例如,对于一个DMA命令540(例如编号为0的 DMA命令540),DMA设备缓存0x2C00,将从存储器2获取的存储空间段之一(记为S1)的地址(例如设备存储器(存储器2)的地址0x0800)作为一个 DMA命令550(如编号为0的DMA命令550)的目的地址。由于存储器2的存储空间段S1的大小为0x0800,不足以容纳该DMA命令540所指示的所有数据,在该DMA命令550中,指示传输的数据长度等于存储空间段S1的大小,还生成另一个DMA命令550(如编号为1的DMA命令550),以继续传输缓存该DMA命令540所指示的数据,将该DMA命令540余下的数据(在DMA 设备缓存中地址为0x3400,长度为0x0400)搬移到存储器2的另一存储空间段(S2)(例如设备存储器(存储器2)的地址0x2400),从而DMA命令550 (编号为1的DMA命令550)具有源地址(DMA设备缓存的地址0x3400)、目的地址(存储器2的地址0x2400)以及数据长度为0x0400。
响应于生成了一个或多个DMA命令550,DMA模块2(参看图4B)发起从DMA设备缓存到存储器2的DMA传输。以及响应于将DMA命令550对应的DMA传输执行完成,可释放DMA命令550在DMA设备缓存中占用的存储空间。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种DMA传输的方法,其特征在于,包括:
为IO命令在DMA设备的缓存中分配连续的缓存空间,根据所述IO命令获取SGL,并根据SCL中每个描述符生成第一DMA命令,所述第一DMA命令用于描述从第一存储器空间向DMA设备缓存空间的DMA传输;
基于所述第一DMA命令发起第一DMA传输;
为所述IO命令分配一个或多个数据传输单元DTU,根据每个DTU生成DMA命令组,DMA命令组包括一个或多个第二DMA命令,第二DMA命令用于描述从缓存空间到第二存储器空间的DMA传输;
基于所述第二DMA命令发起第二DMA传输。
2.根据权利要求1所述的方法,其特征在于,根据SCL中每个描述符生成第一DMA命令,包括:
根据所述SCL中每个空洞描述符生成一个第一DMA命令;以及
根据所述SCL中每个数据块描述符生成一个第一DMA命令。
3.根据权利要求1或2所述的方法,其特征在于,为IO命令在DMA设备的缓存中分配连续的缓存空间,包括:
为每个第一DMA命令分配连续的DMA设备缓存空间。
4.根据权利要求3所述的方法,其特征在于,为SCL中相邻描述符所生成的第一DMA命令所分配的缓存空间是相邻的,且在后的描述符所生成的第一DMA命令所对应的缓存空间位于在前描述符所生成的第一DMA命令所对应的缓存空间之后。
5.根据权利要求2-4任一项所述的方法,其特征在于,
根据空洞描述符生成的第一DMA命令,要在该第一DMA命令所对应的DMA设备的缓存中填充无效数据,以使得能够把后续第一DMA命令所指示的数据写入正确的位置。
6.根据权利要求1-5任一项所述的方法,其特征在于,还包括:为IO命令在第二存储器中分配一个或多个容纳DTU的缓存。
7.根据权利要求6所述的方法,其特征在于,若从第二存储器中分配的一个或多个容纳DTU的缓存不连续,则所述缓存包括多个存储区域,且多个存储区域容量和为4KB。
8.根据权利要求7所述的方法,其特征在于,响应于容纳DTU的缓存不连续,根据每个DTU的每个存储区域生成一个第二DMA命令。
9.根据权利要求5-8任一项所述的方法,其特征在于,响应于基于第二DMA命令从DMA设备缓存空间中要读取的数据存在无效数据,在该第二DMA命令中还标记无效数据在DMA设备缓存空间中存储的范围。
10.一种控制部件,其特征在于,包括:SGL单元以及DMA设备;
所述SGL单元,响应于收到IO命令,为IO命令在DMA设备的缓存中分配连续的缓存空间,根据所述IO命令获取SGL,并根据SCL中每个描述符生成第一DMA命令,所述第一DMA命令用于描述从第一存储器空间向DMA设备缓存空间的DMA传输;以及
为所述IO命令分配一个或多个数据传输单元DTU,根据每个DTU生成DMA命令组,DMA命令组包括一个或多个第二DMA命令,第二DMA命令用于描述从缓存空间到第二存储器空间的DMA传输;
所述DMA设备基于所述第一DMA命令发起第一DMA传输;以及基于所述第二DMA命令发起第二DMA传输。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211021951.8A CN115599718A (zh) | 2022-08-24 | 2022-08-24 | 一种dma传输的方法及控制部件 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211021951.8A CN115599718A (zh) | 2022-08-24 | 2022-08-24 | 一种dma传输的方法及控制部件 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115599718A true CN115599718A (zh) | 2023-01-13 |
Family
ID=84842569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211021951.8A Pending CN115599718A (zh) | 2022-08-24 | 2022-08-24 | 一种dma传输的方法及控制部件 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115599718A (zh) |
-
2022
- 2022-08-24 CN CN202211021951.8A patent/CN115599718A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI428917B (zh) | 快閃記憶裝置、資料儲存系統、以及資料儲存系統之運作方法 | |
KR102641521B1 (ko) | 키-밸류 스토리지 장치 및 이의 동작 방법 | |
KR100708128B1 (ko) | 낸드 플래시 메모리 제어 장치 및 방법 | |
TWI715248B (zh) | 主機輸出入命令的執行裝置及方法及電腦程式產品 | |
CN108228470B (zh) | 一种处理向nvm写入数据的写命令的方法和设备 | |
CN108628543B (zh) | 垃圾回收方法以及使用该方法的装置 | |
WO2015176664A1 (zh) | 一种数据操作的方法、设备和系统 | |
CN109471819A (zh) | 为来自主机的读取请求提供短的读取响应时间的存储设备 | |
KR20180126656A (ko) | 데이터 저장 장치 및 그것의 동작 방법 | |
TWI626540B (zh) | 一般及垃圾回收的資料存取方法以及使用該方法的裝置 | |
CN114253461A (zh) | 混合通道存储设备 | |
TWI724483B (zh) | 資料儲存裝置以及非揮發式記憶體控制方法 | |
CN214376421U (zh) | Ftl加速器及控制部件 | |
CN114253462A (zh) | 提供混合通道存储设备的方法 | |
CN118092807A (zh) | 缓存空间调配方法及存储器存储装置 | |
CN110865945B (zh) | 存储设备的扩展地址空间 | |
CN115599718A (zh) | 一种dma传输的方法及控制部件 | |
CN213338708U (zh) | 一种控制部件及存储设备 | |
CN110968527A (zh) | Ftl提供的缓存 | |
CN110096452A (zh) | 非易失随机访问存储器及其提供方法 | |
CN108536475B (zh) | 完整编程命令处理方法与装置 | |
CN110865952B (zh) | 利用缓存优化dma传输 | |
CN114840447B (zh) | 一种加速器 | |
US20240231698A1 (en) | Storage devices and operating methods thereof | |
US20240201879A1 (en) | Storage device, storage device operating method and resource management device for determining unit of data required for operation of resources of storage device based on access pattern of host device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |