基于KV模型的数据访问方法与固态存储设备与流程

文档序号:15587800发布日期:2018-10-02 18:35阅读:175来源:国知局

本申请涉及存储技术领域,尤其涉及基于kv模型的固态存储设备的数据访问方法与固态存储设备。



背景技术:

nvm(非易失存储器,non-volatilememory)用于实现存储功能,具有非易失性特点。图1是现有技术的固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如sata(serialadvancedtechnologyattachment,串行高级技术附件)、scsi(smallcomputersysteminterface,小型计算机系统接口)、sas(serialattachedscsi,串行连接scsi)、ide(integrateddriveelectronics,集成驱动器电子)、usb(universalserialbus,通用串行总线)、pcie(peripheralcomponentinterconnectexpress,pcie,高速外围组件互联)、nvme(nvmexpress,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个nvm芯片105以及dram(dynamicrandomaccessmemory,动态随机访问存储器)110。

nand闪存、相变存储器、feram(ferroelectricram,铁电存储器)、mram(magneticrandomaccessmemory,磁阻存储器)、rram(resistiverandomaccessmemory,阻变存储器)等是常见的nvm。

接口103可适配于通过例如sata、ide、usb、pcie、nvme、sas、以太网、光纤通道等方式与主机交换数据。

控制部件104用于控制在接口103、nvm芯片105以及固件存储器110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件104可以是fpga(field-programmablegatearray,现场可编程门阵列)、asic(applicationspecificintegratedcircuit,应用专用集成电路)或者其组合的形式;控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理io(input/output)命令;控制部件104还可以耦合到dram110,并可访问dram110的数据;在dram可存储ftl表和/或缓存的io命令的数据。

存储器目标(target)是闪存颗粒105封装内的共享芯片使能(ce,chipenable)信号的一个或多个逻辑单元(logicunit)。nand闪存封装内可包括一个或多个管芯(die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(plane)。逻辑单元内的多个平面可以并行存取,而nand闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。在http://www.onfi.org/~/media/onfi/specs/onfi_3_2%20gold.pdf获得的“opennandflashinterfacespecification(revision3.2)”中,提供了关于目标(target)、逻辑单元(lun)、平面(plane)的含义,以及也提供了操作nvm芯片的命令。

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

在固态存储设备中,利用ftl(flashtranslationlayer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。

其中,存储了从逻辑地址到物理地址的映射信息的表结构被称为ftl表。ftl表是固态存储设备中的重要元数据。通常ftl表的数据项记录了固态存储设备中以数据页/数据帧为单位的地址映射关系。

nvme协议(参见“nvmexpressrevision1.2”,2014年11月3日,通过引用将其全文合并于本说明书)定义了主机(host)与设备(device)之间交换数据的命令与数据结构。主机中维护多个队列,每个队列中可填充多个命令。主机与设备基于队列交换数据。主机将命令c填入提交队列,设备从提交队列中取得命令c,并按命令c的内容进行处理,将处理结果填入完成队列。主机从完成队列获取命令c的处理结果以知晓命令c的处理完成。nvme协议中还定义了命名空间(namespace,ns)。大小为n的命名空间是具有从0到n-1的逻辑块地址的逻辑块集合。通过命名空间id(namespaceid,nsid)能够唯一标识命名空间。命名空间可以在主机或nvme控制器之间共享。主机通过单一nvme控制器能够访问不同命名空间。不同主机也可通过多个nvme控制器访问相同的命名空间。



技术实现要素:

本申请的目的包括提供基于kv模型的数据访问方法、固态存储设备。

根据本发明的第一方面,提供了根据本发明第一方面的基于kv模型的第一数据访问方法,该方法包括:从主机接收第一键(key)值和第一数据(value);对第一键值作哈希运算,得到第一哈希值;为第一哈希值分配第一物理地址;以及将第一键值和第一数据写入第一物理地址对应的第一数据单元。

根据本发明的第一方面的基于kv模型的第一数据访问方法,提供了根据本发明第一方面的基于kv模型的第二数据访问方法,还包括:将第一哈希值,以及为其分配的第一物理地址记录到闪存转移层表中。

根据本发明的第一方面的基于kv模型的第一或第二数据访问方法,提供了根据本发明第一方面的基于kv模型的第三数据访问方法,还包括:在所述第一数据单元中,写入第一键值和第一数据在所述第一数据单元中的起始地址和/或长度。

根据本发明的第一方面的基于kv模型的第三数据访问方法,提供了根据本发明第一方面的基于kv模型的第四数据访问方法,若所述第一数据单元无法容纳所述第一键值和所述第一数据,在第一数据单元以及与第一数据单元在物理地址上连续的一个或多个第二数据单元中写入所述第一键值和所述第一数据。

根据本发明的第一方面的基于kv模型的第一或第二数据访问方法,提供了根据本发明第一方面的基于kv模型的第五数据访问方法,其中依据第一键值和第一数据的长度得到要使用的数据单元的数目n,其中,n为大于或等于1的正整数;以及在第一物理地址开始且物理地址连续的n个数据单元中写入第一键值和第一数据,以及所述第一键值和第一数据在所述n个数据单元中的起始地址和/或长度。

根据本发明的第一方面的基于kv模型的第三至第五数据访问方法,提供了根据本发明第一方面的基于kv模型的第六数据访问方法,当第一键值和第一数据的长度的和不足以填满最后一个数据单元时,填充数据以填满所述最后一个数据单元。

根据本发明的第一方面的基于kv模型的第一至第六数据访问方法,提供了根据本发明第一方面的基于kv模型的第七数据访问方法,还包括:从主机接收第一键值;对第一键值作哈希运算,得到第一哈希值;根据第一哈希值,从闪存转移层表获取第一物理地址;从第一物理地址对应的第一数据单元读出第一数据的起始地址和/或长度;以及依据第一数据的起始地址及长度,得到第一数据。

根据本发明的第一方面的基于kv模型的第七数据访问方法,提供了根据本发明第一方面的基于kv模型的第八数据访问方法,还包括:从第一数据单元得到第二键值,将所述第二键值与主机提供的第一键值进行比较,当所述第一键值与所述第二键值相同时,读出第一数据。

根据本发明的第一方面的基于kv模型的第八数据访问方法,提供了根据本发明第一方面的基于kv模型的第九数据访问方法,当所述第一键值与所述第二键值不同时,向主机指示出现错误。

根据本发明的第一方面的基于kv模型的第二至第六数据访问方法,提供了根据本发明第一方面的基于kv模型的第十数据访问方法,还包括:从主机接收第一键值和第二数据;对第一键值作哈希运算,得到第一哈希值;为第一哈希值分配第二物理地址;以及将第一键值和第二数据写入第二物理地址对应的第三数据单元;用第一哈希值,以及为其分配的第三物理地址更新闪存转移层表。

根据本发明的第二方面,提供了根据本发明的第二方面的基于kv模型的第一固态存储设备,该固态存储设备包括数据接收模块、哈希运算模块、物理地址分配模块和数据写入模块,数据接收模块用于从主机接收第一键值和第一数据;哈希运算模块用于对第一键值作哈希运算,得到第一哈希值;物理地址分配模块用于为第一哈希值分配第一物理地址;以及数据写入模块用于将第一键值和第一数据写入第一物理地址对应的第一数据单元。

根据本发明的第二方面的基于kv模型第一固态存储设备,提供了根据本发明第二方面的基于kv模型的第二固态存储设备,还包括闪存转移层表更新模块,用于将第一哈希值,以及为其分配的第一物理地址记录到闪存转移层表中。

根据本发明的第二方面的基于kv模型第一或第二固态存储设备,提供了根据本发明第二方面的第三固态存储设备,其中数据写入模块,还用于在所述第一数据单元中,写入第一键值和第一数据在所述第一数据单元中的起始地址和/或长度。

根据本发明的第二方面的基于kv模型第三固态存储设备,提供了根据本发明第二方面的第四固态存储设备,其中数据写入模块,还用于若所述第一数据单元无法容纳所述第一键值和所述第一数据,在第一数据单元以及与第一数据单元在物理地址上连续的一个或多个第二数据单元中写入所述第一键值和所述第一数据。

根据本发明的第二方面的基于kv模型第三或第四固态存储设备,提供了根据本发明第二方面的第五固态存储设备,还包括长度计算单元,用于依据第一键值和第一数据的长度得到要使用的数据单元的数目n,其中,n为大于或等于1的正整数;以及数据写入模块,还用于在第一物理地址开始且物理地址连续的n个数据单元中写入第一键值和第一数据,以及所述第一键值和所述第一数据在所述n个数据单元中的起始地址和/或长度。

根据本发明的第二方面的基于kv模型第三至第五固态存储设备,提供了根据本发明第二方面的第六固态存储设备,还包括数据填充模块,用于当第一键值和第一数据的长度的和不足以填满最后一个数据单元时,填充数据以填满所述最后一个数据单元。

根据本发明的第二方面的基于kv模型第一至第六固态存储设备,提供了根据本发明第二方面的第七固态存储设备,还包括检索模块和数据读取模块,其中数据接收模块,还用于从主机接收第一键值;哈希运算模块,还用于对第一键值作哈希运算,得到第一哈希值;检索模块,用于根据第一哈希值,从闪存转移层表获取第一物理地址,并将第一物理地址发送给数据读取模块;数据读取模块,用于从第一物理地址对应的第一数据单元读出第一键值的起始地址和/或长度;以及依据第一数据的起始地址及长度,得到第一数据。

根据本发明的第二方面的基于kv模型第七固态存储设备,提供了根据本发明第二方面的第八固态存储设备,还包括比较模块,所述比较模块用于在数据读取模块从第一数据单元得到第二键值后,将所述第二键值与主机提供的第一键值进行比较;以及响应于所述读取数据信号,数据读取模块用于当所述第一键值与所述第二键值相同时读出第一数据。

根据本发明的第二方面的基于kv模型第八固态存储设备,提供了根据本发明第二方面的第九固态存储设备,其中比较模块,还用于当所述第一键值与所述第二键值不同时,向主机指示出现错误。

根据本发明的第二方面的基于kv模型第二至第六固态存储设备,提供了根据本发明第二方面的第十固态存储设备,其中数据接收模块,还用于从主机接收第一键值和第二数据;哈希运算模块,还用于对第一键值作哈希运算,得到第一哈希值;物理地址分配模块,还用于为第一哈希值分配第二物理地址,以及数据写入模块,还用于将第一键值和第二数据写入第二物理地址对应第三数据单元;以及闪存转移层表更新模块,还用于用第一哈希值,以及为其分配的第三物理地址更新闪存转移层表。

根据本发明的第三方面,提供了根据本发明第三方面的一种固态存储设备,该固态存储设备包括主机接口、nvm芯片、控制部件以及dram,控制部件用于控制在接口、nvm芯片与dram之间的数据传输,所述控制部件通过执行程序来执行根据本发明的第一方面的基于kv模型的第一至第十数据访问方法所述的方法。

根据本发明的第四方面,提供了根据本发明第四方面的一种固态存储设备,该固态存储设备包括主机接口、nvm芯片、控制部件以及dram,控制部件用于控制在主机接口、nvm芯片与dram之间的数据传输,所述控制部件,用于从主机接收第一键值和第一数据;对第一键值作哈希运算,得到第一哈希值;为第一哈希值分配第一物理地址;以及将第一键值和第一数据写入第一物理地址对应的第一数据单元。

根据本发明的第五方面,提供了根据本发明第五方面的基于kv模型的第一数据访问方法,该方法包括:从主机接收第二键(key)值和第二数据(value);对第二键值作哈希运算,得到第二哈希值;若闪存转移层表中已记录有与第二哈希值相等的第一哈希值,从闪存转移层表中获取与第一哈希值对应的第一物理地址;为第二哈希值分配第二物理地址;从第一物理地址读出第一键值与第一数据;将第二键值和第二数据、第一键值、第一数据写入第二物理地址所指示的第二数据单元。

根据本发明的第五方面的基于kv模型的第一数据访问方法,提供了根据本发明第五方面的基于kv模型的第二数据访问方法,还包括将第二哈希值与第二物理地址更新到闪存转移层表。

根据本发明的第五方面的基于kv模型的第一或第二数据访问方法,提供了根据本发明第五方面的基于kv模型的第三数据访问方法,在所述第二数据单元中,写入第一键值和第一数据在所述第二数据单元中的起始地址和/或长度,以及第二键值和第二数据在所述第二数据单元中的起始地址和/或长度。

根据本发明的第五方面的基于kv模型的第一至第三数据访问方法,提供了根据本发明第五方面的基于kv模型的第四数据访问方法,若所述第二数据单元无法容纳所述第一键值和所述第一数据、所述第二键值和所述第二数据,在第二数据单元以及与第二数据单元在物理地址上连续的一个或多个第三数据单元中写入所述第一键值和所述第一数据、所述第二键值和所述第二数据。

根据本发明的第五方面的基于kv模型的第四数据访问方法,提供了根据本发明第五方面的基于kv模型的第五数据访问方法,所述键值与所述数据被写入相同的数据单元,或者被写入不同的数据单元。

根据本发明的第五方面的基于kv模型的第一至第五数据访问方法,提供了根据本发明第五方面的基于kv模型的第六数据访问方法,还在第二物理地址开始且连续的多个数据单元中写入第一键值与第二键值的冲突信息。

根据本发明的第五方面的基于kv模型的第一至第六数据访问方法,提供了根据本发明第五方面的基于kv模型的第七数据访问方法,还包括,从主机接收第三键值;对第三键值作哈希运算,得到第三哈希值;对闪存转移层表进行检索;若闪存转移层表中已记录有与第三哈希值相等的第一哈希值,获取第一哈希值所对应的第二物理地址;基于第二物理地址获取第一键值与第二键值,并将其与主机接收的第三键值进行比较;以及若第二键值与第三键值相等,获取第二数据;以及将第二数据发送给主机。

根据本发明的第五方面的基于kv模型的第五数据访问方法,提供了根据本发明第五方面的基于kv模型的第八数据访问方法,在所述相同或者不同的数据单元中,分别写入所述键值和所述数据在所述相同或者不同的数据单元中的起始地址和/或长度。

根据本发明的第五方面的基于kv模型的第八数据访问方法,提供了根据本发明第五方面的基于kv模型的第九数据访问方法,还包括:从主机接收第三键值;对第三键值作哈希运算,得到第三哈希值;对闪存转移层表进行检索;如果闪存转移层表中已记录有与第三哈希值相等的第一哈希值;获取第一哈希值所对应的第二物理地址;依据第二物理地址获取第一键值,若第一键值与第三键值不相等,依据第二物理地址以及第一键值与第一数据的长度,获取第二键值,若第二键值与第三键值相等,获取与第二键值对应的第二数据;以及将第二数据发送给主机。

根据本发明的第六方面,提供了根据本发明第六方面的基于kv模型的第一固态存储设备,该固态存储设备包括数据接收模块、哈希运算模块、检索模块、物理地址分配模块、数据获取模块和数据写入模块,其中,数据接收模块,用于从主机接收第二键值和第二数据;哈希运算模块,用于对第二键值作哈希运算,得到第二哈希值;检索模块,用于对闪存转移层表进行检索,从闪存转移层表中获取与第一哈希值对应的第一物理地址;物理地址分配模块,用于为第二哈希值分配第二物理地址;数据获取模块,用于从第一物理地址读出第一键值与第一数据;数据写入模块,用于将第二键值和第二数据、第一键值、第一数据写入第二物理地址所指示的第二数据单元。

根据本发明的第六方面的基于kv模型的第一固态存储设备,提供了根据本发明第六方面的第二固态存储设备,还包括闪存转移层表更新模块,用于将第二哈希值与第二物理地址更新到闪存转移层表。

根据本发明的第六方面的基于kv模型的第一或第二固态存储设备,提供了根据本发明第六方面的第三固态存储设备,其中数据写入模块,还用于在所述第二数据单元中写入第一键值和第一数据在所述第二数据单元中的起始地址和/或长度,以及第二键值和第二数据在所述第二数据单元中的起始地址和/或长度。

根据本发明的第六方面的基于kv模型的第一至第三固态存储设备,提供了根据本发明第六方面的第四固态存储设备,其中数据写入模块,还用于若所述第二数据单元无法容纳所述第一键值和所述第一数据、所述第二键值和所述第二数据,在第二数据单元以及与第二数据单元在物理地址上连续的一个或多个第三数据单元中写入所述第一键值和所述第一数据、所述第二键值和所述第二数据。

根据本发明的第六方面的基于kv模型的第四固态存储设备,提供了根据本发明第六方面的第五固态存储设备,其中数据写入模块,还用于将所述键值与所述数据写入相同的数据单元,或者不同的数据单元。

根据本发明的第六方面的基于kv模型的第一至第五固态存储设备,提供了根据本发明第六方面的第六固态存储设备,其中数据写入模块,还用于在第二物理地址开始且连续的多个数据单元中写入第一键值与第二键值的冲突信息。

根据本发明的第六方面的基于kv模型的第二至第六固态存储设备,提供了根据本发明第六方面的第七固态存储设备,还包括比较模块,其中数据接收模块,还用于从主机接收第三键值;哈希运算模块,还用于对第三键值作哈希运算,得到第三哈希值;检索模块,还用于对闪存转移层表进行检索,获取第一哈希值所对应的第二物理地址;比较模块,用于基于第二物理地址获取第一键值与第二键值,并将其与主机接收的第三键值进行比较;数据读取模块,还用于若第二键值与第三键值相等,获取第二数据;以及将第二数据发送给主机。

根据本发明的第六方面的基于kv模型的第七固态存储设备,提供了根据本发明第六方面的第八固态存储设备,其中数据写入模块,还用于在所述相同或者不同的数据单元中,分别写入所述键值和所述数据在所述相同或者不同的数据单元中的起始地址和/或长度。

根据本发明的第六方面的基于kv模型的第八固态存储设备,提供了根据本发明第六方面的第九固态存储设备,其中数据接收模块,还用于从主机接收第三键值;哈希运算模块,还用于对第三键值作哈希运算,得到第三哈希值;检索模块,还用于对闪存转移层表进行检索,获取与第三哈希值相等第一哈希值所对应的第二物理地址;比较模块,还用于依据第二物理地址获取第一键值;以及若第一键值与第三键值不相等,依据第二物理地址以及第一键值与第一数据的长度,获取第二键值;数据读取模块,还用于若第二键值与第三键值相等,获取与第二键值对应的第二数据;以及将第二数据发送给主机。

根据本发明的第七方面,提供了根据本发明第七方面的一种固态存储设备,该固态存储设备包括主机接口、nvm芯片、控制部件以及dram,控制部件用于控制在主机接口、nvm芯片与dram之间的数据传输,所述控制器部件通过执行程序来执行根据本发明的第五方面的基于kv模型的第一至第九数据访问方法所述的方法。

根据本发明的第八方面,提供了根据本发明第八方面的一种固态存储设备,该固态存储设备包括主机接口、nvm芯片、控制部件以及dram,控制部件用于控制在主机接口、nvm芯片与dram之间的数据传输,所述控制器部件用于,从主机接收第二键值和第二数据;对第二键值作哈希运算,得到第二哈希值;若闪存转移层表中已记录有与第二哈希值相等的第一哈希值,从闪存转移层表中获取与第一哈希值对应的第一物理地址;为第二哈希值分配第二物理地址;从第一物理地址读出第一键值与第一数据;将第二键值和第二数据、第一键值、第一数据写入第二物理地址所指示的第二数据单元。

根据本发明的第九方面,提供了根据本发明第九方面的基于kv模型的第一数据访问方法,该方法包括:从主机接收第一键(key)值和第一数据(value);获得与第一数据对应的命名空间;对第一键值作哈希运算,得到第一哈希值;为第一哈希值分配第一物理地址;基于所述命名空间确定指定数量的数据单元,将第一键值和第一数据写入第一物理地址所指示的指定数量的数据单元。

根据本发明的第九方面的基于kv模型的第一数据访问方法,提供了根据本发明第九方面的基于kv模型的第二数据访问方法,其中从主机接收与第一数据对应的命名空间标识,以及依据命名空间标识得到与第一数据对应的命名空间。

根据本发明的第九方面的基于kv模型的第一数据访问方法,提供了根据本发明第九方面的基于kv模型的第三数据访问方法,依据从主机接收的第一数据的长度,得到与第一数据对应的命名空间。

根据本发明的第九方面的基于kv模型的第三数据访问方法,提供了根据本发明第九方面的基于kv模型的第四数据访问方法,依据第一数据的长度所处的长度范围,得到与第一数据对应的命名空间。

根据本发明的第九方面的基于kv模型的第一至第四数据访问方法,提供了根据本发明第九方面的基于kv模型的第五数据访问方法,当第一数据的长度小于所述指定数量的数据单元的尺寸时,填充数据以填满指定数量的数据单元。

根据本发明的第九方面的基于kv模型的第一至第五数据访问方法,提供了根据本发明第九方面的基于kv模型的第六数据访问方法,将第一哈希值和为第一哈希值分配的第一物理地址记录到闪存转移层表。

根据本发明的第九方面的基于kv模型的第一至第五数据访问方法,提供了根据本发明第九方面的基于kv模型的第七数据访问方法,依据第一数据所对应的命名空间,将第一哈希值和为第一哈希值分配的第一物理地址记录到同与第一数据对应的命名空间对应的闪存转移层表中。

根据本发明的第九方面的基于kv模型的第一至第七数据访问方法,提供了根据本发明第九方面的基于kv模型的第八数据访问方法,还包括:从主机接收第二键值;对第二键值作哈希运算,得到第二哈希值;从闪存转移层表中查询第二哈希值,得到为第二哈希值所分配的第二物理地址;从所述第二物理地址获取第二数据并发送给主机。

根据本发明的第九方面的基于kv模型的第八数据访问方法,提供了根据本发明第九方面的基于kv模型的第九数据访问方法,其中依据从主机接收的对命名空间的指示,访问被指示的命名空间对应的闪存转移层表以获得同第二键值对应的第二哈希值。

根据本发明的第九方面的基于kv模型的第八数据访问方法,提供了根据本发明第九方面的基于kv模型的第十数据访问方法,其中搜索对应不同命名空间的多个闪存转移层表,以获得同第二键值对应的第二哈希值。

根据本发明的第九方面的基于kv模型的第一至第十数据访问方法,提供了根据本发明第九方面的基于kv模型的第十一数据访问方法,还包括:将第一数据的长度写入第一物理地址所指示的数据单元。

根据本发明的第九方面的基于kv模型的第十一数据访问方法,提供了根据本发明第九方面的基于kv模型的第十二数据访问方法,还包括:从主机接收第三键值;对第三键值作哈希运算,得到第三哈希值;从闪存转移层表中查询第三哈希值,得到为第三哈希值所分配的第三物理地址;从第三物理地址所指示的数据单元获取第三数据的长度,以及依据所获取的长度读取第三数据;以及将第三数据发送给主机。

根据本发明的第十方面,提供了根据本发明第十方面的第一固态存储设备,该固态存储设备包括:数据接收模块、命名空间获取模块、哈希运算模块、物理地址分配模块和数据写入模块,其中,数据接收模块,用于从主机接收第一键值和第一数据;命名空间获取模块,用于获取与第一数据对应的命名空间;哈希运算模块,用于对第一键值作哈希运算,得到第一哈希值;物理地址分配模块,用于为第一哈希值分配第一物理地址;数据写入模块,用于基于所述命名空间确定指定数量的数据单元,将第一键值和第一数据写入第一物理地址所指示的指定数量的数据单元。

根据本发明的第十方面的第一固态存储设备,提供了根据本发明第十方面的第二固态存储设备,其中命名空间获取模块,用于从主机接收与第一数据对应的命名空间标识,以及依据命名空间标识得到与第一数据对应的命名空间。

根据本发明的第十方面的第一固态存储设备,提供了根据本发明第十方面的第三固态存储设备,其中命名空间获取模块,还用于依据从主机接收的第一数据的长度,得到与第一数据对应的命名空间。

根据本发明的第十方面的第三固态存储设备,提供了根据本发明第十方面的第四固态存储设备,其中命名空间获取模块,还用于依据第一数据的长度所处的长度范围,得到与第一数据对应的命名空间。

根据本发明的第十方面的第一至第四固态存储设备,提供了根据本发明第十方面的第五固态存储设备,还包括数据填充模块,用于当第一数据的长度小于所述指定数量的数据单元的尺寸时,填充数据以将填满指定数量的数据单元。

根据本发明的第十方面的第一至第五固态存储设备,提供了根据本发明第十方面的第六固态存储设备,还包括闪存转移层表更新模块,用于将第一哈希值和为第一哈希值分配的第一物理地址记录到闪存转移层表。

根据本发明的第十方面的第一至第六固态存储设备,提供了根据本发明第十方面的第七固态存储设备,闪存转移层表更新模块,还用于依据第一数据所对应的命名空间,将第一哈希值和为第一哈希值分配的第一物理地址记录到同与第一数据对应的命名空间对应的闪存转移层表中。

根据本发明的第十方面的第一至第七固态存储设备,提供了根据本发明第十方面的第八固态存储设备,还包括数据读取模块和检索模块,其中数据接收模块,还用于从主机接收第二键值;哈希运算模块,还用于对第二键值作哈希运算,得到第二哈希值;检索模块,用于从闪存转移层表中查询第二哈希值,得到为第二哈希值所分配的第二物理地址;数据读取模块,用于从所述第二物理地址获取第二数据并发送给主机。

根据本发明的第十方面的第八固态存储设备,提供了根据本发明第十方面的第九固态存储设备,还包括哈希值获取模块,用于依据从主机接收的对命名空间的指示,访问被指示的命名空间对应的闪存转移层表以获得同第二键值对应的第二哈希值。

根据本发明的第十方面的第九固态存储设备,提供了根据本发明第十方面的第十固态存储设备,其中哈希值获取模块,还用于搜索对应不同命名空间的多个闪存转移层表,以获得同第二键值对应的第二哈希值。

根据本发明的第十方面的第一至第十固态存储设备,提供了根据本发明第十方面的第十一固态存储设备,其中数据写入模块,还用于将第一数据的长度写入第一物理地址所指示的数据单元。

根据本发明的第十方面的第十一固态存储设备,提供了根据本发明第十方面的第十二固态存储设备,其中数据接收模块,还用于从主机接收第三键值;哈希运算模块,还用于对第三键值作哈希运算,得到第三哈希值;检索模块,还用于从闪存转移层表中查询第三哈希值,得到为第三哈希值所分配的第三物理地址;数据获取模块,还用于从第三物理地址所指示的数据单元获取第三数据的长度,以及依据所获取的长度读取第三数据;以及将第三数据发送给主机。

根据本发明的第十一方面,提供了根据本发明第十一方面的一种固态存储设备,该固态存储设备包括主机接口、nvm芯片、控制部件以及dram,控制部件用于控制在主机接口、nvm芯片与dram之间的数据传输,所述控制器部件通过执行程序来执行根据本发明第九方面的基于kv模型的第一至第十二数据访问方法所述的方法。

根据本发明的第十二方面,提供了根据本发明的第十二方面的一种固态存储设备,该固态存储设备包括主机接口、nvm芯片、控制部件以及dram,控制部件用于控制在主机接口、nvm芯片与dram之间的数据传输,所述控制器部件用于,从主机接收第一键值和第一数据;获得与第一数据对应的命名空间;对第一键值作哈希运算,得到第一哈希值;为第一哈希值分配第一物理地址;基于所述命名空间确定指定数量的数据单元,将第一键值和第一数据写入第一物理地址所指示的指定数量的数据单元。

根据本发明的第十三方面,提供了根据本发明第十三方面的基于kv模型的第一数据访问方法,该方法包括:从主机接收第一键值,对第一键值作哈希运算,得到第一哈希值;从闪存转移层表中查询第一哈希值,得到为第一哈希值所分配的第一物理地址;从所述第一物理地址获取第一数据并发送给主机。

根据本发明的第十三方面的基于kv模型的第一数据访问方法,提出了根据本发明第十三方面的基于kv模型的第二数据访问方法,其中依据从主机接收的对命名空间的指示,访问被指示的命名空间对应的闪存转移层表以获得同第一键值对应的第一哈希值。

根据本发明的第十三方面的基于kv模型的第一数据访问方法,提出了根据本发明第十三方面的基于kv模型的第三数据访问方法,其中搜索对应不同命名空间的多个闪存转移层表,以获得同第一键值对应的第一哈希值。

附图说明

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

图1为现有技术中的固态存储设备的示意图;

图2为根据本发明实施例的ftl表的结构示意图;

图3为根据本发明实施例的nvm的数据组织的示意图;

图4为根据本发明又一实施例的nvm的数据组织的示意图;

图5为根据本发明又一实施例的nvm的数据组织的示意图;

图6为根据本发明又一实施例的ftl表的结构示意图;

图7为根据本发明又一实施例的nvm的数据组织的示意图;

图8为根据本发明又一实施例的nvm的数据组织的示意图;

图9为根据本发明又一实施例的ftl表的结构示意图;

图10为根据本发明又一实施例的nvm的数据组织的示意图;

图11为根据本发明又一实施例的ftl表的结构示意图;

图12为根据本发明又一实施例的nvm的数据组织的示意图;

图13为根据本发明又一实施例的nvm的数据组织的示意图;

图14为根据本发明又一实施例的ftl表的结构示意图;

图15为根据本发明又一实施例的nvm的数据组织的示意图;

图16为根据本发明又一实施例的ftl表的结构示意图;

图17为根据本发明实施例的具有多个命名空间的固态存储设备的框图;

图18为根据本发明又一实施例的ftl表的结构示意图;

图19为根据本发明又一实施例的ftl表的结构示意图;以及

图20为根据本发明又一实施例的ftl表的结构示意图。

具体实施方式

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

在支持key-value(键-数据,也简称为“kv”)存储模型的固态存储设备中,为执行写操作,主机向固态存储设备提供键(key)与数据(value),以将数据写入固态存储设备,并将键作为所写入的数据的索引。为执行读操作,主机向固态存储设备提供键,固态存储设备根据键找到数据,并将数据提供给主机。因而在kv存储系统中,键是用来访问数据的索引,而数据(value)是被访问的数据。一般地,键与数据的长度均不是定长。以及可选地,为了降低复杂性,键和/或数据的长度可具有指定范围。

图2为根据本发明实施例的ftl表的结构示意图。图2中展示的ftl表提供从由键得到的哈希值到物理地址(例如,ppa,phvsicalpageaddress,物理页地址)的映射。例如,在ftl表中记录由键得到的哈希值与物理地址的映射关系。以及可选地,除了物理页地址,ftl表中记录的物理地址可以是物理页内部的数据帧(dataframe)的起始地址。数据帧是具有固定大小的数据单元,物理页可包括1个或多个数据帧。

在根据本发明一个实施例中,主机提供的键的长度不定,数据的长度也不定。将不定长的键进行哈希运算,得到定长的哈希值(例如,4字节/8字节),作为ftl表的索引。用哈希值作为索引查询ftl表,得到对应的物理地址。ftl表可以由数组、链表、树等多种数据结构实现。

实施例一

图3展示了本发明实施例的nvm的数据组织。图3中展示了物理地址为ppa的nvm的物理页(或数据帧),其中ppa指示nvm的物理页(或数据帧)地址,在由物理地址ppa所指示的物理页(或数据帧)中记录了键key与数据value,键key与数据value是主机写入数据时提供的键key与数据value。在由物理地址ppa所指示的物理页(或数据帧)中还记录了头数据header,头数据header用于指示键key和/或数据value的起始地址和/或长度。例如,头数据header记录了键key的长度与数据value的长度(而header部分的长度为定值),根据ppa所指示的物理地址和header部分的长度可计算出键key的起始地址和value的起始地址。在一个例子中,头数据header记录键key的长度,根据ppa所指示的物理地址和header部分的长度,以及键key的长度可计算出数据value的起始地址。以及在又一个例子中,键key的起始地址是固定的,头数据header记录数据value的起始地址。

由于键key与数据value是不定长的,在一些情况下头数据header、键key和数据value的长度的总和不足以填满nvm的物理页(或数据帧),则填充数据(dummy)以填满所述物理页(或数据帧)。

实施例二

图4展示了根据本发明又一实施例的nvm的数据组织。图4展示了物理地址为ppa和ppa+1的物理页(或数据帧),其中ppa指示nvm的物理页(或数据帧)地址,ppa+1指示与ppa在物理地址上连续的物理页(或数据帧)地址,键key与数据value是主机写入数据时提供的键key与数据value。在由ppa所指示的物理页(或数据帧)中记录了键key与主机提供的数据value的部分,在由ppa+1所指示的物理页(或数据帧)中记录了主机提供的数据value的余下部分。在由ppa以及ppa+1所指示的物理页(或数据帧)中还记录了头数据header,用于指示键key和数据value在ppa以及ppa+1所指示的物理页(或数据帧)中的起始地址和/或长度。可选地,在头数据header中还记录所占用物理页(或数据帧)的数量(在图4中,该数量为2)。

在根据图4的实施例中,主机向nvm中写入的数据value的长度超过1个ppa指示的数据单元大小,即ppa所指示的数据单元无法容纳数据value,使用以ppa指示的物理地址为起始地址且物理地址连续的两个或更多数据单元(参看图4,用由ppa与ppa+1指示的连续两个数据单元)来存储主机提供的键key与数据value,其中数据单元对应于ppa所指示的物理页(或数据帧)。进一步地,在ppa所指示的两个或更多数据单元中还存储有头数据header,用于指示键key与数据value的起始地址和/或长度。可选地,依然参看图4,在头数据header以及主机提供的键key与数据value的长度不足以填满ppa+1所指示的数据单元时,填充数据(dummy)以填满ppa+1所指示的数据单元。

在根据本发明的又一个实施例中,主机向nvm写入数据。主机向nvm发出写入数据的命令。nvm从主机接收写入数据的命令,命令中指示了要写入的数据value1以及用于索引数据value1的键key1。响应于收到写入数据的命令,nvm对键key1进行哈希运算,得到哈希值h1。以及nvm为哈希值h1分配物理地址ppa1,并将哈希值h1和为哈希值h1分配的物理地址ppa1记录到ftl表中。接下来,nvm向ppa1所指示的数据单元写入数据value。

可选地,nvm还依据键key1与数据value1的长度,确定要使用的数据单元数量n。以及依据数据单元数量n,在从ppa1开始连续的n个数据单元(ppa1、ppa1+1、ppa1+2...)中写入键key1与数据value1,以及头数据header,其中头数据header用于指示键key1与数据value1在要使用的n个数据单元(ppa1、ppa1+1、ppa1+2...)中的起始地址和/或长度。

在根据本发明的又一个实施例中,主机从nvm读取数据。主机向nvm发出读取数据的命令。nvm从主机接收读取数据的命令,命令中指示了待读取的目标数据value1所对应的索引键key1。响应于收到读取数据的命令,nvm对键key1进行哈希运算,得到哈希值h1。接下来,nvm依据哈希值h1查询ftl表,得到为哈希值h1分配的物理地址ppa1。以及nvm从物理地址ppa1所对应的数据单元中读取value1并提供给主机。可选地,nvm从物理地址ppa1所指示的数据单元中读出头数据header,以及从头数据header获取数据valuel的存储地址。以及nvm从数据value1的存储地址读出数据value1,并提供给主机。

可选地,nvm还从头数据header获取键key1的存储地址与长度并读取键key1,以及比较键key1与主机提供的key1是否相同。若从头数据header读取的键key1与主机提供的key1相同,则继续获取数据value1的存储地址并读取数据value1,以及将所述数据value1提供给主机。

在根据本发明的另一个实施例中,主机向nvm更新数据。主机向nvm发出更新数据的命令。nvm从主机接收更新数据的命令,命令中指示了待更新数据value2以及用于索引数据value2的键key1,其中nvm中已存储有由key1所索引的数据value1,数据value1被存储在与键key1所对应的物理地址ppa1中。响应于收到更新数据的命令,nvm对键key1进行哈希运算,得到哈希值h1。以及nvm为哈希值h1分配物理地址ppa2。nvm还从ftl表中查找哈希值h1和物理地址ppa1的记录位置,并依据新分配的物理地址ppa2对ftl表进行更新,用物理地址ppa2更新ppa1。

可选地,nvm还依据键key1与数据value2的长度,确定要使用的数据单元数量n。以及依据数据单元数量n,在从物理地址ppa2开始且连续的n个数据单元(ppa2、ppa2+1、ppa2+2...)中记录键key1与数据value2,以及头数据header,其中头数据header用于记录键key1与数据value2在n个数据单元(ppa2、ppa2+1、ppa2+2...)中的起始地址和/或长度。

实施例三(哈希(hash)冲突的解决)

对键做哈希时可能发生哈希冲突。哈希冲突指对主机发送的不同键值,通过哈希运算可得到相同的哈希值。在根据本发明的实施例中,在解决哈希冲突时将具有相同哈希值的两组或多组键与数据存储在一起。

图5展示了根据本发明实施例的存在哈希冲突时的nvm的数据组织。图5中展示了物理地址为ppa和ppa+1的物理页(或数据帧),其中ppa指示nvm的物理页(或数据帧)地址,ppa+1指示与ppa在物理地址上连续的物理页(或数据帧)地址。在由ppa所指示的物理页(或数据帧)中记录了主机提供的键key1和数据value1,在由ppa+1所指示的物理页(或数据帧)中记录了主机提供的键key2和数据value2。在由ppa以及ppa+1所指示的物理页(或数据帧)中还存储有数据头header,用于指示键key1、数据value1、键key2以及数据value2的起始地址和/或长度。虽然在图5中示出了在ppa1所指示的物理页(或数据帧)与ppa+1指示的物理页(或数据帧)中都存储了头数据header,这不是必需的。可选地,即使存在哈希冲突,也仅在ppa所指示物理页(或数据帧)中存储头数据header。在每个物理页(或数据帧)中存储(相同的)头数据header,用于提高可靠性,在一个或多个头数据header出现故障时,可从其他头数据header识别各个键key与数据value存储的位置。

虽然在图5中,键key1与数据value1位于ppa所指示的物理页(或数据帧)中,而键key2与数据value2位于ppa+1所指示的物理页(或数据帧)中,这依然不是必需的。ppa与ppa+1所指示的物理页(或数据帧)提供了连续的存储空间,在所提供的连续存储空间中,可连续地存储多组键key与数据value(例如,多个键key和数据value也可以出现在相同的物理页(或数据帧)中),并在头数据header中记录各个键key与数据value的起始地址和/或长度。

下面描述根据本发明实施例处理哈希冲突的过程。

实施例四(哈希(hash)冲突的解决)

图6为根据本发明又一实施例的ftl表。参看图6,主机已向nvm中写入键key1和数据value1,键key1用于索引数据value1,键key1的哈希结果为哈希值h1,哈希值h1以及为哈希值h1分配的物理地址ppa1被记录在ftl表中。以及参看图7,使用由连续的物理地址ppa1及ppa+1指示的两个数据单元存储键key1与数据value1。

在根据本申请的实施例四中,主机区分更新数据的命令与写入数据的命令。更新数据的命令用于使已存在的键key索引新的数据value,而写入数据的命令用于写入由新的键key索引对应的数据value。因而在处理写入数据的命令时,命令中的键key的索引是在ftl表中没有记录过的。

作为举例,主机向nvm更新数据,以将键key1更新到用于索引数据value2。主机向nvm发出更新数据的命令。nvm从主机接收更新数据的命令,命令中指示了待更新数据value2以及用于索引数据value2的键key1。响应于收到更新数据的命令,nvm对键key1进行哈希运算,得到哈希值h1。接着nvm通过查询ftl表获取哈希值h1对应的物理地址ppa1(参看图6),

由于收到的是更新数据的命令,nvm为哈希值h1分配新的物理地址ppa2。接着,参看图8,nvm向ppa2所指示的物理页(或数据帧)中写入键key1与数据value2,以及在头数据header中记录键key1与数据value2的起始地址和/或长度。以及在ftl表中记录与哈希值h1对应的物理地址为ppa2(参看图9)。

接下来,主机向nvm写入数据。主机向nvm发出写入数据的命令。nvm从主机接收写入数据的命令,命令中指示了写入数据value3以及用于索引数据value3的键key3。响应于收到写入数据的命令,nvm对键key3进行哈希运算,得到哈希值h1。接着nvm查询ftl表,在ftl表中查到已记录有哈希值h1以及为哈希值h1分配的物理地址ppa2(参看图9),从而发现键key3与键key1存在哈希冲突(具有相同的哈希值h1)。

响应于键key3与键key1存在哈希冲突,nvm在ftl表中为哈希值h1分配新的物理地址ppa3。接着nvm从物理地址ppa2(参看图8)中读出键key1和数据value2。以及参看图10,nvm在分配的新物理地址ppa3开始的连续的多个数据单元(图10中示出为由ppa3与ppa3+1所指示的数据单元)中写入key1、value2、key3与value3。可选地,nvm还在写入数据单元的一个或多个的头数据header中记录哈希冲突的存在,以及key1、value2、key3与value3的起始地址和/或长度。以及在ftl表中记录与哈希值h1对应的物理地址为ppa3。

作为另一个例子,接下来,主机向nvm发出读取数据的命令。nvm从主机接收读取数据的命令,读取数据的命令中指示了待读取的目标数据value3所对应的索引键key3。响应于收到读取数据的命令,nvm对键key3进行哈希运算,得到哈希值h1。接着nvm通过查询ftl表,找到与哈希值h1对应的物理地址为ppa3。

响应于找到物理地址ppa3,nvm从物理地址ppa3所指示的数据单元获取头数据header,接着从header中获取键的存储地址并获取键key1。比较键key1与从读取数据的命令中获取的键key3,发现从物理地址ppa3读出的键key1不等于主机要读的键key3,则表示存在哈希冲突。以及从header中继续获取下一个键的存储地址并获取键key3。由于获取的键key3等于主机要读的键key3,则读出与键key3对应的数据value3,并提供给主机。

实施例五(哈希(hash)冲突的解决)

在根据本申请的实施例五中,主机不区分更新数据的命令与写入数据的命令。因而在处理写入数据的命令时,若命令中的键的哈希值在ftl表中存在,其或者表明主机希望更新数据,或者表明该键与ftl表已经存在的键存在哈希冲突。为识别要更新数据还是写入以新的键为索引的数据,需要从nvm中读出所存储的键。若主机提供的键与从nvm读出的键相同,表示主机希望更新数据;若主机提供的键与从nvm读出的键不同,表示主机希望写入以新的键为索引的数据。

图11为根据本发明实施例五的ftl表。参看图11,主机已向nvm中写入key4和value4,key4用于索引数据value4,key4的哈希结果为h4,哈希值h4以及为哈希值h4分配的物理地址ppa4被记录在ftl表中。以及参看图12,使用由物理地址ppa4及连续的ppa4+1指示的两个数据单元存储key4与value4。

作为举例,主机向nvm写入数据。主机向nvm发出写入数据的命令。nvm从主机接收写入数据的命令,写入数据的命令中指示了写入数据value5以及用于索引数据value5的键key5。响应于收到写入数据的命令,nvm对键key5进行哈希运算,得到哈希值h4。接着nvm从ftl表中查到已记录有哈希值h4以及为哈希值h4分配的物理地址ppa4(参看图11)。此时尚无法确定主机希望更新由键key5索引的数据为value5,还是希望写入由键key5所索引的新数据value5。

为确定主机的目的,nvm从物理地址ppa4所指示的数据单元获取头数据header,接着从header获取键的存储地址并获取键key4。比较键key4与从主机接收的写入数据的命令中获取的键key5,发现从物理地址ppa4读出的键key4不等于主机的键key5,则表示主机不是希望更新由键key5(因为键key5在nvm中不存在)所索引的数据,而是希望写入由键key5所索引的新数据value5。可以理解的,若在物理地址ppa4(或ppa4开始的连续多个物理地址)存储了多组键/数据,需要读出所存储的每一个键,并将读出的键同主机提供的写命令中的键key5进行比较。若在物理地址ppa4(或ppa4开始的连续多个物理地址)中没有存储同主机提供的写命令的键key5相同的键,表明主机希望写入由键key5所索引的新数据value5;若在物理地址ppa4(或ppa4开始的连续多个物理地址)中存储了同主机提供的写命令的键key5相同的键,表明主机希望更新由键key5索引的数据。

继续参看图12,从物理地址ppa4读出的键为key4,不同于主机提供的键key5,从而确定主机希望写入由键key5所索引的新数据value5。作为响应,从物理地址ppa4读出键与数据,将读出的键与数据同主机要写入的键key5与数据value5组合(例如,追加),并将组合的结果写入新分配的物理地址所指示的数据单元。

例如,nvm为哈希值h4分配新的物理地址ppa5。接着nvm从物理地址ppa4和ppa4+1(参看图12)中读出键key4和数据value4。以及参看图13,nvm在分配的新物理地址ppa5开始的连续两个数据单元(ppa5与ppa5+1)中写入键key4与键value4;以及在连续的第三个数据单元(ppa5+2)中写入键key5与数据value5。可选地,nvm还在头数据header中记录键key4、数据value4、键key5与数据value5的起始地址和/或长度。以及在ftl表中记录与哈希值h4对应的物理地址为ppa5(参看图14)。可以理解地,键key4与键key5的哈希值均为h4。依然可以理解地,从物理地址ppa4和ppa4+1(参看图12)中读出键key4和数据value4时,若其中包括填充数据(dummy),可将dummy数据删除而在数据value4之后追加键key5与数据value5。以及若物理地址ppa4和ppa4+1中存储的填充数据的大小可容纳键key5与数据value5,可在分配的新物理地址ppa5开始的连续两个数据单元(ppa5与ppa5+1)中写入键key4与键value4,以及键key5与数据value5。

作为另一个例子,接下来,主机向nvm发出读取数据的命令。nvm从主机接收读取数据的命令,读取数据的命令中指示了待读取的目标数据value5所对应的索引键key5。响应于收到读取数据的命令,nvm对键key5进行哈希运算,得到哈希值h4。接着nvm通过查询ftl表找到与哈希值h4对应的物理地址ppa5(参看图14)。

响应于找到物理地址ppa5,nvm从物理地址ppa5所指示的数据单元获取头数据header,接着从header获取键的存储地址并获取键key4。比较键key4与从读取数据的命令中获取的键key5,发现从物理地址ppa5读出的键key4不等于主机要读的键key5,则表示存在哈希冲突,从header中继续获取下一个键的存储地址并获取键key5。由于获取的键key5等于主机要读的键key5,则读出与键key5对应的数据value5,并提供给主机。

可选地,响应于从物理地址ppa5读出的键key4不等于主机要读的键key5,即表示存在哈希冲突,从header中继续获取键key4与数据value4的长度,并依据键key4与数据value4的长度确定键key4与数据value4占用2个数据单元(参看图13)。接着从ppa5开始的连续的第三个数据单元(ppa5+2)中获取键key5的存储地址并获取键key5。由于获取的键key5等于主机要读的键key5,则读出与键key5对应的数据value5,并提供给主机。

在另一个例子中,依然参看图11与图12,主机已向nvm中写入key4和value4,key4用于索引数据value4,key4的哈希结果为h4,哈希值h4以及为哈希值h4分配的物理地址ppa4被记录在ftl表中。以及使用由物理地址ppa4及连续的ppa4+1指示的两个数据单元存储key4与value4。

主机向nvm写入数据。主机向nvm发出写入数据的命令。nvm从主机接收写入数据的命令,写入数据的命令中指示了写入数据value5以及用于索引数据value5的键key4。响应于收到写入数据的命令,nvm对键key4进行哈希运算,得到哈希值h4。接着nvm从ftl表中查到已记录有哈希值h4以及为哈希值h4分配的物理地址ppa4(参看图11)。此时尚无法确定主机希望更新由键key4索引的数据为value5,还是希望写入由键key4所索引的新数据value5。

为确定主机的目的,nvm从物理地址ppa4所指示的数据单元获取头数据header(参看图12),接着从header获取键的存储地址并获取键key4。比较键key4与从主机接收的写入数据的命令中获取的键key4,发现从物理地址ppa4读出的键key4等于主机提供的键key4,则表示主机希望更新由键key4(因为键key4在nvm中存在)所索引的数据。

作为响应,nvm为哈希值h4分配新的物理地址ppa51。接着,nvm将键key4与数据value5写入由物理地址ppa51所指示的物理页(或数据帧)(参看图15)。以及更新ftl表,在ftl表中记录哈希值h4对应的物理地址为ppa51(参看图16)。

实施例六

在前面的实施例中,固态存储设备能够支持任意长度的键和/或数据。而在根据本申请的实施例六中,固态存储设备支持有限种长度的键和/或数据。例如支持的数据长度有2种(512字节/4kb)或4种(512字节/1kb/4kb/16kb)。以及固态存储设备支持的键的长度是有限的,例如小于1kb,或者具有有限种长度。

图17示出根据本发明实施例的具有多个命名空间(namespace)的固态存储设备的框图。图17示出的不同命名空间(ns1/ns2/ns3/ns4)用于承载具有不同的长度的键和/或数据的io命令。在根据本发明的一个实施例中,主机通过io命令将不同长度的数据发送到对应的命名空间。例如,主机将数据长度不大于512字节的io命令发送给命名空间ns1,将数据长度处于512字节到1kb之间的io命令发送给命名空间ns2,将数据长度处于1kb到4kb之间的io命令发送给命名空间ns3,将数据长度处于4kb到16kb之间的io命令发送给命名空间ns4。可选地,在一个例子中,主机使用私有命令指示命令空间。而在另一个例子中,主机以符合nvme协议命令的方式描述命名空间。

可选地,固态存储设备还依据io命令对命名空间的指示,确定要访问的数据的长度。例如,主机指示命名空间ns1,表示要访问的数据长度不大于512字节;主机指示命名空间ns2,标识要访问的数据长度处于512字节到1kb之间。以及固态存储设备对键做哈希运算,得到定长的哈希值(例如h6),作为ftl表的索引。

继续参看图17,ftl表中的物理地址所指示的数据单元大小与该物理地址对应的逻辑地址所属的命令空间有关。例如,主机发出的io命令指示了命名空间ns1,若io命令为读命令,依据io命令的逻辑地址从ftl表获取对应的物理地址,以及从获取的物理地址获取512字节的数据作为对io命令的响应。类似地,若io命令指示了命名空间ns2,从经ftl表获取的物理地址获取1kb字节的数据作为对io命令的响应。

可以理解地,在根据本发明的实施例中,依据io命令所指示的命名空间获取要访问的数据的长度,以及从ftl表获取io命令的逻辑地址对应的物理地址。获取数据长度与物理地址的顺序可以改变,或同时进行。

在根据本发明的一个实施例中,主机向固态存储设备写入数据。主机向固态存储设备发出写入数据的命令。固态存储设备从主机接收写入数据的命令,写入数据的命令中指示了数据value6以及用于索引数据value6的键key6,写入数据的命令中还指示了命名空间ns1(参看图17)。

响应于收到写入数据的命令,固态存储设备根据命名空间ns1确定数据value6的长度不大于512字节。接下来,固态存储设备对键key6做哈希运算,得到哈希值h6,并为哈希值h6分配物理地址ppa6,以及将哈希值h6以及为h6分配的物理地址ppa6记录到ftl表中(参见图18)。以及固态存储设备将数据value6写入由物理地址ppa6所指示的数据单元。可选地,若数据value6的长度不足512字节,固态存储设备向写入数据value6的数据单元填充数据以补足512字节。

在又一个例子中,接下来,主机向固态存储设备继续写入数据。主机向固态存储设备发出写入数据的命令。固态存储设备从主机接收写入数据的命令,写入数据的命令中指示了数据value7以及用于索引数据value7的键key7,写入数据的命令中还指示了命名空间ns2(参看图15)。

响应于收到写入数据的命令,固态存储设备根据命名空间ns2确定value7的长度不大于1k字节。固态存储设备对键key7做哈希运算,得到哈希值h7,并为哈希值h7分配物理地址ppa7,以及将哈希值h7以及为哈希值h7分配的物理地址ppa7记录到ftl表中(参见图18)。以及固态存储设备将数据value7写入由物理地址ppa7指示的数据单元。可选地,若数据value7的长度不足1kb,固态存储设备向用于写入value7的数据单元填充数据以补足1kb。

可选地,固态存储设备的存储介质中也同物理地址ppa6与ppa7相关联地记录键key6与键key7,以及记录数据value6与数据value7的长度。

所属领域技术人员将意识到,当发生哈希冲突(关于键)时,可采用依据本申请实施例三、实施例四和/或实施例五所提供的方案来解决哈希冲突。

在根据本发明的又一个实施例中,主机从固态存储设备读取数据。主机向固态存储设备发出读取数据的命令。固态存储设备从主机接收读取数据的命令,读取数据的命令中指示了用于索引待读取目标数据value8的键key8,读取数据的命令中还指示了命名空间ns3(参看图17)。

响应于收到读取数据的命令,固态存储设备根据命名空间ns3确定数据value8的长度不大于4kb。接下来,固态存储设备对键key8做哈希运算,得到哈希值h8,并查询ftl表(参看图18),得到哈希值h8对应的物理地址ppa8。固态存储设备从物理地址ppa8所指示的数据单元读取长度为4kb的数据,并提供给主机。

可选地,固态存储设备还从物理地址ppa8所指示的数据单元读出的数据中获取value8的长度,并将指定长度的value8提供给主机。

在又一个例子中,接下来,主机从固态存储设备读取数据。主机向固态存储设备发出读取数据的命令。固态存储设备从主机接收读取数据的命令,读取数据的命令中指示了用于索引待读取目标数据value9的键key9,读取数据的命令中还指示了命名空间ns4(参看图17)。

响应于收到读取数据的命令,固态存储设备根据命名空间ns4确定数据value9的长度不大于16kb。接下来,固态存储设备对键key9做哈希运算,得到哈希值h9,并查询ftl表,得到哈希值h9对应的物理地址ppa9(参见图18)。接着固态存储设备访问物理地址ppa9所指示的数据单元。由于ftl表中一个物理地址ppa指示(例如)最大4416字节的存储空间,固态存储设备从ppa9所指示的物理地址连续的多个数据单元(ppa9/ppa9+1/ppa9+2/ppa9+3)读取16kb数据,并提供给主机。

可选地,固态存储设备还从ppa9所指示的物理地址连续的多个数据单元所读出的数据中获取数据value9的长度,并将指定长度的数据value9提供给主机。

可选地,根据本发明的另一个实施例,主机在提供给固态存储设备的io命令中不指示命名空间。而固态存储设备以其他方式识别命名空间。例如,主机在io命令中指示数据的长度,固态存储设备对于数据长度在0-512字节的io命令,按访问命名空间ns1的io命令进行处理,而对数据长度在512-1024字节的io命令,按访问命名空间ns2的io命令进行处理。作为又一个例子,主机在在提供给固态存储设备io命令中指示nvme控制器,固态存储设备依据nvme控制器与命名空间的对应关系,获取访问的命名空间。

实施例七

在根据本申请的实施例七中,主机在io命令中指示键与数据。可选地,主机在io命令中还指示数据的长度。

根据本申请的实施例七,固态存储设备根据数据长度对io命令分类。例如,对数据长度在0-512字节之间的io命令,固态存储设备填充数据以将数据的长度补足到512字节;对数据长度在512字节-1k字节之间的io命令,固态存储设备填充数据以将数据长度补足到1k字节;对数据长度在1k-4k字节之间的io命令,固态存储设备填充数据以将数据长度补足到4k字节;对数据长度在4k-16k字节之间的io命令,固态存储设备填充数据以将数据长度补足到16k字节。

可选地,固态存储设备可对应于每类数据长度提供多个ftl表,使每个ftl表中记录一类数据长度的io命令的哈希值到物理地址ppa的映射关系。

例如,图19所示出的ftl表中,每条记录对应的数据长度为1k-4k字节,而图20所示出的ftl表中,每条记录对应的数据长度为4k-16k字节。在固态存储设备中同时提供图19所示的ftl表与图20所示的ftl表。

作为举例,主机向固态存储设备写入数据。主机向固态存储设备发送写入数据命令,写入数据命令中指示了数据value10以及用于索引数据value10的键key10,其中数据value10的长度为1k-4k字节。固态存储设备从主机接收写入数据命令。响应于收到写入数据命令,固态存储设备对键key10进行哈希运算,得到哈希值h10,以及为h10分配物理地址ppa10,并将哈希值h10与物理地址ppa10的映射关系记录在ftl表1(4k)(参看图19)中。以及固态存储设备向物理地址ppa10所指示的数据单元写入数据value10。

作为又一个例子,主机向固态存储设备读取数据。主机向固态存储设备发送读取数据命令,读取数据命令中指示了用于索引待读取目标数据value11的键key11,其中待读取目标数据value11的长度为4k-16k字节。响应于收到读取数据命令,固态存储设备对键key11进行哈希运算,得到哈希值h11。以及固态存储设备从ftl表(16k)(参看图20)中找到哈希值h11及其对应的物理地址ppa11。以及固态存储设备从物理地址ppa11开始的连连续物理地址获取16k字节的数据,并提供给主机。可选地,固态存储设备从物理地址ppa11开始的物理地址连续的多个数据单元获取待读取目标数据value11的长度,并将指定长度的数据value11提供给主机。

作为依然又一个例子,主机向固态存储设备发送读取数据命令,读取数据命令中指示了用于索引待读取目标数据valuel1的键key11,但并未提示数据value11的长度。响应于收到该读取数据命令,固态存储设备搜索所有ftl表,并从ftl表(16k)(参看图20)中找到哈希值h11及其对应的物理地址ppa11。以及固态存储设备从物理地址ppa11所指示的(一个或多个)数据单元获取16k字节的数据,并提供给主机。

所属领域技术人员将意识到,当发生哈希冲突(关于键)时,可采用依据本申请实施例三、实施例四和/或实施例五所提供的方案来解决哈希冲突。

实施例九

根据本发明的实施例九,支持kv存储模型的固态存储设备允许主机通过get/put命令访问固态存储设备。

作为举例,主机从固态存储设备读取数据。主机向固态存储设备发送“get(key)”命令,“get(key)”命令中通过参数“key”指示了用于索引待读取目标数据value12的键key12。固态存储设备从主机接收“get(key)”命令。

响应于收到“get(key)”命令,固态存储设备对键key12进行哈希运算,得到哈希值h12。接下来,固态存储设备依据哈希值h12搜索ftl表,并从ftl表中找到哈希值h12对应的物理地址ppa12。以及固态存储设备从物理地址ppa12所指示的数据单元获取目标数据value12,并提供给主机。可选地,主机在发送的“get(key)”命令中还指定待读取目标数据value12所对应的命名空间。

作为又一个例子,主机向固态存储设备写入数据。主机向固态存储设备发送“put(key,value)”命令,“put(key,value)”命令中通过参数“key”与“value”指示了数据value13以及用于索引数据value13的键key13。固态存储设备从主机接收“put(key,value)”命令。

响应于收到“put(key,value)”命令,固态存储设备对键key13进行哈希运算,得到哈希值h13,并为哈希值h13分配物理地址ppa13,以及将哈希值h13,与为其分配的物理地址ppa13的映射关系记录到ftl表中。以及固态存储设备向物理地址ppa13所指示的数据单元写入数据value13。可选地,主机在发送的“put(key,value)”命令中还指定数据value13所对应的命名空间。

作为另一个例子,主机向固态存储设备发送以nvme协议承载get/put的命令,并通过prp(physicalregionpage,物理区域页)条目或sg列表(scattergatherlist,分散-收集列表)指定要访问的数据。

另外,根据本发明实施例的ftl表可存储在固态存储设备的dram(例如,参看图1,dram110)。其中,控制部件104访问dram110来维护ftl表。控制部件104控制前述根据本申请实施例的流程的执行。可选的,控制部件104包括cpu,在cpu中执行软件来操纵控制部件104的硬件来执行前述流程。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1