存储装置的制作方法


存储装置
1.本技术要求于2021年5月12日提交的第63/187,919号美国临时专利申请以及于2021年7月1日提交的第17/366,017号美国非临时专利申请的权益,该美国临时专利申请和美国非临时专利申请出于所有目的通过引用包含于此。
技术领域
2.公开总体上涉及存储装置,并且更具体地涉及支持存储装置中的细粒度数据保持。


背景技术:



3.随着与非(nand)闪存技术继续小型化并且更多的位被存储在单元中,存储密度已经提高。但是增加nand闪存中的单元的存储密度也可能影响闪存的可靠性、编程速度和耐久性。为了满足工业标准所要求的保持能力,固态驱动器(ssd)控制器可能在复杂的闪存转换层(ftl)块管理和数据保护设计上花费时间。根据工业标准,可能需要nand闪存将数据保持1至10年。满足保持要求可能涉及使用闪存通道带宽、功率和其他资源。
4.仍然需要支持指定数据将在存储装置中保持多长时间的主机。


技术实现要素:



5.公开的实施例包括可支持数据保持期的存储装置。当存储装置接收到写入请求时,存储装置可确定数据的保持期。该信息可用于选择在何处(和/或如何)将数据编程到存储装置上。
6.根据公开的实施例,一种存储装置,包括:主机接口,用于从主机接收写入请求,写入请求包括数据和所述数据的逻辑地址;用于所述数据的第一存储设备;保持期确定器,用于确定所述数据的保持期;转换层,用于至少部分地基于所述保持期来选择第一存储设备中的物理地址以存储所述数据;第二存储设备,用于逻辑到物理映射表,逻辑到物理映射表用于将所述逻辑地址映射到所述物理地址和所述保持期;以及控制器,用于将所述数据编程到第一存储设备中的所述物理地址中。
7.根据公开的实施例,一种包括非暂时性存储介质的物品,所述非暂时性存储介质上存储有指令,所述指令在由机器执行时,导致:在存储装置处从主机接收写入请求,写入请求包括数据和所述数据的逻辑地址;确定所述数据的保持期;至少部分地基于所述保持期来选择存储装置中的物理地址以存储所述数据;更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期;以及将所述数据编程到存储装置中的所述物理地址中。
8.根据公开的实施例,一种用于存储装置的方法,包括:在存储装置处从主机接收读取请求,读取请求包括数据的逻辑地址;至少部分地基于所述逻辑地址来确定所述数据的物理地址;至少部分地基于所述逻辑地址来确定用于所述数据的纠错码(ecc)模式;从存储装置中的所述物理地址读取编码数据;至少部分地基于所述ecc模式来对编码数据进行解
码,以产生所述数据;以及将所述数据从存储装置返回给主机。
附图说明
9.下面描述的附图是可如何实现公开的实施例的示例,并且不旨在限制公开的实施例。公开的各个实施例可包括在特定附图中未示出的元件和/或可省略在特定附图中示出的元件。附图旨在提供说明,并且可不按比例。
10.图1示出根据公开的实施例的包括支持数据保持期的存储装置的系统。
11.图2示出根据公开的实施例的图1的机器的细节。
12.图3示出根据公开的实施例的支持数据保持期的固态驱动器(ssd)。
13.图4示出根据公开的实施例的图3的闪存芯片的结构。
14.图5示出根据公开的实施例的图3的闪存转换层的细节。
15.图6示出根据公开的实施例的可包括在发送到图1的存储装置的写入请求中的信息。
16.图7示出根据公开的实施例的可包括在发送到图1的存储装置的写入请求中的信息。
17.图8示出根据公开的实施例的图5的逻辑到物理映射表的细节。
18.图9示出根据公开的实施例的图5的存储关于如何根据保持期对数据进行编程的信息的表的细节。
19.图10示出根据公开的实施例的图3的闪存控制器的细节。
20.图11示出根据公开的实施例的交换关于由图5的记录器生成的数据保持期日志的信息的图1的机器和图1的存储装置。
21.图12示出根据公开的实施例的用于图1的存储装置处理具有保持期的数据的写入请求的示例过程的流程图。
22.图13a示出根据公开的实施例的用于图1的存储装置处理具有保持期的数据的写入请求的另一示例过程的流程图。
23.图13b继续根据公开的实施例的用于图1的存储装置处理具有保持期的数据的写入请求的另一示例过程的图13a的流程图。
24.图14示出根据公开的实施例的用于图3的闪存转换层向图3的闪存控制器发送请求以使用保持期对数据进行编程的示例过程的流程图。
25.图15示出根据公开的实施例的用于图5的缓冲器缓存数据直到图5的缓冲器存储足够的数据以填充图1的存储装置中的块的示例过程的流程图。
26.图16示出根据公开的实施例的用于图5的闪存转换层确定数据的保持期的不同方式的示例过程的流程图。
27.图17a示出根据公开的实施例的用于确定是否更新图1的存储装置中的数据的保持期的示例过程的流程图。
28.图17b继续根据公开的实施例的用于确定是否更新图1的存储装置中的数据的保持期的示例过程的图17a的流程图。
29.图18示出根据公开的实施例的用于图1的存储装置跟踪图1的存储装置中的数据的保持期的延期的示例过程的流程图。
30.图19示出根据公开的实施例的用于图1的主机得知数据被图1的存储装置无效的示例过程的流程图。
31.图20示出根据公开的实施例的用于图1的存储装置处理具有保持期的数据的读取请求的示例过程的流程图。
32.图21示出根据公开的实施例的进一步详细描述图20中所示的示例过程的流程图的示例过程的流程图。
33.图22示出根据公开的实施例的用于图1的存储装置处理对图11的数据保持期日志的请求的示例过程的流程图。
具体实施方式
34.现在将详细参考公开的实施例,其示例在附图中示出。在以下详细描述中,阐述了许多具体细节以使得能够透彻理解公开。然而,应当理解,本领域普通技术人员可在没有这些具体细节的情况下实践公开。在其他情况下,没有详细描述公知的方法、过程、组件、电路和网络,以免不必要地模糊实施例的各方面。
35.将理解,尽管在此可使用术语第一、第二等来描述各种元件,但是这些元件不应受这些术语的限制。这些术语仅用于将一个元件与另一个元件区分开。例如,在不脱离公开的范围的情况下,第一模块可被称为第二模块,并且类似地,第二模块可被称为第一模块。
36.公开的描述中使用的术语在此仅用于描述特定实施例的目的,并不旨在限制公开。如在公开的描述和所附权利要求中所使用的,除非上下文另有明确说明,否则单数形式旨在也包括复数形式。还将理解,如在此所使用的术语“和/或”是指并且涵盖相关联的所列项目中的一个或多个的任何和所有可能的组合。将进一步理解,术语“包括”和/或“包含”在本说明书中被使用时,指定陈述的特征、整体、步骤、操作、元件和/或组件的存在,但不排除存在或添加一个或多个其他特征、整体、步骤、操作、元件、组件和/或它们的组。附图的组件和特征不必按比例绘制。
37.许多应用在写入存储装置时知道数据的保持时间(精确的或近似的),其可以以小时或天(以及其他可能性)来度量。例如,一些应用消息可在24小时后被自动擦除,或者垃圾邮件可在1个月后被删除。在没有从应用接收到这样的信息的情况下,存储装置可能执行不必要的数据移动、冗余垃圾收集操作以及更长的数据处理和编程时间。这些操作可能影响存储装置的性能。
38.公开的实施例支持为将要写入存储装置的数据指定数据保持期的应用。然后,存储装置可使用该信息来对数据进行编程:例如,对数据与预期在大约相同时间被无效的其他数据一起进行编程。然后,当保持期期满时,存储装置可自动使数据无效,而不是管理存储以保持数据可用于应用。
39.公开的实施例还可包括指定延期数量(即,延期次数)的应用。如果指定了延期数量,则存储装置可自动更新数据的数据保持期,直到已经使用了所有延期为止,之后可自动使数据无效。更新数据保持期可涉及将数据编程到存储装置中的另一位置中。
40.图1示出根据公开的实施例的包括用于支持字典解码的加速器的系统。在图1中,机器105(其也可被称为主机)可包括处理器110、存储器115和存储装置120。处理器110可是任何种类的处理器。(为了便于说明,下面讨论的处理器110连同其他组件被显示在机器外
部:公开的实施例可包括机器内的这些组件。)虽然图1示出单个处理器110,但是机器105可包括任何数量的处理器,每个处理器可是单核处理器或多核处理器,每个处理器可实现精简指令集计算机(risc)架构或复杂指令集计算机(cisc)架构(以及其他可能性),并且可以以任何期望的组合被混合。
41.处理器110可结合到存储器115。存储器115可为任何类型的存储器,诸如,闪存、动态随机存取存储器(dram)、静态随机存取存储器(sram)、永久随机存取存储器、铁电随机存取存储器(fram)或非易失性随机存取存储器(nvram)(诸如,磁阻随机存取存储器(mram)等)。存储器115也可为不同存储器类型的任何期望组合,且可由存储器控制器125管理。存储器115可用于存储可被称为“短期”数据的数据:即,不期望被存储长达延期的时间段的数据。短期数据的示例可包括临时文件、由应用本地使用的数据(其可能已经从其他存储位置被复制)等。
42.处理器110和存储器115还可支持操作系统,各种应用可在操作系统下运行。这些应用可发出从存储器115或存储装置120读取数据或将数据写入存储器115或存储装置120的请求(其也可被称为命令)。可使用装置驱动器130来访问存储装置120。虽然图1使用通用术语“存储装置”,但是公开的实施例可包括可受益于数据质量度量的使用的任何存储装置形式,存储装置的示例可包括硬盘驱动器和固态驱动器(ssd)。以下对“ssd”的任何引用应当被理解为包括公开的这样的其他实施例。另外,虽然图1示出一个存储装置120,但是公开的实施例可包括任何数量(一个或多个)的存储装置。
43.图2示出根据公开的实施例的图1的机器105的细节。在图2中,通常,机器105包括一个或多个处理器110,处理器110可包括可用于协调机器的组件的操作的时钟205和存储器控制器125。处理器110还可结合到存储器115,作为示例,存储器115可包括随机存取存储器(ram)、只读存储器(rom)或其他状态保持介质。处理器110还可结合到存储装置120和网络连接器210,网络连接器210可是例如以太网连接器或无线连接器。处理器110还可连接到总线215,用户接口220和可使用输入/输出(i/o)引擎225管理的i/o接口端口以及其他组件可附接到总线215。
44.图3示出根据公开的实施例的支持字典解码的固态驱动器(ssd)。在图3中,ssd 120可包括接口305。接口305可是用于将ssd 120连接到图1的机器105的接口。ssd 120可包括多于一个接口305:例如,一个接口可用于基于块的读取和写入请求,并且另一个接口可用于键值读取和写入请求。尽管图3建议接口305是图1的ssd 120与机器105之间的物理连接,但是接口305还可表示可跨公共物理接口使用的协议差异。例如,ssd 120可使用u.2或m.2连接器连接到机器105,但是可支持基于块的请求和键值请求:处理不同类型的请求可由不同的接口305执行。
45.ssd 120还可包括主机接口层310,主机接口层310可管理接口305。如果ssd 120包括多于一个接口305,则单个主机接口层310可管理所有接口,ssd 120可包括用于每个接口的主机接口层,或者其某种组合可被使用。
46.ssd 120还可包括ssd控制器315、各个通道320-1、320-2、320-3和320-4,各个闪存芯片325-1、325-2、325-3、325-4、325-5、325-6、325-7和325-8可沿着各个通道布置。ssd控制器315可管理沿着通道320-1至320-4向闪存芯片325-1至325-8发送读取请求和写入请求。尽管图3示出四个通道和八个闪存芯片,但是公开的实施例可包括任何数量(一个或多
个,没有限制)的包括任何数量(一个或多个,没有限制)的闪存芯片的通道。
47.在每个闪存芯片内,空间可被组织成块,块可被进一步细分为页并且可被分组为超级块。如图4中所示,闪存芯片可包括超级块405-1和405-2;超级块405-1可包括块410-1和410-2;并且块410-1可包括页415-1、415-2、415-3等。页通常是可在ssd上进行读取或写入的最小数据单位。页大小可根据需要变化:例如,页可是4kb的数据。如果要写入少于整页,则多余空间是“未使用的”。
48.尽管图4示出两个超级块405-1和405-2、超级块405-1中的两个块410-1和410-2、以及块410-1中的三个页415-1、415-2和415-3,但是公开的实施例可包括任何数量的超级块(一个或多个)而没有限制,每个超级块包括任何数量的块(一个或多个)而没有限制,并且每个块包括任何数量的页(一个或多个)而没有限制。此外,闪存芯片可不将数据组织成超级块,而仅组织成块和页。
49.返回到图3,尽管页可被写入和读取,但是ssd通常不允许数据被覆写:即,现有数据可不被新数据“就地”替换。相反,当要更新数据时,新数据被写入ssd上的新页,并且原始页被无效(标记为准备擦除)。因此,ssd页通常具有三种状态之一:空闲(准备被写入)、有效(包含有效数据)和无效(不再包含有效数据,但在擦除之前不可用)(这些状态的确切名称可变化)。
50.但是,尽管页可被单独地写入和读取,但是块是可被擦除的基本数据单位。也就是说,页无法被单独擦除:块中的所有页通常被同时擦除。例如,如果块包含256个页,那么同时擦除块中的所有256个页。这样的布置可能导致ssd的一些管理问题:如果选择仍然包含一些有效数据的块进行擦除,则在块可被擦除之前,可能需要将该有效数据复制到ssd上其他地方的空闲页。(在公开的一些实施例中,擦除单位可不同于块:例如,擦除单位可以是超级块,如上面所论述,超级块可以是多个块的集合。)
51.因为写入数据的单位与擦除数据的单位不同(页与块),如果ssd在擦除块之前等待直到块仅包含无效数据,则即使有效数据的量可能小于ssd的通告容量(advertised capacity),ssd实际上也可能耗尽可用存储空间。为了避免这样的情况,ssd控制器315可包括垃圾收集控制器(图3中未示出,但是下面参考图5进一步讨论)。垃圾收集的功能可以是:识别全部包含或几乎全部包含无效页的块,并释放这些块,使得可再次将有效数据写入其中。但是如果被选择用于垃圾收集的块包括有效数据,则该有效数据将被垃圾收集逻辑擦除(因为擦除单位是块,而不是页)。为了避免这样的数据丢失,垃圾收集逻辑可将来自这样的块的有效数据编程到其他块中。一旦数据已经被编程到新块中(并且将逻辑块地址(lba)映射到物理块地址(pba)的表被更新以反映数据的新位置),则可擦除块,从而将块中的页的状态返回到空闲状态。
52.在可不信任单元正确地保持数据之前,ssd还具有每个单元可被写入的有限次数。该次数通常被度量为单元经历的编程/擦除循环的数量的计数。通常,单元可支持的编程/擦除循环的数量表示ssd将在合理的时间段内保持可靠的功能:对于个人用户,用户可能由于存储容量不足而不是因为超过了可支持的编程/擦除循环的数量而更可能更换ssd。但是在企业环境中,数据可能被更频繁地写入和擦除,单元超过其可支持的编程/擦除循环的数量的风险可能更显著。
53.为了帮助抵消这种风险,ssd控制器315可采用磨损均衡控制器(图3中未示出)。损
耗均衡可涉及基于块的编程/擦除循环计数来选择数据块以对数据进行编程。通过选择具有较低编程/擦除循环计数的块来对新数据进行编程,ssd可以能够避免将一些块的编程/擦除循环计数增加到超过其可靠操作点。通过保持每个块的磨损水平尽可能接近,ssd可在更长的时间段内保持可靠。
54.ssd控制器315可包括闪存转换层(ftl)330(对于不使用闪存存储设备的存储装置,其可更通常称为转换层)和闪存控制器335(对于不使用闪存存储设备的存储装置,其可更通常称为控制器)。ftl 330可处理lba或其他逻辑id(标识符)(如图1的处理器110所使用的)与在闪存芯片325-1至325-8中数据被存储的物理块地址(pba)或其他物理地址的转换。ftl 330还可负责将数据从一个pba重新定位到另一个pba,如在执行垃圾收集和/或损耗均衡时可能发生。下面参考图5进一步讨论ftl 330。闪存控制器335可使用由ftl 330提供的信息来处理沿着通道320-1至320-4与闪存芯片325-1至325-8的实际通信。下面参考图10进一步讨论闪存控制器335。
55.图5示出根据公开的实施例的图3的ftl330的细节。在图5中,ftl 330可包括主机写入请求处置器(handler)505和主机读取请求处置器510。如描述符所暗示的,主机写入请求处置器505可处理从图1的主机105(或从相对于图1的主机105的本地或远程的其他主机)接收的写入请求(诸如,写入请求515),并且主机读取请求处置器510可处理来自图1的主机105(或来自相对于图1的主机105的本地或远程的其他主机)的读取请求(诸如,读取请求520)。
56.主机写入请求处置器505可包括提交队列525-1、525-2和525-3。每个提交队列525-1至525-3可用于具有不同的相关联的保持期的写入请求。因此,例如,提交队列525-1可用于具有1天的数据保持期的写入请求,提交队列525-2可用于具有1周的数据保持期的写入请求,提交队列525-3可用于具有1个月的数据保持期的写入请求,等等。也可使用其他数据保持期:例如,一年、大于一年、两周等。尽管图5示出三个提交队列525-1至525-3,但是公开的实施例可支持任何数量的提交队列,每个提交队列可与不同的保持期相关联。另外,提交队列525-1至525-3也可利用(leverage)技术。例如,每个提交队列525-1至525-3可与数据保持期和装置流id的组合相关联,从而允许流id和数据保持期被组合。
57.可使用保持期确定器530来确定特定写入请求的保持期。保持期确定器可以以多种不同的方式确定特定数据的保持期。在公开的一些实施例中,写入请求515可指定要应用于该写入请求中的数据的数据保持期。例如,其数据被保持不超过24小时的应用可指定1天的保持期作为写入请求515的一部分。在公开的其他实施例中,图1的存储装置120可包括默认保持期,默认保持期可应用于写入到图1的存储装置120的所有数据(除非另一个保持期被指定,诸如,通过被包括在写入请求515中)。在公开的其他实施例中,可识别写入请求515的属性,属性又继而用于确定数据的保持期。这样的属性的示例可包括lba的范围、命令标识符、命名空间标识符、流标识符、分区命名空间标识符、提交队列525-1至525-3的标识符、日期、时间、协议、媒体访问控制标识符、网络参数或存储装置参数等。例如,应用可具有分配给它的特定lba范围。ftl 330可将该lba范围中的任何lba映射到特定的保持期。具有不同lba范围的应用可具有不同的保持期。此外,不要求应用可仅具有与保持期相关联的一个lba范围:单个应用可具有多个lba范围,每个lba范围具有与它们相关联的不同保持期。(但是即使写入请求515包括具有相关联的保持期的lba范围中的地址,这样的指派也可被包括
在写入请求515中的特定保持期覆盖)。
58.保持期确定器530可以以任何期望的方式来实现。保持期确定器530可使用硬件(诸如,中央处理器(cpu)、图形处理器(gpu)、通用gpu(gpgpu)、现场可编程门阵列(fpga)或专用集成电路(asic)等)来实现。保持期确定器530还可被实现为可在图1的存储装置120内的处理器或一些等效硬件上运行的软件;当不处于活动使用中时(例如,如果图1的存储装置120断电),实现保持期确定器530的部分或全部的任何软件可被保持在某处的存储设备中:例如,在ftl 330内的专用存储设备中、在图3的闪存芯片325-1至325-8内、或者作为某种形式的rom(包括可编程rom(prom)、可擦除prom(eprom)和电可擦除prom(eeprom)等)内的固件。
59.在公开的一些实施例中,在将写入请求放置在提交队列525-1至525-3之一中之后,可尽可能快地将数据写入图3的闪存芯片325-1至325-8,其中每个写入请求具有存储在图1的存储装置120中的一个(或多个)页中的数据。但是在公开的其他实施例中,可能期望以块为单位写入数据。通过一次写入整个块,写入到块的所有数据可具有相同的保持期并且可同时被处理。该方法可帮助最小化垃圾收集的影响:在块中的所有数据被一次无效的情况下,将不存在将需要编程作为垃圾收集的一部分的数据。
60.为了存储数据直到块已满,ftl330可包括缓冲器535。缓冲器535可临时存储提交队列525-1至525-3的数据,直到给定的提交队列具有足够的数据来填充块。此时,该提交队列的将填充块的所有数据然后可被写入图3的闪存芯片325-1至325-8,并且该数据可从缓冲器535清除。注意,该事实还意味着存储装置120中的单个块可存储来自两个(或更多个)不同写入请求515的数据:实际上,单个块可存储来自两个或更多个写入请求515的数据可是真的,无论缓冲器535是否用于一次写入完整块。
61.在公开的一些实施例中,ftl330可包括单个缓冲器535。在公开的这样的实施例中,缓冲器535可包括相当于(或多于)每个提交队列525-1至525-3一个块的足够的存储。在公开的其他实施例中,ftl330可包括多个缓冲器535,一个缓冲器用于提交队列525-1至525-3中的每一个。在公开的其他实施例中,这些选项可被混合:例如,提交队列525-1可具有用于其数据的一个缓冲器535,而提交队列525-2和525-3可共享另一个缓冲器535。
62.ftl330可基于数据的保持期来选择数据的物理地址,这就是为什么可能期望使用多个提交队列525-1至525-3。通过使用多个提交队列,具有相同保持期的数据可被编程到图3的闪存芯片325-1至325-8中的相同块中,这可使得块中的所有数据能够同时被无效。通过同时使块中的所有数据无效,可避免在垃圾收集期间对来自块的数据进行编程,这可帮助减小写入放大因子。但是注意,如果ftl330可以以某种其他方式跟踪数据的保持期,则ftl330可在不使用多个提交队列525-1至525-3的情况下选择数据的物理地址以实现该结果。
63.ftl330还可使用耗损均衡信息来尝试延期存储装置120的寿命。如上所讨论的,耗损均衡可尝试将数据放置在块中以防止块快速超过其有保障编程/擦除循环的最大数量。除了将数据放置在具有较低编程/擦除循环计数的块中之外,ftl 330还可尝试基于数据保持期来优化数据放置。将数据放置在具有低编程/擦除循环计数还是高编程/擦除循环计数的块中可涉及平衡因素。当故障可能具有越高的概率时,具有越高编程/擦除循环计数的块可能更接近它们的“寿命终止”,这表明以越长的预期保持放置数据将是优选的。但是具有
越高编程/擦除循环计数的块也可能更有可能遭受如果数据被存储越长时间段则可能发生的错误。
64.一种解决方案是识别阈值。对于其编程/擦除循环计数未超过此阈值的块,可基于损耗均衡考虑来存储数据:即,具有相对越高编程/擦除循环计数(但小于阈值)的块可用于存储具有越长的预期数据保持期的数据。但是对于其编程/擦除循环计数已经超过该阈值的块,可基于保持考虑来存储数据:即,具有相对越高的编程/擦除循环计数(超过阈值)的块可用于存储具有越短的预期数据保持期的数据。以这样的方式,可考虑磨损均衡和准确数据保持两者的各种担忧。
65.阈值可是固定数量(例如,50000次编程/擦除循环)、块预期支持的编程/擦除循环的数量的百分比(例如,50%)、或块预期支持的剩余编程/擦除循环的数量的百分比(例如,50%)与已经经历的编程/擦除循环的数量之和。考虑到存储装置上的其他块所经历的编程/擦除循环的数量,阈值也可以是可变的。因此,例如,如果预期存储装置中的块在可预期到错误之前经历100000次编程/擦除循环,则如果所有块都是大约75000次编程/擦除循环,则可能预期块都处于大致相等的状态,因此阈值可被设置为存储装置中的平均剩余编程/擦除循环的50%:在该示例中,75000+1/2
×
(100000-75000)=87500。
66.图1的存储装置120可被设计成满足数据保持的特定标准。例如,图1的存储装置120可满足要求数据在写入后一年、或五年、或10年可获取的标准。为了满足这些标准,图1的存储装置120可总是竭尽所能地对数据进行编码,并且可尽可能仔细地将数据编程到图3的闪存芯片325-1至325-8中。但是对于不期望被保持那么长时间的数据,图1的存储装置120可能没有必要采取这样的措施来确保数据可靠性。通过ftl 330和闪存控制器335,图1的存储装置120可被设计为在选择如何对数据进行编程时利用数据的保持期,以减少在数据不被预期保持到由图1的存储装置120支持的最大保持的情况下使用的工作量(功率、时间和带宽)。
67.利用数据保持期的一种方式是通过基于数据的预期保持期来选择纠错码(ecc)模式。例如,图1的存储装置120可实现两种或更多种不同的ecc模式。存储装置中使用的两种常见ecc模式包括博斯-乔赫里-霍克文黑姆(bose-chaudhuri-hocquenghem,bch)和低密度奇偶校验(ldpc),但是也可使用其他ecc模式。不同的ecc模式可具有不同的功率要求,涉及不同的带宽(其表示在存储装置120内部的各种总线上发送的数据量)和不同的延迟(其表示使用ecc模式对数据进行编码和/或解码所需的时间),以及不同的支持的恢复水平。例如,ldpc通常比bch需要更多的功率来实现,并且可能比bch花费更长的时间来对数据进行编码和解码。但是ldpc还可允许比bch恢复更多的错误,并且因此可支持数据的更长时间可靠性。因此,ldpc可以是用于对预期被保持更长时间段的数据进行编码的更期望的选择。
68.ecc选择器540可用于基于数据的保持期来选择数据的ecc模式。因此,在保持期确定器530已经确定了数据的保持期之后,ecc选择器540可使用该信息来选择数据的ecc模式。闪存控制器335然后可在将数据编程在图3的闪存芯片325-1至325-8中的指定位置中之前使用选择的ecc模式对数据进行编码。
69.ecc选择器540可以以任何期望的方式选择ecc模式。例如,ecc选择器540可包括表545,表545可将特定保持期映射到目标ecc模式。ecc选择器540还可使用其他技术来基于保持期选择ecc模式:例如,ecc选择器540可实现可(更一般地)将保持期映射到特定值的功
能,该特定值可指示要使用的ecc模式。还要注意,在公开的一些实施例中,即使图1的存储装置120可支持ecc,也可在没有编码的情况下对数据进行编程:即,即使可用,也可跳过ecc。
70.利用数据保持期的另一种方式是为数据选择编程步进电压(programming step voltage)。闪存芯片325-1至325-8可支持两个或更多个不同的编程步进电压。在将数据编程到闪存芯片325-1至325-8中时,闪存控制器335可将单元中的电压增加步进电压(其可表示为δv),直到单元中的电压满足或超过目标电压(其可表示存储在单元中的值)。越小的编程步进电压可实现更精确的数据存储,这可意味着数据可被可靠地存储更长的时间段。另一方面,越小的编程步进电压可花费更长时间来将值编程到单元中。例如,如果较大的δv是较小的δv的两倍,则可预期:使用较小的δv将需要大约两倍长的时间来将值编程到单元中。因此,编程步进电压的选择可涉及精度(和可靠性)与速度之间的权衡。对于预期保持越长时间段的数据,可期望越小的编程步进电压,而越大的编程步进电压可用于被预期越快地无效的数据。
71.编程步进电压选择器550可用于基于数据的保持期来选择数据的编程步进电压。因此,在保持期确定器530已经确定了数据的保持期之后,编程步进电压选择器550可使用该信息来选择数据的编程步进电压。闪存控制器335然后可使用选择的编程步进电压将数据编程到图3的闪存芯片325-1至325-8中。
72.编程步进电压选择器550可以以任何期望的方式选择编程步进电压。例如,编程步进电压选择器550可包括表545,表545可将特定保持期映射到目标编程步进电压。编程步进电压选择器550还可使用其他技术来基于保持期选择编程步进电压:例如,编程步进电压选择器550可实现可(更一般地)将保持期映射到特定值的功能,该特定值可指示要使用的编程步进电压。
73.注意,图5示出用于ecc选择器540和编程步进电压选择器550两者的表545。在公开的一些实施例中,ecc选择器540和编程步进电压选择器550可共享表545(因为两者都将保持期映射到要在将数据编程到图3的闪存芯片325-1至325-8中时使用的某个值)。在公开的其他实施例中,ecc选择器540和编程步进电压选择器550可各自具有它们自己的表545。在公开的其他实施例中,ecc选择器540和编程步进电压选择器550可被实现为一个模块(而不是如所示的那样分开地实现)。在公开的其他实施例中,表545可存储在其他地方,而不是作为ecc选择器540和/或编程步进电压选择器550的一部分。其他组合也是可能的,并且被认为是公开的实施例。下面参考图9进一步讨论表545及其变型。
74.类似于保持期确定器530,ecc选择器540和/或编程步进电压选择器550可使用硬件(诸如,cpu、gpu、gpgpu、fpga或asic等)来实现。ecc选择器540和/或编程步进电压选择器550还可被实现为可在图1的存储装置120内的处理器或一些等效硬件上运行的软件;当不处于活动使用中时(例如,如果图1的存储装置120被断电),实现保持期确定器530的部分或全部的任何软件可被保持在某处的存储设备中:例如,在ftl330内的专用存储设备中、在图3的闪存芯片325-1至325-8内、或者作为某种形式的rom(包括prom、eprom和eeprom等)内的固件。由于ftl330可进行操作以使用保持期而不必利用ecc或编程步进电压的选择,因此可省略ecc选择器540和/或编程步进电压选择器550。
75.一旦已经确定了数据的物理地址、ecc模式和/或编程步进电压,主机写入请求处
置器505就可将该信息(连同数据)提供给闪存控制器335。闪存控制器335然后可根据该信息将数据编程到闪存芯片325-1至325-8中。闪存控制器335然后可返回编程操作的结果,该结果可由主机写入请求处置器505返回给图1的主机105。下面参考图10进一步讨论闪存控制器335的操作。
76.在公开的一些实施例中,一旦保持期已经期满,数据就可被图1的存储装置120自动无效。但是在公开的其他实施例中,数据还可具有相关联数量的延期。当保持期期满时,不是自动使数据无效,而是可更新保持期,直到与数据相关联的延期数量(即,延期次数)。保持期确定器530可以以类似于保持期确定器530如何确定保持期的方式来确定延期数量。以这样的方式,应用可指定数据的期望保持期,但也确保数据不会在保持期期满时立即被无效(在应用低估数据将被需要多长时间的情况下)。
77.更新保持期可仅涉及针对数据的保持进行“重置时钟”。但是在公开的一些实施例中,更新保持期可涉及将数据重新编程到新选择的块(由ftl 330以与原始块选择相同的方式选择)中。当更新保持期时数据可被重新编程的原因至少有两个。首先,仅因为块中的一个数据使其保持期被更新并不自动意味着块中的每个数据将使其保持期被更新。如果数据留在原处,那么如果该块经受垃圾收集,则无论如何可将数据编程到新块。通过在更新保持期时对数据进行重新编程,ftl 330可确信数据与具有相同保持期的其他数据一起被放置在块中,同时还确保当块经受垃圾收集时,在块中可没有剩余的有效数据(其可能需要编程)。第二,如上所讨论的,取决于使用的ecc模式和编程步进电压,数据的可靠性可小于图1的储存装置120可能够支持的最大可靠性。换句话说,数据可以已经以确保数据保持期的可靠性(但不一定更长)的方式被编程到图3的闪存芯片325-1至325-8中。将数据留在原处可能导致数据在下一次被应用请求时不可读。将数据重新编程到新块中可有助于确保数据在(更新的)保持期的持续时间内继续可读。
78.延期跟踪器555可处理这些职责。延期跟踪器555可确定特定保持期何时被调度为期满(如果数据一次一个块地被写入图3的闪存芯片325-1至325-8,则这将意味着块中的所有数据被调度为期满)。延期跟踪器555可预先确定数据的期满时间(因为在将数据编程到图3的闪存芯片325-1至325-8中之前应该知道保持期),并且可调度何时检查数据以进行无效或重新编程(取决于是否存在任何剩余的延期次数)。如果更新保持期,则延期跟踪器555可更新关于还可更新保持期多少次的信息(或者可选地,可跟踪剩余多少次延期以更新保持期)。对于其保持期将被更新的数据,延期跟踪器555(可能与主机写入请求处置器505组合)可像来自主机的新写入请求那样对待数据;或者,延期跟踪器555可简单地调整剩余的延期次数或所使用的延期数量,为数据选择适当的新块,并且指示闪存控制器335对数据进行重新编程(或者可选地,将数据从其原始物理地址复制到其新物理地址,这可避免对数据进行解码和重新编码)。
79.如上所述,在一些情况下(特别是在保持期已经期满并且没有指定的或剩余的延期的情况下),延期跟踪器555可指示闪存控制器335使数据无效。因为这样的数据无效可在没有应用请求无效的情况下发生,所以应用可能不知道数据已经被无效。(该构思可与数据将被图1的存储装置120自动无效的抽象知识形成对比:应用可知道数据将在某个点被无效,但是可能不知道何时已经发生无效。)延期跟踪器555可使用记录器560来记录数据已经被无效。记录器560可在数据保持期日志中记录数据的无效(其可使用如由应用指定的数据
的逻辑地址来记录)。
80.一旦数据已经被无效,延期跟踪器就可更新逻辑到物理映射表565以反映数据不再有效。下面参考图8进一步讨论逻辑到物理映射表565。
81.因此,如果应用试图读取数据并且被通知未到数据(错误状况),则图1的主机105可请求数据保持期日志。对数据保持期日志的查看可示出数据由于保持期(以及任何可能的延期)的期满而被无效。以这样的方式,图1的主机105可区分由自动数据无效引起的读取错误和由于可能与底层硬件(例如,不存储或返回原始值的单元)相关的问题引起的读取错误。
82.关于保持期和延期两者的使用可能产生问题。具有三次延期的一周的保持期在时间上不等于四周的保持期吗?答案是,在数据的总体可能保持方面,无论哪种方式都是相同的,但是在数据如何被编程以及垃圾收集可能如何被影响方面可存在差异。
83.首先,考虑:与具有四周的相关联的保持期的数据相比,具有一周的相关联的保持期的数据可使用更低功耗的ecc模式和/或更大的编程步进电压来编程。换言之,通过指定更短的数据保持期,即使具有延期,在对具有一周的保持期的数据进行编程时所消耗的功率和所花费的时间可小于在对具有四周的保持期的数据进行编程时所消耗的功率或所花费的时间。事实是,如果保持期被延期,则这可能被对数据进行重新编程的需要所抵消。但是,如果保持期是应用实际想要将数据存储在存储装置120上多长时间的准确度量,则逻辑结论是数据在一周左右比在四周左右更可能被无效。换句话说,延期时段的使用充当腰带和被带(belt-and-suspenders)方法,防止(希望偶尔)需要将数据保持得比预期更长。如果数据被编程到具有四周保持期的块中,并且然后在仅一周之后被无效,则如果块被选择用于垃圾收集,那么块可能更有可能具有需要被编程的数据。
84.暂时转到图6,可看到写入请求515中包括的信息。写入请求515可包括数据605,数据605可以是要写入图1的存储装置120的数据。写入请求515还可包括逻辑地址610,逻辑地址610可以是由图1的主机105用来标识数据的逻辑地址。(逻辑地址610可与数据实际存储在图1的存储装置120中的物理地址区分开。)
85.如上所讨论的,可确定数据605的保持期(和/或延期数量)的一种方式是通过将这样的信息包括在写入请求515中。也就是说,写入请求515可包括可指定保持期615和/或延期数量620的字段。但是如果以其他方式确定数据保持期,则写入请求515可省略保持期615和/或延期数量620。
86.返回图5,类似于延期跟踪器555,垃圾收集控制器570也可非常像延期跟踪器555那样被调度。如果可预期在特定时间使块无效(并且回想一下,即使由于延期时段要保持数据,该数据也将被重新编程以确保数据可靠性),则当保持期期满时,可预期该块没有有效数据。因此,垃圾收集控制器570可使用该构思来调度何时可发生垃圾收集,目标是在块将没有有效数据时的时间。
87.可能发生的是,垃圾收集逻辑可选择用于垃圾收集的块,该块用于存储具有分配的保持期的数据。例如,对于具有一个月的保持期的特定块,数据的大部分可能被将该数据写入图1的存储装置120的应用手动无效,留下将是垃圾收集的良好候选者的块。在这种情况下,垃圾收集逻辑可尝试确定数据的保持期(其可从逻辑到物理映射表565中获取,下面参考图8进一步讨论),并且可尝试将数据编程到具有类似保持期的块中。以这种方式,希望
可避免数据碎片(基于保持期)。
88.如上所讨论的,图1的主机105可适用于具有图6的逻辑地址610的图6的数据605。但是图6的逻辑地址610可能不一定与在存储装置120上实际存储数据的物理地址相关。事实上,图6的逻辑地址610甚至可能不是图1的存储装置120上的合法地址(例如,图6的逻辑地址610如果被视为物理地址,则可能是通常不可由应用寻址的存储装置120的引导部分中的地址)。此外,如果图6的数据605最终被重新编程(由于保持期的更新或垃圾收集),则物理地址可改变。因此,ftl 330可包括逻辑到物理映射表565。逻辑到物理映射表565可存储关于图6的数据605的位置的信息(如由图1的主机105使用的图6的逻辑地址610、在图1的存储装置120中存储数据的物理地址)以及关于图6的数据605的其他相关信息(例如,图6的保持期615)。当图3的ftl 330从图1的主机105接收到写入请求515并且将图6的数据605编程到图3的闪存芯片325-1至325-8中时,ftl330可更新逻辑到物理映射表565以存储该信息。下面参考图8进一步讨论逻辑到物理映射表565。
89.逻辑到物理映射表565可存储在图1的存储装置120中的某处。在一些实施例中,图5的逻辑到物理映射表565可存储在存储设备575中。存储设备575可是非易失性存储设备(诸如,另一闪存或nvram),如果图1的存储装置120关闭(正常或异常),则该非易失性存储设备防止任何信息丢失。可选地,存储设备575可以是易失性存储设备:为了防止数据丢失,逻辑到物理映射表565可被镜像到图3的闪存芯片325-1至325-8。最后,存储设备575可以是图3的闪存芯片325-1至325-8上的区域,而不是单独的存储设备。
90.注意,存储设备575可用于存储不仅仅是逻辑到物理映射表565。例如,存储设备575还可存储将保持期映射到目标ecc模式和/或编程步进电压的表545。
91.之前,涉及读取请求的处理,因为如果数据已经被无效,则读取请求520可能导致错误。现在可讨论主机读取请求处置器510的操作。如图7中所示,读取请求520可包括逻辑地址610。由于读取请求520是图1的存储装置120向应用返回数据的请求,因此可从读取请求520省略图6中所示的其他元素。(这不是说读取请求仅由逻辑地址610组成;但是读取请求520可省略图6的数据605、图6的保持期615和/或图6的延期数量620。)
92.返回到图5,主机读取请求处置器510可从图1的主机105接收读取请求520。使用逻辑地址610,主机读取请求处置器510可从逻辑到物理映射表565确定存储数据的物理地址。主机读取请求处置器510还可从逻辑到物理映射表565确定用于对数据进行编码的ecc模式。主机读取请求处置器510然后可将该信息提供给闪存控制器335,闪存控制器335然后可从图3的闪存芯片325-1至325-8读取数据,对数据进行解码(视情况而定),并且将数据返回给主机读取请求处置器510,主机读取请求处置器510然后可将数据返回给图1的主机105。
93.如上所述,在一些情况下,读取请求520可能请求已经被无效的数据。在这种情况下,主机读取请求处置器510可直接返回错误(如果逻辑到物理映射表565不具有图7的逻辑地址610的条目)。可选地,主机读取请求处置器510可向闪存控制器335发送从物理地址读取数据的请求;闪存控制器335可确定数据已经被无效,并且可将错误返回给主机读取请求处置器510,该错误可被转发到图1的主机105。如上所讨论的,在读取请求520导致错误的情况下,图1的主机105可请求数据保持期日志,以查看数据是否被自动无效。
94.图8示出根据公开的实施例的图5的逻辑到物理映射表565的细节。在图8中,逻辑到物理映射表565被示出为包括七列和五行(不计入具有列名的行)。取决于图1的存储装置
120中的数据存储的量,公开的实施例可具有包括任何数量(零个或更多个)的行的逻辑到物理映射表565。公开的实施例还可改变逻辑到物理映射表565中的列数:不同的实施例可包括比图8中所示的信息更少的信息和/或图8中未示出的附加信息。
95.逻辑到物理映射表565中的每个行可包括各种字段,诸如,逻辑地址610、物理地址805、保持期615、延期数量620、ecc模式810、编程步进电压815及刷新次数820。逻辑地址610可以是由图1的主机105使用的数据的逻辑地址。物理地址805可以是在图1的存储装置120中存储数据的物理地址。保持期615可以是与逻辑地址610相关联的数据的保持期,并且可由图5的保持期确定器530确定。延期数量620可是与逻辑地址610相关联的数据的保持期的延期数量,并且可由图5的保持期确定器530确定。ecc模式810可标识由图5的ecc选择器540为与逻辑地址610相关联的数据选择的ecc模式。编程步进电压815可识别由图5的编程步进电压选择器550为与逻辑地址610相关联的数据选择的编程步进电压。最后,刷新次数820可标识数据已被刷新的次数(并且其可与延期数量620进行比较,延期数量620可表示刷新次数820的上限)。
96.注意,逻辑到物理映射表565中的数据中的一些可从图5的写入请求515确定,并且一些数据可由图3的ftl 330填充。例如,可从图5的写入请求515访问逻辑地址610、保持期615和延期数量620,而物理地址805、ecc模式810、编程步进电压815和刷新次数820可由图3的ftl 330填充。(当然,取决于如何使用图1的存储装置120,保持期615和/或延期数量620也可由图3的ftl330填充。)逻辑到物理映射表565中的信息提供了数据如何被存储在图1的存储装置120中的情景,其支持以下两者:当由图1的主机105在图5的读取请求520中请求时对数据的获取;以及当由图5的延期跟踪器555指示时对数据的重新编程。
97.图9示出根据公开的实施例的图5的存储关于如何根据保持期对数据进行编程的信息的表545的细节。在图9中,示出一个表545,其将保持期映射到ecc模式和编程步进电压两者。如上所讨论的,公开的实施例可包括用于将保持期映射到ecc模式和映射到编程步进电压的分开的表。另外,如果数据如何被编程到图3的闪存芯片325-1至325-8中有其他变化,则表545可被扩充以包括这样的附加信息,或者排除未被图1的存储装置120使用的信息。取决于图1的存储装置120支持的不同保持期的数量,公开的实施例可具有包括任何数量(零个或更多个)的行的表545。
98.表545中的每个行可包括各种字段,诸如,保持期615、ecc模式810及编程步进电压815。保持期615可标识由图1的存储装置120支持的保持期。ecc模式810可标识在利用保持期615对数据进行编程时要使用的ecc模式。编程步进电压815可标识在利用保持期615对数据进行编程时要使用的编程步进电压。因此,在图5的保持期确定器530确定要用于图5的写入请求515中的图6的数据605的保持期之后,表545可被图5的ecc选择器540和/或图5的编程步进电压选择器550访问,以确定适当的ecc模式和/或编程步进电压,以用于将图6的数据605编程到图3的闪存芯片325-1至325-8中。
99.图10示出根据公开的实施例的图3的闪存控制器335的细节。在图10中,闪存控制器335可从ftl 330接收请求。(示出从ftl 330到闪存控制器335的两条路径,以镜像如图5所示的从ftl 330到闪存控制器335的两条路径(一条用于写入数据,一条用于读取数据)。)闪存命令接口1005可接收这些请求。由于写入数据和读取数据涉及不同的处理,因此将分别讨论它们。
100.如上面参考图5所讨论的,当数据被写入图1的存储装置120时,由闪存控制器335接收的编程请求可包括数据和要写入数据的物理地址。在公开的一些实施例中,这些请求还可包括用于对数据进行编码的ecc模式和/或用于对数据进行编程的编程步进电压。
101.闪存命令接口1005可从编程请求中识别要使用的ecc模式,然后可使用ecc编码器/解码器1010-1或1010-2来对数据进行编码(产生编码数据)。尽管图10示出两个ecc编码器/解码器1010-1和1010-2,但是公开的实施例可包括任何数量(零个或更多个)的ecc编码器/解码器。
102.一旦数据已经被编码,则编码数据(或原始数据,如果数据未被编码的话)、数据要被编程的物理地址以及编程步进电压(如果使用的话)可被传送到闪存接口1015。闪存接口1015可负责与裸片(die)1020-1和/或1020-2进行接口连接,以按指示对数据进行编程。虽然图10示出两个裸片1020-1和1020-2,但是公开的实施例可包括其中可对数据进行编程的任何数量(一个或多个)的裸片。
103.一旦闪存接口1015已经完成将数据编程到裸片1020-1和/或1020-2中,闪存接口就可将编程操作的结果返回给闪存命令接口1005,闪存命令接口1005可将结果返回给ftl 330。
104.另一方面,如上面参考图5所讨论的,当要从图1的存储装置120读取数据时,由闪存控制器335接收的编程请求可包括要从其读取数据的物理地址。在公开的一些实施例中,这些请求还可包括用于对数据进行解码的ecc模式。闪存命令接口1005可将物理地址传递到闪存接口1015以从裸片1020-1和/或1020-2读取数据。该数据(其可被编码)可由闪存接口1015返回。
105.闪存命令接口1005可从读取请求中识别要使用的ecc模式,然后可使用ecc编码器/解码器1010-1或1010-2来对编码数据进行解码(产生原始数据)。尽管图10示出两个ecc编码器/解码器1010-1和1010-2,但是公开的实施例可包括任何数量(零个或更多个)的ecc编码器/解码器。闪存命令接口1005然后可将未编码的数据返回给ftl 330,ftl 330可将数据返回给图1的主机105。
106.如果由于某种原因,数据在读取请求被处理之前已经被无效,则闪存接口1015可返回错误(因为数据可能不可用)。在这种情况下,闪存命令接口1005可将错误返回给ftl 330,ftl 330可继而将错误返回给图1的主机105。
107.图11示出根据公开的实施例的交换关于由图5的记录器560生成的数据保持期日志的信息的图1的机器105和图1的存储装置120。在图11中,主机105可向存储装置120发送读取请求520。如果数据已经被无效(如上面参考图5所讨论的,即使没有应用发出使数据无效的请求,这也可能发生),则读取请求520可导致读取错误1105,读取错误1105可被返回给主机105。主机105然后可向存储装置120发送数据保持期日志请求1110:存储装置120然后可用数据保持期日志响应1115进行响应,数据保持期日志响应1115可包括数据保持期日志1120。主机105然后可使用数据保持期日志1120确定:数据由于保持期期满而自动无效(与可指示存储装置120的问题的一些其他错误相反)。
108.图12示出根据公开的实施例的用于图1的存储装置120处理具有图6的保持期615的图6的数据605的图5的写入请求515的示例过程的流程图。在图12中,在框1205,图1的存储装置120可从图1的主机105接收图5的写入请求515。图5的写入请求515可包括图6的数据
605和图6的逻辑地址610(如图1的主机105所指定的)。在框1210,图5的保持期确定器530可确定与图5的写入请求515相关联的图6的保持期615。如上面参考图5所讨论的,图6的保持期615可与图5的写入请求515包括在一起,图6的保持期615可基于图5的写入请求515的一些属性来确定,或者图6的保持期615可是图1的存储装置120的默认保持期。
109.在框1215,图3的ftl 330可选择图8的物理地址805,在图1的存储装置120中图6的数据605将被编程在物理地址805。图3的ftl 330对图8的物理地址805的选择可至少部分地基于图6的保持期615。在框1220,图3的ftl 330(或图5的主机写入请求处置器505)可更新图5的逻辑到物理映射表565以存储图6的逻辑地址610、图8的物理地址805和图6的保持期615。最后,在框1225,图3的闪存控制器335可将图6的数据605编程到图1的存储装置120中的图8的物理地址805中。
110.图13a和图13b示出根据公开的实施例的用于图1的存储装置120处理具有图6的保持期615的图6的数据605的图5的写入请求515的另一示例过程的流程图。图13a和图13b类似于图12,但是更一般并且具有一些附加框。在图13a中,在框1305,图1的存储装置120可从图1的主机105接收配置命令。配置命令可使主机能够管理图1的存储装置120内的保持期的使用。例如,图1的主机105可使用配置命令来获知图1的存储装置120是否支持数据保持期,并且在图1的存储装置120内针对每个i/o请求启用或禁用数据保持期的使用。图1的主机105可使用配置命令来为发送到图1的存储装置120的写入请求建立默认保持期和/或默认延期数量。图1的主机105可使用配置命令来建立写入请求的属性(诸如,lba的范围、命令标识符、命名空间标识符、流标识符、分区命名空间标识符、图5的提交队列525-1至525-3的标识符、日期、时间、协议、媒体访问控制标识符、网络参数或存储装置参数),以及指示那些各种属性可如何与不同的保持期和/或延期数量相关联。最后,图1的主机105可使用配置命令来从图1的存储装置120获取图11的数据保持期日志1120,以确定读取错误是由于数据被自动无效还是一些其他原因。
111.在框1205,图1的存储装置120可从图1的主机105接收图5的写入请求515。图5的写入请求515可包括图6的数据605和图6的逻辑地址610(如图1的主机105所指定的)。图5的写入请求515还可包括图6的保持期615和/或图6的延期数量620。在框1210,图5的保持期确定器530可确定与图5的写入请求515相关联的图6的保持期615。如上面参考图5所讨论的,图6的保持期615可与图5的写入请求515包括在一起,图6的保持期615可基于图5的写入请求515的一些属性来确定,或者图6的保持期615可是图1的存储装置120的默认保持期。在框1310,图5的主机写入请求处置器505可将图5的写入请求515放置在图5的提交队列525-1至525-3之一中。
112.在框1315,图5的保持期确定器530可确定图6的延期数量620。框1315可被省略,如虚线1320所示。在框1215,图3的ftl 330可选择图8的物理地址805,在图1的存储装置120中图6的数据605将被编程在物理地址805。图3的ftl 330对图8的物理地址805的选择可至少部分地基于图6的保持期615。
113.在框1325(图13b),图5的ecc选择器540可选择要在对图6的数据605进行编码时使用的图10的ecc编码器/解码器1010-1或1010-2。框1325可被省略,如虚线1330所示。在框1335,图5的编程步进电压选择器550可选择在将图6的数据605编程到图3的闪存芯片325-1至325-8中时要使用的编程步进电压。框1335可被省略,如虚线1340所示。
114.在框1220,图3的ftl 330(或图5的主机写入请求处置器505)可更新图5的逻辑到物理映射表565,以存储图6的逻辑地址610、图8的物理地址805和图6的保持期615。在使用图10的不同ecc编码器/解码器1010-1或1010-2或不同编程步进电压的公开的实施例中,图3的ftl 330(或图5的主机写入请求处置器505)还可更新图5的逻辑到物理映射表565,以存储图8的ecc模式810和/或图8的编程步进电压815。在框1225,图3的闪存控制器335可将图6的数据605编程到图1的存储装置120中的图8的物理地址805中。
115.在框1345,图5的垃圾收集控制器570可基于图6的保持期615被调度为运行。最后,在框1350,图3的闪存控制器335可返回编程操作的结果,并且图3的ftl 330可将图5的写入请求515的结果返回给图1的主机105。
116.图14示出根据公开的实施例的用于图3的ftl 330向图3的闪存控制器335发送请求以使用图6的保持期615对图6的数据605进行编程的示例过程的流程图。在图14中,在框1405,图3的ftl 330可向图3的闪存控制器335发送用于将数据编程到图3的闪存芯片325-1至325-8中的编程请求。在框1410,图3的闪存控制器335可使用图10的ecc编码器/解码器1010-1或1010-2来对数据进行编码。可省略框1410,如虚线1415所示。最后,在框1420,图3的闪存控制器335可将数据编程到图3的闪存芯片325-1至325-8中。
117.图15示出根据公开的实施例的图5的缓冲器535缓存数据直到图5的缓冲器535存储足够的数据来填充图1的存储装置120中的块的示例过程的流程图。在图15中,在框1505,图5的缓冲器535可缓冲在图5的写入请求515中接收的数据。在框1510,图5的缓冲器535可缓冲来自要被编程到相同块的图5的另一写入请求515的数据。在框1515,图3的ftl 330可进行检查以查看图5的缓冲器535是否包含足够的数据来填充块(至少,块的值得被编程到单个块中的数据:图5的缓冲器535可缓冲要写入到多个不同块的数据)。如果否,则控制返回到框1510以等待更多数据被存储在图5的缓冲器535中。
118.如果在图5的缓冲器535中存在足够的数据来填充特定块,则在框1520,图3的闪存控制器335可将来自图5的第一写入请求515的图6的数据605编程到目标块中,并且在框1525,图3的闪存控制器335可将来自图5的第二写入请求515的图6的数据605编程到目标块中。(如果存在来自其他写入请求的更多数据要被编程到目标块中,则还可执行与框1520和框1525类似的其他操作。)最后,在框1530,可清除图5的缓冲器535(至少,存储被编程到目标块中的数据的缓冲器535:如果图5的缓冲器535存储要被编程到其他块中的其他数据,则该数据可保持在图5的缓冲器535中)。
119.图16示出根据公开的实施例的用于图3的ftl330确定图6的数据605的图6的保持期615的不同方式的示例过程的流程图。在图16中,在框1605,图5的保持期确定器530可从图5的写入请求515访问图6的保持期615和/或延期数量。可选地,在框1610,图5的保持期确定器530可确定图5的写入请求515的属性,并且使用该属性来确定图6的保持期615和/或图6的延期数量620。可选地,在框1615,图5的保持期确定器530可访问图1的存储装置120的图6的默认延期数量620和/或图6的默认保持期615。注意,这些选项可混合:例如,保持期确定器可使用默认延期数量,但是从图5的写入请求515访问图6的保持期615。其他组合也是可行的。
120.图17a和图17b示出根据公开的实施例的用于确定是否为图1的存储装置120中的图6的数据605更新图6的保持期615的示例过程的流程图。在图17a中,在框1705,图5的延期
跟踪器555可调度检查,以确定图6的保持期615是否已经期满。在框1710,在调度时间到达时,图5的延期跟踪器555可进行检查以查看图6的保持期615是否已经期满。如果否,则处理可返回到框1705以稍后调度另一检查。
121.如果图6的保持期615已经期满,则在框1715,图5的延期跟踪器555可进行检查以查看是否存在任何剩余的延期。如果否,则在框1720,图3的闪存控制器335可使图6的数据605无效,并且在框1725,图5的记录器560可将数据的无效记录在图11的数据保持期日志1120中。(因为数据不再有效地存储在图1的存储装置120中,图5的延期跟踪器555还可从图5的逻辑到物理映射表565中移除针对图6的数据605的条目。)
122.另一方面,如果存在剩余的延期,则在框1730(图17b),图3的ftl330可为图6的数据605选择图8的另一物理地址805。在框1735,图3的闪存控制器335可将图6的数据605编程到图8的新物理地址805。在框1740,图3的闪存控制器335可使图8的原始物理地址805处的图6的数据605无效。在框1745,图3的ftl330可更新图5的逻辑到物理映射表565,以反映可存储图6的数据605的图8的物理地址805(例如,新物理地址805)。最后,在框1750,图5的延期跟踪器555可更新保持期(如下面参考图18所讨论的)。
123.图18示出根据公开的实施例的用于图1的存储装置120跟踪图1的存储装置120中的图6的数据605的图6的保持期615的延期的示例过程的流程图。在图18中,在框1805,图5的延期跟踪器555可递减图6的延期数量620。可选地,在框1810,图5的延期跟踪器555可递增图8的刷新次数820。
124.图19示出根据公开的实施例的用于图1的主机105得知图6的数据605被图1的存储装置120无效的示例过程的流程图。在图19中,在框1905,图1的主机105可向图1的存储装置120发送图5的读取请求520。在框1910,图1的主机105可从图1的存储装置120接收读取结果。
125.在框1915,图1的主机105可进行检查以查看读取结果是否是图11的读取错误1105。如果读取结果是图11的读取错误1105,则在框1920,图1的主机105可发送图11的数据保持期日志请求1110。在框1925,图1的主机105可从图1的存储装置120接收图11的数据保持期日志响应1115。图11的数据保持期日志响应1115可包括图11的数据保持期日志1120,使得图1的主机105可进行检查以查看图11的读取错误1105是由于图6的数据605被图1的存储装置120自动无效还是由于一些其他原因。
126.图20示出根据公开的实施例的用于图1的存储装置120处理具有图6的保持期615的图6的数据605的图5的读取请求520的示例过程的流程图。在图20中,在框2005,图3的ftl330可从图1的主机105接收图5的读取请求520。图5的读取请求520可包括要从图1的存储装置120读取的图6的数据605的图7的逻辑地址610。在框2010,图5的主机读取请求处置器510可使用图7的逻辑地址610来确定图6的数据605的图8的物理地址805。图5的主机读取请求处置器510可使用图5的逻辑到物理映射表565来确定图6的数据605的图8的物理地址805。在框2015,图5的主机读请求处置器510可使用图7的逻辑地址610确定用于对图6的数据605进行编码的图8的ecc模式810。图5的主机读请求处置器510可使用图5的逻辑到物理映射表565来确定图6的数据605的图8的ecc模式810。注意,在公开的一些实施例中,可省略框2015。
127.在框2020,图3的闪存控制器335可读取图1的存储装置120的图8的物理地址805处
的编码数据。在框2025,图3的闪存控制器335可使用图10的ecc编码器/解码器1010-1或1010-2对编码数据进行解码,从而产生图6的数据605。注意,在公开的一些实施例中,如果数据未被编码(并且省略了框2015),则也可省略框2025。最后,在框2030,图3的闪存控制器335可将图6的数据605返回给图3的ftl 330,图3的ftl330可继而将图6的数据605返回给图1的主机105。
128.图21示出根据公开的实施例的进一步详细描述图20中所示的示例过程的流程图的示例过程的流程图。在图21中,在框2105,图3的ftl330可向图3的闪存控制器335发送读取请求。在框2110,图3的闪存控制器335可读取编码数据。在框2115,图3的闪存控制器335可使用图10的ecc编码器/解码器1010-1或1010-2对编码数据进行解码。注意,如果图6的数据605在未被编码的情况下被存储,则框2115可被省略,如虚线2120所示。最后,在框2125,图3的闪存控制器335可将数据返回给图3的ftl330。
129.图22示出根据公开的实施例的用于图1的存储装置120处理对图11的数据保持期日志1120的图11的数据保持期日志请求1110的示例过程的流程图。在框2205,图1的存储装置120可从图1的主机105接收图11的数据保持期日志请求1110。在框2210,图1的存储装置120可将图11的数据保持期日志1120(例如,作为图11的数据保持期日志响应1115的一部分)返回给图1的主机105。
130.在图12至图22中,示出公开的一些实施例。但是本领域技术人员将认识到,通过改变块的顺序、通过省略块或通过包括附图中未示出的链接,公开的其他实施例也是可行的。无论是否明确描述,流程图的所有这样的变型都被认为是公开的实施例。
131.固态驱动器(ssd)(诸如,图1的存储装置120)正在数据中心中比以前多的应用中使用。ssd性能对于数据存储和处理可能变得重要。ssd将数据存储在与非(nand)闪存中。存在不同类型的闪存(例如,单层单元(slc)、多层单元(mlc)、三层单元(tlc)、四层单元(qlc)等)以及各种制造工艺。ssd控制器可管理闪存,并向ssd所附接到的主机提供对数据的访问。
132.主机可使用主机接口来与ssd通信。可通过该接口发出数据写入和读取输入/输出(i/o)命令以及各种媒体管理命令(诸如,识别、获取日志等)。ssd可使用相同的接口来执行到主机系统存储器的数据传送和从主机系统存储器的数据传送。
133.闪存转换层(ftl)可提供主机使用的逻辑地址与闪存上的数据的物理地址之间的映射。nand闪存可以以闪存页的粒度(在典型的nand闪存装置中通常为8至16kb,但是也可使用更小和/或更大的页大小)来读取或写入。在可用新数据对闪存页进行重新编程之前,可首先对其进行擦除。擦除的粒度是每nand块:在每个块中可存在128至256个页,但是块也可包括更少或更多的页。因为擦除和编程的粒度不同,所以可执行附加工作以在擦除旧块之前将有效页迁移到新块。垃圾收集(gc)是释放部分填充的块并为更多数据腾出空间的处理。垃圾收集的主要目标是识别其页的大部分是无效的碎片闪存块中的一个,并擦除整个块。当垃圾收集完成时,页可被回收并添加到ftl中的空闲列表。
134.闪存可被编程和擦除的次数可以是有限的。该限制可被描述为闪存在闪存的寿命期间可维持的编程/擦除循环(p/e循环)的最大数量。ssd控制器可尝试跨所有块均匀地分布写入操作以最大化ssd驱动器的寿命:该处理可被称为损耗均衡。当数据将被编程时,损耗均衡算法可从空闲列表选择新块。一种简单的方法是在空闲列表中选择具有最低数量的
p/e循环的块,以最小化跨块的磨损的差异。
135.由于闪存工作的方式(例如,使用垃圾收集和损耗均衡),被擦除和重写的数据的量可能大于主机写入的实际数据。每次数据被重新定位而不被主机系统改变,这样的重新定位增加了写入放大并减少了闪存的寿命。写入放大可通过提交给闪存的写入与来自主机系统的写入的比率来测量。ftl可执行各种后台操作(如垃圾收集和损耗均衡)。因此,主机i/o命令可与后台操作共存,并且这两种类型的闪存访问可彼此竞争闪存带宽。与执行附加编程/擦除循环相关联的开销可影响性能。ftl可尝试优化垃圾收集和损耗均衡,以提高效率并为主机写入和读取操作留下更多带宽。
136.图10的闪存接口1015可对闪存执行读取数据操作和写入数据操作。不同的闪存裸片可并行地并且彼此独立地进行读取操作、写入操作和擦除操作。闪存接口还可针对数据可靠性适当地执行数据编码和纠错。ssd控制器使用的最普遍的纠错码(ecc)是博斯-乔赫里-霍克文黑姆(bch)和低密度奇偶校验(ldpc),但是也可使用其他ecc。ldpc在纠错能力方面比bch码更强大,并且可具有更长时间的保持保证。但是ldpc实现起来可能更复杂,可能具有更长的编码和解码延迟,并且可能需要更多的功率。ldpc可对于较长保持期数据更可靠。bch可为较短保持期数据提供更高的带宽和更低的成本。
137.图10的闪存接口1015可执行从闪存控制器到闪存的直接存储器访问(dma)。为了对闪存页进行编程,闪存接口可将nand闪存单元的编程电压逐步增加特定增量(δv),并且一旦电压大于期望的阈值电压就可停止。δv越小,目标电压越精确。在编程步进电压越大的情况下,在编程过程期间使用越少的步骤。因此,编程步进电压的选择可涉及精度与速度之间的潜在权衡。
138.上述所有功能可能影响闪存的性能、可靠性和耐久性,并且因此整体上影响ssd的性能、可靠性和耐久性。在不知道数据保持期的情况下,可能需要容忍更多的保持错误。因此,可使用更多的带宽、功率和资源来满足保持要求。
139.可使用用于存储装置(诸如,图1的存储装置120)的用于执行i/o命令(诸如具有指定数据保持期(drp)的非易失性存储器快速(nvme)写入)的ssd架构。该架构可使主机能够指定针对给定命令的编程数据的估计数据保持期。这样的特征可使得ftl能够进行高效数据管理,从而改进闪存的耐久性。该架构还可帮助加速闪存编程和读取操作,并进一步改善整体ssd性能。
140.ssd控制器315可针对i/o命令在主机系统存储器与持久性闪存之间执行数据传输。i/o写入命令可指定目的地逻辑块地址(lba)和要编程的块的数量。ftl可将主机lba转换为闪存物理块地址,并执行从ssd控制器到闪存阵列的dma。ftl可使用以下两个参数来为每个i/o分配目标闪存地址:1)drp;以及2)保持期延期次数(rpet)。
141.数据保持期可以是由主机指定的数据的估计寿命。当保持期期满时,主机可对数据进行读取并重新编程以使保持期延期或使数据无效。ssd控制器可在使数据无效之前将数据保持期延期rpet中指定的次数。
142.基于每个命令的drp可帮助在闪存中的邻近块中分配具有类似保持期的数据。ftl中的图5的主机写入请求处置器505可基于数据保持期(例如,1天、1周、1个月、1年、1年以上等)将空闲闪存页分类为一个或多个队列(或池)。队列或池内的页可以是页的物理联合组(physically joint set)。当主机命令到达时,ftl可检查命令中的数据保持期,并从对应
的队列或池选择可用的物理页。在将页地址记录在逻辑到物理(l2p)表(例如,逻辑到物理映射表)中之后,ftl可触发闪存接口控制器以将数据编程到预先选择的页。因此,短保持期数据块可与包含长保持期数据的块分离。由于块内的数据可大约在共同时间期满,因此块可在一次击发(shot)中被回收,并且可最小化在垃圾收集期间的不必要的数据移动。在理想情况下,写入放大可减小到接近其最小值1。该事实进而可减少后台数据业务,并为主机读取操作和写入操作保留更多的资源和闪存通道带宽。
143.频繁覆写的数据块不需要频繁地被回收。对于具有短保持期的数据,可避免垃圾收集操作。通过基于数据保持时间对块进行分组,可提高垃圾收集效率,并且可减少块的p/e循环。此外,通过将年轻块(较低p/e循环)分配给长保持期队列并且将旧块(较高p/e循环)分配给短保持期队列,可实现更优化的损耗均衡。
144.基于每个命令的drp还可促进数据编程和读取速度的增加。不同的ecc码可具有不同的数据编码和解码延迟。ldpc在纠错能力方面比bch码更强大。但是ldpc算法实现起来可能更复杂,可能具有更长的编码和解码延迟,并且可能比bch码消耗更多的功率。对于短保持期数据,可能需要容忍较少的保持错误。因此,bch可足够强以针对短保持期数据在能力内保护数据。使用bch对这样的数据进行编码/解码可实现更快的编码/解码速度和更低的功耗。图3的ftl330可在触发闪存dma之前基于每个命令的drp来选择ecc模式。
145.除了使用不同ecc模式之外,还可根据drp优化数据编程步进电压以加速数据编程处理。可通过采用较大的编程步进电压值来提高写入速度。利用越大的编程步进电压,可在编程过程期间需要越少的步骤。因此,越大的编程步进电压可加速编程操作,但是也可减小用于容忍保持错误的裕度。因此,对短保持期数据施加越大的编程步进电压可帮助加速编程处理。
146.图3的ftl330可在编程到闪存之前将数据保持期、ecc模式和编程电压步进模式与逻辑和物理地址一起写入l2p表。表1示出包括在l2p表中的信息的一个示例。
147.表1
148.[0149][0150]
图3的ssd控制器315可通过标识数据结构来通告对每个i/o特征的drp的支持。以下字段是通过标识数据结构暴露的信息的一些示例:1)支持的每个i/o的drp;2)支持的drp长度(例如,一天、一周、一个月、一年、一年以上等);3)支持的最大rpet。
[0151]
当nvme驱动器和系统软件读取标识数据结构时,nvme驱动器和系统软件可理解所连接的ssd控制器可支持每个i/o的drp。然后,驱动器可使用设置特征/获取特征(set feature/get feature)命令来配置和启用ssd控制器中的每个i/o特征的drp。一旦启用每个i/o特征的drp,nvme驱动器和系统软件就可将drp和最大rpet插入nvme写入命令中。当drp已经期满时,ftl可记录数据的lba。然后,主机可使用nvme获取日志页(nvme get log page)命令来访问日志。
[0152]
在公开的另一个实施例中,图1的主机105可在不同于每i/o粒度的粒度上指定和设置drp和rpet值。主机可基于其指定drp和rpet值的存储和网络参数的一些示例是:lba范围、命令id、命名空间id、流id、分区命名空间(zns)id、主机id、提交队列id(sqid)、日期、时间、传输控制协议/因特网协议(tcp/ip)、以太网媒体访问控制(mac)id等。主机可使用设置特征/获取特征命令来设置ssd中的这些参数。
[0153]
在公开的另一实施例中,图3的ssd装置120本身可在不同于每i/o粒度的粒度上指定和设置drp和rpet值。ssd可用来指定drp和rpet值的存储和网络参数的一些示例是:lba范围、命令id、命名空间id、流id、zns id、主机id、sqid、日期、时间、tcp/ip、以太网mac id等。主机可使用标识和/或设置特征/获取特征命令来读取这样的装置指定参数值。
[0154]
公开的实施例提供了优于现有技术的技术优点。通过使用数据保持期,存储装置可更好地能够确定在由应用写入时在何处对数据进行编程,以在垃圾收集期间最小化(或潜在地消除)对数据进行编程。存储装置还可在确定如何对数据进行编程时(例如,通过选择适当的纠错码和/或编程步进电压)使用关于保持期的信息。存储装置还可在保持期已经
期满时自动使数据无效,而不是无限期地保持细节(并且可能不必要必须将数据编程到新位置)。在主机在没有来自应用的指令的情况下请求知道为什么数据被无效的情况下,存储装置可记录这样的数据无效。另外,通过使用延期,存储装置可自动更新其保持期已经期满的数据(而不是使数据无效)。
[0155]
以下讨论旨在提供在其中可实现公开的特定方面的合适的一个或多个机器的简要的总体描述。一个或多个机器可至少部分地通过来自常规输入装置(诸如,键盘、鼠标等)的输入以及通过从另一机器接收的指令、与虚拟现实(vr)环境的交互、生物特征反馈或其他输入信号来被控制。如在此所使用的,术语“机器”旨在广泛地涵盖单个机器、虚拟机、或通信地结合的机器、虚拟机或一起操作的装置的系统。示例性机器包括计算装置(诸如,个人计算机、工作站、服务器、便携式计算机、手持装置、电话、平板电脑等)、以及运输装置(诸如,私人或公共运输(例如,汽车、火车、出租车等))。
[0156]
一个或多个机器可包括嵌入式控制器(诸如,可编程或不可编程逻辑器件或阵列、专用集成电路(asic)、嵌入式计算机、智能卡等)。一个或多个机器可利用至一个或多个远程机器的一个或多个连接(诸如,通过网络接口、调制解调器或其他通信结合)。机器可通过物理和/或逻辑网络(诸如,内联网、互联网、局域网、广域网)的方式互联。本领域技术人员将理解,网络通信可利用各种有线和/或无线短程或远程载波和协议,其包括射频(rf)、卫星、微波、电气和电子工程师协会(ieee)802.11、蓝牙、光学、红外、电缆、激光等。
[0157]
可通过参考或结合包括函数、过程、数据结构、应用程序等的相关联的数据来描述本公开的实施例,相关联的数据在由机器访问时导致机器执行任务或定义抽象数据类型或低级硬件上下文。相关联的数据可存储在例如易失性和/或非易失性存储器(例如,ram、rom等)中,或者存储在其他存储装置及其相关联的存储介质(包括硬盘驱动器、软盘、光学存储设备、磁带、闪存、记忆棒、数字视频盘、生物存储设备等)中。相关联的数据可在传输环境(包括物理和/或逻辑网络)上以分组、串行数据、并行数据、传播信号等的形式传送,并且可以以压缩或加密格式使用。相关联的数据可在分布式环境中使用,并且本地和/或远程存储以供机器访问。
[0158]
公开的实施例可包括有形非暂时性机器可读介质,有形非暂时性机器可读介质包括可由一个或多个处理器执行的指令,所述指令包括用于执行如在此描述的公开的元件的指令。
[0159]
上述方法的各个操作可由能够执行操作的任何合适的装置(诸如,各种硬件和/或软件组件、电路和/或模块)来执行。软件可包括用于实现逻辑功能的可执行指令的有序列表,并且可在任何“处理器可读介质”中实现,以供指令执行系统、设备或装置(诸如,单核或多核处理器或包含处理器的系统)使用或与指令执行系统、设备或装置(诸如,单核或多核处理器或包含处理器的系统)结合使用。
[0160]
结合在此公开的实施例描述的方法或算法和功能的框或步骤可直接在硬件中、在由处理器执行的软件模块中、或在这两者的组合中实现。如果以软件实现,则功能可作为一个或多个指令或代码存储在有形非暂时性计算机可读介质上或通过有形非暂时性计算机可读介质传输。软件模块可驻留在随机存取存储器(ram)、闪存、只读存储器(rom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)、寄存器、硬盘、可移动盘、cd rom、或本领域中已知的任何其他形式的存储介质中。
[0161]
已经参考所示实施例描述和示出公开的原理,将认识到,示出的实施例可在不脱离这样的原理的情况下在布置和细节上进行修改,并且可以任何期望的方式组合。并且,尽管前面的讨论集中于特定实施例,但是可设想其他配置。具体地,即使在此使用了诸如“根据公开的实施例”等的表述,这些短语通常旨在对实施例可能性进行指代,并且不旨在将公开限制于特定的实施例配置。如在此所使用的,这些术语可指代可组合到其他实施例中的相同或不同的实施例。
[0162]
前述说明性实施例不应被解释为限制其公开。尽管已经描述了一些实施例,但是本领域技术人员将容易理解,在实质上不脱离本公开的新颖教导和优点的情况下,可对这些实施例进行许多修改。因此,所有这样的修改旨在被包括在如权利要求中限定的该公开的范围内。
[0163]
公开的实施例可扩展到下面的声明,但不限于此:
[0164]
声明1、公开的实施例包括一种存储装置,包括:
[0165]
主机接口,用于从主机接收写入请求,写入请求包括数据和所述数据的逻辑地址;
[0166]
用于所述数据的第一存储设备;
[0167]
保持期确定器,用于确定所述数据的保持期;
[0168]
转换层,用于至少部分地基于所述保持期来选择第一存储设备中的物理地址以存储所述数据;
[0169]
第二存储设备,用于逻辑到物理映射表,逻辑到物理映射表用于将所述逻辑地址映射到所述物理地址和所述保持期;以及
[0170]
控制器,用于将所述数据编程到第一存储设备中的所述物理地址中。
[0171]
声明2、公开的实施例包括根据声明1所述的存储装置,其中:
[0172]
所述存储装置包括固态驱动器(ssd);
[0173]
第一存储设备包括闪存存储设备;以及
[0174]
转换层包括闪存转换层(ftl)。
[0175]
声明3、公开的实施例包括根据声明2所述的存储装置,其中:
[0176]
闪存存储设备包括块;
[0177]
ftl被配置为:至少部分地基于所述保持期来选择闪存存储设备中的所述块中的物理地址以存储所述数据;
[0178]
逻辑到物理映射表将所述逻辑地址映射到所述块中的所述物理地址和所述保持期;以及
[0179]
控制器包括闪存接口,闪存接口用于将所述数据编程到闪存存储设备中的所述块中的所述物理地址中。
[0180]
声明4、公开的实施例包括根据声明2所述的存储装置,其中:
[0181]
ftl包括用于存储所述数据和第二数据的缓冲器;以及
[0182]
ftl被配置为:指示闪存接口至少部分地基于缓冲器存储足够的用于填充所述块的数据,来将所述数据和第二数据编程到闪存存储设备中的所述块中的所述物理地址中。
[0183]
声明5、公开的实施例包括根据声明2所述的存储装置,其中,所述块包括第二数据,第二数据包括所述保持期。
[0184]
声明6、公开的实施例包括根据声明1所述的存储装置,其中,转换层包括所述第二
存储设备。
[0185]
声明7、公开的实施例包括根据声明1所述的存储装置,其中,写入请求包括所述保持期。
[0186]
声明8、公开的实施例包括根据声明1所述的存储装置,其中,保持期确定器被配置为:至少部分地基于写入请求的属性来确定所述保持期。
[0187]
声明9、公开的实施例包括根据声明1所述的存储装置,其中,写入请求的属性是以下项中的至少一项:逻辑块地址(lba)的范围、命令标识符、命名空间标识符、流标识符、分区命名空间标识符、提交队列的标识符、日期、时间、协议、媒体访问控制标识符、网络参数和存储装置参数。
[0188]
声明10、公开的实施例包括根据声明1所述的存储装置,其中,保持期确定器被配置为访问所述存储装置的默认保持期作为所述保持期。
[0189]
声明11、公开的实施例包括如声明1所述的存储装置,其中,所述保持期是至少所述保持期和第二保持期之一。
[0190]
声明12、公开的实施例包括根据声明1所述的存储装置,其中,转换层包括纠错码(ecc)选择器,ecc选择器用于至少部分地基于所述保持期来至少从第一ecc模式和第二ecc模式选择第一ecc模式。
[0191]
声明13、公开的实施例包括根据声明12所述的存储装置,其中,ecc选择器被配置为:至少部分地基于所述保持期从至少包括第一ecc模式和第二ecc模式的表选择第一ecc模式。
[0192]
声明14、公开的实施例包括根据声明12所述的存储装置,其中,逻辑到物理映射表还将所述逻辑地址映射到第一ecc模式。
[0193]
声明15、公开的实施例包括根据声明12所述的存储装置,其中,控制器被配置为:至少部分地基于第一ecc模式对所述数据进行编码以产生编码数据,并且将所述编码数据编程到第一存储设备中的所述物理地址中。
[0194]
声明16、公开的实施例包括根据声明12所述的存储装置,其中,转换层还包括编程步进电压选择器,编程步进电压选择器用于至少部分地基于所述保持期来至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压。
[0195]
声明17、公开的实施例包括根据声明16所述的存储装置,其中,编程步进电压选择器被配置为:至少部分地基于所述保持期从至少包括第一编程步进电压和第二编程步进电压的表选择第一编程步进电压。
[0196]
声明18、公开的实施例包括根据声明16所述的存储装置,其中,逻辑到物理映射表还将所述逻辑地址映射到第一编程步进电压。
[0197]
声明19、公开的实施例包括根据声明16所述的存储装置,其中,控制器被配置为:至少部分地基于第一ecc模式对所述数据进行编码以产生编码数据,并且至少部分地基于第一编程步进电压将所述编码数据编程到第一存储设备中的所述物理地址中。
[0198]
声明20、公开的实施例包括根据声明1所述的存储装置,其中,转换层包括编程步进电压选择器,编程步进电压选择器用于至少部分地基于所述保持期来至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压。
[0199]
声明21、公开的实施例包括根据声明20所述的存储装置,其中,编程步进电压选择
器被配置为:至少部分地基于所述保持期从至少包括第一编程步进电压和第二编程步进电压的表选择第一编程步进电压。
[0200]
声明22、公开的实施例包括根据声明20所述的存储装置,其中,逻辑到物理映射表还将所述逻辑地址映射到第一编程步进电压。
[0201]
声明23、公开的实施例包括根据声明20所述的存储装置,其中,控制器被配置为:至少部分地基于第一编程步进电压将所述数据编程到第一存储设备中的所述物理地址中。
[0202]
声明24、公开的实施例包括根据声明1所述的存储装置,其中,转换层包括用于跟踪所述保持期的期满的延期跟踪器。
[0203]
声明25、公开的实施例包括根据声明24所述的存储装置,其中,转换层被配置为:确定延期数量。
[0204]
声明26、公开的实施例包括根据声明25所述的存储装置,其中,写入请求还包括所述延期数量。
[0205]
声明27、公开的实施例包括根据声明25所述的存储装置,其中,转换层被配置为:至少部分地基于写入请求的属性来确定所述延期数量。
[0206]
声明28、公开的实施例包括根据声明27所述的存储装置,其中,写入请求的属性是以下项中的至少一项:lba的范围、命令标识符、命名空间标识符、流标识符、分区命名空间标识符、提交队列的标识符、日期、时间、协议、媒体访问控制标识符、网络参数和存储装置参数。
[0207]
声明29、公开的实施例包括根据声明25所述的存储装置,其中,所述延期数量是所述存储装置的默认延期数量。
[0208]
声明30、公开的实施例包括根据声明25所述的存储装置,其中,延期跟踪器被配置为:至少部分地基于所述延期数量来更新所述保持期。
[0209]
声明31、公开的实施例包括根据声明25所述的存储装置,其中,延期跟踪器被配置为:至少部分地基于所述延期数量来自动更新所述保持期。
[0210]
声明32、公开的实施例包括根据声明30所述的存储装置,其中,延期跟踪器还被配置为:至少部分地基于所述延期数量大于零来更新所述保持期。
[0211]
声明33、公开的实施例包括根据声明30所述的存储装置,其中,延期跟踪器还被配置为:至少部分地基于所述延期数量大于零来自动更新所述保持期。
[0212]
声明34、公开的实施例包括根据声明32所述的存储装置,其中,延期跟踪器被配置为递减所述延期数量。
[0213]
声明35、公开的实施例包括根据声明30所述的存储装置,其中,延期跟踪器还被配置为:至少部分地基于所述延期数量大于刷新次数来更新所述保持期。
[0214]
声明36、公开的实施例包括根据声明30所述的存储装置,其中,延期跟踪器还被配置为:至少部分地基于所述延期数量大于刷新次数来自动更新所述保持期。
[0215]
声明37、公开的实施例包括根据声明35所述的存储装置,其中,延期跟踪器被配置为:递增所述刷新次数。
[0216]
声明38、公开的实施例包括根据声明35所述的存储装置,其中,逻辑到物理映射表还将所述逻辑地址映射到所述刷新次数。
[0217]
声明39、公开的实施例包括根据声明30所述的存储装置,其中:
[0218]
转换层被配置为:至少部分地基于所述保持期为第一存储设备中的所述数据选择第二物理地址以存储所述数据,并且更新逻辑到物理映射表以将所述逻辑地址映射到第二物理地址和所述保持期;以及
[0219]
控制器被配置为:将所述数据编程到第一存储设备中的第二物理地址中。
[0220]
声明40、公开的实施例包括根据声明39所述的存储装置,其中,控制器还被配置为:使第一存储设备中的所述物理地址处的所述数据无效。
[0221]
声明41、公开的实施例包括根据声明25所述的存储装置,其中,逻辑到物理映射表还将所述逻辑地址映射到所述延期数量。
[0222]
声明42、公开的实施例包括根据声明24所述的存储装置,其中,延期跟踪器被配置为:至少部分地基于所述保持期的期满来使第一存储设备中的所述物理地址处的所述数据无效。
[0223]
声明43、公开的实施例包括根据声明24所述的存储装置,其中,延期跟踪器被配置为:至少部分地基于所述保持期的期满来使第一存储设备中的所述物理地址处的所述数据自动无效。
[0224]
声明44、公开的实施例包括根据声明42所述的存储装置,其中,延期跟踪器还被配置为:至少部分地基于延期数量为零来使第一存储设备中的所述物理地址处的所述数据无效。
[0225]
声明45、公开的实施例包括根据声明42所述的存储装置,其中,延期跟踪器还被配置为:至少部分地基于延期数量为零来使第一存储设备中的所述物理地址处的所述数据自动无效。
[0226]
声明46、公开的实施例包括根据声明42所述的存储装置,其中,延期跟踪器还被配置为:至少部分地基于延期数量等于刷新次数来使第一存储设备中的所述物理地址处的所述数据无效。
[0227]
声明47、公开的实施例包括根据声明42所述的存储装置,其中,延期跟踪器还被配置为:至少部分地基于延期数量等于刷新次数来使第一存储设备中的所述物理地址处的所述数据自动无效。
[0228]
声明48、公开的实施例包括根据声明46所述的存储装置,其中,逻辑到物理映射表还将所述逻辑地址映射到所述延期数量和所述刷新次数。
[0229]
声明49、公开的实施例包括根据声明42所述的存储装置,其中,转换层包括记录器,所述记录器用于至少部分地基于所述数据的无效来将所述逻辑地址记录在数据保持期日志中。
[0230]
声明50、公开的实施例包括根据声明49所述的存储装置,其中,转换层被配置为:从所述主机接收对所述数据保持期日志的请求并且将所述数据保持期日志返回给主机。
[0231]
声明51、公开的实施例包括根据声明1所述的存储装置,其中,转换层包括垃圾收集控制器,垃圾收集控制器用于至少部分地基于所述保持期来调度垃圾收集。
[0232]
声明52、公开的实施例包括根据声明1所述的存储装置,其中,转换层被配置为从主机接收配置命令。
[0233]
声明53、公开的实施例包括根据声明52所述的存储装置,其中,所述配置命令包括启用保持命令、禁用保持命令、可用保持期的集合、默认保持期和默认延期数量中的至少一
个。
[0234]
声明54、公开的实施例包括根据声明1所述的存储装置,其中,转换层至少包括与所述保持期相关联的第一提交队列和与第二保持期相关联的第二提交队列。
[0235]
声明55、公开的实施例包括根据声明1所述的存储装置,其中:
[0236]
主机接口被配置为:从主机接收读取请求,读取请求包括所述逻辑地址;
[0237]
逻辑到物理映射表还将所述逻辑地址映射到第一ecc模式;
[0238]
转换层被配置为:使用逻辑到物理映射表来至少部分地基于所述逻辑地址来确定所述物理地址和第一ecc模式,并将所述数据返回给主机;以及
[0239]
控制器被配置为:从第一存储设备中的所述物理地址读取编码数据,并且至少部分地基于第一ecc模式来对所述编码数据进行解码以产生所述数据。
[0240]
声明56、公开的实施例包括一种方法,包括:
[0241]
在存储装置处从主机接收写入请求,写入请求包括数据和所述数据的逻辑地址;
[0242]
确定所述数据的保持期;
[0243]
至少部分地基于所述保持期来选择存储装置中的物理地址以存储所述数据;
[0244]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期;以及
[0245]
将所述数据编程到存储装置中的所述物理地址中。
[0246]
声明57、公开的实施例包括根据声明56所述的方法,还包括:将写入请求的结果从存储装置返回给主机。
[0247]
声明58、公开的实施例包括根据声明56所述的方法,其中:
[0248]
在存储装置处从主机接收写入请求的步骤包括:在固态驱动器(ssd)处从主机接收写入请求;
[0249]
至少部分地基于所述保持期来选择存储装置中的所述物理地址以存储所述数据的步骤包括:至少部分地基于所述保持期来选择ssd中的块中的所述物理地址以存储所述数据;
[0250]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新ssd中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期;以及
[0251]
将所述数据编程到存储装置中的所述物理地址中的步骤包括:将所述数据编程到ssd中的所述块中的所述物理地址中。
[0252]
声明59、公开的实施例包括根据声明58所述的方法,其中:
[0253]
至少部分地基于所述保持期来选择ssd中的所述块中的所述物理地址以存储所述数据的步骤包括:在ssd中的闪存转换层(ftl)中,至少部分地基于所述保持期来选择所述块中的所述物理地址以存储所述数据;以及
[0254]
更新ssd中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:在ssd中的ftl中更新逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期。
[0255]
声明60、公开的实施例包括根据声明58所述的方法,其中,将所述数据编程到ssd中的所述物理地址中的步骤包括:
[0256]
向控制器发送编程请求,第二写入请求包括所述数据和所述物理地址;以及
[0257]
通过控制器将所述数据编程到ssd中的所述块中的所述物理地址中。
[0258]
声明61、公开的实施例包括根据声明58所述的方法,其中,将所述数据编程到ssd中的所述块中的所述物理地址中的步骤包括:
[0259]
用第二数据缓冲所述数据,所述第二数据与所述保持期相关联;以及
[0260]
将所述数据编程到ssd中的所述块中的所述物理地址中;以及
[0261]
将第二数据编程到ssd中的所述块中的第二物理地址中。
[0262]
声明62、公开的实施例包括根据声明58所述的方法,其中,所述块包括第二数据,第二数据与所述保持期相关联。
[0263]
声明63、公开的实施例包括根据声明56所述的方法,其中:
[0264]
写入请求还包括所述保持期;以及
[0265]
确定所述保持期的步骤包括:从写入请求访问所述保持期。
[0266]
声明64、公开的实施例包括根据声明56所述的方法,其中,确定所述保持期的步骤包括:至少部分地基于写入请求的属性来确定所述保持期。
[0267]
声明65、公开的实施例包括根据声明64所述的方法,其中,写入请求的属性是以下项中的至少一项:逻辑块地址(lba)的范围、命令标识符、命名空间标识符、流标识符、分区命名空间标识符、提交队列的标识符、日期、时间、协议、媒体访问控制标识符、网络参数和存储装置参数。
[0268]
声明66、公开的实施例包括根据声明56所述的方法,其中,确定所述保持期的步骤包括:访问所述存储装置的默认保持期。
[0269]
声明67、公开的实施例包括根据声明56所述的方法,其中,所述保持期是至少第一数据保持期和第二数据保持期之一。
[0270]
声明68、公开的实施例包括根据声明56所述的方法,其中:
[0271]
所述方法还包括:至少部分地基于所述保持期来至少从第一纠错码(ecc)模式和第二ecc模式选择第一ecc模式;
[0272]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新存储装置中的逻辑到物理映射表以进一步存储第一ecc模式;以及
[0273]
将所述数据编程到存储装置中的所述物理地址中的步骤包括:至少部分地基于第一ecc模式将所述数据编程到存储装置中的所述物理地址中。
[0274]
声明69、公开的实施例包括根据声明68所述的方法,其中,至少部分地基于第一ecc模式将所述数据编程到存储装置中的所述物理地址中的步骤包括:
[0275]
至少部分地基于第一ecc模式来对所述数据进行编码以产生编码数据;以及
[0276]
将所述编码数据编程到存储装置中的所述物理地址中。
[0277]
声明70、公开的实施例包括根据声明68所述的方法,其中,至少部分地基于所述保持期来至少从第一ecc模式和第二ecc模式选择第一ecc模式的步骤包括:至少部分地基于所述保持期从存储在存储装置中的表读取第一ecc模式。
[0278]
声明71、公开的实施例包括根据声明68所述的方法,其中:
[0279]
所述方法还包括:至少部分地基于所述保持期来至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压;
[0280]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤还包括:更新存储装置中的逻辑到物理映射表以进一步存储第一编程步进电压;以及
[0281]
将所述数据编程到存储装置中的所述物理地址中的步骤包括:至少部分地基于第一ecc模式和第一编程步进电压将所述数据编程到存储装置中的所述物理地址中。
[0282]
声明72、公开的实施例包括根据声明71所述的方法,其中,至少部分地基于第一ecc模式和第一编程步进电压将所述数据编程到存储装置中的所述物理地址中的步骤包括:
[0283]
至少部分地基于第一ecc模式来对所述数据进行编码以产生编码数据;以及
[0284]
至少部分地基于第一编程步进电压将所述编码数据编程到存储装置中的所述物理地址中。
[0285]
声明73、公开的实施例包括根据声明71所述的方法,其中,至少部分地基于所述保持期至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压的步骤包括:至少部分地基于所述保持期从存储在存储装置中的表读取第一编程步进电压。
[0286]
声明74、公开的实施例包括根据声明56所述的方法,其中:
[0287]
所述方法还包括:至少部分地基于所述保持期至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压;
[0288]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新存储装置中的逻辑到物理映射表以进一步存储第一编程步进电压;以及
[0289]
将所述数据编程到存储装置中的所述物理地址中的步骤包括:至少部分地基于第一编程步进电压将所述数据编程到存储装置中的所述物理地址中。
[0290]
声明75、公开的实施例包括根据声明74所述的方法,其中,至少部分地基于所述保持期至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压的步骤包括:至少部分地基于所述保持期从存储在存储装置中的表读取第一编程步进电压。
[0291]
声明76、公开的实施例包括根据声明56所述的方法,其中:
[0292]
所述方法还包括:确定所述数据保持期的延期数量;以及
[0293]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新存储装置中的逻辑到物理映射表以进一步存储所述延期数量。
[0294]
声明77、公开的实施例包括根据声明76所述的方法,其中:
[0295]
写入请求还包括所述延期数量;以及
[0296]
确定所述延期数量的步骤包括:从写入请求访问所述延期数量。
[0297]
声明78、公开的实施例包括根据声明76所述的方法,其中,确定所述延期数量的步骤包括:至少部分地基于写入请求的属性来确定所述延期数量。
[0298]
声明79、公开的实施例包括根据声明78所述的方法,其中,写入请求的属性是以下项中的至少一项:lba的范围、命令标识符、命名空间标识符、流标识符、分区命名空间标识符、提交队列的标识符、日期、时间、协议、媒体访问控制标识符、网络参数和存储装置参数。
[0299]
声明80、公开的实施例包括根据声明76所述的方法,其中,确定所述延期数量的步骤包括:访问存储装置的默认延期数量。
[0300]
声明81、公开的实施例包括根据声明76所述的方法,其中,更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤还包括:更新存储装置中的逻辑到物理映射表以进一步存储刷新次数。
[0301]
声明82、公开的实施例包括根据声明76所述的方法,还包括:
[0302]
确定所述保持期已经期满;以及
[0303]
至少部分地基于所述延期数量来更新所述保持期。
[0304]
声明83、公开的实施例包括根据声明76所述的方法,其中,至少部分地基于所述延期数量来更新所述保持期的步骤包括:至少部分地基于所述延期数量来自动更新所述保持期。
[0305]
声明84、公开的实施例包括根据声明82所述的方法,其中:
[0306]
所述方法还包括:调度所述保持期已经在调度时间期满的检查;以及
[0307]
确定所述保持期已经期满的步骤包括:至少部分地基于所述调度时间到达来确定所述保持期已经期满。
[0308]
声明85、公开的实施例包括根据声明82所述的方法,还包括:递减所述延期数量。
[0309]
声明86、公开的实施例包括根据声明82所述的方法,还包括:增加刷新次数。
[0310]
声明87、公开的实施例包括根据声明82所述的方法,其中,至少部分地基于所述延期数量来更新所述保持期的步骤包括:
[0311]
至少部分地基于所述保持期来选择存储装置中的第二物理地址以存储所述数据;以及
[0312]
将所述数据编程到存储装置中的第二物理地址中。
[0313]
声明88、公开的实施例包括根据声明87所述的方法,其中,将所述数据编程到存储装置中的第二物理地址中的步骤包括:从存储装置中的所述物理地址读取所述数据。
[0314]
声明89、公开的实施例包括根据声明87所述的方法,其中,至少部分地基于所述延期数量来更新所述保持期的步骤还包括:更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、第二物理地址和所述保持期。
[0315]
声明90、公开的实施例包括根据声明56所述的方法,还包括:至少部分地基于所述保持期来调度存储装置的垃圾收集。
[0316]
声明91、公开的实施例包括根据声明56所述的方法,还包括:
[0317]
确定所述保持期已经期满;以及
[0318]
至少部分地基于所述延期数量来使存储装置上的所述物理地址处的所述数据无效。
[0319]
声明92、公开的实施例包括根据声明56所述的方法,其中,至少部分地基于所述延期数量使存储装置上的所述物理地址处的所述数据无效的步骤包括:至少部分地基于所述延期数量使存储装置上的所述物理地址处的所述数据自动无效。
[0320]
声明93、公开的实施例包括根据声明91所述的方法,还包括:至少部分地基于所述数据的无效而将所述逻辑地址记录在数据保持期日志中。
[0321]
声明94、公开的实施例包括根据声明93所述的方法,还包括:
[0322]
在存储装置处从主机接收对所述数据保持期日志的请求;以及
[0323]
将所述数据保持期日志从存储装置返回给主机。
[0324]
声明95、公开的实施例包括根据声明56所述的方法,还包括:从主机接收配置命令。
[0325]
声明96、公开的实施例包括根据声明95所述的方法,其中,所述配置命令包括启用保持命令、禁用保持命令、可用保持期的集合、默认保持期和默认延期数量中的至少一个。
[0326]
声明97、公开的实施例包括根据声明56所述的方法,还包括:至少部分地基于所述保持期将写入请求放置在第一提交队列中,存储装置包括第一提交队列和第二提交队列。
[0327]
声明98、公开的实施例包括一种方法,包括:
[0328]
在存储装置处从主机接收读取请求,读取请求包括数据的逻辑地址;
[0329]
至少部分地基于所述逻辑地址来确定所述数据的物理地址;
[0330]
至少部分地基于所述逻辑地址来确定用于所述数据的纠错码(ecc)模式;
[0331]
从存储装置中的所述物理地址读取编码数据;
[0332]
至少部分地基于所述ecc模式来对所述编码数据进行解码以产生所述数据;以及
[0333]
将所述数据从存储装置返回给主机。
[0334]
声明99、公开的实施例包括根据声明98所述的方法,其中:
[0335]
在存储装置处从主机接收读取请求的步骤包括:在固态驱动器(ssd)处从主机接收读取请求;以及
[0336]
将所述数据从存储装置返回给主机的步骤包括:将所述数据从ssd返回给主机。
[0337]
声明100、公开的实施例包括根据声明98所述的方法,其中:
[0338]
至少部分地基于所述逻辑地址来确定所述数据的所述物理地址的步骤包括:至少部分地基于所述逻辑地址来确定逻辑到物理映射表中的所述数据的所述物理地址;以及
[0339]
至少部分地基于所述逻辑地址来确定用于所述数据的ecc模式的步骤包括:至少部分地基于所述逻辑地址来确定逻辑到物理映射表中的用于所述数据的ecc模式。
[0340]
声明101、公开的实施例包括根据声明98所述的方法,其中:
[0341]
从存储装置中的所述物理地址读取编码数据的步骤包括:
[0342]
向控制器发送第二读取请求,第二读取请求包括所述物理地址;以及
[0343]
通过控制器从存储装置中的所述物理地址读取所述编码数据;
[0344]
至少部分地基于所述ecc模式来对所述编码数据进行解码以产生所述数据的步骤包括:通过控制器至少部分地基于所述ecc模式来对所述编码数据进行解码以产生所述数据;以及
[0345]
将所述数据从存储装置返回给主机的步骤包括:从控制器返回所述数据。
[0346]
声明102、公开的实施例包括一种物品,所述物品包括非暂时性存储介质,所述非暂时性存储介质上存储有指令,所述指令在由机器执行时导致:
[0347]
在存储装置处从主机接收写入请求,写入请求包括数据和所述数据的逻辑地址;
[0348]
确定所述数据的保持期;
[0349]
至少部分地基于所述保持期来选择存储装置中的物理地址以存储所述数据;
[0350]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期;以及
[0351]
将所述数据编程到存储装置中的所述物理地址中。
[0352]
声明103、公开的实施例包括根据声明102所述的物品,所述非暂时性存储介质上
存储有另外的指令,所述另外的指令在由所述机器执行时导致:将写入请求的结果从存储装置返回给主机。
[0353]
声明104、公开的实施例包括根据声明102所述的物品,其中:
[0354]
在存储装置处从主机接收写入请求的步骤包括:在固态驱动器(ssd)处从主机接收写入请求;
[0355]
至少部分地基于所述保持期来选择存储装置中的所述物理地址以存储所述数据的步骤包括:至少部分地基于所述保持期来选择ssd中的块中的所述物理地址以存储所述数据;
[0356]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新ssd中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期;以及
[0357]
将所述数据编程到存储装置中的所述物理地址中的步骤包括:将所述数据编程到ssd中的所述块中的所述物理地址中。
[0358]
声明105、公开的实施例包括根据声明104所述的物品,其中:
[0359]
至少部分地基于所述保持期来选择ssd中的所述块中的所述物理地址以存储所述数据的步骤包括:在ssd中的闪存转换层(ftl)中,至少部分地基于所述保持期来选择所述块中的所述物理地址以存储所述数据;以及
[0360]
更新ssd中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:在ssd中的ftl中更新逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期。
[0361]
声明106、公开的实施例包括根据声明104所述的物品,其中,将所述数据编程到ssd中的所述物理地址中的步骤包括:
[0362]
向控制器发送编程请求,第二写入请求包括所述数据和所述物理地址;以及
[0363]
通过控制器将所述数据编程到ssd中的所述块中的所述物理地址中。
[0364]
声明107、公开的实施例包括根据声明104所述的物品,其中,将所述数据编程到ssd中的所述块中的所述物理地址中的步骤包括:
[0365]
用第二数据缓冲所述数据,第二数据与所述保持期相关联;以及
[0366]
将所述数据编程到ssd中的所述块中的所述物理地址中;以及
[0367]
将第二数据编程到ssd中的所述块中的第二物理地址中。
[0368]
声明108、公开的实施例包括根据声明104所述的物品,其中,所述块包括第二数据,第二数据与所述保持期相关联。
[0369]
声明109、公开的实施例包括根据声明102所述的物品,其中:
[0370]
写入请求还包括所述保持期;以及
[0371]
确定所述保持期的步骤包括:从写入请求访问所述保持期。
[0372]
声明110、公开的实施例包括根据声明102所述的物品,其中,确定所述保持期的步骤包括:至少部分地基于写入请求的属性来确定所述保持期。
[0373]
声明111、公开的实施例包括根据声明110所述的物品,其中,写入请求的属性是以下项中的至少一项:逻辑块地址(lba)的范围、命令标识符、命名空间标识符、流标识符、分区命名空间标识符、提交队列的标识符、日期、时间、协议、媒体访问控制标识符、网络参数
和存储装置参数。
[0374]
声明112、公开的实施例包括根据声明102所述的物品,其中,确定所述保持期的步骤包括:访问存储装置的默认保持期。
[0375]
声明113、公开的实施例包括根据声明102所述的物品,其中,所述保持期是至少第一数据保持期和第二数据保持期之一。
[0376]
声明114、公开的实施例包括根据声明102所述的物品,其中:
[0377]
所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:至少部分地基于所述保持期至少从第一纠错码(ecc)模式和第二ecc模式选择第一ecc模式;
[0378]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新存储装置中的逻辑到物理映射表以进一步存储第一ecc模式;以及
[0379]
将所述数据编程到存储装置中的所述物理地址中的步骤包括:至少部分地基于第一ecc模式将所述数据编程到存储装置中的所述物理地址中。
[0380]
声明115、公开的实施例包括根据声明114所述的物品,其中,至少部分地基于第一ecc模式将所述数据编程到存储装置中的所述物理地址中的步骤包括:
[0381]
至少部分地基于第一ecc模式来对所述数据进行编码以产生编码数据;以及
[0382]
将所述编码数据编程到存储装置中的所述物理地址中。
[0383]
声明116、公开的实施例包括根据声明114所述的物品,其中,至少部分地基于所述保持期至少从第一ecc模式和第二ecc模式选择第一ecc模式的步骤包括:至少部分地基于所述保持期从存储在存储装置中的表读取第一ecc模式。
[0384]
声明117、公开的实施例包括根据声明114所述的物品,其中:
[0385]
所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:至少部分地基于所述保持期,至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压;
[0386]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤还包括:更新存储装置中的逻辑到物理映射表以进一步存储第一编程步进电压;以及
[0387]
将所述数据编程到存储装置中的所述物理地址中的步骤包括:至少部分地基于第一ecc模式和第一编程步进电压将所述数据编程到存储装置中的所述物理地址中。
[0388]
声明118、公开的实施例包括根据声明117所述的物品,其中,至少部分地基于第一ecc模式和第一编程步进电压将所述数据编程到存储装置中的所述物理地址中的步骤包括:
[0389]
至少部分地基于第一ecc模式来对所述数据进行编码以产生编码数据;以及
[0390]
至少部分地基于第一编程步进电压将所述编码数据编程到存储装置中的所述物理地址中。
[0391]
声明119、公开的实施例包括根据声明117所述的物品,其中,至少部分地基于所述保持期至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压的步骤包括:至少部分地基于所述保持期从存储在存储装置中的表读取第一编程步进电压。
[0392]
声明120、公开的实施例包括根据声明102所述的物品,其中:
[0393]
所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:至少部分地基于所述保持期,至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压;
[0394]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新存储装置中的逻辑到物理映射表以进一步存储第一编程步进电压;以及
[0395]
将所述数据编程到存储装置中的所述物理地址中的步骤包括:至少部分地基于第一编程步进电压将所述数据编程到存储装置中的所述物理地址中。
[0396]
声明121、公开的实施例包括根据声明120所述的物品,其中,至少部分地基于所述保持期至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压的步骤包括:至少部分地基于所述保持期从存储在存储装置中的表读取第一编程步进电压。
[0397]
声明122、公开的实施例包括根据声明102所述的物品,其中:
[0398]
所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:确定所述数据保持期的延期数量;以及
[0399]
更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新存储装置中的逻辑到物理映射表以进一步存储所述延期数量。
[0400]
声明123、公开的实施例包括根据声明122所述的物品,其中:
[0401]
写入请求还包括所述延期数量;以及
[0402]
确定所述延期数量的步骤包括:从写入请求访问所述延期数量。
[0403]
声明124、公开的实施例包括根据声明122所述的物品,其中,确定所述延期数量的步骤包括:至少部分地基于写入请求的属性来确定所述延期数量。
[0404]
声明125、公开的实施例包括根据声明124所述的物品,其中,写入请求的属性是以下项中的至少一项:lba的范围、命令标识符、命名空间标识符、流标识符、分区命名空间标识符、提交队列的标识符、日期、时间、协议、媒体访问控制标识符、网络参数和存储装置参数。
[0405]
声明126、公开的实施例包括根据声明122所述的物品,其中,确定所述延期数量的步骤包括:访问存储装置的默认延期数量。
[0406]
声明127、公开的实施例包括根据声明122所述的物品,其中,更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤还包括:更新存储装置中的逻辑到物理映射表以进一步存储刷新次数。
[0407]
声明128、公开的实施例包括根据声明122所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:
[0408]
确定所述保持期已经期满;以及
[0409]
至少部分地基于所述延期数量来更新所述保持期。
[0410]
声明129、公开的实施例包括根据声明122所述的物品,其中,至少部分地基于所述延期数量来更新所述保持期的步骤包括:至少部分地基于所述延期数量来自动更新所述保持期。
[0411]
声明130、公开的实施例包括根据声明128所述的物品,其中:
[0412]
所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行
时导致:调度所述保持期已经在调度时间期满的检查;以及
[0413]
确定所述保持期已经期满的步骤包括:至少部分地基于所述调度时间到达来确定所述保持期已经期满。
[0414]
声明131、公开的实施例包括根据声明128所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:递减所述延期数量。
[0415]
声明132、公开的实施例包括根据声明128所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:增加刷新次数。
[0416]
声明133、公开的实施例包括根据声明128所述的物品,其中,至少部分地基于所述延期数量来更新所述保持期的步骤包括:
[0417]
至少部分地基于所述保持期来选择存储装置中的第二物理地址以存储所述数据;以及
[0418]
将所述数据编程到存储装置中的第二物理地址中。
[0419]
声明134、公开的实施例包括根据声明133所述的物品,其中,将所述数据编程到存储装置中的第二物理地址中的步骤包括:从存储装置中的所述物理地址读取所述数据。
[0420]
声明135、公开的实施例包括根据声明133所述的物品,其中,至少部分地基于所述延期数量来更新所述保持期的步骤还包括:更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、第二物理地址和所述保持期。
[0421]
声明136、公开的实施例包括根据声明102所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:至少部分地基于所述保持期来调度存储装置的垃圾收集。
[0422]
声明137、公开的实施例包括根据声明102所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:
[0423]
确定所述保持期已经期满;以及
[0424]
至少部分地基于所述延期数量来使存储装置上的所述物理地址处的所述数据无效。
[0425]
声明138、公开的实施例包括根据声明102所述的物品,其中,至少部分地基于所述延期数量来使存储装置上的所述物理地址处的所述数据无效的步骤包括:至少部分地基于所述延期数量来使存储装置上的所述物理地址处的所述数据自动无效。
[0426]
声明139、公开的实施例包括根据声明137所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:至少部分地基于所述数据的无效而将所述逻辑地址记录在数据保持期日志中。
[0427]
声明140、公开的实施例包括根据声明139所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:
[0428]
在存储装置处从主机接收对所述数据保持期日志的请求;以及
[0429]
将所述数据保持期日志从存储装置返回给主机。
[0430]
声明141、公开的实施例包括根据声明102所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:从主机接收配置命令。
[0431]
声明142、公开的实施例包括根据声明141所述的物品,其中,所述配置命令包括启用保持命令、禁用保持命令、可用保持期的集合、默认保持期和默认延期次数中的至少一
个。
[0432]
声明143、公开的实施例包括根据声明102所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时导致:至少部分地基于所述保持期将写入请求放置在第一提交队列中,存储装置包括第一提交队列和第二提交队列。
[0433]
声明144、公开的实施例包括一种物品,包括:
[0434]
在存储装置处从主机接收读取请求,读取请求包括数据的逻辑地址;
[0435]
至少部分地基于所述逻辑地址来确定所述数据的物理地址;
[0436]
至少部分地基于所述逻辑地址来确定用于所述数据的纠错码(ecc)模式;
[0437]
从存储装置中的所述物理地址读取编码数据;
[0438]
至少部分地基于所述ecc模式来对所述编码数据进行解码以产生所述数据;以及
[0439]
将所述数据从存储装置返回给主机。
[0440]
声明145、公开的实施例包括根据声明144所述的物品,其中:
[0441]
在存储装置处从主机接收读取请求的步骤包括:在固态驱动器(ssd)处从主机接收读取请求;以及
[0442]
将所述数据从存储装置返回给主机的步骤包括:将所述数据从ssd返回给主机。
[0443]
声明146、公开的实施例包括根据声明144所述的物品,其中:
[0444]
至少部分地基于所述逻辑地址来确定所述数据的所述物理地址的步骤包括:至少部分地基于所述逻辑地址来确定逻辑到物理映射表中的所述数据的所述物理地址;以及
[0445]
至少部分地基于所述逻辑地址来确定用于所述数据的ecc模式的步骤包括:至少部分地基于所述逻辑地址来确定逻辑到物理映射表中的用于所述数据的ecc模式。
[0446]
声明147、公开的实施例包括根据声明144所述的物品,其中:
[0447]
从存储装置中的所述物理地址读取编码数据的步骤包括:
[0448]
向控制器发送第二读取请求,第二读取请求包括所述物理地址;以及
[0449]
通过控制器从存储装置中的所述物理地址读取所述编码数据;
[0450]
至少部分地基于所述ecc模式来对所述编码数据进行解码以产生所述数据的步骤包括:通过控制器至少部分地基于所述ecc模式来对所述编码数据进行解码以产生所述数据;以及
[0451]
将所述数据从存储装置返回给主机的步骤包括:从控制器返回所述数据。
[0452]
因此,鉴于对在此描述的实施例的各种各样的组合,该详细描述和随附材料仅旨在是说明性的,并且不应被视为限制公开的范围。因此,公开所要求保护的是可落入所附权利要求及其等同物的范围和精神内的所有这样的修改。

技术特征:


1.一种存储装置,包括:主机接口,用于从主机接收写入请求,写入请求包括数据和所述数据的逻辑地址;用于所述数据的第一存储设备;保持期确定器,用于确定所述数据的保持期;转换层,用于至少部分地基于所述保持期来选择第一存储设备中的物理地址以存储所述数据;第二存储设备,用于逻辑到物理映射表,逻辑到物理映射表用于将所述逻辑地址映射到所述物理地址和所述保持期;以及控制器,用于将所述数据编程到第一存储设备中的所述物理地址中。2.如权利要求1所述的存储装置,其中,写入请求包括所述保持期。3.如权利要求1所述的存储装置,其中,转换层包括纠错码ecc选择器,ecc选择器用于至少部分地基于所述保持期来至少从第一ecc模式和第二ecc模式选择第一ecc模式。4.如权利要求3所述的存储装置,其中,逻辑到物理映射表还将所述逻辑地址映射到第一ecc模式。5.如权利要求1所述的存储装置,其中,转换层包括编程步进电压选择器,编程步进电压选择器用于至少部分地基于所述保持期来至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压。6.如权利要求5所述的存储装置,其中,逻辑到物理映射表还将所述逻辑地址映射到第一编程步进电压。7.如权利要求1至6中的任一项所述的存储装置,其中,转换层包括延期跟踪器,延期跟踪器用于跟踪所述保持期的期满。8.如权利要求7所述的存储装置,其中,转换层被配置为确定延期数量。9.如权利要求8所述的存储装置,其中,延期跟踪器被配置为至少部分地基于延期数量来更新所述保持期。10.如权利要求7所述的存储装置,其中,延期跟踪器被配置为至少部分地基于所述保持期的期满来使第一存储设备中的所述物理地址处的所述数据无效。11.一种包括非暂时性存储介质的物品,所述非暂时性存储介质上存储有指令,所述指令在由机器执行时,导致:在存储装置处从主机接收写入请求,写入请求包括数据和所述数据的逻辑地址;确定所述数据的保持期;至少部分地基于所述保持期来选择存储装置中的物理地址以存储所述数据;更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期;以及将所述数据编程到存储装置中的所述物理地址中。12.如权利要求11所述的物品,其中:写入请求还包括所述保持期;以及确定所述保持期的步骤包括:从写入请求访问所述保持期。13.如权利要求11所述的物品,其中,确定所述保持期的步骤包括:至少部分地基于写入请求的属性来确定所述保持期。
14.如权利要求11所述的物品,其中:所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时,导致:至少部分地基于所述保持期来至少从第一纠错码ecc模式和第二ecc模式选择第一ecc模式;更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新存储装置中的逻辑到物理映射表以进一步存储第一ecc模式;以及将所述数据编程到存储装置中的所述物理地址中的步骤包括:至少部分地基于第一ecc模式将所述数据编程到存储装置中的所述物理地址中。15.如权利要求11所述的物品,其中:所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时,导致:至少部分地基于所述保持期来至少从第一编程步进电压和第二编程步进电压选择第一编程步进电压;更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新存储装置中的逻辑到物理映射表以进一步存储第一编程步进电压;以及将所述数据编程到存储装置中的所述物理地址中的步骤包括:至少部分地基于第一编程步进电压将所述数据编程到存储装置中的所述物理地址中。16.如权利要求11至15中的任一项所述的物品,其中:所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时,导致:确定所述保持期的延期数量;以及更新存储装置中的逻辑到物理映射表以存储所述逻辑地址、所述物理地址和所述保持期的步骤包括:更新存储装置中的逻辑到物理映射表以进一步存储所述延期数量。17.如权利要求16所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时,导致:确定所述保持期已经期满;以及至少部分地基于所述延期数量来更新所述保持期。18.如权利要求11至15中的任一项所述的物品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时,导致:确定所述保持期已经期满;以及至少部分地基于所述延期数量来使存储装置上的所述物理地址处的所述数据无效。19.一种用于存储装置的方法,包括:在存储装置处从主机接收读取请求,读取请求包括数据的逻辑地址;至少部分地基于所述逻辑地址来确定所述数据的物理地址;至少部分地基于所述逻辑地址来确定用于所述数据的纠错码ecc模式;从存储装置中的所述物理地址读取编码数据;至少部分地基于所述ecc模式来对编码数据进行解码,以产生所述数据;以及将所述数据从存储装置返回给主机。20.如权利要求19所述的方法,其中:从存储装置中的所述物理地址读取编码数据的步骤包括:向控制器发送第二读取请
求,第二读取请求包括所述物理地址;以及通过控制器从存储装置中的所述物理地址读取编码数据;至少部分地基于所述ecc模式来对编码数据进行解码以产生所述数据的步骤包括:通过控制器至少部分地基于所述ecc模式来对编码数据进行解码以产生所述数据;以及将所述数据从存储装置返回给主机的步骤包括:从控制器返回所述数据。

技术总结


公开了一种存储装置。所述存储装置可包括用于从主机接收写入请求的主机接口,写入请求可包括数据和所述数据的逻辑地址。所述存储装置还可包括用于数据的第一存储设备。所述存储装置还可包括用于确定所述数据的保持期的保持期确定器。所述存储装置还可包括转换层,转换层用于至少部分地基于所述保持期来选择第一存储设备中的物理地址以存储所述数据。所述存储装置还可包括用于逻辑到物理映射表的第二存储设备,逻辑到物理映射表用于将所述逻辑地址映射到所述物理地址和所述保持期。最后,所述存储装置可包括用于将所述数据编程到第一存储设备中的所述物理地址中的控制器。一存储设备中的所述物理地址中的控制器。一存储设备中的所述物理地址中的控制器。


技术研发人员:

赵冬琬 朗姆达斯

受保护的技术使用者:

三星电子株式会社

技术研发日:

2022.04.25

技术公布日:

2022/11/15

本文发布于:2024-09-21 22:18:05,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/1905.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:所述   数据   装置   步进
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议