CN112988623B - 加速sgl处理的方法与存储设备 - Google Patents
加速sgl处理的方法与存储设备 Download PDFInfo
- Publication number
- CN112988623B CN112988623B CN201911300669.1A CN201911300669A CN112988623B CN 112988623 B CN112988623 B CN 112988623B CN 201911300669 A CN201911300669 A CN 201911300669A CN 112988623 B CN112988623 B CN 112988623B
- Authority
- CN
- China
- Prior art keywords
- host
- space
- sgl
- descriptor
- dtu
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
- G06F3/0607—Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0882—Page mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
公开了加速SGL处理的方法与存储设备。所公开的加速SGL处理的方法,包括:获取IO命令关联的SGL;根据所述SGL生成主机空间描述符列表与DTU描述符列表;根据DTU描述符列表的DTU描述符获取主机空间描述符列表的一个或多个主机空间描述符;以及根据获取的一个或多个主机空间描述符发起数据传输。
Description
技术领域
本申请涉及数据处理技术,尤其涉及在存储设备中加速处理根据SGL(Scatter-Gather List,分散-收集列表)访问数据的方法与使用该方法的存储设备。
背景技术
图1A展示了固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(SerialAdvancedTechnologyAttachment,串行高级技术附件)、SCSI(SmallComputer System Interface,小型计算机系统接口)、SAS(Serial Attached SCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal SerialBus,通用串行总线)、PCIE(Peripheral Component Interconnect Express,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。
NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(MagneticRandomAccess Memory,磁阻存储器)、RRAM(Resistive Random Access Memory,阻变存储器)等是常见的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”等。
存储器目标(Target)是NAND闪存封装内的共享CE(,Chip Enable,芯片使能)信号的一个或多个逻辑单元(LUN,Logic UNit)。NAND闪存封装内可包括一个或多个管芯(Die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(Plane)。逻辑单元内的多个平面可以并行存取,而NAND闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。
存储介质上通常按页来存储和读取数据。而按块来擦除数据。块(也称物理块)包含多个页。块包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。
在存储设备中,利用FTL(FlashTranslation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在相关技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是存储设备中的重要元数据。FTL表的数据项记录了存储设备中以数据单元为单位的地址映射关系。
NVMe协议1.4版本提供了存储设备使用主机的存储器(内存,Memory)的方案。被存储设备使用的主机存储器称为HMB(Host Memory Buffer,主机存储器缓存)。
图1B展示了HMB的示意图。
HMB是利用主机存储器(例如,内存)而供存储设备使用的存储空间。通过使用HMB,存储设备102可以省去DRAM 110以进一步降低成本。也有其他使用HMB的方式,而不必省去DRAM 110。
根据NVMe协议,存储设备可以向主机申请使用HMB。HMB在主机存储器中的分布可以是离散而非连续的,用主机存储器描述符列表(Host Memory Descr iptor L i st,简记为HMBDL)描述主机为提供HMB所使用的一个或多个存储块的地址。
主机存储器描述符列表的条目描述主机为HMB提供的一个存储块,包括存储块的起始地址与存储块的大小,从而主机存储器描述符列表的各条目所描述的存储块的大小可以不同。主机存储器描述符列表描述的所有存储块共同构成了主机向存储设备提供的HMB。
图2展示了HMB与HMBDL的示意图。
作为举例,主机向存储设备提供了总计64KB大小的HMB,由4个存储块共同提供HMB。图2中,存储块0大小为16KB、存储块1大小为32KB、存储块2大小为4KB而存储块3大小为12KB,这4个存储块共同提供了64KB大小的存储空间。HMBDL包括4个条目(HMBDL条目0、HMBDL条目1、HMBDL条目2与HMBDL条目3),每个条目分别记录了对应的存储块之一的起始地址与大小。从而通过HMBDL,存储设备得知主机为其提供的HMB,并得以使用该HMB。
存储设备的控制部件需要使用HMB。通常,控制部件有自己的地址空间,并且通过访问地址空间来使用存储器或控制部件的各单元。控制部件的地址空间不同于主机的地址空间。为了能使用HMB,控制部件需要在自己的地址空间与主机的地址空间建立映射关系,从而使得控制部件得以按使用自己的地址空间的方式或者类似的方式使用HMB。
也参看图2,控制部件使用控制部件地址空间(从控制部件地址0~控制部件64KB-1)访问HMB,并且图2也展示了控制部件地址空间同HMBDL所描述的各存储块的对应关系。控制部件地址空间的0~16KB-1地址范围被映射到存储块0,控制部件地址空间的16KB~48KB-1地址范围被映射到存储块1,控制部件地址空间的48KB~52KB-1地址范围被映射到存储块2,控制部件地址空间的52KB~64KB-1地址范围被映射到存储块3。并且在各存储块内部同控制部件地址空间是线性映射。
控制部件为使用控制部件地址空间的地址访问HMB,需要遍历HMBDL来计算出主机地址。例如,存储设备要访问控制部件地址空间的地址为60KB的位置,通过下面的步骤来得到主机地址。
(1)访问HMBDL的第1个条目(例如,图2的HMBDL条目0),得到其对应的存储块0大小为16KB,小于60KB,说明要访问控制部件地址空间的地址60KB没有落在存储块0的地址范围。
(2)访问HMBDL的下一个条目(图2的HMBDL条目1),得到对应的存储块1的大小为32KB,将已经访问的存储块的大小累加,16+32=48KB<60KB,说明要访问控制部件地址空间的地址60KB没有落在存储块1的地址范围。
(3)访问HMBDL的再下一个条目(图2的HMBDL条目2),得到对应的存储块2的大小为4KB,将已经访问的存储块的大小累加为52KB(<60KB),说明要访问控制部件地址空间的地址60KB没有落在存储块2的地址范围。
(4)访问HMBDL的再下一个条目(图2的HMBDL条目3),得到对应的存储块3的大小为12KB,将已经访问的存储块的大小累加为64KB(>60KB),说明要访问控制部件地址空间的地址60KB落在存储块3的地址范围。
(5)从得到HMBDL条目3得到存储块3的起始地址作为基地址,用要访问控制部件地址空间的地址(60K)减去已经遍历过的所有存储块的地址(16+32+4=52KB),得到8KB作为偏移值,用基地址加偏移值得到访问HMB的主机地址。
发明内容
为了使用HMB,在每次访问HMB都需要遍历HMBDL的一个或多个条目,并计算主机地址,最坏情况下,需要遍历整个HMBDL才能得到同要访问控制部件地址空间的地址对应的主机地址,访问效率低并且导致HMB的访问延迟不一致。在HMB空间较大和/或提供HMB的存储块较多的情况下,HMB的访问效率变得更差。希望解决上面发现的访问HMB的问题。
本申请提出了新的控制部件访问HMB的方案,提高访问HMB的效率,缩短HMB的访问时间。
根据本申请第一方面,提供了根据本申请第一方面的第一快速访问主机存储器缓存的方法,其中,具体包括以下步骤:响应于访问主机存储器缓存,获取控制部件地址空间的地址;根据控制部件地址空间的地址,获取对应的映射表的条目编号与偏移值;根据条目编号得到对应的存储小块的起始地址;根据存储小块的起始地址与偏移值组合,得到与控制部件地址空间的地址对应的主机地址,用该地址访问主机存储器缓存。
根据本申请第一方面的第一快速访问主机存储器缓存的方法,提供了本申请第一方面的第二快速访问主机存储器缓存的方法,其中,还包括,在初始化阶段建立映射表,映射表表项中记录了同控制部件地址空间的地址对应的主机地址。
根据本申请第一方面的第一或第二快速访问主机存储器缓存的方法,提供了本申请第一方面的第三快速访问主机存储器缓存的方法,其中,映射表中包括若干个条目,根据内存页大小描述的大小确定映射表中每个条目所对应的控制部件地址空间的大小。
根据本申请第一方面的第三快速访问主机存储器缓存的方法,提供了本申请第一方面的第四快速访问主机存储器缓存的方法,其中,根据内存页大小描述的大小以及主机提供的主机存储器缓存的大小,确定映射表条目的数量。
根据本申请第一方面的第一至四任一项快速访问主机存储器缓存的方法,提供了本申请第一方面的第五快速访问主机存储器缓存的方法,其中,主机存储器缓存中包括多个存储块,根据内存页大小将每个存储块进行拆分为一个或多个存储小块,每个存储小块的大小为内存页大小。
根据本申请第一方面的第三至五任一项快速访问主机存储器缓存的方法,提供了本申请第一方面的第六快速访问主机存储器缓存的方法,其中,映射表的条目数量与划分的主机存储器缓存中的存储块的存储小块的数量相同。
根据本申请第一方面的第一至六任一项快速访问主机存储器缓存的方法,提供了本申请第一方面的第七快速访问主机存储器缓存的方法,其中,映射表的每个条目指示了控制部件地址空间的地址同存储小块的映射关系,从而每个条目中记录了与该条目对应的存储小块的主机地址空间的地址。
根据本申请第一方面的第一至七任一项快速访问主机存储器缓存的方法,提供了本申请第一方面的第八快速访问主机存储器缓存的方法,其中,映射表记录在控制部件内部的存储器中,或记录在同控制部件耦合的动态随机访问存储器中。
根据本申请第一方面的第八快速访问主机存储器缓存的方法,提供了本申请第一方面的第九快速访问主机存储器缓存的方法,其中,通过查询映射表的某一条目得到与该条目对应的存储小块在主机地址空间中的地址,并使用查询到的存储小块的在主机地址空间中的地址访问主机存储器缓存。
根据本申请第一方面的第八快速访问主机存储器缓存的方法,提供了本申请第一方面的第十快速访问主机存储器缓存的方法,其中,通过查询映射表的某一条目得到与该条目对应的存储小块在主机地址空间中的起始地址,将起始地址加上偏移值得到要访问的在在主机地址空间中的地址来访问主机存储器缓存。
根据本申请第一方面的第一至十快速访问主机存储器缓存的方法,提供了本申请第一方面的第十一快速访问主机存储器缓存的方法,其中,将控制部件地址空间的地址除以内存页大小,得到的商为条目的编号,得到的余数作为偏移值。
根据本申请第一方面的第十一快速访问主机存储器缓存的方法,提供了本申请第一方面的第十二快速访问主机存储器缓存的方法,其中,将控制部件地址空间的地址的指定比特作为条目编号,将其他比特作为偏移值。
根据本申请第二方面,提供了根据本申请第二方面的第一存储设备,其中,包括控制部件与非易失存储介质,所述控制部件执行第一方面的方法。
根据本申请第三方面,提供了根据本申请第三方面的第一加速SGL处理的方法,其特征在于,包括:获取IO命令关联的SGL;根据所述SGL生成主机空间描述符列表与DTU描述符列表;根据DTU描述符列表的DTU描述符获取主机空间描述符列表的一个或多个主机空间描述符;以及根据获取的一个或多个主机空间描述符发起数据传输。
根据本申请第三方面的第一加速SGL处理的方法,提供了根据本申请第三方面的第二加速SGL处理的方法,其特征在于,其中,主机空间描述符列表包括多个主机空间描述符,所述多个主机空间描述符的每个记录了主机内存地址与长度,并且具有相同的尺寸。
根据本申请第三方面的第二加速SGL处理的方法,提供了根据本申请第三方面的第三加速SGL处理的方法,其中所述多个主机空间描述符在存储器中连续存储。
根据本申请第三方面的第二或第三加速SGL处理的方法,提供了根据本申请第三方面的第四加速SGL处理的方法,其中,所述主机空间描述符列表的多个主机空间描述符被分为多组,DTU描述符表的DTU描述符索引了一组主机空间描述符,一组主机空间描述符的所有主机空间描述符所记录的长度之和等于DTU的长度。
根据本申请第三方面的第四加速SGL处理的方法,提供了根据本申请第三方面的第五加速SGL处理的方法,其中根据所述SGL中的连续的一个或多个SGL描述符,生成所述一组主机空间描述符,其中所述连续的一个或多个SGL描述符所指示的主机内存空间的大小大于或等于DTU的长度;若所述连续的一个或多个SGL描述符所指示的主机内存空间的大小大于DTU的长度,所述连续的一个或多个SGL描述符的最后一个SGL描述符所指示的主机内存空间被拆分,以使得所述连续的一个或多个SGL描述符所指示的主机内存空间的大小等于DTU的长度。
根据本申请第三方面的第五加速SGL处理的方法,提供了根据本申请第三方面的第六加速SGL处理的方法,其中若所述连续的一个或多个SGL描述符所指示的主机内存空间的大小大于DTU的长度,将所述最后一个SGL描述符被拆分后超出所述DTU的长度的剩余的主机内存空间,作为下一个新的SGL描述符描述的主机内存空间。
根据本申请第三方面的第一至第四加速SGL处理的方法之一,提供了根据本申请第三方面的第七加速SGL处理的方法,其中从所述SGL获取第一SGL描述符;获取所述第一SGL描述符对应的剩余主机DTU空间的大小;若所述第一SGL描述符对应的剩余主机DTU空间小于DTU大小,根据所述第一SGL描述符生成主机空间描述符,生成的该主机空间描述符指示了所述第一SGL描述符对应的全部剩余主机DTU空间。
根据本申请第三方面的第七加速SGL处理的方法,提供了根据本申请第三方面的第八加速SGL处理的方法,其中若所述第一SGL描述符对应的剩余主机DTU空间等于DTU大小,根据所述第一SGL描述符生成主机空间描述符,生成的该主机空间描述符指示了等于DTU大小的主机内存空间。
根据本申请第三方面的第八加速SGL处理的方法,提供了根据本申请第三方面的第九加速SGL处理的方法,还包括:为下一个主机DTU空间生成主机空间描述符而从所述SGL获取下一SGL描述符。
根据本申请第三方面的第七至第九加速SGL处理的方法之一,提供了根据本申请第三方面的第十加速SGL处理的方法,其中若所述第一SGL描述符对应的剩余主机DTU空间大于DTU大小,根据所述第一SGL描述符生成主机空间描述符,生成的该主机空间描述符指示了等于DTU大小的主机内存空间。
根据本申请第三方面的第十加速SGL处理的方法,提供了根据本申请第三方面的第十一加速SGL处理的方法,11,根据权利要求10所述的加速SGL处理的方法,其中为下一个主机DTU空间生成主机空间描述符而获取所述第一SGL描述符对应的剩余主机DTU空间的大小。
根据本申请第三方面的第七至第十一加速SGL处理的方法,提供了根据本申请第三方面的第十二加速SGL处理的方法,其中若所述第一SGL描述符对应的剩余主机DTU空间小于DTU大小,响应于根据所述第一SGL描述符生成主机空间描述符,还获取当前剩余主机DTU空间大小,从所述SGL获取第二SGL描述符,获取所述第二SGL描述符对应的剩余主机DTU空间的大小;若所述第二SGL描述符对应的剩余主机DTU空间的大小小于DTU大小,根据所述第二SGL描述符生成主机空间描述符,生成的该主机空间描述符指示了所述第二SGL描述符对应的全部剩余主机DTU空间。
根据本申请第三方面的第十二加速SGL处理的方法,提供了根据本申请第三方面的第十三加速SGL处理的方法,还包括:再从所述SGL获取新的第二SGL描述符。
根据本申请第三方面的第十二或第十三加速SGL处理的方法,提供了根据本申请第三方面的第十四加速SGL处理的方法,还包括:若所述第二SGL描述符对应的剩余主机DTU空间的大小等于DTU大小,根据所述第二SGL描述符生成主机空间描述符,生成的该主机空间描述符指示了等于DTU大小的主机内存空间。
根据本申请第三方面的第十四加速SGL处理的方法,提供了根据本申请第三方面的第十五加速SGL处理的方法,还包括:为下一个主机DTU空间生成主机空间描述符而从所述SGL获取下一SGL描述符。
根据本申请第三方面的第十二至第十五加速SGL处理的方法,提供了根据本申请第三方面的第十六加速SGL处理的方法,还包括:若所述第二SGL描述符对应的剩余主机DTU空间的大小大于DTU大小,根据所述第二SGL描述符生成主机空间描述符,生成的该主机空间描述符指示了等于DTU大小的主机内存空间。
根据本申请第三方面的第十六加速SGL处理的方法,提供了根据本申请第三方面的第十七加速SGL处理的方法,还包括:为下一个主机DTU空间生成主机空间描述符而获取所述第二SGL描述符对应的剩余主机DTU空间的大小。
根据本申请第三方面的第一至第十七加速SGL处理的方法之一,提供了根据本申请第三方面的第十八加速SGL处理的方法,其特征在于,其中,DTU描述符列表包括多个DTU描述符,所述多个DTU描述符的每个记录了主机空间描述符的地址与数量,并且具有相同的尺寸。
根据本申请第三方面的第十八加速SGL处理的方法,提供了根据本申请第三方面的第十九加速SGL处理的方法,19、根据权利要求18所述的加速SGL处理的方法,其中所述多个DTU描述符在存储器中连续存储。
根据本申请第三方面的第十八或十九加速SGL处理的方法,提供了根据本申请第三方面的第二十加速SGL处理的方法,其中DTU描述符列表中的多个DTU描述符依次关联于所述IO命令所访问的连续逻辑地址空间。
根据本申请第三方面的第一至第二十加速SGL处理的方法之一,提供了根据本申请第三方面的第二十一加速SGL处理的方法,其中从前向后遍历所述主机空间描述符列表,每获取其对应的主机内存空间大小等于DTU大小的一个或多个主机空间描述符,将这些一个或多个主机空间描述符作为一组,并为该组生成DTU描述符,生成的DTU描述符记录该组主机空间描述符的第一个的地址,该DTU描述符还记录该组主机空间描述符的数量或占据的存储空间的长度。
根据本申请第三方面的第一至第十七加速SGL处理的方法,提供了根据本申请第三方面的第二十二加速SGL处理的方法,其中若所述SGL中的一个或多个SGL描述符指示了比特桶,在根据这些一个或多个SGL描述符生成的主机空间描述符中设置比特桶标记。
根据本申请第三方面的第一至第二十二加速SGL处理的方法,提供了根据本申请第三方面的第二十三加速SGL处理的方法,其中若根据DTU描述符列表的DTU描述符获取的主机空间描述符列表的一个或多个主机空间描述符带有比特桶标记;根据获取的带有比特桶标记的每个主机空间描述符不发起数据传输。
根据本申请第三方面的第一至第二十三加速SGL处理的方法,提供了根据本申请第三方面的第二十四加速SGL处理的方法,其中根据获取的主机空间描述符操作DMA单元发起数据传输,其中所述主机空间描述符指示的主机内存地址作为数据传输的一端,而索引了所述主机空间描述符的DTU描述符所对应的DTU作为数据传输的一端。
根据本申请第三方面的第一至第二十四加速SGL处理的方法,提供了根据本申请第三方面的第二十五加速SGL处理的方法,其中若所述IO命令是读命令,被发起的所述数据传输将索引了所述主机空间描述符的DTU描述符所对应的存储设备的存储器中的DTU的数据搬移到所述主机空间描述符指示的主机内存地址所代表的主机内存。
根据本申请第三方面的第一至第二十五加速SGL处理的方法,提供了根据本申请第三方面的第二十六加速SGL处理的方法,其中若所述IO命令是写命令,被发起的所述数据传输将所述主机空间描述符指示的主机内存地址所代表的主机内存中的数据搬移到索引了所述主机空间描述符的DTU描述符所对应的存储设备的存储器中的DTU。
根据本申请的第四方面,提供了根据本申请第四方面的第一存储设备,其特征在于,包括控制部件与非易失存储介质,所述控制部件执行根据本申请第三方面的第一至第二十六加速SGL处理的方法之一。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1A是现有技术的固态存储设备的框图;
图1B是现有技术中的HMB的示意图;
图2是现有技术中HMB与HMBDL的映射示意图;
图3是本申请实施例的控制部件地址空间到主机地址空间映射的示意图;
图4是根据本申请实施例将控制部件地址空间地址转换为主机地址空间地址的流程图;
图5A展示了NVMe协议中的SGL分段的示意图;
图5B展示了SGL描述符的示意图;
图5C展示了SGL描述符类型的示意图;
图6展示了现有技术的根据SGL传输数据的示意图;
图7展示了根据现有技术的SGL的详细示意图;
图8展示了根据本申请实施例的主机空间描述符示意图;
图9展示了根据本申请实施例生成主机空间描述符列表的流程图;
图10展示了根据本申请实施例处理写命令的示意图;
图11展示了根据本申请又一实施例的主机空间描述符示意图;以及
图12展示了根据本申请实施例处理读命令的示意图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图3展示了根据本申请实施例的控制部件地址空间到主机地址空间映射的示意图。
参看图3的实施例,通过创建映射表,在控制部件地址空间与主机地址空间建立直接映射关系。根据HMBDL建立映射表,在得到映射表后,根据控制部件地址空间的地址,查询映射表,在查询到的映射表表项中记录了同控制部件地址空间的地址对应的主机地址。从而无论要访问的控制部件地址空间的地址为何值,查询映射表的延迟都是一致的,为访问映射表的时间。
映射表包括多个条目。图3中展示的映射表包括条目0、条目1|……条目15,共计16个条目。根据NVMe协议的CC.MPS(内存页大小)描述的大小确定映射表的条目所对应的同控制部件地址空间的大小。作为举例,CC.MPS描述的内存页大小为4KB,则按照每个条目代表4KB空间来创建映射表。以及根据主机提供的HMB的大小,确定映射表的条目数量。例如,在HMB的大小为64KB时,映射表需要16个条目(64/4=16)。
将主机提供给HMB的所有存储块,也按CC.MPS描述的大小拆分,拆分为多个存储小块。CC.MPS描述的是最小内存分配单元,从而主机提供给HMB的所有存储块的大小都必然是CC.MPS的整数倍。通过遍历HMBDL,获得主机提供给HMB的所有存储块,将每个存储块拆分为存储小块。
作为举例,也参看图3,HMB包括存储块0、存储块1、存储块2与存储块3。存储块0的大小为16KB,CC.MPS描述的内存页大小为4KB,则将存储块0拆分为连续排布的4个存储小块,存储小块0在主机地址空间中位于存储块0的起始地址开始向后延伸4KB(CC.MPS描述的内存页大小)的范围,存储小块1在主机地址空间中位于存储块0的起始地址向后延伸4KB开始到存储块0的起始地址向后延伸8KB的范围(也就是存储小块0的结尾开始向后延伸4KB的范围),依此类推,存储小块2在主机地址空间中位于存储块0的起始地址向后延伸8KB开始到存储块0的起始地址向后延伸12KB的范围。存储块1被分为8个存储小块(存储小块4到存储小块11)。类似地,存储块3被分为3个存储小块,分别为存储小块13、存储小块14与存储小块15。可以理解地,存储小块4在主机地址空间中位于存储块1的起始地址开始向后延伸4KB的范围,存储小块13在主机地址空间中位于存储块3的起始地址开始向后延伸4KB的范围。
从而映射表的条目数量同主机提供给HMB的所有存储块所划分的存储小块的数量相同。例如,参看图3,在映射表的15个条目同15个存储小块之间存在一一对应关系。为建立映射表,在映射表的每个条目中记录其对应的存储小块的主机地址空间的地址。从而映射表的第i个条目指示了控制部件地址空间的地址i*CC.MPS同存储小块i的映射关系,而该第i个条目中记录了存储小块i在主机地址空间中的地址。
映射表的建立,发生在控制部件初始化阶段,根据HMBDL与CC.MPS描述的信息创建映射表。映射表记录在控制部件内部的存储器中,或者记录在同控制部件耦合的例如DRAM110中。映射表建立后,除非主机更新了HMBDL,通常无须再修改。并且使用映射表来加快从控制部件地址空间到主机地址空间的地址转换过程。
从而当控制部件希望访问由HMB提供的控制部件地址空间的地址i*CC.MPS时,通过查询映射表的第i个条目得到存储小块i的在主机地址空间中的地址,并使用所得到的存储小块i的在主机地址空间中的地址访问HMB。作为又一个例子,当控制部件希望访问由HMB提供的控制部件地址空间的地址i*CC.MPS+offset时(offset代表偏移值,0<offset<4K),通过查询映射表的第i个条目得到存储小块i的在主机地址空间中的起始地址(记为Ai),再用Ai+offset得到要访问的在主机地址空间中的地址来访问HMB。
图4展示了根据本申请实施例将控制部件地址空间地址转换为主机地址空间地址的流程图。
作为举例,控制部件希望访问HMB。64KB的HMB被映射到控制部件地址空间的64KB范围。控制部件访问控制部件地址空间的这64KB地址空间来使用HMB。
为访问HMB,控制部件获取控制部件地址空间的地址(记为CA)(410)。根据控制部件地址空间的地址CA,获取对应的映射表的条目编号i与偏移值(offset)(420)。例如,用CA除以CC.MPS,将得到的商为编号i,将余数作为偏移值。又例如,取CA的指定比特(例如,低4位、中间4位或高4位)作为编号i,而将其他比特作为偏移值。
查询映射表,从映射表条目i记录的值得到存储小块i的起始地址A(430),该起始地址A是主机空间的地址。再用起始地址A加偏移值(offset),得到同控制部件地址空间的地址CA对应的主机地址,使用该地址来访问HMB(440)。
根据本申请的实施例,可以大大减少控制部件地址空间的地址到主机地址的转换时间,提高控制部件访问HMB的效率。
SGL(分散收集列表)描述了离散的数据缓存,被用于在信息处理设备之间的数据描述。例如,根据NVMe协议的IO命令可使用SGL描述主机的数据缓存以及同数据对应的存储设备的逻辑地址。
SGL包括一个或多个SGL分段(Segment)。图5A展示了NVMe协议中的SGL分段的示意图。SGL分段包括一个或多个SGL描述符,每个SGL描述符具有固定的大小(例如,16字节)。
图5B展示了SGL描述符的示意图。SGL描述符包括SGL标识符与依赖于描述符类型而变化的内容部分(图5B中展示为“描述符类型专用”字段)。
图5C展示了SGL描述符类型的示意图。SGL描述符包括多种类型,每个SGL描述符具有特定的类型。
通常,SGL描述符描述了数据缓存的地址与长度。在NVMe协议中,SGL描述符所描述的数据缓存位于发出IO命令的设备(例如主机)的内存中。
图6展示了现有技术的根据SGL传输数据的示意图。
主机610耦合到存储设备102。主机包括CPU 620与内存630。主机610为向存储设备102提供IO命令而准备用于该IO命令的SGL与一个或多个数据缓存(图6中展示了数据缓存A、数据缓存B与数据缓存C)。数据缓存用于承载同IO命令关联的数据。若IO命令是写命令,数据缓存中存储要写入存储上设备102的数据;若IO命令是读命令,存储设备102读出的数据将被搬移到数据缓存。
数据缓存是离散的,包括一个或多个数据缓存块,这些缓存各自具有相同或不同的大小,并且位于内存630的任意位置。SGL描述了同IO命令所使用的一个或多个数据缓存块,从而存储设备根据IO命令获取SGL,以知晓该IO命令的数据缓存。
IO命令还描述了存储设备的逻辑地址与长度。作为举例,IO命令指示要访问的起始逻辑地址(X)与数据长度(n)。
在图6的例子中,SGL包括4个分段,分别描述了从逻辑地址X开始3KB的数据关联于数据缓存块A,逻辑地址接下来的4KB数据块关联于数据缓存块C,逻辑地址接下来的2KB数据块属于比特桶(不关联于任何数据缓存块),逻辑地址接下来的4KB数据块关联于数据缓存块B。
为处理IO命令,存储设备102的控制部件从主机610获取SGL,并根据SGL在主机内存的数据缓存与存储设备之间搬移数据。
若IO命令是写命令,存储设备102根据SGL将主机内存630的数据缓存块A写入逻辑地址X开始的3KB存储空间;将数据缓存块B写入逻辑地址X+9KB开始的4KB存储空间;将数据缓存块C写入逻辑地址X+3KB开始的4KB存储空间。
若IO命令是读命令,存储设备102根据SGL将从逻辑地址X开始的3KB数据搬移到主机内存630的数据缓存块A;将从逻辑地址X+3KB开始的4KB数据块搬移到数据缓存块C;将从逻辑地址X+9KB开始的4KB数据块搬移到数据缓存块B。
可选地,存储设备102还提供缓存单元以接收从主机610的数据缓存获取的数据或从NVM芯片读出的数据。IO命令所访问的逻辑地址可以不同于缓存单元的地址也不同于NVM芯片的地址。
图7展示了根据现有技术的SGL的详细示意图。
作为举例,IO命令是读命令,IO命令指示的SGL包括SGL分段0、SGL分段1与SGL分段2。SGL分段0包括两个描述符,其一指示了主机内存的数据块A的地址与长度(3KB),其二指示了SGL分段1的地址,从而存储设备根据SGL分段0得以获取SGL分段1。SGL分段1包括3个描述符,其一指示了主机内存的数据块B的地址与长度(4KB),其二指示了比特桶及其长度(2KB),其三指示了SGL分段2的地址。
SGL的各SGL分段以及分段内的各描述符是依次链接的,这些描述符除了指示主机的地址(数据块地址或SGL分段地址),还暗示了在IO命令访问的逻辑地址中的位置,SGL的各分段及其描述符分别对应在IO命令访问的逻辑地址空间中的依次排列的逻辑地址范围。例如,记IO命令访问的逻辑地址范围从逻辑地址x到逻辑地址X+n(长度为n=13KB)(不含点X+n),SGL分段0的第一个描述符对应逻辑地址范围从x到x+3KB,其中该范围的大小“3KB”也是该描述符所指示的长度,SGL分段1的第一个描述符对应逻辑地址范围从x+3KB到X+7KB,其中该范围的大小“4KB(=7KB-3KB)”也是该描述符所指示的长度;SGL分段1的第二个描述符(类型为比特桶)对应逻辑地址范围从x+7KB到X+9KB,由于该第二个描述符为比特桶,其对应的逻辑地址范围的数据不被传输到主机。
继续参看图7,SGL分段2包括1个描述符,其指示了主机内存的数据块C的地址与长度(4KB),并且对应逻辑地址范围从x+9KB到X+13KB,其中该范围的大小“4KB(=13KB-9KB)”
存储设备根据IO命令(读命令)从主机获取SGL分段0,并提取出SGL分段0中的描述符,根据第一个描述符将逻辑地址X开始的3KB数据搬移到主机内存的数据块A,根据第二个描述符获取SGL分段1。存储设备再根据SGL分段1的第1个描述符将逻辑地址X+3KB开始的4KB数据搬移到主机内存的数据块B,根据SGL分段1的第2个描述符(比特桶)跳过逻辑地址X+7KB开始的2KB数据(这2KB数据不被搬移到主机内存),根据第3个描述符获取SGL分段2。存储设备再根据SGL分段2的第1个描述符将逻辑地址X+9KB开始的4KB数据搬移到主机内存的数据块C,并且SGL分段1还指示SGL分段2是其所属SGL的最后一个分段,从而存储设备根据已处理完SGL分段2的所有描述符而知晓对其所属SGL的处理完成,也知晓对该SGL所属IO命令的数据搬移完成。
可见,SGL具有相对复杂的结构(以链表形式组织的可变数量的分段与描述符),并且SGL描述的数据块呈现离散分布状态,每个SGL描述符所对应的(目的地址)数据块具有可变长的大小,而且还允许(源地址)逻辑地址不连续(通过比特桶)。这使得SGL具有很强的数据表达能力,但同时也为其解析带来了复杂度。存储设备的控制部件在使用SGL进行数据传输时要解析SGL。当要传输关联于指定逻辑地址的数据块时,需要遍历SGL找到对应的SGL描述符才能发起数据传输,降低了数据传输的效率。对SGL的遍历复杂度大体为O(N)(N为链表长度,或SGL中的描述符数量),在SGL较长时,遍历SGL也引入了较大的处理延迟,影响存储设备处理IO命令的性能。
根据本申请实施例,将SGL转换为主机空间描述符,来促进对指定数据块传输时的寻址。
图8展示了根据本申请实施例的主机空间描述符示意图。
SGL 810是根据要处理的IO命令获取的SGL。SGL包括依此链接的分段与SGL描述符。指示SGL数据块的描述符依次关联于IO命令所访问的连续逻辑地址空间,图8中展示为LBA X到LBA X+38,代表了LBA空间的38个存储单元,而SGL 810描述了19KB的数据块,从而每个LBA空间的每个存储单元大小为512字节。依据SGL数据块描述符在SGL中的位置,确定其关联的LBA空间,以及SGL数据块描述符记录了主机内存的数据块地址与长度。
主机空间描述符列表820包括主机空间描述符。主机空间描述符列表820包括的多个主机空间描述符也依次链接。每个主机空间描述符自身具有相同的指定大小,并记录了主机内存的数据块地址与长度。主机空间描述符与SGL描述符是多对一的关系,根据SGL描述符生成一个或多个主机空间描述符。
主机空间描述符被分为多组。参看图8,主机空间描述符(811、与812)被分为一组,主机空间描述符(814)被单独分为一组,主机空间描述符(816)被单独分为一组,主机空间描述符(818、820与822)被分为一组,主机空间描述符(824)被单独分为一组。每组多个主机空间描述符所描述的主机内存空间的大小具有指定长度。在根据本申请的例子中,指定长度是例如4KB,将4KB大小称为一个数据传输单元(DTU,Data Transfer Unit),存储设备处理IO命令时,其控制部件按DTU为单位发起数据传输。
主机空间描述符(824)对应SGL 810的最后的SGL描述符,也是主机空间描述符列表820的最后一组主机空间描述符,该最后一组主机空间描述符所描述的主机内存空间的大小可能不足一个DTU长度。
DTU描述符列表830包括一个或多个DTU描述符。每个DTU描述符自身具有相同的大小,并包括了索引主机空间描述符的地址与长度。由于主机空间描述符具有指定的大小(例如,8字节),从而DTU描述符记录的长度也指示了对应的主机空间描述符的数量(例如,DTU描述符记录的长度为16,则暗示了2=16/8个主机空间描述符)。DTU描述符指示了代表一个DTU的一组主机空间描述符,DTU描述符的索引主机空间描述符的地址是该组主机空间描述符的第一个主机空间描述符的起始地址,从该起始地址开始到DTU描述符记录的长度的范围内存储了该组所有的主机空间描述符。
从而DTU描述符832指示了主机空间描述符(811与812)所形成的组,DTU描述符834描述了主机空间描述符(814)所形成的组,依此类推。
DTU描述符各自还关联于DRAM中为IO命令缓存的DTU。对于读命令,缓存的DTU是从NVM芯片读出的数据块;对于写命令,缓存的DTU是从主机接收的数据块。可选地,DTU描述符列表830中的DTU描述符是排序的,从而DTU描述符在DTU描述符列表830中的位置暗示了其对应的DTU的数据在IO命令访问的逻辑地址范围中的位置。DTU描述符列表830中的DTU描述符依次关联于IO命令所访问的连续逻辑地址空间,图8中展示为LBA X到LBA X+38(不含点X+38),代表了LBA空间的38个存储单元。从而依据DTU描述符在DTU描述符列表中的位置,确定其关联的LBA空间。以及根据要访问的LBA空间,也直接确定对应的DTU描述符在DTU描述符列表中的位置。依然可选地,DTU描述符列表830中的各DTU描述符无须排序,而在DTU描述符中还记录其对应的DTU的数据在IO命令访问的逻辑地址范围中的位置。
SGL 810、主机空间描述符列表820、DTU描述符列表830各自描述了同一个IO命令所需的数据传输。
从而为了处理IO命令,例如读命令,要将属于该命令的一个或多个DTU传输给读命令的SGL描述的主机内存的数据缓存块。存储设备的控制部件根据DTU描述符列表830控制数据传输过程。例如,从DTU描述符列表830获取DTU描述符之一,该DTU描述符指示了DTU在存储设备的DRAM中的存储位置。控制部件还根据该DTU描述符获取对应的一组主机空间描述符,该组主机空间描述符共同描述了等于DTU大小的主机内存的数据缓存块。控制部件根据该组主机空间描述符的每个发起从存储设备的DRAM的该DTU到主机空间描述符指示的主机内存地址与长度的DMA传输。控制部件根据DTU描述符列表中的所有DTU描述符重复上述数据传输过程,以完成对该读命令的处理。
若IO命令是写命令,控制部件根据DTU描述符列表的每个DTU描述符获取对应的一组主机空间描述符,并依据该组的那个主机空间描述符发起从主机内存到DRAM的DTU的数据传输。
从而,根据本申请的实施例,先根据IO命令与SGL生成主机空间描述符列表820与DTU描述符列表830,之后再根据DTU描述符列表830获取主机空间描述符,并发起DMA传输。根据DTU描述符直接获得主机空间描述符以发起DMA传输,省去了遍历SGL的过程。而当控制部件利用多个处理单元并发处理多个IO命令时,为每个IO命令根据其SGL生成主机空间描述符列表与DTU描述符列表的过程发生在为其他IO命令同主机传输数据的过程中,从而生成主机空间描述符列表与DTU描述符列表的过程被隐藏,进一步提高了处理IO命令的效率。
为生成主机空间描述符列表820,可选地,也参看图8,由SGL中的第一个SGL描述符指示的3KB主机内存空间加上SGL的第二个SGL描述符指示的前1KB主机内存空间,组成了等于DTU大小的4KB主机内存空间,因而生成两个主机空间描述符添加到主机空间描述符列表。并且根据这两个主机空间描述符在主机空间描述符列表820中的起始位置以及这两个主机空间描述符的数量(2)生成DTU描述符,并将生成的DTU描述符添加到DTU描述符列表830。以此类推,将余下所有的SGL描述符,全部拆分成代表了4K大小主机内存空间的主机空间描述符组,并存储在主机内存描述符列表820。
图9展示了根据本申请实施例生成主机空间描述符列表的流程图。
根据每个IO命令的SGL生成主机空间描述符。
从SGL获取SGL描述符(910)。获取的SGL描述符类型是描述主机内存数据块的描述符,为了简便的目的,在图9的实施例中用“SGL描述符”代表描述内存数据块的描述符。获取的SGL描述符指示了主机内存数据块的大小。通过遍历SGL而从前到后依次获取SGL描述符。
获取步骤910中得到的SGL描述符对应的剩余主机DTU空间的大小(920)。根据本申请实施例,主机DTU空间指为传输指定DTU而需要的主机内存空间,其大小同DTU大小相同(例如,4KB)。剩余主机DTU空间指为该主机DTU空间生成了一条或多条主机空间描述符后,尚未被主机空间描述符描述的主机内存空间。初始情况下,对应指定DTU的剩余主机DTU空间的大小为DTU大小。从而在图9的例子中,首次执行步骤920获得的剩余主机DTU空间的大小为4KB。SGL描述符对应的剩余主机DTU空间的大小,为该SGL描述符尚未被由其生成的主机空间描述符描述的主机内存空间中能用于填充该剩余主机DTU空间的部分。
比较步骤920获取的SGL描述符对应的剩余主机DTU空间与DTU大小(例如,4KB)的关系。
在步骤920,若SGL描述符对应的剩余主机DTU空间小于DTU大小(4KB),根据SGL描述符生成主机空间描述符(940),生成的该主机空间描述符指示了该SGL描述符对应的全部剩余主机DTU空间,也即该SGL描述符的尚未被由其生成的主机空间描述符描述的全部剩余主机内存空间。生成的主机空间描述符被添加到主机空间描述符列表的尾部。
在步骤920,若SGL描述符对应的剩余主机DTU空间等于DTU大小(4KB),根据SGL描述符生成主机空间描述符(932),生成的该主机空间描述符指示了等于DTU大小的主机内存空间。生成的主机空间描述符被添加到主机空间描述符列表的尾部。
相应地,该剩余主机DTU空间变为0,接下来为下一个主机DTU空间大小生成主机空间描述符,从而返回步骤910。
在步骤920,若SGL描述符对应的剩余主机DTU空间大于DTU大小(4KB),根据SGL描述符生成主机空间描述符(934),生成的该主机空间描述符指示了等于DTU大小的主机内存空间。生成的主机空间描述符被添加到主机空间描述符列表的尾部。相应地,该剩余主机DTU空间变为0,接下来为下一个主机DTU空间大小生成主机空间描述符,而该SGL描述符依然存在未被生成的主机空间描述符描述的主机内存空间,从而返回步骤920,为(下一个)新的主机DTU空间大小,获取该SGL描述符对应的剩余主机DTU空间大小。若该IO命令已不需要完整的下一个主机DTU空间大小,将该IO命令所需的全部剩余空间作为下一个主机DTU空间大小。若该IO命令所需的剩余空间为0,图9的处理流程结束。
继续参看步骤940,由于步骤940中,该SGL描述符描述的主机内存空间已全部用于生成主机空间描述符,而当前的主机DTU空间还分为完全分配(大于0),获取当前剩余的主机DTU空间大小(950)。获取新的SGL描述符(960)。获取步骤960中得到的新SGL描述符对应的剩余主机DTU空间的大小(965)。
比较步骤965获取的新SGL描述符对应的剩余主机DTU空间与DTU大小(例如,4KB)的关系。
若SGL描述符对应的剩余主机DTU空间小于DTU大小(4KB),根据SGL描述符生成主机空间描述符(972),生成的该主机空间描述符指示了该新SGL描述符对应的全部剩余主机DTU空间,也即该新SGL描述符的尚未被由其生成的主机空间描述符描述的全部剩余主机内存空间。生成的主机空间描述符被添加到主机空间描述符列表的尾部。
由于步骤972中,该新SGL描述符描述的主机内存空间已全部用于生成主机空间描述符,而当前的主机DTU空间还分为完全分配(大于0),返回步骤950,并继续处理。
在步骤970,若SGL描述符对应的剩余主机DTU空间等于DTU大小(4KB),根据SGL描述符生成主机空间描述符(图9中未示出),生成的该主机空间描述符指示了等于DTU大小的主机内存空间。生成的主机空间描述符被添加到主机空间描述符列表的尾部。相应地,该剩余主机DTU空间变为0,接下来为下一个主机DTU空间大小生成主机空间描述符,从而返回步骤910。
在步骤970,若SGL描述符对应的剩余主机DTU空间大于DTU大小(4KB),根据SGL描述符生成主机空间描述符(974),生成的该主机空间描述符指示了等于DTU大小的主机内存空间。生成的主机空间描述符被添加到主机空间描述符列表的尾部。相应地,该剩余主机DTU空间变为0,接下来为下一个主机DTU空间大小生成主机空间描述符,而该SGL描述符依然存在未被生成的主机空间描述符描述的主机内存空间,从而返回步骤920,为(下一个)新的主机DTU空间大小,获取该SGL描述符对应的剩余主机DTU空间大小。若该IO命令已不需要完整的下一个主机DTU空间大小,将该IO命令所需的全部剩余空间作为下一个主机DTU空间大小。若该IO命令所需的剩余空间为0,图9的处理流程结束。
根据IO命令的生成的主机空间描述符列表,生成DTU描述符列表。从前向后遍历主机空间描述符列表,每获取其对应的主机内存空间大小等于DTU大小(例如,4KB)的一个或多个主机空间描述符,将这些一个或多个主机空间描述符作为一组,并为该组生成DTU描述符,生成的DTU描述符指向该组主机空间描述符的第一个,该DTU描述符还记录该组主机空间描述符的数量或占据的存储空间的长度。以及将依次生成的DTU描述符依次添加到DTU描述符列表。DTU描述符还关联于缓存IO命令所访问数据的存储器中的DTU。DTU描述符还关联于IO命令所访问的具有DTU大小的逻辑地址空间。可选地,DTU描述符列表中的DTU描述符,依次对应于IO命令访问的逻辑地址范围中从前到后的具有DTU大小的逻辑地址空间。
可选地,从SGL中获取的一个或多个SGL描述符的类型代表了比特桶,其对应的逻辑地址空间的数据将无须被在主机与存储设备之间传输。在根据本申请的实施例中,也参照图9,与处理描述内存数据块的描述符基本同样的描述处理描述比特桶的描述符,并在根据此类SGL描述符生成主机空间描述符时,在生成的主机空间描述符中标注比特桶标记。从而在根据DTU描述符获取的一个或多个主机空间描述符带有比特桶标记时,不根据这样的主机空间描述符发起主机到存储设备之间的DMA传输。
图10展示了根据本申请实施例处理写命令的示意图。
包括CPU与内存的主机耦合到存储设备102,并向存储设备102提供写命令。主机还在自己的内存中设置了写命令对应的SGL,还在内存的多个数据块(数据块A、数据块B与数据块C)中存储了写入存储设备的数据。SGL描述了主机内存的这些多个数据块的起始地址与长度。
控制部件104获取IO命令,命令处理单元1020根据IO命令获取SGL(图10中由标记“(1)”指示)(例如是图8展示的SGL),将主机内存的SGL搬移到控制部件104内。可选地,将SGL搬移到DRAM 106。
命令处理单元1020根据获取的SGL生成主机空间描述符列表1050与DTU描述符列表1040。例如,命令处理单元1020根据图9展示的处理流程生成主机空间描述符列表1050与DTU描述符列表1040。生成的主机空间描述符列表1050包括多组,图10中每组主机空间描述符由不同的背景图案区分,并且指示了对应于DTU大小(4KB)的主机内存空间。每个DTU描述符指示了一组主机空间描述符的起始地址。生成的主机空间描述符列表1050与DTU描述符列表1040被记录在控制部件104内部的存储器中或被存储在DRAM 106中。
命令处理单元1020根据DTU描述符列表1040的DTU描述符获取对应的一组主机空间描述符,并根据该组的每个主机空间描述符操作DMA单元1030从主机内存的数据块向DRAM 106中的DTU搬移数据(图10中由标记“(2)”指示)。
命令处理单元1020还将DRAM 106中的DTU通过介质接口控制器搬移到NVM芯片105(图10中由标记“(3)”指示)。
图11展示了根据本申请又一实施例的主机空间描述符示意图。
SGL 1100是根据要处理的IO命令获取的SGL。SGL的SGL描述符依次关联于IO命令所访问的连续逻辑地址空间,图11中展示为LBA X到LBA X+40(不含点X+40),代表了LBA空间的40个存储单元,而SGL 1110描述了20KB的数据块。依据SGL数据块描述符在SGL中的位置,确定其关联的LBA空间,以及SGL数据块描述符记录了主机内存的数据块地址与长度。SGL描述符1102的类型是比特桶,其指示的长度为1KB,代表了对应逻辑地址范围的数据无须同主机进行传输。
主机空间描述符列表1120包括多个主机空间描述符。特别地,主机空间描述符1122带有比特桶标记,比特桶标记占据了主机空间描述符1122记录主机内存地址的位置,从而主机空间描述符1122同其他主机空间描述符具有相同的大小。
主机空间描述符被分为多组。参看图11,主机空间描述符(1110与1112)被分为一组,主机空间描述符(1114)被单独分为一组,主机空间描述符(1116)被单独分为一组,主机空间描述符(1118、1120与1122)被分为一组,主机空间描述符(1124与1126)被分为一组。每组多个主机空间描述符所描述的主机内存空间的大小具有指定长度。在根据本申请的例子中,指定长度是例如4KB。
DTU描述符列表1130包括一个或多个DTU描述符。每个DTU描述符自身具有相同的大小,并包括了索引主机空间描述符的地址与长度。
从而DTU描述符1132指示了主机空间描述符(1110与1112)所形成的组,DTU描述符1134描述了主机空间描述符(1114)所形成的组,依此类推。DTU描述符1138描述了主机空间描述符(1118、1120与1122)所形成的组,其中主机空间描述符1122带有比特桶标记(BB),其指示了长度为1KB,但不带有主机内存地址。
DTU描述符各自还关联于DRAM中为IO命令缓存的DTU。DTU描述符列表1130中的DTU描述符依次关联于IO命令所访问的连续逻辑地址空间,图11中展示为LBA X到LBA X+40,代表了LBA空间的40个存储单元。
SGL 1100、主机空间描述符列表1120、DTU描述符列表1130各自描述了同一个IO命令所需的数据传输。
从而为了处理IO命令,例如读命令,要将属于该命令的一个或多个DTU传输给读命令的SGL描述的主机内存的数据缓存块。存储设备的控制部件根据DTU描述符列表1130控制数据传输过程。
若IO命令是写命令,控制部件根据DTU描述符列表的每个DTU描述符获取对应的一组主机空间描述符,并依据该组的那个主机空间描述符发起从主机内存到DRAM的DTU的数据传输。
控制部件获取到主机空间描述符1122时,识别其带有比特桶标记,因而不根据该空间描述符1122发起DMA传输。在图11的例子中,主机空间描述符1122是其所在的主机空间描述符组中的最后一个主机空间描述符,因而控制部件直接略过该主机空间描述符1122。若主机空间描述符1122不是所在的主机空间描述符组中的最后一个主机空间描述符,控制部件为处理下一个主机空间描述符还要根据指示比特桶的主机空间描述符1122而确定需要跳过的逻辑地址范围或DRAM中的DTU的范围,以获知下一个主机空间描述符所对应的逻辑地址范围或DRAM中的DTU的范围。
图12展示了根据本申请实施例处理读命令的示意图。
包括CPU与内存的主机耦合到存储设备102,并向存储设备102提供读命令。主机还在自己的内存中设置了读命令对应的SGL,还在内存中准备了多个数据块(数据块A、数据块B与数据块C)用于接收读命令要读出的数据。SGL描述了主机内存的这些多个数据块的起始地址与长度。
控制部件104获取读命令,命令处理单元1220根据IO命令获取SGL(图12中由标记“(1)”指示)(例如是图11展示的SGL),将主机内存的SGL搬移到控制部件104内。可选地,将SGL搬移到DRAM 106。
命令处理单元1220根据获取的SGL生成主机空间描述符列表1250与DTU描述符列表1240。生成的主机空间描述符列表1250包括多组,图12中每组主机空间描述符由不同的背景图案区分,并且指示了对应于DTU大小(4KB)的主机内存空间。主机空间描述符列表1250中的主机空间描述符1252带有比特桶标记(BB),其指示了对应1KB的逻辑地址范围或DRAM中存储的DTU的1KB部分数据无须被传输到主机。
命令处理单元1220根据读命令访问的逻辑地址范围通过介质接口控制器读出数据并搬移到DRAM 106中的多个DTU(图12中由标记“(2)”指示)。
命令处理单元1220还根据DTU描述符列表1240的DTU描述符获取对应的一组主机空间描述符,并根据该组的每个主机空间描述符操作DMA单元1230从DRAM 106中的DTU将数据搬移到主机内存的数据块(图12中由标记“(3)”指示)。命令处理单元1220响应于获取了带有比特桶标记(BB)的主机空间描述符1252,不将其对应的1KB逻辑地址范围的数据传输到主机。
根据本申请的实施例,若命令处理单元1220需要传输DTU描述符1220所指示的DRAM中的DTU到主机内存,通过DTU描述符1220记录的主机空间描述符的地址与长度,从主机空间描述符列表1250获取对应的3个主机空间描述符(1254、1256与1252)。
可选地,DTU描述符列表1240的各DTU描述符被连续存储,从而根据要传输的DTU的逻辑地址范围直接确定其对应的DTU描述符。主机空间描述符列表1250的各主机空间描述符也被连续存储。从而要传输IO命令的例如第4个DTU时,根据序号4确定DTU描述符1242的存储位置并获取DTU描述1242。
根据DTU描述符1242获取3个主机空间描述符,并根据每个主机空间描述符记录的主机内存地址与长度,发起从第4个DTU到主机内存的传输。由于主机空间描述符1252带有比特桶标记,因而根据对应于IO命令的第4个DTU的这3个主机空间描述符发起两次从DRAM到主机内存的数据传输。第一次传输该第4个DTU的前2KB数据到主机空间描述符1254所指示的主机内存地址,第二次传输该第4个DTU的相对起始地址偏移值为2KB开始的1KB长度的数据到主机空间描述符1256所指示的主机内存地址。
从而根据本申请的实施例,避免了现有技术中对于每次DMA传输需要遍历SGL才能找出主机内存地址的复杂操作,提升了数据传输的效率,加快了IO命令的处理速度。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种加速SGL处理的方法,其特征在于,包括:
获取IO命令关联的SGL;
根据所述SGL生成主机空间描述符列表与DTU描述符列表;
根据DTU描述符列表的DTU描述符获取主机空间描述符列表的一个或多个主机空间描述符;以及
根据获取的一个或多个主机空间描述符发起数据传输。
2.如权利要求1所述的加速SGL处理的方法,其特征在于,其中,主机空间描述符列表包括多个主机空间描述符,所述多个主机空间描述符的每个记录了主机内存地址与长度,并且具有相同的尺寸。
3.如权利要求2所述的加速SGL处理的方法,其中,
所述主机空间描述符列表的多个主机空间描述符被分为多组,DTU描述符表的DTU描述符索引了一组主机空间描述符,一组主机空间描述符的所有主机空间描述符所记录的长度之和等于DTU的长度。
4.根据权利要求3所述的加速SGL处理的方法,其中
根据所述SGL中的连续的一个或多个SGL描述符,生成所述一组主机空间描述符,其中所述连续的一个或多个SGL描述符所指示的主机内存空间的大小大于或等于DTU的长度;
若所述连续的一个或多个SGL描述符所指示的主机内存空间的大小大于DTU的长度,所述连续的一个或多个SGL描述符的最后一个SGL描述符所指示的主机内存空间被拆分,以使得所述连续的一个或多个SGL描述符所指示的主机内存空间的大小等于DTU的长度。
5.如权利要求1-4之一所述的加速SGL处理的方法,其特征在于,其中,DTU描述符列表包括多个DTU描述符,所述多个DTU描述符的每个记录了主机空间描述符的地址与数量,并且具有相同的尺寸。
6.根据权利要求1-4之一所述的加速SGL处理的方法,其中
从前向后遍历所述主机空间描述符列表,每获取其对应的主机内存空间大小等于DTU大小的一个或多个主机空间描述符,将这些一个或多个主机空间描述符作为一组,并为该组生成DTU描述符,生成的DTU描述符记录该组主机空间描述符的第一个的地址,该DTU描述符还记录该组主机空间描述符的数量或占据的存储空间的长度。
7.根据权利要求1-4之一所述的加速SGL处理的方法,其中
若所述SGL中的一个或多个SGL描述符指示了比特桶,在根据这些一个或多个SGL描述符生成的主机空间描述符中设置比特桶标记。
8.根据权利要求7所述的加速SGL处理的方法,其中
若根据DTU描述符列表的DTU描述符获取的主机空间描述符列表的一个或多个主机空间描述符带有比特桶标记;根据获取的带有比特桶标记的每个主机空间描述符不发起数据传输。
9.根据权利要求1-4之一所述的加速SGL处理的方法,其中
根据获取的主机空间描述符操作DMA单元发起数据传输,其中
所述主机空间描述符指示的主机内存地址作为数据传输的一端,而索引了所述主机空间描述符的DTU描述符所对应的DTU作为数据传输的一端。
10.一种存储设备,其特征在于,包括控制部件与非易失存储介质,所述控制部件执行根据权利要求1-9之一所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911300669.1A CN112988623B (zh) | 2019-12-17 | 2019-12-17 | 加速sgl处理的方法与存储设备 |
US17/785,104 US11650736B2 (en) | 2019-12-17 | 2020-12-04 | SGL processing acceleration method and storage device |
PCT/CN2020/134090 WO2021121054A1 (zh) | 2019-12-17 | 2020-12-04 | 加速sgl处理的方法与存储设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911300669.1A CN112988623B (zh) | 2019-12-17 | 2019-12-17 | 加速sgl处理的方法与存储设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112988623A CN112988623A (zh) | 2021-06-18 |
CN112988623B true CN112988623B (zh) | 2021-12-21 |
Family
ID=76342103
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911300669.1A Active CN112988623B (zh) | 2019-12-17 | 2019-12-17 | 加速sgl处理的方法与存储设备 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11650736B2 (zh) |
CN (1) | CN112988623B (zh) |
WO (1) | WO2021121054A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115658559B (zh) * | 2022-12-22 | 2023-04-07 | 摩尔线程智能科技(北京)有限责任公司 | 内存地址映射方法及装置、芯片 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107102955A (zh) * | 2016-02-19 | 2017-08-29 | 希捷科技有限公司 | 用于存储子系统的关联和原子回写高速缓冲存储系统和方法 |
CN110515861A (zh) * | 2018-05-21 | 2019-11-29 | 北京忆芯科技有限公司 | 处理刷写命令的存储设备及其方法 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7155569B2 (en) * | 2001-02-28 | 2006-12-26 | Lsi Logic Corporation | Method for raid striped I/O request generation using a shared scatter gather list |
US20040193833A1 (en) * | 2003-03-27 | 2004-09-30 | Kathryn Hampton | Physical mode addressing |
US7287101B2 (en) * | 2003-08-05 | 2007-10-23 | Intel Corporation | Direct memory access using memory descriptor list |
US8495301B1 (en) * | 2007-11-23 | 2013-07-23 | Pmc-Sierra Us, Inc. | System and method for scatter gather cache processing |
CN102693198B (zh) * | 2012-05-12 | 2015-03-25 | 北京忆恒创源科技有限公司 | Dma传输方法及系统 |
JP2014211801A (ja) * | 2013-04-19 | 2014-11-13 | 株式会社東芝 | インターフェース制御装置、データ記憶装置及びインターフェース制御方法 |
US9430412B2 (en) * | 2013-06-26 | 2016-08-30 | Cnex Labs, Inc. | NVM express controller for remote access of memory and I/O over Ethernet-type networks |
US9778858B1 (en) * | 2015-02-11 | 2017-10-03 | Microsemi Solutions (U.S.), Inc. | Apparatus and method for scatter gather list handling for an out of order system |
US10120580B2 (en) * | 2015-03-31 | 2018-11-06 | Toshiba Memory Corporation | Method and design for dynamic management of descriptors for SGL operation |
US10108565B2 (en) * | 2015-03-31 | 2018-10-23 | Toshiba Memory Corporation | Method for on-demand fetching of SGL pointers based buffer, traffic and command requirements |
CN108702374A (zh) * | 2015-09-02 | 2018-10-23 | 科内克斯实验室公司 | 用于以太网类型网络上的存储器和I/O的远程访问的NVM Express控制器 |
US9910797B2 (en) * | 2015-10-05 | 2018-03-06 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Space efficient formats for scatter gather lists |
US10642496B2 (en) * | 2016-04-01 | 2020-05-05 | Sandisk Technologies Inc. | Out of order read transfer with host memory buffer |
CN110119248B (zh) * | 2016-12-05 | 2021-10-15 | 华为技术有限公司 | 数据读写命令的控制方法、存储设备和系统 |
US10282094B2 (en) * | 2017-03-31 | 2019-05-07 | Samsung Electronics Co., Ltd. | Method for aggregated NVME-over-fabrics ESSD |
US10332302B2 (en) * | 2017-04-17 | 2019-06-25 | Intel Corporation | Scatter gather engine |
CN108228497A (zh) * | 2018-01-11 | 2018-06-29 | 湖南国科微电子股份有限公司 | 一种基于sgl链表的DMA传输方法 |
JP2019164713A (ja) * | 2018-03-20 | 2019-09-26 | 東芝メモリ株式会社 | ストレージシステム及びデータ転送方法 |
CN110321057B (zh) * | 2018-03-28 | 2024-08-02 | 北京忆恒创源科技股份有限公司 | 具有增强io性能确定性的缓存的存储设备 |
US10657087B2 (en) * | 2018-05-31 | 2020-05-19 | Toshiba Memory Corporation | Method of out of order processing of scatter gather lists |
US11188496B2 (en) * | 2018-09-13 | 2021-11-30 | Toshiba Memory Corporation | System and method for storing data using ethernet drives and ethernet open-channel drives |
US11200180B2 (en) * | 2020-01-31 | 2021-12-14 | Western Digital Technologies, Inc. | NVMe SGL bit bucket transfers |
-
2019
- 2019-12-17 CN CN201911300669.1A patent/CN112988623B/zh active Active
-
2020
- 2020-12-04 WO PCT/CN2020/134090 patent/WO2021121054A1/zh active Application Filing
- 2020-12-04 US US17/785,104 patent/US11650736B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107102955A (zh) * | 2016-02-19 | 2017-08-29 | 希捷科技有限公司 | 用于存储子系统的关联和原子回写高速缓冲存储系统和方法 |
CN110515861A (zh) * | 2018-05-21 | 2019-11-29 | 北京忆芯科技有限公司 | 处理刷写命令的存储设备及其方法 |
Also Published As
Publication number | Publication date |
---|---|
US20230028997A1 (en) | 2023-01-26 |
US11650736B2 (en) | 2023-05-16 |
CN112988623A (zh) | 2021-06-18 |
WO2021121054A1 (zh) | 2021-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10067684B2 (en) | File access method and apparatus, and storage device | |
KR102042643B1 (ko) | 비휘발성 메모리(nvm)에서 다중 네임스페이스 관리 | |
CN107797759B (zh) | 访问缓存信息的方法、装置与驱动器 | |
CN111061655B (zh) | 存储设备的地址转换方法与设备 | |
CN107797760B (zh) | 一种访问缓存信息的方法、装置与固态驱动器 | |
CN108614668B (zh) | 基于kv模型的数据访问方法与固态存储设备 | |
CN115048034A (zh) | 用于sgl的存储空间映射方法及其装置 | |
CN112988623B (zh) | 加速sgl处理的方法与存储设备 | |
CN108628762B (zh) | 一种固态存储设备及其处理io命令的方法 | |
CN108614671B (zh) | 基于命名空间的键-数据访问方法与固态存储设备 | |
CN111352865B (zh) | 存储控制器的写缓存 | |
CN110554833A (zh) | 存储设备中并行处理io命令 | |
CN111913892B (zh) | 使用cmb提供开放通道存储设备 | |
CN110968527A (zh) | Ftl提供的缓存 | |
CN111290975A (zh) | 使用统一缓存处理读命令与预读命令的方法及其存储设备 | |
JP2019164715A (ja) | 情報処理装置、ストレージデバイス、及び、データ記憶位置の評価値算出方法 | |
CN113805813B (zh) | 降低读命令处理延迟的方法与装置 | |
CN112835820A (zh) | 快速访问hmb的方法与存储设备 | |
CN109960667B (zh) | 大容量固态存储设备的地址转换方法与装置 | |
CN109840219B (zh) | 大容量固态存储设备的地址转换系统与方法 | |
CN108614669B (zh) | 解决哈希冲突的键-数据访问方法与固态存储设备 | |
CN113051189A (zh) | 为多命名空间提供不同数据保护级别的方法与存储设备 | |
CN110968520A (zh) | 基于统一缓存架构的多流存储设备 | |
CN113515234B (zh) | 一种用于控制数据读出到主机的方法及控制器 | |
CN110968525B (zh) | Ftl提供的缓存、其优化方法与存储设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |