一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

储存级存储器的制作方法

2022-07-24 01:21:08 来源:中国专利 TAG:


1.本公开在此总体上涉及用于储存级存储器(scm)的逻辑至虚拟和虚拟至物理存储器转换。


背景技术:

2.储存级存储器(scm)是一种将动态读访问存储器(dram)的低等待时间和字节可寻址性与传统存储介质的非易失性、面密度和经济特性相组合的持久性存储器。此外,给定scm技术的字节可寻址性和低延迟,中央处理单元(cpu)可以访问存储在scm中的数据,而无需在dram中缓冲该数据。因此,scm技术模糊计算机存储器和传统存储介质之间的区别,并实现不具有dram的单级架构。不同于传统的主存储器和磁盘存储配置,scm提供单级架构。
3.典型地,scm被实现为经由若干输入/输出(i/o)适配器连接至计算系统的固态设备组,这些适配器用于将i/o设备的技术映射至(一个或多个)中央处理单元的存储器总线。然而,将数据写到scm需要关注scm技术中的细节:scm介质卡被组织为封装的集合,每个封装包括具有数百万的字节可寻址的存储器元件的“n”个管芯。scm的一个共同特征是这些存储器设备具有有限的写入耐久性。具有有限写入耐久性的存储器设备意味着它不能在scm的部分开始故障之前被无限地写入。识别哪个存储器坏或易出错有助于降低丢失所存储的数据的风险。例如,可完全避免识别为坏的存储器字节(或位阵列),而可无限制地使用未识别为坏的存储器字节。此外,实施例中的坏存储器字节可被替换成备用字节。


技术实现要素:

4.给出本公开的概述以帮助理解计算机系统、计算机架构结构、处理器、储存级存储器(scm)、以及介质管理方法,并且不旨在限制本公开或本发明。本公开涉及本领域普通技术人员。应当理解,本公开的各个方面和特征可有利地单独地用于一些实例,或者在其他实例中与本发明的其他方面和特征组合。因此,可以对计算机系统、架构结构、处理器、scm以及它们的操作方法进行变化和修改以实现不同的效果。
5.公开了一种用于将数据存储在一个或多个存储芯片中的存储器系统,其中在一个实施例中,该存储器系统包括:一个或多个存储卡,每个卡具有多个存储芯片,并且每个芯片具有多个管芯,所述多个管芯具有多个存储单元;存储器控制器,所述存储器控制器包括转换模块,所述转换模块还包括:具有多个条目的逻辑至虚拟转换表(lvt),所述lvt中的每个条目被配置为将逻辑地址映射到虚拟块地址(vba),其中所述vba对应于所述一个或多个存储卡上的一组存储单元(例如,逻辑块地址(lba)),其中所述lvt中的每个条目还包括用于跟踪对映射到所述lvt条目的所述vba的写入操作的数量的写入损耗级别计数以及用于跟踪对映射到所述lvt条目的所述vba的读取操作的数量的读取损耗级别计数。在一个或多个实施例中,所述lvt中的写入损耗级别计数可编程为具有对应于对vba的写入操作的最大数量的写入级别阈值,并且响应于写入操作超过(或等于)lvt条目中的写入级别阈值,将与所述lvt条目对应的超过(或等于)所述写入级别阈值的所述存储卡中的数据移动到具有不
同vba的所述存储卡上的新位置。
6.在实施例中,该存储器系统包括vba空闲列表,所述vba空闲列表识别能够向其写入数据的vba,并且响应于写入操作,从所述vba空闲列表获得新的vba。。在一个或多个实施例中,系统被配置成被配置成基于所述损耗级别计数从所述vba空闲列表获得新的vba。在一方面,所述lvt中的读取损耗级别计数可编程为具有与vba的读取操作的最大数目相对应的读取级别阈值,并且响应于读取操作超过在lvt条目中的读取级别阈值,将与所述lvt条目相对应的超过(或等于)所述读取级别阈值的所述存储卡中的数据写入具有不同vba的所述存储卡上的新位置。响应于读取操作超过(或等于)针对lvt条目的读取级别阈值,该系统被配置为从vba空闲列表获得新的vba,并且将与lvt条目对应的超过(或等于)读取级别阈值的存储卡中的数据写入到具有不同vba的存储卡上的新位置。
7.在一个或多个实施例中,该存储器系统包括:漂移缓冲区,其具有用于临时存储数据的多个条目;以及漂移表,其具有多个条目,每个漂移表条目被配置成索引到所述漂移缓冲区中的所述多个条目中的一个,所述漂移表的每个条目将漂移缓冲区索引映射到vba,其中所述系统被配置成响应于将数据写入所述存储卡,还将所述数据写入所述漂移缓冲区中的条目并且进一步将所述vba和对应的逻辑地址(例如,逻辑块地址(lba))写入所述漂移表中的索引到所述漂移缓冲区中的所述对应条目的条目中。实施例中的存储器系统被配置为如果对应于所述vba的数据存在于所述漂移缓冲区中,则从所述漂移缓冲区中读取。在一方面,所述漂移缓冲区是包含在所述存储卡上的循环fifo缓冲区。每个lvt条目包括用于指示所述漂移缓冲区是否包含对应于所述lvt条目的数据的字段,其中所述系统响应于lvt条目上的命中而被配置,其中所述lvt字段指示数据在所述漂移缓冲区中,所述lvt条目指向所述漂移表中的条目。在一实施例中每个lvt条目具有漂移缓冲区索引有效字段,其指示所述漂移缓冲区是否包含对应于每个相应的lvt条目的数据,并且其中所述系统被配置为使得响应于从所述存储卡读取数据的请求,所述系统被配置为在所述lvt中查找所述逻辑地址并且响应于找到对应于所述逻辑地址的lvt条目,所述系统检查漂移缓冲区索引有效字段,并且响应于指示所请求的数据不在漂移缓冲区中的漂移缓冲区索引有效字段,所述系统利用来自lvt条目的vba,以及响应于指示所请求的数据在漂移缓冲区中的漂移缓冲区索引有效字段,所述系统从漂移缓冲区中读取所请求的数据。在一方面中,所述系统被配置为使得响应于漂移缓冲区有效字段指示所请求的数据在漂移缓冲区中,lvt指向漂移表中的条目,并且所述系统利用漂移表中的信息从漂移缓冲区中的对应条目获得所请求的数据。根据一实施例,所述系统被配置为使得响应于正从漂移缓冲区条目移除数据,更新对应于从其移除数据的漂移缓冲区条目的lvt条目,使得所述lvt条目包含从漂移缓冲区移除的条目的vba。
8.公开了一种根据一个或多个实施例的用于从一个或多个存储卡读取数据的方法,其中每一个存储卡具有多个存储芯片,并且每一存储芯片具有多个管芯,所述管芯具有多个存储单元。在一个方面,所述方法包括:发出对位于所述一个或多个存储卡上的数据的请求;在具有多个条目的逻辑至虚拟转换表(lvt)中查找所请求的数据的逻辑地址,所述lvt中的每个条目将逻辑地址映射到虚拟块地址(vba),其中所述vba对应于所述一个或多个存储卡中的一组存储单元;响应于所请求的数据的逻辑地址(例如,逻辑块地址(lba))位于所述lvt中的条目中,检查所述lvt条目以确定所述数据是否位于漂移缓冲区中;响应于确定
所述数据位于所述漂移缓冲区内,从所述漂移缓冲区读取所请求的数据;以及响应于确定所述数据不位于所述漂移缓冲区中,从所述lvt条目中获取与所请求的数据的逻辑地址(例如,逻辑块地址(lba))对应的vba,并且读取与所述vba对应的存储卡中的所请求的数据。
9.在一实施例中,所述方法还包括:响应于从所述存储卡读取所请求的数据,更新所述lvt中的读取级别计数字段。根据一个方面的方法还包括将所述lvt条目中的所述读取级别计数与所述lvt条目中的读取级别阈值字段进行比较,以及响应于所述读取级别计数等于或超过所述读取级别阈值,将待读取的数据写入到具有不同vba的一个或多个存储卡上的新位置。在一个实施例中,所述方法包括:响应于将待读取的数据写入到具有不同vba的一个或多个存储卡上的新位置,用所述不同vba更新所述lvt。在一方面中,所述方法还包括响应于从漂移缓冲区中移除数据,更新对应lvt条目中的vba。根据另一方面的方法包括响应于从漂移缓冲区中读取数据,将条目移动到漂移缓冲区的头部。
10.公开了一种向一种将数据写入一个或多个存储卡的方法,其中每一个存储卡具有多个存储芯片,并且每一存储芯片具有多个管芯,所述管芯具有多个存储单元。在一个或多个实施例中,所述方法包括:发出将数据写入到所述一个或多个存储卡的请求;从vba空闲列表获得可用vba;将数据写入与从vba空闲列表获得的可用vba对应的存储卡位置;将所述数据写入漂移缓冲区中的条目;以及将可用vba的vba和可用vba对应的逻辑地址写入漂移表中的对应于漂移缓冲区中的条目的条目。在一方面中,所述方法进一步包含写入具有可用vba的所述对应的lvt条目。在实施例中,该方法还包括:将漂移表索引写入对应于vba的与被写入数据的存储卡上的位置对应的lvt条目,所述漂移表索引识别与被写入数据的漂移缓冲区条目对应的漂移表条目,以及设置位以识别数据在漂移缓冲区中。
11.根据如在附图中展示的本发明的示范性实施例的以下更具体的描述,本发明的前述和其他目的、特征以及优点将是显而易见的,其中相同的参考号总体上代表本发明的说明性实施例的相同部分。
附图说明
12.当结合所提供的附图进行阅读时,将更好地理解计算机系统、计算机架构结构、处理器、存储器系统及其操作方法的不同方面、特征和实施例。出于说明方面、特征和/或计算机系统、计算机架构结构、处理器、scm及其操作方法的各种实施例,但权利要求不应限于所示的精确布置、结构、特征、方面、组件、子组件、系统、电路、实施例、方法、过程、技术和/或装置,且所示的布置、结构、系统、组件、子组件、特征、方面、方法、过程、技术、电路、实施例和装置可单独或与其他布置、结构、组件、子组件、系统、特征、方面、电路、实施例、方法、技术、过程和/或装置组合使用。
13.图1是示出根据本公开的实施例的计算机系统的功能框图。
14.图2a是示出根据本公开的实施例的示例存储器系统和控制器的功能框图。
15.图2b描绘了图2a的存储器系统的示例结构。
16.图3展示了在存储器系统中将逻辑地址转换为物理地址的硬件和过程的实施例的框图。
17.图4是用于执行主机读取的方法的实施例的流程图,该主机读取包括存储器系统(诸如例如图2a和2b的存储器系统)中的逻辑地址的转换。
18.图5是用于执行主机写入的方法的实施例的流程图,该主机写入包括存储器系统(诸如例如图2a和2b的存储器系统)中的逻辑地址的转换。
19.图6a是用于将虚拟地址转换成存储器系统(例如,图2a和2b的存储器系统)中的物理地址的方法和硬件的实施例的俯视图的框图。
20.图6b是示出用于将虚拟块地址转换为图2a和2b的存储器系统的物理地址的示例方法的流程图。
21.图6c示出了用于将虚拟块地址转换为图2a和2b的存储器系统的物理地址的示例转换表。
22.图7是示出了用于图2a和2b的存储器系统的清理过程的示例方法的流程图;
23.图8是示出用于图2a和2b的存储器系统的存储器修复动作的示例方法的流程图。
24.图9a、图9b和图9c示出了用于图2a和图2b的存储器系统的不同类型的存储器修复动作的示例场景。
具体实施方式
25.以下描述是为了展示本发明的一般原理而做出的,并且不旨在限制在此要求的发明概念。在以下详细描述中,阐述了许多细节以便提供对计算机系统、计算机架构结构、处理器、高速缓存、存储器系统及其操作方法的理解,然而,所属领域的技术人员将理解,计算机系统、计算机架构结构、处理器、高速缓存、存储器系统及其操作方法的不同和众多实施例可在没有那些特定细节的情况下实践,以及权利要求和公开不应限于本文中具体描述和示出的布置、结构、系统、组件、子组件、电路、特征、方面、过程、方法、技术、实施例和/或细节。进一步,在各种可能的组合和置换的每个中,本文中描述的特定特征、方面、布置、系统、实施例、技术等可与其他描述的特征、方面、布置、系统、实施例、技术等组合使用。
26.除非在此另外明确定义,所有术语将被给予其最广泛的可能解释,包括从说明书中暗示的含义连同本领域技术人员所理解的和/或如在字典、论文等中定义的含义。还必须注意的是,如在说明书和所附权利要求书中所使用的,除非另外指明,单数形式“一个”、“一种”和“该”包括复数指示物,并且当在本说明书和权利要求书中使用时,术语“包括”和/或“包含”指定了所陈述的特征、整体、方面、安排、实施例、结构、系统、组件、子组件、步骤、操作的存在,元件和/或部件,但不排除一个或多个其他特征、整体、方面、布置、实施例、结构、系统、组件、子组件、步骤、操作、元件、部件和/或其组合的存在或添加。
27.以下讨论省略或仅简要地描述信息处理系统的常规特征,包括处理器和微处理器系统和架构、以及地址转换技术和系统,这些特征对于本领域技术人员而言应该是显而易见的。假设本领域技术人员熟悉处理器的一般架构,并且具体而言熟悉地址转换技术和系统及其操作。要注意的是,根据引入元件的示图,编号元件,并且在后续示图中通常通过该数字指代编号元件。
28.图1描绘了根据本发明的一个实施例的经由网络130连接到另一个计算机100-b上的计算机100-a的高级框图表示。术语“计算机”在此仅为了方便而使用,并且在不同实施例中是更通用的数据处理系统,诸如移动电话、平板电脑、服务器计算机等。本发明的实施例的机制和装置同样适用于任何适当的数据处理系统。
29.计算机100的主要部件可以包括一个或多个处理器101、主存储器系统102、终端接
口111、存储接口112、i/o(输入/输出)设备接口113、以及网络适配器或接口114,所有这些部件直接或间接地通信地耦合,以用于经由存储器总线103、i/o总线104、以及i/o总线接口单元105的部件间通信。这个计算机100包含一个或多个通用可编程中央处理单元(cpu)101a、101b、101c和101d,在本文中统称为处理器101。在实施例中,计算机100包含典型的相对大的系统的多个处理器;然而,在另一实施例中,计算机100可以替代地是单个cpu系统。每个处理器101执行存储在主存储器系统102中的指令,并且可以包括一个或多个级别的板上高速缓存。
30.在实施例中,主存储器系统102可以包括用于存储或编码数据和程序的随机存取半导体存储器(例如,dram、scm、或两者)、存储器件、或存储介质。在另一实施例中,主存储器系统102表示计算机100的整个虚拟存储器,并且还可以包括耦合到计算机100或经由网络130连接的其他计算机系统的虚拟存储器。主存储器系统102在概念上是单个单片实体,但是在其他实施例中,主存储器系统102是更复杂的布置,诸如高速缓存和其他存储器设备的层级。例如,存储器可存在于多级高速缓存中,并且这些高速缓存可进一步按功能划分,使得一个高速缓存保持指令,而另一高速缓存保持非指令数据,该非指令数据被一个或多个处理器使用。存储器可以进一步分布并且与不同的cpu或cpu集合相关联,如在各种所谓的非一致存储器访问(numa)计算机架构中的任意一个中已知的那样。
31.主存储器系统102存储或编码操作系统(os)150、应用160、和/或其他程序指令。尽管操作系统(os)150、应用160等被示出为包含在计算机100中的主存储器系统102内,但是在其他实施例中,它们中的一些或全部可以位于不同的计算机系统上并且可以例如经由网络130远程访问。计算机100可以使用虚拟寻址机制,该虚拟寻址机制允许计算机100的程序表现为好像它们仅具有对大的单个存储实体的访问权而不是对多个较小的存储实体的访问权。因此,虽然操作系统150、应用160或其他程序指令被图示为包括在主存储器系统102内,但是这些元件不必同时全部完全包括在相同的存储设备中。此外,尽管操作系统150、应用160、其他程序指令等被图示为单独的实体,但是在其他实施例中,它们中的一些、它们中的一些的部分或者它们全部可以被封装在一起。
32.在实施例中,操作系统150、应用160、和/或其他程序指令包括在处理器101上执行的指令或语句、或由在处理器101上执行的指令或语句解释的指令或语句,以便执行如下文进一步描述的功能。当这样的程序指令能够由处理器101运行时,这样的计算机100变成被配置为执行这样的指令的特定机器。例如,用于存储器镜像应用160a的指令可以被加载在一个或多个计算机100a上,其使得计算机100a将主存储器系统102镜像到第一部分和冗余第二部分中。在另一示例中,主存储器系统102可以由操作系统150镜像。在另一示例中,主存储器系统102可被虚拟化器应用170(诸如管理程序)镜像。
33.一个或多个处理器101可以充当通用可编程图形处理器单元(gpu),所述gpu构建用于输出到显示器的图像(例如,gui)。gpu结合一个或多个应用160工作,确定如何操纵例如显示器、触摸屏等上的像素以创建显示图像或用户界面。最终,图像(例如,gui等)显示给用户。处理器101和gpu可以是分立组件或者可以集成到单个组件中。
34.存储器总线103提供用于在处理器101、主存储器系统102以及i/o总线接口单元105之间传输数据的数据通信路径。i/o总线接口单元105进一步耦合到系统i/o总线104,用于向和从不同i/o单元传送数据。i/o总线接口单元105通过系统i/o总线104与也称为i/o处
理器(iop)或i/o适配器(ioa)的多个i/o接口单元111、112、113和114通信。i/o接口单元支持与各种存储装置和i/o设备的通信。例如,终端接口单元111支持一个或多个用户i/o设备121的附接,其可以包括用户输出设备(诸如视频显示设备、扬声器和/或电视机)和用户输入设备(诸如键盘、鼠标、小键盘、触摸板、轨迹球、按钮、光笔或其他指示设备)。用户可以使用用户接口操纵用户输入设备,以便向用户i/o设备121和计算机100提供输入数据和命令,并且可以经由用户输出设备接收输出数据。例如,可以经由用户i/o设备121呈现用户界面,诸如在显示设备上显示、经由扬声器播放或经由打印机打印。用户界面可以是向用户可视地(例如,经由屏幕)、可听地(例如,经由扬声器)和/或经由触摸(例如,振动等)提供内容的用户界面。在一些实施例中,计算机100本身充当用户接口,因为用户可以以与计算机应用160交互、输入或操纵数据、功能等的方式移动计算机100。
35.存储接口单元112支持一个或多个本地磁盘驱动器或辅助存储设备125的附接。在实施例中,辅助存储设备125是旋转磁盘驱动器存储设备,但是在其他实施例中,它们是被配置为对主机计算机表现为单个大存储设备的磁盘驱动器的阵列,或者任何其他类型的存储设备。主存储器系统102的内容或其任何部分可以根据需要存储到辅助存储设备125中和从辅助存储设备125中检索。本地辅助存储设备125通常具有比主存储器系统102更慢的访问时间,意味着从主存储器系统102读取数据和/或将数据写入主存储器系统102所需的时间小于从本地辅助存储设备125读取数据和/或将数据写入本地辅助存储设备125所需的时间。
36.i/o设备接口113提供至不同其他输入/输出设备或其他类型的设备(诸如打印机或传真机)中的任一者的接口。网络适配器114提供从计算机100到其他数据处理装置(诸如许多其他计算机)的一个或多个通信路径,这种路径可以包括例如一个或多个网络130。尽管存储器总线103在图2中示出为在处理器101、主存储器系统102以及i/o总线接口105之间提供直接通信路径的相对简单的单个总线结构,但是实际上,存储器总线103可以包括多个不同的总线或通信路径,其可以以各种形式中的任一种布置,诸如分级、星形或者网状配置中的点对点链路、多个分级总线、并行和冗余路径、或者任何其他合适类型的配置。此外,虽然i/o总线接口105和i/o总线104被示出为单个相应的单元,但是计算机100实际上可以包含多个i/o总线接口单元105和/或多个i/o总线104。虽然示出了多个i/o接口单元,其将系统i/o总线104与运行到各个i/o设备的各个通信路径分开,但是在其他实施例中,一些或全部i/o设备直接连接到一个或多个系统i/o总线。
37.i/o接口113可以包含用于将i/o总线104上的一种协议的数据适配或转换为另一总线上的另一协议的电子组件和逻辑。因此,i/o接口113可以使用包括但不限于令牌环、千兆字节以太网、以太网、光纤通道、ssa、光纤通道仲裁环(fcal)、串行scsi、ultra3 scsi、无限带宽、fddi、atm、1394、escon、无线中继器、twinax、lan连接、wan连接、高性能图形等的一个或多个协议来将各种各样的装置连接到计算机100并且彼此连接,诸如但不限于磁带驱动器、光盘驱动器、打印机、盘控制器、其他总线适配器、pci适配器、工作站。尽管示出为不同实体,但是多个i/o接口单元111、112、113和114,以及i/o接口单元111、112、113和114的功能可以集成到类似设备中。
38.在不同实施例中,计算机100是多用户大型计算机系统、单用户系统、服务器计算机、存储系统、或具有很少或没有直接用户界面但从其他计算机系统(客户端)接收请求的
类似装置。在其他实施例中,计算机100被实现为台式计算机、便携式计算机、膝上型或笔记本计算机、平板计算机、袖珍计算机、电话、智能电话、寻呼机、汽车、电话会议系统、电器或任何其他适当类型的电子设备。
39.网络130可以是任何适合的网络或网络的组合,并且可以支持任何适合向/从计算机100a和至少计算机100b传送数据和/或代码的协议。在不同实施例中,网络130可以表示直接或间接连接到计算机100的数据处理装置或数据处理装置的组合。在另一实施例中,网络130可以支持无线通信。替代地和/或另外地,网络130可以支持硬连线通信,诸如电话线或电缆。在实施例中,网络130可以是互联网,并且可以支持ip(互联网协议)。在实施例中,网络130被实施为局域网(lan)或广域网(wan)。在实施例中,网络130被实施为热点服务提供商网络。在另一实施例中,网络130在内联网上实现。在实施例中,网络130被实施为任何适当的蜂窝数据网络、基于小区的无线电网络技术或无线网络。在实施例中,网络130被实施为任何合适的网络或网络的组合。尽管示出了一个网络130,但是在其他实施例中,可以存在任何数量的(相同或不同类型的)网络。
40.图1旨在描绘计算机100的代表性主要部件。但是,各个组件可以具有比图1中表示的更大的复杂度,可以存在不同于图1中示出的那些或者除其之外的组件,并且此类组件的数量、类型和配置可以变化。在此公开了此类额外复杂性或额外变体的若干特定实例;这些仅作为实例并且不一定是仅有的此类变体。例如根据本发明的各个实施例在计算机系统100上实现的不同程序指令可以以多种方式实现,包括使用不同计算机应用、例程、组件、程序、对象、模块、数据结构等。
41.现在参见图2a,展示了经由存储器控制器200与处理器101通信的示例主存储器系统102的示意性框图。如图2a所示,存储器模块或卡102(例如,scm介质卡)被配置为将数据存储在多个“k”封装(即,芯片)252a-k(例如,k=24)中,并且每个封装包括多个“n”管芯251a-n(例如,n=16)。实施例中的每个封装可以包括相同数量“n”个管芯(例如,n=8、16等)。管芯251a-n中的每个管芯包括多个“m”个存储器单元,具体地,存储器单元250a-m。每个管芯中的多个存储器单元250可以被分组成多个“x”个介质替换单元(mru)组253a-p,在实施例中,每个管芯可以包括固定数量的mru组253。例如,在管芯251中可以有16个(x=16)mru组。在一个或多个实施例中,存储器模块/卡102还包括用于存储数据(例如,如稍后将描述地临时存储数据)的漂移缓冲区260。在一方面中,存储器模块/卡102还包括用于将条目映射到漂移缓冲区260的漂移表230,如稍后将描述的。
42.进一步地,如图2b所示,每个mru组253a-p可以包括多个mru 254a-n,每个mru包括多个“b”个位阵列,并且在包括存储器单元的位阵列中的每个位。即,如图2b所示,实施例中的mru组被分成128列,称为位阵列。mru组被分割水平地分成称为mru的行。每个mru具有128位阵列。图2b中的每个框可以是一百万位的位阵列。此外,每个mru包括“p”数量的页,其中页是可以在scm中写入或读取的数据的单位(例如,16字节或128位)。在实施例中,mru可以包含1m页。页在读写操作期间使用来自有效位阵列的位。每个页从中取得存储器单元的有效位阵列的数量可以取决于存储器模块/卡102中的存储器单元的所需冗余和/或清理处理(如下所述)。例如,在每个mru中,如果四个位阵列被保留为用于与发生故障/易出错的位阵列的交换操作的备用,则在读-写操作期间,每个页将包括来自128位阵列中的124个有效位阵列的位(mru中的128位阵列减去4个保留位阵列=124个有效位阵列)。这意味着页可以存
储15.5字节的实际数据。如下所述,来自单个封装中的所有mru组和管芯的备用mru可以替换该封装中的发生故障的mru。
43.应注意的是,每位阵列使用1百万位(1024*1024)是本公开中所公开的举例实施例的设计选择。然而,本公开不限于此,并且可以使用每位阵列的任何数量的位(例如,500,000、2百万、3百万等)。每位阵列的位数然后用于确定mru的数量,并且因此确定表的大小(例如,芯片选择表(cst)、介质修复表(mrt)、位阵列修复表(bart)等)。
44.存储模块/卡102的总容量可以根据k*c(以字节测量)来确定,其中c是每个封装的容量。在存储器模块/卡102的k个封装中,一些封装可以用于存储数据,并且其他或剩余封装可以用于纠错码(ecc)和用于数据管理的元数据。错误校正码用于校正包括在数据区中存储的数据中的错误。每个存储器模块/卡102(例如,scm介质卡)具有i/o数据,该i/o数据具有z位数据宽度和取决于容量的适当大小的地址位。scm可以是例如相变存储器(pcm)、电阻式ram(rram)或任何适当的非易失性存储器。
45.虽然图2a将存储器控制器200示出为位于存储器模块/卡102的外部,但是本公开不限于此,并且控制器200可以是存储器模块/卡102的一部分。如图2a所示,控制器200可包括地址转换模块202、清理模块204和介质修复模块206中的至少一个。模块202、204和206可以在软件、固件、硬件或软件、固件和硬件中的两个或更多个的组合中实现。在其他实例中,控制器200可以包括另外的模块或硬件单元,或者可以包括更少的模块或硬件单元。控制器200可以包括微处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其他数字逻辑电路。
46.地址转换模块202可以使由处理器101使用的逻辑块地址(lba)和/或虚拟块地址(vba)与存储器模块/卡102的物理块地址(pba)相关联(如以下所讨论的)。例如,响应于地址转换模块202从处理器接收到lba作为读或写命令的一部分,地址转换模块202可以经由逻辑到虚拟表(lvt)210来查找vba,地址转换模块202然后可以使用vba来确定与所接收的lba相对应的存储器模块/卡102的pba。在一些示例中,地址转换模块202可以使用分层虚拟到物理表结构(v2p)来执行从vba到pba的转换(如下所述)。例如,地址转换模块202可包括芯片选择表(cst)220、介质修复表(mrt)222和位阵列修复表(bart)224。
47.清理模块204可以被配置成用于检测并校正存储器模块/卡102中的故障或错误。存储器中的错误可以由阿尔法粒子或其他粒子引起,或者由存储器单元中的物理缺陷引起。如在此所使用的,术语“清理(scrubbing)”通常是指在存储器系统中检测错误并校正可校正的错误的过程。错误可以包括软(或瞬态)错误以及在某些情况下的硬错误。在不同实施例中,存储器清理可以使用如下所述的检测和校正存储器中的位错误的过程。为了不干扰来自cpu的常规存储器请求并且因此防止性能降低,可以通过使存储器模块/卡102的特定部分退出用于清理过程的服务来完成清理(以下描述)。由于清理可以包括正常的读和/或写操作,因此与非清理操作相比,它可以增加存储器的功耗。因此,根据各种实施例,不连续地而是周期性地执行清理。对于许多服务器,可以在bios设置程序中配置用于清理的定时或周期。
48.在某些实施例中,清理模块204可以包括错误率表(ert)240。错误率表可以被配置为存储与存储器模块/卡102中的存储器缺陷或错误有关的信息。在某些实施例中,可以为存储器模块/卡102中包括的每个封装分配ert(例如,用于介质卡的24个封装的24个ert)。
49.介质修复模块206可以被配置成通过分析存储在ert中的信息来修复存储器模块/卡102中的错误或缺陷。例如,介质修复模块206可创建ert概括表,并且使得存储器控制器执行适当的校正动作,诸如但不限于,用适当运行的备用替换存储器模块/卡102的一个或多个故障部分(例如,用适当的备用替换故障位阵列、mru、mru组、管芯或封装);修改各个转换表;搜索备用存储器部分/位置;创建备用存储器部分/位置;重新平衡备用存储器部分/位置(以增加定位备用以备将来替换的可能性)。在实施例中,介质修复模块206可被配置为考虑功能正确性,同时避免可负面地影响存储器模块/卡102的性能的替换。
50.现在参见图3,用于将逻辑地址转换成虚拟地址(逻辑到虚拟(l2v)转换)的存储器系统中的硬件和过程流程的实施例的框图概述,其中虚拟地址可以被转换成介质卡390上的真实或物理地址(虚拟到物理(v2p)转换)。主机通过逻辑单元号(lun)和逻辑单元号偏移(lun偏移)寻址存储器/介质卡390。转换表360将这些lun和lun偏移转换为逻辑块地址(lba)。如图3中的lba表360所示,支持多个lun。在实施例中,对于主机可以访问的每个4kb块存在lba。lba被馈送到逻辑到虚拟转换表(lvt)370中,该lvt 370将每个lba转换或变换成虚拟条目或地址,例如虚拟块地址或vba。vba被馈送到介质表380中,其中虚拟地址(例如,vba)被转换成介质卡390上的物理或真实地址,如本公开的稍后部分中详细解释的。一个或多个实施例中的虚拟到物理转换包括用于修复介质的芯片选择表(cst)、介质修复表(mrt)和位阵列修复表(bart)。
51.在一个或多个实施例中,lvt 370被安排成表结构并且具有多个条目372。在实施例中,lvt 370中的每个条目372包括虚拟块地址(vba)或漂移表索引、写入损耗级别计数数据和读取损耗级别计数数据。对于每个lba,存在到vba的一对一映射(假设lba没有被修整)。在lvt中可包括其他元数据。在实施例中,lvt 370被存储在dram中,并且在一方面,每个条目的字段大小很小,例如每个条目8字节。在实施方式中,lvt 370位于存储器控制器200中,并且在一个方面中,lvt 370可以包括在图2a中示出的地址转换模块202(图2a中的lvt 210)中。下表1说明lvt条目372的实例。
52.表1:lvt条目字段
[0053][0054]
表1中的lvt条目仅是一个示例,并且针对lvt 370和lvt条目372设想了其他存储介质、字段、和字段大小。介质卡390上的介质将随着时间消耗一些位置,因此在一个或多个实施例中,该设计将超载视觉。应当存在少量的过度供应以考虑介质耗尽,并且因此根据一个方面,lba的数量通常将略小于vba的数量,例如少10%。因此,例如,如果介质卡390支持614m vba,则lvt 370将具有接近614m的条目。在实施例中,向主机指示存储器的总大小小于其实际大小。
[0055]
介质卡390允许对同一地址/位置执行写入操作,但是由于写入可能干扰介质卡390上的相邻区域,在实施例中,将新数据写入介质卡390上的不同位置。在一方面中,介质卡390上没有位置被写入超过阈值数目(例如,10,000次),超过介质卡390上的任何其他位置。例如,在实施例中,介质卡390上的位置(例如,存储器单元块)不被写入介质卡上的另一位置被写入的“y”次数。lvt 370中的写入损耗级别字段(表1中的位39:32)用于控制操作的这个方面。读取也可能干扰介质,所以数据应在位置的“n”个读取之后被重写到新的位置/地址。lvt 370具有读取损耗级别计数(表1中的位53:40)以跟踪和记录自从最后一次写入该块起,该块已经发生的读取的数量。响应于读取计数超过值(例如,阈值),该块将被移动和/或复制到介质卡上的将具有新vba的新位置。例如,在10,000次读取之后,硬件将进行损耗级别移动,其中数据被复制/写入到介质卡上的具有对应的新vba的新位置。
[0056]
在介质卡上的新位置被写入之后,不应在一段时间(通常为毫秒,例如10毫秒)内读取它。为了克服等待读取介质卡上的新位置的潜在等待时间,在实施例中提供漂移缓冲区。实施例中的漂移缓冲区260被包括在图2a所示的介质卡102上。漂移缓冲区优选地是fifo缓冲区,该fifo缓冲区用于保持新写入的数据的副本,使得在不应读取新写入的介质
的时间帧期间可以读取漂移缓冲区而不是介质卡390。漂移缓冲区具有多个条目,并且在实施例中具有表或索引(例如,漂移缓冲区索引或漂移表330)以使vba与漂移缓冲区中的条目相关。当数据被新写到介质(例如,存储卡)时,数据也被写到漂移缓冲区条目,并且vba被存储在对应于漂移缓冲区条目的漂移表条目332中。漂移表330存储vba和相应的lba。例如,漂移表条目索引到漂移缓冲区条目并且将vba映射到相应的lba。当数据被写入漂移缓冲区时,lvt 370中的vba字段使用漂移表索引而不是vba指向漂移表条目372。当处理读操作时,在lvt中对应lba的表条目具有漂移缓冲区索引有效位,该漂移缓冲区索引有效位被设置成指示数据在漂移缓冲区中,系统使用漂移表来标识漂移缓冲区表条目,并从相应的漂移缓冲区中读取数据。在设置漂移缓冲区索引有效位的情况下,在实施例中,lvt不返回vba。在实施例中,漂移表330小于lvt 370,并且可以是控制器200和/或介质卡102/390上的dram。示例漂移表条目332在以下表2中示出。
[0057]
表2:漂移表条目
[0058][0059][0060]
当数据已经老化出漂移缓冲区时,将来自漂移表330的vba字段复制到lvt 370中的对应条目372中。漂移表330和lvt 370的表结构使得容易利用漂移缓冲区也是读取高速缓存。当用作读取高速缓存时,漂移缓冲区将被填充在写入和读取或读取之前两者上。此外,频繁利用的数据保留在漂移缓冲区中的时间可用漂移表330更新来延长,其中正被利用的数据将保留在漂移缓冲区中。例如,可以将读取命中数据移动到漂移缓冲区的头部。以这种方式,频繁读取数据停留在漂移缓冲区中的时间可以延长。
[0061]
图3还示出了vba空闲列表340。vba空闲列表340具有多个条目342。没有主动存储关联lba的数据的vba被保持在vba空闲列表340上,并且在实施例中,基于损耗级别被组织或优先化。当写入命令要求空闲vba存储数据时,从vba空闲列表340获得空闲vba。如果写入命令是针对先前已经写入的lba,则将先前使用的vba(对应于先前使用的lba)添加到vba空
闲列表340。vba空闲列表340可以位于控制器200和/或介质卡102/390上。下面的表3示出了vba空闲列表340中的空闲列表条目,其中这些条目由vba索引。
[0062]
表3:vba空闲列表条目
[0063][0064]
现在参考图4,公开了示出处理主机读命令的示例方法400的流程图,包括例如将逻辑地址(例如,lba)转换和/或变换为虚拟块地址或vba。附图中的流程图和框图示出了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现方式的示范性架构、功能和操作。对此,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替换实现中,在框中指出的功能可按与图中指出的次序不同的次序发生。例如,取决于所涉及的功能,连续示出的两个块实际上可以基本上同时执行,或者这些块有时可以以相反的顺序执行。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作或执行专用硬件与计算机指令的组合的专用的基于硬件的系统来实现。
[0065]
在405,由主机发出主机读取命令。如上所述,主机通过逻辑单元号(lun)和lun偏移对介质卡进行寻址。在410处lun和lun偏移被转换成逻辑块地址或lba。在415,读取对应于lba的逻辑到虚拟地址转换表或lvt条目。即,在实施例中,搜索lvt并且使用从lun和lun偏移转换的lba来执行比较,并且读取lvt中与该lba对应的条目。在一个或多个实施例中,在420处确定从lvt读取的条目是否被修整。lvt中的经修整的条目是条目在介质上不可用和/或不应被读取的情况。在表1的实施例中,位54指示lvt中的条目372是否被修整。如果在420读取的条目被修整(420:是),则在425返回零,并且在430向主机通知良好完成。
[0066]
如果在420处,所读取的lvt条目未被修整(420:否),则过程400继续到435,其中确定lba是否在漂移缓冲区中(在漂移表中被索引)。因此,例如,对于诸如表1的示例中的lvt条目,位31(漂移缓冲区索引有效位)被读取,并且如果位31被设置为1,则lba处于漂移缓冲区中。如果lba处于漂移缓冲区中(435:是),则在440读取漂移表330中具有对应lba的条目。从漂移表获得漂移缓冲区的条目,并且在445读取相应的漂移缓冲区。在表1的示例中,如果lba在漂移缓冲区中,则lvt中的位20:0是到漂移表330中的索引,并且漂移表中的对应条目指示漂移缓冲区中要读取什么条目。在445读取漂移缓冲区之后,过程继续到450,其中在一个或多个实施例中,确定是否存在任何读取错误。如果存在读取错误(450:是),则在460,向主机通知读取失败。如果没有读取错误(450:否),则在455向主机通知良好完成,例如良好读取完成。
[0067]
如果在435处确定lba不在漂移缓冲区中(435:否),则在470处更新lvt读取级别计数。在表1的示例lvt条目中,如果漂移缓冲区索引有效位31被设置为0,则lvt中的位29:0指
的是在储存级存储器(scm)上选择5120字节块的vba。在该示例中,lba不在漂移缓冲区中,因此过程400在475处继续,在那里检查该条目(介质地址)的读取级别计数是否超过特定阈值。例如,可以确定读取计数级别是否超过阈值,例如10,000次读取。阈值级别可以被设置在不同的值,不同的值可以被预编程,或者可以基于许多因素在操作期间被改变。如果读取电平确实超过读取级别计数(475:是),则在480调度损耗级别移动操作,其中数据被移动到新位置,如例如在本公开中所讨论的。在480的损耗级别移动之后,过程400在485处继续,在此处从lvt读取vba和元数据。另一方面,如果在475处确定尚未超过读取计数阈值(475:否),则过程继续到485,其中从lvt读取vba和元数据。如图4所示,处理在485之后继续,其中在450确定是否存在任何读取错误,并且根据是否存在任何错误,在455通知主机良好完成,或者在460通知主机读取失败。
[0068]
现在参见图5,公开了示出处理主机写入命令的示例方法500的流程图,包括例如将逻辑地址(例如,lba)转换和/或变换为虚拟块地址或vba。在505,由主机发出主机写入命令就绪指示。写命令的地址作为lun和lun偏移量发出。在510处,将lun和lun偏移转换成逻辑块地址或lba。在512,在一个或多个实施例中,确定主机写数据是否是全零。如果主机写数据是全零(512:是),则过程跳到步骤540,并且不执行向介质(或漂移缓冲区)写数据。如果主机写数据不是全零(512:否),那么过程继续到515,其中做出对可用条目的vba空闲列表的请求。在一个或多个实施例中,该请求是针对具有最低损耗级别的vba,和/或vba空闲列表被配置成用于提供具有最低损耗级别的vba。
[0069]
在520处,将数据写入存储器(例如,介质卡)中。此外,在525处,数据还被写入到漂移缓冲区,并且在530处,新的漂移表条目被写入。也就是说,在525和530中,数据被写到漂移缓冲区中的条目,并且漂移缓冲区中的条目被索引到的漂移表中的对应条目被写有vba、lba,并且可选地被写有表2中所示的元数据或其他数据。在一方面,crc和其他元数据与来自主机的请求一起被提供。在535,确定写入是否完成。过程保持在535,直到写入完成(535:是)。
[0070]
当介质、漂移缓冲区和漂移表的写入完成时,过程500继续到540,其中读取旧的lvt条目。在540处读取对应于lba的lvt。在一个或多个实施例中,用新的lvt条目替换旧的lvt条目。在545处,确定是否修整旧的lvt条目。如果lvt条目被修整,则其指示介质不应被读取或不可用。在一个或多个实施例中,当lba从未被写入或最后用置零数据被写入时,lvt中的条目被标记为被修整。如果旧的lvt条目被标记为修整的(545:是),则过程继续到565,其中写入新的lvt。如果在545处旧lvt未被修整(545:否),则过程继续到550,其中确定与正被写入的vba相对应的lba是否在漂移缓冲区中。如果在550的lba被确定为在漂移缓冲区中(550:是),则在555读取旧的漂移表条目以得到vba。注意,在555获得的漂移表中的条目是不同的条目,然后在530被写入漂移表中的条目,因为写入处理重写漂移表中的旧条目并且读取条目不被更新。继续,在560,vba被返回到vba空闲列表,其中指示损耗级别。如果在550确定lba不在漂移缓冲区中(550:否),则在实施例中直接进行到560,其中vba被返回到具有其指示的损耗级别数据的空闲列表,使得可用的vba可以在vba空闲列表中被优先化。在560之后,过程进行到565,其中写入新的lvt。
[0071]
在实施例中,在560之后,过程进行至565,其中写入新的lvt。所写的lvt的内容将取决于先前的处理。如果新的lvt条目将被标记为由于主机写入数据为全零(512:是)而被
修整,则新的lvt条目将包含修整的指示符、无效vba和被清除(设置为零)的漂移缓冲区索引有效字段。如果因为主机写数据不是全零(512:否),所以新的lvt条目将不被标记为被修整,则新的lvt条目将包含设置为指示漂移缓冲区索引与有效漂移缓冲区索引一起有效的漂移缓冲区索引有效字段。当写入新的lvt条目时,lvt条目中的读取计数字段总是被清除(设置为零)。在一个或多个方面,在565处将包括损耗级别数据的其他元数据写入到lvt条目。在一方面中,写入损耗级别来自vba空闲列表340。在565之后,处理继续至570,其中通知主机写入完成。
[0072]
可以认识到,在一个或多个实施例中,写入操作可以触发漂移表抛弃(cast-out)575。在开始时,漂移缓冲区具有用于下一写入操作的空间。然而,在漂移缓冲区满之后,最老的条目应是未分配的以为下一写入操作腾出空间。在一个或多个实施例中,漂移缓冲区可能需要在漂移缓冲区中抛弃或未分配一个或多个条目,并且可以在写入指针之前抛弃若干条目,因此存在对漂移缓冲区的下一写入的空间。在抛弃漂移缓冲区条目的实施例中,读取漂移表以获得抛弃信息,包括要从漂移缓冲区移除的一个或多个漂移表条目的lba。接下来,读取要从漂移缓冲区中移除的一个或多个lba的lvt条目,并且确定与要从漂移缓冲区中抛弃的一个或多个lba相对应的lvt条目是否指向漂移表。如果lvt条目指向漂移表(例如,设置了漂移缓冲区索引有效位),则写入lvt条目以清除漂移缓冲区索引有效位并将lvt条目中的dbi改变为vba。如果lvt条目不指向漂移表,例如,未设置漂移缓冲区索引有效位,则lvt已经被更新并且lvt条目的更新不是必需的。
[0073]
现在参照图6a,示出了将虚拟块地址(vba)转换成介质卡上的物理地址所涉及的硬件和过程的视图上的框图,并且参照图6b,示出了将虚拟块地址(vba)转换成物理地址的示例的流程图,所述物理地址指示用于在图1、2a和2b的存储器模块/卡102中执行读/写操作(字节可寻址)的适当位。图中的流程图和框图示出了根据本发明的各个实施例的系统、方法和计算机程序产品的可能实现方式的示范性架构、功能和操作。对此,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替换实现中,在框中指出的功能可按与图中指出的次序不同的次序发生。例如,取决于所涉及的功能,连续示出的两个块实际上可以基本上同时执行,或者这些块有时可以以相反的顺序执行。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作或执行专用硬件与计算机指令的组合的专用的基于硬件的系统来实现。
[0074]
本领域技术人员将理解的是,vba可以使用上述方法和结构从主机接收的逻辑块地址(lba)中导出,并且在一个或多个实施例中使用源自任何现在或之后已知的方法导出。图6b的流程图基于以下假设:图1的存储器模块/卡102的最低可寻址粒度为16字节,并且存储器模块/卡102包括24个封装、每个封装8或16个管芯、每个管芯16个mru组、每个mru组64个mru、每个mru有128位阵列(其中4个是备用的)、每个位阵列中的100万位和每个mru有100万页(每个页包括128位,即16字节)。应当理解,图6b的过程可用于其他存储器系统配置。
[0075]
该流程图进一步假定对包括4k字节大小的数据块的数据执行读/写操作。照此,针对总共5120字节的数据执行每个读/写操作,该数据包括从主机接收的4k字节的数据、ecc字节和一些元数据。假定存储器模块/卡102的最低可寻址粒度为16字节,5120字节的数据可以跨存储器模块/卡102存储在320个离散页中(每个16字节,15.5字节用于保持实际数
据)。将理解,320个分立的页应当跨存储器模块/卡102均匀地分布,以用于损耗均衡。因此,转换处理将vba转换成存储器模块/卡102中的物理地址的320个离散页,并且vba表示这样的320个离散页。vba是30位地址,并且vba的低20位(即,最低有效位)在转换期间被忽略,因为它们表示全部具有vba的相同高10位(最高有效位)的1百万4k字节大小的块的集合(共同地,1百万4k字节块被称为由vba表示的虚拟修复单元(vru))。应注意,本文所公开的举例实施例使用30位vba来对4tb介质卡进行寻址。然而,本公开不限于此,并且其他大小的地址可以类似地用于不同的介质卡。如下所述,高10位可以用于使用芯片选择表识别vru。基于实际介质卡来配置vru的数量(例如,如果4tb的介质卡的实际存储容量是大约2.5tb,则vru的数量是614)。对于不同的介质卡,不同的高位可以用于使用芯片选择表(cst)识别vru。
[0076]
如图6c所示,vba到物理地址的转换是多层查找,其包括至少三个查找表:芯片选择表(cst)(例如,对于所有24个封装相同)、24个介质修复表(mrt)(例如,每个封装一个)和24位阵列修复表(bart)(例如,每个封装一个)。在602,vba被索引到cst中。如上所述,在一个或多个实施例中,在转换期间忽略表示vru的vba的低20位,并且在步骤602,仅将vba的高10位索引到cst中。
[0077]
如图6c所示,cst 610包括由封装号(例如,pkg 0-23)索引的列和由vru号索引的行。使用vba的高(最高有效)10位来标识vru号。cst610中的每个条目611包括总共16位:用于确定中间修复单元(iru)数量的最低有效9位(即,9个iru位);接下来的3位被保留以供将来使用,接下来的1位指示是否vru要被清理(即,清理位),接下来的位是指示封装是否被包括在vru中用于执行vba读/写操作的标志位(即,包括的标志位),下一位,其指示封装是否包含iru,对于该iru,mru中的一些或全部已经出故障(即,部分出故障的位);以及最后最高有效位(总共16位),其指示封装是否包括完整的备用iru(即,备用位)。类似地,在实施例中部分标记为故障和/或备用的iru可以不用于读/写操作。
[0078]
如上所述,cst条目611的所包括的标志位指示封装是否将包含用于vba的数据(即,读/写操作)。例如,如果用于封装的所包含的标志位的值是“0”,它将不包含vba读/写操作的数据,如果用于封装的所包含的标志位的值是“1”,它将包含vba读/写操作的数据(反之亦然)。在实施例中,在介质卡上的24个封装中,仅使用20个封装来执行读/写操作,并且4个封装是用于由介质修复模块206替换故障封装的备用封装。由于用于存储5120字节大小的数据块的320页均匀地分布在存储器模块/卡102上,在转换期间,包括的20个封装的标志位将指示相应的封装将包含用于vba读/写操作的数据。此外,20个封装中的每个将包括16个离散的页(或节拍),其将包含数据以实现数据的均匀分布。如本文所使用的,术语节拍用于描述封装中的页,其将包含执行与接收到的vba相对应的读写操作的数据。每个封装的这16个节拍可使用mrt和bart来标识,如以下所讨论的。这样,在转换期间,vba在602被索引到cst中,并且vba的高10位被用于标识vru号,并且使用cst用于每个封装的相应的被包括的标志位和iru位。
[0079]
返回参考图6b,在步骤604,对于每个封装,从相应的cst条目检索的9个iru位可以用于索引到用于该封装的mrt中。具体地,对于20个有效封装中的每个封装,来自cst610的9个iru位被用于标识iru号(0-511),iru号(0-511)进而被用于索引到mrt 620。
[0080]
如图6c所示,mrt 620包括由iru编号索引的行和由节拍编号索引的列。mrt 620中的每个条目621包括总共16位,并且确定将包含用于执行vba读/写操作的数据的封装上的
每个节拍的物理地址(总共16)。物理地址被表示为封装中的管芯索引(条目621的最低有效4位)、管芯中的mru组索引(条目621的下4位)以及将包括节拍(d/mg/m)的mru组中的mru索引(条目621的下6位)的组合。条目621还包括故障位(紧挨着最高有效位的位)和备用位,故障位指示由d/mg/m表示的页是否先前已经被宣布为发生故障,备用位指示由d/mg/m表示的页是否先前已经被宣布为单独备用(如果整个iru是备用,则在条目621中不将mru标记为备用)。故障的页和/或备用页可以不用于读/写操作。因此,每个封装的mrt 620返回每个封装中节拍的16个物理地址,每个封装中节拍可包含用于执行vba的读/写操作的数据。
[0081]
如以上所讨论的,mru包括128个位阵列,其中四个被保留作为备用位阵列,并且mru中的1百万页中的每个从124个剩余位阵列中的每个占用1个位。因此,在步骤606,bart 630可被用来确定与以上物理地址的每个mru中的124位阵列相对应的索引,对应的节拍从其将占用位来执行vba读/写操作。如图6c所示,bart 630的每一行可使用来自mrt 620的d/mg/m标识来索引,且bart 630的每一列由0-3索引,因为每个mru包括4个未使用的位阵列。bart 630的每个条目631包括8位-7最低有效位,其指示用于该行的mru的四个未使用的位阵列(在128位阵列中)中的一个,并且最高有效位被保留用于将来使用。通过从mru中排除未使用的位阵列,可以确定将被节拍占用位的124位阵列。
[0082]
在步骤608,系统可结合物理地址(d/mg/m)和未使用位阵列索引使用vba的20个最低有效位来在适当的存储器单元处执行读/写操作,其中可根据每个特定scm存储器技术的接口规范来执行实际读/写操作。
[0083]
应当注意,bart 330的未使用的位阵列索引可使用在(以下参见图7描述的)存储器清理过程期间创建的错误率表(ert)640来确定。如图6c所示,封装的ert 640包括对应于128位阵列的行和对应于封装中的mru的列。因为在清理过程期间一次清理一个vru,所以ert 640的mru对应于正在被清理的vru(在下面讨论)。此外,以下描述的清理过程针对每个封装以16个节拍(即,mru)为目标,并且针对每个封装更新ert,从而使得在ert中存在16个mru。ert中的每个条目641包括在vru的清理处理期间观察到的固定位(stuck bit)的总数。因为vru包括1百万个连续的vba,所以固定位的总数可以是2百万((1百万固定-在-0(stuck-at-0)和1百万固定-在-1(stuck-at-1),尽管通常不是这两者)。
[0084]
现在参考图7,描述了示出存储器模块/卡102的示例清理处理的流程图。可执行清理过程以在阈值时间段内周期性地重写数据以便确保数据的可读性和准确性,周期性地反转存储器系统的位以调节每个存储器单元以获得未来的可编程性,和/或测试存储器系统并收集对应于固定错误故障的统计数据(其可进而用于发起介质修复动作)。在某些实施例中,可以通过从vru禁用任何进一步的读/写操作,使对应于正在被清理的vru的1百万个连续vba退出服务,来一次在一个vru上执行清理过程(以循环方式和/或在触发事件发生时)。
[0085]
在清理过程期间,在702处,系统识别待清理的vru。在一个或多个实施例中,可以周期性地和以循环方式(例如,每24小时)和/或在触发事件(例如,检测到存储器错误(诸如异步存储器错误)、检测到存储器操作需要更高等级的ecc校正等)发生时执行用于每个vru的清理过程。可以调度用于vru的清理处理,使得可以在阈值时间段(例如,24小时、48小时等)期间清理完整的存储器模块/卡102。
[0086]
在704处,在一个或多个实施例中,系统确定所标识的vru是否在用于执行读/写操作的服务中。如果所识别的vru处于用于执行读/写操作的服务中(704:是),则系统可以从
使用中移除vru(706)。移除vru(例如,从服务中移除1百万个连续vba)可以包括但不限于从存储器系统的空闲列表(其标识所需特定大小的存储器的空闲区域)中移除所标识的vru的所有1百万个vba。具体地,系统可以不允许vru的任何vba在写操作释放之后被放置在空闲列表上。附加地和/或备选地,系统还可以通过将数据迁移到另一位置、从跟踪vba的当前值的逻辑到虚拟表(lvt)移除vba和/或从漂移缓冲区移除vba,从当前用于存储数据的vru的所有vba中移除任何现有数据。
[0087]
在从服务中移除所标识的vru时和/或如果所标识的vru被确定为不在用于执行读/写操作的服务中(704:否),在708处,系统可以初始化(例如,分配零值)用于与所标识的vru相对应的所有ert的计数器。在710处,系统可以针对具有模式a的所标识的vru的每个vba发出写入操作。模式a的示例可以包括全部1的串(以检测全部固定-在-0位)、全部0的串(以检测全部固定-在-1位)、全部5的串(以检测彼此固定的两个相邻位)等。一旦已经针对vru中的所有vba执行了模式a写入操作,在712处,系统可以针对所标识的vru的每个vba发出读取操作以确定vru中的固定-在-故障位的数量。例如,如果模式a包括全1的串,则读取操作可以用于确定vru中的固定-在-0位,并且如果模式a包括全0的串,则读取操作可以用于确定vru中的固定-在-1位。其他模式可以用于识别vru中的其他固定故障的数量(例如,固定-在-x、2或更多位彼此固定等)。
[0088]
在714处,系统可以针对具有模式b的所标识的vru的每个vba发出写入操作,其中模式b不同于模式a。模式b的示例可以包括全部1的串(以检测全部固定-在-0位)、全部0的串(以检测全部固定-在-1位)、全部5的串(以检测彼此固定的两个相邻位)等。一旦已经针对vru中的所有vba执行了模式b写入操作,在716,系统可以针对所标识的vru的每个vba发出读取操作以确定vru中的固定-在-故障位的数量。例如,如果模式a包括全1的串,并且用于标识vru中的固定-在-0位,则模式b可以包括全0的串,以确定vru中的固定-在-1位。
[0089]
应当注意,在vru的清理过程期间,vru的每个mru(不仅是124位阵列)的所有128位阵列通过在转换过程期间忽略bart而被写入/读取,使得固定-在-故障可能在每个位阵列上检测。具体地,仅使用cst和mrt执行vru的1百万个vba中的每个到物理页地址的转换。此外,清理过程期间的转换还包括发生故障的iru和/或备用iru。每个清理过程通常导致创建20-24个ert(对于每个封装)。
[0090]
在718处,系统可以基于针对正被清理的vru中的每个mru的每个位阵列的所确定的固定-在-0位和固定-在-1位的值,更新来自步骤708的ert计数器(即,更新计数器以指示固定-在故障的总数)。在720处,系统可执行介质修复动作(以下参照图8讨论)。
[0091]
在722处,系统可以通过例如将vru的100万vba插入到空闲列表中来使vru返回服务。如下所述,如果vru在介质修复动作期间被转换成备用iru,则vru可以不被返回到服务。
[0092]
现在参见图8,描述了展示在存储器系统的每个清理过程期间执行的示例介质修复动作的流程图。如上所述,在清理处理期间,构造每个封装的ert,其指示针对正被清理的vru的位阵列索引/mru中的每个位阵列索引/mru的固定-在故障(例如,固定-在-1、固定-在-0等)的数量。系统可以分析ert中的计数器以执行如图8中所描述的介质修复动作。介质修复动作可以包括位阵列修复(几乎总是执行)、mru替换和/或iru替换。
[0093]
在802处,系统可以确定是否需要对经清理的vru执行位阵列修复、mru替换和/或iru替换。在某些实施例中,系统可以通过标识和分析ert中的差节拍的数量,确定是否需要
对vru执行mru替换和/或iru替换。
[0094]
可通过分析节拍中每个位阵列的固定-在位计数将节拍识别为坏节拍。具体地,对于节拍的位阵列中的每个,系统确定固定-在位计数的数量是否大于第一阈值(th)、大于第二阈值(t
l
)但小于第一阈值th,或者是否为可接受的固定-在位的数量。阈值t
l
和th由ecc的强度确定。示例th可以是约2000至约7000位/百万位,示例t
l
可以是约200至约700位/百万位,以及固定-在位的示例可接受数量可以是小于t
l
的任何值(例如,每百万位小于100位)。
[0095]
如果不超过4个节拍具有大于t
l
的固定位数(例如,如果节拍包括具有大于th的固定-在位计数数量的1位阵列和具有大于t
l
的固定位计数数量的3位阵列),那么系统可以仅执行如下所讨论的位阵列修复。图9a示出了在vru清理之后创建的示例ert,其指示需要位阵列修复。
[0096]
另外地和/或替代地,如果一些节拍(但不是所有和/或小于阈值数量)包括具有大于th的固定-在位计数数目的多于4位阵列和/或具有大于t
l
的固定-在位计数数目的多于11位阵列,那么系统可以确定节拍是发生故障的mru。除了位阵列修复之外,系统可以针对这样的发生故障的mru执行mru替换。图9b示出了在vru清理之后创建的示例ert,其指示需要mru替换。
[0097]
如果针对封装的ert中的所有或特定阈值数量的节拍是坏的(即,多于4位阵列具有大于th的固定-在位计数数量和/或多于11位阵列具有大于t
l
的固定-在位计数数量),则系统可以确定包括坏节拍的iru已经发生故障。除了位阵列修复之外,在一个或多个实施例中,系统随后对这种发生故障的iru执行iru替换。如果在包括需要替换的发生故障的mru的包中不存在备用mru,则iru替换也可以被执行。图9c示出了在vru清理之后创建的示例ert,其指示需要iru替换。
[0098]
位阵列的数量仅作为示例提供,并且其他数量在本公开的范围内,用于确定是否需要对vru执行位阵列修复、mru替换和/或iru替换。
[0099]
在804处,如果需要位阵列修复,根据一方面的系统通过将最差位阵列排除在读/写操作期间的使用外来执行位阵列修复动作。系统可以首先通过分析针对每个位阵列观察到的固定-在故障的总数目来为ert(即,列)中的每个mru识别最坏的4位阵列及其相应的索引。最坏的4位阵列是在清理处理期间观察到具有最高数量的固定-在故障的位阵列。系统随后可更新并保存与ert对应的bart以包括最差4位阵列索引作为用于该mru的未使用位阵列索引。如果多于4位阵列是坏的,则系统可以调用ecc以执行介质修复。
[0100]
在806处,如果对发生故障的mru需要mru/iru替换,则根据一方面的系统确定发生故障的mru是否为备用mru和/或被包括在备用iru内。如果发生故障的mru是备用mru和/或被包括在备用iru内(806:是),则系统可以在没有替换的情况下将mru标记为发生故障的mru(而不是备用的)(808)。然而,如果发生故障的mru不是备用mru并且没有被包括在备用iru内(806:否),则根据实施例的系统执行mru替换(810)并且相应地更新mrt(812)。应当注意的是,只有当mru的性能不会降级时,备用mru才可以被认为是用于替换发生故障的mru的候选者,因为性能降级可以由iru的节拍内的d/mg/m值的不适当排序引起。
[0101]
在一方面中,系统通过首先在与需要被替换的发生故障的mru相同的封装中搜索备用mru来执行mru替换(810)。如果没有找到备用mru,则本实施例中的系统也查找同一封装中的备用iru,并将该备用iru划分为备用mru。在相同封装中的备用mru和/或iru然后可
以用于替换发生故障的mru和/或包括发生故障的mru的iru。在一个实施例中,系统将被替换的iru的良好mru(即,不需要替换的mru)转换成备用mru。在替换之后,在一个或多个实施例中,系统更新用于该封装的mrt以将发生故障的mru或iru(即d/mg/g)中的页的物理地址与备用mru或iru中的页的物理地址交换。
[0102]
然而,如果包括发生故障的mru的封装不包括备用mru或iru,则在一个或多个实施例中,系统用另一封装中的备用iru来替换整个iru(814)。根据一个方面的系统将被替换的iru的良好mru(即,不需要替换的mru)转换成备用mru。在替换之后,在实施例中,系统更新cst以将使用中的iru与备用iru以及cst中的备用/故障iru指示交换。应当注意,在实施例中,与来自另一封装的备用iru相比,优选来自与发生故障的mru/iru相同的封装的备用iru用于替换。
[0103]
如果系统不能在任何封装中找到任何备用mru或iru,则在一个或多个实施例中,该系统从正被清理的vru创建(816)备用iru(并且不将其返回到服务中),并且将发生故障的mru标记为发生故障。在一方面中,系统更新cst和mrt以指示vru已用于创建备用iru并且不能用于读/写操作。
[0104]
在一个或多个实施例中,可能需要刷新介质,例如一天一次。在刷新操作中,vba中的数据被拷贝到新的vba,然后旧的vba第一次被写为全“1”,然后第二次被写为全“0”,然后旧的vba被放回服务。
[0105]
虽然上述说明性实施例优选地在硬件中实现,诸如在处理器的单元和电路中,但是说明性实施例的各个方面和/或技术也可以在软件中实现。例如,应当理解,图4-8中的流程图示图的每个方框以及流程图示图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可被提供给处理器或其他可编程数据处理装置以产生机器,使得在处理器或其他可编程数据处理装置上执行的指令创建用于实现流程图块或多个流程图块中所指定的功能的装置。也可以把这些计算机程序指令存储在计算机可读存储器或存储媒质中,这些指令使得处理器或其他可编程数据处理装置以特定方式工作,从而,存储在计算机可读存储器或存储媒质中的指令产生包括实现流程图块或多个流程图块中所指定的功能的指令装置的制造品。
[0106]
相应地,所述流程图图解的块支持用于执行所述指定功能的装置的组合、用于执行所述指定功能的步骤的组合、以及用于执行所述指定功能的程序指令装置。还应理解,流程图说明的每一块以及流程图说明中的块的组合可由执行指定功能或步骤的基于专用硬件的计算机系统或由专用硬件与计算机指令的组合来实施。
[0107]
本公开的一个或多个实施例可以是系统、方法、和/或计算机程序产品。所述计算机程序产品可包含上面具有用于致使处理器执行本发明的方面的计算机可读程序指令的计算机可读存储介质(一个或多个介质)。
[0108]
计算机可读存储介质可以是有形设备,该有形设备可以保留和存储供指令执行设备使用的指令。计算机可读存储媒质可以是,例如但不限于,电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或者上述的任意合适的组合。非穷举列表计算机可读存储媒质的更具体示例包括以下:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式紧凑盘只读存储器(cd-rom)、数字通用盘(dvd)、记忆棒、软盘、诸如穿孔卡之类的机械
编码设备或具有记录在其上的指令的槽中的凸出结构、以及上述各项的任何合适的组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,例如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,穿过光纤电缆的光脉冲)或通过电线发射的电信号。
[0109]
在此所描述的计算机可读程序指令可以经由网络(例如,互联网、局域网、广域网和/或无线网络)从计算机可读存储介质下载至相应的计算/处理设备或下载至外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口接收来自网络的计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储媒质中。
[0110]
用于执行本公开的操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或以一种或多种程序设计语言的任何组合编写的源代码或目标代码,这些程序设计语言包括面向对象的程序设计语言(诸如smalltalk、c 等)和常规的过程式程序设计语言(诸如“c”程序设计语言或类似程序设计语言)。计算机可读程序指令可以完全地在用户计算机上执行、部分在用户计算机上执行、作为独立软件包执行、部分在用户计算机上部分在远程计算机上执行或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可通过任何类型的网络(包括局域网(lan)或广域网(wan))连接至用户计算机,或者可连接至外部计算机(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用所述计算机可读程序指令的状态信息来个性化所述电子电路来执行所述计算机可读程序指令,以便执行本公开的各方面。
[0111]
在此参照根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图说明和/或框图描述了本公开的多个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0112]
可以将这些计算机可读程序指令提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以生产机器,使得这些指令在通过计算机或其他可编程数据处理装置的处理器执行时,创建用于实现流程图和/或框图的或多个框中所指定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储媒质中,这些指令使得计算机、可编程数据处理装置、和/或其他设备以特定方式工作,从而,其中存储有指令的计算机可读存储媒质包括包含实现流程图和/或框图中的或多个方框中规定的功能/动作的方面的指令的制造品。
[0113]
这些计算机可读程序指令还可以被加载到计算机、其他可编程数据处理装置、或其他设备上,以便使得在该计算机、其他可编程装置或其他设备上执行一系列操作步骤以产生计算机实现的过程,从而使得在该计算机、其他可编程装置或其他设备上执行的这些指令实现流程图和/或框图的或多个框中所指定的功能/动作。
[0114]
附图中的流程图和框图展示了根据本公开的不同实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。对此,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些备选实
现中,框中标注的功能可以不按照图中标注的顺序发生。例如,连续示出的两个框可以基本上同时执行,或者这些框有时可以以相反的顺序执行,这取决于所涉及的功能。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作或执行专用硬件与计算机指令的组合的专用的基于硬件的系统来实现。
[0115]
此外,根据不同实施例的系统可以包括处理器和与该处理器集成和/或可由该处理器执行的逻辑,该逻辑被配置成用于执行在此叙述的过程步骤中的一个或多个。通过与其集成,意味着处理器具有嵌入在其中的作为硬件逻辑的逻辑,诸如专用集成电路(asic)、现场可编程门阵列(fpga)等。处理器可执行的意思是逻辑是硬件逻辑;软件逻辑,诸如固件、操作系统的一部分、应用程序的一部分;等等,或硬件和软件逻辑的一些组合,所述硬件和软件逻辑可由处理器访问并且被配置为使处理器在由处理器执行时执行一些功能。软件逻辑可以存储在任何存储器类型的本地和/或远程存储器上,如本领域中已知的。可以使用本领域已知的任何处理器,诸如软件处理器模块和/或硬件处理器,诸如asic、fpga、中央处理单元(cpu)、集成电路(ic)、图形处理单元(gpu)等。
[0116]
在以下权利要求中,所有装置或步骤加上功能元件的对应结构、材料、动作、以及等效物旨在包括任何结构、材料、或动作,以用于结合如具体要求保护的其他要求保护的元件来执行该功能。已经出于说明和描述的目的呈现了对本公开的实施方式的描述,但并不旨在是详尽的或者限于所公开形式的实施方式。在不背离本公开的范围和精神的情况下,许多修改和变化对于本领域普通技术人员来说是显而易见的。选择和描述实施例和实例,以便最好地解释本公开的原理和实际应用,并且使本领域的其他普通技术人员能够理解具有适于预期的特定用途的各种修改的各种实施例的公开。
[0117]
在此描述的程序是基于它们在本公开的具体实施例中实施的应用来识别的。然而,应当理解,本文中的任何特定程序命名法仅为了方便而使用,并且因此本公开不应仅限于在由这样的命名法标识和/或暗示的任何特定应用中使用。
[0118]
将清楚的是,前述系统和/或方法的不同特征可以以任何方式进行组合,从而从以上呈现的说明中创建多个组合。
[0119]
应进一步了解,本公开的实施例可以以代表顾客部署的服务的形式来提供以按需提供服务。
[0120]
已经出于说明的目的呈现了对本公开的不同实施例的描述,但并不旨在是详尽的或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,许多修改和变化对本领域普通技术人员将是显而易见的。这里使用的术语被选择来最好地解释实施例的原理、实际应用或对在市场中找到的技术的技术改进,或者使得本领域普通技术人员能够理解这里公开的实施例。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献