基于ZNS标准提供数据压缩存储设备及其方法与流程

文档序号:30595975发布日期:2022-07-01 20:40阅读:166来源:国知局
基于ZNS标准提供数据压缩存储设备及其方法与流程
基于zns标准提供数据压缩存储设备及其方法
技术领域
1.本技术涉及存储技术,尤其涉及利用zns(zonednamespace,存储区域命名空间)标准提供压缩的方法、其存储设备及使用该存储设备的主机。


背景技术:

2.图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 component interconnect express,pcie,高速外围组件互联)、nvme(nvm express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个nvm芯片105以及dram(dynamic random access memory,动态随机访问存储器)110。
3.nand闪存、相变存储器、feram(ferroelectric ram,铁电存储器)、mram(magnetic random access memory,磁阻存储器)、rram(resistive random access memory,阻变存储器)、xpoint存储器等是常见的nvm。
4.接口103可适配于通过例如sata、ide、usb、pcie、nvme(nvmexpress)、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,并可访问dram110的数据。在dram可存储ftl表和/或缓存的io命令的数据。
6.控制部件104包括闪存接口控制器(或称为介质接口控制器、闪存通道控制器),闪存接口控制器耦合到nvm芯片105,并以遵循nvm芯片105的接口协议的方式向nvm芯片105发出命令,以操作nvm芯片105,并接收从nvm芯片105输出的命令执行结果。已知的nvm芯片接口协议包括“toggle”、“onfi”等。
7.存储介质上通常按页来存储和读取数据。而按块来擦除数据。块(也称物理块)包含多个页。存储介质上的页(称为物理页)具有指定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。
8.在存储设备中,利用ftl(flash translation layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。ftl由例如运行在控制部件的cpu中的软件、固件和/或作为asic的部分的硬件实现。
9.图2是ftl的示意图。
10.存储设备向主机提供逻辑地址空间。主机使用逻辑地址访问存储设备。ftl将主机提供的逻辑地址映射为物理地址。
11.逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。逻辑地址可寻址的最小单元,被称为例如逻辑块(logicalblock)或扇区(sector)(为了简便,如非特别指出,下文中逻辑块与扇区的使用可互换),将寻址了逻辑块的逻辑地址也称为逻辑块地址(lba,logicalblockaddress)。逻辑块具有指定的大小,例如,512b(字节)、2kb、4kb或16kb等。物理地址是用于访问存储设备的nvm的物理存储单元(例如,物理页)的地址。在相关技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
12.存储了从逻辑地址到物理地址的映射信息的表结构被称为ftl表。ftl表是存储设备中的重要元数据。通常ftl表的条目记录了存储设备中以逻辑块为单位的地址映射关系。可选地,ftl表的每个条目代表多个逻辑块,以在ftl表的尺寸与存储空间的管理粒度之前权衡,例如,8个逻辑地址连续的逻辑块。
13.ftl表包括例如多个ftl条目,每个ftl条目对应一个或多个连续的逻辑块,ftl条目的值记录了为该一个或多个连续的逻辑块提供的存储空间的地址(为了清楚,将该存储空间称为nvm数据帧,将该存储空间的地址称为nvm数据帧地址)。
14.ftl表被存储在例如dram 110(也参看图1)或sram中。根据访问的逻辑地址,获得对应的ftl条目的索引,并从ftl条目中得到为逻辑块提供存储空间的nvm数据帧。
15.nvm数据帧地址,是例如访问nvm芯片的物理页的物理地址、访问nvm芯片的多个组合的物理页的物理地址(组合的物理页是例如,位于相同或不同逻辑单元(lun)的多个平面(plane)上的物理页)、访问nvm芯片的物理页内的部分数据单元的物理地址。
16.一些存储设备的ftl由存储设备所耦合的主机提供,由主机的存储器存储ftl表,主机的cpu执行软件提供ftl。还有一些被设置在主机与存储设备之间的存储管理装置提供ftl。
17.诸如nvme协议(在https://nvmexpress.org/wp-content/uploads/nvm-express-1_4-2019.06.10-ratified.pdf可获得)定义了主机与存储设备之间交换数据的方式。nvme组织还在讨论zone(存储区域)与zns(zonednamespace,存储区域命名空间)(在https://nvmexpress.org/wp-content/uploads/nvm-express-1.4-ratified-tps-1.zip可获得)。zone是作为单一单元被管理的逻辑块地址(lba,logicalblock address)的连续范围,zns是包括多个zone的命名空间。一些zone需要按逻辑地址的顺序被顺序写入。主机确保向zone提供的io命令满足要求。
18.图3a是zone的示意图。
19.存储设备提供例如1000gb大小的逻辑地址空间(lba范围)。逻辑地址空间包括多个(n+1个)zone,每个zone占据同其编号对应的逻辑地址空间。主机可将zone视作存储对象,根据zone编号与zone内偏移值得以访问存储设备的指定的逻辑地址空间。zone占据的
逻辑地址空间的大小称为zone size(zone大小)。图3a的例子中,zone大小是例如512mb。
20.继续参看图3a,zone 0包括存储空间(或称逻辑地址范围)(310、320与340)。存储空间310是zone 0已经被写入的存储空间,存储空间320尚未被写入数据,并且可被写入数据,而由于存储空间对齐等原因,主机可能不会向存储空间340写入数据。将zone可被写入数据的最大逻辑块数量称为zone容量(zonecapacity),例如由存储空间310与存储空间320所指示的大小。从而zone容量不大于zone大小。wp(writepointer,写指针)指示zone的存储空间320的起始位置。
21.向zone写入数据时,总是写入从wp所指示的位置开始、地址连续的指定大小存储空间。
22.图3b-图3d展示了向zone写入数据的示意图。
23.主机使用两种命令(写命令与追加(append)命令)向zone写入数据,图3b展示了写命令,图3c展示了追加命令。
24.写命令指示向zone写入数据,写命令指示了写入数据的起始地址,该地址应当同当前wp一致,数据被写入zone的由当前wp所指示位置开始的连续逻辑地址空间。每个zone被限制仅同时处理一个写命令,在一个写命令被处理完成后,才能向zone发出下一个写命令。参看图3b,方格代表zone的逻辑地址空间,向右的方向是正方向,最左端具有zone的起始逻辑地址(记为zone_slba),w0、w1与w2各自代表向zone发出的写命令。写命令w0向zone写入4kb数据。收到写命令w0时,wp指示zone的逻辑地址zone_slba,在写命令w0被处理完成后,zone的从逻辑地址0开始的4kb逻辑地址范围被写入数据,而wp更新为指向逻辑地址zone_slba+4kb(wp0)。接下来,收到写命令w1(待写入数据大小为8kb),在写命令w1被处理完成后,zone的从逻辑地址zone_slba+4kb开始的8kb逻辑地址范围被写入数据,而wp更新为指向逻辑地址zone_slba+12kb(wp1)。接下来,收到写命令w2(待写入数据大小为16kb),在写命令w2被处理完成后,zone的从逻辑地址zone_slba+12kb开始的16kb逻辑地址范围被写入数据,而wp更新为指向逻辑地址zone_slba+28kb(wp2)。
25.追加命令指示向zone的由当前wp所指示位置开始的连续逻辑地址空间写入数据。每个zone同时处理的追加命令的数量不被限制。允许主机同时向zone发出多个追加命令,或者在之前的追加命令未处理完成前,再向zone发出追加命令。参看图3c,3个追加命令(ap0、ap1与ap2)被并发提供给zone。作为举例,wp所指示的初始位置为zone的起始逻辑地址(记为zone_slba)。使用追加命令时,主机不关心追加命令对应数据被写入的逻辑地址,从而追加命令中不指示数据被写入的逻辑地址的具体值,而由存储设备根据处理追加命令时wp的位置来确定服务追加命令的逻辑地址,并在追加命令被处理完成或提交后将确定的逻辑地址返回给主机,以使主机知晓追加命令对应数据在zone内的存储位置,并且主机可使用该存储位置来取回所写入的数据。参看图3c,存储设备收到3个追加命令(ap0、ap1与ap2),存储设备决定这3个追加命令的处理顺序。作为举例,存储设备决定按ap0、ap1与ap2的顺序处理这3个追加命令。存储设备内部如何处理写命令与追加命令不是本技术所关心的内容。作为举例,存储设备将追加命令ap0对应的数据写入逻辑地址zone_slba开始的4kb连续逻辑地址空间,将追加命令ap1对应的数据写入逻辑地址zone_slba+4kb开始的8kb连续逻辑地址空间,以及将追加命令ap2对应的数据写入逻辑地址zone_slba+12kb开始的16kb连续逻辑地址空间。
26.无论对于写命令还是追加命令,在将其处理完成或提交后,存储设备将承载写命令或追加命令对应数据的逻辑地址空间的起始地址(记为slba)返回给主机。参看图3d,记录了三个命令(写命令或追加命令)处理完成后,主机获得的3个命令对应数据在zone中的分布。作为举例,zone的扇区大小为512b,zone的起始地址为zone_slba。写命令w0(或者追加命令ap0)占据的逻辑地址空间起始地址为zone_slba+0(单位为扇区数),长度为8(单位为扇区数);写命令w1(或者追加命令ap1)占据的逻辑地址空间起始地址为zone_slba+8,长度为16;写命令w2(或者追加命令ap2)占据的逻辑地址空间起始地址为zone_slba+24,长度为32。
27.可选地,主机记录各写命令/追加命令对应数据的逻辑地址空间的起始地址(记为slba)。依然可选地,主机还记录各写命令/追加命令对应数据的长度(或存储数据的逻辑地址空间的长度)。还将写命令/追加命令对应的数据整体称为对象,其属性包括存储对象的逻辑地址空间的起始地址与长度,从而根据对象的属性得以获取对象。
28.为了从zone读取数据,主机向存储设备发出读命令,读命令中指示起始地址与长度。存储设备从起始地址开始读出该指定长度的数据提供给主机,作为对读命令的响应。


技术实现要素:

29.数据能够被压缩。通过压缩数据,存储设备的数据存储密度得以增加。因而希望提供具有数据压缩能力的存储设备。但压缩改变了数据的尺寸,进而为数据的寻址与管理引入了额外的复杂度。希望消除或最小化由压缩引入的复杂度对主机的影响,使主机能够用既有的方式访问存储设备,而存储设备提供对数据的压缩和/或解压缩,并且存储设备对数据的压缩和/或解压缩对主机透明。从而主机无需感知到数据在存储设备内部被压缩和/或解压缩,也无需修改协议,而是用既有的写命令、追加命令和/或读命令访问存储设备。
30.zone的引入为实现这一发明目的提供了进一步的支持。为了访问zone,主机维护写命令/追加命令的对应数据(对象)的起始地址(slba)与(未经压缩的)长度,并在读命令中使用起始地址(slba)与(未经压缩的)长度从存储设备读取对象。根据本技术实施例的存储设备,不改变向主机提供的写命令、追加命令和/或读命令的语义,而在内部对对象进行压缩/解压缩,并且在nvm上存储压缩后的数据,提高了数据存储密度,又不向主机引入额外的用于访问压缩数据的复杂度。
31.根据本技术的第一方面,提供了根据本技术第一方面的第一处理io命令的方法,包括:主机向存储设备提供用于向第一存储区域(zone)写入数据的第一命令;所述存储设备根据所述第一存储区域的写指针(wp)为所述第一命令要写入的数据分配第一逻辑地址索引,所述第一逻辑地址索引与所述第一命令要写入的数据的第一大小定义了第一逻辑地址空间;压缩所述第一命令要写入的数据,得到压缩后的数据;存储所述压缩后的数据;同所述第一逻辑地址索引相关联地记录存储所述压缩后的数据的地址;以及向主机提供所述第一逻辑地址索引;所述主机相关联地记录所述第一命令所访问的第一主机逻辑地址(hlba)与所述第一逻辑地址索引。
32.根据本技术第一方面的第一处理io命令的方法,提供了根据本技术第一方面的第二处理io命令的方法,其中所述存储设备将所述第一存储区域的写指针(wp)作为所述第一逻辑地址索引,或者将根据所述第一存储区域的写指针(wp)生成的键作为所述第一逻辑地
址索引;所述方法还包括:所述存储设备根据所述压缩后的数据的大小更新所述第一存储区域的写指针(wp)。
33.根据本技术第一方面的第一或第二处理io命令的方法,提供了根据本技术第一方面的第二处理io命令的方法,还包括:主机向存储设备提供用于向第一存储区域(zone)写入数据的第二命令;所述存储设备根据更新后的所述写指针为所述第二命令要写入的数据分配第二逻辑地址索引,所述第二逻辑地址索引与所述第二命令要写入的数据的第二大小定义了第二逻辑地址空间;其中即使所述第二逻辑地址索引同所述第一逻辑索引的差小于所述第一大小,所述第二逻辑地址空间同所述第一逻辑地址空间也不重叠。
34.根据本技术第一方面的第三处理io命令的方法,提供了根据本技术第一方面的第四处理io命令的方法,还包括:所述存储设备压缩所述第二命令要写入的数据,得到第二压缩后的数据;存储所述第二压缩后的数据;同所述第二逻辑地址索引相关联地记录存储所述第二压缩后的数据的地址;以及根据所述第二压缩后的数据大小,更新所述写指针。
35.根据本技术的第一方面,提供了根据本技术第一方面的第五处理io命令的方法,包括:主机向存储设备提供用于向第一存储区域(zone)写入数据的第一命令,其中所述第一命令指示了第一逻辑地址索引;所述存储设备压缩所述第一命令要写入的数据,得到压缩后的数据;存储所述压缩后的数据;同所述第一逻辑地址索引相关联地记录存储所述压缩后的数据的地址;根据所述第一逻辑地址索引与所述压缩后的数据的大小生成第二逻辑地址索引,以及向主机提供所述第二逻辑地址索引;所述主机相关联地记录所述第一命令所访问的第一主机逻辑地址(hlba)与所述第一逻辑地址索引。
36.提供了根据本技术第一方面的第五处理io命令的方法,提供了提供了根据本技术第一方面的第六处理io命令的方法,其中所述第一逻辑地址索引与所述第一命令要写入的数据的第一大小定义了第一逻辑地址空间。
37.提供了根据本技术第一方面的第五或第六处理io命令的方法,提供了提供了根据本技术第一方面的第六处理io命令的方法,还包括:所述存储设备根据所述压缩后的数据的大小更新所述第一存储区域的写指针;以及所述主机用所述第二逻辑地址索引更新所述第一存储区域的写指针。
38.提供了根据本技术第一方面的第五至第七处理io命令的方法之一,提供了提供了根据本技术第一方面的第八处理io命令的方法,还包括:主机向存储设备提供用于向第一存储区域(zone)写入数据的第二命令,其中所述第二命令指示了所述第二逻辑地址索引;所述存储设备压缩所述第二命令要写入的数据,得到第二压缩后的数据;存储所述第二压缩后的数据;同所述第二逻辑地址索引相关联地记录存储所述第二压缩后的数据的地址;根据所述第二逻辑地址索引与所述第二压缩后的数据的大小生成第三逻辑地址索引,以及向主机提供所述第三逻辑地址索引;其中所述第二逻辑地址索引与所述第二命令要写入的数据的第二大小定义了第二逻辑地址空间。
39.提供了根据本技术第一方面的第一至第八处理io命令的方法之一,提供了提供了根据本技术第一方面的第九处理io命令的方法,还包括:为生成所述第一命令,所述主机分配可用的存储区域作为所述第一存储区域,或者获取能容纳所述第一命令要写入的数据的存储区域作为所述第一存储区域;以及相关联地记录所述第一命令所访问的第一主机逻辑地址(hlba)与所述第一存储区域。
40.提供了根据本技术第一方面的第一至第九处理io命令的方法之一,提供了提供了根据本技术第一方面的第十处理io命令的方法,其中所述第一逻辑地址索引指示了所述第一存储区域。
41.提供了根据本技术第一方面的第一至第十处理io命令的方法之一,提供了提供了根据本技术第一方面的第十一处理io命令的方法,其中所述主机还相关联地记录所述第一逻辑地址索引与所述第一命令要写入的数据的第一大小。
42.提供了根据本技术第一方面的第一至第十一处理io命令的方法之一,提供了提供了根据本技术第一方面的第十二处理io命令的方法,其中所述主机的一个或多个主机逻辑地址不存在相关联的逻辑地址索引;响应于要从第三主机逻辑地址读出数据,所述主机若没有记录同第三主机逻辑地址相关联的逻辑地址索引,则指示发生错误;若所述主机获得了同第三主机逻辑地址关联的第三逻辑地址索引,向存储设备提供用于从第三逻辑地址索引读出数据的第三命令。
43.提供了根据本技术第一方面的第一至第十一处理io命令的方法之一,提供了提供了根据本技术第一方面的第十三处理io命令的方法,其中,所述主机的一个或多个主机地址不存在相关联的逻辑地址索引;响应于要从第三主机逻辑地址读出数据,所述主机若没有记录同第三主机逻辑地址相关联的逻辑地址索引,则根据记录的逻辑地址索引与其关联的大小确定第三主机逻辑地址所对应的第三逻辑地址空间,将定义所述第三逻辑地址空间的第三逻辑地址索引作为同第三主机逻辑地址相关联逻辑地址索引,还根据第三主机逻辑地址相对于主机记录的同第三逻辑地址索引相关联地主机逻辑地址的差获得要从第三主机逻辑地址读出的数据在第三逻辑地址空间中的起始位置,向存储设备提供用于从第三逻辑地址索引读出数据的第三命令;若所述主机获得了同第三主机逻辑地址关联的第三逻辑地址索引,向存储设备提供用于从第三逻辑地址索引读出数据的第三命令。
44.提供了根据本技术第一方面的第一至第十一处理io命令的方法之一,提供了提供了根据本技术第一方面的第十四处理io命令的方法,还包括:为生成所述第一命令,所述主机从所述第一存储区域的zlba空间中分配第一zlba空间,所述第一zlba空间的大小能容纳所述第一命令要写入的数据;其中所述第一存储区域的zlba空间是一维线性空间,其大小同所述第一存储区域的容量相同,其每个元素由zlba寻址;所述主机相关联地记录所述第一命令所访问的第一主机逻辑地址(hlba)与所述第一zlba空间,由所述第一主机逻辑地址(hlba)与所述第一大小所定义的主机逻辑地址(hlba)空间的元素同所述第一zlba空间的元素对应。
45.提供了根据本技术第一方面的第十四处理io命令的方法,提供了提供了根据本技术第一方面的第十五处理io命令的方法,还包括:响应于要从第三主机逻辑地址读出数据,所述主机获得同第三主机逻辑地址关联的第三zlba,根据记录的逻辑地址索引与其关联的大小确定第三zlba所对应的第三逻辑地址空间,将定义所述第三逻辑地址空间的第三逻辑地址索引作为同第三主机逻辑地址相关联逻辑地址索引,向存储设备提供用于从第三逻辑地址索引读出数据的第三命令。
46.提供了根据本技术第一方面的第十五处理io命令的方法,提供了提供了根据本技术第一方面的第十六处理io命令的方法,其中,所述主机还根据第三zlba相对于所述主机记录的同第三逻辑地址索引相关联地zlba的差获得要从第三主机逻辑地址读出的数据在
第三逻辑地址空间中的起始位置,以及将所述第三逻辑地址空间中的起始位置开始的指定大小数据作为要从第三主机逻辑地址读出数据。
47.提供了根据本技术第一方面的第一至第十六处理io命令的方法之一,提供了提供了根据本技术第一方面的第十七处理io命令的方法,还包括:主机向存储设备提供用于向第二命名空间写入数据的第四命令;所述存储设备为所述第四命令要写入的数据分配物理地址;同所述分配的物理地址相关联地记录存储所述第四命令所访问的主机逻辑地址;其中所述第二命名空间不同于所述第一存储区域(zone)所在的命名空间,以及其中所述第四命令要写入的数据是用于所述第一命令要写入的数据的元数据。
48.提供了根据本技术第一方面的第一至第十七处理io命令的方法之一,提供了提供了根据本技术第一方面的第十八处理io命令的方法,其中所述存储设备中未关联nvm地址的逻辑地址索引,是无效的逻辑地址索引;以及关联到nvm地址的逻辑索引,是有效的逻辑地址索引;以及其中累积存储区域的所有有效逻辑地址索引所定义的所有逻辑地址空间的大小的和,得到所述存储区域的存储区域容量。
49.提供了根据本技术第一方面的第一至第十八处理io命令的方法之一,提供了提供了根据本技术第一方面的第十九处理io命令的方法,其中所述主机向所述存储设备提供用于从第五逻辑地址索引读出数据的第五命令;所述方法还包括,所述存储设备识别所述第五逻辑地址索引是否是有效的逻辑地址索引;若第五逻辑地址索引是有效的逻辑地址索引,根据第五逻辑地址索引读出第五压缩后的数据;将所述第五压缩后的数据解压缩得到第五解压缩的数据;将第五解压缩数据的全部或部分作为所述第五命令的处理结果。
50.提供了根据本技术第一方面的第十九处理io命令的方法,提供了提供了根据本技术第一方面的第二十处理io命令的方法,其中若第五逻辑地址索引不是有效的逻辑地址索引,所述存储设备向所述主机发送所述第五命令的处理结果,在所述第五命令的处理结果中指示所述第五命令存在错误。
51.提供了根据本技术第一方面的第十九或第二十处理io命令的方法,提供了提供了根据本技术第一方面的第二十一处理io命令的方法,其中第五命令指示了第五长度,所述方法还包括:若第五解压缩的数据的大小小于所述第五长度,所述存储设备还根据第五压缩后的数据的地址读出第五压缩后的数据之后的第六压缩后的数据;将所述第六压缩后的数据解压缩得到第六解压缩的数据;重复上述过程,直到读出的所有解压缩的数据的大小的和不小于所述第五长度;将读出的所有解压缩的数据作为整体的从头开始的等于第五长度的部分作为所述第五命令的处理结果。
52.提供了根据本技术第一方面的第十九至第二十一处理io命令的方法之一,提供了提供了根据本技术第一方面的第二十二处理io命令的方法,还包括:所述主机向所述存储设备提供用于从第六逻辑地址索引读出数据的第六命令,其中第六命令指示了多个逻辑地址与同所述多个逻辑地址的每个对应的多个长度;若所述多个逻辑地址的第一个逻辑地址是有效的逻辑地址索引,根据第一个逻辑地址读出压缩后的数据,并解压缩得到同所述第一个逻辑地址对应的第六逻辑地址空间的完整数据;根据所述第六命令指示的所述多个逻辑地址与同所述多个逻辑地址的每个对应的所述多个长度,从所述第六逻辑地址空间的完整数据中获取多段数据,作为所述第六命令的处理结果。
53.根据本技术的第二方面,提供了根据本技术第二方面的第一处理io命令的方法,
包括:主机向存储设备提供用于从第一存储区域(zone)读出数据的第一命令;其中第一命令指示了第一逻辑地址索引;存储设备识别所述第一逻辑地址索引是否是有效的逻辑地址索引;若第一逻辑地址索引是有效的逻辑地址索引,根据第一逻辑地址索引读出第一压缩后的数据;将所述第一压缩后的数据解压缩得到第一解压缩的数据;将第一解压缩的数据的部分或全部作为所述第一命令的处理结果提供给所述主机。
54.根据本技术第二方面的第一处理io命令的方法,提供了根据本技术第二方面的第二处理io命令的方法,还包括:若第一逻辑地址索引不是有效的逻辑地址索引,所述存储设备向所述主机发送所述第一命令的处理结果,在所述第一命令的处理结果中指示所述第一命令存在错误。
55.根据本技术第二方面的第一或第二处理io命令的方法,提供了根据本技术第二方面的第三处理io命令的方法,其中所述存储设备根据第一逻辑地址索引读出第一压缩后的数据的长度是根据所述第一逻辑地址索引从nvm获取的,或者根据第一逻辑地址索引到下一个有效逻辑地址索引之间的距离确定的。
56.根据本技术第二方面的第一至第三处理io命令的方法之一,提供了根据本技术第二方面的第四处理io命令的方法,其中所述第一命令还指示了要读取的数据的第一长度;所述方法还包括:若第一解压缩的数据的大小小于所述第一长度,还根据第一压缩后的数据在nvm的地址读出nvm上在第一压缩后的数据之后的第二压缩后的数据;将所述第二压缩后的数据解压缩得到第二解压缩的数据;重复上述过程,直到读出的所有解压缩的数据的大小的和不小于所述第一长度;将读出的所有解压缩的数据作为整体的从头开始的等于第一长度的部分作为所述第一命令的处理结果。
57.根据本技术第二方面的第一至第四处理io命令的方法之一,提供了根据本技术第二方面的第五处理io命令的方法,还包括:主机向存储设备提供用于从第一存储区域(zone)读出数据的第二命令;其中第二命令指示了多个逻辑地址与同所述多个逻辑地址的每个对应的多个长度;若所述多个逻辑地址的第一个逻辑地址是有效的逻辑地址索引,根据第一个逻辑地址读出压缩后的数据,并解压缩得到同所述第一个逻辑地址对应的第二逻辑地址空间的完整数据;根据所述第二命令指示的所述多个逻辑地址与同所述多个逻辑地址的每个对应的所述多个长度,从所述第二逻辑地址空间的完整数据中获取多段数据,作为所述第二命令的处理结果。
58.根据本技术第二方面的第一至第五处理io命令的方法之一,提供了根据本技术第二方面的第六处理io命令的方法,还包括:主机向存储设备提供用于从第一存储区域(zone)读出数据的第三命令,其中第三命令指示了第三逻辑地址索引与第三长度;若第三逻辑地址索引是有效的逻辑地址索引,所述存储设备根据第三逻辑地址索引读出第三压缩后的数据;将所述第三压缩后的数据解压缩得到第三解压缩的数据;若第三解压缩的数据的长度小于所述第三长度,还根据第三逻辑地址索引从ftl表中获取同第三逻辑地址索引相邻的下一个有效逻辑地址索引,根据所述下一个有效逻辑地址索引地址读出第四压缩后的数据,将所述第四压缩后的数据解压缩得到第四解压缩的数据;将读出的所有解压缩的数据作为整体的从头开始的等于第三长度的部分作为所述第三命令的处理结果。
59.根据本技术第二方面的第一至第五处理io命令的方法之一,提供了根据本技术第二方面的第六处理io命令的方法,其中若第三解压缩的数据的长度与第四解压缩的数据的
长度的和小于所述第三长度,还继续从ftl表中获取下一个有效逻辑地址索引,根据获取的有效逻辑地址索引地址从nvm读出压缩后的数据,直接读出的所有压缩后的数据的解压缩的数据的长度和不小于所述第三长度。
60.根据本技术第二方面的第一至第六处理io命令的方法之一,提供了根据本技术第二方面的第七处理io命令的方法,还包括:主机向存储设备提供用于向第一存储区域(zone)写入数据的第四命令;所述存储设备为所述第四命令分配第四逻辑地址索引,所述第四逻辑地址索引与所述第四命令要写入的数据的第四大小定义了第四逻辑地址空间;压缩所述第四命令要写入的数据,得到压缩后的数据;存储所述压缩后的数据;同所述第四逻辑地址索引相关联地记录存储所述压缩后的数据的地址;以及向主机提供所述第四逻辑地址索引;所述主机相关联地记录所述第四命令所访问的第四主机逻辑地址(hlba)与所述第四逻辑地址索引。
61.根据本技术第二方面的第一至第六处理io命令的方法之一,提供了根据本技术第二方面的第八处理io命令的方法,还包括:主机向存储设备提供用于向第一存储区域(zone)写入数据的第四命令,其中所述第四命令指示了第四逻辑地址索引;所述存储设备压缩所述第四命令要写入的数据,得到压缩后的数据;存储所述压缩后的数据;同所述第四逻辑地址索引相关联地记录存储所述压缩后的数据的地址;根据所述第四逻辑地址索引与所述压缩后的数据的大小生成第五逻辑地址索引,以及向主机提供所述第五逻辑地址索引;所述主机相关联地记录所述第四命令所访问的第四主机逻辑地址(hlba)与所述第四逻辑地址索引。
62.根据本技术的第三方面,提供了根据本技术第三方面的处理io命令的方法,包括:获取用于向第一存储区域(zone)写入数据的第一命令;根据所述第一存储区域的写指针(wp)为所述第一命令要写入的数据分配第一逻辑地址索引,所述第一逻辑地址索引与所述第一命令要写入的数据的第一大小定义了第一逻辑地址空间;压缩所述第一命令要写入的数据,得到压缩后的数据;存储所述压缩后的数据;同所述第一逻辑地址索引相关联地记录存储所述压缩后的数据的地址;以及提供所述第一逻辑地址索引作为对所述第一命令的响应。
63.根据本技术的第四方面,提供了根据本技术第四方面的处理io命令的方法,包括:获取用于向第一存储区域(zone)写入数据的第一命令,其中所述第一命令指示了第一逻辑地址索引;压缩所述第一命令要写入的数据,得到压缩后的数据;存储所述压缩后的数据;同所述第一逻辑地址索引相关联地记录存储所述压缩后的数据的地址;根据所述第一逻辑地址索引与所述压缩后的数据的大小生成第二逻辑地址索引,以及提供所述第二逻辑地址索引作为对所述第一命令的响应。
64.根据本技术的第五方面,提供了根据本技术第五方面的存储系统,其中所述存储系统包括主机与存储设备;所述主机向所述存储设备发出用于向第一存储区域(zone)写入数据的命令;所述存储设备执行根据本技术第三方面所述的方法来处理所述用于写入数据的命令;所述主机获取所述存储设备提供的所述用于写入数据的命令的处理结果,相关联地记录所述用于写入数据的命令的处理结果指示的逻辑地址索引与所述用于写入数据的命令访问的主机逻辑地址。
65.根据本技术的第六方面,提供了根据本技术第六方面的存储系统,其中所述存储
系统包括主机与存储设备;所述主机向所述存储设备发出用于向第一存储区域写入数据的命令;所述存储设备执行根据本技术第四方面所述的方法来处理所述用于写入数据的命令;所述主机获取所述存储设备提供的所述用于写入数据的命令的处理结果,根据所述用于写入数据的命令的处理结果指示的逻辑地址索引更新所述第一存储区域的写指针。
66.根据本技术的第七方面,提供了根据本技术第七方面的处理io命令的方法,包括:获取用于从第一存储区域(zone)读出数据的第一命令;其中第一命令指示了第一逻辑地址索引;识别所述第一逻辑地址索引是否是有效的逻辑地址索引;若第一逻辑地址索引是有效的逻辑地址索引,根据第一逻辑地址索引读出第一压缩后的数据;将所述第一压缩后的数据解压缩得到第一解压缩的数据;将第一解压缩的数据的部分或全部作为所述第一命令的处理结果。
67.根据本技术的第八方面,提供了根据本技术第八方面的信息处理设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现根据本技术第三方面、第四方面或第七方面所述的方法。
68.根据本技术的第九方面,提供了根据本技术第九方面的处理io命令的方法,包括:向存储设备提供用于向第一存储区域(zone)写入数据的第一命令;获取所述存储提供的第一逻辑地址索引;相关联地记录所述第一命令所访问的第一主机逻辑地址(hlba)与所述第一逻辑地址索引。
69.根据本技术的第十方面,提供了根据本技术第十方面的处理io命令的方法,包括:向存储设备提供用于向第一存储区域(zone)写入数据的第一命令,其中所述第一命令指示了第一逻辑地址索引;获取所述存储设备提供的第二逻辑地址索引;相关联地记录所述第一命令所访问的第一主机逻辑地址(hlba)与所述第一逻辑地址索引;以及根据所述第一逻辑地址索引更新所述第一存储区域的写指针。
70.根据本技术的第十一方面,提供了根据本技术第十一方面的第一处理io命令的方法,包括:获取用于写入数据的第一命令;为所述第一命令要写入的数据分配第一逻辑地址索引与第一大小,所述第一逻辑地址索引与所述第一大小定义了第一逻辑地址空间,所述第一大小是所述第一逻辑地址空间的大小,所述第一大小能容纳未经压缩的所述第一命令要写入的数据;压缩所述第一命令要写入的数据,得到压缩后的数据;在nvm中存储所述压缩后的数据;以及同所述第一逻辑地址索引相关联地记录nvm中存储所述压缩后的数据的地址。
71.根据本技术的第十二方面,提供了根据本技术第十二方面的第一处理io命令的方法,包括:获取用于读出数据的第三命令,其中第三命令指示了第三逻辑地址与第三长度;若第三地址是有效的逻辑地址索引,根据第三地址从nvm读出第三压缩后的数据;将所述第三压缩后的数据解压缩得到第三解压缩的数据;将第三数据的从头开始的等于第三长度的部分作为所述第三命令的处理结果。
72.根据本技术的第十三方面,提供了根据本技术第十三方面的第一存储系统,其中所述存储系统包括主机与存储设备;所述主机向所述存储设备发出用于写入数据的命令;所述存储设备执行根据本技术第十一方面的处理io命令的方法来处理所述用于写入数据的命令;所述主机获取所述存储设备提供的所述用于写入数据的命令的处理结果,记录所述用于写入数据的命令的处理结果指示的逻辑地址索引作为同所述用于写入数据的命令
对应的逻辑地址;以及所述记录主机还同所述用于写入数据的命令对应的数据长度。
73.根据本技术第十三方面的第一存储系统,提供了根据本技术第十三方面的第二存储系统,其中所述主机向所述存储设备发出用于读出数据的命令;所述存储设备执行根据本技术第十二方面的处理io命令的方法之一所述的方法来处理所述用于读出数据的命令;所述主机获取所述存储设备提供的所述用于读出数据的命令的处理结果。
74.根据本技术的第十四方面,提供了一种信息处理设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现根据本技术第十一方面或第十二方面提供的处理io命令的方法。
附图说明
75.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
76.图1展示了现有技术的存储设备的框图;
77.图2是ftl的示意图;
78.图3a是zone的示意图;
79.图3b-图3d展示了向zone写入数据的示意图;
80.图4a展示了根据本技术实施例提供的透明压缩的示意图;
81.图4b展示了根据本技术实施例的地址空间映射的示意图;
82.图5a是现有技术的逻辑地址空间的示意图;
83.图5b是根据本技术实施例的逻辑地址空间的示意图;
84.图6a展示根据本技术实施例读出压缩数据的流程图;
85.图6b展示根据本技术又一实施例读出压缩数据的示意图;
86.图6c展示根据本技术再一实施例读出压缩数据的流程图;
87.图6d展示根据本技术依然再一实施例读出压缩数据的示意图
88.图7展示了根据本技术实施例的压缩的zns的zone容量的示意图;
89.图8展示了根据本技术实施例的提供混合ns的存储设备的示意图;
90.图9展示了根据本技术实施例使用混合ns的示意图;以及
91.图10a展示了根据本技术实施例的主机使用压缩的zns的示意图;
92.图10b与图10c展示了根据本技术实施例的主机使用压缩的zns的流程图;
93.图11a展示了根据本技术实施例的用于压缩的zns的zone的zlba空间的示意图;
94.图11b展示了根据本技术依然另一实施例的主机使用压缩的zns的示意图;
95.图11c与图11d展示了根据本技术实施例的主机使用压缩的zns的流程图。
具体实施方式
96.下面结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都
属于本技术保护的范围。
97.图4a展示了根据本技术实施例提供的透明压缩的示意图。
98.在图4a中,以两个命令(cmd1与cmd2)为例,展示了存储设备对命令对应数据进行压缩的过程,图4a的左侧展示的步骤410到418,是处理两个命令所使用的方法。命令cmd1要写入128kb的数据(d1),命令cmd2要写入60kb的数据(d2)。
99.可以理解地,指示向存储设备写入数据的命令,包括例如写命令与追加命令,写命令中指示了承载写入数据的地址。
100.响应于收到命令(cmd1与cmd2)(410),对命令要写入的数据进行压缩(412)。对命令cmd1的数据d1压缩得到压缩后的数据(cd1),其大小为16kb,对命令cmd2的数据d2压缩得到压缩后的数据(cd2),其大小为4kb。可以理解的,压缩后的数据大小可能不是逻辑块大小的整数倍(例如,3.7kb),这种情况下,将压缩后的数据以逻辑块大小为边界对齐(例如,逻辑块大小为512字节,为3.7kb的压缩后数据分配8个逻辑块)。在一个例子中,将命令(例如cmd1)对应的数据(例如d1)整体进行压缩,得到的压缩后数据整体能被解压缩,而压缩后数据的部分不能被解压缩。在又一个例子中,将命令对应的数据(例如d1)进行分段压缩,得到一个或多个分段,每个分段的大小能被容纳于1个扇区,且每个分段能被独立解压缩。
101.对未经压缩的数据(d1与d2)分配逻辑地址空间(414)以容纳数据。对于写命令,分配的逻辑地址空间的起始地址是写命令中指示的地址。对于追加命令,分配的逻辑地址空间的起始地址是例如当前可写入逻辑地址空间的起始地址,或者对于zns是例如wp指示的逻辑地址。
102.根据本技术的实施例,将分配的逻辑地址空间的起始地址称为逻辑地址索引。仅逻辑地址索引将被用于索引ftl表。分配的逻辑地址空间的除起始地址以外的其他地址不被用于索引ftl表。分配的逻辑地址空间由逻辑地址索引与分配的逻辑地址空间大小这两个维度共同定义。仅逻辑地址索引被用于描述命令待写入的数据分配的逻辑地址空间的起始地址,逻辑地址空间的其他逻辑地址不用于描述逻辑地址空间的起始地址。为命令待写入的数据分配的逻辑地址空间的容量仅由分配的逻辑地址空间大小维度定义,从而为相邻两个命令分配的逻辑地址空间各自的逻辑地址索引的差,不代表为在前命令分配的逻辑地址空间的容量。
103.根据本技术的实施例,为相邻两个命令分配的逻辑地址空间各自的逻辑地址索引的差,代表了在前命令对应的压缩后数据的大小(按逻辑块大小对齐)。可以意识到,根据本技术的实施例,需要在对一个命令的待写入数据获得其压缩后数据大小后才知晓其下一个命令对应的逻辑地址空间索引。
104.例如,当前可写入逻辑地址空间的起始地址(或对于zns的wp,或者作为写命令的cmd1指示的逻辑地址)记为slba,为cd1分配从slba开始,长度为256个逻辑块(逻辑块大小为512b)的逻辑地址空间。
105.一般地,将命令要写入的数据(未经压缩)的大小记为ds,将逻辑块大小记为ss,则为未经压缩的待写入数据分配的逻辑地址范围长度是[ds/ss](ds/ss结果向上取整)。从而,根据本技术的实施例,在逻辑地址空间中分布的是未经压缩的写入数据,写入数据在逻辑地址空间中占据的大小对应未经压缩的数据大小。
[0106]
将对cmd2分配的逻辑地址记为slba2,slba2=slba+32,其中32是cmd1对应的压缩
后数据cd1占据的逻辑块数量。而为cmd2分配的逻辑地址空间是从slba+32开始,长度为120个逻辑块的逻辑地址空间。
[0107]
对于追加命令,分配逻辑地址空间后,还需要更新wp。一般地,将命令要写入的数据经压缩后的大小记为cs,将逻辑块大小记为ss,则分配逻辑地址空间后wp的增量为[cs/ss](cs/ss结果向上取整)。wp的增量也代表了为命令分配逻辑地址空间后用于下一命令的逻辑地址索引的增量。
[0108]
还为压缩后的数据(cd1与cd2)分配用于nvm的物理地址。分配的物理地址范围大小需足以容纳压缩后的数据。例如,在nvm中由spba所指示的物理地址为起点,长度为16kb的存储空间被分配来存储压缩后的数据cd1,接下来的4kb存储空间被分配来存储压缩后的数据cd2。所属领域技术人员将意识到,存储压缩后数据的物理存储空间有其他分布方式,例如,位于不同nvm或不同的物理块。以及在ftl表中记录分配的逻辑地址范围的起始地址与对应的物理地址。
[0109]
将压缩后的数据(cd1与cd2)写入由分配的物理地址指示的nvm(416)。还将步骤414分配的逻辑地址索引返回给主机(418),以向主机告知为命令(cmd1或cmd2)分配的逻辑地址空间。主机可记录这些分配的逻辑地址索引以在接下来使用这些分配的逻辑地址索引取回对应的数据(d1或d2)。还向主机告知命令处理完成。
[0110]
需要指出的,根据本技术的实施例,数据压缩对主机透明。主机无需额外的处理来访问nvm中经压缩的数据。也无需修改主机所使用的访问存储设备的协议。在主机看来,对应命令cmd1的数据d1被写入逻辑地址slba,数据长度为128kb,而对应命令cmd2的数据d2被写入逻辑地址slba+32,数据长度为60kb。主机从逻辑地址slba开始读出128kb数据,将得到数据d1,而主机从逻辑地址slba+32开始读出60kb数据,将得到数据d2。
[0111]
步骤416不必发生在步骤418之前。存储设备可使用缓存来记录要写入nvm的数据(cd1与cd2),并在数据cd1和/或cd2被写入nvm之前,向主机告知命令(cmd1与cmd2)处理完成。可选地,主机提供额外的刷写(flush)命令来指示存储设备将缓存的数据(cd1与cd2)写入nvm。
[0112]
图4b展示了根据本技术实施例的地址空间映射的示意图。
[0113]
也参看图4a,在处理完命令cmd1与cmd2后,ftl表的条目中记录了同逻辑地址索引slba(即slba+0)对应的nvm地址(该nvm地址存储了压缩后的数据cd1,大小为16kb),ftl表的条目中还记录了同逻辑地址索引slba+32对应的nvm地址(该nvm地址存储了压缩后的数据cd2,大小为4kb)。ftl表的条目中还记录了同逻辑地址索引slba+40对应的nvm地址(该nvm地址存储了对应命令cmd3(图4b中未示出)的压缩后的数据cd2)。
[0114]
图4b的物理地址空间指示在nvm中存储的数据,由物理地址(即nvm地址)寻址。可选地,nvm还提供额外的存储空间来容纳数据的元数据,元数据包括例如所对应数据的逻辑地址、压缩后的数据长度和/或压缩前的数据长度。根据压缩后的数据长度,得以知晓例如从ftl表条目记录的nvm地址开始,多大物理地址范围内的数据属于由同一数据得到的压缩数据。
[0115]
图4b的逻辑地址空间指示主机向存储设备的逻辑地址索引写入或读出的数据。数据d1在逻辑地址空间中占据128kb大小的地址空间范围,而数据d2在逻辑地址空间中占据60kb大小的地址空间范围。逻辑地址空间的数据d1同物理地址空间的压缩后数据cd1对应,
逻辑地址空间的数据d2同物理地址空间的压缩后数据cd2对应,逻辑地址空间的数据d3同物理地址空间的压缩后数据cd3对应。从而,根据本技术的实施例,用户写入存储设备的数据以其原始大小占据逻辑地址空间,而以压缩后的大小占据物理地址空间。
[0116]
需要指出的,根据本技术实施例,逻辑地址空间同物理地址空间并非一一对应。逻辑地址空间的大小超过了物理地址空间大小。为每个命令对应的数据所分配的逻辑地址空间由逻辑地址空间索引(该逻辑地址空间的起始地址)与该逻辑地址空间的大小这两个维度定义。仅逻辑地址空间索引被用作ftl表的索引,逻辑地址空间的其他逻辑地址不能用作ftl表的索引。可选地,一些实施方式中,ftl表条目在ftl表中的位置暗示了该条目对应的逻辑地址索引,但一些条目因没有对应的逻辑地址空间索引而不被使用或不被填充有效的nvm地址。例如,参看图4b,对应逻辑地址索引slba+1到slba+31的ftl表条目都不被使用或不被填充有效的nvm地址。
[0117]
图5a是现有技术的逻辑地址空间的示意图。
[0118]
图5b是根据本技术实施例的逻辑地址空间的示意图。
[0119]
通过图5a与图5b对照展示了处理三个命令(cmd1、cmd2与cmd3)后,各命令写入的数据在现有技术的逻辑地址空间与根据本技术实施例的逻辑地址空间中的分布。cmd1指示写入的数据(d1)大小为128kb,cmd2指示写入的数据(d2)大小为60kb,cmd3指示写入的数据(d3)大小为32kb。按cmd1、cmd2与cmd3的顺序处理三个命令,三个命令对应的逻辑地址空间的起始地址分别记为slba1、slba2与slba3。逻辑块大小为512b。整体逻辑地址空间的起始地址为slba。
[0120]
参看图5a,根据现有技术的方式,逻辑地址空间为1维空间,由逻辑地址描述数据在空间中的分布。命令cmd1对应的数据在逻辑地址空间中占据逻辑地址slba+0到slba+255的范围(256个逻辑块),起始地址slba1=slba+0,命令cmd2对应的数据在逻辑地址空间中占据逻辑地址slba+256到slba+315的范围(120个逻辑块),起始地址slba2=slba+256,命令cmd3对应的数据在逻辑地址空间中占据逻辑地址slba+316到slba+379的范围(64个逻辑块),起始地址slba3=slba+316。
[0121]
参看图5b,对于同样的3个命令(cmd1、cmd2与cmd3),根据本技术的实施例,逻辑地址空间为2维空间,容纳每个命令对应的数据的逻辑地址空间由2个维度表达,一个维度是该逻辑地址空间的逻辑地址索引,另一个维度是该逻辑地址空间的大小。由于逻辑地址索引与逻辑地址空间的大小是2个(正交的)维度,这两个维度不具备可加性,两个维度的数值相加的结果不能用于逻辑地址空间的寻址。命令cmd1对应的数据占据的逻辑地址空间由《逻辑地址索引slba+0,大小128kb>表示,命令cmd2对应的数据占据的逻辑地址空间由《逻辑地址索引slba+32,大小60kb>表示。在逻辑地址空间中,各命令对应的数据从逻辑地址索引描述的位置开始,向由逻辑地址空间的大小维度所描述的方向延申,而不是向逻辑地址索引维度的下一个元素方向延申。
[0122]
根据本技术的实施例,逻辑地址空间的逻辑地址索引维度的元素取值无需连续。在图5b的例子中,逻辑地址空间的逻辑地址索引维度的第一个元素为slba+0,第二个元素为slba+32,第三个元素为slba+40。对于诸如slba+1至slba+31的其他取值,其不是逻辑地址索引维度的元素,不具有对应的逻辑地址空间大小维度,也不能用于读取数据。
[0123]
在一种实施方式中,逻辑地址空间的逻辑地址索引维度中,相邻元素的数值差(例
如,32=slba2-slba1)代表了该对相邻元素中的前一元素所对应的数据压缩后所占据的逻辑块数量(例如,32代表占据32个逻辑块)。而每个元素的数值是该元素之前的所有元素所对应的数据压缩后所占据的逻辑块数量之和。从而逻辑地址索引的取值可用于索引现有技术的ftl表,现有技术的ftl可用于将根据本技术实施例的逻辑地址索引映射到物理地址。而未被逻辑地址索引使用的取值(诸如slba+1至slba+31)在ftl表查询不到结果,或被标志为对应诸如“空值”的指定值。
[0124]
在又一种实施方式中,逻辑地址索引的取值不作为数值,而是作为诸如“键(key)”的索引,而ftl通过将“键”映射到“值”来得到对应的物理地址。
[0125]
再次参看图5a与图5b各自的图表,在两种实施方式中,对于处理后的3个命令,主机都记录每个命令(cmd1、cmd2与cmd3)对应的逻辑地址空间起始地址(slba1、slba2与slba3)与数据长度。从而在两种实施方式中,主机实施的操作形式相同(仅起始地址的取值有区别,并且该取值来自于存储设备返回的参数,而无需主机计算),因而根据本技术的实施例,以对主机透明的方式提供了数据压缩,而无需让主机引入额外的操作。
[0126]
图6a展示根据本技术实施例读出压缩数据的流程图。
[0127]
主机向存储设备发出读命令来取回已写入存储设备的数据(610)。读命令指示了例如2个参数,所读取数据的起始地址(记为slba)与长度。读命令中的起始地址slba是主机维护的、从存储设备接收的针对其之前发出的写命令所返回的存储所写入数据的逻辑地址空间的起始地址。根据本技术的实施例,存储设备返回的该起始地址是逻辑地址索引,而主机将其视作逻辑地址空间的起始地址,从而主机无需改变现有技术中对该起始地址的处理方式。
[0128]
响应于收到读命令,从读命令中提取了起始地址slba与长度,存储设备检查该起始地址slba是否是有效的逻辑地址索引(615)。例如,通过查找ftl表来识别所获取的slba是否是有效的逻辑地址索引。在ftl表中记录了有效的逻辑地址索引。反之,若在ftl表没有记录,或者ftl表指示同该逻辑地址索引对应的物理地址为诸如空值的指定值,则识别出所获取的slba不是有效的逻辑地址索引。响应于slba不是有效的逻辑地址索引(615),存储设备向主机指示读命令存在错误(618)。
[0129]
响应于获取的slba是有效的逻辑地址索引(615),获取同slba对应的在nvm中存储的压缩后的数据(620)。例如,根据slba访问ftl表以获取对应的物理地址,并根据物理地址访问nvm以读出数据,读出的数据是压缩后的数据。可选地,为从nvm读出数据,还需要获得压缩后数据的长度,因为根据本技术的实施例,ftl表的各条目对应的物理地址空间具有可变的大小(也参看图4b,压缩数据cd1的大小为16kb,而压缩数据cd2的大小为4kb)。在一个例子中,从物理地址指示的存储区域的指定位置(例如,前部或带外存储区)获取长度信息,该长度信息指示要读取的压缩数据在物理地址空间中的扇区数量。可以理解地,在向nvm写入数据时,也将该长度信息写入nvm。在又一个例子中,在ftl表中搜索在步骤610中获取的逻辑地址索引slba之后的下一个有效逻辑地址索引(记为slba+a),两个逻辑地址索引的差(a)对应了压缩后数据在物理地址空间中的扇区数量。例如,也参看图5b,cmd1对应的逻辑地址索引为slba1,在ftl表中,位于slba1之后的下一个有效逻辑地址索引为slba2,slba2与slba1的差32代表了cmd1的对应数据经压缩后在物理地址空间中的扇区数量(32个)。在依然又一个例子中,根据slba对应的物理地址开始读出一个或多个扇区的压缩数据,直到
识别了(例如,根据结尾标志或者解压缩能够成功)对应未压缩数据的压缩数据已经全部读出。对步骤620获取的压缩数据进行解压缩(625)。
[0130]
在依然又一个例子中,nvm存储的压缩后数据是分段压缩的,例如,在压缩过程种形成多个压缩包,每个压缩包不超过一个扇区的大小,并且能被独立地解压缩,并且多个压缩包被存储在连续地多个扇区中;相应地根据slba对应的物理地址开始读出一个扇区的压缩数据,对压缩数据进行解压缩(625),比较解压缩后的数据同步骤610中从读命令获取的长度是否一致。若解压缩后的数据小于读命令所指示的长度,则继续从slba对应的物理地址的下一位置读出下一个扇区,对该扇区中的压缩数据解压缩(625),并识别累积的解压缩数据长度是否达到从读命令获取的长度。若依然没有达到读命令所指示的要读取数据长度,则重复上述过程从一个或多个其他扇区中读取压缩数据并解压缩(625),直到累积的解压缩数据达到了要读取数据的长度。
[0131]
需要指出的,读命令所要读取的数据长度(步骤610获取的长度,记为l)可能不同于之前写命令写入的数据长度。例如,也参看图5b,命令cmd1写入的数据长度是128kb,对应的逻辑地址索引为slba1。而主机提供的读命令可指示逻辑地址slba1,但长度为例如58kb。读命令中指示的要读取数据长度为从读命令指示的起始地址slba开始的数据长度。因而,在步骤630,将解压缩后的数据从头开始长度为l(例如,50kb)的数据作为读命令的处理结果提供给主机。
[0132]
主机提供给存储设备的一些读命令具有不同的格式。例如,读命令不携带长度信息,而是暗示了要读取的数据长度,例如每个读命令要读取具有固定长度的数据。在另一些情况中,读命令指示要读取多份不连续的数据,图6b展示了对此类读命令的处理方式。
[0133]
图6b展示根据本技术又一实施例读出压缩数据的示意图。
[0134]
作为举例,读命令640指示从逻辑地址slba+0处读取长度为2kb的数据,从逻辑地址slba+5处读取长度为2kb的数据,还从逻辑地址slba+50处读取3kb数据。每个逻辑块大小为例如512b。
[0135]
ftl表中记录了逻辑地址索引(slba+0与slba+32),也记录了各逻辑地址索引对应的nvm的物理地址。在nvm中存储了分别对应这两个逻辑地址索引的经压缩的数据(大小为16kb的压缩数据cd1与大小为4kb的压缩数据cd2)。压缩数据cd1对应的压缩前数据是128kb,在根据本技术实施例的逻辑地址空间中由《slba+0,128kb》所代表。
[0136]
读命令640指示了3个要读取的地址,分别记为《slba+0,2kb》(642)、《slba+5,2kb》(644)与《slba+50,3kb》(646)。根据本技术的实施例,根据读命令640要读取的多个地址中的第一个地址《slba+0,2kb》(642),将其指示的地址slba+0作为逻辑地址索引,并用其访问ftl表进而获得压缩数据cd1的物理地址。而读命令640要读取的其他地址都不作为逻辑地址索引。
[0137]
参看图6b,读出压缩数据cd1,并解压缩得到对应逻辑地址空间《slba+0,128kb》的数据d1。
[0138]
将用读命令640要读取的多个地址《slba+0,2kb》(642)、《slba+5,2kb》(644)与《slba+50,3kb》(646),按各地址相对于数据d1在逻辑地址空间的起始地址的相对位置与长度,线性映射到数据d1的逻辑地址空间《slba+0,128kb》的逻辑地址空间大小维度。作为举例,三个地址《slba+0,2kb》(642)、《slba+5,2kb》(644)与《slba+50,3kb》(646)在逻辑地址
空间大小维度上分别对应从0开始到2kb范围的数据、从2.5kb开始2kb范围的数据,以及从25kb开始3kb范围的数据。从数据d1中获取这些范围的数据,作为读命令640的处理结果提供给主机。
[0139]
图6c展示根据本技术再一实施例读出压缩数据的流程图。
[0140]
图6c展示的实施例具有同图6a展示的实施例相同的多个步骤(610、615、618、620、625)。
[0141]
在根据图6c的实施例中,在步骤625根据作为逻辑地址索引的起始地址slba读出的所有数据解压缩后,进一步判断解压缩后的数据大小是否满足步骤610的读命令所要求的数据长度(l)(650)。若解压缩后的数据大小超过了数据长度(l),在步骤654,将解压缩后的数据从头开始长度为l的数据作为读命令的处理结果提供给主机。在步骤650,若解压缩后的数据大小依然小于数据长度(l),则在ftl表中搜索在步骤610中获取的逻辑地址索引slba之后的下一个有效逻辑地址索引(记为slba+a)(652)。返回步骤620,根据该下一个有效逻辑地址索引(slba+a),获取同slba+a对应的在nvm中存储的压缩后的数据。进而通过步骤625及其后续步骤继续处理,直到在步骤650,识别出多次读出的压缩后的数据的解压缩后的数据长度累积不小于要读取的数据长度(l),并通过步骤654向主机输出长度为l的数据,作为对步骤610的读命令的响应。
[0142]
图6d展示根据本技术依然再一实施例读出压缩数据的示意图。
[0143]
作为举例,读命令680指示从逻辑地址slba+0处读取长度为140kb的数据。每个逻辑块大小为例如512b。
[0144]
同图6b展示的情况相同,ftl表中记录了逻辑地址索引(slba+0与slba+32),也记录了各逻辑地址索引对应的nvm的物理地址。在nvm中存储了分别对应这两个逻辑地址索引的经压缩的数据(大小为16kb的压缩数据cd1与大小为4kb的压缩数据cd2)。压缩数据cd1对应的压缩前数据是128kb,由根据本技术实施例的逻辑地址空间《slba+0,128kb》所代表。压缩数据cd2对应的压缩前数据是60kb,由根据本技术实施例的逻辑地址空间《slba+32,60kb》所代表。
[0145]
读命令680要读取的数据大小(140kb)超出了逻辑地址索引slba+0对应的解压缩后数据大小(128kb),因而,根据本技术的实施例,由逻辑地址索引slba+0在ftl表中的紧邻下一个逻辑地址索引(slba+32)继续为读命令680提供数据,而逻辑地址索引slba+0与slba+32各自对应的解压缩后的数据大小为188kb,已满足了读命令680所要读取数据的要求。因而读命令680对应了两个读命令,分别记为访问逻辑地址空间《slba+0,128kb》的读命令(682)与访问逻辑地址空间《slba+32,12kb》的读命令(684)。可以理解地,也参看图6c,在处理读命令680时,通过步骤620与步骤625相当于处理了读命令(682),在步骤650识别出还未得到读命令680所需的全部数据,并继续处理读命令(684)。以及将读命令682读出的128kb数据与读命令684读出的12kb数据组合作为对读命令640的响应。
[0146]
由于进行了压缩,存储设备提供的逻辑地址空间被扩大了。
[0147]
主机访问遵循nvme协议的zns时,每个zone为主机提供可被顺序写入的逻辑地址空间,并且主机维护zns返回的用于每个命令的逻辑地址空间的起始地址。根据本技术的实施例,无需主机进行额外的操作,以对主机透明的方式向主机提供具有压缩能力的zns(简称为压缩的zns)。根据本技术的实施例,为提供压缩的zns,以根据例如图4a与图4b展示的
实施例提供的方式处理主机向压缩的zns提供的命令(写命令或追加命令),并将主机返回分配的逻辑地址索引作为用于命令的逻辑地址空间的起始地址。以根据本技术实施例的二维结构的逻辑地址空间作为向主机展示的zone的逻辑地址空间。但主机无需意识到根据本技术实施例所提供逻辑地址空间具有2个维度,而是采用诸如现有技术的访问1维逻辑地址空间的方式,以起始地址与数据长度来取回写入存储设备的数据。在主机看来,也参看图5b,其向存储设备的从slba+0开始、长度为128kb的逻辑地址空间写入了数据d1,向存储设备的从slba+32开始、长度为60kb的逻辑地址空间写入了数据d2,向存储设备的从slba+40开始、长度为32kb的逻辑地址空间写入了数据d3。虽然,如果主机对存储了数据d1与d2的逻辑地址空间的起始地址求差,会发现两个起始地址仅相距32个逻辑块,并会困惑32个逻辑块为何能容纳128kb数据,但这不影响主机对其写入存储设备的zns的各数据的访问。并且主机可以知晓zns内的数据是经压缩的。
[0148]
图7展示了根据本技术实施例的压缩的zns的zone容量的示意图。
[0149]
根据nvme协议,zns具有包括zone大小与zone容量的属性。zone大小的值代表zone的逻辑块数量,而zone容量的值代表zone为空状态时可用于写入用户数据的逻辑块的最大数量。zone容量是主机管理zone的重要参数。例如,主机根据zone容量或zone的无效数据量在zone容量中的占比,确定对zone的重置或回收的时机,和/或对待回收的zone的选择。zone容量也影响了主机对管理zone的策略的选择。
[0150]
根据本技术的实施例,存储设备向主机提供的zone大小是例如其可用的逻辑地址索引数量,而zone容量是zone被写满后,分配给各数据的逻辑地址空间的大小(由例如逻辑块数量表示)的和。由于数据被压缩,使得zone容量的值可以超过zone大小。
[0151]
图7展示了根据本技术实施例的zone。zone可用的逻辑地址索引数量为m个(分别记为slba0、slba1、
……
slba
(m-1)
),其中逻辑地址索引(slba0、slba32与slba40)被分配了逻辑地址空间分别用于容纳数据(d1、d2与d3)。该zone的zone大小属性值为m。可选地,可用的逻辑地址索引包括了未被使用的逻辑地址索引。从而对于图7展示的zone,其可用于索引ftl表的逻辑地址索引数量可以少于m,例如,图7中,逻辑地址索引slba+1不可用于索引ftl表,其不是有效的逻辑地址索引。
[0152]
作为一个例子,用平坦结构的数组容纳zns的ftl表,在创建zns时通过指定zone大小m而确定了ftl表中为该被创建的zns的每个zone预留了m个元素来容纳逻辑地址索引(分别对应slba0、slba1、
……
slba
(m-1)
),这m个元素被初始化为指定值或空值来表示其尚不是有效的逻辑地址索引。
[0153]
响应于处理了向该zns的某zone写入数据的命令,在为该命令分配的逻辑地址索引(记为slba_i)对应的ftl表元素中记录容纳该命令的压缩后数据的nvm的物理地址。该命令要写入的数据(记为di)的(未经压缩的)大小记为data length(slba_i)。将数据di经压缩后得到的压缩数据(记为cdi)的大小记为csi,将逻辑块大小记为ss,则该zone的下一个有效的逻辑地址索引为slba_i+[cs/ss],而从slba_i+1到slba_i+[cs/ss]-1范围内的逻辑地址索引都不是有效的逻辑地址索引。对于非有效的逻
[0154]
直到该zone被写满,其zone容量达到最大值并且在zone被复位(reset)或回收前
不再改变。
[0155]
由于zone容量等于主机向该zone写入的所有用户数据所占据的扇区数量,从而主机维护的该zone的地址空间的元素(例如,扇区)同存储设备为该zone提供的逻辑地址空间的逻辑块一一对应。而主机在访问该zone的读命令中可使用的地址同存储设备的用于该zone的有效逻辑地址索引一一对应,有效逻辑地址能用于索引ftl表的条目。由zone容量除以zone大小,得到zone的数据压缩率,zone的数据压缩率可以大于1。
[0156]
图8展示了根据本技术实施例的提供混合ns的存储设备的示意图。
[0157]
nvme协议定义了命名空间(namespace)。命名空间可被视作逻辑存储设备。存储设备可以同时提供多个命名空间。
[0158]
参看图8,存储设备提供了命名空间(ns0与ns1)。命名空间ns0是根据本技术实施例的压缩的zns,作为举例,其中包括zone0与zone1。命名空间ns1是根据现有技术的命名空间。
[0159]
作为举例,ftl表是平坦结构的数组,从而ftl表条目的索引是其在内存中的存储位置。ftl表为zone0与zone1各提供了m个条目。从而,zone0与zone1的zone大小为m。ftl表为ns1提供n-2m-1个条目,每个条目对应例如4kb大小的逻辑地址空间,从而ns1的容量为4k*(n-2m-1)。
[0160]
zone0与zone1是压缩的,用于zone0或zone1的ftl表条目的索引是用于zone0或zone1的逻辑地址索引。在图8中,以zone0为例,由slba+0、slba+4与slba+5索引的ftl表条目记录了有效的nvm地址,因而slba+0、slba+4与slba+5是有效的逻辑地址索引,而诸如slba+1到slba+3这些逻辑地址索引则不是有效的。对于zone0,ftl表的每个条目同例如4kb大小的物理存储空间对应。由slba+0逻辑地址索引对应的物理地址空间,存储了压缩数据cd1的部分。由于压缩数据cd1大小为16kb,其占用了连续的4个4kb的物理地址空间,这4个物理地址空间对应了slba+0到slba+3这4个逻辑地址索引(ftl表条目),而压缩数据cd1仅由逻辑地址索引slba+0来索引,从而使得slba+1到slba+3这些逻辑地址索引不可用,通过在对应这些索引的ftl表条目中设置空值或指定值来标记这些逻辑地址索引是不可用的。从而,主机仅能通过逻辑地址索引slba+0来访问压缩数据cd1,而不能通过slba+1到slba+3这些逻辑地址索引来访问压缩数据cd1。
[0161]
从而在zns中,有效的逻辑地址索引对应的压缩数据的大小,也决定了下一个有效的逻辑地址索引在ftl表中的位置。在图8的zone0中,逻辑地址索引slba+0索引了16kb的压缩数据cd1,使得下一个有效的逻辑地址索引是slba+4,其索引了4kb的压缩数据cd2,而再下一个有效的逻辑地址索引是slba+5,其索引了压缩数据cd3。
[0162]
在zns中,物理地址空间中存储压缩数据,而主机或用户看来,未经压缩的数据在逻辑地址空间容纳。主机用现有技术的方式以逻辑地址空间的起始地址与数据长度得以获得未经压缩的数据。从而虽然ns0中对存储的数据进行了压缩,但主机无需额外的调整来访问经压缩的数据,因而根据本技术实施例的zns对主机是透明的。压缩数据cd1对应的逻辑空间容纳了数据d1(大小为128kb)。压缩数据cd2对应的逻辑空间容纳了数据d2(大小为60kb)。压缩数据cd3对应的逻辑空间容纳了数据d3。
[0163]
作为比较,命名空间ns1的物理地址空间与逻辑地址空间是一一对应的,物理地址空间的4kb区域对应了逻辑地址空间的4kb区域。命名空间ns1的逻辑地址空间由逻辑地址
范围定义,也即由ftl表条目的索引定义,从而命名空间ns1的逻辑地址空间从slba+2m到slba+n延申,用户访问命名空间ns1的逻辑地址空间(例如,slba+2m到slba+n)将得到同由逻辑地址slba+2m到slba+n索引的ftl表每个条目所对应的逻辑地址空间的数据。而ns0的逻辑地址空间,则不是从逻辑地址slba0到slba+2m-1延申,而是由从slba+0到slba+2m-1的所有有效逻辑地址索引所对应的逻辑地址空间的组合。从而,用户访问命名空间ns0的逻辑地址空间(例如,slba0到slba+2m-1)将得到容纳数据d1的逻辑地址空间、容纳数据d2的逻辑地址空间、容纳数据d3的逻辑地址空间
……
以及slba+0到slba+2m-1的最后一个有效逻辑地址索引对应的逻辑地址空间。因而,作为举例,若命名空间ns0的容量为c0,若主机发出了指示起始地址slba0与大小c0的读命令,在处理该命令时,将从作为逻辑地址索引的slba+0开始读出数据d1,接下来从ftl表的用于ns0的条目中获取下一个有效逻辑地址索引(slba+4),以及获取该有效逻辑地址对应的数据d2,以此类推,直到获得了ftl表的用于ns0的条目中的最后一个有效逻辑地址索引,并获得其对应的数据,所有这些数据的长度和为c0。可以理解地,在根据有效逻辑地址索引slba+0获取了数据d1或压缩数据cd1后,根据压缩数据cdl的大小,得以确定ftl表中下一个有效的逻辑地址索引的位置(下一个有效的逻辑地址索引的位置相对于当前有效逻辑地址索引的位置的增量为[cs1/ss],cs1为压缩数据cd1的大小,ss为逻辑块大小。可选地,从当前的有效逻辑地址索引(例如,slba+0)开始遍历ftl表,根据ftl表条目的值也能识别有效逻辑地址索引。
[0164]
从而,根据本技术的实施例,存储设备同时提供多种不同属性的命名空间,例如,命名空间ns0具有高存储容量或高密度(因为实施了数据压缩)(相对于ns1),而命名空间ns1具有高性能和更好的qos(服务质量,qualityofservice)(相对于ns0)。用户得以根据需求将数据记录在不同的命名空间。
[0165]
图9展示了根据本技术实施例使用混合ns的示意图。
[0166]
zone的创建、使用和回收需要主机管理,主机还需要确保向zone写入数据是按地址顺序写入的,因为zone不支持随机写。而一些场景或数据本身需要随机写入,例如,zone容量。zone容量是描述zone的元数据,在根据本技术实施例的zone被写入数据的过程中,zone容量可能随数据写入而变化,用随机写的方式能较好的更新诸如zone容量的等元数据。
[0167]
参看图9,存储设备提供的命名空间ns0是压缩的zns,主机在命名空间ns中创建并使用zone(记为主机zone0)。存储设备的命名空间ns1是支持随机写的命名空间,主机将用于主机zone0的元数据记录在命名空间ns1。从而充分利用命名空间ns0存储密度高,而命名空间ns1性能更好的特点。
[0168]
也参看图9,根据本技术的实施例还提供了主机zone 0。主机zone 0也是压缩的。作为举例,主机管理的主机zone0被映射到存储设备的两个zone(zone0与zonel)。主机根据应用的需求,所希望的zone容量可能不同于存储设备提供的zone容量。主机可将存储设备的2个或更多zone组合成单一的主机zone。在单一的主机zone被创建或回收时,提供该主机zone的所有存储设备的zone被一起创建或回收。为提供主机zone,主机还管理主机zone到存储设备zone的映射。在图9的例子中,主机zone0使用的逻辑地址索引范围是存储设备zone0与zone1的可用的逻辑地址索引的全部(slba+0到slba+2m-1),从而根据访问主机zone0的逻辑地址索引,确定该逻辑地址索引由存储设备的哪个zone提供,以及由根据本申
请前述实施例的方式用该逻辑地址索引访问存储设备的zone。
[0169]
图10a展示了根据本技术实施例的主机使用压缩的zns的示意图。
[0170]
主机同根据本技术实施例的存储设备耦合。根据本技术实施例的存储设备1030提供压缩的zns。
[0171]
主机中运行应用1010,应用1010使用主机逻辑地址空间访问根据本技术实施例的存储设备。将主机逻辑地址空间的元素称为主机逻辑地址(记为hlba)。主机逻辑地址同诸如linux操作系统、windows操作系统等现有技术中访问诸如硬盘的存储设备的逻辑地址相同。可选地,应用1010按现有技术的方式使用主机逻辑地址与主机逻辑地址空间,但根据本技术实施例的主机向应用1010提供主机逻辑地址与主机逻辑地址空间同现有技术不同。
[0172]
根据本技术的实施例,主机还包括主机地址转换单元1020。主机地址转换单元1020将主机逻辑地址转换为根据本技术实施例的用于zns的逻辑地址索引(slba)。作为举例,主机地址转换单元1020维护主机逻辑地址(hlba)同逻辑地址索引(slba)的映射。例如,主机地址转换单元1020包括主机ftl表,主机ftl表的条目记录了主机逻辑地址(hlba)同逻辑地址索引(slba)的映射。可选地,主机ftl表的条目还记录同其逻辑地址索引(slba)对应的逻辑地址空间的大小(也为向该逻辑地址索引(slba)写入数据的大小)。
[0173]
主机通过向存储设备1030发出诸如读命令、写命令或追加命令来访问存储设备1030。作为举例,在读命令与写命令中,指示了逻辑地址索引(slba),而追加命令则暗示由存储设备1030提供用于承载写入数据的逻辑地址索引(slba)。可选地,响应于处理写命令和/或追加命令,存储设备1030还向主机返回承载被写入数据的逻辑地址空间的逻辑地址索引(slba),可选地,存储设备1030还向主机指示下一个可用的逻辑地址索引(slba),从而主机可将写指针(wp)更新为该下一个可用的逻辑地址索引(slba)。作为举例,追加命令仅指示zone编号(作为逻辑地址索引(slba)的部分),而存储设备1030响应于处理追加命令向主机指示承载被写入数据的逻辑地址空间的逻辑地址索引(slba)。在有一个例子中,写命令指示包括zone编号的完整逻辑地址索引(slba),而存储设备1030响应于处理写命令向主机指示下一个可用的逻辑地址索引(slba),以及可选地指示承载被写入数据的逻辑地址空间的逻辑地址索引(slba),其中承载被写入数据的逻辑地址空间的逻辑地址索引(slba)同写命令指示的逻辑地址索引可以相同。
[0174]
图10b与图10c展示了根据本技术实施例的主机使用压缩的zns的流程图。
[0175]
参看图10b,主机向存储设备1030写入数据。由主机的驱动程序、文件系统、和/或操作系统内存等执行图10b展示的流程。应用1010为向主机逻辑地址空间写入数据,而指示了写操作,其中指示主机逻辑地址(hlba)与要写入的数据,要写入的数据具有大小(记为size)。获取写操作1040。例如主机地址转换单元(1020)为获取的写操作分配zone(1042)。由例如zone编号(记为zone#)代表所分配的zone。可选地,根据写操作对应的数据大小与zone的容量来分配能容纳要写入数据的zone。可以理解地,若当前已被分配的zone还有容量容纳要写入的数据,则无需分配新的zone。对于写命令,也获取用于所分配zone的逻辑地址索引。根据所分配zone向存储设备1030提交写命令或追加命令,可选地还获取存储设备103为写命令/追加命令所返回的逻辑地址索引(slba)(1044)。主机地址转换单元(1020)在主机ftl表中记录步骤1040获取的主机逻辑地址(hlba)与写操作对应的逻辑地址索引(slba)(1046),从而通过该主机逻辑地址(hlba)检索主机ftl表能得到该逻辑地址索引
(slba)。例如,步骤1044提供给存储设备1030的是写命令,将写命令所指示的逻辑地址索引(slba)与主机逻辑地址(hlba)记录在主机ftl表;又例如,步骤1044提供给存储设备1030的是追加命令,将存储设备响应的逻辑地址索引(slba)与主机逻辑地址(hlba)记录在主机ftl表。可选地,在主机ftl表同主机逻辑地址(hlba)与逻辑地址索引(slba)相关联地还记录向该逻辑地址索引(slba)所写入数据的大小。主机ftl表中记录的所写入数据的大小不是必须的。
[0176]
依然可选地,对于写命令,存储设备1030也为指示写命令处理完成而返回逻辑地址索引(slba),主机根据该返回的逻辑地址索引(slba)确定用于相同zone的下一个写命令所使用的逻辑地址索引(slba)。对于新分配的zone,第一次向其写入数据时,写命令指示的逻辑地址索引为指定值(例如,zone#以及值0)。
[0177]
参看图10c,主机从存储设备1030读出数据。由主机的驱动程序、文件系统、和/或操作系统内存等执行图10c展示的流程。应用1010为从主机逻辑地址空间读出数据,而指示了读操作,其中指示主机逻辑地址(hlba)与要读出的数据大小(size)。获取读操作1050。主机地址转换单元1020用读操作指示的主机逻辑地址(hlba)查询主机ftl表并得到对应的逻辑地址索引(slba)(1052)。可选地,若通过主机ftl表无法得到对应的逻辑地址索引(slba),则指示读命令存在错误,访问了错误的主机逻辑地址hlba。
[0178]
根据所获取的逻辑地址索引(slba)与要读取的数据大小(size)向存储设备1030提交读命令(1054)。以及从存储设备1030获取为读命令所读出的数据(1056)。
[0179]
返回参看步骤1052,依然可选地,若主机ftl表的条目记录了同逻辑地址索引(slba)对应的数据大小,则通过主机ftl表的条目记录的数据大小,得以在线性的主机逻辑地址空间同存储设备1030的压缩的zns的zone提供的二维逻辑地址空间建立映射。例如,将由每个逻辑地址索引(slba)所指示的逻辑地址空间,按逻辑地址索引(slba)的大小排序,并依次对应主机逻辑地址空间中同由逻辑地址索引(slba)所指示的逻辑地址空间相同大小的空间。
[0180]
从而,在步骤1052,若对于某主机逻辑地址(hlba),在主机ftl表中没有记录对应的逻辑地址索引(slba),则通过该主机逻辑地址(hlba)在主机逻辑地址空间中的位置将其映射到压缩的zns的二维逻辑地址空间之一,并获取该二维逻辑地址空间对应的逻辑地址索引(slba)。例如,也参看图10a,主机ftl表中,主机逻辑地址hlba1指示主机逻辑地址0kb,逻辑地址索引slba1指示zone 0的第一个逻辑地址空间,size1为10kb;主机逻辑地址hlba2指示主机逻辑地址10kb,逻辑地址索引slba2指示zone0的第二个逻辑地址空间,size2为20kb;主机逻辑地址hlba3指示主机逻辑地址30kb,逻辑地址索引slba3指示zone 0的第三个逻辑地址空间,size3为30kb。应用1010要读取例如主机逻辑地址空间的主机逻辑地址(hlba)18k开始2kb大小的数据。那么,主机逻辑地址(hlba)18k开始2kb大小的数据被映射到压缩的zns的逻辑地址索引slba2所指示的逻辑地址空间的8kb到10kb范围。若应用1010要读取例如主机逻辑地址空间的主机逻辑地址(hlba)18k开始20kb大小的数据。那么,主机逻辑地址(hlba)18k开始2kb大小的数据被映射到压缩的zns的逻辑地址索引slba2所指示的逻辑地址空间的8kb到20kb范围,以及逻辑地址索引slba3所指示的逻辑地址空间的0kb到8kb范围。
[0181]
继续参看步骤1052,在主机逻辑地址空间对应多个zone提供的二维逻辑地址空间
的情况下,在zone内部由每个逻辑地址索引(slba)所指示的逻辑地址空间,按逻辑地址索引(slba)的大小排序,在zone之间,按逻辑地址索引(slba)所属的各zone在主机ftl表中所对应的主机逻辑地址大小排序。例如,主机ftl表中,主机逻辑地址hlba1指示主机逻辑地址0kb,逻辑地址索引slba1指示zone 100的第一个逻辑地址空间,size1为10kb;主机逻辑地址hlba2指示主机逻辑地址10kb,逻辑地址索引slba2指示zone 100的第二个逻辑地址空间,size2为20kb;主机逻辑地址hlba3指示主机逻辑地址30kb,逻辑地址索引slba3指示zone 1的第一个逻辑地址空间,size3为30kb。若应用1010要读取例如主机逻辑地址空间的主机逻辑地址(hlba)18k开始20kb大小的数据。那么,主机逻辑地址(hlba)18k开始20kb大小的数据被映射到zone100的逻辑地址索引slba2所指示的逻辑地址空间的8kb到20kb范围,以及zone1的逻辑地址索引slba3所指示的逻辑地址空间的0kb到8kb范围。可以理解地,逻辑地址索引的部分也指示了zone的编号。
[0182]
根据图10a、图10b与图10c展示的实施例,可选地,应用1010以kv(键-值)形式访问存储设备1030,其中主机逻辑地址(hlba)作为键,而主机逻辑地址空间为键的所有可能取值的集合。在向存储设备1030添加“键-值”对的操作中(push(k,v)),将键k对应的逻辑地址索引(slba)与值v在写命令中提供给存储设备1030(或者在追加命令中,将值v写入存储设备1030并获得对应的逻辑地址索引(slba)),主机地址转换单元1020在主机ftl表中记录键(替代主机逻辑地址(hlba))与逻辑地址索引,以及可选地值(v)的大小。在从存储设备1030获取同键对应值的操作中(get(k)),主机地址转换单元1020用键k查询主机ftl表得到对应的逻辑地址索引,并在读命令中提交给存储设备1030。
[0183]
从而,根据图10a-10c展示的实施例,应用1010无需意识到存储设备1030对存储的数据进行了压缩。应用1010以主机逻辑地址hlba空间访问存储设备1030。存储设备1030对应用1010透明地提供了压缩的zns。在可选的实施方式中,主机1010可以意识到存储设备1030同现有技术的支持zns的块设备不同,因为应用1010访问主机逻辑地址hlba空间时,仅使用其中的部分元素(主机逻辑地址hlba),这些元素在主机ftl表中具有对应的逻辑地址索引(slba),而应用1010无法使用主机逻辑地址hlba空间的其他元素,在访问这些元素时,应用1010会接收到错误而无法获取对应的数据。
[0184]
图11a展示了根据本技术实施例的用于压缩的zns的zone的zlba空间的示意图。
[0185]
根据本技术实施例的压缩的zns的各个zone向主机提供了zlba空间。zlba空间是一维线性空间,将其元素记为zlba。zlba空间的元素同该zone对应的主机hlba空间的元素对应或一一对应。在主机hlba空间的逻辑块(扇区)大小同zlba空间的逻辑块大小相同时,zlba空间的元素同该zone对应的主机hlba空间的元素一一对应。
[0186]
图11a展示了单一的zone,其zone大小为可用的逻辑地址索引数量,而zong容量为该zone被写满后,所有有效的逻辑地址索引对应的二维逻辑地址空间的大小的和,其zlba空间的大小同zone容量相同。
[0187]
按有效逻辑地址索引的顺序(例如大小顺序),各有效逻辑地址索引对应的二维逻辑地址空间被依次映射到zlba空间。在图11a的例子中,有效逻辑地址slba+0对应的二维逻辑地址空间大小为128kb(d1),对应的zlba空间为从0开始的256个逻辑块(每个逻辑块大小为512字节);有效逻辑地址slba+32对应的二维逻辑地址空间大小为60kb(d2),对应的zlba空间为从256开始的120个逻辑块;有效逻辑地址slba+40对应的二维逻辑地址空间大小为
32kb(d2),对应的zlba空间为从376开始的64个逻辑块。
[0188]
通过引入zlba空间,将根据本技术实施例的压缩的zns提供的二维逻辑地址空间映射为一维空间,以同现有技术的主机逻辑地址空间hlba一致,从而便于主机使用根据本技术实施例的存储设备。
[0189]
图11b展示了根据本技术依然另一实施例的主机使用压缩的zns的示意图。
[0190]
主机同根据本技术实施例的存储设备1130耦合。根据本技术实施例的存储设备1130提供压缩的zns。主机中运行应用1110,应用1110使用主机逻辑地址(hlba)访问根据本技术实施例的存储设备1130。
[0191]
根据本技术的实施例,主机还包括(维护)主机ftl表1120,用于维护主机逻辑地址hba同zlba的映射。主机ftl表1120的条目无需记录同其zlba对应的zlba空间的大。可选地,主机ftl表的条目中的zlba包括zone的编号(zone#)与在该zone提供的zlba空间中的偏移值。由于zlba空间是一维线性的,从而主机ftl表1120中的主机逻辑地址hlba也可以是一维线性的,并且主机逻辑地址hlba空间的每个元素都可以在主机ftl表1120中获得对应的zlba。
[0192]
主机还包括(维护)压缩表1125。压缩表1125的条目记录zone的逻辑地址索引与其对应的二维逻辑地址空间大小。可选地,压缩表1125的条目还记录其逻辑地址索引所属的zone的编号(zone#)。可选地,逻辑地址索引的部分字段指示了zone#。
[0193]
通过使用压缩表1125,得以将zlba映射到逻辑地址索引对应的逻辑地址空间。映射的方式也参看图11a。
[0194]
主机通过向存储设备1130发出诸如读命令、写命令或追加命令来访问存储设备1130。作为举例,在读命令与写命令中,指示了逻辑地址索引(slba),而追加命令则暗示由存储设备1030提供用于承载写入数据的逻辑地址索引(slba)。可选地,响应于处理写命令和/或追加命令,存储设备1130还向主机返回承载被写入数据的逻辑地址空间的逻辑地址索引(slba)。
[0195]
图11c与图11d展示了根据本技术实施例的主机使用压缩的zns的流程图。
[0196]
参看图11c,主机向存储设备1130写入数据。由主机的驱动程序、文件系统、和/或操作系统内存等执行图11c展示的流程。应用1110为向主机逻辑地址空间写入数据,而指示了写操作,其中指示主机逻辑地址(hlba)与要写入的数据,要写入的数据具有大小(记为size)。获取写操作1140。为获取的写操作分配zlba空间(1142)。由一个或多个zlba代表所分配的zlba空间。zlba包括例如zone编号(zone#)与在该zone提供的zlba空间中的偏移值。根据写操作要写入的数据大小(size)确定分配的zlba空间的大小。
[0197]
根据所分配zlba空间向存储设备1130提交写命令或追加命令,对于写命令,在写命令中指示用于所分配zlba空间的zone的逻辑地址索引(slba),对于追加命令,获取存储设备1130为指示写命令处理完成所返回的逻辑地址索引(slba)(1144)。依然可选地,对于写命令,存储设备1130也为指示写命令处理完成而返回逻辑地址索引(slba),主机根据该返回的逻辑地址索引(slba)确定用于相同zone的下一个写命令所使用的逻辑地址索引(slba)。对于新分配的zone,第一次向其写入数据时,写命令指示的逻辑地址索引为指定值(例如,zone#以及值0)。
[0198]
在主机ftl表1120中记录步骤1140获取的主机逻辑地址(hlba)与步骤1042获取的
zlba空间(1146)。可选地,若写操作要写入的数据大小对应多个主机逻辑地址hlba,在主机ftl表1120中记录多个条目,每个条目对应主机逻辑地址hlba之一,每个条目中也记录同hlba对应的zlba。
[0199]
在压缩表1125中记录步骤1144获取的逻辑地址索引与写入数据的大小(1148)。
[0200]
参看图11d,主机从存储设备1130读出数据。由主机的驱动程序、文件系统、和/或操作系统内存等执行图11d展示的流程。应用1110为从主机逻辑地址空间读出数据,而指示了读操作,其中指示主机逻辑地址(hlba)与要读出的数据大小(size)。获取读操作1150。用读操作指示的主机逻辑地址(hlba)查询主机ftl表并得到zlba(1152)。根据得到的zlba,根据压缩表1125确定同zlba对应的逻辑地址索引(slba)(1154)。可选地,根据得到的zlba与要读出的数据大小,以及根据压缩表1125确定要读取的主机逻辑地址空间对应的2个或更多个逻辑地址索引(slba)。
[0201]
根据步骤1150获取的要读出的大小确定要读取的数据长度(length)(1156)。可选地,若要读取的数据对应多个逻辑地址索引,还确定用于每个逻辑地址索引的要读取数据长度,或者用于每个逻辑地址索引所对应二维逻辑地址空间的范围。
[0202]
根据所获取的逻辑地址索引(slba)与对应的数据长度(length)向存储设备1130提交读命令(1158)。以及从存储设备1130获取为读命令所读出的数据(1159)。
[0203]
返回参看步骤1154,
[0204]
例如,主机ftl表中,主机逻辑地址hlba1指示主机逻辑地址空间的0号逻辑块,zlba1指示zone 100的0号逻辑块,主机逻辑地址hlba2指示主机逻辑地址空间的20号逻辑块,zlba2指示zone 100的20号逻辑块,主机逻辑地址hlba3指示主机逻辑地址空间的60号逻辑块,zlba3指示zone 1的0号逻辑块。以及hlba2与hlba1的值,还暗示了从hlba1到hlba2对应的主机逻辑地址空间大小为20(=20-0)个逻辑块(例如10kb),而hlba2与hlba3的值暗示了从hlba2到hlba3对应的主机逻辑地址空间大小为40(=60-40)个逻辑块(例如20kb),而zlba1与zlba2的值暗示了从zlba1到zlba2对应的zlba空间大小为20个逻辑块,而zlba2与zlba3的值暗示了从zlba2到zlba3对应的zlba空间大小为40个逻辑块。并且,由于zlba3对应另一个zone(zone1)的起始逻辑块,也暗示着zlba2与zlba3之间的zlba空间的引入使得zone 100提供的zlba空间被占满。而在压缩表1125中,记录了zone 100的全部2个逻辑地址索引(slba1与slba),以及其各自对应的二维逻辑地址空间大小,这2个二维逻辑地址空间被顺序地映射到zone 100的zlba空间。以及由于在主机ftl表1120中,hlba3在hlba2之后,从而暗示了由zlba3所在的zone1提供的zlba空间,排序在由zlba2所在的zone100提供的zlba空间之后。从而根据主机ftl表1120,得到同主机逻辑地址hlba空间对应的zlba空间,而根据压缩表1125,得到压缩表1125中的各逻辑地址索引对应的二维逻辑地址空间在zlba空间中的位置,从而通过zlba空间建立起主机逻辑地址hlba同逻辑地址索引slba之间的映射。
[0205]
可以理解地,主机ftl表1120中的一些主机逻辑地址hlba对应的zlba,并非映射到二维逻辑地址空间的起点,而是映射到二维逻辑地址空间内部,在步骤1154,获取这类zlba被映射到的二维逻辑地址空间所对应的逻辑地址索引(slba),作为所确定的逻辑地址索引(slba)。
[0206]
从而,根据图11a-11d展示的实施例,主机ftl表1120维护从线性的主机逻辑地址
hlba空间到线性的zlba空间。从而应用1110与主机ftl表1120都无需意识到存储设备1130对存储的数据进行了压缩。应用1010以主机逻辑地址hlba空间访问存储设备1030。存储设备1130对应用1110与主机ftl表1120透明地提供了压缩的zns。以及可选地,主机逻辑地址hlba空间的每个元素都可被应用1110读取。
[0207]
尽管已描述了本技术的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本技术范围的所有变更和修改。显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1