CN106068499B - 非阻塞命令 - Google Patents
非阻塞命令 Download PDFInfo
- Publication number
- CN106068499B CN106068499B CN201580003427.XA CN201580003427A CN106068499B CN 106068499 B CN106068499 B CN 106068499B CN 201580003427 A CN201580003427 A CN 201580003427A CN 106068499 B CN106068499 B CN 106068499B
- Authority
- CN
- China
- Prior art keywords
- data
- module
- host
- placeholder
- reading order
- 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.)
- Active
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
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
-
- 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/1012—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 using codes or arrangements adapted for a specific type of error
- G06F11/1016—Error in accessing a memory location, i.e. addressing error
-
- 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/1048—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 using arrangements adapted for a specific error detection or correction feature
-
- 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/1072—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 multilevel memories
-
- 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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- 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/068—Hybrid storage device
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Debugging And Monitoring (AREA)
Abstract
提供处理贮存器命令的方法、系统和设备。基于来自主机的在贮存设备处接收的读取命令,数据可以从贮存设备处的贮存存储器中读取。可以在从贮存设备处的贮存存储器读取的数据中检测到错误。响应于错误,占位符数据可以从贮存设备传输至主机,而不传输读取命令失败或成功的指示。校正数据可以从贮存设备传输至主机,在该处主机替换占位符数据为校正数据。
Description
技术领域
本申请涉及贮存系统,更具体地,本申请涉及贮存器命令。
背景技术
主机可以传输贮存器命令至贮存设备以从贮存设备读取数据、向贮存设备写入数据和/或在贮存设备上执行管理操作。主机可以是计算机、便携式计算机、台式计算机、刀片式服务器、移动设备、平板电脑、手机、智能设备、个人数字辅助设备或任何其他处理设备。
贮存设备可以执行贮存器命令。例如,当执行读取命令时,贮存设备可以从贮存设备向主机传输数据。在一些示例中,贮存器命令可以符合诸如非易失性贮存器标准(NVMe)的贮存协议。NVMe标准描述了基于PCI标准固态硬盘的寄存器接口、命令集和特征集。PCIE是俄勒冈州波特兰市PCI-SIG公司的注册商标。
发明内容
提供一种处理贮存器命令的方法。来自主机的读取命令可以在贮存设备处接收。读取命令可以包括对由标识符识别的数据的请求。基于标识符可以从贮存设备处的贮存存储器中读取数据。在从贮存设备处的贮存存储器中读取的数据中可能检测到错误。占位符(placeholder)数据可以从贮存设备传输至主机,而不传输读取命令失败或成功的指示,并且占位符数据可以被指示给主机作为由标识符标识的数据。可生成不包含从贮存存储器读取的数据中检测到的错误的校正数据。校正数据可以从贮存设备传输至主机,在该处,校正数据替换主机中的占位符数据为由标识符标识的数据。
提供一种处理贮存器命令的系统。该系统可以包括贮存存储器、读取模块、错误检测模块、通信模块和错误校正模块。贮存存储器可以包含由标识符标识的数据,在该处来自主机的读取命令请求该数据。读取模块可以从贮存存储器中读取数据。错误检测模块可以在从贮存存储器读取的数据中检测到错误。通信模块可以传输占位符数据至主机,而不传输读取命令成功或失败的指示,在该处,占位符数据被表示给主机作为由标识符标识的数据。错误校正模块可以校正从贮存存储器读取的数据中的错误。通信模块可以将校正数据传输至主机,在该处校正数据被表示给主机作为由标识符标识的数据。读取命令可以在校正数据传输至主机之后完成(complete)。
提供一种处理贮存器命令的贮存设备。贮存设备可以包括贮存存储器、错误检测模块、通信模块和错误校正模块。贮存存储器可以包含数据。从主机接收到的读取命令可以请求该数据。错误检测模块可以检测从贮存存储器读取的数据中的错误。通信模块可以传输占位符数据至主机,而不传输读取命令失败或成功的指示,在该处占位符数据被表示为由读取命令请求的数据。错误校正模块可以生成校正数据。通信模块可以传输校正数据至主机,在该处,校正数据被表示为由读取命令请求的数据。校正数据和占位符数据可以被传输以完成读取命令。
附图说明
可通过参考附图和说明更好地理解实施例。图中的组件不必要按比例绘制。此外,图中相似引用的数字指示不同视图中相应的部分。
图1说明了处理贮存器命令的系统;
图2说明了处理贮存器命令的系统的示例性逻辑的流程图;以及
图3说明了处理贮存器命令的系统的第二个示例性逻辑的流程图。
具体实施方式
在一个示例中,提供一种以可以减少贮存器命令执行的阻塞的方式处理贮存器命令的贮存设备。贮存设备可以包括诸如闪贮存存器的贮存存储器。此外,贮存设备可以包括错误检测模块、通信模块和错误校正模块。
贮存存储器可以包含数据。从主机接收的读取命令可以请求该数据。例如,读取命令可以包含对包含在贮存存储器中的数据的逻辑数据块的请求。贮存设备中的错误检测模块可以在从贮存存储器读取数据后检测数据中的错误。例如,错误检测模块可以包括可以标识从贮存存储器读取的数据中的错误的纠错码(ECC)逻辑。
响应于检测到错误,贮存设备的通信模块可以传输占位符数据至主机,而不传输读取命令失败或成功的指示,在该处占位符数据被表示为由读取命令请求的数据。例如,读取命令可以包括对由偏移值标识的一页数据的请求,并且占位符数据可以被表示为由偏移值标识的该页数据。占位符数据可以是任何数据。例如,占位符数据可以是从贮存存储器读取的包含错误的数据。贮存设备的错误校正模块可以生成校正数据。通信模块可以传输校正数据至主机,在该处校正数据被表示为由读取命令请求的数据。主机可以在主机缓存区中替换占位符数据为校正数据。贮存设备可以在校正数据传输至主机时传输读取命令成功完成的指示。
图1说明了处理诸如读取命令102的贮存器命令的系统100。系统可以包括主机104和贮存设备106。系统100可以包括更多的、更少的或不同的组件。例如,系统100可以包括仅贮存设备106或贮存设备106的一部分。
主机104可以是执行逻辑操作的任何设备,例如,主机104可以是计算机、便携式计算机、台式计算机、刀片式服务器、移动设备、平板电脑、手机、智能设备、个人数字辅助设备或任何其他计算设备。
贮存设备106可以是响应于贮存器命令贮存和/或检索数据的设备。贮存设备106可以是块贮存设备。贮存设备106的示例可以包括硬盘、闪存驱动器、固态硬盘、通用串行总线(USB)驱动器、软盘和光盘驱动器。在一些示例中,贮存设备106可以是提供对贮存的块级访问的任何类型设备,例如扫描仪或照相机。贮存设备106可以在主机104的内部或外部。贮存设备106可以包括物理和数据层模块108、贮存协议模块110、后端模块112和贮存存储器114。
诸如读取命令102的贮存器命令,可以是指示或描述贮存设备106将要执行的和/或已执行的动作的任何数据结构。贮存器命令可以是由NVMe标准或任何其他贮存协议描述的命令集(command set)中的命令。贮存器命令的示例可以包括输入/输出(I/O)命令和管理命令。第一个I/O命令示例可以包括写入命令,执行时将一个或多个逻辑数据块写入到贮存器。第二个I/O命令示例可以包括读取命令102,执行时从贮存器读取一个或多个逻辑数据块,或者读取和/或写入贮存器的任何其他命令。管理命令可以在贮存器上执行管理动作的任何命令。管理命令的示例可以包括中止命令、命名空间配置命令和/或与数据贮存器的管理或控制相关的任何其他命令。
贮存协议可以是提供对块设备的块级访问的任何协议。块设备是以块的形式贮存和检索数据的设备。例如,块可以是逻辑数据块。贮存协议的示例可以包括NVMe、串行高级技术附件(也称为串行ATA或SATA)、SCSI(小型计算机系统接口)、光纤通道、(INFINIBAND是俄勒冈州比佛顿市系统I/O公司的注册商标)、PATA(IDE)或传输数据至贮存设备的任何协议。
读取命令102当执行时可以以逻辑数据块或不同于逻辑数据块的单位读取数据。执行时,读取命令102可以读一个单位的数据、多个单位的数据、和/或多个单位的数据集。读取命令102可以显式地标识要被读取的数据。此外,读取命令102可以隐式地标识要被读取的数据,并且贮存设备106可以响应于读取命令102确定要读取的数据。
物理和数据层模块108可以是如开放系统互连(OSI)模型(ISO/IEC 7498-1)中描述的物理网络层和数据层的实现。物理网络层可以是媒体访问控制(MAC)层、10BASE-T层、802.11a/b/g/n PHY层或任何其他物理网络层。数据层可以是PCIe层、光纤通道层、802.11a/b/g/n MAC/LLC层或任何其他数据层。
贮存协议模块110可以贮存协议整体或部分的实现。贮存协议模块110的示例可以包括NVMe控制器、SATA控制器、SCSI控制器、光纤通道控制器和控制器。在一些示例中,贮存协议可以符合于OSI模型中的传输层和/或网络层。
贮存存储器114可以是其中贮存主机数据的任何计算机可读存储器。贮存存储器114的示例可以包括闪存、二维闪存、三维闪存、随机存取存储器(RAM)、只读贮存器(ROM)、可擦可编程只读贮存器(EPROM)或任何其他类型的计算机可读存储器。贮存存储器114可以是易失性的或非易失性的存储器。
后端模块112可以是访问贮存存储器114的模块。后端模块112可以包括一个或多个诸如读取命令102的贮存器命令的全部或部分实现。后端模块112可以包括一个公共逻辑模块116、并行逻辑模块118和错误校正模块120。
并行逻辑模块118可以是至少部分地由多个线程122并行执行的逻辑。相比之下,公共逻辑模块116可以是至少部分地单线程的逻辑。单线程的逻辑可以在一次只能由一个线程执行。然而,多线程可以执行单线程的逻辑,只是不能同时执行。公共逻辑模块116可以包括或使用一个或多个锁定机制来限制对一个线程的在一次的访问。锁定机制的示例可以包括互斥量、信号量和/或限制一次对一个线程的访问的任何其他机制。
线程122可以是线程和/或进程。在一些示例中,每个线程122可以是一个相应的进程。在其他示例中,每个线程122可以是一个进程的一部分。在其他示例中,线程122可以包括进程和线程的组合。
公共逻辑模块116可以包括读取模块124、错误检测模块126、决策模块128和通信模块130。公共逻辑模块116可以包括较少的、额外的或不同的组件。例如,并行逻辑模块118可以包括读取模块124和/或错误检测模块126,而代替公共逻辑模块116。
读取模块124可以是从贮存存储器114读取数据132的任何组件。读取模块124可以包括从贮存存储器114检索数据132的任何组件。例如,读取模块124可以包括诸如直接存储器访问(DMA)控制器、存储器控制器或磁盘控制器的硬件控制器。
错误检测模块126可以是检测数据132中错误的任何组件。例如,错误检测模块126可以包括部分的错误校正码(ECC),其中错误校正码检测从贮存存储器114读取的数据132中的错误。ECC可以基于由全部或部分数据132生成的代码来检测错误。此外或额外地,错误检测模块126可以包含检查奇偶校验位的逻辑。在其他示例中,错误检测模块126可以包含检测数据132中的或从贮存存储器112对数据132的读取中的任何错误的组件。
错误校正模块120可以是校正从贮存存储器114读取的数据132中的一个或多个错误的任何组件。在一些示例中,错误校正模块120可以包含部分的错误校正码(ECC),其中错误校正码基于全部或部分数据132生成的代码校正错误。此外或额外地,错误校正模块120可以通过从贮存存储器114重新读取数据132和/或通过任何其他机制校正错误。
决策模块128可以是当错误检测模块126检测到数据132中的错误时决定是否传输占位符数据134至主机104以替代数据132的组件。如下面更详细地讨论,决策模块128可以基于一个或多个标准做出确定。
通信模块130可以是处理通过贮存协议模块110与主机104的通信的任何组件。例如,通信模块130可以是传输数据132和/或占位符数据134至主机104的组件。信息的传输可以意味着发起信息传输和/或信息的实际传输。例如,当通信模块130传输信息时,通信模块130可以只是发起数据的传输。诸如物理和数据层模块108或通信接口(未示出)的第二组件可以实际上传输信息至主机104。同样,从主机104接收信息可以意味着直接从主机104接收信息或者间接地从实际上从主机104接收信息的第二组件接收信息。
在系统100处理贮存器命令的操作期间,贮存设备106可以从主机104接收读取命令102。例如,主机104可以已响应于试图读取文件或文件的一部分、而发送读取命令102至贮存设备。
贮存协议模块110可以从由物理和数据层模块108处理的一个或多个数据包(packet)或其他单位的网络数据中提取命令102。
一个或多个线程122可以执行包含在并行逻辑模块118和公共逻辑模块116中的逻辑,以完成读取命令102。贮存设备106可以与读取命令102并行地处理一个或多个贮存器命令。在一些示例,一个或多个试图执行公共逻辑模块116中的逻辑的线程122可以变得阻塞(block),等待正在执行公共逻辑模块116中逻辑的线程。一旦该线程完成公共逻辑模块116中的逻辑的执行和/或另外释放公共逻辑模块116的逻辑上的线程锁,然后阻塞的线程122中的一个可以开始执行公共逻辑模块116中的逻辑。公共逻辑模块116的一个或多个入口点可以被认为是线程122的收敛点或阻塞点。
减少线程在公共逻辑模块116的逻辑上保留锁的时间可以减少阻塞的线程122保持锁定的时间。如下面更细节的描述,当检测到数据132中错误时,执行公共逻辑模块116的逻辑的线程可以在错误校正模块120执行前或执行完成前释放公共逻辑模块116的逻辑上的锁。
数据132中的错误可以在并行逻辑模块118和/或公共逻辑模块116中检测到。例如,当线程122中的一个在并行逻辑模块118中执行错误检测模块126时,可以检测到错误。此外或额外地,当线程122中的一个在公共逻辑模块116中执行错误检测模块126时,可以检测到错误。如果检测到错误,则线程可以执行140错误校正模块120。错误检测模块126可以生成校正数据142。然后该线程可以试图执行138公共逻辑模块116中的逻辑以传输校正数据142至主机104。在替代的示例中,执行错误检测模块126的线程可以不同于执行错误校正模块120的线程。
通过错误检测模块126检测数据132中的错误的线程可以在检测到错误时在公共逻辑模块116的逻辑上加锁。线程可以在错误校正模块120的执行之前、同时或期间释放锁,以在错误校正模块120生成校正数据142之前解锁一个或多个阻塞的线程122。
在锁释放和校正数据142生成之前,线程可以通过通讯模块130将占位符数据124传输至主机104,而不发送读取命令102失败或成功的指示。线程可以不传输读取命令102失败的指示,因为主机可以需要传输第二读取指令以便接收数据132。另一方面,线程可以不传输读取命令102成功的指示,因为主机104可以错误地把占位符数据134当成是贮存存储器114中贮存的数据132。
可以有在释放锁和/或传输校正数据之前线程不传输读取命令102失败或成功的指示的另一个原因。在一些示例中,在占位符数据124传输时,错误检测模块126可以尚未检测到错误。换句话说,除主机104外,贮存设备106可以也在占位符数据134传输之后不知道占位符数据134是否是正确的数据132。因此,贮存设备106处的错误检测以及错误校正可以异步于占位符数据134从贮存设备106至主机104的传输而被执行。占位符数据134可以是任何数据。例如,占位符数据134可以是从贮存存储器114读取的包含由错误检测模块126检测到的错误的数据132。换句话说,占位符数据134可以是未校正数据。在另一示例中,占位符数据134可以是诸如全部是0或全部是1的预定的二进制数字模式。在另一示例中,占位符数据134可以是数据缓存区中的最后传输至主机104的数据。在另一示例中,占位符数据134可以是从贮存存储器114读取的不包含任何错误的数据132。
校正数据142可以是不包含由错误检测模块126检测到的错误的数据132。校正数据142可以不一定通过包含错误的数据生成。例如,可以通过从贮存存储器114重新读取数据132生成校正数据142。
一旦主机接收校正142,主机可以重写之前接收的并贮存在主机104缓存区中的占位符数据134。主机104可以不会在读取命令102完成前指示在两次接收由标识符144标识的数据时出现的错误。读取命令102可以在占位符数据134和校正数据142传输至主机104后完成。此外或额外地,响应于在传输占位符数据134后、贮存设备106的错误检测模块128确定占位符数据134不包含错误,读取命令102可以在贮存设备106传输读取命令102成功的指示之后完成。
考虑贮存协议是NVMe的示例。NVMe包括在其中贮存器命令可以以不同于从主机104接收的命令顺序的顺序执行的特征。NVMe还包括在其中可以响应于读取命令读取的块或区块数据可以以任何顺序返回的特征。标识符144可以连同诸如占位符数据134或校正数据142的块或区块的数据传输至主机104。标识符144可以标识该块或区块数据。例如,标识符144可以是块偏移、逻辑块地址或任何其他标识符。标识符144可以特定于或独立于贮存协议。
在一个示例中,由贮存协议模块110接收的读取命令102可以包括16千字节的数据的请求,该数据可以以每页4千字节跨4页贮存在贮存存储器114中。当使用NVMe贮存协议时,贮存协议模块110可以包括NVMe控制器。例如,后端模块112可以成功地读取和解码第一页和第二页。然而,第三页的数据可以有错误,可以需要时间来通过包含在错误校正模块120中的解码器146纠正。其他贮存器命令的执行可以与试图解码第三页中的4千字节数据的解码器146并行进行。同时,为了不阻塞NVMe控制器内部的数据流动,可以在贮存设备106中的为第三页中的4千字节数据预留的缓存区(未示出)中提供4千字节的数据(占位符数据134)。NVMe控制器可以传输占位符数据134和标识符144到主机104。标识符144可以标识占位符数据134为由读取命令102请求的第三页数据。然而,NVMe控制器可以不传输读取16千字节的命令完成或失败的指示。当线程完成传输占位符数据134至主机后,线程可以释放公共逻辑模块116的逻辑上的锁。
解码器146可以应用具有多个软性位(soft bit)的软解码到贮存在贮存存储器114的第三页中的代码字(codeword)中。在成功解码为校正数据后,NVMe控制器可以传输校正数据142到主机104,替换在主机104处错误的4千字节占位符数据134。在传输第三页数据的校正数据142的之后或同时,贮存协议模块110可以传输完成信号或任何类型的读取命令102成功的指示到主机104。如果在第三页数据的校正数据142传输之后,剩余的第四页数据尚未传输至主机104,NVMe控制器可以等待传输直到剩余的第四页数据传输至主机104之后读取命令才完成的指示。或者,如果试图通过解码器146解码第三页失败,并且如果没有进一步试图成功读取数据132的第三页数据的尝试,失败信号或者任何类型的读取命令102失败的指示可以传输至主机104。
不管读取命令102最终失败或成功,错误校正模块146的执行不会阻塞贮存协议模块110内部的数据流动,并且不会阻塞与主机104的通信。因此,在解码器146试图解码第三页时,其他贮存器命令可以并行于解码器146进行。贮存设备106通过在从贮存存储器114第一次读取的数据132中检测到错误后指示读取命令102失败或成功,可以不误导主机104。此外,贮存设备106可以传输占位符数据134到主机104,而不指示占位符数据134是不正确数据。或者,贮存设备106可以传输占位符数据134到主机104,同时指示占位符数据134是不正确数据,但不传输读取命令102失败或成功的指示。占位符数据134是不正确数据的指示可以是任何占位符不是所请求的数据132的指示。然而,占位符数据134是不正确数据的指示不进一步指示读取命令102失败。
更一般地,系统100可以在不仅仅是读取命令的任何命令已部分完成的示例中类似地操作。如果贮存设备106可以乱序地执行命令,然后贮存设备106可确定是否(1)传输与未完成命令有关的部分数据至主机(而无成功或失败的指示),并继续在后台线程中执行未完成命令(不阻塞其他命令),或者(2)放弃部分完成的命令,并传输失败指示到主机104。
在一些示例中,系统100可以总是当从贮存存储器114读取的数据132中检测到错误时传输占位符数据134。另外,系统100可以在检测到错误时有条件地传输占位符数据134。例如,决策模块128可以分析由部分完成的读取命令102的占位符数据134的传输和随后的校正数据142的生成和传输导致的延时的代价相比于承受由传输失败指示到主机104和完全地重新执行读取命令102导致的延时的代价。在一个示例中,当由未完成的读取命令102的占位符数据134的传输导致的延时的代价小于由读取命令102失败指示的传输和读取命令102重新完全执行导致的代价时,决策模块128可以确定传输占位符数据134。
由占位符数据134的传输和随后的校正数据142的生成和传输导致延时的代价取决于贮存存储器114错误率。例如在老化的闪存贮存设备中,不可解码的代码字的数量和/或需要较长的解码时间的代码字的数量随着闪存贮存设备年龄的增长而增加。老化的闪存贮存设备的较长的解码时间可以归因于为生成校正数据142而读取额外的软性位和执行更长的解码迭代的需求。因此,当这种代码字相对于代码字总数的百分比低于阈值百分比时,决策模块128可以决定传输占位符数据134到主机104,并在后台线程中继续执行解码器146,而不是完全重新执行命令。或者,当不可解码的代码字和/或需要较长解码时间的代码字的百分比增加超过阈值百分比时,将传输读取命令102失败的指示而不是传输占位符数据134至主机104。
决策模块128可以基于任何类型的条件或多个条件决定是否传输占位符数据134代替于在读取命令102的执行中发生错误的指示。例如,当贮存存储器114的年龄低于阈值时,决策模块128可以确定发送占位符数据134。例如,当贮存存储器114的循环计数低于循环计数阈值时,决策模块128可以确定发送占位符数据134,但当贮存存储器114的循环计数高于循环计数阈值时不发送占位符数据134。
系统100可以实现为具有额外的、不同的或更少的组件。例如,系统100可以只包含公共逻辑模块116、并行逻辑模块118和错误校正模块120。
每个组件可以包括额外的、不同的或更少的组件。例如,公共逻辑模块116可以只包括读取模块124和通信模块130。在另一示例中,贮存设备106可以包括处理器148和存储器150。
处理器148可以与存储器150通信。在一个示例中,处理器148也可以与诸如贮存协议模块110的额外的组件通信。处理器148的示例可以是微控制器、通用处理器、中央处理单元、专用集成电路(ASIC)、数字信号处理器、现场可编程门阵列(FPGA)、数字电路、模拟电路或其组合。
处理器148可以是可操作为执行包含在一个或多个模块中的逻辑的一个或多个设备,模块诸如并行逻辑模块118、公共逻辑模块116和/或错误校正模块120。逻辑可以包括计算机可执行的指令或体现在存储器150或其他存储器中的计算机代码,由处理器148执行时,使处理器执行相应的模块和/或多个模块的功能。计算机代码可以包括可由处理器148执行的指令。
系统100可以以许多不同的方式实现。诸如物理和数据层模块108、贮存协议模块110、后端模块112、公共逻辑模块116、并行逻辑模块118、错误校正模块120、读取模块124、错误检测模块126、决策模块128和/或通信模块130的每个模块可以是硬件或硬件与软件的组合。例如,每个模块可以包括专用集成电路(ASIC)、现场可编程门阵列(FPGA)、电路、数字逻辑电路、模拟电路、离散电路组合、门或任何其他类型的硬件或其组合。此外或额外地,每个模块可包括诸如存储器150的一部分的存储器硬件,例如,其包含可由处理器148或其他处理器执行的以实现模块的一个或多个功能的指令。当任何一个模块包含包括可由处理器148执行的指令的存储器的部分时,模块可以包括或可以不包括处理器148。在一些示例中,个别的一个模块可以恰好是包括可由处理器148或其他处理器执行的指令的存储器150的一部分或其他物理存储器,该指令的执行可以实现该模块的功能而无需该模块包含任何其他硬件。由于每个模块包含至少一些硬件,即使包含的硬件包括软件,每个模块可以可替换地被称为硬件模块,诸如读取硬件模块124、错误检测硬件模块126、通信硬件模块130和错误校正的硬件模块120。
一些功能被描述为贮存于计算机可读贮存介质中(例如,应用为计算机可执行的指令或存储器150中数据结构的逻辑)。系统100的整体或部分及其逻辑和数据结构可被贮存于、分布在一个或多个类型的计算机可读贮存介质中或从一个或多个类型的计算机可读贮存介质中读取。计算机可读贮存介质的示例可以包括硬盘、软盘、光盘、闪存驱动器、缓存、易失性贮存器、非易失性贮存器、随机存取存储器、闪贮存存器或任何其他类型的计算机可读贮存介质或贮存介质。计算机可读贮存介质可以包括任何类型的永久性的计算机可读介质,如光盘、易失性贮存器、非易失性贮存器、只读贮存器(ROM)、随机存取存储器(RAM)或任何其他合适的贮存设备。
系统100的处理能力可以分布在多个实体之间,如多处理器和存储器之间,另外也可以包括多个分布式处理系统。参数、数据库和其他数据结构可以分开地贮存和管理,可以合并入单个存储器或数据库,可以以许多不同的方式逻辑地和物理地组织,以及可以采用不同类型的数据结构实现,如链表、哈希表或隐式贮存机制。诸如程序或电路的逻辑,可在多个程序间组合或分割、分布在几个存储器和处理器之间,并可以在库中实现。
图2说明了系统100示例性逻辑的流程图。操作可以开始于在贮存设备106处接收(210)来自主机104的读取命令102。读取的命令102可以包括由标识符144标识的数据132的请求。基于标识符144,可以从贮存设备106处的贮存存储器114中读取(220)数据132。
可以在贮存设备106处做出是否在从贮存存储器114读取的数据132中检测到错误的确定(230)。如果未检测到错误,然后数据132可以传输(240)至主机104,操作可以结束。
或者,如果检测到错误,然后占位符数据134可以从贮存设备106传输(250)至主机104,而不传输读取命令102失败或成功的指示。当传输之后,占位符数据134可以被表示给主机104作为由标识符144标识的数据132。
校正数据142可以被生成(260),以使校正数据142不包含从贮存存储器114读取的数据132中检测到的错误。校正数据142可以从贮存设备106传输(270)至主机104,在该处校正数据替换主机104中的占位符数据134为由标识符144标识的数据132。然后操作可以结束。
例如,通过传输读取命令102已成功完成的指示至主机104,操作可以结束。
图2所示的逻辑可以包括额外的、不同的或更少的操作。操作可以以不同于图2所示的顺序执行。
例如,图3说明了不同于图2所示的逻辑的系统100的示例性逻辑的流程图。操作可以开始于在贮存设备106处接收(310)来自主机104的读取命令102。读取命令102可以包含由标识符144标识的数据132的请求。基于标识符144,可以从贮存设备106处的贮存存储器114中读取(320)数据132。
占位符数据134可以从贮存设备106传输(350)到主机104,而不传输读取命令102失败或成功的指示。占位符数据134可以是从贮存存储器114读取的原始数据。原始数据可以包括或不包括错误。
可以在贮存设备106处做出是否在从贮存存储器114读取的数据132中检测到错误的确定(330)。在一个示例中,确定(330)可以与占位符134的传输(350)并行或之后做出。如果未检测到错误,然后包括由读取命令102请求的正确数据的占位符数据134已被传输或正在传输的过程中。相应地,操作可以结束。
或者,如果检测到错误,校正数据142可以生成(360)以使校正数据142不包含从贮存存储器114读取的数据132中检测到的错误。校正数据142可以从贮存设备106传输(370)至主机104,在该处校正数据替换主机104中的占位符数据134为由标识符144标识的数据132。然后操作可以结束。
例如,通过传输读取命令102已成功完成的指示至主机104,操作可以结束。
不管所描述的具体实现,所有讨论实质上都是典型的而不是限制的。例如,尽管选定的方面、功能或实现的组件被描述为贮存在存储器中,系统或多个系统的全部或部分可以贮存于、分布在其他计算机可读贮存介质中或可从其他计算机可读贮存介质中读取,例如,硬盘、闪存驱动器、软盘和光盘的二级贮存器。此外,多种模块和屏幕显示功能仅仅是这种功能的一个示例,任何其他包含类似的功能的配置是可以的。
分别用于实现上述讨论的进程、方法和/或技术的逻辑、软件或指令可以提供在计算机可读贮存介质上。图中所示或在此描述的功能、动作或任务可以响应于贮存在计算机可读介质内或上的逻辑或指令集被执行。功能、动作或任务独立于指令集、贮存介质、处理器或处理策略的特定类型,并可被软件、硬件、集成电路、固件、微代码及其类似单独执行或组合地执行。同样,处理策略可以包括多重处理、多任务处理、并行处理等。在一个实施例中,指令贮存在可移动的媒体设备中用于本地或远程系统读取。在其他实施例中,逻辑或指令贮存在远程位置中用于通过计算机网络或通过电话线传送。在其它实施例中,逻辑或指令贮存在给定的计算机、中央处理单元(“CPU”)、图形处理器(“GPU”)或系统中。
此外,虽然以上描述了特定的组件,这里描述的方法、系统和制造文件可以包括额外的、较少的或不同的组件。例如,处理器可以以微处理器、微控制器、专用集成电路(ASIC)、离散逻辑或其他类型的电路或逻辑的组合实现。同样,存储器可以是动态随机存取贮存器、静态随机存取贮存器或任何其他类型的存储器。标志、数据、数据库、表、实体和其他数据结构可以分别地贮存和管理,可合并入单个存储器或数据库,可以是分布的,或者可以以许多不同的方式逻辑地和物理地组织。组件可以独立地操作,或者作为同一程序或装置的一部分。组件和/或设备可以是驻留在诸如独立的可移动的电路板的独立的硬件上,或者是诸如用于实现来自存储器的指令的同一存储器和处理器的共享硬件上。程序可以是单个程序或独立程序的几个部分,或者分布于几个存储器和处理器间。
为澄清短语的使用并在此向公众提供注意,"至少<A>、<B>、···和<N>中的一个"或者"至少<A>、<B>、···<N>中的一个"或其组合或"<A>、<B>、···和/或<N>"等短语由申请人以最广泛的意义定义,取代在此之前或在此之后的任何其他默认的定义,意味着从包括A、B、···和N的组中选定的一个或多个元素,除非申请人明确地说明与此相反。换句话说,短语意味着一个或多个元素A、B、···或N的任何组合,包括任何单独一个元素或一个元素与其他一个或多个元素的组合,其也可以包括未列出的额外元素的组合。
虽然描述了各种实施例,本领域技术人员应清楚,更多实施例和实现是可能的。因此,这里描述的实施例和实现不应该被认为是唯一可能的实施例和实现。
Claims (20)
1.一种处理贮存器命令的方法,所述方法包括:
在贮存设备处从主机接收第一读取命令,所述第一读取命令包括对由标识符标识的数据的请求;
在所述贮存设备处基于所述标识符读取来自贮存存储器的数据;
在所述贮存设备处检测从所述贮存存储器读取的数据中的错误;
从所述贮存设备传输占位符数据至所述主机,而不传输所述第一读取命令失败或成功的指示,所述占位符数据被指示给所述主机作为由标识符标识的数据;
生成不包含从所述贮存存储器读取的数据中检测到的错误的校正数据;以及
从所述贮存设备传输所述校正数据至所述主机,其中所述校正数据替换所述主机中的占位符数据作为由标识符标识的数据,
与生成所述第一读取命令的校正数据或传输所述第一读取命令的校正数据中的至少一个并行地从贮存存储器读取由第二读取命令请求的数据。
2.如权利要求1所述的方法,其中传输所述占位符数据包括传输所述占位符数据,而不传输占位符数据不正确的指示。
3.如权利要求1所述的方法,其中传输所述占位符数据包括在检测到数据中的错误后传输所述占位符数据。
4.如权利要求1所述的方法,其中所述占位符数据包括包含错误的数据。
5.如权利要求1所述的方法,其中所述占位符数据包括预定的样式。
6.如权利要求1所述的方法,进一步包括在所述校正数据的传输之后或同时从所述贮存设备传输第一读取命令已完成的指示至所述主机。
7.一种处理贮存器命令的系统,所述系统包括:
包括由标识符标识的数据的贮存存储器,其中从主机接收的第一读取命令请求该数据;
读取模块,配置为读取来自所述贮存存储器的数据;
错误检测模块,配置为检测从所述贮存存储器读取的数据中的错误;
通信模块,配置为传输占位符数据至所述主机而不传输第一读取命令失败或成功的指示,其中占位符数据被表示给所述主机作为由标识符标识的数据;以及
错误校正模块,配置为校正从所述贮存存储器读取的数据中的错误,其中所述通信模块进一步配置为传输校正数据至所述主机,其中所述校正数据被表示给主机作为由标识符标识的数据,并且其中在所述校正数据传输至所述主机时,所述第一读取命令完成,并且其中,所述读取模块还被配置为与由错误校正模块基于第一读取命令对错误进行校正或者由通信模块基于第一读取命令向主机传输校正数据中的至少一个并行地从贮存存储器读取由第二读取命令所请求的数据。
8.如权利要求7所述的系统,进一步包括决策模块,配置为基于代价分析来确定是否传输占位符数据至所述主机。
9.如权利要求8所述的系统,其中当由所述占位符数据的传输和所述校正数据的生成导致的延时的代价小于由所述第一读取命令失败的指示的传输和所述第一读取命令的完成的重新执行导致的延时的代价时,所述决策模块确定传输所述占位符数据。
10.如权利要求8所述的系统,其中当所述贮存存储器的错误率低于阈值错误率时,所述决策模块确定传输所述占位符数据。
11.如权利要求7所述的系统,其中所述通信模块配置为传输所述占位符数据至所述主机而不传输所述占位符数据不是由所述第一读取命令请求的数据的指示。
12.如权利要求7所述的系统,其中所述读取模块包括硬件控制器。
13.如权利要求7所述的系统,其中所述第一读取命令是符合贮存协议的贮存器命令,并且所述贮存协议提供对块设备的块级访问。
14.一种处理贮存器命令的贮存设备,所述贮存设备包括:
包括数据的贮存存储器,其中从主机接收的第一读取命令请求所述数据;
错误检测模块,配置为在从所述贮存存储器读取数据之后检测数据中错误;
通信模块,配置为传输占位符数据至所述主机而不传输所述第一读取命令失败或成功的指示,其中所述占位符数据被表示为由所述第一读取命令请求的数据;以及
错误校正模块,配置为生成校正数据,其中所述通信模块进一步配置为传输所述校正数据至所述主机,所述校正数据被表示为由所述第一读取命令请求的数据,其中所述校正数据和所述占位符数据被传输以完成所述第一读取命令,并且其中,所述通信模块还被配置为与由第二读取命令请求的数据的读取并行地传输所述第一读取命令的占位符数据或所述错误校正模块被配置为与由第二读取命令请求的数据的读取并行地生成所述第一读取命令的校正数据或者所述通信模块和所述错误校正模块的这两个过程均与由第二读取命令请求的数据的读取并行地进行。
15.如权利要求14所述的贮存设备,其中所述贮存设备包括决策模块,配置为响应于检测到数据中的错误,来确定是传输占位符数据至所述主机还是传输所述第一读取命令失败的指示。
16.如权利要求15所述的贮存设备,其中当所述贮存存储器的年龄的指示小于阈值时,所述决策模块确定传输所述占位符数据。
17.如权利要求14所述的贮存设备,其中所述错误校正模块由不同于传输占位符数据至所述主机的线程的线程来执行。
18.如权利要求14所述的贮存设备,其中所述通信模块包括作为单线程的逻辑。
19.如权利要求14所述的贮存设备,其中所述错误检测模块是单线程的,但所述错误校正模块不是单线程的。
20.如权利要求14所述的贮存设备,进一步包括从所述贮存存储器读取数据的直接存储器访问控制器。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/168,697 | 2014-01-30 | ||
US14/168,697 US9323610B2 (en) | 2014-01-30 | 2014-01-30 | Non-blocking commands |
PCT/US2015/012448 WO2015116468A1 (en) | 2014-01-30 | 2015-01-22 | Non-blocking commands |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106068499A CN106068499A (zh) | 2016-11-02 |
CN106068499B true CN106068499B (zh) | 2019-04-02 |
Family
ID=52484548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580003427.XA Active CN106068499B (zh) | 2014-01-30 | 2015-01-22 | 非阻塞命令 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9323610B2 (zh) |
KR (1) | KR101868717B1 (zh) |
CN (1) | CN106068499B (zh) |
WO (1) | WO2015116468A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10152237B2 (en) | 2016-05-05 | 2018-12-11 | Micron Technology, Inc. | Non-deterministic memory protocol |
US10534540B2 (en) | 2016-06-06 | 2020-01-14 | Micron Technology, Inc. | Memory protocol |
US10585624B2 (en) * | 2016-12-01 | 2020-03-10 | Micron Technology, Inc. | Memory protocol |
US10996892B2 (en) | 2017-05-03 | 2021-05-04 | Eidetic Communications Inc. | Apparatus and method for controlling data acceleration |
US11778055B2 (en) * | 2020-07-13 | 2023-10-03 | Samsung Electronics Co., Ltd. | Systems and methods for storage-efficient sensors |
KR20220077208A (ko) * | 2020-11-30 | 2022-06-09 | 삼성전자주식회사 | 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7571373B1 (en) * | 2004-08-06 | 2009-08-04 | Nvidia Corporation | Post-transmission disk error correction |
CN102414666A (zh) * | 2009-05-06 | 2012-04-11 | 苹果公司 | 用于受管理的非易失性存储器的低等待时间读取操作 |
CN102597961A (zh) * | 2009-11-10 | 2012-07-18 | 国际商业机器公司 | 用于调试存储器一致性模型的系统和方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US757137A (en) * | 1903-03-28 | 1904-04-12 | John S Munro | Feeding mechanism for cotton-seed linters. |
JPH03171384A (ja) | 1989-11-30 | 1991-07-24 | Sony Corp | 情報読取装置 |
US6317805B1 (en) * | 1998-12-18 | 2001-11-13 | Emc Corporation | Data transfer interface having protocol conversion device and upper, lower, middle machines: with middle machine arbitrating among lower machine side requesters including selective assembly/disassembly requests |
JP4437519B2 (ja) | 2001-08-23 | 2010-03-24 | スパンション エルエルシー | 多値セルメモリ用のメモリコントローラ |
EP1845682A1 (en) | 2006-04-13 | 2007-10-17 | Flowing Content S.A. | Method and system for content distribution |
US8751682B2 (en) | 2010-09-27 | 2014-06-10 | Z124 | Data transfer using high speed connection, high integrity connection, and descriptor |
US8427771B1 (en) | 2010-10-21 | 2013-04-23 | Western Digital Technologies, Inc. | Hybrid drive storing copy of data in non-volatile semiconductor memory for suspect disk data sectors |
US8656251B2 (en) | 2011-09-02 | 2014-02-18 | Apple Inc. | Simultaneous data transfer and error control to reduce latency and improve throughput to a host |
US9047922B2 (en) * | 2012-01-27 | 2015-06-02 | Seagate Technology Llc | Autonomous event logging for drive failure analysis |
-
2014
- 2014-01-30 US US14/168,697 patent/US9323610B2/en active Active
-
2015
- 2015-01-22 KR KR1020167017506A patent/KR101868717B1/ko active IP Right Grant
- 2015-01-22 CN CN201580003427.XA patent/CN106068499B/zh active Active
- 2015-01-22 WO PCT/US2015/012448 patent/WO2015116468A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7571373B1 (en) * | 2004-08-06 | 2009-08-04 | Nvidia Corporation | Post-transmission disk error correction |
CN102414666A (zh) * | 2009-05-06 | 2012-04-11 | 苹果公司 | 用于受管理的非易失性存储器的低等待时间读取操作 |
CN102597961A (zh) * | 2009-11-10 | 2012-07-18 | 国际商业机器公司 | 用于调试存储器一致性模型的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
KR20160114053A (ko) | 2016-10-04 |
US9323610B2 (en) | 2016-04-26 |
CN106068499A (zh) | 2016-11-02 |
US20150212878A1 (en) | 2015-07-30 |
WO2015116468A1 (en) | 2015-08-06 |
KR101868717B1 (ko) | 2018-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106068499B (zh) | 非阻塞命令 | |
US9977623B2 (en) | Detection of a sequential command stream | |
US10339001B2 (en) | Method and system for improving flash storage utilization by predicting bad M-pages | |
JP5658128B2 (ja) | Nandフラッシュ・メモリにおける確率論的多層エラー訂正のためのシステム、方法、およびコンピュータ・プログラム | |
TWI594120B (zh) | 用於記錄非揮發性記憶體系統中之停滯時間之系統、方法及程式產品 | |
US9785575B2 (en) | Optimizing thin provisioning in a data storage system through selective use of multiple grain sizes | |
US10175892B1 (en) | Adaptive read algorithm for a nonvolatile medium | |
JP5649663B2 (ja) | ビット値の格納されているカウントを使用してデータの誤りを訂正するシステムおよび方法 | |
US12099398B2 (en) | Non-volatile memory switch with host isolation | |
EP2583176B1 (en) | Error detection for files | |
US9390003B2 (en) | Retirement of physical memory based on dwell time | |
US11561707B2 (en) | Allocating data storage based on aggregate duplicate performance | |
US9639418B2 (en) | Parity protection of a register | |
KR20210024188A (ko) | 기입 버퍼 관리 | |
CN106528322A (zh) | 检测数据的无记载损坏的方法和设备 | |
US8261133B1 (en) | Protection and recovery of non-redundant information stored in a memory | |
US9594525B2 (en) | Data storage device and operating method thereof | |
US20240231923A9 (en) | Offloading Data Storage Device Processing Tasks to a Graphics Processing Unit | |
JP5916204B2 (ja) | メモリ装置及びメモリパトロールによるデータ化け回避方法 | |
WO2019090657A1 (zh) | 一种存储器容错保护方法、装置、设备及存储介质 | |
CN116127479A (zh) | 存储设备及其操作方法 | |
US10042699B2 (en) | Multi-chip device and method for storing data | |
TW200539607A (en) | System and method for data redundancy checking and correcting |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |