CN103902403B - 经由冗余阵列的非易失性存储器编程故障恢复 - Google Patents
经由冗余阵列的非易失性存储器编程故障恢复 Download PDFInfo
- Publication number
- CN103902403B CN103902403B CN201310739979.XA CN201310739979A CN103902403B CN 103902403 B CN103902403 B CN 103902403B CN 201310739979 A CN201310739979 A CN 201310739979A CN 103902403 B CN103902403 B CN 103902403B
- Authority
- CN
- China
- Prior art keywords
- data
- redundancy
- programming
- higher level
- page
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1068—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1044—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2056—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/52—Protection of memory contents; Detection of errors in memory contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
- G06F11/108—Parity data distribution in semiconductor storages, e.g. in SSD
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System (AREA)
- Hardware Redundancy (AREA)
- Read Only Memory (AREA)
Abstract
经由冗余阵列的非易失性存储器编程故障恢复在某些存储子系统实现方式中(例如,固态磁盘)允许较高编程带宽和/或减少延迟。在非易失性存储器控制器处接收用于编程多个非易失性存储器的N个部分的数据。数据包括用于编程N个部分中的特定部分的特定数据。特定数据存储在与非易失性存储器控制器相关联的被分配的缓冲器中。开始将特定数据编程到多个非易失性存储器中的特定非易失性存储器。更新足以从N个部分中的M个部分的故障中恢复的冗余信息。释放被分配的缓冲器。存储、开始编程、更新及释放中的至少一个响应于特定数据的接收。释放在特定非易失性存储器完成编程之前。
Description
相关申请的交叉引用
在所附的申请书数据表、请求书和传送信(如适用,如果有的话)中列出了对该申请的优先权权益要求。在即时申请的类型所允许的范围内,本申请通过引用全面并入全部共同拥有在提出本发明时的即时申请的下列申请:
于2010年12月1日提交的美国临时申请(案号为SF-10-10,序列号为61/418,846),第一署名发明人为Jeremy Isaac Nathaniel WERNER,且题为“DYNAMIC HIGHER-LEVELREDUNDANCY MODE MANAGEMENT WITH INDEPENDENT SILICON ELEMENTS”;
于2011年1月18日提交的美国临时申请(案号为SF-10-14,序列号为61/433,918),第一署名发明人为Jeremy Isaac Nathaniel WERNER,且题为“HIGHER-LEVEL REDUNDANCYINFORMATION COMPUTATION”;
于2011年11月30日提交的PCT申请(案号为SF-10-10PCT,序列号为PCT/US11/062726),第一署名发明人为Jeremy Isaac Nathaniel WERNER,且题为“DYNAMIC HIGHER-LEVEL REDUNDANCY MODE MANAGEMENT WITH INDEPENDENT SILICON ELEMENTS”;以及
于2012年1月18日提交的PCT申请(案号为SF-10-14PCT,序列号为PCT/US12/21682),第一署名发明人为Jeremy Isaac Nathaniel WERNER,且题为“HIGHER-LEVELREDUNDANCY INFORMATION COMPUTATION”。
技术领域
领域:非易失性存储技术及制造的进步对于提供成本的改善、盈利、性能、效率和使用实用性的提高是必要的。
背景技术
相关技术:除非被明确认定为被公开或众所周知,否则为了上下文、定义或比较的目的而包括的本文所提到的技术和概念不应被解释为承认这些技术和概念是以前公开为已知的或者是现有技术的一部分。为了所有目的,通过引用将本文中所引用的所有参考文献(如果有的话)(包括专利、专利申请和出版物)整体并入,而无论是否被具体并入。
发明内容
本发明可以以多种方式实现,这些方式例如过程、制品、装置、系统、物质组分和计算机可读介质(比如计算机可读存储介质(例如,光学和/或磁性大容量存储设备中的介质(比如磁盘),或具有比如闪存存储器的非易失性存储器的集成电路)或计算机网络,其中,通过光学或电子通信链路发送编程指令。具体实施方式提供了能实现在上文认定的领域中的成本的改善、盈利、性能、效率和使用实用性的提高的本发明的一种或多种实施例的论述。具体实施方式包括用于促进对具体实施方式的其余部分的理解的介绍。该介绍包括根据本文描述的概念的系统、方法、制品和计算机可读介质中的一个或多个的示例性实施例。如在结论中更详细讨论,本发明涵盖所公布的权利要求的范围内的所有可能修改和变更。
附图说明
图1A示出了包括提供经由一个或多个(可选内部)冗余阵列的用于非易失性存储器(NVM)的编程故障恢复的SSD控制器的固态磁盘(SSD)的实施例的所选细节。
图1B示出了包括图1A的SSD的一个或多个实例的系统的各种实施例的所选细节。
图2示出了映射逻辑块地址(LBA)的逻辑页面号(LPN)部分的实施例的所选细节。
图3示出了在读取单元地址访问非易失性存储器(NVM)以产生被组织为各个读取单元的读取数据,一致地具有以读取单元配量(quanta)测得的长度的实施例的所选细节。
图4A示出了读取单元的一个实施例的所选细节。
图4B示出了读取单元的另一实施例的所选细节。
图5示出了具有大量字段的报头(header,首部)的实施例的所选细节。
图6示出了在逻辑片段和/或区段中管理的多个NVM器件(例如,一个或多个闪存芯片和/或闪存芯片)的区块、页面及读取单元的实施例的所选细节。
图7示出了更高级冗余技术的各种实施例的所选细节。
图8示出了具有硅独立元件冗余阵列(RASIE)的动态更高级冗余模式管理的实施例的所选细节。
图9示出了具有适应性码速率的更低级冗余信息的读取单元的实施例,该更低级冗余信息受存储于读取单元的一个或多个中的更高级冗余信息保护。
图10示出了更高级冗余信息结果及数据源对应物的实施例的所选细节。
图11示出了更高级冗余信息计算的实施例的所选细节。
图12示出了(单一操作期间)自一个(更低级)故障恢复的实施例的所选细节。
图13A至图13D示出了(单一操作期间)自两个(更低级)故障恢复的实施例的所选细节。
图14A及图14B示出了计算关于自NVM接收的页面的更高级冗余信息的实施例的所选细节。
图15A至图15C示出了自关于提供至NVM的写入的更高级冗余信息的计算的撤回(backout)的实施例的所选细节。
图16示出了经由冗余阵列的NVM故障恢复的实施例的所选细节。
附图中的附图标记列表
具体实施方式
以下将伴随示出本发明的所选细节的附图一起提供对本发明的一个或多个实施例的详细描述。将结合实施例来描述本发明。本文的实施例应被理解为仅是示例性的,本发明不明确限于本文的任何或所有实施例或者受到其限制,且本发明涵盖许多替代、修改和等同物。为避免阐述单调,各种字标签(比如:第一、最后、某些、各种、进一步、其他、特定的、选择、一些和显著的)可应用于独立的实施例组;如本文所使用的,这些标签并不明确地意指传送质量或任何形式的偏爱或偏见,而只是为了方便在独立组之间区分。所公开的过程的一些操作顺序在本发明的范围内是可变的。无论在什么位置多个实施例用于描述过程、系统和/或编程指令特征的变化,其他实施例均被设想为根据预定的或动态确定的标准执行分别对应于多个实施例的多个操作模式中的一个的静态和/或动态选择。许多具体细节列于以下描述中,以提供对本发明的透彻理解。为示例的目的而提供细节,且本发明可根据未列出一些或所有细节的权利要求来实践。为了清晰起见,与本发明相关的技术领域中已知的技术资料未被详细描述,使得本发明未被不必要模糊。
介绍
仅包括该介绍,以便于更迅速理解具体实施方式;本发明不限于在介绍中提出的概念(包括明确的示例,如果有的话),因为任何介绍的段落均是整个主题的缩略图,且不意味着是详尽或限制的描述。例如,以下介绍仅对某些实施例提供由空间和组织限定的概述信息。有许多其他实施例,包括最终将针对其描绘权利要求的那些实施例,在整个说明书的其余部分中讨论。
缩略语
本文中所限定的各种速记缩写(例如,首字母缩写词)中的至少一些是指本文所使用的某些元件。
缩略语 | 描述 |
AHCI | 高级主机控制器接口 |
API | 应用程序接口 |
ATA | 高级技术附件(AT附件) |
BCH | 博斯-乔赫里-霍克文黑姆码 |
CD | 光盘 |
CF | 紧凑式闪存 |
CMOS | 互补金属氧化物半导体 |
CPU | 中央处理器 |
CRC | 循环冗余校验 |
DAS | 直接附接存储 |
DDR | 双倍数据速率 |
DMA | 直接存储器访问 |
DNA | 直接NAND访问 |
DRAM | 动态随机存取存储器 |
DVD | 数字多用途光盘/数字视频光盘 |
DVR | 数字视频录像机 |
ECC | 错误校正码 |
eMMC | 嵌入式多媒体卡 |
eSATA | 外部串行高级技术附件 |
GPS | 全球定位系统 |
HDD | 硬盘驱动器 |
I/O | 输入/输出 |
IC | 集成电路 |
IDE | 集成驱动电子装置 |
JPEG | 联合图像专家组 |
LAN | 局域网 |
LBA | 逻辑块地址 |
LDPC | 低密度奇偶校验 |
LPN | 逻辑页面号 |
MLC | 多级单元 |
MMC | 多媒体卡 |
MPEG | 运动图像专家组 |
NAS | 网络附接存储 |
NCQ | 原生命令排序 |
NVM | 非易失性存储器 |
ONA | 优化NAND访问 |
ONFI | 开放NAND闪存接口 |
OS | 操作系统 |
PC | 个人计算机 |
PCIe | 快速外围组件互连(快速PCT) |
PDA | 个人数字助理 |
PHY | 物理接口 |
POS | 销售点 |
RAID | 廉价/独立磁盘冗余阵列 |
RASIE | 硅独立元件冗余阵列 |
ReRAM | 电阻式随机存取存储器 |
RS | 里德-所罗门 |
SAN | 存储附接网络 |
SAS | 串行附接小型计算机系统接口(串行SCSI) |
SATA | 串行高级技术附件(串行ATA) |
SCSI | 小型计算机系统接口 |
SD | 安全数字 |
SDR | 单倍数据速率 |
SLC | 单层单元 |
SMART | 自监测分析和报告技术 |
SRAM | 静态随机存取存储器 |
SSD | 固态磁盘/驱动器 |
UFS | 统一闪存存储器 |
USB | 通用串行总线 |
VF | 虚拟函数 |
WAN | 广域网 |
NAND闪存使用浮置栅极晶体管的阵列来存储信息。在SLC技术中,启用每一位单元(例如,浮置栅极晶体管)以存储一个信息位。在MLC技术中,启用每一位单元以存储多个信息位。随着制造技术(例如,CMOS技术)按比例缩小,每一浮置栅极存储更少电子。此外,随着存储容量及密度增加,每一位单元存储更多位。因此,通过较小电压范围来表示存储于位单元中的值。感测的不确定性和/或所存储电子的量随时间的改变增加数据被错误存储或读取的机率。一种或多种冗余和/或ECC技术的使用(例如,在更低级处)使得能够自NAND闪存正确检索否则会损毁的数据,从而在某些使用场景下克服前述困难中的一些。
一些类型的SSD使用闪存来提供非易失性存储(例如,闪存在不施加电力的情况下保留信息)。一种或多种ECC和/或冗余技术的使用(例如,在更高级处)使得能够自闪存正确检索否则会损毁的数据,和/或甚至在一个或多个闪存元件间歇地或永久地故障时实现SSD的正确系统级操作。
例如,SSD控制器实现具有独立硅元件的动态更高级冗余模式管理以作为一个或多个NVM(例如,闪存)元件在部分地由控制器实现的SSD的操作期间故障时提供柔性降级。读取NVM的一部分。如果使用更低级冗余和/或错误校正(比如,根据一种或多种ECC技术)不可校正的错误发生,则更高级冗余和/或错误校正(比如,根据一种或多种RASIE技术和/或动态更高级冗余模式管理技术)用于尝试校正该错误。如果NVM元件中的一个的故障通过更低级和/或更高级冗余和/或错误校正和/或通过其他技术(比如,由NVM元件中的一个或多个报告的故障状态)而检测到,则更高级冗余和/或错误校正自在当前模式中操作动态地转变至在新模式中操作。该转变包括减少SSD上可得的空闲空间、重新配置SSD的数据存储、恢复/存储故障的用户数据(如果可能),及确定/存储修订的更高级冗余和/或错误校正信息中的一个或多个。操作接着在新模式中继续。如果通过现在在新模式中操作的更高级冗余和/或错误校正而检测到NVM元件中的另一个的另一故障,则进行至另一更高级冗余和/或错误校正模式的另一转变。写入NVM根据更高级冗余和/或错误校正操作模式,包括根据更高级冗余和/或错误校正操作模式及写入数据确定/存储更高级冗余和/或错误校正信息。
如果针对存储器区域出现更低级错误校正和/或一个或多个故障的大于临限数目和/或比例,则可选地,该存储器区域动态地转变为能够从比当前更高级冗余和/或错误校正操作模式多的错误中恢复的新的更高级冗余和/或错误校正操作模式下操作。例如,如果没有当前更高级冗余和/或错误校正操作模式(例如,不计算更高级冗余信息和/或其不用于从更低级冗余的故障中恢复以校正错误),则新的更高级冗余和/或错误校正操作模式是一种实现自不可通过更低级冗余恢复的单个故障恢复的模式。再如,如果当前更高级冗余和/或错误校正操作模式是一种实现自不可通过更低级冗余恢复的单个故障恢复的模式,则新的更高级冗余和/或错误校正操作模式是一种实现自不可通过更低级冗余恢复的两个故障恢复的模式。
在某些实施例和/或使用场景中,确定/存储更高级冗余和/或错误校正信息根据更高级冗余信息的计算。更高级冗余信息计算使得SSD控制器能够提供更高级冗余能力以在非易失性存储器(例如,闪存)元件在部分地由控制器实现的SSD的操作期间故障的上下文中维持可靠操作。经由待由更高级冗余信息保护的数据(例如,条带区)的部分中的所有页面的异或(XOR)使用奇偶编码来计算更高级冗余信息的第一部分。使用加权和技术计算更高级冗余信息的第二部分,当计算加权和时该部分中的每一页面被指定唯一非零“索引”作为权重。在有限域(比如伽罗瓦域,或比如整数模p,其中p为质数)上执行算法。
更高级冗余信息的部分可以任何顺序计算,比如由对NVM元件执行的一个或多个读取操作的完成顺序所确定的顺序,或比如基于自NVM元件返回和/或可得到数据的顺序的顺序,从而在各种实施例中使得能够减少或消除缓冲。在各种实施例中,任何顺序的可计算性使得能够使用相对很少临时和/或中间缓冲和/或状态计算恢复数据值和/或自写入撤回。可通过(比如)由可用专用硬件元件确定的任何并列度计算更高级冗余信息的部分,从而在各种实施例中使得能够减少延迟处理和/或减少存储器(例如,NVM)带宽使用。
在某些实施例和/或使用场景中,更高级冗余信息实现自故障的恢复以写入/编程NVM元件,同时比一些其他技术提供更高的编程带宽和/或减少延迟。在写入NVM元件的同时,比如通过计算,然后存储在片上存储器中来保持更高级冗余信息(例如,根据一种或多种RASIE技术)。保持足以涵盖与指向NVM元件的正在进行的写入/编程操作相关联的所有数据。例如,数据在从将数据发送至NVM元件进行写入/编程时至NVM元件指示数据的成功写入/编程的过程中。一旦已将数据发送至NVM元件进行写入/编程并累积在进行保持以自写入/编程故障中恢复的更高级冗余信息中,就释放与数据相关联的缓冲。保留与更高级冗余信息相关联的缓冲直至完成写入/编程(或出现故障)为止。
如果存在NVM元件之一的写入/编程故障,则作为响应,更高级冗余信息用于自故障恢复。另外由于故障导致丢失的任何数据基于更高级冗余信息和先前(和成功地)写入/编程的数据的所有或任意部分来确定。可选地,将进行保持以自NVM元件的写入/编程故障恢复的更高级冗余信息的所有或任意部分写入/编程至NVM元件(例如,以在后续读取NVM元件期间实现自更低级故障的恢复)。
示例性实施例
在结束对具体实施方式的介绍时,接下来是示例性实施例的集合,包括明确列举为“EC”(示例性组合)的至少一些实施例,根据本文所述的概念提供对各种实施例类型的额外描述;这些示例并不意味着是相互排斥的、详尽无遗的或限制性的;且本发明并不限于这些示例性实施例,而是涵盖所公布的权利要求的范围内的所有可能的修改和变更。
EC1)一种方法,包括:
在非易失性存储器控制器处接收用于编程多个非易失性存储器的N个部分的数据,所述数据包括用于编程N个部分中的特定部分的特定数据;
将特定数据存储在与非易失性存储器控制器相关联的被分配的缓冲器中;
开始将特定数据编程到多个非易失性存储器中的特定非易失性存储器;
更新足以从N个部分中的M个部分的故障中恢复的冗余信息;
释放被分配的缓冲器;
其中,存储、开始编程特定数据、更新冗余信息以及及释放中的至少一个响应于接收;并且
其中,释放在特定非易失性存储器完成编程之前。
EC2)根据EC1所述的方法,其中,冗余信息是第一冗余信息,已针对N个部分的子集接收数据,但尚未针对N个部分的子集开始编程,并且进一步包括:
延迟对N个部分的子集中的至少一部分进行编程;
开始将第一冗余信息编程到上述多个非易失性存储器中的多个非易失性存储器;
开始对N个部分的子集中的至少一部分进行编程;
更新不同于第一冗余信息的且足以从N个部分的M个子集中的故障中恢复的第二冗余信息;并且
其中,延迟编程、开始对第一冗余信息进行编程、开始对N个部分的子集中的至少一部分进行编程以及更新第二冗余信息中的至少一个响应于检测特定数据的编程的故障。
EC3)根据EC2所述的方法,其中,在检测到故障时,特定数据被单独存储为被编码在第一冗余信息中。
EC4)根据EC1所述的方法,其中,数据进一步包括用于编程N个部分中的第一个部分的初始数据,并且进一步包括:
至少部分基于初始数据来初始化冗余信息。
EC5)根据EC1所述的方法,其中,非易失性存储器控制器包括被分配的缓冲器。
EC6)根据EC1所述的方法,其中,被分配的缓冲器包括在第一芯片中,所述第一芯片与包括非易失性存储器控制器的第二芯片分离。
EC7)根据EC1所述的方法,其中,非易失性存储器控制器可作为固态磁盘控制器操作,所述固态磁盘控制器能够至少部分经由与存储器接口标准兼容的计算主机接口与计算主机通信。
EC8)根据EC1所述的方法,其中,非易失性存储器控制器包括能够与非易失性存储器通信的闪存接口。
EC9)一种方法,包括:
接收用于编程多个非易失性存储器的N个部分的数据;
请求根据所接收的数据对N个部分的初始编程,所述初始编程在初始编程开始于N个部分的第二部分上之前完成于N个部分的第一部分上;
响应于请求初始编程,更新足以从请求其初始编程的N个部分中的多个部分的M个的故障中恢复的冗余信息;以及
响应于识别没有通过初始编程的N个部分的第一部分的第一个至M个,请求根据至少部分基于冗余信息计算的数据对非易失性存储器的最多M个替代部分的替代编程。
EC10)根据EC9所述的方法,其中,冗余信息是第一冗余信息,并且进一步包括:
响应于识别,并响应于请求N个部分的第二部分的每一个的初始编程,更新不同于第一冗余信息的第二冗余信息。
EC11)根据EC9所述的方法,其中,该方法的行动至少部分经由非易失性存储器控制器来执行,该非易失性存储器控制器可作为固态磁盘控制器操作,该固态磁盘控制器能够至少部分经由与存储器接口标准兼容的计算主机接口与计算主机通信。
EC12)根据EC11所述的方法,其中,非易失性存储器控制器包括能够与非易失性存储器通信的闪存接口。
EC13)一种方法,包括:
接收用于编程多个非易失性存储器的N个部分的数据;
至少部分基于所接收的数据来计算足以从N个部分中的M个部分的故障中恢复的冗余信息;
请求根据所接收的数据的N个部分的初始编程;以及
响应于识别没有通过初始编程的N个部分中的第一个至M个,请求根据至少部分基于冗余信息计算的数据对非易失性存储器的最多M个替代部分的替代编程。
EC14)根据EC13所述的方法,其中,所计算的数据进一步至少部分基于从完成初始编程的N个部分中的多个部分读取的数据,并且所读取的数据与接收的数据的部分对应。
EC15)根据EC13所述的方法,进一步包括请求根据冗余信息的所有或任意部分对非易失性存储器的M减P个部分的额外编程。
EC16)根据EC15所述的方法,其中P为0。
EC17)根据EC15所述的方法,其中P为1。
EC18)根据EC13所述的方法,其中,M为二且该方法进一步包括请求利用足以从N个部分中的一个的故障中恢复的冗余信息的子集对非易失性存储器的额外部分的额外编程。
EC19)根据EC13所述的方法,其中,初始编程至少部分经由第一接口进行,并且进一步包括至少部分经由与第一接口分离的第二接口存储冗余信息。
EC20)根据EC19所述的方法,其中,第一接口为芯片间接口,第二接口为芯片内接口。
EC21)根据EC20所述的方法,其中,芯片间接口能够在控制器芯片与包括非易失性存储器的一个或多个芯片之间操作。
EC22)根据EC21所述的方法,其中,芯片内接口能够在控制器芯片的控制硬件与控制器芯片的存储器之间操作。
EC23)根据EC13所述的方法,进一步包括存储冗余信息至少直至完成识别为止。
EC24)根据EC23所述的方法,进一步包括在计算所计算的数据之后释放通过存储使用的存储。
EC25)根据EC13所述的方法,其中,该方法的行为至少部分经由非易失性存储器控制器来执行,该非易失性存储器控制器可作为固态磁盘控制器操作,该固态磁盘控制器能够至少部分经由与存储器接口标准兼容的计算主机接口与计算主机通信。
EC26)根据EC25所述的方法,其中,非易失性存储器控制器包括能够与非易失性存储器通信的闪存接口。
EC27)根据EC1、EC9或EC13所述的方法,其中,N个部分的每一个包括非易失性存储器的相应一个或多个页面。
EC28)根据EC1、EC9或EC13所述的方法,其中,N个部分的每一个包括非易失性存储器的相应一个或多个区块。
EC29)根据EC1、EC9或EC13所述的方法,其中,非易失性存储器包括一个或多个闪存。
EC30)一种系统,包括:
被分配的缓冲器;
用于在非易失性存储器控制器处接收用于编程多个非易失性存储器的N个部分的数据的装置,所述数据包括用于编程N个部分中的特定部分的特定数据;
用于将特定数据存储在与非易失性存储器控制器相关联的被分配的缓冲器中的装置,;
用于开始将特定数据编程到多个非易失性存储器中的特定非易失性存储器的装置;
用于更新足以从N个部分中的M个部分的故障中恢复的冗余信息的装置;
用于释放被分配的缓冲器的装置;
其中,用于存储的装置、用于开始编程特定数据的装置、用于更新冗余信息的装置及用于释放的装置的至少一个响应于用于接收的装置;并且
其中,用于释放的装置可操作用于在特定非易失性存储器完成编程之前释放被分配的缓冲器。
EC31)根据权利要求EC30所述的系统,其中,冗余信息是第一冗余信息,已针对N个部分的子集接收数据,但尚未针对N个部分的子集开始编程,并且进一步包括:
用于延迟对N个部分子集中的至少一部分进行编程的装置;
用于开始将第一冗余信息编程到上述多个非易失性存储器中的多个非易失性存储器的装置;
用于开始对N个部分子集中的至少一部分进行编程的装置;
用于更新不同于第一冗余信息的且足以从N个部分的M个子集的故障中恢复的第二冗余信息的装置;并且
其中,用于延迟编程的装置、用于开始对第一冗余信息进行编程的装置、用于开始对N个部分子集中的至少一部分进行编程的装置及用于更新第二冗余信息的装置中的至少一个装置响应于用于检测特定数据的编程故障。
EC32)根据EC31所述的系统,其中,当检测故障时,特定数据被单独存储为编码第一冗余信息中。
EC33)根据EC30所述的系统,其中,数据进一步包括用于编程N个部分中的第一部分的初始数据,并且进一步包括:
用于至少部分基于初始数据来初始化冗余信息的装置。
EC34)根据EC30所述的系统,其中,非易失性存储器控制器包括被分配的缓冲器。
EC35)根据EC30所述的系统,其中,被分配的缓冲器包括在第一芯片中,所述第一芯片与包括非易失性存储器控制器的第二芯片分离。
EC36)根据EC30所述的系统,其中,非易失性存储器控制器可作为固态磁盘控制器操作,所述固态磁盘控制器能够至少部分经由与存储器接口标准兼容的计算主机接口与计算主机通信。
EC37)根据EC30所述的系统,其中,非易失性存储器控制器包括能够与非易失性存储器通信的闪存接口。
EC38)一种系统,包括:
用于接收用于编程多个非易失性存储器的N个部分的数据的装置;
用于请求根据所接收的数据对N个部分的初始编程的装置,所述初始编程在初始编程开始于N个部分的第二部分上之前完成于N个部分的第一部分上;
响应于请求初始编程,用于更新足以从请求其初始编程的N个部分中的多个部分的M个的故障中恢复的冗余信息的装置;以及
响应于识别没有通过初始编程的N个部分的第一部分的一个至M个,用于请求根据至少部分基于冗余信息计算的数据对非易失性存储器的最多M个替代部分的替代编程的装置。
EC39)根据EC38所述的系统,其中,冗余信息是第一冗余信息,并且进一步包括:
响应于识别,并响应于用于请求对N个部分的第二部分的每一个的初始编程,用于更新不同于第一冗余信息的第二冗余信息的装置。
EC40)根据EC38所述的系统,其中,系统的装置至少部分包括在非易失性存储器控制器中,该非易失性存储器控制器可作为固态磁盘控制器操作,该固态磁盘控制器能够至少部分经由与存储器接口标准兼容的计算主机接口与计算主机通信。
EC41)根据EC40所述的系统,其中,非易失性存储器控制器包括能够与非易失性存储器通信的闪存接口。
EC42)一种系统,包括:
用于接收用于编程多个非易失性存储器的N个部分的数据的装置;
用于至少部分基于所接收的数据来计算足以从N个部分中的M个部分的故障中恢复的冗余信息的装置;
用于请求根据所接收的数据对N个部分的初始编程的装置;以及
响应于识别没有通过初始编程的N个部分的一个至M个部分,用于请求根据至少部分基于冗余信息计算的数据对非易失性存储器的最多M个替代部分的替代编程的装置。
EC43)根据EC42所述的系统,其中,所计算的数据进一步至少部分基于从完成初始编程的N个部分中的多个部分读取的数据,并且所读取的数据与接收的数据的部分对应。
EC44)根据EC42所述的系统,进一步包括用于根据冗余信息的所有或任意部分请求非易失性存储器的M减P个部分的额外编程的装置。
EC45)根据EC44所述的系统,其中P为0。
EC46)如EC44所述的系统,其中P为1。
EC47)根据EC42所述的系统,其中,M为2且进一步包括用于请求利用足以从N个部分中的一个的故障中恢复的冗余信息的子集对非易失性存储器的额外部分的额外编程的装置。
EC48)根据EC42所述的系统,其中,用于初始编程的装置可至少部分经由第一接口操作,并且进一步包括用于存储可至少部分经由与第一接口分离的第二接口操作的冗余信息的装置。
EC49)根据EC48所述的系统,其中,第一接口为芯片间接口,第二接口为芯片内接口。
EC50)根据EC49所述的系统,其中,芯片间接口能够在控制器芯片与包括非易失性存储器的一个或多个芯片之间操作。
EC51)根据EC50所述的系统,其中,芯片内接口能够在控制器芯片的控制硬件与控制器芯片的存储器之间操作。
EC52)根据EC42所述的系统,进一步包括用于存储冗余信息至少直至完成识别为止的装置。
EC53)根据EC52所述的系统,进一步包括用于在计算所计算的数据之后释放被用于存储的装置使用的存储。
EC54)根据如EC42所述的系统,其中,系统的装置至少部分包括在非易失性存储器控制器中,该非易失性存储器控制器可作为固态磁盘控制器操作,该固态磁盘控制器能够至少部分经由与存储器接口标准兼容的计算主机接口与计算主机通信。
EC55)根据EC54所述的系统,其中,非易失性存储器控制器包括能够与非易失性存储器通信的闪存接口。
EC56)根据EC30、EC38或EC42所述的系统,其中,N个部分的每一个包括非易失性存储器中的相应一个或多个页面。
EC57)根据EC30、EC38或EC42所述的系统,其中,N个部分的每一个包括非易失性存储器的相应的一个或多个区块。
EC58)根据EC30、EC38或EC42所述的系统,其中,非易失性存储器包括一个或多个闪存。
EC59)一种实体的计算机可读介质,其中,具有存储在其中的当由处理元件执行时使处理元件执行和/或控制包括以下各项的操作的一组指令:
在非易失性存储器控制器处接收用于编程多个非易失性存储器的N个部分的数据,所述数据包括用于编程N个部分中的特定部分的特定数据;
将特定数据存储在与非易失性存储器控制器相关联的被分配的缓冲器中;
开始将特定数据编程到非易失性存储器中的特定非易失性存储器;
更新足以从N个部分中的M个部分的故障中恢复的冗余信息;
释放被分配的缓冲器;
其中,存储、开始编程特定数据、更新冗余信息及释放的至少一个响应于特定数据的接收;并且
其中,释放在特定非易失性存储器完成编程之前。
EC60)根据权利要求EC59所述的实体的计算机可读介质,其中,冗余信息是第一冗余信息,已针对N个部分的子集接收数据,但尚未针对N个部分的子集开始编程,并且所述操作进一步包括:
延迟对N个部分子集中的至少一部分进行编程;
开始将第一冗余信息编程到上述多个非易失性存储器中的多个非易失性存储器;
开始对N个部分的子集中的至少一部分进行编程;
更新不同于第一冗余信息的且足以从N个部分的子集中的M个的故障中恢复的第二冗余信息;并且
其中,延迟编程、开始对第一冗余信息进行编程、开始对N个部分子集中的至少一些进行编程及更新第二冗余信息响应于检测特定数据的编程故障。
EC61)根据EC60所述的实体的计算机可读介质,其中,在检测到故障时,特定数据被单独存储为被编码在在第一冗余信息中。
EC62)根据EC59所述的实体的计算机可读介质,其中,数据进一步包括用于编程N个部分中的第一个的初始数据,并且所述操作进一步包括:
至少部分基于初始数据来初始化冗余信息。
EC63)根据EC59所述的实体的计算机可读介质,其中,非易失性存储器控制器包括被分配的缓冲器。
EC64)根据EC59所述的实体的计算机可读介质,其中,被分配的缓冲器包括在第一芯片中,所述第一芯片与包括非易失性存储器控制器的第二芯片分离。
EC65)根据EC59所述的实体的计算机可读介质,其中,非易失性存储器控制器可作为固态磁盘控制器操作,所述固态磁盘控制器能够至少部分经由与存储器接口标准兼容的计算主机接口与计算主机通信。
EC66)根据EC59所述的实体的计算机可读介质,其中,非易失性存储器控制器包括能够与非易失性存储器通信的闪存接口。
EC67)根据EC59所述的实体的计算机可读介质,其中,非易失性存储器控制器包括处理元件。
EC68)一种实体的计算机可读介质,其中,具有存储在其中的当由处理元件执行时使处理元件执行和/或控制包括以下各项的操作的一组指令:
接收用于编程多个非易失性存储器的N个部分的数据;
根据所接收的数据请求N个部分的初始编程,所述初始编程在初始编程开始于N个部分的第二部分上之前完成于N个部分的第一部分上;
响应于请求初始编程,更新足以从请求其初始编程的N个部分中的多个部分的M个的故障中恢复的冗余信息;以及
响应于识别没有通过初始编程的N个部分的一部分的一个至M个,根据至少部分基于冗余信息计算的数据请求非易失性存储器的最多M个替代部分的替代编程。
EC69)根据EC68所述的实体的计算机可读介质,其中,冗余信息是第一冗余信息,并且操作进一步包括:
响应于识别,并响应于请求N个部分的第二部分的每一个的初始编程,更新不同于第一冗余信息的第二冗余信息。
EC70)根据EC68所述的实体的计算机可读介质,其中,处理元件包括在非易失性存储器控制器中,该非易失性存储器控制器可作为固态磁盘控制器操作,该固态磁盘控制器能够至少部分经由与存储器接口标准兼容的计算主机接口与计算主机通信。
EC71)根据EC70所述的实体的计算机可读介质,其中,非易失性存储器控制器包括能够与非易失性存储器通信的闪存接口。
EC72)一种实体的计算机可读介质,其中,具有存储在其中的当由处理元件执行时使处理元件执行和/或控制包括以下各项的操作的一组指令:
接收用于编程多个非易失性存储器的N个部分的数据;
至少部分基于所接收的数据来计算足以从N个部分中的M个部分的故障中恢复的冗余信息;
请求根据所接收的数据对N个部分的初始编程;以及
响应于识别没有通过初始编程的N个部分的第一个至M个,请求根据至少部分基于冗余信息计算的数据对非易失性存储器的最多M个替代部分的替代编程。
EC73)根据EC72所述的实体的计算机可读介质,其中,所计算的数据进一步至少部分基于从完成初始编程的N个部分中的多个部分读取的数据,并且所读取的数据与接收的数据的部分对应。
EC74)根据EC72所述的实体的计算机可读介质,其中,操作进一步包括根据冗余信息的所有或任意部分请求非易失性存储器的M减P个部分的额外编程。
EC75)根据EC74所述的实体的计算机可读介质,其中P为0。
EC76)根据EC74所述的实体的计算机可读介质,其中P为1。
EC77)根据EC72所述的实体的计算机可读介质,其中,M为2且进一步包括请求利用足以从N个部分中的一个的故障中恢复的冗余信息子集对非易失性存储器的额外部分的额外编程。
EC78)根据EC72所述的实体的计算机可读介质,其中,初始编程至少部分经由第一接口进行,并且操作进一步包括至少部分经由与第一接口分离的第二接口存储冗余信息。
EC79)根据EC78所述的实体的计算机可读介质,其中,第一接口为芯片间接口,第二接口为芯片内接口。
EC80)根据EC79所述的实体的计算机可读介质,其中,芯片间接口能够在控制器芯片与包括非易失性存储器的一个或多个芯片之间操作。
EC81)根据EC80所述的实体的计算机可读介质,其中,芯片内接口能够在控制器芯片的控制硬件与控制器芯片的存储器之间操作。
EC82)根据EC72所述的实体的计算机可读介质,其中,操作进一步包括存储冗余信息至少直至完成识别为止。
EC83)根据EC82所述的实体的计算机可读介质,其中,操作进一步包括在计算所计算的数据之后释放通过存储使用的存储。
EC84)根据EC72所述的实体的计算机可读介质,其中,处理元件包括在非易失性存储器控制器中,该非易失性存储器控制器可作为固态磁盘控制器操作,该固态磁盘控制器能够至少部分经由与存储器接口标准兼容的计算主机接口与计算主机通信。
EC85)根据EC84所述的实体的计算机可读介质,其中,非易失性存储器控制器包括能够与非易失性存储器通信的闪存接口。
EC86)根据EC59、EC68或EC72所述的实体的计算机可读介质,其中N个部分的每一个包括非易失性存储器的相应一个或多个页面。
EC87)根据EC59、EC68或EC72所述的实体的计算机可读介质,其中N个部分的每一个包括非易失性存储器的相应一个或多个区块。
EC88)根据EC59、EC68或EC72所述的方法,其中,非易失性存储器包括一个或多个闪存。
EC89)具有或参照存储器接口标准的任意前述EC,其中,存储器接口标准包括以下各项中的一项或多项:
通用串行总线(USB)接口标准,
紧凑式闪存(CF)接口标准,
多媒体卡(MMC)接口标准,
嵌入式MMC(eMMC)接口标准,
Thunderbolt接口标准,
UFS接口标准,
安全数字(SD)接口标准,
记忆棒接口标准,
xD图片卡接口标准,
集成驱动电子装置(IDE)接口标准,
串行高级技术附件(SATA)接口标准,
外部SATA(eSATA)接口标准,
小型计算机系统接口(SCSI)接口标准,
串行连接小型计算机系统接口(SAS)接口标准,
光纤通道接口标准,
以太网接口标准,以及
快速外围组件互连(PCIe)接口标准。
EC90)具有或参照闪存接口的任意前述EC,其中,闪存接口与以下各项中的一项或多项兼容:
开放NAND闪存接口(ONFI),
切换模式接口,
双倍数据速率(DDR)同步接口,
DDR2同步接口,
同步接口,以及
异步接口。
EC91)具有或参照计算主机的任意前述EC,其中,计算主机包括以下各项中的一项或多项:
计算机,
工作站计算机,
服务器计算机,
存储服务器,
存储附接网络(SAN),
网络附接存储(NAS)设备,
直接附接存储(DAS)设备,
存储应用,
个人计算机(PC),
膝上电脑,
笔记本电脑,
上网本电脑,
平板设备或电脑,
超极本电脑,
电子阅读设备(电子阅读器),
个人数字助理(PDA),
导航系统,
(手持式)全球定位系统(GPS)设备,
汽车控制系统,
汽车媒体控制系统或计算机,
打印机、复印机或传真机或多合一设备,
销售点(POS)设备,
现金出纳机,
媒体播放器,
电视机,
媒体记录器,
数字视频录像机(DVR),
数码相机,
蜂窝手机,
无绳电话手机,以及
电子游戏机。
EC92)具有或参照至少一个闪存的任意前述EC,其中,至少一个闪存的至少一部分包括以下各项中的一项或多项:
NAND闪存技术存储单元,以及
NOR闪存技术存储单元。
EC93)具有或参照至少一个闪存的任意前述EC,其中,至少一个闪存的至少一部分包括以下各项中的一项或多项:
单层单元(SLC)闪存技术存储单元,以及
多层单元(MLC)闪存技术存储单元。
EC94)具有或参照至少一个闪存的任意前述EC,其中,至少一个闪存的至少一部分包括以下各项中的一项或多项:
基于多晶硅技术的电荷存储单元,以及
基于氮化硅技术的电荷存储单元。
EC95)具有或参照至少一个闪存的任意前述EC,其中,至少一个闪存的至少一部分包括以下各项中的一项或多项:
基于二维技术的闪存技术,以及
基于三维技术的闪存技术。
系统
在某些实施例中,I/O设备,比如SSD,包括SSD控制器。SSD控制器充当SSD的主机接口和NVM之间的桥接器,并执行经由SSD的主机接口从计算主机发送的主机协议的命令。至少一些命令指示SSD利用自和至计算主机发送的数据分别写入并读取NVM。在进一步实施例中,使SSD控制器能够利用映射在主机协议的LBA和NVM中的物理存储地址之间转译。在进一步实施例中,映射的至少一部分用于I/O设备的专用存储器(对计算机用主机是不可见的)。例如,计算机用主机不可访问的LBA的一部分被I/O设备用来管理对日志、统计或其他专用数据的访问。
在某些实施例中,访问NVM中不同大小配量的压缩数据在某些使用场景下具有提高的存储效率。例如,SSD控制器从计算主机接收(未压缩)数据(例如,与磁盘写入命令相关),压缩该数据,并将压缩后的数据存储到闪存中。响应于来自计算主机的后续请求(例如,与磁盘读取命令相关),SSD控制器从闪存中读取压缩数据,对压缩数据进行解压,并向计算主机提供未压缩数据。根据不同大小量子将压缩数据存储在闪存中,量子大小由于压缩算法、操作模式和各种数据的压缩效率等而变化。SSD控制器通过查阅所包括的映射表对数据进行部分解压以确定报头存储在闪存中的位置。SSD控制器解析从闪存获得的报头以确定适当的(压缩)数据存储在闪存中的位置。SSD控制器对来自闪存的适当的数据进行解压以产生未压缩数据并将其提供给计算主机。在即时应用中,解压(及其变型)与去压缩(及其变型)同义。
在各种实施例中,SSD控制器包括与计算主机交互的主机接口、与NVM比如闪存交互的接口以及用于控制接口并进行(和/或控制进行的各方面)压缩和解压,以及更低级冗余和/或纠错、更高级冗余和/或纠错及利用独立硅元件的动态更高级冗余模式管理的电路。
根据各种实施例,某些主机接口与USB接口标准、CF接口标准、MMC接口标准、eMMC接口标准、Thunderbolt接口标准、UFS接口标准、SD接口标准、记忆棒接口标准、xD图片卡接口标准、IDE接口标准、SATA接口标准、SCSI接口标准、SAS接口标准和PCIe接口标准中的一个或多个兼容。根据各种实施例,计算主机是计算机、工作站计算机、服务器计算机、存储服务器、SAN、NAS设备、DAS设备、存储器具、PC、膝上电脑、笔记本电脑、上网本电脑、平板设备或电脑、超极本电脑、电子阅读设备(比如电子阅读器)、PDA、导航系统、(手持式)GPS设备、汽车控制系统、汽车媒体控制系统或计算机、打印机、复印机或传真机或多合一设备、POS设备、现金出纳机、媒体播放器、电视机、媒体记录器、DVR、数码相机、蜂窝手机、无绳电话手机和电子游戏机中的所有或任意部分。在某些实施例中,接口主机(比如SAS/SATA桥接器)作为计算主机和/或作为到计算主机的桥接器进行操作。
在各种实施例中,SSD控制器包括一个或多个处理器。控制器执行固件以控制和/或进行SSD控制器的操作。SSD控制器与计算主机通信以发送并接收命令和/或状态以及数据。计算主机执行操作系统、驱动程序和应用程序中的一个或多个。计算主机与SSD控制器的通信可选地和/或可选地是经由驱动程序和/或经由应用程序进行的。在第一示例中,与SSD控制器的所有通信是经由驱动程序进行的,并且应用程序向驱动程序提供驱动程序转译为SSD控制器的特定命令的更高级命令。在第二示例中,驱动程序实现旁通模式并且使应用程序能够经由驱动程序向SSD控制器发送特定命令。在第三示例中,PCIe SSD控制器支持一个或多个虚拟函数(VF),从而启用应用程序,一旦配置,就绕过驱动程序而与SSD控制器直接通信。
根据各种实施例,某些SSD与由磁性和/或光学非易失性存储器(比如,HDD、CD驱动器及DVD驱动器)所使用的形状因数、电接口和/或协议兼容。在各种实施例中,SSD使用零或零以上奇偶码、零或零以上RS码、零或零以上BCH码、零或零以上维特比或其他格子码及零或零以上LDPC码。
图1A示出了包括提供经由一个或多个(可选内部)冗余阵列的非易失性存储器(NVM)的程序故障恢复的SSD控制器的固态磁盘(SSD)的实施例的所选细节。SSD控制器用于管理比如经由NVM元件(例如,闪存)实现的非易失性存储。SSD控制器100经由一个或多个外部接口110与主机(未示出)通信耦接。根据各种实施例,外部接口110是以下各项中的一项或多项:SATA接口;SAS接口;PCIe接口;光纤通道接口;外部接口(比如10千兆以太网);任意前述接口的非标准版本;定制接口;或用于将存储和/或通信和/或计算设备互连的任何其他类型的接口。例如,在某些实施例中,SSD控制器100包括SATA接口和PCIe接口。
SSD控制器100进一步经由一个或多个设备接口190与包括一个或多个存储设备(比如,闪存设备192的一个或多个实例)的NVM199通信耦接。根据各种实施例,设备接口190是以下各项中的一项或多项:异步接口;同步接口;单倍数据速率(SDR)接口;双倍数据速率(DDR)接口;DRAM兼容DDR或DDR2同步接口;ONFI兼容接口(比如,ONFI2.2or ONFI3.0兼容接口);切换模式兼容闪存接口;任意前述接口的非标准版本;定制接口;或用于连接至存储设备的任何其他类型的接口。
在某些实施例中,每一个闪存设备192具有一个或多个个别闪存芯片194。根据闪存设备192的特定闪存设备的类型,特定闪存设备192中的多个闪存芯片194可选地和/或可选地并行访问。闪存设备192只表示能够与SSD控制器100通信耦接的一种类型的存储设备。在各种实施例中,任何类型的存储设备都是可使用的,比如SLC NAND闪存、MLC NAND闪存、NOR闪存、使用基于多晶硅或氮化硅技术的电荷存储单元的闪存、基于二维或三维技术的闪存、只读存储器、静态随机存取存储器、动态随机存取存储器、铁磁性存储器、相变存储器、赛道存储器、ReRAM或任何其他类型的存储器设备或存储介质。
根据各种实施例,设备接口190被组织为:一条或多条总线,其中,每条总线具有闪存设备192的一个或多个实例;一个或多个总线组,其中,每条总线具有闪存设备192的一个或多个实例,其中,一组中的总线通常被并行访问;或闪存设备192的一个或多个实例至设备接口190的任何其他组织。
继续图1A,SSD控制器100具有一个或多个模块,比如主机接口111、数据处理121、缓冲器131、映射器141、回收站151、ECC161、设备接口逻辑191以及CPU171。图1A中所示的具体模块和互连仅仅表示一个实施例,可以想到一些或所有模块以及未示出的其他模块的多种布置和互连。在第一示例中,在某些实施例中,存在两个或两个以上主机接口111来提供双通道。在第二示例中,在某些实施例中,数据处理121和/或ECC161与缓冲器131组合。在第三示例中,在某些实施例中,主机接口111直接与缓冲器131耦接,并且数据处理121可选地和/或可选地对于存储在缓冲器131中的数据进行操作。在第四示例中,在某些实施例中,设备接口逻辑191直接与缓冲器131耦接,并且ECC161可选地和/或可选地对于存储在缓冲器131中的数据进行操作。
主机接口111经由外部接口110发送和接收命令和/或数据,并且,在某些实施例中,经由标签跟踪113来跟踪单独命令的进程。例如,命令包括指定要读取的数据的地址(比如LBA)和量(比如LBA配量,例如扇区的数量)的读取命令;作为响应,SSD提供读取状态和/或读取数据。再如,命令包括指定要写入的数据的地址(比如LBA)和量(比如LBA配量,例如扇区的数量)的写入命令;作为响应,SSD提供写入状态和/或请求写入数据且随后可选提供写入状态。对于又一示例,命令包括指定不再需要分配的一个或多个地址(比如一个或多个LBA)的去分配命令(例如,修整命令);作为响应,SSD相应地修改映射且可选提供去分配状态。在某些上下文中,ATA兼容TRIM命令是示例性去分配命令。对于又一示例,命令包括超级电容器测试命令或数据强化成功查询;作为响应,SSD提供适当状态。在某些实施例中,主机接口111与SATA协议兼容,并且,使用NCQ命令而启用以具有最多32条待处理命令,每条命令有表示为数字0至31的唯一标签。在某些实施例中,标签跟踪113能够使经由外部接口110接收的命令的外部标签与用于在SSD控制器100处理过程中跟踪命令的内部标签相关联。
根据各种实施例,揭示以下各项中的一个或多个:数据处理121可选地和/或可选地处理在缓冲器131与外部接口110之间发送的一些或所有数据;以及数据处理121可选地和/或可选地处理存储在缓冲器131中的数据。在某些实施例中,数据处理121使用一个或多个引擎123来执行以下各项中的一项或多项:格式化;重新格式化;转码;以及任何其他的数据处理和/或操控任务。
缓冲器131存储自设备接口190发送至外部接口110/自外部接口110发送至设备接口190的数据,在某些实施例中,缓冲器131另外存储由SSD控制器100使用的系统数据(比如某些或全部映射表)以管理闪存设备192中的一个或多个实例。在各种实施例中,缓冲器131具有以下各项中的一个或多个:用于临时存储数据的存储器137;用于与NVM写入/编程有关的存储的被分配的缓冲器138(本文其他地方描述的);用于控制至和/或自缓冲器131的数据的移动的DMA133;用于提供更高级错误校正和/或冗余功能的ECC-X135;和其他数据移动和/或操控功能。更高级冗余功能的示例为一种RAID类能力(例如,RASIE,比如本文其他地方进一步详细描述的),其中冗余在闪存设备(例如闪存设备192的多个闪存设备)级和/或闪存芯片(比如闪存芯片194)级上而非在磁盘级上。
根据各种实施例,揭示以下各项中的一个或多个:ECC161可选地和/或可选地处理在缓冲器131和设备接口190之间发送的一些或所有数据;以及ECC161可选地和/或可选地处理存储在缓冲器131内的数据。在某些实施例中,ECC161用于提供更低级错误校正和/或诸如根据一个或多个ECC计算的冗余功能。在某些实施例中,ECC161实现以下各项中的一个或多个:CRC码;汉明码;RS码;BCH码;LDPC码;维特比码;格子码;硬判决码;软判决码;基于擦除的码;任何错误检测和/或纠正码;以及上述的任意组合。在某些实施例中,ECC161包括一个或多个解码器(比如LDPC解码器)。
设备接口逻辑191经由设备接口190控制闪存设备192的实例。设备接口逻辑191能够根据闪存设备192的协议将数据发送到或从闪存设备192发送数据。设备接口逻辑191包括调度193,从而经由设备接口190可选地顺序控制闪存设备192的实例。例如,在某些实施例中,调度193能够排队对于闪存设备192的实例的操作,并且当单独的闪存设备192(或闪存芯片194)的实例可用时,可选地将操作发送至单独的闪存设备192(或闪存芯片194)的实例。
映射器141在用于外部接口110上的数据寻址与用于设备接口190上的数据寻址之间转换,使用表143将外部数据地址映射至NVM199中的位置。例如,在某些实施例中,映射器141经由由表143提供的映射将用于外部接口110上的LBA转换成瞄准一个或多个闪存芯片192的区块和/或页地址。对于自驱动制造或去分配未曾被写入的LBA,该映射指向缺省值以返回是否读取该等LBA。例如,在处理去分配命令时,修改该映射以使得对应于去分配LBA的条目指向缺省值中的一个。在各种实施例中,存在各种缺省值,其各自具有对应指针。多个缺省值使得能够读取某些去分配LBA(比如在第一范围中)作为一个缺省值,同时读取其他去分配LBA(比如在第二范围中)作为另一个缺省值。在各种实施例中,缺省值由闪存、硬件、固件、命令和/或基元引数和/或参数、可编程寄存器或其各种组合定义。
在某些实施例中,映射器141使用表143从而在外部接口110上使用的地址和设备接口190上使用的数据寻址之间执行和/或查询转译。根据各种实施例,表143为以下各项中的一个或多个:一级映射;二级映射;多级映射;映射缓存;压缩映射;一个地址空间至另一个地址空间的任何类型映射;以及上述的任意组合。根据各种实施例,表143包括以下各项中的一个或多个:静态随机存取存储器;动态随机存取存储器;非易失性存储器;NVM(比如闪存);缓存存储器;片上存储器;片外存储器;和上述的任意组合。
在某些实施例中,回收站151执行无用数据收集。例如,在某些实施例中,闪存设备192的实例包含在可重写入之前必须擦除的区块。回收站151能够例如,通过扫描映射器141保持的映射来确定闪存设备192的实例的哪些部分正在有效使用中(例如,经分配而非经去分配),然后使闪存设备192的实例的未使用(例如,去分配)部分通过对其进行擦除而可用于写入。在进一步实施例中,回收站151能够移动存储在闪存设备192的实例内的数据,以使闪存设备192的实例的较大连续部分可用于写入。
在某些实施例中,闪存设备192的实例可选地和/或动态地经配置、管理和/或使用以具有用于存储不同类型和/或性质的数据的一个或多个存储带(band)。该等存储带的数目、布置、大小和类型可动态地改变。例如,将来自计算主机的数据写入热(作用)存储带,而将来自回收站151的数据写入冷(较少作用)存储带中。在某些使用场景下,如果计算主机写入长的顺序流,则热存储带的大小增加,而如果计算主机随机写入或较少写入,则冷存储带的大小增加。
CPU171控制SSD控制器100的各个部分。CPU171包括CPU内核172。根据各种实施例,CPU内核172为一个或多个单核或多核处理器。在某些实施例中,CPU内核172中的各个处理器内核是多线程的。CPU内核172包括指令和/或数据缓存器和/或存储器。例如,指令存储器包括能使CPU内核执行软件(有时称为固件)以控制SSD控制器100的指令。在某些实施例中,CPU内核172执行的一些或所有固件存储在闪存设备192上(如图所示,例如为1B中的NVM199的固件106)。
在各种实施例中,CPU171进一步包括:在经由外部接口110接收的命令处于进程的同时来跟踪和控制该命令的命令管理173;控制缓冲器131的分配和使用的缓冲器管理175;控制映射器141的转译管理177;控制数据寻址的一致性并避免比如外部数据访问和回收数据访问之间冲突的一致性管理179;控制设备接口逻辑191的设备管理181;控制身份信息的修改和通信的身份管理182;以及可选其他管理单元。根据各种实施例,CPU171执行的任何或所有管理功能是由硬件、软件(比如在CPU内核172或经由外部接口110连接的主机上执行的固件)或其任何组合进行控制和/或管理的。
在某些实施例中,CPU171能够执行其他管理任务,例如,以下各项中的一个或多个:收集和/或报告性能统计;实现SMART;控制电力排序、控制和/或监测和/或调整电力消耗;对电力故障做出响应;控制和/或监测和/或调整时钟速率;以及其他管理任务。
各种实施例包括与SSD控制器100类似并且与各种计算主机的操作兼容的计算主机闪存控制器,比如,经由主机接口111和/或外部接口110适配。各种计算主机包括以下各项中的一个或其任何组合:计算机、工作站计算机、服务器计算机、存储服务器、SAN、NAS设备、DAS设备、存储器具、PC、膝上电脑、笔记本电脑、上网本电脑、平板设备或电脑、超极本电脑、电子阅读设备(比如电子阅读器)、PDA、导航系统、(手持式)GPS设备、汽车控制系统、汽车媒体控制系统或计算机、打印机、复印机或传真机或多合一设备、POS设备、现金出纳机、媒体播放器、电视机、媒体记录器、DVR、数码相机、蜂窝手机、无绳电话手机和电子游戏机。
在各种实施例中,SSD控制器(或计算主机闪存控制器)的所有或任意部分在单个IC、多芯片IC的单芯片、多芯片IC的多个芯片或多个IC上实现。例如,缓冲器131在与SSD控制器100的其他元件相同的芯片上实现。再如,缓冲器131在与SSD控制器100的其他元件不同的芯片上实现。
图1B示出了包括图1A的SSD的一个或多个实例的系统的各种实施例的所选细节。SSD101包括经由设备接口190与NVM199耦接的SSD控制器100。该图示出了各类实施例:直接与主机耦接的单个SSD,各自经由各个外部接口分别直接与主机耦接的多个SSD,以及经由各个互连元件间接与主机耦接的一个或多个SSD。
作为直接与主机耦接的单个SSD的示例性实施例,SSD101的一个实例经由外部接口110直接与主机102耦接(例如,省略、绕过或穿过交换机/光纤/中间控制器103)。作为各自经由各个外部接口直接与主机耦接的多个SSD的示例性实施例,SSD101的多个实例中的每一个经由由外部接口110直接与主机102耦接(例如,省略、绕过或穿过交换机/光纤/中间控制器103)。作为经由各个互连元件间接与主机耦接的一个或多个SSD的示例性实施例,SSD101的一个或多个实例中的每一个分别间接与主机102耦接。每个间接耦接经由与交换机/光纤/中间控制器103耦接的外部接口110以及与主机102耦接的中间接口104的各个实例。
包括交换机/光纤/中间控制器103的实施例的某些实施例还包括经由存储器接口180耦接且SSD可访问的卡存储器112C。在各种实施例中,SSD、交换机/光纤/中间控制器103和/或卡存储器中的一个或多个包括在物理可识别的模块、卡或可插入元件(例如,I/O卡116)上。在某些实施例中,SSD101(或其变型)对应于与作为主机102操作的起始器耦接的SAS驱动器或SATA驱动器。
主机102能够执行主机软件115的各个元件,比如OS105、驱动程序107、应用程序109和多设备管理软件114的各种组合。虚线箭头107D表示主机软件←→I/O设备通信,例如,经由驱动器107从OS105、从驱动器107、经由驱动器107或直接作为VF地从应用程序109、或通过以上项的组合发送至SSD101的一个或者多个实例的数据;或者从SSD101的一个或者多个实例,经由驱动器107接收至OS105、接收至驱动器107、经由驱动器107或直接作为VF地接收至应用程序109、或接收至以上项的组合的数据。
OS105包括和/或能够借助与SSD交互的驱动程序(概念上由驱动程序107示出)操作。Windows的各种版本(例如,95、98、ME、NT、XP、2000、Server、Vista及7)、Linux的各种版本(例如,Red Hat、Debian及Ubuntu)及MacOS的各种版本(例如,8、9及X)是OS105的示例。在各种实施例中,驱动程序是借助标准接口和/或协议比如SATA、AHCI或NVM Express)操作的标准和/或通用驱动程序(有时称为“紧缩套装”或“预安装”),或者可选定制和/或供应商特定以启用SSD101所特定的命令的使用。某些驱动器和/或驱动程序具有穿过模式以启用应用级程序,比如经由最佳化NAND访问(有时称为ONA)或直接NAND访问(有时称为DNA)技术的应用程序,以将命令直接传递至SSD101,使得定制应用程序能够甚至借助通用驱动程序使用SSD101所特定的命令。ONA技术包括以下各项中的一个或多个:非标准修饰符(提示)的使用;供应商特定命令的使用;非标准统计比如根据可压缩性的实际NVM使用的通信;以及其他技术。DNA技术包括以下各项中的一个或多个:提供对NVM的未经映射读取、写入和/或擦除存储的非标准命令或供应商特定命令的使用,比如通过绕过I/O设备原本将进行的数据的格式化来提供对NVM的更直接访问的非标准或供应商特定命令的使用;以及其他技术。驱动程序的示例是不具有ONA或DNA支持的驱动程序、ONA启用的驱动程序、DNA启用的驱动程序及ONA/DNA启用的驱动程序。驱动程序的进一步示例是供应商提供、供应商开发和/或供应商增强驱动程序及客户端提供、客户端开发和/或客户端增强驱动程序。
应用级程序的示例是不具有ONA或DNA支持的应用程序、ONA启用的应用程序、DNA启用的应用程序及ONA/DNA启用的应用程序。虚线箭头109D表示应用程序←→I/O设备通信(例如,经由驱动程序绕过或经由用于应用程序的VF绕过),例如,ONA启用的应用程序及与SSD通信(比如不具有使用OS作为媒介物的应用程序)的ONA启用的驱动程序。虚线箭头109V表示应用程序←→I/O设备通信(例如,经由用于应用程序的VF绕过),例如DNA启用的应用程序和与SSD通信(比如不具有使用OS或驱动程序作为媒介物的应用程序)的DNA启用的驱动程序。
在某些实施例中,NVM199的一个或多个部分用于固件存储,例如固件106。固件存储包括一个或多个固件图像(或其部分)。例如,固件图像具有(例如)通过SSD控制器100的CPU内核172执行的固件的一个或多个图像。再如,固件图像具有(例如)在固件执行期间有CPU内核参考的常数、参数值及NVM设备信息的一个或多个图像。固件的图像对应于(例如)当前固件图像及零或零以上先前(相对于固件更新)固件图像。在各种实施例中,固件提供通用、标准、ONA和/或DNA操作模式。在某些实施例中,经由可选由驱动程序传递和/或提供的密钥或各种软件技术来启用固件操作模式中的一个或多个(例如,一个或多个API“未经锁定”)。
在缺少交换机/光纤/中间控制器的某些实施例中,SSD经由外部接口110直接与主机耦接。在各种实施例中,SSD控制器100经由其他控制器,比如RAID控制器的一个或多个中间阶层与主机耦接。在某些实施例中,SSD101(或其变型)对应于SAS驱动器或SATA驱动器,且交换机/光纤/中间控制器103对应于扩展器,该扩展器又与起始器耦接,或可替代地,交换机/光纤/中间控制器103对应于桥接器,该桥接器经由扩展器间接与起始器耦接。在某些实施例中,交换机/光纤/中间控制器103包括一个或多个PCIe交换机和/或光纤。
在各种实施例中,比如在其中主机102作为计算主机(例如,计算机、工作站计算机、服务器计算器、存储服务器、SAN、NAS设备、DAS设备、存储器具、PC、膝上电脑、笔记本电脑和/或上网本电脑)的某些实施例中,计算主机可选能够与一个或多个本地和/或远程服务器(例如,可选服务器118)通信(例如,经由可选I/O&存储设备/资源117以及可选LAN/WAN119)。例如,通信启用SSD101元件的任意一个或多个的本地和/或远程访问、管理和/或使用。在某些实施例中,通信完全地或部分地经由以太网。在某些实施例中,通信完全地或部分地经由光纤通道。在某些实施例中,LAN/WAN119表示一个或多个局域和/或广域网,比如服务器场中的网络、耦接服务器场的网络、城域网和互联网中的任意一个或多个。
在各种实施例中,SSD控制器和/或计算主机闪存控制器结合一个或多个NVM一起实现为非易失性存储组件,比如USB存储组件、CF存储组件、MMC存储组件、eMMC存储组件、Thunderbolt存储组件、UFS存储组件、SD存储组件、记忆棒存储组件和xD图片卡存储组件。
在各种实施例中,SSD控制器(或计算主机闪存控制器)的所有或任何部分或其功能在主机(例如,图1B的主机102)中实现,控制器要与该主机耦接。在各种实施例中,SSD控制器(或计算主机闪存控制器)的所有或任何部分或其功能经由硬件(例如,逻辑电路)、软件和/或固件(例如,驱动程序软件和/或SSD控制固件)或其任意组合来实现。例如,ECC单元(比如,类似于图1A的ECC161和/或ECC-X135)的功能或与该ECC单元相关联的功能经由软件在主机上实现且部分经由固件和硬件的组合在SSD控制器中实现。再如,回收站单元(比如类似于图1A的回收站151)的功能或与该回收站单元相关联的功能部分地经由软件在主机上实现且部分地经由硬件在计算主机闪存控制器中实现。
映射操作
图2示出了映射LBA的LPN部分的实施例的所选细节。在某些实施例中,读取单元是最细粒度的NVM,该NVM可独立读取,比如NVM的页面的一部分。在进一步实施例中,读取单元对应于(更低级)错误校正码的校验位(有时称为冗余)和由校验位保护的所有数据。例如,图1A的ECC161经由校验码比如经由LDPC码来实现错误校正,并且读取单元对应于实现除由LDPC编码位保护的数据位之外的LDPC码的编码位。
在某些实施例中,映射器141比如经由表143(如图1A所示)将LBA211的LPN213部分映射成LPN的映射信息221。LPN的映射信息(比如LPN的映射信息221)有时被称为映射条目。据说映射器141使LPN与对应映射条目相关联。在各种实施例中,映射经由一个或多个相关查找,经由一个或多个非相关查找,和/或经由一个或多个其他技术。
在某些实施例中,SSD控制器100为潜在和/或活动主动使用中的每个LPN维护一个映射条目。
在某些实施例中,LPN的映射信息221包括各个读取单元地址223和读取单元的长度225。在某些实施例中,存储长度和/或跨度,比如通过将长度存储为相对于跨度的偏移量来在读取单元的长度225的所有或任意部分中进行编码。在进一步实施例中,第一LPN与第一映射条目相关联,第二LPN(不用于第一LPN,但引用大小与由第一LPN引用的逻辑页面的大小相同的逻辑页面)与第二映射条目相关联,并且第一映射条目的读取单元中的各个长度不同于第二映射条目的读取单元中的各个长度。
在各种实施例中,在同一时间点,第一LPN与第一映射条目相关联,第二LPN(不同于第一LPN)与第二映射条目相关联,并且第一映射条目的各个读取单元地址与第二映射条目的各个读取单元地址相同。在进一步实施例中,与第一LPN相关联的数据和与第二LPN相关联的数据都存储在NVM199中的同一设备的同一物理页面中。
根据各种实施例,读取单元地址223与以下各项中的一个或多个相关联:NVM中的开始地址;NVM中的结束地址;任意前述的偏移量;以及用于识别与LPN213相关联的NVM的一部分的任何其他技术。
图3示出了在读取单元地址访问NVM以产生被组织为各个读取单元的读取数据,集体具有在读取单元配量中测得的长度的实施例的所选细节。根据各种实施例,第一读取单元313是以下各项中的一个或多个:在NVM的地址空间中具有最低地址的读取数据311中的读取单元之一;读取单元的固定读取单元;读取单元的任意读取单元;读取单元的可变读取单元;以及通过任何其他技术选择的读取单元之一。在各种实施例中,通过读取不超过由单位单元的长度225指定的数量的读取单元来启用SSD控制器100以访问NVM199并产生读取数据311。
图4A示出了读取单元(比如图3的读取单元313或315)作为读取单元401A的一个实施例的所选细节。在各种实施例和/或使用场景下,报头1441A至报头N419A是连续的,并且由每个报头识别的各个数据区域(比如经由各个偏移量)继最后一个报头之后是连续的。数据区域集体形成数据字节421A。按位置顺序存储数据区域,并且该位置顺序匹配存储报头的位置顺序。例如,鉴于第一报头,在读取单元开始时,第二报头和第三报头连续紧接着第一报头。第一数据区域(通过第一报头中的第一偏移量识别的)连续紧接着第三报头。第二数据区域(通过第二报头中的第二偏移量识别的)连续紧接着第一报头。类似地,第三数据区域(通过第三报头识别的)连续紧接着第二数据区域。
图4B示出了读取单元(比如图3的读取单元313或315)作为读取单元401B的另一实施例的所选细节。在各种实施例和/或使用场景下,报头标记(HM)410B是指示以下连续的报头(报头1411B、报头2412B……报头N419B)的数量的可选初始字段(比如1字节字段)。数据区域(数据字节421B、数据字节422B……数据字节429B)分别由报头(报头1411B、报头2412B……报头N419B)识别并按位置顺序存储,该位置顺序与存储报头的位置顺序相反。报头开始于读取单元的初端,而对应数据区域开始于读取单元的末端。在某些实施例中,数据区域中的数据字节(例如,数据字节421B、数据字节422B……数据字节429B)按递增顺序(匹配位置顺序的字节顺序)排列,而在其他实施例中,数据字节沿相反顺序(相对于位置反向的字节顺序)排列。在某些实施例中,报头标记在读取单元中使用,其中报头和数据字节按同一位置顺序存储(例如,如图4A所示)。
在某些实施例中,可选填充字节431A(或431B)符合与特定LPN相关联的数据的粒度。例如,在某些实施例中,如果数据字节421A(或集体为数据字节421B、数据字节422B……数据字节429B)具有少于固定量的剩余空间,比如8字节,在存储与除了报头1411A至报头N419A(或报头1411B、报头2412B……报头N419B)的最后一个报头之后的所有报头相关联的数据之后,与最后报头相关联的LPN的数据开始于后续读取单元。在进一步实施例中,最后报头中的特定偏移值(例如,所有偏移值)指示与最后报头相关联的LPN的数据开始于后续读取单元。
图5示出了具有大量字段的报头(比如,图4A的报头1411A至报头N419A或图4B的报头1411B至报头419B中的任意一个)的实施例的所选细节。在某些实施例中,报头为固定长度(例如,每个报头的长度为相同数量的字节)。报头501包括字段类型511、最后指示符513、标志515、LPN517、长度519和偏移量521。类型字段识别数据字节的类别。例如,类型字段指示数据字节的类别为主机数据(例如,逻辑页面数据)或系统数据(例如映射信息或检查点信息)中的一个。最后字段指示报头是数据字节之前的最后报头。在具有报头标记的某些实施例中,可选省略最后字段。LPN字段是报头与其相关联的LPN。LPN字段启用报头解析以通过(例如)搜索报头中LPN字段与特定LPN匹配的报头来确定与特定LPN相关联的报头中的特定报头。长度字段是数据字节的字节长度(例如,数据有多少字节在与报头501相关联的数据字节421A中)。在某些实施例中,偏移字段中的偏移量根据特定粒度(例如,8字节粒度)进行取整。
在各种实施例中,与特定LPN相关联的一部分或所有信息存储在与特定LPN相关联的映射条目、与特定LPN相关联的报头或这两者中。例如,在某些实施例中,长度519的一些或所有存储在映射条目中,而不是报头中。
图6示出了在逻辑片段和/或区段中管理的多个NVM器件(例如,一个或多个闪存芯片和/或闪存芯片)的区块、页面及读取单元的实施例的所选细节。管理功能包括读取、回收、擦除、编程/写入的任意一个或多个,以及其他管理功能。逻辑片段和/或区段有时被称为R-区块。该图示出了具有66个闪存芯片的实施例。明确示出了其中三个闪存芯片(闪存芯片610.65、610.1及610.0)并且内隐地示出了63个闪存芯片(610.64……610.2)。
每一闪存芯片(比如闪存芯片610.65……610.1及610.0的任一个)提供被组织为区块(比如,闪存芯片610.65的区块610.65BB……610.65B1及610.65B0;闪存芯片610.0的区块610.0BB……610.0B1及610.0B0;等等)。该等区块又包括页面(比如,区块610.65B0的页面610.65PP……610.65P1及610.65P0;区块610.0B0的页面610.0PP……610.0P1及610.0P0;等等)。该等区块又包括读取单元(比如,页面610.65P0的读取单元610.65RR……610.65R1及610.65R0;页面610.0P0的读取单元610.0RR……610.0R1及610.0R0;等等)。
在某些实施例中,每一闪存芯片包括整数个区块(例如N个区块)且区块为最小擦除配量。在某些实施例中,每一区块包括整数个页面且页面为最小写入配量。根据各种实施例,揭示以下情形中的一个或多个:读取单元为最小读取及错误校正配量;每一页面包括整数个读取单元;两个或两个以上页面的相关联组包括整数个读取单元;且读取单元可选地和/或可选地跨越页面边界。
在各种实施例中,各种NVM管理功能(例如,读取、回收、擦除和/或编程/写入)在R-区块的单元中执行。R-区块被举例说明为例如闪存的各个芯片(例如,所有芯片,不包括完全地或部分地出现故障的芯片的所有芯片,和/或一个或多个所选子集的芯片)上的逻辑片或者段。例如,在具有R闪存芯片的闪存中,每个闪存芯片具有N个区块,每个R-区块是总共N个R-区块中的来自一起取出的每个闪存芯片的第i区块。继续该示例,如果R闪存芯片之一出现故障,则每个R-区块是总共N个R-区块中的来自每个闪存芯片(除故障闪存芯片之外)的第i区块,每个R-区块的区块比出现故障之前少一个。再如,在具有R闪存芯片的闪存中,每个具有N个区块,每个R-区块是总共N/2个R-区块中的来自每个闪存芯片的第i和第(i+l)区块。对于又一示例,在具有多个双平面设备的闪存中,每个R-区块是来自每个双平面设备的第i偶数区块和第i奇数区块。再如,在具有多个多平面设备的闪存中,每个R-区块包括选择来最大化由多平面设备提供的并行性(例如,在编程期间)的区块。要注意的是,在双平面设备中的R-区块的前述示例中,双平面设备是多平面设备的示例,并且R-区块(其是来自每个双平面设备的第i偶数区块和第i奇数区块)是包括选择为最大化并行性的区块的R-区块的示例。最后一个示例是,在具有R闪存芯片的闪存中,R-区块是k个非连续区块,比如来自每个R闪存芯片的区块i1、i2……ik。
在成对或以其他相关联组将区块视为形成R-区块的部分的各种实施例中,也将来自区块的相关联组的每一区块的个别页面视为至少用于写入的单元,从而形成更大的多区块页面。例如,继续上述双平面示例,将偶数区块的特定区块的第一页面及奇数区块的相关联区块的第一页面视为用于写入的单元,且可选地和/或可选地视为用于读取的单元。类似地,将特定偶数区块的第二页面及相关联奇数区块的第二页面视为一单元。根据各种实施例,如本文中使用的NVM的页面指代以下各项中的一个或多个:NVM的单一页面;NVM的多区块页面;可选地和/或可选地视为用于读取的一个或多个个别页面的用于写入的NVM的多区块页面;及NVM的页面的任何其他组或关联。
该图示出了多个说明性R-区块,明确示出了其中三个(660.0、660.1及660.R)。每个说明性R-区块是来自一起取出的每个闪存芯片的第i区块。例如,R-区块660.0是来自闪存芯片610.65的区块610.65B0、来自闪存芯片610.64的区块0(未明确示出),等等,至闪存芯片610.1的区块610.1B0、以及闪存芯片610.0的区块610.0B0。由于每个闪存芯片存在N个区块,因此存在总计N个R-区块(R-区块660.R……R-区块660.1及R-区块660.0)。
R-区块的另一示例为来自一起取出的闪存芯片中的每一个的第i及第(i+1)区块(例如,来自闪存芯片610.65的区块610.65B0及610.65B1、来自闪存芯片610.64的区块0及1(未明确示出),等等,至来自闪存芯片610.1的区块610.1B0及610.1B1、以及来自闪存芯片610.0的区块610.0B0及610.0B1)。如果每一闪存芯片中存在N个区块,则因此存在N/2个R-区块。R-区块的另一示例为来自多个双平面设备中的每一个的第i偶数及奇数区块。预期作为R-区块以用于管理的闪存芯片区块的其他配置,包括在虚拟区块地址与物理区块地址之间映射以确保R-区块具有来自每一芯片的一个区块,即使一些区块不可操作也如此。在各种实施例中,每一闪存芯片中的N个区块中的一些用作备用,使得在虚拟区块地址与物理区块地址之间的映射具有备用(以其他方式未使用)区块以替代R-区块中的区块中的有缺陷区块。
在各种实施例中,闪存芯片中信息的读取和/或写入根据一个顺序(比如,“读取单元优先”顺序或“页面优先”顺序)来执行。图中所示的读取单元的读取单元优先顺序的示例以读取单元610.0R0开始,其后接着为610.1R0……610.65R0、610.0R1、610.1R1……610.65R1等,以610.65RR结束。图中所示的读取单元的页面优先顺序的示例以读取单元610.0R0开始,其后接着为610.0R1……610.0RR、610.1R0、610.1R1……610.1RR……610.65R0、610.65R1等,以610.65RR结束。
在各种实施例中,R-区块内的数据的写入和/或条带化顺序为跨越所有设备(例如,最低至最高编号设备,如条带化方向600概念性地建议)的页面(例如,最低至最高)优先,接着下一最高页面(跨越所有设备),等等,继续直至R-区块的最后页面。具体针对R-区块660.0,示例性顺序以页面610.0P0(闪存芯片610.0的第一区块中的第一页面)开始,其后接着为页面610.1P0(闪存芯片610.1的第一区块中的第一页面),等等,继续至页面610.65P0(闪存芯片610.65的第一区块中的第一页面,以及R-区块660.0的最后区块)。该示例性顺序以页面610.0P1(闪存芯片610.0的第一区块中的第二页面)继续,其后接着为页面610.1P1(闪存芯片610.1的第一区块中的第二页面),等等,继续至页面610.65P1(闪存芯片610.65的第一区块中的第二页面)。该示例以相同顺序继续。该示例性顺序以页面610.0PP(闪存芯片610.0的第一区块中的最后页面)完成,其后接着为页面610.1PP(闪存芯片610.1的第一区块中的最后页面),等等,以页面610.65PP结束(闪存芯片610.65的第一区块中的最后页面,以及R-区块660.0的最后区块中的最后页面)。
在各种实施例中,闪存芯片610.65……610.1及610.0对应于图1A的一个或多个个别闪存芯片194的各个。在某些实施例中,闪存芯片610.65……610.1及610.0为小于NVM199的全部的部分。例如,在各种实施例中,跨越多个闪存芯片组而独立地使数据条带化,其中可独立访问闪存芯片组中的每一个。
更高级冗余技术
图7示出了更高级冗余技术的各种实施例的所选细节。闪存设备720包括64个闪存芯片(如图6中明确地且内隐地所示的闪存芯片610.63、610.62、610.61……610.0)且经由接口信道730通信。额外闪存设备740包括至多两个闪存芯片(如图6中明确地且内隐地所示的闪存芯片610.65及610.64)且经由额外接口信道750通信。闪存芯片在存储子系统(比如,SSD中的NVM)中提供对更高级冗余信息的存储及数据存储(例如,用户数据和/或用户空闲空间)。(在冗余信息及数据存储的上下文中的“用户数据”的示例包括除存储于闪存上用于稍后检索的冗余信息外的所有数据,比如操作系统数据、应用程序数据、SSD管理数据等。)更高级冗余使得能够(例如)自一个或多个闪存芯片的一个或多个部分的间歇或永久故障(比如,提供错误校正数据(例如,经由更低级ECC功能)用于读取操作的故障或正确地完成写入操作的故障)恢复。
例如,每一闪存芯片(或者每一区块或每一区块内的每一页面)在硅独立元件冗余阵列(RASIE)的上下文中操作。如果在特定闪存芯片中检测到故障(例如,归因于特定芯片的区块的部分的ECC不可校正的读取错误),则作为响应,存储于闪存芯片的其他中的冗余信息用于确定本应由特定芯片提供的信息。在某些实施例和/或使用场景中,存储足够冗余信息以使得能够自一闪存芯片内的一故障恢复(在单一操作期间)。在某些实施例中,在使得能够自单一故障恢复的模式下的操作包括分配及管理等效于一闪存芯片的空间以用于更高级冗余信息,且称为“RASIE-1”。在某些实施例中,在使得能够自两个故障恢复的模式下的操作包括分配及管理等效于两个闪存芯片的空间以用于更高级冗余信息,且称为“RASIE-2”。在某些实施例中,在使得能够自三个故障恢复的模式下的操作包括分配及管理等效于三个闪存芯片的空间以用于更高级冗余信息,且称为“RASIE-3”。RASIE模式比如RASIE-1、RASIE-2及RASIE-3是RASIE模式的各示例,因为等效于一个或多个全闪存芯片(例如,分别为一个、两个和三个全闪存芯片)的整数倍的存储容量专用于更高级冗余信息。
在某些实施例和/或使用场景中,管理芯片级故障为目标,且执行在芯片间散布信息。例如,更高级冗余信息存储于仅特定分配给更高级冗余信息的一个或多个芯片中。在某些实施例和/或使用场景中,管理区块级故障为目标,且执行在芯片内的区块间散布信息。例如,更高级冗余信息存储于分配给更高级冗余信息的一个或多个区块中,该分配不考虑区块为哪些特定芯片的部分。在某些实施例和/或使用场景中,管理特定实体级故障包括散布信息,使得仅N个元件(例如,对于RASIE-1为1个且对于RASIE-2为2个)在特定实体中的任一个中。实体的示例包括(封装)设备、芯片、R-区块、区块、R-页面(本文其他地方所述)、页面、与字线相关联的单元、以及前述中的一个或多个。
根据写入至闪存芯片的(用户)数据来计算及写入更高级冗余信息,且因此在检测到故障时更高级冗余信息可用于提供信息。在各种实施例中,在写入与更高级冗余信息相关联的(用户)数据之前、之后或不按关于写入与更高级冗余信息相关联的(用户)数据的特定时间顺序,将更高级冗余信息写入至闪存芯片。
该图示出了RASIE操作模式的各种实施例,如下表中所概括。
更具体地,在RASIE-1模式下,将等效于一个芯片的空间分配给更高级冗余信息。在RASIE-1模式1-0中,不使用额外闪存设备740,因为更高级冗余信息存储于闪存设备720的一个芯片(例如,闪存芯片610.63)中,留下63个芯片(闪存芯片610.62……610.0)用于数据存储(例如,用户数据和/或用户空闲空间)。在RASIE-1模式1-1中,使用额外闪存设备740的一个芯片(例如,闪存芯片610.64),留下闪存设备的全部(64个芯片)用于数据存储。
在RASIE-2模式下,将等效于两个芯片的空间分配给更高级冗余信息。在RASIE-2模式2-0中,不使用额外闪存设备740,因为更高级冗余信息存储于闪存设备720的两个芯片(例如,闪存芯片610.63及闪存芯片610.62)中,留下62个芯片(闪存芯片610.61……610.0)用于数据存储。在RASIE-2模式2-1中,使用额外闪存设备740的一个芯片(例如,闪存芯片610.64),因为更高级冗余信息部分地存储于闪存设备720的一个芯片(例如,闪存芯片610.63)中,留下63个芯片(闪存芯片610.62……610.0)用于数据存储。在RASIE-2模式2-2中,使用额外闪存设备740的两个芯片(例如,闪存芯片610.65及闪存芯片610.64),留下闪存设备720的全部(64个芯片)用于数据存储。
在某些实施例中,未填充在所有使用场景中均未使用的芯片。例如,在可仅在RASIE2-0模式及RASIE1-0模式下(而非在其他RASIE模式下)操作的系统中,未填充额外闪存设备740。
在某些实施例中,更高级冗余信息完全地存储于“专用”芯片中(例如,在RASIE-1模式1-0中存储于闪存芯片610.63或在RASIE-2模式2-2中存储于闪存芯片610.65及闪存芯片610.64)。在其他实施例中,更高级冗余信息存储于芯片中的任一个中,因此(例如)在RASIE-1模式1-0中,闪存芯片610.62用于更高级冗余信息,而闪存芯片610.63及闪存芯片610.61……610.0用于数据存储。在某些实施例和/或使用场景中,更高级冗余信息随时间存储于不同芯片(和/或其部分)中,因此(例如)在第一时间周期中,第一闪存芯片保持更高级冗余信息,而在第二时间周期中,第二闪存芯片保持更高级冗余信息。
在各种实施例中,取决于多少闪存芯片可用,存在多种RASIE1-0模式(及多种RASIE2-0模式)。例如,在第一RASIE1-0模式(如上表中所示)中,闪存芯片610.63存储更高级冗余信息,且闪存芯片610.62……610.0可用于数据存储。在第二RASIE1-0模式下,闪存芯片610.63不再可用,闪存芯片610.62存储更高级冗余信息,且闪存芯片610.61……610.0可用于数据存储,从而将可用的数据存储量减小一个芯片。先前可用于数据存储的芯片(或其任何部分)归因于该芯片(或部分)用于更高级冗余信息而不再可用于数据存储的RASIE模式有时被称为容量减少的RASIE模式。
在某些实施例中,使用与受更高级冗余信息保护的用户数据相同和/或类似的更低级冗余和/或错误校正编码方案来存储更高级冗余信息。使用更低级冗余和/或错误校正方案来保护更高级冗余信息使得能够以与确定用户数据中的不可校正的更低级错误相同和/或类似的方式来确定在更高级冗余信息中是否存在不可校正的错误。
在某些实施例中,更高级冗余信息存储于用于数据的不同部分的不同芯片中。例如,在于R-区块中管理闪存芯片的某些实施例中,更高级冗余信息存储于用于不同R-区块的不同闪存芯片中。例如,用于包括闪存芯片610.0的区块0的R-区块的更高级冗余信息存储于闪存芯片610.0中,而用于包括闪存芯片610.0的区块1的R-区块的更高级冗余信息存储于闪存芯片610.1中,等等。在某些实施例(比如,在R-区块中管理闪存芯片的某些实施例)中,在已知和/或写入更高级冗余信息所取决于的数据之后写入更高级冗余信息。
在某些使用场景下,NVM元件的一个或多个部分(例如,设备的区块,比如图6的闪存芯片610.0的区块610.0BB)为不可操作的或在操作期间变得不可操作。在某些实施例中,不可操作部分经由虚拟及物理区块地址(例如,经由经图1A的映射器141和/或表143执行的处理)映射出。或者,跳过(而非明确地映射出)不可操作部分。在基于R-区块的某些实施例中,跳过导致一些R-区块具有不同数目个区块。例如,如果区块610.0B0为有缺陷及不可用的,则R-区块660.0比R-区块660.1少一个区块。将更高级冗余信息写入为(例如)每一R-区块的最后区块的(每一R-区块)可变位置中。
在各种实施例中,图7的一个或多个元件对应于图1A的一个或多个元件。例如,闪存设备720及额外闪存设备740集体对应于NVM199,且接口信道730及额外接口信道750集体对应于设备接口190。再如,闪存芯片610.65……610.0集体对应于闪存芯片194的实例。对于又一示例,闪存设备720和/或额外闪存设备740的闪存设备中的一个或多个对应于闪存设备192的实例中的一个或多个。在各种实施例中,图1A的一个或多个元件根据本文中描述的RASIE操作模式管理更高级冗余信息和/或至少部分地基于更高级冗余信息来恢复用户数据。例如,CPU171的软件执行能力的部分用以根据各种RASIE操作模式管理更高级冗余信息的计算。再如,数据处理121和/或ECC-X135包括专用于和/或特定用于根据各种RASIE操作模式计算更高级冗余信息和/或恢复用户数据的硬件元件。对于又一示例,ECC161检测闪存芯片的部分的ECC不可校正(更低级)的读取错误,且ECC-X135检测RASIE(更高级)读取错误和/或实现对其的校正。
在各种实施例中,接口信道730变化地具有1个、4个、8个或16个信道,且额外接口信道750变化地具有一或两个通道。在各种实施例中,闪存设备720被实现为1个、2个、4个、8个或16个设备,每一个分别具有64、32、16、八及四个闪存芯片。在各种实施例中,额外闪存设备740被实现为具有一或两个芯片的一设备或被实现为各自具有一个芯片的两个设备。在某些实施例中,额外闪存设备740的闪存芯片在同样实现闪存设备720的闪存芯片的设备中实现。例如,一个闪存设备实现66个闪存芯片(闪存芯片610.65……610.0)。再如,两个闪存设备各自实现33个闪存芯片,例如,在第一闪存设备中实现33个闪存芯片(闪存芯片610.65……610.33)及在第二闪存设备中实现33个闪存芯片(闪存芯片610.32……610.0)。预期闪存芯片及闪存设备的其他配置。在具有在同样实现闪存设备720的闪存芯片的设备中实现的额外闪存设备740的某些实施例中,闪存芯片经由共享接口信道或者经由专用于闪存芯片中的特定者(或集合)的接口信道来通信。虽然将闪存设备720及额外闪存设备740示为具有特定数目个闪存芯片(分别为2及64),但预期其他实施例,比如具有2、4、8、16、32或128个闪存芯片的闪存设备720和/或具有0、1或4个闪存芯片的额外闪存设备740。
图8示出了具有RASIE的动态更高级冗余模式管理的实施例的所选细节,比如在由图6和/或图7所示的各种实施例启用的RASIE模式之间的动态切换。在某些实施例和/或使用场景中,提供一种形式的柔性降级,其中存储子系统(例如,SSD)自在第一更高级冗余模式下操作动态地转变至在第二更高级冗余模式下操作。该转变响应于故障的检测,诸如整个闪存芯片或其一个或多个部分或对其的操作(比如,读取或写入操作)的永久或间歇失灵。根据各种实施例,该转变为以下各项中的一个或多个:SSD的全体;在SSD的一个或多个子集上执行;及在SSD的一个或多个R-区块、区块和/或页面上执行。例如,如果存储RASIE-2信息的NVM设备中的一个的特定区块在程序化期间故障,则含有该特定(故障)区块的R-区块的后续操作转变至不同更高级冗余模式(例如,RASIE-1模式),而SSD中的其他R-区块未受影响且继续在RASIE-2模式下操作。
针对图8,处理以根据第一更高级冗余模式在闪存芯片中配置更高级冗余信息及数据存储(例如,用户数据和/或用户空闲空间)开始(在第一更高级冗余模式下操作802)。接着流程进行以确定是否已检测到故障(故障?803),比如更低级不可校正的读取错误或写入/编程故障。如果尚未检测到故障,则流程返回进行以继续在第一更高级冗余模式下操作。如果已检测到故障,则流程进行以自在第一更高级冗余模式下操作切换至在第二更高级冗余模式下操作(动态转变操作模式809)。
切换通过(可选)减小可用于数据存储的空间(减少空闲空间804)以考虑该故障来开始。如果第二更高级冗余模式使用比第一更高级冗余模式足够少的更高级冗余信息,则省略空闲空间的减小。切换通过根据第二更高级冗余模式重新组织数据存储(重新配置数据存储805)而继续。重新组织包括可选将所有用户数据和/或用户空闲空间自发生故障的闪存芯片移动至闪存芯片中的另一个(在某些实施例中,通过操纵指针和/或其他数据结构元素而完成用户空闲空间移动)。切换进一步通过以下动作:继续经由第一更高级冗余模式的更高级冗余信息选择性地寻回(如果可能)存储于发生故障的闪存芯片中的任何用户数据,且根据第二更高级冗余模式将所寻回的用户数据写入至闪存芯片中的另一个(恢复/存储故障的用户数据806)。如果故障为写入/编程故障,则省略寻回。切换进一步通过可选根据第二更高级冗余模式计算更高级冗余信息且将其写入至闪存芯片(确定/存储修订的更高级冗余信息807)而继续。如果第二更高级冗余模式可与先前归因于在第一更高级冗余模式下操作而在适当位置的更高级冗余信息一起操作,则省略计算及写入。接着操作在第二更高级冗余模式下开始(在第二更高级冗余模式下操作808)。
故障检测(故障?803)经由以下各项中的一个或多个进行:更低级冗余和/或错误校正(例如,根据一种或多种ECC技术)、更高级冗余和/或错误校正(例如,根据一种或多种RASIE技术)及由闪存芯片中的一个或多个或其部分报告的故障状态。例如,特定闪存芯片的特定部分(例如,R-区块、区块、R-页面、页面、读取单元或与字线相关联的单元)内的读取的多于临限数目个更低级错误校正可选和/或有条件地导致将特定闪存芯片(或特定部分)视为故障,且执行更高级冗余模式切换使得不再使用该故障的闪存芯片(或部分)。再如,如果更高级错误校正故障,则将闪存芯片(或其部分)中的适当者视为故障,且执行更高级冗余模式切换使得不再使用该故障的闪存芯片(或部分)。对于另一实例,如果闪存芯片返回编程故障状态(指示写入操作不成功),则将闪存芯片中的适当者的适当区块被视为故障,且可选和/或有条件地执行更高级冗余模式切换使得不再使用该故障的闪存芯片(或者可替代地其一部分)。
在某些实施例中,通过经由虚拟及物理区块地址(例如,经由经图1A的映射器141和/或表143执行的处理)的重新映射来替代故障的区块。替代故障的区块而映射来自备用区块的集区的备用区块。将在故障的区块中写入的任何内容复制至替代区块,且写入自在故障的区块中发生故障之处在备用区块中进行。
在某些实施例中,跳过(而非明确地重新映射)故障的区块,从而产生“空洞”,在该空洞所在的R-区块接下来被擦除(为重新写入作准备)时该空洞可选和/或有条件地导致更高级冗余模式切换。如果空洞在用于数据存储的位置中,则不进行切换,且保留空洞。如果空洞在用于更高级冗余信息的位置中,则将更高级冗余信息存储于另一位置中,且可选切换更高级冗余模式。
在某些实施例和/或使用场景中,存储于发生故障的闪存芯片中的用户数据的寻回是不可能的。例如,如果故障归因于经由更高级冗余和/或错误校正所检测的一些类型的故障和/或由闪存芯片中的一个或多个或其部分报告的一些类型的故障状态,则可遗失一些用户数据。
在某些实施例中,图8的处理在响应于多个故障(例如,SSD控制器)而在更高级冗余模式之间动态地转变的上下文中执行。具体地,SSD控制器开始在第一更高级冗余模式下操作且响应于第一故障而动态地转变至第二更高级冗余模式,且随后响应于第二故障而自第二更高级冗余模式动态地转变至第三更高级冗余模式,等等。例如,SSD控制器根据RASIE-2模式2-2操作各种闪存芯片且回应于第一故障而将该操作动态地转变为根据RASIE-2模式2-1。随后,SSD控制器响应于第二故障而将操作动态地转变为根据RASIE-2模式2-0。随后,SSD控制器回应于第三故障而将操作动态地转变为根据RASIE-1容量减少模式1-0(除一个闪存芯片用于更高级冗余信息且62个闪存芯片用于数据存储外,容量减少模式1-0类似于RASIE-1模式1-0)。
作为特定示例,考虑耦接至图7的元件的SSD控制器(比如,图1A的SSD控制器100),最初在RASIE-2模式2-2中操作(例如,更高级冗余信息在闪存芯片610.65及闪存芯片610.64中,且数据存储在闪存芯片610.63……610.0中),其对应于在第一更高级冗余模式下操作。接着执行对闪存芯片中的一个或多个的读取或者写入。该读取导致不可校正(更低级)的ECC故障,或者在闪存芯片中的特定闪存芯片的部分(例如,闪存芯片610.62的用于用户数据和/或用户空闲空间的页面)中,写入为不成功的。作为响应,SSD控制器自在RASIE-2模式2-2中操作动态地切换至在RASIE-2模式2-1中操作,不再使用闪存芯片610.62中的任一个。当RASIE-2模式2-1中的操作提供63个芯片用于数据存储(与RASIE-2模式2-2中的64个芯片对比)时,可用于数据存储的空间自64个芯片减小至63个芯片,且相应地移动用户数据和/或用户空闲空间。例如,根据使用者空闲空间而将来自闪存芯片610.62的所有用户数据移动至闪存芯片610.63及闪存芯片610.61……610.0的部分。基于闪存芯片610.65和/或闪存芯片610.64中的更高级冗余信息恢复具有不可校正的ECC故障的页面中的任何用户数据。计算基于闪存芯片610.63及闪存芯片610.61……610.0中的数据存储及根据RASIE-2模式2-1的更高级冗余信息且将其存储于闪存芯片610.65和/或闪存芯片610.64中。SSD控制器接着在RASIE-2模式2-1下操作(更高级冗余信息在闪存芯片610.65及闪存芯片610.64中,及数据存储在闪存芯片610.63及闪存芯片610.61……610.0中)。
在各种实施例中,图8的一个或多个元素的处理或关于图8的一个或多个元素的处理全部或部分地通过图1A的一个或多个元件(或其部分)来执行。例如,CPU171的软件执行能力的部分用以(比如)通过指导减小可用于数据存储的空间或指导重新组织数据存储而管理更高级冗余模式之间的动态转变。再如,数据处理121和/或ECC-X135包括专用于和/或特定用于根据“目标”冗余模式计算更高级冗余信息的硬件元件。对于又一示例,ECC161实现更低级(例如,ECC)错误校正及不可校正错误的检测,而ECC-X135实现更高级(例如,RASIE)错误校正及不可校正错误和/或存储器元件故障的检测。对于又一示例,通过ECC-X135的一个或多个部分来执行与(更高级)冗余模式之间的动态转变有关的功能性的所有或任何部分。
更高级冗余及适应性更低级码速率
在某些实施例和/或使用场景中,更低级冗余和/或错误校正使用适应性码速率(例如,使用可变码速率的适应性ECC技术)。例如,第一读取单元系以比以第二码速率管理的第二读取单元提供相对更多可用数据位的第一码速率来管理。在使用可变码速率的更低级冗余和/或错误校正的某些实施例和/或使用场景中,更高级冗余信息存储于以更低级冗余和/或错误校正管理的独立硅元件的部分(比如,闪存芯片的部分)中,关于由更高级冗余信息保护的数据存储,更低级错误校正提供相对更多可用数据位或最多可用数据位。在各种实施例和/或使用场景中,存储更高级冗余信息的部分基于每一R-区块,基于每一芯片,随时间动态地或其任何组合而变化。在各种实施例中,基于关于更低级错误校正码速率具有最多可用数据而选择一个或多个芯片、R-区块、区块和/或页面以用于更高级冗余数据的存储。
例如,更高级冗余信息基于每一R-区块而存储于变化位置(比如,区块位置)处,该等位置(比如,区块)为基于更低级错误校正码速率具有最多可用数据的位置。在任意实例中,考虑图7的上下文中的RASIE-2操作模式情况,其中将66个闪存芯片的集合视为各自具有一个区块的高度的至多M个R-区块的逻辑“堆栈”,其中M为每一闪存芯片的区块数目。(在概念上最简明状况下,堆栈中的每一R-区块系由来自每一芯片的编号相同的物理区块组成,但为容纳故障的区块,在至少某些实施例中解除此约束。在另一实施例中,维持约束,但容纳对应于故障的区块的“空洞”)。因此,每一R-区块具有至多66个区块,其对应于来自闪存芯片610.0至闪存芯片610.65中的每一个的一区块。(在图7中,虽然仅明确地列举在范围610.0至610.65中的一些闪存芯片,但应理解,通过使用省略号而内隐地示出此范围中的所有闪存芯片。)将更高级冗余信息写入至每一R-区块的基于更低级校正码速率而具有最多可用数据的任一区块中。如果(例如)在第一R-区块中,对应于闪存芯片610.15及610.49的区块基于更低级错误校正码速率碰巧具有最多可用数据,则将更高级冗余信息写入至这些区块(对应于闪存芯片610.15及610.49)中。而如果在第二R-区块中,对应于闪存芯片610.9及610.35的区块基于更低级错误校正码速率碰巧具有最多可用数据,则将更高级冗余信息写入至这些区块(对应于闪存芯片610.9及610.35)中。在某些实施例中,在已知R-区块中的所有其他数据之后写入更高级冗余数据。
图9示出了具有受存储于读取单元的一个或多个中的更高级冗余信息保护的适应性(例如,随时间和/或依据位置而不同和/或变化)码速率的更低级冗余信息的读取单元(911、931…951、971)的实施例。读取单元中的每一个具有经启用和/或分配以含有用户数据(911.U、931.U…951.U、971.U)的部分,及经启用和/或分配以含有更低级冗余信息(比如,如更低级ECC(911.E、931.E…951.E、971.E)的ECC码之检查位)的剩余部分。
在该图中,相对地按比例调整垂直尺寸且其指示相对大小。因此,读取单元911及951具有相同的第一大小(在某些实施例中,对于所有NVM设备的所有区块,所有读取单元为相同大小),更低级ECC部分931.E及951.E具有相同的第二大小,且更低级ECC部分911.E及971.E具有相同的第三大小。读取单元931大于读取单元911及951,读取单元911及951又大于读取单元971。用户数据部分931.U大于用户数据部分951.U。用户数据部分951.U大于用户数据部分911.U。更低级ECC部分951.E小于更低级ECC部分911.E。
如该图中所示,相应读取单元具有相应的大小(例如,NVM的每一个别区块),从而使得能够变化如个别区块中使用的更低级码速率。更具体地,读取单元931及951具有相同的更低级冗余信息量(931.E及951.E为相同大小),但读取单元931的更低级码速率高于读取单元951的更低级码速率,因为读取单元931含有比读取单元951(含有用户数据951.U)多的用户数据(931.U)。
如该图中所示,相应读取单元具有相应大小的用户数据,从而使得能够在具有相同大小的两个或两个以上读取单元中的每一个中具有各种大小的用户数据。例如,变化用户数据的大小以改变用于特定读取单元中的更低级码速率。更具体地,读取单元951及911具有相同大小,但具有不同个别量的用户数据(951.U及911.U),且因此具有不同个别量的更低级冗余信息(951.E及911.E),从而使得读取单元951能够具有比读取单元911高的更低级码速率。
在某些实施例和/或使用场景中,变化和/或改变更低级码速率有利地使得能够提供足够量的更低级ECC信息以达成更低级错误校正要求,同时最大化用户数据量。
在读取单元中具有变化量的用户数据的某些实施例中,更高级冗余信息存储于具有最大用户数据量的读取单元的一个或多个中。例如,在图9中,在使用RASIE-1模式的情况下,更高级冗余信息存储于用户数据931.U中,且在使用RASIE-2模式的情况下,更高级冗余信息存储于用户数据931.U及用户数据951.U中。将更高级冗余信息存储于具有最大用户数据量的读取单元(在受更高级冗余信息保护的读取单元间)中确保存在足够的更高级冗余信息以保护所有其他读取单元中的用户数据。
根据各种实施例,一种或多种技术用于确定受更高级冗余信息保护的数个读取单元间的一个或多个读取单元中的哪一个用于存储更高级冗余信息。在第一示例中,使用具有最大用户数据量的最后写入的一个(对于RASIE-1)或两个(对于RASIE-2)读取单元。在第二示例中,使用具有最大用户数据量的最早写入的一个(对于RASIE-1)或两个(对于RASIE-2)读取单元。类似地,用于确定性地选择具有最大用户数据量的一个或多个读取单元以便保护其他读取单元中的所有剩余用户数据的任何技术在本文中所考虑的技术的范畴内。
更高级冗余信息计算技术
在各种实施例和/或使用场景中,更高级冗余信息系通过多种技术来计算,比如经由奇偶检查、RS和/或加权和技术。例如,在使得能够自一个(更低级)故障(例如,RASIE-1)恢复的一些更高级冗余模式下,经由奇偶检查技术来计算更高级冗余信息。对于另一实例,在使得能够自两个(更低级)故障(例如,RASIE-2)恢复的一些更高级冗余模式下,经由奇偶检查与RS技术的组合来计算更高级冗余信息。使用奇偶编码来计算更高级冗余信息的第一部分且使用RS编码来计算第二部分。对于另一实例,在使得能够自两个故障(例如,RASIE-2)恢复的一些更高级冗余模式下,经由奇偶检查与加权和技术的组合来计算更高级冗余信息。使用奇偶编码来计算更高级冗余信息的第一部分且使用加权和编码来计算第二部分。更高级冗余信息系(例如)使用更低级故障检测技术(比如,ECC)经由NVM的页面的读取及写入来管理,该等更低级故障检测技术(比如,ECC)与用于可用于存储受更高级冗余信息保护的数据的NVM的页面的更低级故障检测技术相同或类似。
作为RASIE-2的特定示例,经由跨越R-区块的条带区中的所有第一页面的XOR使用奇偶编码来计算更高级冗余信息的第一页面。更具体地,对跨越R-区块的条带区中的所有第一页面的所有第一字节执行XOR,产生更高级冗余信息的第一页面的第一字节。类似地,通过对跨越R-区块的条带区中的所有第一页面的所有第二字节进行XOR而形成更高级冗余信息的第二字节,且对条带区中的所有第一页面的所有字节执行XOR而形成更高级冗余信息的所有字节。如下使用加权和技术来计算更高级冗余信息的第二页面。
在有限域(比如,伽罗瓦域(用作示例))上执行算法。示例假定正被操作的数据为字节宽,且因此使用比如GF(256)的域。在各种实施例中,在任何单元中对数据进行操作。
向条带区中的每一页面指派唯一非零“索引”。挑选索引的值以简化实施复杂性,且该等值不与产生多项式的任何形式相关。例如,页面系由条带区中的自0至N-1的芯片位置来标记(例如,通过软件),且索引的合适值为芯片数(如果N<255,则确保为非零)的1补码。索引值的另一选择为最低权重(设定位的最少数目或清除位的最少数目)非零整数,(例如)以减少和/或最小化硬件成本。在某些实施例和/或使用场景中,在处理页面时,选择格雷编码值以用于索引最小化转变和/或减少功率。
不根据有限域算法而是根据其他原理来选择索引值。尽管如此,但每一索引值对应于有限域中的非零元素。假定页面i具有索引值Ki(且页面j具有索引值Kj)。加权和冗余为Ki*Pi(每一字节(在GF域上)乘以其索引值)的(GF域)总和(在来自每一页面i的相应字节Pi范围内)。
因此,对于每一字节,将加权和冗余信息计算为:
R0=在所有相应字节Pi范围内的总和;
R1=在所有相应字节Ki*Pi范围内的总和;
R0为所有相应字节的XOR;且
R1为字节的加权和,其中权重经选择为索引值。前述计算针对页面中的相应字节中的每一个而反复,从而产生R0及R1中的每一个的字节的相应页面。在以下论述中,为阐述清楚起见,在一些上下文中分别将R0及R1描述为单一元素(例如,每一个为单一字节),但如在前述计算中,每一个表示元素的个别页面(例如,每一个为字节的页面)。
Pi表示页面i中的字节,且Pj表示页面j中的字节。描述关于来自每一页的相应字节的一条带区的处理,且在所有相应字节上执行反复。如果一些页面归因于(例如)具有不同(更低级)冗余代码速率而“短于”其他页面,则较短页面以零填充(或通过同样用于编码及译码的任何已知值填充),使得经有效处理的所有页面具有相同大小。
根据各种实施例,计算R0及R1的求和可经由各种串行和/或并列计算以任何顺序执行。页面不必以任何特定顺序处理,因为Ki*Pi在Kj*Pj之前或之后相加对R1之结果没有影响。根据各种实施例,对应于冗余信息的页面的各种字节的R0及R1值的计算彼此独立且可经由各种串行和/或并列计算以任何顺序计算。此外,自R1减去Ki*Pi(及自R0减去Pi)实现自关于页面的计算效果“撤回”。因为是在GF域上进行,所以加法及减法皆为XOR(因此相减简单地等效于第二次相加),在某些实施例和/或使用场景中,无需任何特定硬件用于GF域实现(例如,逻辑XOR能力是足够的)以“撤回”页面。
在不可校正的更低级错误的情况下,在某些实施例中,更高级校正以重新计算R0及R1但省略具有不可校正的更低级错误的页面(有时称为栏)开始。校正通过自原始R0减去重新计算的R0以提供ΔR0,且自原始R1减去重新计算的R1以提供ΔR1而进行。
如果不存在不可校正的更低级错误,则重新计算的R0及R1皆为零。如果存在不可校正的更低级错误,则重新计算的R0及R1(在进行减法之后)反映“遗失的”数据(其在第二次未被相加,但存在于原始值中)。
如果存在一个不可校正的更低级错误,则重新计算的R0用以校正错误(且不需要重新计算的R1)。
如果存在两个不可校正的更低级错误,则重新计算的R0及R1用以校正错误。如果R0及R1值的页面两者为具有不可校正的更低级错误的页面,则无需数据存储页面的校正。如果R1值的页面为具有不可校正的更低级错误的页面中的一个,则校正系经由R0(重新计算的R0值为具有不可校正的更低级错误的数据存储页面的值)进行。
如果在数据存储页面中存在两个不可校正的更低级错误,或如果R0页面为具有不可校正的更低级错误的页面中的一个,则校正以计算如上述的ΔR0及ΔR1开始。如果R0页面为具有不可校正的更低级错误的页面中的一个,则可选省略ΔR0页面的计算。如果页面i及页面j为具有不可校正的更低级错误的页面,则重新计算的ΔR0=Pi+Pj,且重新计算之ΔR1=Ki*Pi+Kj*Pj。方程式求解产生以下结果:
Pi=(ΔR1-Kj*ΔR0)/(Ki-Kj)
Pj=ΔR0-Pi
如果R0为具有不可校正的更低级错误的页面中的一个,则(因为R0不包括于R1中)ΔR1=Ki*Pi,或Pi=ΔR1/Ki;通过在上述公式中设定Kj=0(以忽略ΔR0)而获得相同结果。
在替代实施例中,替代伽罗瓦域而使用由整数模p界定的有限域(其中p为质数)。计算与上文描述的这些计算相同,其中加法为整数加法模p,且乘法为整数乘法模p。例如,如果页面为字节的页面,则使用整数模257的有限域。所有用户数据字节均在范围0至255中且以每次一个字节来存储。然而,R1结果具有在0至256的范围内的值,从而需要一个以上字节用于表示。存在编码自0至256的值的许多方式以最小化存储空间且使得能够在具有减少的开销的情况下存储R1页面。例如,值0及256分别存储为九位序列000000000及000000001,且所有其他值以八位存储。假定R1值随机分布,存储开销为<0.1%。如针对图9所描述的,选择R1页面以具有最大用户数据量,从而使得能够在某些使用场景下隐藏存储开销。
图10示出了(例如)如由在比如图7的上下文中的RASIE-2模式2-2所使用及如图6中进一步说明的更高级冗余信息结果及数据源对应物的实施例的所选细节。图10明确地示出了闪存芯片610.0、610.63、610.64及610.65,且通过省略号(……)内隐地示出了闪存芯片610.1……610.62。示出了闪存芯片的区块、页面及页面内的字节的所选细节。更高级冗余信息的第一部分示为R01010(存储于闪存芯片610.64中),且使用奇偶编码来计算。更高级冗余信息的第二部分示为R11011(存储于闪存芯片610.65中),且使用加权和编码来计算。用于数据信息的存储经说明为数据1019(存储于闪存芯片610.0……610.63中)。
虚线箭头1001概念性地指示基于数据1019的所有第一页面(跨越所有闪存芯片)的相应第一字节的两字节冗余计算结果(R01010及R11011中的每一个的一个字节)。如图所示,两字节结果为第一R0及R1页面中的每一个上的第一字节。虚线箭头1002概念性地指示基于数据1019的所有第一页面的相应最后字节的两字节冗余计算结果(R01010及R11011中的每一个的一个字节)。如图所示,两字节结果为第一R0及R1页面中的每一个上的最后字节。虚线箭头1003概念性地指示基于数据1019的第一区块(跨越所有闪存芯片)的相应最后页面的两页面冗余计算结果(R01010及R11011中的每一个的一个页面)。
要注意的是,如本文中别处所描述的,在某些实施例中,更高级冗余信息存储于用于数据的不同部分的不同芯片中。因此,在某些实施例中,跨越各种芯片(而非两个“专用”芯片,如图10中所示)而存储R0及R1。
图11示出了根据各种实施例的在各种操作条件下的(例如)如由在诸如图7的上下文中的RASIE-2模式2-2所使用及如图6及图10中进一步说明的更高级冗余信息计算的实施例的所选细节。更具体地,图11示出了根据(例如)由图10的虚线箭头1001概念性地所示的两字节冗余计算结果的用于R0的字节的奇偶编码计算及用于R1的字节的加权和编码计算。操作条件包括以下各项中的一个或多个:在有限域(比如,伽罗瓦域)上执行算法,索引(对应于图11中的虚设求和变量“i”值)为闪存芯片数的1补码(或任何其他唯一及非零编号),及索引对应于有限域中的非零元素。针对R0及R1的所有字节而基于相应数据字节重复如图11中所示的计算。要注意的是,非零索引使得R1值能够包括来自Pi的每一元素的贡献值。
因此,计算R0的字节中的任一个彼此或在R1的字节中的任一个之间不存在相依性。因此,预期各种实施例,其中完全(整体地)并列地、部分并列地或完全串行地计算R0及R1值。例如,并列地计算页面的所有R0和/或R1字节。再如,并列地计算页面的所有R0字节,其后接着为(或其之前为)并列地计算页面的所有R1字节。
此外,不存在关于计算R0的字节中的任一个相对于彼此或相对于计算R1的字节中的任一个的排序要求。因此,预期各种实施例,其中相对于彼此完全按顺序、相对于彼此分离地按顺序(例如,R0计算相对于彼此按顺序但相对于R1不按顺序,且R1计算相对于彼此按顺序但相对于R0不按顺序)或无特定排序(例如,完全无顺序、不按顺序或随机排序)来计算R0及R1值。例如,以特定顺序(例如,自最低字节至最高字节)来计算页面的所有R0字节,其后接着为以该特定顺序计算页面的所有R1字节。对于另一实例,以特定顺序计算页面的所有R0字节,且独立地以该特定顺序计算页面的所有R1字节。对于又一示例,以相对于彼此无特定顺序(例如,当数据操作数变得可用时)来计算页面的所有R0字节以及页面的所有R1字节。
对于又一示例,以由对一个或多个NVM(每一个具有(例如)一个或多个闪存芯片)执行的一个或多个读取操作的完成顺序确定的顺序来计算一个或多个页面的所有R0及R1字节,该等读取操作用于读取由图11中所示的求和及加权和计算(Pi)参考的数据字节。在某些实施例和/或使用场景中,以由读取操作的完成确定的顺序执行计算使得能够减少或消除在NVM与能够执行计算的元件之间的缓冲。在某些实施例和/或使用场景中,以由读取操作的完成确定的顺序执行计算使得能够减少用以执行计算的存储器带宽(比如,NVM的存储器带宽)。
对于又一示例,以由响应于对一个或多个NVM(每一个具有(例如)一个或多个闪存芯片)执行的读取操作而返回的数据和/或可得到的数据的顺序确定的顺序来计算一个或多个页面的所有R0及R1字节,返回的数据和/或可得到的数据对应于由图11中所示的求和及加权和计算(Pi)参考的数据字节。在某些实施例和/或使用场景中,以由返回的数据和/或可得到的数据确定的顺序执行计算减少或消除在NVM与能够执行计算的元件之间的缓冲。在某些实施例和/或使用场景中,以由返回的数据和/或可得到的数据确定的顺序执行计算减少用以执行计算的存储器带宽(比如,NVM的存储器带宽)。在某些实施例中,以特定顺序(例如,自Pi的最低字节至最高字节)执行读取操作,而在其他实施例中,不以特定顺序执行读取操作。
图12示出了(例如)在比如与图11相关联且更低级故障在页面j上发生的上下文中自一个(更低级)故障(单一操作期间)恢复的实施例的所选细节。要注意的是,如果更低级故障在R0或R1页面上,则如由图11所描述而重新确定R0(或R1)。图12示出了针对页面j的恢复值的一个字节的计算(要注意的是,求和省略发生故障的页面j)。重复如图12中所示的计算以基于R0的相应字节及来自除页面j外的所有数据页面的相应字节来确定页面j的所有字节的恢复值。
因此,计算页面j的恢复值的字节中的任一个彼此之间不存在相依性。因此,预期各种实施例,其中以类似于针对R0及R1值的前述计算的方式而在高度并列至高度串行的范围内计算Pj恢复值。此外,不存在关于计算页面j的恢复值中的任一个相对于彼此的顺序要求。因此,预期各种实施例,其中以相对于彼此变化的顺序、以类似于针对R0及R1值的前述计算的方式来计算Pj恢复值。
一些示例性实施例以至少部分地由对一个或多个NVM(每一个具有(例如)一个或多个闪存芯片)执行的一个或多个读取操作的完成顺序确定的顺序来执行关于确定恢复值的计算,该等读取操作用于读取NVM以获得如由图12所示的R0和/或Pi值。在某些实施例和/或使用场景中,以读取操作的完成顺序执行计算使得能够减少或消除在NVM与能够执行计算的元件之间的缓冲。在某些实施例和/或使用场景中,以读取操作的完成顺序执行计算使得能够减少用以执行计算的存储器带宽(比如,NVM的存储器带宽)。
一些示例性实施例以至少部分地由自一个或多个NVM(每一个具有(例如)一个或多个闪存芯片)返回的数据和/或可得到的数据的顺序确定的顺序来执行关于确定恢复值的计算,返回的数据和/或可得到的数据响应于对NVM执行以获得如由图12所示的R0和/或Pi值的读取操作。在某些实施例和/或使用场景中,以自读取操作返回的数据和/或可得到的数据的顺序执行计算减少或消除在NVM与经启用于执行计算的元件之间的缓冲。在某些实施例和/或使用场景中,以自读取操作返回的数据和/或可得到的数据的顺序执行计算减少用于执行计算的存储器带宽。在某些实施例中,以特定顺序(例如,自Pi的最低字节至最高字节)执行读取操作,而在其他实施例中,不以特定顺序执行读取操作。
图13A至图13D示出了(例如)在比如与图11相关联且更低级故障已在页面m及n上发生的上下文中自两个(更低级)故障(单一操作期间)恢复的实施例的所选细节。要注意的是,如果更低级故障在R0或R1页面上,则R0或R1无需用于数据恢复,且不存在用以恢复数据的处理。另外,注意到,如果更低级故障中的一个为R1页面,则数据恢复如由图12所描述而进行。如果更低级故障中无一者在R0或R1页面上,则Pm及Pn值的恢复如下进行。图13A示出了作为R0'的修订的R0的一个字节的计算及作为R1'的修订的R1的一个字节的计算(要注意的是,求和省略发生故障的页面m及n)。图13B示出了将原始冗余信息(R0、R1)的一个字节与修订的冗余信息(R0',R1')及自用以形成修订的R0及R1的求和中省略的项(Pm+Pn及Km*Pm+Kn*Pn)相关的等式。图13C示出了图13B的代数重排,其中引入项德尔塔R0(ΔR0)及德尔塔R1(ΔR1)。图13D示出了对于Pn及Pm的图13C的解,且因此表示基于R1、R0的相应字节及来自除页面m及n外的所有数据页面的相应字节的页面n的恢复值的一个字节的计算及页面m的恢复值的一个字节的计算。要注意的是,唯一索引实现非零分母,因为Kn相对于Km为唯一的。
在各种实施例中,执行如由图13A至图13D所表示的计算以确定页面m的恢复值的一字节及页面n的恢复值的一字节。重复该等计算以基于R0、R1的相应字节及来自除页面m及n外的所有数据页面的相应字节确定页面m及n的所有字节的恢复值。
因此,计算页面m或n的恢复值的字节中的任一个彼此之间不存在相依性。因此,预期各种实施例,其中以类似于针对Pj恢复值的前述计算的方式而在高度并列至高度串行的范围内计算Pm和/或Pn恢复值。此外,不存在关于计算页面Pm和/或页面Pn的恢复值中的任一个相对于彼此的顺序要求。因此,预期各种实施例,其中以相对于彼此变化的顺序、以类似于针对Pj恢复值的前述计算的方式计算Pm和/或Pn恢复值。
一些示例性实施例以至少部分地由对一个或多个NVM(每一个具有(例如)一个或多个闪存芯片)执行的一个或多个读取操作的完成顺序确定的顺序来执行关于确定恢复值的计算(比如,针对R0和R1'的计算),该等读取操作用于获得示为用于图13A至图13D中的任一个中的计算的来源的值中的一个或多个。在某些实施例和/或使用场景中,以读取操作的完成顺序执行计算使得能够减少或消除在NVM与能够执行计算的元件之间的缓冲。在某些实施例和/或使用场景中,以读取操作的完成顺序执行计算使得能够减少用以执行计算的存储器带宽(比如,NVM的存储器带宽)。
一些其他例示性实施例以至少部分地由自一个或多个NVM(每一个具有(例如)一个或多个闪存芯片)返回的数据和/或可得到的数据的顺序确定的顺序执行关于确定恢复值的计算(比如,针对R0'和R1'的计算),返回的数据和/或可得到的数据系响应于对NVM执行以获得示为用于图13A至图13D中的任一个中的计算的来源的值中的一个或多个。在某些实施例和/或使用场景中,以自读取操作返回的数据及/载可得到的数据的顺序执行计算减少或消除在NVM与经启用于执行计算的元件之间的缓冲。在某些实施例和/或使用场景中,以自读取操作返回的数据和/或可得到的数据的顺序执行计算减少用于执行计算的存储器带宽(比如,NVM的存储器带宽)。在某些实施例中,以特定顺序(例如,自Pi的最低字节至最高字节)执行读取操作,而在其他实施例中,不以特定顺序执行读取操作。
图14A及图14B示出了计算关于自NVM接收的页面的更高级冗余信息的实施例的所选细节。图14A示出了经由以下步骤将多个读取命令发送至一个或多个NVM的实施例的所选细节:发出(发出读取操作1402A),检查是否已发送所有读取命令(发出所有?1403A),且如果未发送所有读取命令,则循环返回以发送该等命令中的另一个。要注意的是,预期其他实施例,其中同时而非一次一个地发出多个命令。
图14B示出了处理响应于如图14A中所示发送的读取命令而自NVM接收的页面的实施例的所选细节。进行检查以确定页面是否可用(页面就绪?1402B)。如果不可用,则处理循环返回以再次执行检查。如果页面可用,则进行关于页面的更高级冗余信息处理(执行基于页面的计算1403B)。接着进行检查以确定是否已处理所有页面(页面完成?1404B)。如果已处理所有页面,则处理完成(结束1499B),否则流程循环返回以确定另一页面是否可用。
图14B中所示的处理独立于图14A中所示的处理,而非响应于如图14A中说明发送的命令而接收页面。在各种场景下,页面的到达顺序根据NVM类型、状态、操作环境及其他因素而变化,且在一些情境中不同于对应于到达页面的读取命令的发送顺序或到达顺序。在某些实施例和/或使用场景中,因为图14A的处理独立于图14B(而非页面数据到达取决于正发送的相应读取命令),所以在接收/处理读取数据(图14B)的同时发送读取命令(图14A)。在某些实施例和/或使用场景中,(例如)如果在将发送针对特定页面的读取命令之前该特定页面存在于特定缓冲器中,则自一个或多个缓冲器提供一些页面而非经由指向NVM的读取命令而请求。在某些实施例和/或使用场景中,由NVM而非响应于发送的命令所提供的页面与回应于发送的命令而提供的页面(例如,响应于针对其他活动发送的读取命令而提供的页面)混合。
在各种实施例中,如由图14A及图14B所示,至少部分地执行如由图11所示的R0及R1的计算。对于第一实例,如图14A所示,将计算相应R0及R1页面所必要的所有数据页面的读取命令发送至一个或多个NVM。如图11所示,在接收响应于读取命令而接收的数据页面时处理该等页面以计算R0及R1页面。对于第二实例,如图14A所示,将针对一对(例如,对应于双平面NVM的两个平面)R0及R1页面的读取命令发送至一个或多个NVM。如图11所示,在接收响应于读取命令而接收的数据页面时处理该等页面以计算R0及R1页面。
在各种实施例中,如由图14A及图14B所示,至少部分地执行如由图12所示的Pj的计算。对于第一实例,如图14A所示,将计算特定Pj页面所必要的所有数据页面的读取命令发送至一个或多个NVM。如图12所示,在接收响应于读取命令而接收的数据页面时处理该等页面以计算Pj页面。对于第二实例,如图14A所示,将针对一对Pj页面(例如,对应于双平面NVM的两个平面)的读取命令发送至一个或多个NVM,且如图14B所示,在接收所接收的数据页面时处理该等页面以计算该对Pj页面。
在各种实施例中,如图14A及图14B所示,至少部分地执行如由图13A至图13D中的任一个说明的关于确定恢复值的计算(比如,针对R0'和R1'的计算)。对于第一示例,如图14A所示,将计算特定R0'页面及特定R1'页面所必要的所有数据页面的读取命令发送至一个或多个NVM。如图13A所示,在接收响应于读取命令而接收的数据页面时处理该等页面以计算R0'和R1'页面。对于第二示例,如图14A所示,将针对一对R0'和R1'页面(例如,对应于双平面NVM的两个平面)的读取命令发送至一个或多个NVM,且如图14B所示,在接收所接收的数据页面时处理该等页面以计算该对R0'和R1'页面。
图15A至图15C示出了(例如)在比如与图11相关联的上下文中自关于提供至NVM的写入的更高级冗余信息的计算的撤回的实施例的所选细节。图15A示出了经由以下步骤将多个写入命令发送至一个或多个NVM的实施例的所选细节:发出(发出写入操作1502A),检查是否已发送所有命令(发出所有?1503A),且如果未发送所有命令,则循环返回以发送该等命令中的另一个。要注意的是,预期其他实施例,其中同时而非一次一个地发出多个命令。
图15B示出了响应于如图15A中所示发送的写入命令处理自NVM接收的写入完成及状态信息的实施例的所选细节。进行检查以确定是否已完成写入而无错误(写入OK?1502B)。如果已完成写入而无错误,则进行检查以确定是否已完成所有写入(写入完成?1504B)。如果已完成所有写入,则处理完成(结束1599B)。如果写入已完成但具有(更低级)错误(比如,编程故障),则流程进行以“撤销”关于更高级冗余信息计算的写入效果(撤回从冗余的写入1503B)。更具体地,自任何相应更高级冗余信息计算解除计算具有更低级错误的写入的数据(假定在写入将成功之假设下用于写入的数据已包括于相应更高级冗余计算中)。例如,在特定页面j上检测到更低级写入故障。作为响应,计算修订的R0及R1页面,使得将页面j数据(Pj)设定为零。图15C示出了用于修订的R0(nR0)的单一字节的计算及修订的R1(nR1)的单一字节的计算的实施例的所选细节,其中j为发生更低级写入故障的页面。要注意的是,在(比如)与图11相关联之图12的上下文中,如果有限域为伽罗瓦域,则图15C中所示之减法运算(“-”)等效于逻辑XOR运算。在各种实施例中,执行其他处理(未说明)以存储具有更低级写入故障的页面(Pj)以及修订的更高级冗余页面(nR0及nR1)。
图15B中所示的处理独立于图15A中所示的处理,而非响应于如图15A中所示发送的命令而接收写入完成及状态信息。在各种情况中,写入完成及状态信息的到达顺序根据NVM类型、状态、操作环境及其他因素而变化,且在一些情况中不同于对应于到达写入完成及状态信息的写入命令的发送顺序或到达顺序。在某些实施例和/或使用场景中,因为图15A的处理独立于图15B(而非写入完成及状态信息到达取决于正发送的相应写入命令),所以在接收/处理写入完成及状态信息(图15B)的同时发送写入命令(图15A)。
在某些实施例和/或使用场景中,在正将写入命令发送至NVM与回应于该等写入命令而接收来自NVM的写入完成及状态信息之间发生显著延迟。在某些实施例和/或使用场景中,由NVM而非响应于如图15A中所示发送的命令所提供的写入完成及状态信息与响应于如图15A中所示发送的命令而提供的写入完成及状态信息(例如,响应于针对其他活动发送的写入命令而提供的写入完成及状态信息)混合。
在各种实施例和/或使用场景中,未使用否则将用于数据信息的一个或多个页面。在各种情况中,未使用的页面为区块、R-区块、条带区或任何种类页面的序列的第一、中间或最后页面。在一些情况下,先验地不使用未使用的页面(“省去”),且在一些情况下,在某一使用后不使用未使用的页面(“自服务移除”)。被省去的未使用页面的示例为不正确地制造的页面。自服务移除的未使用页面的示例为未能正确写入的页面(例如,如针对图15B描述为更低级写入错误)。(例如)关于图10至12、图13A至图13D、图14A至图14B及图15A至图15B的处理(比如)通过自计算完全地省略未使用的页面或通过如同未使用的页面上的所有数据为零一样执行计算而跳过任何未使用的页面(不论是被省去或自服务移除)。
经由冗余阵列的编程故障恢复
在某些情况下,无法成功将数据写入/编程到NVM,例如,一个或多个写入/编程操作故障,如NVM所指示的。在各种实施例中,将发送至用于写入/编程的NVM的数据保留在缓冲器中至少直至NVM指示所有数据已经成功写入/编程到NVM为止(或者可替代地指示与数据相关联的一个或多个写入/编程操作的故障)。将数据保留在缓冲器中实现将与故障相关联的数据写入/编程到NVM中的替代位置(比如故障芯片中的另一个位置、与数据相关联的流中的后者、或NVM的任意其他合适区域)。
某些NVM排除进一步写入/编程未能适当完成一个或多个写入/编程操作的区块。某些NVM供应商建议将写入/编程到区块(在写入/编程故障之前)的数据尽快移出故障区块。在某些NVM中,不可从NVM获得事先提供给用于写入/编程的NVM的数据(例如,与故障相关联的数据)。将输数据保留在缓冲器中实现自故障的恢复,甚至在不可从NVM获得数据的上下文中也即可。
在某些实施例中,缓冲器被实现为NVM控制器(比如SSD控制器,例如如图1A所示和本文其他地方所述)的一部分。例如,缓冲器被实现为图1A的缓冲器131的所有或任意操作。在将缓冲器实现为NVM控制器的一部分的某些实施例中(比如在与NVM控制器的其他部分相同的芯片上),根据(片上)缓冲器的限制尺寸来限制将带宽写入/编程到NVM。例如,写入带宽受限于通过完成写入/编程NVM所需的平均时间划分的缓冲器的尺寸。在某些场景下,写入带宽由于完成写入/编程NVM所需的时间的变化而受到限制。
在其他实施例中,缓冲器独立于NVM控制器来实现,比如经由一个或多个独立存储器组件,比如一个或多个DRAM芯片。例如,缓冲器被实现为图1B的(可选)卡存储器112C的所有或任意部分。在将缓冲器实现为独立存储器组件(比如经由DRAM)的某些实施例中,根据至DRAM的写入带宽来限制NVM的写入/编程带宽。例如,至NVM的写入带宽限于不大于至DRAM的写入带宽。
在各种实施例中,目的是以NVM能够提供的最大带宽写入/编程NVM,而与(片上)缓冲器的尺寸或(片外)存储器组件的带宽无关。各种更高级冗余信息(例如,RASIE-1、RASIE-2或任意跨页面ECC方案)的计算和临时存储实现以NVM能够提供的最大带宽写入/编程NVM。在写入/编程到NVM的过程中不存储所有数据的副本,相反存储更高级冗余信息。有利地,所存储的更高级冗余信息的尺寸与如何实现多个故障恢复有关,而不与有多少数据被更高级冗余信息涵盖有关。
从概念上讲,在写入NVM芯片(例如,R-区块)的流中的同时,更高级冗余信息(例如,RASIE的某种形式)针对该流保持在内部。更高级冗余信息保持在NVM的方便粒度(例如,一个或多个页面或一个或多个区块)上,选择为足以利用保持在内部的更高级冗余信息涵盖所有进行中的写入/编程操作。可选地,将更高级冗余信息的所有或任意部分写入/编程到NVM(比如通过且针对图7或图8的任意一个或多个,例如图8的807所述)。内部保持的更高级冗余信息用于自写入/编程故障(如果有的话)中恢复。在包括被实现为一个或多个芯片的非易失性存储器控制器的各种实施例中,更高级冗余信息的内部保持至少部分经由存储器控制器的一个或多个芯片(例如,图1A的SSD控制器100的缓冲器131的所有或任意部分)中包括的一个或多个(片上)存储器元件中的存储进行。在某些实施例中,即使不存在写入/编程操作故障,也要将内部保持更高级冗余信息写入/编程到NVM,由此保护存储在NVM中的数据免于(例如,相对长期)故障,比如由于读取扰动或滞留现象而累计错误。
在某些使用场景下,编程故障比较少见,因此使用RASIE-1。在某些使用场景下,编程故障更为频繁和/或需要更高的可靠性,因此使用RASIE-2。作为利用RASIE-2的示例,缓存2NVM芯片的RASIE-2数据,而不缓存32NVM芯片的数据,缓存空间节省16x。一将写入/编程数据发送至NVM芯片且在正在进行的RASIE-2计算中考虑了所发送的数据,就释放与所发送的数据相关联的缓冲器。在某些使用场景和/或实施例中,在完成与在释放之前保持在缓冲器中的数据相关联的写入/编程之前释放缓冲器。因此,缓冲期被缩短且作为NVM写入/编程带宽的瓶颈消除。
利用RASIE-2,只要一个“条带区”中(例如,一个RASIE累积组中)存在两个以下同步写入/编程故障,RASIE-2技术通过读回条带区中先前写入/编程的页面来实现写入/编程故障的完全校正。实现完全校正,无论是否完成整个R-区块行,因为只使用用于RASIE累积至故障点的数据(与累积至故障点的RASIE信息一起)。
设想其他实施例。例如,在不将累积RASIE信息写入NVM的某些实施例中,使用“滚动”RASIE,其中在开始将页面写入/编程到NVM时,页面被累积(“添加”)到RASIE信息中,在成功完成页面的写入/编程时,在RASIE信息的范围外累积(从中“减去”)。因此,只有单个RASIE累积缓冲器才用于所有进行中的写入/编程操作。
在某些实施例中,RASIE信息保持在内部,就像基于R-区块行写入NVM一样(无论是否如此)。因此,RASIE累积存储缓冲器用于每个进行中的行。如果将RASIE信息写入NVM,则RASIE累积存储缓冲器具有两个目的:(1)进行自写入/编程故障的恢复的内部RASIE累积;以及(2)用于写入/编程到NVM的RASIE信息。根据各种实施例,内部保持RASIE信息足以校正以下各项中的一项或多项:(a)写入/编程操作的指定数量的故障;(b)条带区中指定数量的不可校正的ECC错误;以及(c)(a)和/或(b)的和或最大值。
在各种实施例中,进行自写入/编程故障的恢复的内部保持RASIE信息不同于用于写入/编程到NVM的RASIE信息(例如,以在读取NVM期间自更低级冗余的故障中恢复)。例如,内部保持RASIE信息是RASIE-2信息(实现自多达两个同步写入/编程故障中的恢复),并且用于写入/编程到NVM的RASIE信息是RASIE-1信息(实现自单个更低级冗余读取故障中的恢复)。在进一步实施例中,用于写入/编程到NVM的RASIE信息是内部保持RASIE信息子集。
在写入/编程故障的情况下,故障位置是已知的,因此实现擦除校正方案的使用,并在某些实施例中使用。在其他实施例中,使用无擦除校正方案(例如,通用ECC方案)。
图16示出了经由冗余阵列的NVM故障恢复的实施例的所选细节。该图示出了由NVM控制器(控制器1610)进行的操作和由NVM(NVM1620)进行的操作。控制器的示例为SSD控制器(比如由图1A的SSD控制器100所示)。NVM的示例为多个闪存芯片(比如由图1A的NVM199所示)。
在下文中,当在写入NVM的上下文中使用时,术语“程序”(及其各变更)与“写入/编程”(及其各变更)以及“写入”(及其各变更)同义。
将数据编程到NVM开始于控制器设置有和/或产生要编程到NVM中的数据(接收数据1611)。然后,将数据存储在缓冲器中(数据=>缓冲器1612)。随后(或在某些实施例中,可替代地同时地),控制器发送请求以将数据编程到NVM((开始)利用数据编程NVM1613)。作为响应,NVM发起将数据编程到NVM中(启动:利用数据编程1621)。同时,控制器继续根据数据累积更高级冗余信息(更新冗余信息1614)。在累积更高级冗余信息消耗数据之后,控制器释放缓冲器(释放缓冲器1615),比如重新用于存储随后接收的要编程到NVM的数据。释放缓冲器与请求对NVM进行编程的进展程度无关。
同时,并且与释放缓冲器无关,NVM继续请求对数据进行编程,包括确定是否存在任意编程故障(检测故障1622)。如果不存在故障,则NVM最终完成请求编程(完成:利用数据编程1623),并且处理相对于数据的编程而结束。控制器和NVM然后随意将额外数据编程到NVM,例如通过重复1611等等(未示出)。
如果存在检测到的任意故障,则作为响应,控制器可选地和/或可选择地延迟请求对进一步数据进行编程(延迟1616)。控制器然后发送请求以将累积的更高级冗余信息编程到NVM((开始)利用冗余信息编程NVM1617)。作为响应,NVM发起将累积的更高级冗余信息编程到NVM(启动:利用冗余信息编程1624)。
控制器然后继续请求恢复(概念性的)对先前被延迟的进一步数据进行编程((恢复)利用数据编程NVM1618)。恢复是概念性的,原因在于严格来说,先前请求的编程在各种实施例中被暂停、中断和/或停止,因此不同的是,恢复分别是连续、返回中断操作、和/或全新的编程操作。该请求是一个位置,该位置不同于先前发生故障的位置(例如,NVM的不同区块)。设置有恢复请求和/或与恢复请求相关联的数据包括至少部分基于所累积的冗余信息和在故障之前成功编程到NVM中的数据的任意部分来确定的数据。在各种实施例中,确定由于编程故障而另外遗失的数据是经由比如通过且针对图13A-13D的任意一个或多个所述的技术进行的。响应于恢复请求,NVM发起将剩余数据编程到NVM中(恢复:利用数据编程1625)。
同时,控制器继续根据与所请求的恢复编程相关联的数据来累积新的更高级冗余信息(更新新的冗余信息1619)。最后,NVM完成所请求的恢复编程(完成:利用数据编程1626)。虽然未具体示出,在各种实施例中,NVM进行操作以检测更高级冗余信息的编程故障以及数据的恢复编程。
在各种实施例和/或使用场景下,在完成累积更高级冗余信息时和/或响应于此完成(更新冗余信息1614)立即释放缓冲器(释放缓冲器1615)。在各种实施例和/或使用场景下,释放缓冲器(释放缓冲器1615),与对存储在缓冲器中的数据进行编程的进展程度无关(启动:利用数据编程1621),(检测故障1622),以及(完成:利用数据编程1623)。在各种实施例和/或使用场景下,保留所累积的更高级冗余信息(未具体示出)直至完成对所累积的更高级冗余信息涵盖的数据进行编程(完成:利用数据编程1623)。在进一步实施例中,保留所累积的更高级冗余信息(未具体示出)直至完成对所累积的更高级冗余信息进行编程。
在某些实施例中,相对于除编程故障之外的故障(例如,电源故障)的脆弱性来缩短和/或最小化窗口(比如基于数据和/或时间的窗口)。例如,响应于编程故障的检测且一检测出编程故障,就尽可能快地将所有累积的更高级冗余信息编程到NVM。所累积的编程到NVM的更高级冗余信息然后在电源故障之后可用,从而实现对由于编程故障而另外遗失的任意数据进行计算。在其他实施例中,响应于编程故障,所累积的更高级冗余信息,结合任意适当编程的数据部分,一起用于确定由于编程故障而另外遗失的数据。在某些实施例中,对编程故障的响应被延迟直至完成与当前更高级冗余信息配量相关联的数据的当前编程(例如,RASIE条带区)。在完成当前编程之后,或者将所累积的更高级冗余信息编程到NVM或者确定由于编程故障而另外遗失的数据。
在某些实施例中,将数据编程到NVM是经由一个或多个NVM接口,比如闪存接口(例如,图1A的设备接口190和设备接口逻辑191的所有或任意部分)进行的。在某些实施例中,将更高级冗余信息(例如,如用于自NVM编程故障的恢复一样)存储在具有一个或多个专用接口的片上存储器元件(例如,图1A的SSD控制器100的缓冲器131的所有或任意部分)中。
在各种实施例中,图10至图12、图13A至图13D、图14A至图14B、图15A至图15B及图16的一个或多个元素的处理或关于该一个或多个元素的处理完全或部分地由图1A的一个或多个元件(或其部分)执行。例如,CPU171的软件执行能力的部分用于比如通过指导如由图12及图13A至图13D所示的数据恢复运算来管理更高级冗余处理。对于又一示例,数据处理121包括专用于和/或特定用于根据比如由图11所示的和/或与更新更高级冗余信息(图16的更新冗余信息1614和/或更新新冗余信息1619)相关联的计算来计算更高级冗余信息的硬件元件。对于再一示例,图1A的被分配的缓冲器138的所有或任意部分对应于其中存储有数据(数据=>缓冲器1612)且被释放的缓冲器(释放缓冲器1615)。
示例性实现技术
在某些实施例中,由实现NVM(例如,闪存,比如NAND闪存)的编程故障恢复的系统,计算主机闪存控制器,和/或SSD控制器(比如图1A的SSD控制器100)执行的操作的所有或任意部分的各种组合,和处理器、微处理器、片上系统、专用集成电路、硬件加速器或提供上述操作中的所有或部分的其他电路的部分由与计算机系统进行的处理兼容的规范来指定。该规范符合各种描述,例如,硬件描述语言、电路描述、网表描述、掩码描述或布局描述。示例描述包括:Verilog、VHDL、SPICE、SPICE变体比如PSpice、IBIS、LEF、DEF、GDS-II、OASIS或其描述。在各种实施例中,处理包括解释、编译、模拟和合成的任何组合以生成、验证或指定适于包括在一个或多个集成电路上的逻辑和/或电路。根据各种实施例,每个集成电路可根据多种技术来设计和/或制造。该技术包括可编程技术(例如,场或掩码可编程门阵列集成电路)、半定制技术(比如整体或部分基于单元的集成电路)和全定制技术(比如基本上专用的集成电路)及其任意组合,或与集成电路的设计和/或制造兼容的其他任何技术。
在某些实施例中,通过执行和/或解释一个或多个编程指令,通过解释和/或编译一个或多个源和/或脚本语言语句,或通过执行通过编译、转译和/或解释以编程和/或脚本语言语句表达的信息生成的二进制指令来进行所有或部分如计算机可读介质所述的操作的各种组合,该计算机可读介质存储有一组指令。语句与任何标准的编程或脚本语言(例如,C、C++、Fortran、Pascal、Ada、Java、VBscript和Shell)兼容。一个或多个编程指令、语言语句或二进制指令可选存储在一个或多个计算机可读存储介质元件上。在各种实施例中,一些、所有或各个部分的编程指令实现为一种或多种功能、例程、子例程、线内例程、过程、宏或其部分。
结论
在该说明书中作出的某些选择仅仅是便于制备文本和附图,除非有相反的指示,否则这些选择本身不应解释为表达所述实施例的结构或操作相关的额外信息。选择的示例包括:用于数字编号的设计的特定组织或分配以及用于识别和引用实施例的特征和元件的元件标识符(例如,插图编号或数字标志符)的特定组织或分配。
词语“包括(includes)”或“包括(including)”具体意在被理解为对描述开放式范围的逻辑组的抽象,且并不指传达物理包含物,除非后面明确跟随词语“之内”。
尽管为了描述和理解清晰的目的,已在一些细节中描述了上述实施例,但本发明不限于所提供的细节。有许多本发明的实施例。所公开的实施例是示例性的,而不是限制性的。
应理解,构造、布置和使用的许多变化可能与说明书一致,且处于已公布的专利的权利要求的范围内。例如,互连和功能单位的位宽度、时钟速率和所使用的技术的类型根据每个组件块中的各种实施例而可变。给于互连和逻辑的名称仅是示例性的,且不应被解释为限制所描述的概念。流程图和流程图过程、动作和功能元件的顺序和布置根据各种实施例可变化。同样地,除非特别说明与此相反,否则指定的值范围、使用的最高值和最低值或其他特定的规范(比如闪存技术类型;以及寄存器和缓存器中的条目或级别的数量)仅是所描述那些实施例,期望跟踪实现技术的改进和变化,且不应被解释为限制。
可采用本技术已知的功能等效的技术,而不是用于实现各种组件、子系统、操作、功能、例程、子例程、在线例程、程序、宏或其部分的那些所述技术。还应理解,实施例中的许多功能方面可在硬件(例如,一般专用电路)或软件(例如,经由编程的控制器或处理器的某些方式)中选择性实现,以作为取决于设计约束和更快处理的技术趋势(促使先前在硬件中的功能迁移至软件)和更高的集成密度(促使先前在软件中的功能迁移至硬件)的实施例的功能。各种实施例中的具体变化包括但不限于:划分的差异;不同的形状因数和配置;使用不同的操作系统和其他系统软件;使用不同接口标准、网络协议或通信链路;以及当根据特定应用的独特工程和商业限制实现在本文中描述的概念时预期的其他变化。
已通过超越需要用于所描述的实施例的很多方面的最小实现的细节和环境背景描述了实施例。本领域普通技术人员将认识到,一些实施例省略了公开的组件或特征,且无需改变剩余元件之间的基本合作。因此,应理解大部分公开的细节不需要实现所描述的实施例的各个方面。在剩余元件可与现有技术相区别的范围内,被省略的组件和特征不限于本文中所描述的概念。
设计的所有这些变化是在由所描述的实施例传达的教义上的非实质性变化。还应理解,本文中描述的实施例对其他的计算和网络应用具有广泛的实用性,且并不仅限于所描述的实施例的特定应用或行业。因此,本发明将被解释为包括涵盖在所公布的专利的权利要求的范围内的所有可能的修改和变更。
Claims (10)
1.一种用于非易失性存储器编程故障恢复的方法,包括:
在非易失性存储器控制器处接收用于编程多个非易失性存储器的N个部分的数据,该数据包括用于编程所述N个部分中的特定部分的特定数据;
将所述特定数据存储在与所述非易失性存储器控制器相关联的被分配的缓冲器中;
开始将所述特定数据编程到所述多个非易失性存储器中的特定非易失性存储器;
更新足以从所述N个部分中的M个部分的故障中恢复的冗余信息;
释放所分配的缓冲器;
其中,所述存储、开始编程所述特定数据、更新冗余信息以及所述释放中的至少一个响应于所述接收;
其中,所述释放在所述特定非易失性存储器完成所述编程之前;
其中,所述冗余信息是第一冗余信息,已针对所述N个部分的子集接收数据,但尚未针对所述N个部分的所述子集开始编程,并且所述方法进一步包括:
延迟对所述N个部分的所述子集中的至少一部分的编程;
开始将所述第一冗余信息编程到所述多个非易失性存储器中的多个非易失性存储器;
开始对所述N个部分的所述子集中的至少一部分进行编程;
更新不同于所述第一冗余信息的并且足以从所述N个部分中的M个部分的故障中恢复的第二冗余信息;并且
其中,所述延迟编程、所述开始对所述第一冗余信息进行编程、所述开始对所述N个部分的所述子集中的至少一部分进行编程以及更新第二冗余信息中的至少一个响应于检测到对所述特定数据的所述编程的故障。
2.根据权利要求1所述的方法,其中,当检测到故障时,所述特定数据被单独存储为被编码在所述第一冗余信息中。
3.根据权利要求1所述的方法,其中,所述数据进一步包括用于编程所述N个部分中的第一部分的初始数据,并且进一步包括:
至少部分基于所述初始数据来初始化所述冗余信息。
4.根据权利要求1所述的方法,其中,所述非易失性存储器控制器包括所述被分配的缓冲器。
5.根据权利要求1所述的方法,其中,所述被分配的缓冲器包括在与包括所述非易失性存储器控制器的第二芯片分离的第一芯片中。
6.根据权利要求1所述的方法,其中,所述非易失性存储器控制器可操作为能够至少部分地经由与存储器接口标准兼容的计算主机接口与计算主机通信的固态磁盘控制器。
7.一种用于非易失性存储器编程故障恢复的系统,包括:
被分配的缓冲器;
用于在非易失性存储器控制器处接收用于编程多个非易失性存储器的N个部分的数据的装置,所述数据包括用于编程所述N个部分中的特定部分的特定数据;
用于将所述特定数据存储在与所述非易失性存储器控制器相关联的所述被分配的缓冲器中的装置;
用于开始将所述特定数据编程到所述多个非易失性存储器中的特定非易失性存储器的装置;
用于更新足以从所述N个部分中的M个部分的故障中恢复的冗余信息的装置;
用于释放所述被分配的缓冲器的装置;
其中,用于存储的装置、用于开始编程所述特定数据的装置、用于更新冗余信息的装置以及用于释放的装置中的至少一个响应于用于接收的装置;
其中,所述用于释放的装置可操作用于在所述特定非易失性存储器完成所述编程之前释放所述被分配的缓冲器;
其中,所述冗余信息是第一冗余信息,已针对所述N个部分的子集接收数据,但尚未针对所述N个部分的所述子集开始编程,并且所述系统进一步包括:
用于延迟对所述N个部分的所述子集中的至少一部分进行编程的装置;
用于开始将所述第一冗余信息编程到所述多个非易失性存储器中的多个非易失性存储器的装置;
用于开始对所述N个部分的所述子集中的至少一部分进行编程的装置;
用于更新不同于所述第一冗余信息的并且足以从所述N个部分的M个所述子集中的故障中恢复的第二冗余信息的装置;并且
其中,所述用于延迟编程的装置、所述用于开始对所述第一冗余信息进行编程的装置、所述用于开始对所述N个部分的所述子集中的至少一部分进行编程的装置以及用于更新第二冗余信息的装置响应于用于检测所述特定数据的所述编程的故障的装置。
8.根据权利要求7所述的系统,其中,当检测到所述故障时,所述特定数据被单独存储为被编码在所述第一冗余信息中。
9.根据权利要求7所述的系统,其中,所述数据进一步包括用于编程所述N个部分中的第一个部分的初始数据,并且进一步包括:
用于至少部分基于所述初始数据来初始化所述冗余信息的装置。
10.根据权利要求7所述的系统,其中,所述非易失性存储器控制器包括所述被分配的缓冲器。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/728,573 | 2012-12-27 | ||
US13/728,573 US9569320B2 (en) | 2010-12-01 | 2012-12-27 | Non-volatile memory program failure recovery via redundant arrays |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103902403A CN103902403A (zh) | 2014-07-02 |
CN103902403B true CN103902403B (zh) | 2017-05-03 |
Family
ID=49726607
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310739979.XA Expired - Fee Related CN103902403B (zh) | 2012-12-27 | 2013-12-26 | 经由冗余阵列的非易失性存储器编程故障恢复 |
Country Status (6)
Country | Link |
---|---|
US (3) | US9569320B2 (zh) |
EP (1) | EP2750018A3 (zh) |
JP (1) | JP6285709B2 (zh) |
KR (1) | KR101912596B1 (zh) |
CN (1) | CN103902403B (zh) |
TW (1) | TWI529734B (zh) |
Families Citing this family (114)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9569320B2 (en) * | 2010-12-01 | 2017-02-14 | Seagate Technology Llc | Non-volatile memory program failure recovery via redundant arrays |
JP5980798B2 (ja) | 2010-12-01 | 2016-08-31 | シーゲイト テクノロジー エルエルシーSeagate Technology LLC | 独立したシリコン素子の動的な上位レベルの冗長モード管理 |
EP2666091A2 (en) | 2011-01-18 | 2013-11-27 | LSI Corporation | Higher-level redundancy information computation |
US10445229B1 (en) | 2013-01-28 | 2019-10-15 | Radian Memory Systems, Inc. | Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies |
US9652376B2 (en) | 2013-01-28 | 2017-05-16 | Radian Memory Systems, Inc. | Cooperative flash memory control |
US10642505B1 (en) | 2013-01-28 | 2020-05-05 | Radian Memory Systems, Inc. | Techniques for data migration based on per-data metrics and memory degradation |
US9444889B1 (en) | 2013-02-08 | 2016-09-13 | Quantcast Corporation | Managing distributed system performance using accelerated data retrieval operations |
US9442670B2 (en) * | 2013-09-03 | 2016-09-13 | Sandisk Technologies Llc | Method and system for rebalancing data stored in flash memory devices |
US9519577B2 (en) * | 2013-09-03 | 2016-12-13 | Sandisk Technologies Llc | Method and system for migrating data between flash memory devices |
US10067829B2 (en) * | 2013-12-13 | 2018-09-04 | Intel Corporation | Managing redundancy information in a non-volatile memory |
US9262268B2 (en) * | 2013-12-20 | 2016-02-16 | Seagate Technology Llc | Method to distribute user data and error correction data over different page types by leveraging error rate variations |
US8874835B1 (en) | 2014-01-16 | 2014-10-28 | Pure Storage, Inc. | Data placement based on data properties in a tiered storage device system |
US9645749B2 (en) | 2014-05-30 | 2017-05-09 | Sandisk Technologies Llc | Method and system for recharacterizing the storage density of a memory device or a portion thereof |
US8891303B1 (en) | 2014-05-30 | 2014-11-18 | Sandisk Technologies Inc. | Method and system for dynamic word line based configuration of a three-dimensional memory device |
US9348518B2 (en) | 2014-07-02 | 2016-05-24 | International Business Machines Corporation | Buffered automated flash controller connected directly to processor memory bus |
US9542284B2 (en) * | 2014-08-06 | 2017-01-10 | International Business Machines Corporation | Buffered automated flash controller connected directly to processor memory bus |
US10983859B2 (en) | 2014-08-07 | 2021-04-20 | Pure Storage, Inc. | Adjustable error correction based on memory health in a storage unit |
US9558069B2 (en) | 2014-08-07 | 2017-01-31 | Pure Storage, Inc. | Failure mapping in a storage array |
US9766972B2 (en) | 2014-08-07 | 2017-09-19 | Pure Storage, Inc. | Masking defective bits in a storage array |
US9082512B1 (en) * | 2014-08-07 | 2015-07-14 | Pure Storage, Inc. | Die-level monitoring in a storage cluster |
US9691452B2 (en) | 2014-08-15 | 2017-06-27 | Micron Technology, Inc. | Apparatuses and methods for concurrently accessing different memory planes of a memory |
US9563370B2 (en) | 2014-09-02 | 2017-02-07 | Sandisk Technologies Llc | Triggering a process to reduce declared capacity of a storage device |
US9582193B2 (en) | 2014-09-02 | 2017-02-28 | Sandisk Technologies Llc | Triggering a process to reduce declared capacity of a storage device in a multi-storage-device storage system |
US9582220B2 (en) | 2014-09-02 | 2017-02-28 | Sandisk Technologies Llc | Notification of trigger condition to reduce declared capacity of a storage device in a multi-storage-device storage system |
US9524112B2 (en) | 2014-09-02 | 2016-12-20 | Sandisk Technologies Llc | Process and apparatus to reduce declared capacity of a storage device by trimming |
US9519427B2 (en) | 2014-09-02 | 2016-12-13 | Sandisk Technologies Llc | Triggering, at a host system, a process to reduce declared capacity of a storage device |
US9582203B2 (en) | 2014-09-02 | 2017-02-28 | Sandisk Technologies Llc | Process and apparatus to reduce declared capacity of a storage device by reducing a range of logical addresses |
US9552166B2 (en) | 2014-09-02 | 2017-01-24 | Sandisk Technologies Llc. | Process and apparatus to reduce declared capacity of a storage device by deleting data |
US9582212B2 (en) | 2014-09-02 | 2017-02-28 | Sandisk Technologies Llc | Notification of trigger condition to reduce declared capacity of a storage device |
US9582202B2 (en) | 2014-09-02 | 2017-02-28 | Sandisk Technologies Llc | Process and apparatus to reduce declared capacity of a storage device by moving data |
US9563362B2 (en) | 2014-09-02 | 2017-02-07 | Sandisk Technologies Llc | Host system and process to reduce declared capacity of a storage device by trimming |
US9524105B2 (en) | 2014-09-02 | 2016-12-20 | Sandisk Technologies Llc | Process and apparatus to reduce declared capacity of a storage device by altering an encoding format |
US9652153B2 (en) | 2014-09-02 | 2017-05-16 | Sandisk Technologies Llc | Process and apparatus to reduce declared capacity of a storage device by reducing a count of logical addresses |
US9665311B2 (en) | 2014-09-02 | 2017-05-30 | Sandisk Technologies Llc | Process and apparatus to reduce declared capacity of a storage device by making specific logical addresses unavailable |
US9542118B1 (en) | 2014-09-09 | 2017-01-10 | Radian Memory Systems, Inc. | Expositive flash memory control |
US10552085B1 (en) | 2014-09-09 | 2020-02-04 | Radian Memory Systems, Inc. | Techniques for directed data migration |
US9471448B2 (en) * | 2014-12-10 | 2016-10-18 | Intel Corporation | Performing an atomic write operation across multiple storage devices |
US9678665B2 (en) * | 2015-03-06 | 2017-06-13 | Western Digital Technologies, Inc. | Methods and systems for memory page allocation |
KR20160127524A (ko) * | 2015-04-27 | 2016-11-04 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
CN106155812A (zh) | 2015-04-28 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 一种对虚拟主机的资源管理的方法、装置、系统及电子设备 |
US9606737B2 (en) | 2015-05-20 | 2017-03-28 | Sandisk Technologies Llc | Variable bit encoding per NAND flash cell to extend life of flash-based storage devices and preserve over-provisioning |
US9639282B2 (en) | 2015-05-20 | 2017-05-02 | Sandisk Technologies Llc | Variable bit encoding per NAND flash cell to improve device endurance and extend life of flash-based storage devices |
CN106648439B (zh) * | 2015-07-14 | 2019-11-29 | 上海宝存信息科技有限公司 | 于控制逻辑错误时重新配置存储控制器的方法及装置 |
US10089196B2 (en) | 2015-07-14 | 2018-10-02 | Shannon Systems Ltd. | Methods for reconfiguring a storage controller when control logic fails and apparatuses using the same |
US10108509B2 (en) * | 2015-07-16 | 2018-10-23 | Texas Instruments Incorporated | Dynamic enabling of redundant memory cells during operating life |
US10552058B1 (en) | 2015-07-17 | 2020-02-04 | Radian Memory Systems, Inc. | Techniques for delegating data processing to a cooperative memory controller |
KR102444694B1 (ko) * | 2015-08-26 | 2022-09-20 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그의 동작방법 |
KR102385138B1 (ko) * | 2015-10-08 | 2022-04-12 | 삼성전자주식회사 | 정정 불가능한 ecc 오류를 갖는 데이터를 복구하도록 구성되는 raid 컨트롤러 장치 및 스토리지 장치 |
US10061644B2 (en) * | 2015-11-02 | 2018-08-28 | Qualcomm Incorporated | Systems and methods for implementing error correcting code in a memory |
US9910594B2 (en) | 2015-11-05 | 2018-03-06 | Micron Technology, Inc. | Apparatuses and methods for concurrently accessing multiple memory planes of a memory during a memory access operation |
US9449720B1 (en) * | 2015-11-17 | 2016-09-20 | Macronix International Co., Ltd. | Dynamic redundancy repair |
US10719236B2 (en) * | 2015-11-20 | 2020-07-21 | Arm Ltd. | Memory controller with non-volatile buffer for persistent memory operations |
US9946483B2 (en) | 2015-12-03 | 2018-04-17 | Sandisk Technologies Llc | Efficiently managing unmapped blocks to extend life of solid state drive with low over-provisioning |
US9946473B2 (en) | 2015-12-03 | 2018-04-17 | Sandisk Technologies Llc | Efficiently managing unmapped blocks to extend life of solid state drive |
CN105512007B (zh) * | 2015-12-17 | 2018-12-04 | 英业达科技有限公司 | 一种pcie硬盘状态灯的控制方法及系统 |
US9529663B1 (en) | 2015-12-20 | 2016-12-27 | Apple Inc. | Detection and localization of failures in 3D NAND flash memory |
KR102407437B1 (ko) * | 2015-12-30 | 2022-06-10 | 삼성전자주식회사 | 불휘발성 메모리 모듈을 포함하는 메모리 시스템 및 전자 장치 |
US10318378B2 (en) | 2016-02-25 | 2019-06-11 | Micron Technology, Inc | Redundant array of independent NAND for a three-dimensional memory array |
US9983820B2 (en) * | 2016-03-29 | 2018-05-29 | Nxp B.V. | Method for performing data updates |
KR102615593B1 (ko) * | 2016-05-04 | 2023-12-21 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
US9672905B1 (en) | 2016-07-22 | 2017-06-06 | Pure Storage, Inc. | Optimize data protection layouts based on distributed flash wear leveling |
US10282111B2 (en) * | 2016-07-29 | 2019-05-07 | Western Digital Technologies, Inc. | Adaptive wear levelling |
US10452477B2 (en) * | 2016-08-26 | 2019-10-22 | Netapp, Inc. | Multiple node repair using high rate minimum storage regeneration erasure code |
KR20180027803A (ko) * | 2016-09-07 | 2018-03-15 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러, 반도체 메모리 시스템 및 그것의 동작 방법 |
KR102611638B1 (ko) | 2016-09-27 | 2023-12-08 | 삼성전자주식회사 | 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 데이터 저장 시스템 |
KR102487553B1 (ko) * | 2016-12-07 | 2023-01-11 | 삼성전자주식회사 | 리페어 가능한 휘발성 메모리를 포함하는 스토리지 장치 및 상기 스토리지 장치의 동작 방법 |
US9747158B1 (en) | 2017-01-13 | 2017-08-29 | Pure Storage, Inc. | Intelligent refresh of 3D NAND |
US10248515B2 (en) | 2017-01-19 | 2019-04-02 | Apple Inc. | Identifying a failing group of memory cells in a multi-plane storage operation |
US10168948B2 (en) * | 2017-02-20 | 2019-01-01 | International Business Machines Corporation | Replicating data in a data storage system |
US10885991B2 (en) * | 2017-04-04 | 2021-01-05 | Sandisk Technologies Llc | Data rewrite during refresh window |
US10372522B2 (en) * | 2017-04-28 | 2019-08-06 | Advanced Micro Devices, Inc. | Memory protection in highly parallel computing hardware |
US10915405B2 (en) * | 2017-05-26 | 2021-02-09 | Netapp, Inc. | Methods for handling storage element failures to reduce storage device failure rates and devices thereof |
US10248330B2 (en) * | 2017-05-30 | 2019-04-02 | Seagate Technology Llc | Data storage device with buffer tenure management |
US11023164B2 (en) | 2017-06-19 | 2021-06-01 | Micron Technology, Inc. | Managed NAND data tagging |
US10585749B2 (en) | 2017-08-10 | 2020-03-10 | Samsung Electronics Co., Ltd. | System and method for distributed erasure coding |
US10901868B1 (en) * | 2017-10-02 | 2021-01-26 | Marvell Asia Pte, Ltd. | Systems and methods for error recovery in NAND memory operations |
TWI636366B (zh) * | 2017-11-22 | 2018-09-21 | 緯穎科技服務股份有限公司 | 資料冗餘的處理方法及其相關電腦系統 |
TWI661307B (zh) * | 2017-12-06 | 2019-06-01 | 慧榮科技股份有限公司 | 資料儲存裝置、主機裝置、以及資料寫入方法 |
US10949303B2 (en) | 2017-12-11 | 2021-03-16 | Fungible, Inc. | Durable block storage in data center access nodes with inline erasure coding |
US10642602B2 (en) * | 2017-12-12 | 2020-05-05 | Nxp Usa, Inc. | NVM architecture with OTA support |
CN110058791B (zh) * | 2018-01-18 | 2022-05-10 | 伊姆西Ip控股有限责任公司 | 存储系统以及相应的方法和计算机可读介质 |
TWI651650B (zh) * | 2018-02-05 | 2019-02-21 | 大陸商深圳大心電子科技有限公司 | 記憶體管理方法及使用所述方法的儲存控制器 |
US11099831B2 (en) * | 2018-02-08 | 2021-08-24 | Micron Technology, Inc. | Firmware update in a storage backed memory system |
JP6960877B2 (ja) | 2018-03-22 | 2021-11-05 | キオクシア株式会社 | メモリシステム |
CN110413218B (zh) * | 2018-04-28 | 2023-06-23 | 伊姆西Ip控股有限责任公司 | 用于存储系统中的故障恢复的方法、装置和计算机程序产品 |
US11048597B2 (en) * | 2018-05-14 | 2021-06-29 | Micron Technology, Inc. | Memory die remapping |
CN108762975B (zh) * | 2018-05-24 | 2021-06-08 | 深圳市德明利技术股份有限公司 | 一种ecc数据存储方法、系统及存储介质 |
US10762967B2 (en) | 2018-06-28 | 2020-09-01 | Apple Inc. | Recovering from failure in programming a nonvolatile memory |
US10755787B2 (en) | 2018-06-28 | 2020-08-25 | Apple Inc. | Efficient post programming verification in a nonvolatile memory |
US10761931B2 (en) | 2018-10-24 | 2020-09-01 | Fungible, Inc. | Inline reliability coding for storage on a network |
US10990478B2 (en) | 2019-02-01 | 2021-04-27 | Fungible, Inc. | Flexible reliability coding for storage on a network |
US10922178B2 (en) * | 2018-10-31 | 2021-02-16 | Hewlett Packard Enterprise Development Lp | Masterless raid for byte-addressable non-volatile memory |
US10872039B2 (en) | 2018-12-03 | 2020-12-22 | Micron Technology, Inc. | Managing redundancy contexts in storage devices using eviction and restoration |
CN109799959B (zh) * | 2019-01-22 | 2020-07-10 | 华中科技大学 | 一种提高开放通道固态盘写并行性的方法 |
US10936455B2 (en) | 2019-02-11 | 2021-03-02 | Apple Inc. | Recovery of data failing due to impairment whose severity depends on bit-significance value |
WO2020186524A1 (zh) * | 2019-03-21 | 2020-09-24 | 华为技术有限公司 | 一种存储校验方法及装置 |
US11269552B2 (en) * | 2019-06-14 | 2022-03-08 | Micron Technology, Inc. | Multi-pass data programming in a memory sub-system having multiple dies and planes |
TWI779209B (zh) * | 2019-06-28 | 2022-10-01 | 華邦電子股份有限公司 | 具有動態資料修復機制的記憶體存放裝置及其動態資料修復的方法 |
KR102650809B1 (ko) | 2019-08-02 | 2024-03-26 | 삼성전자주식회사 | 스토리지 장치 및 그것의 동작 방법 |
US10915394B1 (en) | 2019-09-22 | 2021-02-09 | Apple Inc. | Schemes for protecting data in NVM device using small storage footprint |
CN111186139B (zh) * | 2019-12-25 | 2022-03-15 | 西北工业大学 | 一种3d打印模型的多层次并行切片方法 |
US11221949B2 (en) * | 2020-02-10 | 2022-01-11 | Micron Technology, Inc. | Multi state purgatory for media management for a memory subsystem |
US11630729B2 (en) | 2020-04-27 | 2023-04-18 | Fungible, Inc. | Reliability coding with reduced network traffic |
CN111639008B (zh) * | 2020-05-29 | 2023-08-25 | 杭州海康威视系统技术有限公司 | 基于双端口ssd的文件系统状态监测方法、装置及电子设备 |
KR20220120967A (ko) | 2021-02-24 | 2022-08-31 | 삼성전자주식회사 | 스토리지 컨트롤러, 그 동작방법 |
US11650881B2 (en) * | 2021-03-19 | 2023-05-16 | Micron Technology, Inc. | Managing storage reduction and reuse in the presence of storage device failures |
US20230015697A1 (en) * | 2021-07-13 | 2023-01-19 | Citrix Systems, Inc. | Application programming interface (api) authorization |
KR20230022060A (ko) | 2021-08-06 | 2023-02-14 | 삼성전자주식회사 | 설정 데이터를 저장하는 메모리 장치 및 그 동작방법 |
CN113687976B (zh) * | 2021-08-27 | 2022-04-12 | 中国人民解放军军事科学院军事医学研究院 | 面向dna信息存储的编码和解码方法与装置 |
US11550657B1 (en) | 2021-09-01 | 2023-01-10 | Apple Inc. | Efficient programming schemes in a nonvolatile memory |
CN114281265B (zh) * | 2021-12-28 | 2023-08-15 | 深圳大普微电子科技有限公司 | 一种存储介质失效的处理方法、装置和固态硬盘 |
US11934270B2 (en) * | 2022-06-02 | 2024-03-19 | Micron Technology, Inc. | Write command execution for data protection and recovery schemes |
CN114911631B (zh) * | 2022-07-18 | 2022-10-21 | 深圳市泛联信息科技有限公司 | 基于持久内存技术的全局资源管理方法及系统 |
CN117608500B (zh) * | 2024-01-23 | 2024-03-29 | 四川省华存智谷科技有限责任公司 | 一种存储系统在数据冗余不足时抢救有效数据的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6308007B1 (en) * | 1997-04-07 | 2001-10-23 | Sony Corporation | Recording and reproducing device |
CN1435758A (zh) * | 2002-01-29 | 2003-08-13 | 松下电器产业株式会社 | 存储装置、数据处理方法以及数据处理程序 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE19544571A1 (de) * | 1995-11-30 | 1997-06-05 | Sel Alcatel Ag | Verfahren und Vorrichtung zum Programmieren eines Flash-EEProms |
US6910155B2 (en) * | 2001-06-25 | 2005-06-21 | Hewlett-Packard Development Company, L.P. | System and method for chip testing |
JP2005293427A (ja) * | 2004-04-02 | 2005-10-20 | Matsushita Electric Ind Co Ltd | データ転送処理装置及びデータ転送処理方法 |
US8291295B2 (en) | 2005-09-26 | 2012-10-16 | Sandisk Il Ltd. | NAND flash memory controller exporting a NAND interface |
KR101431296B1 (ko) * | 2007-01-11 | 2014-08-20 | 레드 밴드 리미티드 | 저장 장치에 저장된 컨텐츠의 인-플레이스 업데이트 방법 및 시스템 |
US7836226B2 (en) | 2007-12-06 | 2010-11-16 | Fusion-Io, Inc. | Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment |
KR101246833B1 (ko) | 2007-12-20 | 2013-03-28 | 삼성전자주식회사 | 저항체를 이용한 비휘발성 메모리 장치, 이를 포함하는메모리 시스템, 및 이의 구동 방법 |
US9152496B2 (en) * | 2007-12-21 | 2015-10-06 | Cypress Semiconductor Corporation | High performance flash channel interface |
US20110099556A1 (en) * | 2009-10-22 | 2011-04-28 | International Business Machines Corporation | Updating system for a microcontroller and associated methods |
US9569320B2 (en) | 2010-12-01 | 2017-02-14 | Seagate Technology Llc | Non-volatile memory program failure recovery via redundant arrays |
EP2666091A2 (en) * | 2011-01-18 | 2013-11-27 | LSI Corporation | Higher-level redundancy information computation |
US8924627B2 (en) | 2011-03-28 | 2014-12-30 | Western Digital Technologies, Inc. | Flash memory device comprising host interface for processing a multi-command descriptor block in order to exploit concurrency |
KR20130040486A (ko) * | 2011-10-14 | 2013-04-24 | 삼성전자주식회사 | 저장 장치 및 그것을 이용하는 사용자 장치 |
JP2013131095A (ja) * | 2011-12-22 | 2013-07-04 | Toshiba Corp | メモリコントローラ、記憶装置およびメモリ制御方法 |
-
2012
- 2012-12-27 US US13/728,573 patent/US9569320B2/en active Active
-
2013
- 2013-12-09 EP EP20130196184 patent/EP2750018A3/en not_active Withdrawn
- 2013-12-11 TW TW102145669A patent/TWI529734B/zh active
- 2013-12-24 KR KR1020130162679A patent/KR101912596B1/ko active IP Right Grant
- 2013-12-24 JP JP2013264768A patent/JP6285709B2/ja not_active Expired - Fee Related
- 2013-12-26 CN CN201310739979.XA patent/CN103902403B/zh not_active Expired - Fee Related
-
2017
- 2017-01-10 US US15/402,773 patent/US10467093B2/en active Active
-
2019
- 2019-09-24 US US16/580,361 patent/US11144389B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6308007B1 (en) * | 1997-04-07 | 2001-10-23 | Sony Corporation | Recording and reproducing device |
CN1435758A (zh) * | 2002-01-29 | 2003-08-13 | 松下电器产业株式会社 | 存储装置、数据处理方法以及数据处理程序 |
Also Published As
Publication number | Publication date |
---|---|
TWI529734B (zh) | 2016-04-11 |
TW201432702A (zh) | 2014-08-16 |
EP2750018A3 (en) | 2015-05-20 |
KR20140092750A (ko) | 2014-07-24 |
US10467093B2 (en) | 2019-11-05 |
US11144389B2 (en) | 2021-10-12 |
US20200019463A1 (en) | 2020-01-16 |
JP2014130587A (ja) | 2014-07-10 |
EP2750018A2 (en) | 2014-07-02 |
US20170147435A1 (en) | 2017-05-25 |
CN103902403A (zh) | 2014-07-02 |
KR101912596B1 (ko) | 2018-10-29 |
JP6285709B2 (ja) | 2018-02-28 |
US9569320B2 (en) | 2017-02-14 |
US20140189421A1 (en) | 2014-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103902403B (zh) | 经由冗余阵列的非易失性存储器编程故障恢复 | |
US11379301B2 (en) | Fractional redundant array of silicon independent elements | |
CN103415844B (zh) | 用于高级冗余信息计算的系统和方法 | |
CN103348330B (zh) | 采用独立硅元件的动态较高级冗余模式管理 | |
KR102101650B1 (ko) | 비-휘발성 메모리에 대한 혼합된 입도 상위-레벨 리던던시 | |
CN103942114B (zh) | Nvm地址、跨度及长度映射/转换的存储地址空间 | |
CN103942010A (zh) | 用于写入非易失性存储器的管理及区域选择 | |
TWI531902B (zh) | 矽獨立元件之部分冗餘陣列 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20160301 Address after: California, USA Applicant after: Seagate Technology LLC Address before: California, USA Applicant before: LSI Corp. |
|
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170503 Termination date: 20181226 |