存储控制器中的存储仿真的制作方法

文档序号:13561495阅读:494来源:国知局
存储控制器中的存储仿真的制作方法

本申请在此要求于2015年3月20日提交的、标题为“sequentialwrite/randomreadstoragecontroller(顺序写入/随机读取存储控制器)”的申请号为62/136,336的美国临时专利申请的权益和优先权,其全部内容通过引用方式整体纳入本文。

本公开文本的方面涉及数据存储,并且具体涉及顺序写入/随机读取存储控制器。



背景技术:

闪存非易失性存储设备在计算机中通常用作高速固态存储设备。这些设备需要通常像随机写入/随机读取的小型数据块设备一样工作的闪存控制器。它们的数据块大小通常是8至16kb。由于这些设备提供的是随机写入/随机读取数据业务,因此性能要求限制了在不降低性能的情况下所能够使用的纠错量和数据保护。

此外,这些闪存控制器需要小型块闪存转换层(ftl),所述小型块闪存转换层是基于主机的小型块到闪存设备内的页面中的映射。闪存转换层通常是复杂的,并且还为闪存控制器创建附加进程来管理比如垃圾的收集、超大型转换表的管理、损耗的均衡、电源故障恢复等。由于这些要求,就闪存控制器内的面积和功率方面而言闪存转换层是昂贵的,并且闪存转换层还使性能降低且使损耗增加。



技术实现要素:

在一个实施方案中,提供一种用于存储系统的存储控制器。存储控制器包括:主机接口,其配置为接收第一主机数据业务,用于存储在存储系统内;存储接口,其被配置为向存储系统传送存储数据;处理电路,其与主机接口和存储接口耦接,所述处理电路包括存储仿真层。第一主机数据业务被格式化用于存储在第一类型的数据存储器中。存储数据被格式化用于存储在与第一类型的数据存储器不同的第二类型的数据存储器中。

所述处理电路被配置为通过主机接口从主机接收第一主机数据业务用于存储在存储系统内的第一分区中,和使用存储仿真层将第一主机数据业务转换为存储数据。所述处理电路还被配置为通过存储接口将存储数据存储到第一分区中,通过主机接口从主机接收读取请求,并且通过存储接口检索来自第一分区的存储数据的一些或全部。

处理电路还被配置为使用存储仿真层将存储数据的一些或全部格式化为与第一主机数据业务兼容的格式,并且通过主机接口以与第一类型的数据存储器相对应的配置将格式化的数据传输到主机。

在另一个实施方案中,提供一种操作存储控制器的方法。该方法包括:通过主机接口从主机接收第一主机数据业务,用于存储在存储系统内的第一分区中,其中,第一主机数据业务被格式化用于存储在第一类型的数据存储器中;以及将第一主机数据业务转换为存储数据,其中,存储数据被格式化用于存储在与第一类型的数据存储器不同的第二类型的数据存储器中。

该方法还包括:通过存储接口将存储数据存储到第一分区中,通过主机接口从主机接收读取请求,并且通过存储接口检索来自第一分区的存储数据的一些或全部。该方法还包括将所述存储数据的一些或全部格式化为与第一主机数据业务兼容的格式,并且通过主机接口以与第一类型的数据存储器相对应的配置将格式化的数据传输到主机。

在另一个实施方案中,提供了一种或更多种非暂时性计算机可读介质,其具有存储在其上的程序指令以操作用于存储系统的存储控制器。所述程序指令在由处理电路执行时指示处理电路以至少:通过主机接口从主机接收第一主机数据业务用于存储在存储系统内的第一分区中,其中,第一主机数据业务被格式化用于存储在第一类型的数据存储器中,和将第一主机数据业务转换为存储数据,其中,所述存储数据被格式化以存储在与第一类型的数据存储器不同的第二类型的数据存储器中。

程序指令还指示所述处理电路以至少:通过存储接口将存储数据存储到第一分区中,通过主机接口从主机接收读取请求,并且通过存储接口检索来自第一分区的存储数据的一些或全部。程序指令还指示所述处理电路以至少:将存储数据的一些或全部格式化为与第一主机数据业务兼容的格式,并且通过主机接口以与第一类型的数据存储器相对应的配置将格式化的数据传输到主机。

附图说明

参照以下附图能够更好地理解本公开文本的许多方面。虽然结合这些附图描述了一些实施方案,但是本公开文本并不限于本文所公开的实施方式。相反地,本公开文本的意图在于涵盖所有的替代方案、修改和等同物。

图1示出一种计算机主机和数据存储系统。

图2示出一种数据存储系统。

图3示出一种用于操作存储控制器的方法。

图4示出一种存储器存储单元组织的示例。

图5示出一种存储器芯片阵列。

图6示出一种数据存储系统。

图7示出一种包括存储仿真层的数据存储系统。

图8示出一种存储阵列组织的示例。

图9示出一种存储阵列分区示例。

图10示出一种示例性数据组织。

图11示出一种示例性顺序写入过程。

图12示出一种存储控制器。

具体实施方式

图1示出计算机主机和数据存储系统100。在该示例性实施方案中,主机系统110向存储控制器120发送数据并从该存储控制器120接收数据,用于存储在存储系统130中。在一个示例性实施方案中,存储系统130包括闪存非易失性存储器,比如nand存储器。nand存储器仅仅是一个示例,存储系统130的其他实施方案能够包括其他类型的存储器。存储控制器120通过链路150与存储系统通信,并且执行以下功能:将从主机系统110接收的数据配置成对存储系统130的存储器资源进行有效使用的格式。

在该示例中,存储控制器120使用顺序写入/随机读取业务流向存储系统130提供数据。该业务流提供比通常用于闪存非易失性存储器的小型数据块随机写入/随机读取业务流更优良的许多有利之处。特别地,顺序写入/随机读取业务流提供对存储阵列内的存储器的有效使用,并提供性能改进,包括映射到存储系统130内的不同分区的多个双向数据流的可用性。这些分区能够各自配置为具有所需的分区大小、数据块大小、存储密度、物理存储器属性、保护属性、安全级别、服务质量要求、数据类型、数据源、数据流属性等。

能够由计算机主机和数据存储系统100内的不同系统来创建或请求分区。在一些示例中,主机系统110将分区请求连同用于配置该分区的参数一起发送到存储控制器120。在其他情况下,存储控制器120内的存储仿真层能够创建分区以用于管理主机数据,比如在分区之间进行缓存、对表进行存储、跨分区执行垃圾收集等。此外,存储控制器120自身能够创建用于系统区域数据存储的分区。在所有情况下,分区创建者拥有分区并定义分区属性(使用分区参数)。

存储控制器120提供在主机系统110使用的标准存储接口和命令协议到存储系统130内的存储设备使用的命令协议和物理接口之间的转换。另外地,存储控制器120能够模拟不同的存储器类型,比如硬盘驱动器、磁带驱动器等,允许主机系统110像是硬盘驱动器、磁带驱动器等一样来与存储系统130连接。在这样的仿真模式中,存储控制器120在主机系统110和存储系统130之间进行转换,配置数据业务并在主机系统110所期望的存储器类型的格式和存储系统130所使用的协议之间进行命令转换。存储控制器120还提供不同类型的多种、同时的主机数据流,并且还提供多层主机物理连接。

还应当注意,存储仿真还包括对未来已知和未知的任何类型的存储业务——比如文件数据、对象存储、非块数据等——的仿真。当前存储设备直接从主机接收数据块,要求存储设备周边的系统以允许其接收其他类型的数据流。存储控制器120将该仿真整合到存储设备自身中。

此外,存储控制器120能够被定制以处理针对特定应用的专有命令和扩展。例如,存储控制器120能够被定制以提供直接的以太网连接,并且将以太网命令和数据转换成用于存储系统130的存储数据和命令。存储控制器120能够支持包括与nvme(非易失性存储器标准)协议相关的扩展和专有命令的低级命令集。其他的存储控制器120能够被定制以支持各种各样的数据业务,比如非常大的块大小和可能的可变数据块大小。

在单个的存储系统130内,能够使用不同的分区来模拟不同的存储器类型,其中存储控制器120管理不同的数据业务流并配置数据,以及根据需要转换每个流中的命令。

另外地,存储控制器120实施纠错代码(ecc)编码/解码功能,以及数据编码、数据恢复、重试恢复方法及其他过程和方法来优化数据完整性。存储控制器120包括在各种各样的数据块大小上提供多级ecc纠正的能力,允许纠正大的以及小的数据误差。ecc纠正级别基于每个分区由用于创建每个分区的分区参数来确定。

存储控制器120能够采用各种配置中的任何一种。在一些示例中,存储控制器120能够是具有软件的现场可编程门阵列(fpga)、具有存储器缓冲区的软件、被设计为包括在具有存储系统130的单独模块中的专用集成电路(asic)、用于创建asic的一组硬件描述语言(hdl)命令(比如verilog或systemverilog)、相对于存储系统130的分立模块、内置于存储系统130中或者许多其他可能的配置中的任何一种。

主机系统110通过各种通信链路——比如通信链路140——与存储控制器120通信。这些通信链路能够使用因特网或其他全球通信网络。每个通信链路都能够包括一个或更多个无线链路,所述无线链路能够各自还包括长期演进(lte)、全球移动通信系统(gsm)、码分多址访问(cdma)、ieee802.11wifi、蓝牙、个人区域网络(pans)、广域网、(wans)、局域网(lans)或无线局域网(wlans),包括上述无线链路的组合、变化和改进。这些通信链路能够携带适用于无线通信的任何通信协议,比如因特网协议(ip)或以太网。

另外,通信链路能够包括一个或更多个有线部分,所述有线部分能够包括同步光纤网络(sonet)、混合光纤同轴电缆(hfc)、时分多路复用(tdm)、异步传输模式(atm)、电路交换、通信信令或一些其他通信信令,包括上述有线部分的组合、变化或改进。通信链路能够分别使用金属、玻璃、光、空气、空间或一些其他材料作为传输介质。通信链路能够各自是直接链路,或者能够包括中间网络、系统或设备,并且能够包括通过多个物理链路传输的逻辑网络链路。常用的存储链路包括sas、sata、pcie、以太网、光纤通道、无限带宽(infiniband)等。

存储控制器120通过链路150与存储系统130通信。链路150能够是到存储设备或阵列的任何接口。在一个示例中,存储系统130包括nand闪存,并且链路150能够使用开放nand闪存接口(onfi)命令协议或“切换”命令协议在存储控制器120和存储系统130之间进行通信。其他实施方案能够使用其他类型的存储器和其他命令协议。其他常见的低级存储接口包括dram存储器总线、sram存储器总线和spi。

链路150还能够是更高级别的存储接口,比如sas、sata、pcie、以太网、光纤通道、无限带宽技术等。然而,在这些情况下,存储控制器120会驻留在存储系统130中,如同该存储系统具有其自己的控制器。

图2示出数据存储系统200。该示例性系统包括存储控制器210和存储系统220。存储系统220包括存储阵列230。存储阵列230包括存储器芯片1-6(231-236)。在一个示例性实施方案中,每个存储器芯片231-236是nand存储器集成电路。其他实施方案能够使用其他类型的存储器。

存储控制器210包括多个块或模块,所述块或模块具有主机输入/输出接口211、顺序写入/随机读取(swrr)控制器212、存储输入/输出端口0213和存储输入/输出端口1214。顺序写入/随机读取控制器212通过链路215、216和217与其他块通信。存储输入/输出端口0213通过链路201与存储系统220通信,而存储输入/输出端口1214通过链路202与存储系统220通信。

在一些示例性实施方案中,存储输入/输出端口0和1(213和214)能够使用开放nand闪存接口(onfi)命令协议,或“切换”命令协议来通过链路201和201与存储系统220通信。onfi规范包括onfi端口0和1的物理接口和命令协议。该接口包括8位总线(在链路201和202中),并且使得存储控制器210能够执行读取、编程、擦除和其他相关联的操作以操作在存储阵列230中的存储器芯片1-6(231-236)。

多个存储器芯片能够共享各自的onfi总线,然而单独的存储器芯片不能够共享多条onfi总线。一条总线上的芯片仅能够与该总线通信。例如,存储器芯片1-3(231-233)能够驻留在总线201上,并且存储器芯片4-6(234-236)能够驻留在总线202上。

在该示例中,顺序写入/随机读取控制器212经链路215通过主机输入/输出接口211从主机接收主机数据。顺序写入/随机读取控制器212根据需要配置数据,用于存储在存储系统220中,并且将数据传输到存储输入/输出端口0和1(213和214),以通过链路201和202传输到存储系统220。

图3示出用于操作如图2所示的存储控制器210的方法。存储控制器210通过主机输入/输出接口211从主机系统110接收第一主机数据业务,用于存储在存储系统220内的第一分区中,(操作300)。第一主机数据业务被格式化以存储在第一类型的数据存储器中。

存储控制器210将第一主机业务数据转换为存储数据,(操作302)。存储数据被格式化用于存储在与第一类型的数据存储器不同的第二类型的数据存储器中。存储控制器210基于第一分区参数通过存储输入/输出接口0和1(213和214)将存储数据存储到第一分区中,(操作304)。

存储控制器210通过主机输入/输出接口211从主机系统110接收读取请求,(操作306)。存储控制器210通过存储输入/输出端口0和1(213和214)检索来自第一分区的存储数据的一些或全部,(操作308)。存储控制器210将所述存储数据的一些或全部格式化为与第一主机数据业务兼容的格式,(操作310)。然后,存储控制器210通过主机输入/输出接口211以与第一类型的数据存储器相对应的配置将格式化的数据传输到主机系统110,(操作312)。

图4示出数据存储单元组织的示例。nand闪存非易失性存储系统被组织为存储器单元400的阵列,该存储器单元的阵列被控制逻辑电路包围以允许其被编程、读取和擦除。典型闪存阵列中的单元被组织在页面410中,用于编程和读取操作。多个页面410位于数据(nand)块420中并且通常必须被顺序写入数据块420内。擦除操作是基于数据块420来完成的。

图5示出存储器芯片阵列500。晶片(芯片/集成电路)内的存储器芯片阵列500包括多个数据(nand)块500-522。页面410、数据块420和阵列500的大小根据闪存晶片设计而变化。典型大小目前为16kb页、每数据块512页、每晶片1024数据块。这些大小随着存储器晶片容量的增加而继续增大。

当使用nand闪存存储器数据单元时,存储器芯片阵列500通过工业标准onfi(开放nand闪存接口)规范或“切换”接口规范被外部控制。onfi规范包括物理接口和命令协议。接口具有8位总线并且使得控制器能够执行编程、读取、擦除以及相关操作来操作nand晶片。多个晶片能够共享一个onfi总线。

大多数nand存储器系统都是用nand晶片的阵列构建的以提高性能和容量。多个nand晶片能够被封装在一起,多个封装能够被一起组装在组件上,并且多个组件能够存在于nand存储器系统中。受控的整组nand存储器被称为存储阵列。

为了在系统中使用nand存储器,需要存储控制器。控制器具有许多功能,包括但不限于:在onfi及标准存储接口和命令协议之间进行转换,跨存储阵列组织数据,添加元数据和/或表以跟踪写入的数据及该数据在阵列中映射的位置,实施ecc编码/解码、数据编码、恢复、重试恢复算法以及其他过程和算法以优化数据完整性,以及nand和阵列管理功能以优化存储使用、容量、性能、寿命和功耗。

图6示出数据存储系统600。该示例包括网络或主机系统610、存储控制器615和存储阵列630。主机系统610和存储控制器615通过链路611交换数据。存储控制器615和存储阵列630通过onfi总线622和623交换数据和命令。存储控制器615包括onfi端口0620和onfi端口1621,该onfi端口0620通过onfi总线622与存储阵列630交换数据和命令,该onfi端口1621通过onfi总线623与存储阵列630交换数据和命令。

存储阵列630包括多个封装640-642,其各自包含两个nand晶片(die-lun(逻辑单元编号)0和1)。在该示例中,onfi端口0620向具有逻辑单元编号“0”的所有存储器晶片发送数据和命令。这包括封装0640中的die-lun0650、封装1641中的die-lun0660和封装n642中的die-lun0。onfi端口1621向具有逻辑单元编号“1”的所有存储器晶片发送数据和命令。这包括封装0640中的die-lun1651,封装1641中的die-lun1661和封装n642中的die-lun1。onfi端口能够同时运行,以提供增强的带宽。

该示例是被优化为以顺序写入/随机读取模式来操作的存储控制器615。该示例性的描述针对用nand闪存的实现方式,但该示例并不旨在限于nand闪存阵列控制。该示例的控制器能够被应用于需要集成控制功能、用介质封装以便运行的任何非易失性存储技术。存储控制器615也称为“swrr控制器”。

该示例的swrr控制器615实施一种组织和管理阵列数据的方法,并针对最适合nand存储阵列或具有类似特性的其他存储设备的业务类型进行了优化。业务定义和行为包括:映射到不同分区的多个双向数据流,使用顺序编号数据块来完成顺序写入。

为了使swrr控制器615利用存储阵列630执行顺序写入/随机读取业务流,在分区中重写数据块而不进行干预擦除是不允许的,并且分区内的数据块不会不按顺序被写入。存储控制器615支持使用编号的数据块的随机读取。而且,存储阵列630内的每个分区的数据块大小都是可编程的。

图7示出包括存储仿真层(也称为虚拟化层)711的数据存储系统700。在该示例中,到swrr控制器710的入口接口包括存储仿真层711。存储仿真层711包括使swrr控制器710适合于以多种模式工作并且具有多个接口所需的所有命令转换、数据映射、管理和跟踪。存储仿真层711还执行对数据业务的调整以匹配swrr业务模式所需的任何功能。

图7所示的在仿真到swrr接口712处的数据业务与如上所述的顺序写入/随机读取业务模型相匹配。在nand闪存阵列的情况下,通向存储阵列730的出口接口是多通道onfi接口(onfi端口0和1(720和721))。然而,能够调整或更换onfi接口,以直接接合到许多不同类型的存储技术。

图8示出存储阵列800组织的示例。存储阵列800由包含在多个晶片、封装和组件(可能的话)中的大量数据块组成。对于尚未存储有任何数据的新存储阵列,存储控制器将其视为空闲数据块的大型库。

swrr控制器使用可编程数据块而非固定的512字节块或4k字节块。能够针对系统来优化数据块大小,并且对于nand而言,数据块大小通常至少为页面的大小。此外,大型可编程模块允许系统在配置时间期间优化,以适应存储阵列和主机系统。大型数据块的另一个优点是它使得控制器大小更容易扩展到更大的阵列大小。

数据块被组织成数据块条带。数据块条带包含1个或更多个数据块,并且该数据块条带是可编程的。对如何访问阵列进行控制的最高级结构是分区。所有数据都存储在分区中。分区由任何整数的数据块条带组成。每个分区都具有特定的定义和大小。在存储任何数据之前,需要创建一个或更多个分区。

在该示例中,存储阵列800包括14个分区。分区1801包括4个数据块。分区2802包括16个数据块。分区3-12(803-812)各自包括一个数据块,并且分区13和14(813和814)各自包括20个数据块。

所有数据都被写入分区中。每个分区都有自己的定义,包括一个或更多个分区参数。

分区能够是静态的、可扩展的或链接的。它们也能够随时被创建或消除。在创建分区时,该分区必须具有被分配的来自空闲库的至少一个块。如果分区中不具有任何有效数据,表明该分区尚未被写入或已被擦除,则该分区能够被消除。

静态分区被定义为固定的一组块,除非它们被消除,否则它们不能够改变。

可扩展分区能够根据需要来扩大。能够根据需要分配来自空闲库的附加块,以避免在填充整个存储阵列之前填充它。可扩展分区是有用的,使得在事先不了解每个分区中需要多少空间的情况下不必完全分配阵列。

链接分区能够是静态的或动态的。链接分区在逻辑上被视为单个分区。当大型顺序写入会话填充了分区,但还存在稍后添加的附加数据时,这一特征是非常有用的。链接分区的另一个用途是用于混合在数据流内的密度或提供缓存功能。链接分区需要具有兼容属性,但是不相同。兼容性的主要领域是数据类型、安全级别和服务质量(qos)。分区定义只能够在它们被创建或擦除时更改。

存在许多分区参数以允许针对许多存储阵列和主机来优化控制器。参数的类型为:

-数据块大小。

-物理储存单元密度,例如slc(单级单元)、mlc(多级单元)、tlc(三级单元)等。

-保护:代码字级别的数目、代码字大小、ecc类型和开销等。

-安全:加密类型、密钥和密码处理、访问权限和数字版权管理属性。

-服务质量:业务的不同优先级、等时流的支持等。

-数据类型和来源,例如系统、主机、本地阵列、网络等。

-物理:数据块条带的数目,每数据块条带的数据块的数目,数据块在分区中的位置。

-数据流定义:接口类型(例如,固定块、流、usb块等)、文件/数据格式(例如,主机块定义、文件系统感知等)、接口源-用于具有多个有效接口的控制器等。

由于这些参数是基于每个分区来设置的,因此,其使得能够直接实现多种特征,诸如slc缓存、混合数据安全级别、同时支持多种类型的虚拟设备和卷以及根据数据类型或来源支持不同级别的保护,以上仅作为几例。

图9示出存储阵列分区示例。此示例图示出分区的两个更详细的示例。分区0900是在一个数据块条带910内、仅具有一个数据块的最小可能性。该分区能够用于内部系统数据,比如配置、表存储、nand优化参数、制造数据和固件升级等。在这种情况下,分区0900是“系统”分区,意味着它仅用于由控制器内部生成的数据。

分区1910非常大并且由布置在多个整数数据块条带911-913中的m×n个数据块组成。数据块条带是被并行写入的一组数据块,以提高性能并优化数据保护。数据块条带的数据块组成部分能够分到多个晶片、封装或卡上。

一旦被限定,分区就顺序地填充有分层的代码字。当剩余空间小于代码字的最高级别/最大大小时,分区是满的。一个分区只能被填充一次。一旦它是满的,那么它就是只读的。

分区能够以块条带来擦除,或者作为完整的分区单元来擦除。一旦分区被擦除,来自该分区的数据块就返回到空闲库。然后,该分区能够被重新使用、重新配置或消除。能够使用来自空闲库中的可用的数据块来随时创建任意大小的新分区。

当块条带被删除时,在存储仿真层中生成的表和高级元数据对删除进行管理。较高级别的进程(通常在存储仿真层或主机自身,但是也可能在存储控制器710中)会在释放块条带用于擦除并返回到空闲库之前,将所有的有效数据从牺牲块条带复制到附加在分区末尾的新数据块。

图10示出示例性数据组织。swrr控制器将数据组织到分区中。每个分区由使用ecc编码的一个或更多个数据层组成。数据层的数目、它们的大小和ecc冗余在分区创建过程中是可编程的。这种分层的、可配置的数据保护方案是非常灵活的,其导致用更小的开销实现更强的纠错能力。

swrr控制器能够具有一个或更多个级别的代码字。图10中的示例示出的是三个级别,但是根据分区的配置,能够存在更多的或更少的级别。不同的级别允许在性能、开销和数据可靠性之间进行优化和权衡。通常,处于不同级别的代码字对应于可能发生故障的不同物理结构。所述级别允许被设计用于从这些故障中恢复的数据冗余。

作为示例,1级代码字可以是页面的大小并且防止出现位单元错误。2级代码字可以是页面条带的大小并且防止出现数据块故障。3级代码字可以大得多,并且在晶片、封装或卡组件上交叉存取以防止出现晶片、封装和卡组件故障。代码字不需要匹配任何物理数据边界。

每个代码字都具有3个主要组成部分:有效负载、元数据和ecc数据。

有效负载是从上一层所接收的数据。对于顶层而言,有效负载是输入数据(主机数据或系统数据)。

第二部分是元数据。元数据描述了有效负载数据的布局、其地址、边界、映射及其特性。元数据字段能够不总是位于有效负载的末尾。它能够处于开始处、在ecc之后或散布在有效负载内。元数据始终由ecc覆盖。

代码字的ecc字段包含奇偶数据或冗余数据以帮助纠正读取错误。能够使用任何类型的ecc,并且通常在不同的代码字级别处使用不同的类型。每个代码字的ecc量也是可配置的。一般而言,特别是在2级及以上,所使用的ecc代码是系统性的。系统性ecc代码字不对有效负载数据进行编码,而是仅增加所计算的ecc。所支持的一些类型的ecc包括bch、ldpc(低密度奇偶校验)、turbo代码和reed-solomon。也能够使用其他ecc代码。系统性代码字允许将有效负载与ecc计算并行地写入闪存。

分区参数允许控制器来确定代码字结构。代码字结构按分区定义而变化。分区定义连同其物理映射一起作为元数据在分区的开始处以及在分区内以间隔嵌入在分区中。

代码字不必以整数映射到下一较高层的有效负载中。如图10所示,下一较高层中的元数据允许控制器跨有效负载边界对代码字进行打包/解包。此外,能够缩短较高层的代码字以便适应页面、页面条带或分区边界。

在该示例性实施方案中,使用三级代码字存储来自主机系统的两个数据块1010和1011。在该示例中,数据块1010和1011与3级有效负载1020和1023具有相同的大小,然而,不需要任何这样的大小的映射。

基于3级有效负载1020,存储控制器创建元数据1021并计算ecc1022。类似地,基于3级有效负载1023,存储控制器创建元数据1024并计算ecc1025。3级有效负载与元数据和ecc数据的组合包括3级代码字1026。

然后,每个3级代码字被划分到2级有效负载中。在该示例中,3级有效负载1020的一部分变为2级有效负载1030,3级有效负载1020的剩余部分和元数据1021变为2级有效负载1033,并且ecc1022和3级有效负载1023的一部分变为2级有效负载1036。该过程继续,直到所有3级代码字已经被划分到2级有效负载中。

基于2级有效负载1030,存储控制器创建元数据1031并计算ecc1032。类似地,基于2级有效负载1033,存储控制器创建元数据1034并计算ecc1035,并且基于2级有效负载1036,存储控制器创建元数据1037和ecc1038。2级有效负载与元数据和ecc数据的组合包括2级代码字1039。

然后,每个2级代码字被划分到1级有效负载中。在该示例中,2级有效负载1030的一部分变为1级有效负载1040,2级有效负载1030的剩余部分变为1级有效负载1043,元数据1031和ecc1032变为1级有效负载1046,和2级有效负载1033的一部分变为1级有效负载1049。该过程继续,直到所有2级代码字已经被划分到1级有效负载中。

基于1级有效负载1040,存储控制器创建元数据1041并计算ecc1042。类似地,基于1级有效负载1043,存储控制器创建元数据1044并计算ecc1045,基于1级有效负载1046,存储控制器创建元数据1047和ecc104,并且基于1级有效负载1049,存储控制器创建元数据1050和ecc1051。1级有效负载与元数据和ecc数据的组合包括1级代码字1052。

更大的数据块大小和分层代码字设计允许定制化的ecc保护方案,其更好地匹配于阵列、其业务模式和潜在的故障点。这些更长的分层代码字以更少的开销提供更强大的数据保护。这些方案也能够被定制,以防止出现物理故障(比如晶片故障、封装故障和组件故障),以及从所述物理故障中恢复。

能够根据需要的程度来加强ecc方案以将uber(不可校正误码率)降低到任何竞争性的存储技术或系统的理论uber之下。改进的ecc方案还允许在高可靠性应用中使用更低等级的、较便宜的nand。

除了管理前面部分中所描述的分区配置、存储器阵列使用和代码字编码/解码之外,存储器控制器还需要其他功能和算法来提供完整的控制器解决方案。

存储器系统需要存储非用户数据以便进行引导、配置和操作。该数据被称为系统数据,并且通常该数据不能经由主机接口通过普通的写入/读取命令使用。

系统数据的示例包括内部固件、制造数据、翻译和管理表、统计、阵列信息等。系统数据在内部生成并且被写入专门为系统数据创建和配置的分区。能够存在所需要的数目的系统分区。

图11示出示例性的顺序写入过程。存储阵列的写入请求被映射到分区。能够根据数据类型、主机id或数据源将写入数据导向不同的分区。

存储控制器监测来自所有活跃分区的业务。竞争共享资源(比如通道或晶片)的任何写入都会被基于使其排队以写入存储阵列的分区属性来进行优先级排序。在分区内,数据被映射到不同级别的代码字的有效负载中。

每当从代码字生成中获得足够的数据来写入页面时,数据被传送到正确的晶片,并且页面程序命令被发送。存储阵列中的每个页面能够包括在页面中的固定位置处的一些元数据,以帮助定位用于回读的代码字边界。

在该示例中,来自图10的1级代码字将被存储在块条带1100中。块条带1100包括n×m个页面阵列。它包括页面条带0-n(1111-1113)。每页面条带包括页面0-m。

存储控制器将1级代码字分成页面大小的数据组块,并将这些数据组块顺序地存储在一页面条带的多个页面中。一旦该页面条带满了,就向前移动,并开始将数据组块存储到下一个顺序的页面条带的多个页面中。

在该示例中,1级有效负载1040的一部分被存储在页面条带01111的页面0中,1级有效负载1040的剩余部分和元数据1042被存储在页面条带01111的页面1中,并且剩余的1级代码字被划分并顺序地存储在页面条带01111中的页面中,直到到达页面条带01111的页面m为止。此时,存储控制器开始将1级代码字存储在页面条带11112中,并且以这种方式继续填充块条带1100。

对于系统性代码字,当将有效负载数据写入页面阵列时,能够将用于每个级别的ecc累积在存储器中。随着生成元数据和ecc,它也被写入。

对于非系统性代码字,必须在将整个代码字写入阵列之前对其进行组合。代码字组合包括所有级别。

该分区被填充在数据块集合的页面条带中,所述页面条带被指定为分区内的数据块条带。

写入过程包括刷新操作。存在两种类型的刷新操作:微型和完全型。

微型刷新用于保护缓冲数据。它更新当前的开放0级代码字元数据来描述刷新和填补操作。然后,它填补0级代码字,随后将缓冲数据填补到下一个合法写入单元(页面)并将其写入阵列。这用于数据流中的暂时中断或者只有短的时间可用于写出数据的情况(例如即将发生的电源故障)。

完全型刷新更新元数据并填补所有级别的代码字。它能够缩短一些较高层的代码字以节省容量。然后将写入数据填补到下一个期望的边界(页面、页面条带、数据块条带、分区)。此操作通常用于在触发刷新的错误条件之后当有更多的时间可用于清理时关闭分区或提供更整齐的阵列写入。

刷新操作由于多种原因被触发。示例包括:

1.主机或仿真层能够将请求作为写入命令的一部分,或者将请求作为单独的命令在数据流中的任何点请求刷新。

2.能够设置基于分区属性的可编程定时器来迫使刷新。

3.即将发生的电源故障信号或其他硬件不安全信号也能够触发刷新。

每当特定数量的数据已经被安全地写入阵列时,写入过程向上层或主机提供确认。所述确认的单位和大小可根据分区来配置。一些示例性选项是每100个数据块每10个0级代码字、每数据块条带、每写入命令等。

写入过程在写入期间跟踪每个分区的数据块地址。任何重复或不按顺序的数据块写入都被拒绝。该跟踪在擦除后被清除。

随机读取和顺序读取均由swrr控制器支持。读取请求以数据块地址为基础。用分区和主机数据块地址以及所请求的数量的数据块支持顺序读取。

最小尺寸的物理读取物处于存储器阵列的页面中。最小尺寸的swrr读取物处于0级代码字中。由于代码字大小是可变的并且能够跨页面,最小数据块读取物可能需要读取不止一个页面。

当请求特定数据块时,swrr控制器确定该数据块的物理位置,并读取单个或多个物理存储器页面以及0级代码字以恢复该数据块。检查ecc,如果数据良好,则返回。如果不良,则启动恢复操作。

swrr控制器能够同时支持跨多个分区的多个读取请求。使用分区定义中的优先级规则将请求映射并排队到阵列,并进行优化以用于访问。

在块条带或分区的基础上来执行擦除。当分区被擦除时,其能够被去除、被重新配置、物理移动或作为空白分区保留下来。也能够进行安全擦除来去除已经存储在分区中的数据。

数据块在被擦除时发生损耗。当前的nand技术支持在所述数据块不再保留数据之前对其进行数千或数万次擦除。擦除次数的差异主要取决于工艺技术和数据密度。

损耗均衡对于nand控制器而言是重要的,用以确保阵列均匀地损耗。损耗均衡作为swrr控制器中的分区创建和空闲块库管理过程的一部分来执行。为阵列维护每个数据块或分区的擦除计数,并在分区擦除、创建和销毁期间使用所述每个数据块或分区的擦除计数,以保持数据块损耗在整个阵列中相对均匀。损耗均衡是通过针对swrr控制器的分区管理而非以块为基础来完成的。损耗均衡是由存储器控制器通过至少部分地基于用于分区中的数据块的擦除计数对所述数据块进行选择来实现的。

swff控制器上的存储仿真层使控制器适应不同的操作模式、业务模型、命令集和接口协议。

针对每种存储类型,控制器确保遵守系统级行为,比如功率损耗、数据可靠性、容量和延迟。

对于支持与swrr模型不匹配的主机业务的存储仿真模式而言,存储仿真层执行“业务调整(trafficshaping)”以调节业务使其适应swrr模式。

所支持的主要类型的操作和业务模型包括:顺序写入/随机读取的固定编号块模拟nand闪存、光学cd、蓝光光碟、bd-xl等;顺序写入/顺序读取的固定、未编号块模拟磁带介质;顺序写入/随机读取的大型可变块模拟基于对象的大数据存储器;以及随机写入/随机读取的小型固定块模拟硬盘驱动器和固态驱动器。

对于所有模式,存储仿真层管理其所使用的分区的配置和设置。介质仿真层还必须管理与存储仿真层和主机接口相关联的任何系统级配置。该管理还能够包括系统分区的创建和使用。

如果需要,存储仿真层处理一些配置和状态命令和/或对命令进行转换并将其转发到swrr控制器。

能够同时有不止一个的仿真对象存在于控制器中。因此,系统能够同时支持多个混合虚拟设备和卷。

对于需要数据转换的那些仿真模式而言,需要利用数据来记录映射信息以及基于主机的地址和属性。存储仿真层定义了它们自身的嵌入到模拟数据块中的元数据字段以执行映射。如果对于性能而言有需要或要求,则能够创建分别存储在各个系统分区中的转换数据表以减少转换时间。然而,元数据转换始终被定义为使得转换表能够丢失并且能够使用元数据来重新构造。

顺序写入/随机读取-固定块

业务调整:根据分区配置,主机数据块大小可能与模拟数据块大小不匹配。如果是这种情况,则存储仿真层将主机块在两个方向上映射到仿真数据块中。

数据转换:根据需要,元数据和表用于允许存储仿真层在主机块地址和仿真数据块地址之间转换。

接口管理和命令转换:在swrr模式中,存储仿真层不执行任何命令或数据转换。存储仿真层的主要功能是提供物理接口和链路层控制,以确保无错误的命令和数据传输。

顺序写入/顺序读取-固定块

适合该仿真模型的主要存储仿真目标包括磁带和光学设备。

业务调整:根据分区配置,主机数据块可能需要被转换为仿真数据块大小。否则,就存在很少的业务管理。如果期望,存储仿真层能够进行提前读取以期待顺序读取流。

数据转换:大多数顺序写入/读取设备使用的是介质上的相对块位置而非绝对块号。在这种情况下,存储仿真层跟踪相对位置并将块号分配给发送到控制器的仿真数据块读/写请求。

此外,磁带驱动器具有使相对介质位置移动的介质移动命令,比如倒回、定位和搜索。与这些命令一起的是文件标记和磁带标记写入,以标记相对介质位置。存储仿真层负责使这些磁带特征虚拟化。

存储仿真层的数据转换功能还支持被映射到单独分区的多个虚拟卷。

接口管理和命令转换:大多数磁带驱动器使用t10流命令集。大多数光盘使用t10多介质命令集。通用物理接口对于磁带而言是sas和fc,对于光学蓝光光碟而言是sata和usb。

顺序写入、随机读取、大型可变块

目前,没有适合这种类型的使用模型的存储技术,但是这是用于非常大的数据存储的模型。基于对象的存储模型是一个示例。使用此仿真模式,swrr控制器能够具有直接的、较高级别的接口,该接口将存储设备类型和特性隐藏起来不让上层知道。

业务调整:swrr控制器的本地业务模式与此模型相匹配。除了为被写入的非常大的块提供一些保护防止错误和功率损耗以外,很少会进行业务调整。

数据转换:存储仿真层分解大型可变块并将它们映射到仿真数据块中。它使用元数据和系统数据表来执行映射。

接口管理和命令转换:命令接口对于基于对象的存储和相关协议而言是非常简单的。这要求介质仿真层处理很多对整体设备特性的配置和管理。

随机写入/随机读取-小型固定块

该模式适合于硬盘驱动器和ssds(固态驱动器)。

业务调整:针对写入,存储仿真层将小块随机写入收集到被分解成仿真数据块大小的较大顺序写入流中。针对读取,请求包含目标数据的仿真数据块。

数据转换:转换小块随机写入业务正是ssd中的ftl(闪存转换层)所执行的功能。因此,存储仿真层需要ftl功能将小块写入映射到仿真数据块中。随ftl一起,还有所有其他相关功能,包括垃圾收集、损耗均衡、写入一致性、小块重写支持和功率损耗管理。

接口管理和命令转换:hdds和ssds使用t10块命令集。主要物理接口是iscsi、sas、nvme、sata和fc。与其他模式一样,能够对多个驱动器进行仿真。

由于swrr控制器跨越多种存储模型和技术,因此,本节会提供对其他控制器的简要介绍。可用的存储控制器包括hdd、ssd、usb闪存、emmc(嵌入式多介质卡)闪存和ufs(通用闪存存储)闪存。所有这些控制器都适合随机写入/读取、小型固定块模式。所有这些都支持512字节块。有些支持4k字节块。

hdd控制器

该概述仅指hdd控制器的数据路径管理部分。hdd控制器还包括在此未提及的伺服和磁头控制功能。

针对硬盘驱动控制器所控制的磁旋转盘介质来优化硬盘驱动控制器。小型、固定大小的块是基于数十年前所定义的磁盘扇区。扇区大小是基于伺服和pll系统在随着介质经过磁头时在没有固定模式的情况下达到同步所经历的最长时间。

当hdd系统被集成到计算机和存储器系统中时,命令集根据扇区大小永远不会改变的假设被设计。这种假设通过驱动器软件、文件系统甚至数据传输协议被扩展到扇区大小由于庞大的基础结构变得难以(如果不是不可能的话)改变的程度。

如果hdd模型可以/确实改变以允许更大的扇区,则优点可包括:由于更少的扇区间开销而增加的容量(百分之几)、由于更大的ecc代码字而增加的容量(百分之几)、由于较少数量的块而导致较少的命令开销(稍微改善的等待时间)、和由于地址适用于更多数据而更容易将系统扩展到更大尺寸。

更大扇区尺寸的缺点包括:在写入和读取小于块大小的数据时所浪费掉的空间和低效率。

随着闪存设备接管基于总线的位置和第一层存储位置,小型块在hdd工作负载中变成越来越不常见的业务。随着hdd进一步向后移动到存储层次体系中,业务模式转变向大块顺序。

叠瓦式hdd

用于hdd的最新创新是叠瓦模式记录。在叠瓦式记录中,写入轨迹彼此重叠以将密度增加20-30%。这样做的代价是必须按照一组轨迹中的顺序对轨迹进行写入。读取依旧是随机访问的。

该记录模式实质上是将hdd转换成顺序写入的、随机读取设备,其比典型的hdd控制器更好地适合于该示例的控制器。

nand闪存控制器

用于usb、sd卡、emmc的nand闪存控制器,其全部用作随机写入/随机读取小型块设备。对于该示例而言,小块是小于本地页面大小的任何块大小。对于nand而言,块大小为8-16kb。

这些控制器都需要通常所称作的小型块ftl(闪存转换层)。ftl只是基于主机的小型块到nand页面中的映射。ftl的实现增加了很大的复杂性,并且需要另外的进程来管理。这些另外的进程包括非常大的转换表的创建、管理、搜索和非易失性更新。

垃圾收集是又一个另外的进程。随着随机写入的增加,整个阵列变得充满了有效和无效的主机数据块。最后,阵列完全写入,但只有部分阵列包含有效数据。为了处理该问题,必须收集有效数据并将其移动到新页面和数据块,使得能够擦除并重新使用具有大量无效数据的页面。实际上,垃圾收集需要不止1次将数据写入阵列。这种效应被称为“写入扩增”。

还需要损耗均衡。由于垃圾收集所引起的写入扩增,因此需要更加频繁地擦除,直到块擦除是主要的故障机制为止。在使用ftl来延长使用寿命时,阵列中的块的损耗均衡就更加重要。

还必须提供电源故障恢复。随着在后台的垃圾收集操作移动用户数据并更新易失性存储器中的ftl,如果存在电源故障的话,就会有丢失先前写入数据的风险。

由于垃圾收集的消除、写入确认功能的添加以及大型ftl表,利用swrr控制器的电源故障恢复要简单得多,而且更加稳健。swrr控制器中的转换表全部都是元数据冗余的,并且都与写入确认握手相互锁定。

数据保护也是ftl的一个问题。这些小型块系统的随机访问性能要求限制了可允许用于ecc和数据保护的代码字的级别和大小。1级代码字保护被固定为页面大小,而2级被固定为块条带。这些控制器不使用高于2级的任何层。

swrr控制器不需要随机小型块ftl。由于数据块擦除的最小化和大型ftl表的消除,存储阵列的寿命在每种情况下都会增加。根据业务类型,寿命的增长能够非常大。前面描述了与ftl相关联的复杂性。

图12示出存储控制器1200。如上所述,存储控制器1200能够采用各种各样的配置中的任何一种。在此,针对作为asic实现的存储控制器提供了一种示例性配置。然而,在其他示例中,存储控制器1200能够内置在存储系统或存储阵列中,或内置到主机系统中。

在该示例性实施方案中,存储控制器1200包括主机接口1210、处理电路1220、存储接口1230和内部存储系统1240。主机接口1210包括被配置为从外部主机系统接收数据和命令并将数据发送到主机系统的电路。在一些实施方案中,主机接口1210或处理电路1220能够包括存储仿真层。

存储接口1230包括被配置为向外部存储系统发送数据和命令并从存储系统接收数据的电路。在一些实施方案中,存储接口1230能够包括用于与存储系统通信的onfi端口。

处理电路1220包括被配置为执行如上所述的swrr控制器的任务的电子电路。处理电路1220能够包括检索并执行软件1260的微处理器和其他电路。在一些实施方案中,处理电路1220能够嵌入在存储系统中。处理电路1220的示例包括通用中央处理单元、专用处理器和逻辑设备,以及任何其它类型的处理设备、组合或其变型。处理电路1220能够在单个处理设备内实现,但也能够分布在用执行程序指令合作的多个处理设备或子系统上。

内部存储系统1240可包括能够存储通过处理电路1220可执行的软件1260的任何非暂时性计算机可读存储介质。内部存储系统1220还能够包括各种数据结构1250,其包括一个或更多个数据库、表、列表或其他数据结构。存储系统1240能够包括在以用于存储信息——比如计算机可读指令、数据结构、程序模块或其他数据——的任何方法或技术实现的易失性和非易失性、可移除和不可移除的介质。

存储系统1240能够作为单个存储设备来实现,但是也能够在同地协作或者相对于彼此分布的多个存储设备或子系统上实现。存储系统1240能够包括能够与处理电路1220通信的附加元件,比如控制器。存储介质的示例包括随机存取存储器、只读存储器、磁盘、光盘、闪存、虚拟存储器和非虚拟存储器、磁带盒、磁带、磁盘存储器或其他磁存储设备,或者能够用于存储所需信息并且能够由指令执行系统访问的任何其它介质,以及上述的任何组合或变型。

软件1260能够用程序指令实现,并且除了其他功能之外,所述软件当通常由存储控制器1200来执行时,或特别是由处理电路1220来执行时,其能够指示存储控制器1200或处理电路1220以如本文所述的来操作用于存储控制器。软件1260能够包括附加的进程、程序或组件,比如操作系统软件、数据库软件或应用软件。软件1260还能够包括由处理电路1220的元件可执行的固件或一些其他形式的机器可读处理指令。

在至少一种实施方案中,程序指令能够包括分区模块1262、存储仿真模块1264、onfi转换模块1266、纠错模块1268、swrr转换模块1270以及主机通信模块1272。

分区模块1262包括指示处理电路1220在存储系统内对分区进行创建、利用和维护的指令。存储仿真模块1264提供用于处理电路1220和存储控制器1200的存储仿真层。onfi转换模块1266将swrr命令转换成onfi命令以供存储系统使用。纠错模块1268计算纠错代码以用于与代码字中的有效负载一起存储在存储系统中。swrr转换模块1070将主机数据和命令转换成可由存储系统使用的数据和命令。主机通信模块1272与主机系统连接以向存储控制器1200提供主机数据和命令,用于转换为可由存储系统使用的存储数据和命令。

通常,当软件1260被加载到处理电路1220并被执行时,该软件能够将处理电路1220整体地从通用计算系统转变为如本文所述的操作用于存储控制器以及其他操作的定制化的专用计算系统。内部存储系统1240上的编码软件1260能够转换内部存储系统1240的物理结构。物理结构的特定转换能够依赖于本说明书的不同实施方式中的各种因素。这些因素的示例能够包括但不限于用于实现内部存储系统1240的存储介质的技术以及计算机存储介质是否被表征为主存储或辅助存储。

举例而言,如果计算机存储介质被实现为基于半导体的存储器,则当在其中对程序进行编码时,软件1260能够转换半导体存储器的物理状态。例如,软件1260能够对构成半导体存储器的晶体管、电容器或其他分立电路元件的状态进行转换。对于磁性或光学介质而言,也能够发生类似的转换。在不脱离本说明书的范围的情况下,物理介质的其他转换是可能的,前述示例仅被提供用于便于讨论。

所包括的说明和附图描述了教导本领域技术人员如何实现和使用最佳模式的具体实施方案。出于教导本发明原理的目的,已经简化或省略了一些常规方面。本领域技术人员将明了落在本发明范围内的、根据这些实施方案做出的各种变型。本领域技术人员还会明了,能够以各种方式将上述特征组合以形成多种实施方案。因此,本发明不限于如上所述的具体实施方案,而是仅受权利要求及其等同物的限定。

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