掌桥专利:专业的专利平台
掌桥专利
首页

用于有序访问块修改存储器中的数据的系统、方法和装置

文献发布时间:2023-06-19 19:30:30


用于有序访问块修改存储器中的数据的系统、方法和装置

本申请要求于2022年3月17日提交的第63/321,086号美国临时专利申请的优先权和权益,所述美国临时专利申请通过引用包含于此。

技术领域

公开总体上涉及访问数据,并且更具体地,涉及用于有序访问块修改存储器(blockmodified memory)中的数据的系统、方法和装置。

背景技术

数据处理应用可在原始数据被处理之前使用缓冲器来存储原始数据和/或使用缓冲器存储不同处理操作之间的中间数据。数据可被存储在缓冲器中,该缓冲器可包括例如易失性存储器(诸如,动态随机存取存储器(DRAM))、非易失性存储器(诸如,闪存等)。

在本背景技术部分中公开的以上信息仅用于增强对发明原理的背景的理解,因此,它可包括不构成现有技术的信息。

发明内容

一种方法可包括:在存储器系统处接收对数据结构的写入请求,其中,存储器系统可包括具有块修改特性的存储器,并且数据结构可布置在存储器中,并且所述方法还可包括:基于写入请求,将数据存储在数据结构中;在存储器系统处接收对数据结构的读取请求;基于读取请求从数据结构读取所述数据;以及基于所述读取对所述数据进行标示以用于修改。写入请求可以是第一写入请求,所述数据可以是第一数据,并且所述方法还可包括:在存储器系统处接收对数据结构的第二写入请求,其中,第一写入请求和第二写入请求具有次序;基于第二写入请求将第二数据存储在数据结构中;以及基于读取请求、基于所述次序确定第一数据;其中,所述读取还可基于所述确定。数据结构可被存储在存储器的一个或多个逻辑连续的块中。存储器的一个或多个逻辑连续的块可包括链表。数据结构可包括先进先出(FIFO)结构。数据结构可以是第一数据结构,读取请求可以是第一读取请求,第一数据结构可被存储在存储器的块中,并且所述方法还可包括:将第二数据结构的至少一部分存储在存储器的块中;在存储器系统处接收对第二数据结构的第二读取请求;基于第二读取请求从第二数据结构读取第三数据;以及基于读取第三数据,对第三数据进行标示以用于修改。所述方法还可包括:基于所述次序获取第一数据,并且将第一数据存储在缓冲器中。所述方法还可包括:基于所述标示来修改所述存储器的块。所述方法还可包括:由存储器系统使用尾指针来访问数据结构。所述方法还可包括:基于存储第一数据来更新尾指针。所述方法还可包括:由存储器系统使用头指针来访问数据结构。所述方法还可包括:基于读取第一数据,更新头指针。尾指针可包括物理地址。所述方法还可包括:基于所述读取,从存储器系统返回所述数据。

一种系统可包括:存储器系统,包括具有块修改特性的存储器、数据生产者生器以及数据消费,其中,数据生产者可被配置为:将对存储器中的数据结构的写入请求发送给存储器系统,并且数据消费者可被配置为:将对数据结构的读取请求发送给存储器系统,其中,存储器系统可被配置为:基于写入请求,将数据存储在数据结构中;基于读取请求,执行所述数据的读取操作;以及基于读取操作来对所述数据进行标示以用于修改。写入请求可以是第一写入请求,并且所述数据可以是第一数据,数据生产者还可被配置为:将对数据结构的第二写入请求发送给存储器系统,其中,第一写入请求和第二写入请求具有次序;并且存储器系统还可被配置为:基于第二写入请求,将第二数据存储在数据结构中;以及基于读取请求、基于所述次序执行第一数据的确定;并且所述读取操作还可基于所述确定。存储器系统还可被配置为:基于所述次序获取第一数据,并且将第一数据存储在缓冲器中。存储器系统还可被配置为:将数据结构存储在存储器的一个或多个逻辑连续的块中。至少一个主机还可被配置为:将命令发送给存储器系统,并且存储器系统还可被配置为:基于所述命令创建数据结构。

一种存储装置可包括:存储介质;以及控制器,被配置为:接收对存储介质中的数据结构的第一写入请求;基于第一写入请求,将第一数据存储在数据结构中;接收对数据结构的第二写入请求,其中,第一写入请求和第二写入请求具有次序;基于第二写入请求,将第二数据存储在数据结构中;接收对数据结构的读取请求;基于读取请求、基于所述次序来执行第一数据的确定。控制器还可被配置为:基于所述确定,执行对来自数据结构的第一数据的读取操作;以及基于所述读取操作,从存储装置返回第一数据。存储介质可具有块修改特性;并且控制器还可被配置为:基于所述读取操作提供第一数据的标示以用于修改。控制器还可被配置为:基于所述标示来修改存储介质的块。控制器还可被配置为:将数据结构存储在存储介质的一个或多个逻辑连续的块中。存储介质的所述一个或多个逻辑连续的块可包括链表。数据结构可包括先进先出(FIFO)结构。控制器还可被配置为:接收命令;以及基于所述命令创建数据结构。控制器还可被配置为:接收命令,并且基于所述命令执行对数据结构的修改。所述修改可包括:改变数据结构的容量。控制器还可被配置为:接收命令;以及基于所述命令返回关于数据结构的信息。控制器还可被配置为:接收命令,并且基于所述命令返回关于存储装置的信息。

附图说明

附图不一定按比例绘制,并且在整个附图中,为了说明的目的,类似结构或功能的元件通常可由相同的参考标号或它们的相同部分表示。附图仅旨在便于描述在此描述的各种实施例。附图没有描述在此公开的教导的每个方面,并且不限制权利要求的范围。为了防止附图变得模糊,可以不示出所有的组件、连接等,并且可以不是所有的组件都具有参考标号。然而,可从附图中容易地清楚组件配置的模式。附图与说明书一起示出本公开的示例实施例,并且与具体实施方式一起用于解释本公开的原理。

图1示出根据公开的示例实施例的具有有序访问的数据结构的存储器系统的实施例。

图2示出根据公开的示例实施例的用于访问具有块修改特性的存储器的方法的实施例。

图3示出根据公开的示例实施例的用于存储装置的控制器的架构的实施例。

图4示出根据公开的示例实施例的具有对块修改存储器中的数据的有序访问的存储装置的示例实施例。

图5示出根据公开的示例实施例的用于访问有序访问数据结构的方法的实施例。

图6示出根据公开的示例实施例的有序数据结构的逻辑数据布局的示例实施例。

图7示出根据公开的示例实施例的用于有序访问数据结构的物理块链表的实施例。

图8示出根据公开的示例实施例的有序访问数据结构的另一实施例。

图9示出根据公开的示例实施例的用于有序访问数据结构的数据预获取方案的实施例。

图10示出根据公开的示例实施例的在块修改存储器中具有有序访问数据结构的存储装置架构的实施例。

图11示出根据公开的示例实施例的用于创建缓冲器的命令流的方法的实施例。

图12示出根据公开的示例实施例的用于删除缓冲器的命令流的方法的实施例。

图13示出根据公开的示例实施例的用于将数据写入缓冲器的命令流的方法的实施例。

图14示出根据公开的示例实施例的用于从缓冲器读取数据的命令流的方法的实施例。

图15示出根据公开的示例实施例的用于从缓冲器预读取数据的命令流的方法的实施例。

图16示出根据公开的示例实施例的主机设备的示例实施例。

图17示出根据公开的示例实施例的存储装置的示例实施例。

图18示出根据公开的示例实施例的用于访问具有块修改特性的存储器中的数据的方法的实施例。

具体实施方式

非易失性存储器(例如,固态驱动器(SSD)中的闪存)可用作数据缓冲器,以在原始数据被处理之前存储原始数据和/或存储不同处理操作之间的中间数据。然而,根据实现细节,非易失性存储器可存在与一些非易失性存储器的块擦除特性相关联的一个或多个挑战(诸如,垃圾收集、写入放大等)。

在一些数据处理应用中,可按顺序(例如,先进先出(FIFO)次序)存储、获得和/或处理原始数据和/或中间数据。例如,第一进程可以以与输出数据被第二进程用作输入数据相同的顺序生成输出数据。此外,如果数据被存储在两个进程之间的缓冲器中,则第一进程可以以与第二进程从缓冲器读出数据相同的顺序将数据写入缓冲器。

根据公开的示例实施例的数据存储方案可利用一些数据处理和/或数据传送的顺序特性。例如,在一些实施例中,存储系统可以以具有操作次序(例如,顺序访问))的一个或多个数据结构的形式(诸如,FIFO缓冲器)提供存储容量。因此,可按照数据源或处理操作生成数据的次序将数据传送给存储系统中的数据结构。附加地或可选地,可按照处理操作消耗数据的次序从存储系统中的数据结构传送(例如,读取)数据。根据实现细节,这样的存储方案可减少延迟、降低成本、提高效率、减少写入放大、改进数据放置、改进垃圾收集、提高服务质量(QoS)等。

在一些实施例中,可使用非易失性存储器块的链表实现数据结构,其中,数据块可包括指向列表中的下一数据块的指针。根据实现细节,这可减少或消除可使用数据结构的存储装置或其他存储器系统、主机、应用和/或进程等对逻辑地址到物理地址转换操作和/或数据结构的使用。

在可使用具有块擦除特性的非易失性存储器作为存储介质的一些实施例中,基于读取数据,数据可被标记以用于擦除(例如,无效)。例如,在一些实施例中,这种类型的基于读取的数据无效化可使用一次写入一次读取(WORO)技术被实现,在WORO技术中,数据可在按顺序被读取时被标记以用于擦除。根据实现细节,这可例如通过以块为单位和/或以可预测的方式使数据无效来提高垃圾收集的效率、减少写入放大等。

在一些实施例中,访问具有操作次序的数据结构的可预测性可使根据公开的示例实施例的存储方案能够实现预获取缓冲器,该预获取缓冲器可从相对高延迟的存储介质预获取数据并将数据放置在相对低延迟的存储介质(例如,易失性存储器)中。根据实现细节,由于顺序数据访问的可预测特性,这样的缓冲方案基本上可提供具有零未命中率或低未命中率的缓存。

公开包括与数据存储和/或访问相关的多个发明原理。在此公开的原理可具有独立的实用性并且可被单独实现,并且不是每个实施例可利用每个原理。此外,原理还可以以各种组合被实现,其中,一些组合可以以协同的方式放大各个原理的一个或多个益处。

数据处理应用可在由一个或多个源(source)生成的原始数据被处理之前使用缓冲器来存储原始数据。缓冲器还可用于存储不同处理操作(诸如,变换、过滤、转换等)之间的中间数据。缓冲器可使用易失性存储器(诸如,可提供低延迟访问的动态随机存取存储器(DRAM))来实现。然而,当将应用扩展(scale)到相对大的数据集时,易失性存储器可需要越来越多的电量和/或可变得过于昂贵。此外,易失性存储器不能例如跨电源周期(powercycle)保持数据,从而导致数据丢失。

非易失性存储器(诸如,闪存)可用于缓冲原始数据和/或中间数据。例如,可使用与非(NAND)闪存作为存储介质的固态驱动器(SSD)可用于实现用于存储原始数据和/或中间数据的数据缓冲器(例如,持久化传送缓冲器(persistent transit buffer))。根据实现细节,非易失性存储器可降低与存储数据相关联的成本和/或功耗,并且防止数据丢失。

然而,在一些实施例中,非易失性存储器可存在用作数据缓冲器的一个或多个潜在挑战。例如,一些非易失性存储器可具有这样的块擦除特性:数据可以以比其可被写入(例如,被编程)更大的单位被擦除。使用具有块擦除特性的非易失性存储器可包括垃圾收集技术的使用,在垃圾收集技术中,可被存储在整个块的各个位置处的有效数据可被移动到新位置,以使得块中的无效数据(例如,已被删除或以其他方式被标记为无效的数据)能够通过对块进行擦除而被擦除。这进而可导致写入放大,写入放大可减少可具有有限数量的写入循环的非易失性存储器的操作寿命。

与将非易失性存储器用于数据缓冲器相关联的另一潜在挑战可包括地址跟踪和/或使用逻辑地址到物理地址转换操作和/或数据结构。例如,使用SSD来实现数据缓冲器的主机可维护已经将数据存储在在SSD处的逻辑块地址(LBA)的数据结构。例如,SSD可实现附加的地址跟踪操作和/或数据结构,以在存储装置内执行LBA到物理块地址(PBA)的转换。这些操作和/或数据结构中的一些或全部可增加与将非易失性存储器用于数据缓冲器相关联的复杂性、延迟、成本、功耗等。

本公开的一些发明原理可利用一些数据处理操作和/或数据传送的一个或多个特性来实现数据存储方案,该数据存储方案根据实现细节可解决上述任何数量的潜在挑战。例如,在一些数据处理应用中,原始数据和/或中间数据可按顺序(例如,FIFO次序)被生成和/或写入缓冲器。原始数据和/或中间数据也可按顺序(例如,以数据被生成和/或被写入的相同FIFO次序)从缓冲器被读取和/或由处理操作消耗。根据公开的一些实施例可通过以具有操作次序(例如,顺序访问次序)的一个或多个数据结构(诸如,FIFO缓冲器)的形式提供数据存储容量来利用该顺序数据处理和/或传送特性。因此,数据可按照数据源或处理操作生成数据的次序被传送给存储系统中的数据结构。附加地或可选地,数据可按照处理操作消耗数据的次序从存储系统中的数据结构被传送(例如,被读取)。

本公开的一些附加发明原理可包括基于读取数据来对数据进行标示(例如,标记)以用于修改(例如,擦除)。例如,在可使用具有块擦除特性的非易失性存储器作为存储介质的实施例中,可基于读取数据来标记数据以用于擦除(例如,无效)。例如,在一些实施例中,这种类型的基于读取的数据无效化可使用一次写入一次读取(WORO)技术被实现,在WORO技术中,例如,当数据被顺序读取时,数据可被标记以进行擦除。

为了说明发明原理,可在可包括一个或多个设备(诸如,一个或多个存储装置、存储服务器、存储节点等)的数据存储系统的上下文中描述一些实施例。然而,该原理可被应用于可以以具有有序访问操作的一个或多个数据结构来布置的任何类型的存储器,和/或可具有块修改特性(诸如,块擦除特性)的任何类型的存储器。

图1示出根据公开的示例实施例的具有有序访问的数据结构的存储器系统的实施例。图1中示出的存储器系统100可包括一个或多个存储器102以及一个或多个控制器104。存储器102的至少一部分可被布置为具有有序访问特性(诸如,FIFO特性、块访问特性、缓存线访问特性等)的一个或多个数据结构106。数据可由一个或多个数据生产者108(也可被称为生产者)写入到数据结构106。数据可由一个或多个数据消费者110(也可被称为消费者)从数据结构106读取。

在一些实施例中,数据生产者108和/或数据消费者110可被实现为一个或多个主机、应用、进程等或它们的组合。在一些实施例和/或情况下,数据生产者108和数据消费者110可以是部分或完全相同的实体(例如,主机、应用、进程等)。根据实现细节,图1中示出的存储器系统100可减少延迟、降低成本、提高效率、减少写入放大、改进数据放置、改进垃圾收集、提高服务质量(QoS)等。

图2示出根据公开的示例实施例的用于访问具有块修改特性的存储器的方法的实施例。图2中示出的方法可在操作212处开始,在操作212中,存储在具有块修改特性的存储器的一个或多个块中的数据可从存储器被读取。该方法可继续进行至操作214,在操作214中,从存储器读取的数据的至少一部分可被标示以用于修改。例如,在操作212处读取的数据可在操作214处被无效(例如,被标记以用于擦除、垃圾收集等)。在一些实施例中,图2中示出的方法可实现WORO技术。

该方法可继续进行至操作216,操作216可确定将从存储器读取的下一数据(如果有的话)。例如,如果存储在具有块修改特性的存储器的一个或多个块中的数据被布置在具有有序访问特性的数据结构(诸如,FIFO)中,则操作216可选择将从FIFO读取的下一数据。在其他实施例中,数据可根据随机访问策略被存储,在这种情况下,操作216可基于来自主机或其他数据消费者的存储器访问请求来确定将被读取的下一数据。在一些实施例中,该方法可在存储器的一个或多个块中的最后的数据已经被读取和/或被标示以用于修改之后终止。在一些实施例中,其中所有或几乎所有数据已被标示以用于修改(例如,擦除)的块可被修改(例如,擦除)。

根据实现细节,图2中示出的方法可例如通过以块为单位和/或以可预测的方式使数据无效来提高垃圾收集的效率、减少写入放大等。

图1和图2中示出的实施例具有独立的实用性,并且可被单独实现。然而,图1和图2中示出的原理可被组合以生成附加实施例,根据实现细节,附加实施例可以以协同的方式放大各个原理的一个或多个益处。例如,一些实施例可如下面更详细地描述的那样使用具有块修改特性的存储器来实现具有有序访问特性的数据结构,以提供WORO-FIFO存储器系统(例如,WORO-FIFO存储装置),WORO-FIFO存储器系统可将存储容量作为一个或多个FIFO的集合提供给一个或多个数据生产者和/或消费者。根据实现细节,这样的WORO-FIFO存储器系统可容纳可按顺序方式访问原始数据和/或中间数据的工作负载。

图3示出根据公开的示例实施例的用于存储装置的控制器的架构的实施例。图3中示出的控制器304可部分地或完全地实现或用于实现在此公开的控制器、存储器访问方案、存储装置等的任何实施例。在一些实施例中,图3中示出的一个或多个元件可具有可与在其他实施例中由以相同数字结尾的参考标号指示的一个或多个相应的元件类似的结构和/或功能。

图3中示出的控制器304可包括主机接口318、介质转换层(MTL)320、装置存储器322和介质接口324。在一些实施例中,控制器304中的任何组件可被实现为单独的组件(例如,装置存储器322),并且一个或多个附加组件可被集成到控制器304中(例如,加速器)。

一组或多组存储介质302a、……、302N(可被统称为302)可分别通过一条或多条介质总线327a、……、327N(可被统称为327)连接到介质接口324,以分别形成一个或多个介质通道329a、……、329N(可被统称为329)。

在一些实施例中,控制器304可与存储介质302一起使用,存储介质302可包括固态介质、磁介质、光学介质等或它们任何组合。固态介质的示例可包括闪存(诸如,NAND闪存(可例如使用一个或多个单层单元(SLC)、多层单元(MLC)、三层单元(TLC)和/或四层单元(QLC)构造或使用任何类型的工艺制造的它们的任何组合被实现))、持久化存储器(PMEM)(诸如,交叉网格非易失性存储器)、具有体电阻变化的存储器、相变存储器(PCM)等,或它们的任何组合。

在一些实施例中,控制器304可用于这样的存储装置:可使用任何连接器配置(诸如,串行ATA(SATA)、小型计算机系统接口(SCSI)、串行连接SCSI(SAS)、M.2、U.2、U.3等)以任何形状因子(诸如,3.5英寸、2.5英寸、1.8英寸、M.2、企业和数据中心SSD形状因子(EDSFF)、NF1等)实现。在一些实施例中,控制器304可用于可完全或部分地与服务器机箱、服务器机架、数据室(dataroom)、数据中心、边缘数据中心、移动边缘数据中心和/或它们的任何组合一起实现和/或结合使用的存储装置、存储服务器、存储节点等。

在一些实施例中,控制器304和/或主机接口318可使用任何类型的互连介质和/或接口、网络介质和/或接口、存储接口和/或其任何协议(诸如,外围组件互连快速(PCIe)、非易失性存储器快速(NVMe)、网络上的NVMe(NVMe-OF)、NVMe键-值(NVMe-KV)、SATA、SCSI、以太网、传输控制协议/互联网协议(TCP/IP)、直接存储器访问(DMA)、远程DMA(RDMA)、融合以太网上的RDMA(ROCE)、FibreChannel、InfiniBand、iWARP等或它们的任何组合)进行通信。

在一些实施例中,控制器304和/或主机接口318可实现一致性(例如,存储器一致性、缓存一致性等)接口和/或存储器语义接口(诸如,计算快速链接(CXL),和/或一致性协议(诸如,CXL.mem、CXL.cache和/或CXL.IO))。一致性接口和/或存储器语义接口和/或协议的其他示例可包括Gen-Z、一致性加速器处理器接口(CAPI)、用于加速器的缓存一致性互连(CCIX)等。

在一些实施例中,在此公开的任何功能(包括图3中示出的任何功能和/或组件(诸如,控制器304、主机接口318、介质转换层(MTL))320和/或介质接口324))可使用硬件、软件或它们的组合来实现,硬件、软件或它们的组合包括:执行存储在任何类型的存储器中的指令的组合逻辑、顺序逻辑、一个或多个定时器、计数器、寄存器和/或状态机、一个或多个复杂可编程逻辑器件(CPLD)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、处理单元(可被称为处理器)(例如,微控制器)、中央处理器(CPU)(诸如,复杂指令集计算机(CISC)处理器(诸如,x86处理器)和/或精简指令集计算机(RISC)处理器(诸如,RISC-V处理器和/或ARM处理器)、图形处理器(GPU)、神经处理器(NPU)、张量处理器(TPU)等,或它们的任何组合。在一些实施例中,一个或多个组件可被实现为片上系统(SOC)。

再次参照图3,在一些实施例中,控制器304通常可通过主机接口318例如通过接收命令(例如,存储器访问命令)317a和/或逻辑地址317b,以及通过主机接口318发送响应(例如,完成)319,来管理和/或提供一个或多个主机、应用、进程和/或其他数据生产者和/或消费者对存储介质302的访问。在一些实施例中,命令317a和/或响应319可伴随有相应的数据,而在其他实施例中,相应的数据可例如使用DMA、RDMA等被发送。在一些实施例中,数据写入和/或读取输入和/或输出(IO或I/O)命令以及各种介质管理命令(诸如,标识、设置特征、获取日志等)可在执行至和/或从一个或多个数据生产者和/或消费者(例如,存储服务器主机系统存储器)的用户数据传送时通过主机接口318被发送。

在一些实施例中,介质转换层320可接收存储器访问命令和/或逻辑地址(例如,LBA),并且将逻辑地址转换为到介质接口324的物理地址(例如,PBA)以访问存储介质302。因此,在一些实施例中,用于后台操作321的内部数据和/或信息以及用户数据323可在介质转换层320与介质接口324之间传递。在一些实施例中,介质转换层320可使用装置存储器322(例如,DRAM)以用于各种目的(诸如,存储用于逻辑地址到物理地址转换(例如,LBA到PBA转换)的地址转换表)。在一些实施例中,介质接口324可使用用户数据到存储介质302的任何映射来访问存储介质302。

例如,在一些实施例中,主机可将提供数据的写入命令和数据被存储的对应LBA发送给控制器304。主机可跟踪已经被发送给控制器304的数据的LBA。介质转换层320可将由主机发送的LBA转换为存储介质302中的对应PBA。当主机读取数据时,主机可将提供相关联LBA的读取命令发送给控制器304以获得感兴趣的数据。然后,控制器304可将从主机接收的LBA转换为存储介质302的PBA以获取数据。因此,根据实现细节,主机(或其他数据生产者)可维护数据结构(例如,LBA的表)以跟踪已经被存储的数据的逻辑位置,并且介质转换层320可维护数据结构(例如,LBA到PBA转换表)以跟踪已经被存储的数据的物理位置。

尽管图3中示出的控制器304不限于任何特定的实现细节,但是在一些实施例中,它可用于实现可将闪存(例如,一个或多个NAND闪存裸片)用于存储介质302中的一些或所有的SSD。在这样的实施例中,介质转换层320可使用闪存转换层(FTL)来实现,并且介质接口324可使用闪存接口来实现。在一些实施例中,FTL可提供由主机(例如,存储服务器)使用的逻辑地址与在存储介质302中使用的闪存中的数据的实际物理位置之间的映射。

在一些实施例中,一些存储介质302(例如,非易失性存储器(诸如,NAND闪存))可以以页((例如,具有例如8KB至16KB的页大小的NAND闪存))的颗粒度被读取或写入,并且存储介质的页可在使用新数据对其进行重新编程之前被擦除。然而,在一些实施例中,一些存储介质可具有擦除颗粒度可以是多个页的块(例如,块中的128页至256页)的擦除特性。擦除和编程的颗粒度可不同的实施例可包括在对第一块进行擦除之前将一个或多个页(可位于整个第一块中)的有效数据迁移到第二块的附加工作。

在一些实施例中,垃圾收集(GC)处理可用于释放部分填充的数据块,以为更多数据腾出空间。例如,将数据页随机写入到块可促使介质转换层320(例如,FTL)实现垃圾收集处理,以从已经被覆写的碎片化的存储介质块回收空间。在一些实施例中,当垃圾收集被完成时,擦除块中的一个或多个页可被再利用和/或添加到由介质转换层维护的一列空闲页。

一些类型的存储介质302(例如,非易失性存储器(诸如,NAND闪存))可仅被编程和/或擦除有限次数。这可被称为存储器在存储介质的寿命期间可维持的编程和/或擦除循环(P循环和/或E循环)的最大数量。然而,在一些实施例中,并且在一些情况下,对从主机接收的相对少量的数据进行重新编程(例如,写入)可包括对较大量的数据进行擦除和/或重写。例如,腾出空间来写入从主机接收的相对少量的数据可包括:通过将现有数据写入第二存储器块以擦除第一存储器块来重新定位来自第一存储器块的现有数据。然而,重新定位未改变的数据会增加写入放大和/或减少存储介质的寿命。

在一些实施例中,写入放大可使用写入放大因子(WAF)被表示,并且可例如通过提交给存储介质302的写入与从主机系统接收的写入的比来测量。增加写入放大会例如通过使用过量的编程循环和/或擦除循环来减少存储介质寿命。在一些实施例中,如果将在同一时间或大约同一时间被无效的数据被相对靠近地放置在一起(例如,在同一页、块等中),则这可帮助减少垃圾收集开销和/或避免写入放大。然而,根据实现细节,介质转换层320可能无法访问可使其能够做出这种类型的数据放置决策的应用级信息。此外,主机、应用、进程和/或其他数据生产者可对介质转换层320如何在存储介质302中布置数据几乎没有控制或没有控制。

在一些实施例中,介质转换层320可控制各种后台操作(诸如,垃圾收集)。因此,与IO命令(例如,来自主机)相关的操作可与后台操作共存,并且这两种类型的存储介质访问可彼此竞争存储介质带宽,从而负面地影响控制器304的IO性能。例如,与通道和/或总线访问和/或执行与后台操作(诸如,垃圾收集)相关联的附加编程和/或擦除循环相关联的开销可消耗存储介质带宽,该存储介质带宽可以以其他方式用于(例如,通过主机、应用、进程和/或其他数据生产者和/或消费者的)IO读取和/或写入操作。因此,改善或优化垃圾收集可提高存储装置的效率,为写入和读取操作留下更多带宽,并且提高存储介质302的可靠性和/或耐久性。

图4示出根据公开的示例实施例的具有对块修改存储器中的数据的有序访问的存储装置的示例实施例。图4中示出的存储装置400可实现例如WORO-FIFO数据访问方案。存储装置400可部分地或全部地实现或用于实现在此公开的控制器、存储器访问方案、存储装置等的任何实施例。在一些实施例中,图4中示出的一个或多个元件可具有可与在其他实施例中由以相同数字结尾的参考标号指示的一个或多个相应元件类似的结构和/或功能。

图4中示出的存储装置400可包括控制器404和一个或多个存储介质402。控制器404可包括主机接口418、介质转换层420和/或缓冲器逻辑430。在一些实施例中,控制器404可包括介质接口层、装置存储器和/或用于实现存储装置的其他组件。

主机接口418可使用任何类型的互连传输介质和/或网络传输介质、接口和/或协议(例如,PCIe上的NVMe或网络结构)来实现。一个或多个存储介质402可使用任何一种或多种类型的存储介质(例如,具有块修改(例如,块擦除)特性的存储器(诸如,NAND闪存))来实现。介质转换层420可使用与一种或多种类型的存储介质402对应的任何类型的转换层(例如,与一种或多种存储介质402中的NAND闪存对应的闪存转换层)来实现。

在一些实施例中,缓冲器逻辑430可被配置为实现一个或多个有序访问数据结构,在该示例中,该有序访问数据结构可以是WORO-FIFO缓冲器406a、……、406N。在一些实施例中,缓冲器逻辑430可被配置为实现标示方案,该标示方案可基于读取数据(例如,WORO数据无效方案)来标示(例如,标记)数据以用于修改(例如,擦除)。

图4中示出的存储装置400可例如以WORO-FIFO缓冲器406a、……、406N(可被统称为406)的形式为主机401处的一个或多个生产者408和/或消费者410提供存储容量。出于说明的目的,在图4中示出的示例实施例中仅示出可以是主机401的一部分的一个生产者408和一个消费者410,但是以任何配置布置的任何数量的生产者、消费者、主机、应用、进程等可访问存储装置400。在一些实施例中,主机401可通过可使用任何类型的互连、网络等实现的连接403(例如,使用主机接口418)连接到存储装置400。

在一些实施例中,生产者408可例如在由尾指针432a指示的尾位置处将数据写入WORO-FIFO缓冲器406a,该尾指针432a可指向WORO-FIFO缓冲器406a的下一可用存储器位置。写入WORO-FIFO缓冲器406a的尾部的处理可被称为推送数据或推送操作,并且可包括:缓冲器逻辑430和/或介质转换层420将生产者408提供的数据写入由尾指针432a指向的当前可用位置,并且在数据被写入WORO-FIFO缓冲器406a之后修改尾指针432a以指向下一可用的存储器位置。

作为另一示例,在一些实施例中,消费者410可在由头指针434a指示的头位置处从WORO-FIFO缓冲器406a读取数据,头指针434a可指向WORO-FIFO缓冲器406a中的最旧存储器条目(例如,存储器中的第一条目)。从WORO-FIFO缓冲器406a的头部读取的处理可被称为弹出数据或弹出操作,并且可包括:缓冲器逻辑430和/或介质转换层420读取由头指针434a当前指向的位置处的数据条目,将数据发送给消费者410,以及在先前最旧的存储器条目从WORO-FIFO缓冲器406a被读取之后修改头指针434a以指向下一最旧的存储器条目。

在一些实施例中,缓冲器逻辑430可例如通过分别维持WORO-FIFO缓冲器406a、……、406N中的每个的尾指针432a、……、432N(未示出)和/或头指针434a、……、434N(未示出)来维持WORO-FIFO缓冲器406a、……、406N中的一个或多个的先进先出次序。因此,将数据推送到WORO-FIFO缓冲器406a、……、406N中的一个和/或从WORO-FIFO缓冲器406a、……、406N中的一个弹出数据的步骤可仅包括主机401发送具有特定缓冲器的标识符的推送命令和/或弹出命令。根据实现细节,主机401可不跟踪缓冲器中的数据的一个或多个块地址,因此,可消除用于跟踪块地址的数据结构(例如,LBA)。此外,减少或消除对块地址的跟踪可降低复杂度和/或简化主机401的LBA管理。在一些实施例中,控制器404和/或缓冲器逻辑430可使用一个或多个命令(例如,一个或多个NVMe命令)来实现WORO-FIFO缓冲器406。

在一些实施例中,缓冲器逻辑430可例如通过在数据从缓冲器406中的一个或多个被读取时对数据进行标示以用于修改(例如,通过将数据进行标记以用于擦除来使数据无效)来实现WORO技术。根据实现细节,这可改进或优化一个或多个缓冲器406的垃圾收集。例如,如果缓冲器406中的一个或多个使用具有块擦除特性的存储介质402来实现,并且缓冲器406被布置在块中(例如,在全部的多个块中,或者在可小于块的缓冲器或缓冲器406的部分的情况下,完全在块内),则整个块可被无效(例如,被标示以用于擦除),因为数据以FIFO次序从各个块被顺序地读取,所以减少或消除将可位于(例如,随机分散在)无效数据之中的有效数据移出块以擦除该块的需要。

因此,在一些实施例中,根据实现细节,当数据被顺序地写入存储介质402和/或从存储介质402被顺序地读取时,存储装置400可利用一些工作负载的顺序访问特性来改进或优化存储介质402(例如,闪存)的管理和/或介质转换层420(例如,FTL)的一个或多个功能。例如,数据可被有效地或最佳地放置在连续页中和/或存储介质的同一块中,以减少或最小化写入放大因子(WAF)、提高存储介质耐久性、降低功耗等。作为另一示例,介质转换层420可实现更粗颗粒度的地址转换(例如,头指针和/或尾指针而不是LBA到PBA转换),这可降低介质转换层420的复杂度、成本、功耗等。作为另一示例,与LBA到PBA表相比,介质转换层420可使用更少的装置存储器(例如,DRAM)来跟踪WORO-FIFO缓冲器和指针,从而减少装置储器的量、成本、功耗等。作为又一示例,根据公开的示例实施例的WORO-FIFO缓冲器方案可减少可用于超量供应的存储介质的量,从而降低成本和/或增大存储装置400的可用容量。此外,在一些实施例中,根据实现细节,包括垃圾收集、再利用等的一个或多个介质转换层处理可被改进(例如,细调),以利用具有顺序数据处理和/或传送特性的工作负载。

在一些实施例中,存储装置400可仅使用如上所述的FIFO主机接口来实现。然而,在其他实施例中,存储装置400可使用混合和/或可配置接口来实现,该混合和/或可配置接口可基于模式切换机制等例如同时适应FIFO和块数据访问两者。

在一些实施例中,缓冲器逻辑430可使用硬件、软件或它们的任何组合(包括组合逻辑、顺序逻辑、一个或多个定时器、计数器、寄存器、状态机、易失性存储器(诸如,DRAM和/或SRAM)、非易失性存储器(诸如,闪存)、CPLD、FPGA、ASIC和/或执行存储在任何类型的存储器中的指令的处理器等,或它们的任何组合)被实现。

表1示出根据公开的示例实施例的命令集和对应参数的示例实施例,该命令集和对应参数可例如由主机、存储装置等使用以实现用于访问一个或多个有序访问数据结构(例如,WORO-FIFO缓冲器)的方案。例如,在一些实施例中,一个或多个主机、应用、进程和/或其他生产者和/或消费者等可使用表1中描述的命令中的一个或多个来对存储装置或其他存储器系统中的FIFO缓冲器进行创建、配置、管理等。尽管表1中示出的命令不限于任何特定的实现细节,但是在一些实施例中,命令中的一个或多个可被实现为NVMe命令。

表1

参照表1,“识别”(Identify)命令可用于发现由存储装置或其他存储器系统提供的一个或多个特征,该存储装置或其他存储器系统可返回以下参数中的一个或多个。参数“可支持的缓冲器的最大数量”(Maximum Number of Buffers Supported)可表示存储装置或其他存储器系统可支持多少个WORO-FIFO缓冲器或其他有序访问数据结构。参数“缓冲器的最大可用容量”(Maximum Capacity Available for Buffers)可表示例如对于可例如以字节、双字、页、块等表示的所有数据结构可用的存储器空间的总量。参数“容量的颗粒度”(Granularity of Capacity)可表示例如以字节、双字、页、块等表示的可用存储器空间的颗粒度。在一些实施例中,响应于识别命令而返回的参数中的一个或多个可以以识别数据结构(Identify data structure)的形式返回。

创建缓冲器(Create Buffer)命令可用于创建WORO-FIFO缓冲器或其他有序访问数据结构。例如,在一些实施例中,主机系统软件(诸如,存储装置驱动器)可使用“创建缓冲器”命令来创建一个或多个数据FIFO。驱动器可指定参数“缓冲器ID(Buffer ID)”,“缓冲器ID(Buffer ID)”可用于识别新创建的缓冲器。驱动器还可指定参数“缓冲器容量(BufferCapacity)”,“缓冲器容量(Buffer Capacity)”用于表示将被分配给新创建的缓冲器的存储容量的量。可例如以与响应于“识别”命令而返回的“容量的颗粒度”相同的单位来表示容量。在一些实施例中,装置驱动器可使用响应于“识别”命令而返回的参数“缓冲器的最大可用容量”来理解有多少容量可用于创建缓冲器。

“删除缓冲器”(Delete Buffer)命令可用于移除由参数“缓冲器ID”指示的现有的WORO-FIFO缓冲器或其他有序访问数据结构。在一些实施例中,在删除缓冲器时,被删除的缓冲器的容量可被添加到响应于“识别”命令而返回的参数“缓冲器的最大可用容量”Maximum Capacity Available for Buffers。

“设置特征”(Set Feature)命令可用于改变由参数“缓冲器ID”指示的现有WORO-FIFO缓冲器或其他有序访问数据结构的被分配的存储容量。参数“变化容量”(ChangeCapacity)可表示多少容量将被添加到现有缓冲器的当前容量或从现有缓冲器的当前容量减去多少容量(例如,以响应于“识别”命令而返回的参数“容量的颗粒度”表示的单位)。在一些实施例中,添加到现有缓冲器容量的量可从响应于“识别”命令而返回的参数“缓冲器的最大可用容量”中减去,或者从现有缓冲器移除的容量的量可被添加到该参数。参数“重置指针”(Reset Pointers)可以是表示现有头指针和/或尾指针是要被重置(例如,丢弃缓冲器的当前内容以使缓冲器为空)还是保持不变(例如,维持缓冲器的当前内容)的布尔值。

“获取特征”(Get Feature)命令可用于获得由参数“缓冲器ID”指示的与现有WORO-FIFO缓冲器或其他有序访问数据结构相关的各种运行时间信息。参数“当前数据占用率”(Current Data Occupancy)可返回当前缓冲器深度或缓冲器的数据占用率,而参数“当前空闲空间”(Current Free Space)可返回缓冲器的当前空闲空间。在一些实施例中,参数“当前活跃的缓冲器的数量”(Current Number of Active Buffers)还可返回当前活跃的WORO-FIFO缓冲器和/或其他有序访问数据结构的数量。

“推送”(Push)命令可例如在运行时间用于将数据写入由参数“缓冲器ID”指示的特定的WORO-FIFO缓冲器或其他有序访问数据结构中。参数“数据大小”(Data Size)可表示将被(例如,以字节、双字、页、块、容量的颗粒度等为单位)写入的数据量。参数“源地址”(Source Address)可表示例如在主机存储器中将被传送的数据的起始地址。在一些实施例中,可使用DMA、RDMA等(例如,由存储装置控制器)将数据从主机存储器传送到由参数“缓冲器ID”指示的WORO-FIFO缓冲器或其他有序访问数据结构。在一些实施例中,参数“源地址”可包括单个连续地址、一组地址、链表等。

“弹出”(Pop)命令可例如在运行时间用于从由参数“缓冲器ID”指示的特定WORO-FIFO缓冲器或其他有序访问数据结构读取数据。参数“数据大小”可表示将(例如,以字节、双字、页、块、容量的颗粒度等为单位)被读取的数据量。参数“目的地地址”(DestinationAddress)可表示例如在主机存储器中数据可被传送到的位置的起始地址。在一些实施例中,可使用DMA、RDMA等(例如,由存储装置控制器)将数据从由参数“缓冲器ID”指示的WORO-FIFO缓冲器或其他有序访问数据结构传送到主机存储器。在一些实施例中,参数“目的地地址”可包括单个连续地址、一组地址、链表等。在一些实施例中,参数Move_Discard可以是表示数据在从由参数“缓冲器ID”指示的缓冲器被读取之后是可被移动到由参数“目的地地址”指示的主机存储器位置还是被丢弃的布尔值。例如,在一些情况下,主机可不使用从缓冲器弹出的实际数据,而是可仅意在将头指针(例如,读指针)移动到缓冲器中的下一条目。

在一些实施例中,控制器和/或介质转换层可针对一个或多个数据结构(例如,WORO-FIFO缓冲器)维护一个或多个动态容量可用性统计。例如,主机可使用“获取特征”命令来查询目标缓冲器的当前消耗。主机可使用“设置特征”命令来使用返回的数据重新配置缓冲器ID、缓冲器容量、重置缓冲器指针等。然后,控制器和/或介质转换层可更新表2中的一个或多个相应字段以反映这些变化。

图5示出根据公开的示例实施例的用于访问有序访问数据结构的方法的实施例。图5中示出的实施例可例如与在此描述的任何实施例(包括图1、图2、图3或图4中示出的实施例)一起使用。为了说明原理,图5中示出的实施例可在主机访问缓冲器(例如,FIFO缓冲器)的上下文中描述,但该原理可被应用于访问具有有序访问特性的任何数据结构的任何应用、进程和/或任何数据生产者和/或消费者。

该方法可在主机可创建缓冲器的操作536-1处开始。例如,主机可使用如上所述的“创建缓冲器”命令,在使用具有块擦除特性的存储介质的存储装置处创建WORO-FIFO缓冲器。在操作536-2处,主机可例如使用如上所述的“推送”命令将第一数据条目推送到缓冲器中。如果主机具有要推送到缓冲器中的附加数据条目,则它可如箭头537-1所示重复操作536-2,直至主机没有更多的数据条目要存储在缓冲器中为止。在一些实施例中,存储在缓冲器中的数据可由可已经执行了第一处理操作(诸如,变换、过滤操作、转换等)的(例如,在主机处运行的)第一应用或进程生成。

所述方法接着可如由箭头537-2所示继续进行至操作536-3,在操作536-3处,主机可例如使用如上所述的“弹出”命令从缓冲器弹出数据条目。如果主机需要来自缓冲器的附加数据条目,那么主机可如箭头537-3所示重复操作536-3,直至主机已获得其可需要的所有数据条目为止。在一些实施例中,当每个数据条目从缓冲器中被弹出时,它可被标示以用于修改(例如,通过将数据条目进行标记以用于擦除和/或垃圾收集来使数据条目无效)。在一些实施例中,从缓冲器弹出的数据可由可对数据执行第二处理操作(例如,变换、过滤操作、转换等)的(例如,在主机处运行的)第二应用或进程使用。

在一些实施例中,主机可在操作536-2处将数据推送到缓冲器中(包括根据需要如箭头537-1所示循环以将多个数据条目推送到缓冲器中)与在操作536-3处从缓冲器弹出数据(包括根据需要如箭头537-3所示循环以从缓冲器弹出多个数据条目)之间进行多次(例如,操作536-3可如箭头537-4所示返回至操作536-2),每次对数据执行不同的处理操作。

如果在操作536-3处主机不再需要缓冲器进行进一步操作,则它可继续进行至操作536-4,在操作536-4中,主机可例如使用如上所述的“删除缓冲器”命令来删除缓冲器。

图6示出根据公开的示例实施例的有序数据结构的逻辑数据布局的示例实施例。图6中示出的实施例可用于例如实现在此公开的任何有序访问数据结构(例如,WORO-FIFO)(包括图1和图4中示出的那些)。

参照图6,数据结构可形成在物理存储器块640-1、……、640-N中,出于说明的目的,物理存储器块640-1、……、640-N按顺序被示出,但物理存储器块640-1、……、640-N可以以任何配置布置在任何存储介质中的一个或多个通道、存储器装置等中。

数据结构可由物理存储器块640-1、……、640-N中的任何一个或多个的一个或多个部分(以对角线阴影展示)形成。在图6中示出的示例中,数据结构的第一页642-1可位于物理存储器块640-3中由头指针644指向的头指针物理地址(HPPA)处。第一页642-1可位于例如物理存储器块640-3内的读取页偏移处。在一些实施例中,HPPA可被称为头指针。

包括第一页642-1和可能的一个或多个附加页的数据结构可占用使用对角线阴影示出的物理存储器块640-3的一部分。数据结构可占用的下一物理存储器块640-5的物理块地址PBA-1可被存储在第一物理存储器块640-3中(例如,在物理存储器块640-3的末尾或尾部)。因此,物理块地址PBA-1可如箭头646-1所示指向下一物理存储器块640-5。

在图6中示出的示例中,数据结构还可占用如由对角线阴影所示的物理存储器块640-5的全部。数据结构可占用的下一物理存储器块的物理块地址PBA-2可被存储在物理存储器块640-5中(例如,在物理存储器块640-5的末尾或尾部)。因此,物理块地址PBA-2可如箭头646-2所示指向下一物理存储器块。(由数据结构占用的下一物理存储器块可位于物理存储器块640-1、……、640-N的由省略号表示的区域中,从而可不被明确地示出)。

数据结构可占用任何数量的附加物理存储器块640,直至并包括物理存储器块640-16的一部分(由对角线阴影表示),物理存储器块640-16可由存储在先前占用的物理存储器块(未示出)中的物理块地址PBA-(M-1)(未示出)如箭头646-(M-1)所示地指向,其中,M可表示可至少部分地被数据结构占用的物理存储器块640的总数。在图6中示出的示例中,数据结构可在页642-P(其中,P可表示数据结构中的页的总数)处结束,页642-P可位于物理存储器块640-16内的写入页偏移处。在一些实施例中,数据结构的最后一页642-P可位于由尾指针648指向的尾指针物理地址(TPPA)处。在一些实施例中,TPPA可被称为尾指针。

因此,由对角线阴影表示的数据结构可形成链表,在链表中,每个物理存储器块(除了最后一块)可包括下一物理存储器块的物理块地址。

在一些实施例中,属于同一数据结构(例如,同一FIFO缓冲器)的数据可被存储在一起。此外,如果属于同一数据结构的数据不与来自其他数据结构的数据混合,则可例如通过在数据从FIFO数据结构被顺序读取时使全部的数据块无效来简化垃圾收集。

在一些实施例中,装置控制器和/或介质转换层(例如,FTL)可确定数据结构的数据在例如存储介质的物理存储器块640-1、……、640-N内的放置。在一些实施例中,装置控制器和/或介质转换层可管理用于一个或多个数据结构(例如,FIFO缓冲器)的链表。例如,当数据块从缓冲器读取或被写入缓冲器时,头指针和/或尾指针可被更新以适应新读取或写入的数据。头指针和/或尾指针可被存储在例如FTL表中。在一些实施例中,数据结构的总大小可以是使用具有块修改(例如,擦除)特性的存储器的存储介质中的块大小的倍数。在一些实施例中,针对有序访问数据结构使用顺序写入和/或读取序列可使装置控制器(例如,介质转换层)能够通过仅存储头指针和尾指针来管理数据结构。根据实现细节,这可减少或消除可用于逻辑地址到物理地址(例如,LBA到PBA)转换的较大数据结构。

表2示出根据公开的示例实施例的可用于管理一个或多个数据结构的表的实施例的一些示例数据。例如,装置控制器和/或介质转换层(例如,FTL)可使用表2来管理存储装置中的FIFO缓冲器(例如,WORO-FIFO缓冲器)。出于说明的目的,表2中示出的实施例可假设16KB的页大小和4M的块大小,但是原理不限于任何特定的实现细节,并且其他类型的数据结构可被使用。该表可被存储在例如装置存储器(诸如,图3中示出的装置存储器322)中。

表2

参照表2,每行可包括与由第一列中的缓冲器ID标识的缓冲器相关的信息。第二列可表示缓冲器ID当前是否有效(例如,相应的缓冲器尚未被删除)。第三列、第四列和第五列可分别表示由缓冲器ID指示的缓冲器的当前总容量、当前占用空间和当前空闲空间。第六列可包括相应缓冲器的头指针物理地址(HPPA),头指针物理地址(HPPA)可例如基于包括缓冲器的存储介质(例如,闪存)的通道、存储器装置号和装置内的地址被表达。第七列包括相应缓冲器的尾指针物理地址(TPPA),尾指针物理地址(TPPA)可例如基于包括缓冲器的存储介质(例如,闪存)的通道、存储器装置号和装置内的地址被表达。第八列可包括由TPPA指示的块内的写入页,并且第九列可包括由HPPA指示的块内的读取页。在一些实施例中,读取页偏移可被视为HPPA的部分,并且写入页偏移可被视为TPPA的部分。

在一些实施例中,存储装置控制器和/或介质转换层可维护数据结构(诸如,表2),以跟踪存储装置中的存储介质内的缓冲器位置。数据结构(诸如,表2)可使存储装置控制器和/或介质转换层能够跟踪PBA信息和页偏移值,以确定数据可被写入(例如,被推送到)给定缓冲器和/或从给定缓冲器读取(例如,弹出)数据的存储器位置。因为由缓冲器ID 6指示的缓冲器可为空,所以该缓冲器的HPPA、TPPA、写入页偏移和/或读取页偏移可为零,从而,可能尚未为缓冲器分配数据块。

在一些实施例中,HPPA(也可被称作头指针)可指示下一数据应从其被读取的物理块地址(例如,以服务于来自主机的弹出命令)。读取页偏移可提供由HPPA指定的数据从其被读取的块内的页号。当数据被读取时,读取页偏移可在表2中被更新。当块被完全读出时,可例如使用可嵌入在缓冲器中的当前块中并且可指向下一物理存储器块的块指针(例如,物理块地址(诸如,图6中示出的PBA-1))在表2中更新HPPA。

在一些实施例中,TPPA(也可被称为尾指针)可指示数据可被写入(例如,以服务于来自主机的推送命令)的下一空闲存储器位置的物理块地址。写入页偏移可提供由TPPA指定的数据可被写入的块内的页编号。当数据被写入时,写入页偏移可在表2中被更新。当由TPPA指定的当前块变满时,新的空闲存储器块(例如,来自物理存储器空间中的任何地方)可被分配作为下一存储器块,并且下一块的地址可被嵌入当前块(例如,以物理块地址的形式(诸如,图6中示出的PBA-1))中。新的块地址也可在表2的对应TPPA列中被更新。

在一些实施例中,并且根据实现细节,根据公开的示例实施例的使用具有有序访问的数据结构(例如,FIFO缓冲器)的系统架构可减少系统使用的存储器(例如,DRAM)的量。在具有可执行LBA到PBA转换的FTL的存储装置中,FTL可维护可以以页的颗粒度跟踪地址的映射表。例如,具有4KB的逻辑页大小、4MB的擦除块大小和可每个逻辑页使用4字节的映射表的存储装置对于1TB存储装置的映射表可需要大约1GB的存储器开销。相比之下,根据公开的示例实施例的具有相同页大小、块大小和地址大小但以FIFO缓冲器的形式实现存储容量的存储装置可仅使用约1MB的存储器用于1TB存储装置的头指针和/或尾指针的表。此外,使用根据公开的示例实施例的以FIFO缓冲器的形式实现存储容量的存储装置,成本和/或功耗可被降低。

图7示出根据公开的示例实施例的用于有序访问数据结构的物理块链表的实施例。图7中示出的实施例可实现例如具有HPPA(例如,头指针)和TPPA(例如,尾指针)的FIFO缓冲器,HPPA可提供缓冲器的头部处物理存储器的块的物理地址,TPPA可提供缓冲器的尾部处物理存储器的块的物理地址。图7中示出的块可被示出为具有它们各自的物理地址(例如,通道编号、存储器装置编号、装置内的地址等(例如,如表2中所示))。

实际数据结构(例如,FIFO缓冲器)749可占用在无阴影示出的块750-1、……、750-N。当数据块被添加到数据结构和/或从数据结构读取时,数据结构通常可向下行进。因此,数据结构上方的阴影块752-1和752-2可先前已经是数据结构的一部分,但是当数据从数据结构被读取(被弹出)时被擦除。类似地,阴影块754-1、……、754-M可以是等待被分配给数据结构的空(例如,先前擦除的)块。在一些实施例中,图7中示出的物理块可如箭头755所示作为循环缓冲器操作。

图8示出根据公开的示例实施例的有序访问数据结构的另一实施例。在图8中示出的实施例中,第一有序访问数据结构(例如,WORO-FIFO缓冲器)856-1可小于物理存储器块840。数据结构856-1可占用物理存储器块840的使用对角线阴影示出的部分。数据结构856-1可开始于可由第一头指针HPPA-1指向的第一页。数据结构856-1可结束于可由第一尾指针TPPA-1指向的页。在一些实施例中,头指针、尾指针、写入页偏移、读取页偏移和/或用于管理数据结构856-1的其他信息可例如在数据结构(诸如,表2)中维护。在这个示例中,因为数据结构856-1位于物理存储器块840内,所以HPPA和TPPA的通道编号、存储器装置编号等可相同,但写入页偏移和读取页偏移可不同。

图8中还示出由交叉平行线阴影示出的第二数据结构856-2(例如,第二WORO-FIFO缓冲器)的第一部分。第二数据结构856-2可开始于可由第二头指针HPPA-2指向的第一页。第二数据结构856-2可包括第二数据结构856-2可占用的下一物理存储器块的物理块地址PBA-2。

在一些实施例中,可使用除链表之外的一种或多种技术来实现有序访问数据结构。例如,在一些实施例中,装置控制器和/或介质转换层可维护被分配有序访问数据结构(诸如,WORO-FIFO缓冲器)的物理存储器块的物理地址的映射表。

图9示出根据公开的示例实施例的用于有序访问数据结构的数据预获取方案的实施例。图9中示出的实施例可用于例如实现在此公开的任何数据存储方案,或者可使用在此公开的任何数据存储方案被实现。

在图9中示出的实施例中,块可表示可映射到通道Channel 0、Channel1、Channel2、……、Channel N的存储介质的各个物理存储器块。由相同数据结构(例如,FIFO或WORO-FIFO缓冲器)占用的块可具有相同类型的阴影。

在一些实施例中,数据可从一个或多个数据结构(例如,从由FIFO的头指针指示的位置)被顺序地读取。因此,将从数据结构读取的下一数据的位置可以是可预测的。图9中示出的实施例可利用这种可预测性,将数据从一个或多个有序访问数据结构预加载到存储器922中的一个或多个数据缓存958-1、……、958-4(也可以被称为预获取缓冲器或预读取缓冲器)中。例如,存储装置中的装置控制器和/或介质转换层可从由第一类型的阴影表示的第一WORO-FIFO缓冲器的头部预读取数据,并且将该数据存储到第一数据缓存958-1中。类似地,装置控制器和/或介质转换层可分别从由其他类型的阴影表示的第二WORO-FIFO缓冲器至第四WORO-FIFO缓冲器的头部预读取数据,并且将数据分别存储到数据缓存958-2、958-3和958-4中。在一些实施例中,由于FIFO工作负载的顺序特性,可存在相对高的概率的对主机请求的数据的高速缓存命中。根据实现细节,缓存的数据可以是可靠的命中。因此,当主机发布针对数据结构中的一者中的数据的弹出命令时,所请求的数据可存在于数据缓存958-1、……、958-4中的一者中,这可使数据能够直接从相应缓存被传送给主机而不是相应的存储介质(例如,闪存)。根据实现细节,这可减少延迟和/或提高与从例如存储装置中的存储介质读取数据相关联的QoS。

在一些实施例中,分配给特定数据结构(例如,FIFO或WORO-FIFO缓冲器)的存储器块可如图9中所示跨过不同通道而被条带化。根据实现细节,跨通道对数据结构的数据进行条带化可使得一个或多个通道中的一个或多个读取操作能够与一个或多个其他通道中的一个或多个写入(例如,编程)操作重叠,从而可增加吞吐量。

在一些实施例中,写入数据缓冲器960也可被包括在例如存储器922中。写入数据缓冲器960可用于例如在数据被写入(例如,编程)到由数据结构(例如,由推送命令指定的WORO-FIFO缓冲器)占用的一个或多个数据块中时,临时存储来自主机的数据(例如,针对推送命令)。

在可实现用于基于读取数据来对数据进行标示以用于修改的方案(例如,WORO方案)的一些实施例中,数据在其被读取之后可能不会被再次访问。因此,当数据(例如,在WORO-FIFO缓冲器的情况下顺序地)被读取时,数据可被标示以用于修改(例如,通过将数据进行标记以用于擦除来使数据无效)。在存储装置中实现的一些实施例中,当块的全部或几乎全部已被无效时,装置控制器和/或介质转换层可触发对块的垃圾收集。

根据实现细节,因为可对块顺序地执行读取操作,所以当头指针穿过块同时从可占用该块的数据结构弹出数据时,整个块可被无效。因此,可不存在(例如,随机地)位于整个块中的有效数据,因此,没有理由在垃圾收集期间将有效数据移动到另一块以擦除该块。相反,整个块可在被顺序读取之后准备好擦除。与可包括对分散在整个块中的有效数据执行垃圾收集的读取-擦除-修改-写入处理相比,这可简化和/或加速垃圾收集处理。此外,通过减少或消除垃圾收集期间的有效数据的移动,写入放大可被减少(在一些情况下接近1)。因此,根据实现细节,由后台垃圾收集操作引起的性能可变性可被减少和/或使得本来用于垃圾收集的IO带宽可用于数据I/O(例如,用于主机访问)。此外,在一些实施例中,根据公开的示例实施例的用于基于读取数据而使数据无效的方案可例如通过减少或消除主机可发送以使数据无效的数据集管理修剪(Dataset Management Trim)命令而简化主机操作。

作为另一潜在益处,WORO架构(例如,用于存储装置)可减少用于超量供应的空间量,根据实现细节,这可降低成本和/或功耗,和/或可增大系统容量。例如,没有WORO架构的存储装置可为垃圾收集开销保留特定百分比(例如,大约百分之七)的可用容量。然而,因为在根据公开的示例实施例的具有WORO架构的系统中垃圾收集开销可被减少,所以用于垃圾收集开销的保留容量可被减少(例如,减少到大约1%),从而降低成本和/或增大存储装置的可用容量。

图10示出根据公开的示例实施例的在块修改存储器中具有有序访问数据结构的存储装置架构的实施例。图10中示出的实施例可用于实现在此公开的任何实施例(包括图1至图9中示出的那些实施例),或者可使用在此公开的任何实施例(包括图1至图9中示出的那些实施例)被实现。

参照图10,该架构可包括一个或多个命令队列1062、装置控制器1004、装置存储器1022和/或存储介质1002。装置控制器1004可包括主机接口1018、命令逻辑1064、介质转换层1020和/或介质接口1024。

图10中示出的组件中的一个或多个可具有可类似于图3和/或图4中示出的一个或多个对应组件的结构和/或功能,并且可由以相同数字结尾的参考标号来指示。例如,主机接口1018、介质转换层1020、装置存储器1022、介质接口1024和/或存储介质1002可类似于图3和/或图4中示出的那些。然而,装置存储器1022可用于存储介质转换层(MTL)表1066,介质转换层(MTL)表1066可例如使用表(诸如,如上所述的表2)来实现。在一些实施例中,装置存储器1022(例如,装置存储器1022可包括一个或多个预读取缓冲器1058)可用于以类似于图9中示出的数据缓存958-1、……、958-4的方式从存储介质1002预获取数据的数据缓存。在一些实施例中,介质转换层1020可包括用于实现如在此描述的WORO功能的逻辑。在一些实施例中,装置控制器1004和/或介质转换层1020可包括用于实现类似于以上关于图4描述的缓冲器逻辑430的有序访问数据结构(例如,FIFO缓冲器)的逻辑。

参照图10,一个或多个命令队列1062可例如使用可位于主机、存储装置或它们的任何组合的NVMe提交队列来实现。根据公开的示例实施例,命令逻辑1064可包括用于实现一个或多个命令的功能(例如,命令解析和/或执行逻辑),所述一个或多个命令用于在块修改的存储器(例如,闪存)中实现有序访问数据结构(例如,FIFO和/或WORO-FIFO缓冲器)。例如,命令逻辑1064可包括用于实现上面关于表1描述的任何数量的命令的功能。

参照图10描述的任何功能(包括命令逻辑1064、用于实现WORO功能的逻辑、和/或用于实现有序访问数据结构的逻辑)可例如使用硬件、软件、或它们的任何组合(包括组合逻辑、顺序逻辑、一个或多个定时器、计数器、寄存器、状态机、易失性存储器(诸如,DRAM和/或SRAM)、非易失性存储器(诸如,闪存)、CPLD、FPGA、ASIC、和/或执行存储在任何类型的存储器中的指令的处理器等、或它们的任何组合)来实现。

图11示出根据公开的示例实施例的用于创建缓冲器的命令流的方法的实施例。图11中示出的实施例可用于例如实现上面关于表1所描述的“创建缓冲器”命令。该方法可以在操作1170-1处开始,在操作1170-1处,主机可将“创建缓冲器”命令发送给存储装置。创建缓冲器”命令可包括用于指定缓冲器ID和/或缓冲器大小的一个或多个参数。在操作1170-2处,存储装置可接收“创建缓冲器”命令和一个或多个参数。在操作1170-3处,存储装置的装置控制器和/或介质转换层可通过创建与缓冲器ID参数对应的缓冲器、基于缓冲器大小参数将存储介质的一个或多个块分配给缓冲器、以及将HPPA和/或TPPA初始化为缓冲器的起始物理块地址来执行“创建缓冲器”命令。在一些实施例中,装置控制器和/或介质转换层可使用新创建的缓冲器的缓冲器ID、缓冲器大小、HPPA、TPPA、写入页偏移、读取页偏移等填充MTL表(例如,类似于表2的表)中的条目(例如,对应于缓冲器ID的行)。在操作1170-4处,装置控制器和/或介质转换层可向主机返回指示“创建缓冲器”命令的成功或失败的完成。

图12示出根据公开的示例实施例的用于删除缓冲器的命令流的方法的实施例。图12中示出的实施例可用于例如实现上面关于表1描述的“删除缓冲器”命令。该方法可在操作1272-1处开始,在操作1272-1处,主机可将“删除缓冲器”命令发送给存储装置。“删除缓冲器”命令可包括用于指定缓冲器ID的一个或多个参数。在操作1272-2处,存储装置可接收“删除缓冲器”命令和一个或多个参数。在操作1272-3处,存储装置的装置控制器和/或介质转换层可通过从与缓冲器ID参数对应的缓冲器释放存储介质的一个或多个块和/或使与缓冲器ID对应的MTL表(例如,类似于表2的表)中的条目(例如,行)无效来执行“删除缓冲器”命令。在操作1272-4处,装置控制器和/或介质转换层可向主机返回指示“删除缓冲器”命令的成功或失败的完成。

图13示出根据公开的示例实施例的用于将数据写入缓冲器的命令流的方法的实施例。图13示出的实施例可用于例如实现上面关于表1描述的“推送”命令。该方法可在操作1374-1处开始,在操作1374-1处,主机可将“推送”命令发送给存储装置。“推送”命令可包括用于指定缓冲器ID、数据传送大小、主机存储器中的数据源地址等的一个或多个参数。在操作1374-2处,存储装置可接收“推送”命令和一个或多个参数。在操作1374-3处,存储装置的装置控制器和/或介质转换层可通过将对应于“推送”命令的数据(可例如使用DMA、RDMA等在存储装置处接收)写入存储介质的一个或多个页来开始执行“推送”命令,该存储介质的一个或多个页开始于由TPPA和/或写入页偏移指示的块,TPPA和/或写入页偏移可被存储在例如MTL表(例如,类似于表2的表)中。在操作1374-4处,如果在将数据写入存储介质的同时块被填满,则装置控制器和/或介质转换层可将新块分配给缓冲器并将新块的物理块地址作为指针嵌入先前块中(例如,以形成链表)。在操作1374-5处,装置控制器和/或介质转换层可在写入处理被完成之后更新MTL表中的缓冲器的TPPA和/或写入页偏移。在操作1374-6处,装置控制器和/或介质转换层可向主机返回指示“推送”命令的成功或失败的完成。

图14示出根据公开的示例实施例的用于从缓冲器读取数据的命令流的方法的实施例。图14中示出的实施例可用于例如实现上面关于表1所描述的“弹出”命令。该方法可在操作1476-1处开始,在操作1476-1处,主机可将“弹出”命令发送给存储装置。“弹出”命令可包括用于指定缓冲器ID、数据传送大小、主机存储器中的数据目的地地址等的一个或多个参数。在操作1476-2,存储装置可接收“弹出”命令和一个或多个参数。在操作1476-3处,存储装置的装置控制器和/或介质转换层可通过确定是否存在与缓冲器ID对应的预读取缓冲器来开始执行“弹出”命令。如果存在对应的预读取缓冲器,则该方法可继续进行至操作1476-5。

然而,如果不存在对应的预读取缓冲器,则装置控制器和/或介质转换层可在操作1476-4为缓冲器ID分配预读取缓冲器。然后,装置控制器和/或介质转换层可例如如图15中所示执行数据预加载操作,以从缓冲器读取所请求的数据并且将数据存储在预读取缓冲器中。然后,该方法可继续进行至操作1476-5。

在操作1476-5处,装置控制器和/或介质转换层可例如使用DMA、RDMA等从预读取缓冲器读取所请求的数据并将数据传送给主机。在一些实施例中,装置控制器和/或介质转换层可在从预读取缓冲器读取数据之后使预读取缓冲器中的数据无效。在操作1476-6处,装置控制器和/或介质转换层可向主机返回指示“弹出”命令的成功或失败的完成。

图15示出根据公开的示例实施例的用于从缓冲器预读取数据的命令流的方法的实施例。图15中示出的实施例可用于例如实现在图14中的操作1476-4处使用的数据预加载操作。

参照图15,该方法可在操作1578-1处开始,在操作1578-1处,装置控制器和/或介质转换层可确定与缓冲器ID(例如,FIFO或WORO-FIFO缓冲器的缓冲器ID)对应的预读取缓冲器是否已满。如果缓冲器已满,则该方法可在操作1578-1处循环,直至缓冲器不再满为止,在缓冲器不再满时,该方法可继续进行至操作1578-2。在操作1578-2处,装置控制器和/或介质转换层可从与缓冲器ID对应的缓冲器顺序地读取在由HPPA(例如,头指针)和/或页偏移指示的地址处开始的数据,并且将数据写入对应的预读取缓冲器。装置控制器和/或介质转换层可在数据被读取时更新HPPA和/或读取页偏移。在一些实施例中,装置控制器和/或介质转换层还可在数据被读取时使数据无效。

在操作1578-3,装置控制器和/或介质转换层可确定整个块是否已被读取。如果否,则该方法可继续循环至操作1578-1和1578-2,直至整个块已经被读取为止,在整个块已经被读取时,该方法可继续进行至操作1578-4。在操作1578-4处,介质转换层可擦除块(其中,数据已经在从块读取时被顺序地无效)。在操作1578-5处,基于整个块被读取,装置控制器和/或介质转换层可从前一块提取下一块的物理块地址并使用它来更新HPPA。然后,该方法可返回到操作1578-1。

图16示出根据公开的示例实施例的主机设备的示例实施例。图16中示出的主机1600可用于实现在此公开的任何主机功能。主机1600可使用任何组件或组件的组合(诸如,一个或多个处理器、一个或多个客户端、一个或多个存储服务器、一个或多个存储节点等或者它们的组合)来实现。

图16中示出的主机设备1600可包括可包含存储器控制器1604的处理器1602、系统存储器1606、主机控制逻辑1608和/或通信接口1610。图16中示出的任何或所有组件可通过一条或多条系统总线1612进行通信。在一些实施例中,图16中示出的组件中的一个或多个可使用其他组件来实现。例如,在一些实施例中,主机控制逻辑1608可通过处理器1602执行存储在系统存储器1606或其他存储器中的指令来实现。

主机控制逻辑1608可包括和/或实现在此公开的任何主机功能(包括发布命令(诸如,关于表1描述的那些命令),为应用、进程和/或在此公开的其他数据生产者和/或数据消费者提供平台等)。

图17示出根据公开的示例实施例的存储装置的示例实施例。图17中示出的存储装置1700可用于实现在此公开的任何存储装置功能。存储装置1700可包括装置控制器1702、介质转换层1704、存储介质1706、数据结构访问逻辑1716和通信接口1710。图17中示出的组件可通过一条或多条装置总线1712进行通信。在可将闪存用于存储介质1706中的一些或全部的一些实施例中,介质转换层1704可部分地或完全地被实现为闪存转换层(FTL)。

在一些实施例中,数据结构访问逻辑1716可用于实现在此公开的任何存储装置功能(包括缓冲器逻辑430、命令逻辑1064、和/或与实现有序访问数据结构、基于读取数据来对数据进行标示以用于修改等相关的任何功能)。

如上所述,在此描述的任何功能(包括在此描述的任何主机功能、存储装置功能等)可使用硬件、软件或它们的任何组合(包括组合逻辑、顺序逻辑、一个或多个定时器、计数器、寄存器、状态机、易失性存储器(诸如,DRAM和/或SRAM)、非易失性存储器和/或它们的任何组合、CPLD、FPGA、ASIC、CPU(包括执行存储在任何类型的存储器中的指令的CISC处理器(诸如,x86处理器)和/或RISC处理器(诸如,RISC-V处理器和/或ARM处理器)、GPU、NPU等)来实现。在一些实施例中,一个或多个组件可被实现为片上系统(SOC)。

图18示出根据公开的示例实施例的用于访问具有块修改特性的存储器中的数据的方法的实施例。该方法可在操作1802处开始。在操作1804处,该方法可在存储器系统处接收对数据结构的写入请求,其中,存储器系统包括具有块修改特性的存储器,并且数据结构被布置在存储器中。例如,存储器可以是块擦除存储器(诸如,闪存),和/或数据结构可以是有序访问数据结构(诸如,FIFO缓冲器)。在操作1806处,该方法可基于写入请求将数据存储在数据结构中。例如,可基于从主机发送给存储装置的推送命令来存储数据。在操作1808处,该方法可在存储器系统处接收对数据结构的读取请求。例如,可将弹出命令从主机发送给存储装置。在操作1810处,该方法可基于读取请求从数据结构读取数据。例如,可基于弹出命令从FIFO缓冲器读取数据。在操作1812处,该方法可基于读取对数据进行标示以用于修改。例如,可例如通过进行标记以用于垃圾收集期间的擦除来使数据无效。该方法可在操作1814处结束。

图18中示出的实施例以及在此描述的所有其他实施例是示例操作和/或组件。在一些实施例中,一些操作和/或组件可被省略,和/或其他操作和/或组件可被包括。此外,在一些实施例中,操作和/或组件的时间和/或空间次序可被改变。尽管一些组件和/或操作可被示出为单独的组件,但是在一些实施例中,单独示出的一些组件和/或操作可被集成到单个组件和/或操作中,和/或示出为单个组件和/或操作的一些组件和/或操作可使用多个组件和/或操作来实现。

已经在各种实现细节的上下文中描述了上面公开的一些实施例,但是本公开的原理不限于这些或任何其他具体细节。例如,一些功能已经被描述为由特定组件实现,但是在其他实施例中,功能可分布在不同位置中的不同系统与组件之间并且具有各种用户接口。特定实施例已经被描述为具有特定的处理、操作等,但是这些术语还包括特定的处理、操作等可使用多个处理、操作等实现的实施例,或者多个处理、操作等可被集成到单个处理、步骤等中的实施例。对组件或元件的引用可仅表示组件或元件的一部分。例如,对块的引用可表示整个块或一个或多个子块。除非从上下文中另外明确说明,否则在本公开和权利要求书中使用诸如“第一”和“第二”的术语可仅为了区分它们所修饰的事物,并且可不指示任何空间或时间顺序。在一些实施例中,对事物的引用可表示事物的至少一部分,例如,“基于”可表示“至少部分地基于”等。对第一元件的引用可不暗指存在第二元件。在此公开的原理具有独立的实用性并且可被单独实现,并且不是每个实施例都可利用每个原理。然而,这些原理也可以以各种组合被实现,其中,一些组合可以以协同的方式放大各个原理的益处。

上面描述的各种细节和实施例可被组合以生成根据本专利公开的发明原理的附加实施例。由于在不脱离发明构思的情况下,可在布置和细节上修改本专利公开的发明原理,因此,这些改变和修改被认为落入所附权利要求的范围内。

相关技术
  • 基于子块位置操作存储器装置的方法和相关存储器系统
  • 用于防止来自存储器的未授权数据访问的方法
  • 用于从存储器位胞元读取数据的存储器系统和方法
  • 用于访问作为存储器的存储设备的系统和方法
  • 存储器装置的数据管理方法与系统
  • 访问多区存储器中的多维数据块的方法、装置及系统
  • 访问多区存储器中的多维数据块的方法、装置及系统
技术分类

06120115937955