非易失性存储器系统中的同步镜像的制作方法_3

文档序号:9583641阅读:来源:国知局
访问。
[0101]组件212-232的每一个包括在其上安装多个封装的闪存芯片的矩形印刷电路板。闪存芯片可以包括NAND闪存晶片、NOR闪存晶片或任何其他适当的非易失性存储器。在一些实现中,组件212-232的每一个可以具有存储卡200能识别的不同类型的闪存,使得能对指定类型的存储器,定制读取操作、写入操作和/或擦除或维护操作。
[0102]在一些实现中,每一组件包括8个NAND闪存晶片,基于除其他参数外的电子布线和来自组件的引线输出,以4对排列。一对中的两个晶片可以称为彼此的同胞(sibling)。将组件配置成对每一对,每次晶片中的一个可以主动执行输入/输出(I/O)操作,即使从闪存操作的观点看,两个晶片均视为活动。因此,在组件中,4个晶片可以同时执行输入/输出(I/o)操作,而所有8个晶片主动执行闪存操作。
[0103]在上述实现中,除所示的12个组件212-232外,存储卡200包括安装在基板202的背面上的12个附加的组件,产生安装在基板202上的总共24个组件。另外,存储卡200包括子板,24个组件安装在子板上。因此,在一些实现中,存储卡200中的总组件数为48。对每个组件8个晶片,上述结构产生存储卡200中的总共384个闪存晶片。
[0104]在另外的实现中,组件212-232的数量可以不同于12,例如,几十个组件,以及存储卡200可以包括安装在基板202的背面的另外的数10个组件,产生除24以外的数量的每板的组件总数。通过每卡多个板,诸如一个或多个子板,存储卡中的组件的总数可以是数十或数百,导致数百或数千晶片。
[0105]除图2A所示的特征外,存储卡200可以包括安装在基板202的一个或多个嵌入式处理器、ROM、DRAM和另外的NVRAM。ROM可以被配置成存储用于存储卡200的启动指令。DRAM可以被配置成向嵌入式处理器提供暂存存储器并且存储转换结构(例如,将逻辑地址映射到物理地址的转换表)来访问闪存芯片中的数据。NVRAM可以包括可以定期更新的用于存储卡200的固件指令。固件指令驱动和控制主控制器206和从控制器来执行读、写、擦除或维护操作来通过组件212-232的闪存芯片访问数据。嵌入式处理器执行控制和控制主从存储器控制器的固件指令来访问数据和读、写和维护DRAM中的转换结构。
[0106]嵌入式处理器可以进一步耦接到主存储器控制器206和边缘连接器204来相互通信。嵌入式处理器也可以在边缘连接器204上,与主机系统中的主机处理器通信来从主机应用或主机操作系统软件接收读写操作请求来访问存储卡200中的闪存晶片中的数据。
[0107]如上所述,每一存储卡200可以具有两种逻辑控制器,S卩,处理主机级交互的主控制器和处理闪存级交互的从控制器。主控制器和从控制器可以使用标准协议,或外围硬件接口或两者的任何适当组合通信。在一些实现中,使用基板上的物理设备上的引脚和走线,实现该接口。在主控制器和从控制器均处于相同物理设备的其他实现中,可以使用物理设备上的内部设备逻辑,实现该接口。
[0108]在一些实现中,存储卡200可以利用两个物理设备,分别实现一个主控制器和若干从控制器。主控制器中的一个可以在计算设备的主板上的PCI扩展槽上的“基板”上,而其他主控制器可以在位于基板上的扩展槽上的“子板”上。可以通过基板的主控制器,路由主机和子板的主控制器之间的通信。在这些实现中,两个主控制器之间的通信可以通过PCIe的标准接口。专用的硬件接口也是可行的。
[0109]主控制器和从控制器协调它们各自的动作来实现闪存系统的数据路径。在该上下文中,也可以称为数据平面的数据路径表示主从控制器本身不确定哪些闪存位置包含在存储器操作中。相反,由系统的控制路径或控制平面执行该确定。主从控制器从“控制路径”接收指令来执行闪存级操作并且相对于特定主机DRAM资源执行这些操作。
[0110]可以通过可以实现为由与控制器有关的主机处理器或嵌入式处理器执行的固件指令的驱动软件,实现系统的控制路径。在一些实现中,每卡有单一驱动程序,而在其他实现中,每一存储卡可以有若干驱动程序。驱动软件指令可以使每一从控制器与主控制器无关的通?目。
[0111]在一些实现中,驱动软件运行在主计算设备上,作为设备驱动程序。设备驱动程序使用标准的PCIe指令-在标准术语中,后者可以称为“存储器映射I/O” (MIMO)指令(在处理器级加载/存储指令,除被路由到适当的设备而不是DRAM外),与存储卡上的主控制器通信。反过来,驱动程序使用标准的基于主机的应用编程接口(APIs)和机制(例如系统调用),从主机中央处理单元(CPU)应用和操作系统(例如文件系统组件)接收请求。
[0112]在一些其他实现中,驱动软件运行在与基板主控制器耦接的嵌入式处理器上。在这些实现中,术语“固件”通常用来表示驱动软件。在其他的实现中,驱动功能性可以以拆分/并行方式,运行在与一个或多个主控制器有关的I个以上嵌入式处理器上。在固件运行在一个或多个嵌入式处理器上的情况下,应用/操作系统请求使用相同的PCIe存储器映射I/O指令,使用例如安装在主计算机上的中间(单独的最小)软件驱动,被传送到固件。
[0113]如上所述,主控制器、从控制器和驱动软件的组合可以称为闪存转换层或闪存管理层。闪存管理层管理闪存晶片,例如使用闪存转换表,将逻辑存储器块映射到闪存晶片中的物理位置。闪存管理层还使闪存晶片与更高级应用,诸如同步镜像模块以及操作系统连接。
[0114]图2B示例示出包括在作为组件212-232的子集的组件212、214和232中的闪存晶片的存储卡200的示意图。组件212包括闪存晶片212A…212N,组件214包括闪存晶片214A…214N以及组件232包括闪存晶片232A…232N。晶片212A…212N的每一个分别包括从控制器,诸如212A⑴…212N(i)和存储器块212A(ii)…212N(ii)。晶片214A…214N的每一个分别包括从控制器,诸如214Αα)...214Ν(?)和存储器块214A(ii)…214N(ii)。类似地,晶片232A…232N的每一个包括各自的从控制器232A(i)…232N(i)和各自的存储器块 232A(ii)…232N(ii)。
[0115]尽管图2B示出从控制器212A⑴…212N(i)、214A⑴…214N(i)和232A⑴…232N(i)安装到组件212-232并且耦接在主控制器206和多个闪存晶片之间,但在一些其他实现中,从控制器 212A(i)...212N(i)、214A(i)...214N(i)和 232A(i)-232N(i)可以安装到基板202并且耦接在主控制器206和组件212-232中的各自的闪存晶片之间。在其他实现中,从控制器212A⑴…212N(i)、214A⑴…214N(i)和232A⑴…232N(i) —起安装在具有主控制器206的集成电路组件中,并且耦接在主控制器206和组件212-232中的各自的闪存晶片之间。
[0116]每一从控制器被配置成提供对各自的晶片的透明访问。如上所述,所有从控制器通过可以实现为基板202上的PCB走线的多个主从存储器总线通道,均连接到主控制器206。主控制器206本地地控制闪存晶片来获得与包括在组件212-232中的闪存晶片的可预测带宽和延迟性能。发生在闪存晶片212A…212N、214A…214N或232A…232N上的所有操作(例如读、写、擦除、控制操作,诸如复位等等)对主控制器206 (或在其控制下)完全可见。组件中的晶片的活动晶片的闪存接口通过各自的从存储器控制器到达主控制器206。例如,晶片212A的闪存接口通过从控制器212A⑴到达主控制器206。
[0117]主控制器206能直接执行由闪存晶片212A…212N、214A…214N或232A…232N支持的每一操作。从控制器可以执行协议转换,但不丢弃/截取来自主控制器的请求(不包含相关的闪存晶片)。然而,从控制器不自动地启动任何闪存操作。
[0118]每一从控制器212A(i)...212N(i)、214A(i)...214N(i)和 232A⑴…232N⑴被配置成仲裁分别由多个闪存晶片212A…212N、214A…214N或232A…232N共用的存储器总线通道。每一从控制器能缓存和多路复用主控制器206和多个闪存晶片之间的信号。此外,每一从控制器能将可预测的非易失性存储器操作的序列组合成复合操作来提高闪存晶片的控制带宽。
[0119]访问闪存晶片212Α...212Ν、214Α…214N或232A…232N中的数据的粒度可以称为存储器块或存储器页。例如,闪存晶片212Α包括在图2Β中,由212A(ii)共同表示的多个存储器块。存储器块的大小可以基于使用的闪存的类型而改变。例如,对NAND闪存晶片和NOR闪存晶片,存储器块的大小可以不同。在NAND闪存设备中,在SLC和MLC型的NAND闪存之间大小不同。由不同工艺生成的NAND闪存也可以具有不同大小(例如,34nm NAND闪存对25nm NAND闪存)。此外,存储器块的大小可以基于在闪存设备上执行的操作类型而改变。例如,对NAND闪存设备,数据可以以写入页为单位写入到存储器设备。写入页的大小可以小,约几千字节(例如,在4KB-16KB的范围中)。
[0120]在一些实现中,可以以通常大于写入页的大小的擦除块为单位(约几兆字节),从NAND闪存设备擦除数据,以及一个擦除块可以包括多个写入页。只要将数据写入一写入页,在新数据写入该写入页前,必须擦除与该写入页有关的整个擦除块。在一些其他实现中,如上所述,可以以闪存段为单位,擦除数据。闪存段是由分布在RAID分条中的闪存晶片上的多个擦除块组成的、映射到闪存卡200的物理区的逻辑结构。
[0121]图3示例存储在闪存晶片中的存储器页300的实例。闪存芯片可以是封装在存储卡200中的212A...212N、214A…214N或232A…232N中的一个。然而,闪存芯片还可以实现在其他存储器卡或系统中。
[0122]存储器页300包括数据部302和纠错码(ECC)部304。数据部302包括存储数据的存储单元302a-302h。存储器页具有由306表示的页起始地址。
[0123]数据部大小可以取决于特定NVRAM设计和结构而改变。在所示的实施例中,数据部302具有4KB的大小。可以使用用于数据部的其他大小(例如,8KB或16KB)。
[0124]如图3所示,存储器页300具有由O至7表示的从页起始地址306的偏移地址,允许存储器单元302a-302h的每一个的大小为512字节。在一些实现中,存储器单元302a-302h的每一个可以对应于写入页,而数据部302可以对应于擦除块。因此,在这些实现中,数据部302包括写入页302a-302h。
[0125]ECC的大小随基本NVRAM实现而改变。对数据部302为4KB的结构,ECC部304为128字节。在其他实现中,ECC部的大小可以更高(诸如在500字节的范围中)来满足更大尺寸的数据部的更高媒体错误率(例如,对当代闪存设备,诸如MLC型存储器)。
[0126]ECC部304用来存储用于在302a_302h中存储的数据的纠错的ECC数据。对每一512字节单元302a-302h,可以生成纠错码。可以使用纠错码,检测程序写入错误或闪存读取错误。当ECC用来校正误码的先验预期阈值时,当误码数超出先验阈值时或由于存储设备,诸如包括存储器页300的闪存晶片的完全故障,可以使用冗余数据存储来恢复数据。
[0127]在一些实现中,数据可以存储在分别具有一个或多个连续偏移量地址、存储器页上的一个或多个512字节区域中。存储数据的区域可以称为存储器块。例如,采用单一偏移量地址允许512字节数据块存储在存储器页300的单元302a-302h的一个上。在这种情况下,通过512字节数据块的区域,一致地写入RAID组。这是例如具有分散在实现4KB存储器页,诸如页300的8个闪存晶片上的7个数据分条和I个奇偶分条的情形。在这种结构中,每一晶片看见用于相同存储器页内的每一分条的512字节区域。
[0128]在一些其他实现中,可以使用一对偏移地址(例如偏移地址6和7)来允许把IKB的数据块存储在存储器页300的区域中。在这种情况下,通过IKB的数据块的区域,写入在这种情况下的RAID组。这是具有分散在4KB的存储器页,诸如存储器页300的四个闪存设备上的3个数据分条和I个奇偶分条的情形。
[0129]在一些实现中,在主机系统上操作的软件驱动或嵌入式固件可以累积数据、计算奇偶和存储数据和奇偶信息,作为跨闪存晶片的分条。可以由主处理器,例如基于主机软件驱动或嵌入式固件的指令,执行奇偶计算。在其他实现中,操作在存储卡200上的软件驱动可以累积数据并且启动主控制器206的指令。然后,主控制器206能负责计算整个闪存晶片的奇偶信息和存储数据和奇偶分条。
[0130]存储卡200可以包括若干这种RAID组。例如,参考具有每组件8个晶片的48组件的存储卡200的实现,存储卡200可以包括24个RAID组,16晶片位于每一组中的2个组件中。
[0131]图4示例冗余地将数据存储在分布在闪存晶片组上的数据分条中的一组闪存晶片400的实例。闪存晶片可以安装在存储卡200上。例如,闪存晶片可以是封装在存储卡200中的212A…212N, 214A…214N或232A…232N。因此,下述章节描述如由系统100中的卡200实现的闪存晶片组400。然而,闪存晶片组400也可以由其他存储卡和系统实现。
[0132]组400示例RAID已知闪存布局的一种实现。组400包括N个闪存晶片402A、402B、402C至402N,统称为402A…402N。跨统称为404A…404M的M个数据分条404A和404B至404M中的闪存晶片402A…402N,存储数据页。每一分条包括N个数据块,诸如用于数据分条404A的AO…AN、用于数据分条404B的BO…BN和用于数据分条404M的MO…MN。还跨闪存晶片402A…402N存储奇偶分条406。奇偶分条由奇偶块PA-PM和单一元数据奇偶块PN组成。RAID分条中的一个或多个数据块集合在一起来形成闪存段,诸如段408。
[0133]应该理解,除所示的结构外,还可以使用不同结构。例如,可以使用分组多个数据分条上的奇偶信息的奇偶分条的不同编码。类似地,奇偶信息可以存储为单个数据分条的一部分,而不是存储在单独的仅奇偶的分条中。
[0134]闪存晶片402A…402N可以与闪存晶片212A…212N, 214A…214N或232A…232N相同。每一数据块的大小可以取决于所使用的闪存晶片的数量以及数据分条的数量。每一数据块可以具有与写入页,或擦除块相同的大小,或存储器的一些其他适当的大小单位。
[0135]对每一数据分条,通过计算包括在闪存晶片中存储的数据分条中的数据块的奇偶,生成相应的奇偶块。例如,可以基于数据块AO…AN,计算PA。元数据奇偶块PN是由先前生成的多个奇偶块计算的奇偶。因此,基于奇偶块PA…PN,计算PN。
[0136]在一些实现中,奇偶分条中的奇偶块和元数据奇偶块有选择地存储在不同闪存晶片中,使得响应故障、移除和替换闪存晶片,能恢复数据。例如,对数据分条A,数据块AO存储在闪存晶片402A中、数据块Al存储在闪存晶片402B中、数据块A2存储在闪存晶片402C中以及数据块AN存储在闪存晶片402N中。
[0137]奇偶块和元奇偶块能任意地存储在闪存晶片402A…402N上,假定它们的位置已知。例如,如所示,奇偶分条406中的PA块存储在闪存晶片402A中,PB奇偶块存储在闪存晶片402B中,PC奇偶块存储在闪存晶片402C中,以及奇偶分条406的元奇偶块PN存储在闪存晶片402N中。在另一实现中,兀奇偶块可以存储在闪存晶片402A中,PA奇偶块存储在闪存晶片402B中,PB奇偶块存储在闪存晶片402C中,以及PC奇偶块存储在闪存晶片402N中。
[0138]如所示,对每一闪存写入页,将M数据分条和一个奇偶分条写在N个闪存晶片402A-402N上。跨不同闪存晶片中的多个写入页、擦除块或一些其他适当的存储单元,分条数据和奇偶。对每一构成闪存晶片,将数据分条和奇偶分条写入一个或一对写入页、擦除块或一些其他适当存储单元内的不同偏移量。奇偶块PA是判定数据分条404A的奇偶的结果。奇偶块PB是判定数据分条404B的奇偶的结果。奇偶块PM是判定数据分条404M的奇偶的结果。PN表示在闪存晶片402N中存储的奇偶元数据块,其值为奇偶数据块PA至PM的奇偶。
[0139]系统可以被配置成响应“数据块”的相对大小和使用相对于对系统的影响的特定数据块大小。数据块可以具有等于擦除块的大小,或与存储器有关的大小的一些其他适当单位。例如,Α0...ΑΝ的每一个可以对应于各个闪存晶片402Α-402Ν中的擦除块。在这些情况下,与分条404Α有关的数据可以分别写入闪存晶片402Α至402Ν中的擦除块AO至AN。
[0140]如上所述,在分条中,可以以擦除块的粒度,或与存储器有关的大小的一些其他适当单位,将数据冗余地存储在不同闪存晶片中。例如,在闪存晶片的不同组中,复制按等于擦除块的大小的数据块,在404A中分条的数据。在一些实现中,使用奇偶编码,诸如XOR编码,如上所述,冗余地存储数据。在一些其他实现中,可以使用镜像复制数据,而在一些其他实现中,可以使用奇偶编码和镜像的一些适当组合和/或一些其他适当的机制存储数据。
[0141]在一种结构中,可以将数据分条的数据块写入8个闪存晶片。参考具有按4对设置的8个晶片的闪存晶片组件的实例,每一对的一个晶片在用于I/O操作的指定时间活动,上述结构可以包括来自一个组件,诸如212的4个活动(从I/O操作观点看)晶片,以及来自另一组件,诸如214的4个活动晶片。写入组件中的4个活动晶片的数据块可以在各个组件的其他4个同胞晶片中被复制。以这种方式,可以将数据分条且复制来提供象RAID的可靠性。在一些实现中,取决于诸如从控制器的结构和相对于存储晶片的数量的通道的因素,可以使用其他结构。例如,可以在8个不同组件的8个不同晶片上连同奇偶编码,分条数据块来提供在丢失任何单个晶片或组件的情况下,重构数据块的能力。
[0142]包含在以上述方式存储和复制数据中的闪存晶片组构成RAID组。如上所述,RAID组,也简称为RAID对在闪存晶片402A…402N中的数据提供数据可靠性。在本上下文中,RAID组与对RAID组中的每一闪存晶片,在同一存储地址偏移量对齐的擦除块的集合有关。在上述实例中,RAID组构成跨越2个组件的16个闪存晶片。RAID组具有“宽度”8,即,数据分条中的数据块跨8个闪存晶片存储并且在8个其他闪存晶片中被复制。
[0143]段408包括RAID组中的每一闪存晶片中的一个或多个擦除块。例如,数据块A0...AN的每一个可以是如上所述的擦除块。段408可以由擦除块AO…AN组成,如所示。在另一结构中,段408可以由每一闪存晶片中的两个?祭除块组成,诸如晶片402Α中的AO和Β
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1