CN111164566B - 具有主机侧命令注入的非易失性存储系统 - Google Patents
具有主机侧命令注入的非易失性存储系统 Download PDFInfo
- Publication number
- CN111164566B CN111164566B CN201880064023.5A CN201880064023A CN111164566B CN 111164566 B CN111164566 B CN 111164566B CN 201880064023 A CN201880064023 A CN 201880064023A CN 111164566 B CN111164566 B CN 111164566B
- Authority
- CN
- China
- Prior art keywords
- memory
- host
- commands
- data structure
- controller
- 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
- 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
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/44—Indication or identification of errors, e.g. for repair
-
- 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/0604—Improving or facilitating administration, e.g. storage management
- G06F3/0605—Improving or facilitating administration, e.g. storage management by facilitating the interaction with a user or administrator
-
- 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/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
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C2029/0409—Online test
-
- 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/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/36—Data generation devices, e.g. data inverters
-
- 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/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/38—Response verification devices
-
- 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/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/38—Response verification devices
- G11C29/42—Response verification devices using error correcting codes [ECC] or parity check
Abstract
为了重放命令序列以用于调试(或其他目的),存储器设备将命令写入主机的物理存储器中的替代数据结构。存储器设备切换其自己的队列和命令处理基础结构,使得存储器设备针对该替代数据结构而不是针对由主机原始指定的主数据结构来执行。
Description
背景技术
许多电子设备都使用存储器系统。通常,存储器系统包括诸如闪存的非易失性存储器。包括存储器系统或连接到存储器系统的电子设备通常称为主机。
在存储器系统的开发、鉴定和现场调试期间,某些异常或错误条件可能由来自主机的特定命令序列触发。例如,热应力反应可能在很长的写入工作负载之后发生,或者当队列内的命令长时间运行时,超时可能在特定的队列深度发生。在某些情况下,在特定命令序列期间发生的复位也可能触发设备中的内部故障或错误。标识和解决这些情况通常需要捕获主机-存储器交互的总线踪迹,并且分析这些踪迹以发现指示错误已经发生的特定反常。由于主机和存储器之间的接口通常不受监控,调试通常需要在监控/记录接口上的活动时重新创建导致错误的确切条件。然而,重新创建导致错误的确切条件可能是困难的。
附图说明
在不同的附图中,相同编号的元素指的是相同的组件。
图1是连接到主机的存储器系统的一个实施例的框图。
图2是前端处理器电路的一个实施例的框图。前端处理器电路是控制器的部分。
图3是后端处理器电路的一个实施例的框图。在一些实施例中,后端处理器电路是控制器的部分。
图4是存储器封装的一个实施例的框图。
图5是存储器裸芯的一个实施例的框图。
图6是与主机接口的控制器的一个实施例的逻辑框图。
图7是描述用于操作存储器系统的过程的一个实施例的流程图。
图8是描述用于执行和记录命令序列的过程的一个实施例的流程图。
图9是描述用于重放(replay)(或重新执行)命令序列的过程的一个实施例的流程图。
图10是描述用于重放(或重新执行)命令序列的过程的一个实施例的流程图。
图11是与主机接口的控制器的一个实施例的逻辑框图。
图12是描述用于在重放(或重新执行)命令序列的同时执行命令的过程的一个实施例的流程图。
具体实施方式
如上所述,来自主机的特定命令序列可能会触发某些错误条件。为了促进调试,再现(reproduce)导致错误的确切条件可能需要重放来自主机的相同的命令序列。因此,提出了存储器系统,其在执行命令序列之后,可以通过将那些命令的副本注入到主机-存储器系统接口中来重放相同的命令序列。
一个实施例包括存储器系统,该存储器系统包括非易失性存储器和连接到非易失性存储器的控制器。控制器被配置为将一组命令写入主机的物理存储器中的替代数据结构,并且将其命令指针从引用主数据结构切换到引用替代数据结构。响应于命令指针被切换,控制器被配置为针对替代数据结构而不是主数据结构来执行。因为替代数据结构将具有已经执行的命令的副本,所以存储器系统将能够重放那些命令,就好像它们是从主机重新发出的一样。
图1是连接到主机120的存储器系统100的一个实施例的框图。存储器系统100可以实现本文提出的技术。许多不同类型的存储器系统可以与本文提出的技术一起使用。一个示例存储器系统是固态驱动器(“SSD(solid state drive)”)。存储器系统包括控制器102、用于存储数据的非易失性存储器104和本地存储器(例如,DRAM/ReRAM)106。控制器102包括前端处理器(Front End Processor,FEP)电路110和一个或多个后端处理器(Back EndProcessor,BEP)电路112。在一个实施例中,FEP 110电路在ASCI上实现。在一个实施例中,每个BEP电路112在单独的ASIC上实现。用于每一个BEP电路112和FEP电路110的ASIC在同一半导体上实现,使得控制器102被制造为片上系统(“SoC(System on Chip)”)。FEP 110和BEP 112都包括它们自己的处理器。在一个实施例中,FEP 110和BEP 112作为主从(masterslave)配置工作,其中FEP 110是主(master),每个BEP 112是从(slave)。例如,FEP电路110实现执行存储器管理(例如,垃圾收集、损耗均衡等)的闪存转换层、逻辑到物理地址转换、与主机的通信、对DRAM(本地易失性存储器)的管理以及对SSD(或其他非易失性存储系统)的整体操作的管理。在FEP电路110的请求下,BEP电路112管理存储器封装/裸芯中的存储器操作。例如,BEP电路112可以执行读取、擦除和编程过程。此外,BEP电路112可以执行缓冲器管理、设置FEP电路110所需的特定电压电平、执行纠错(error correction,ECC)、控制到存储器封装的触变(toggle)模式接口等。在一个实施例中,每个BEP电路112负责其自己的一组存储器封装。
在一个实施例中,非易失性存储器104包括多个存储器封装。每个存储器封装包括一个或多个存储器裸芯。因此,控制器102连接到一个或多个非易失性存储器裸芯。在一个实施例中,存储器封装14中的每个存储器裸芯利用NAND闪存(包括二维NAND闪存和/或三维NAND闪存)。在其他实施例中,存储器封装可以包括其他类型的存储器。
控制器102经由通过PCI Express(PCIe)实现NVM Express(NVMe)的接口130与主机120通信。为了与存储器系统100一起工作,主机120包括主机处理器122、主机存储器124和PCIe接口126。主机存储器124是主机的物理存储器,并且可以是DRAM、SRAM、非易失性存储器或其他类型的存储器。主机120在存储器系统100(例如,SSD)的外部并与其分离。在一个实施例中,存储器系统100嵌入在主机120中。
如下面将更详细描述的,控制器102包括被配置为存储从主机120接收并由控制器102执行的命令序列的副本的命令日志。控制器102还包括部件,该部件通过从命令日志中读取命令、将读取的命令写入主机120上的存储器、以及执行(在控制器120处)来自主机120上的存储器124中的命令,在命令序列已经被执行后、用于重放命令序列。
图2是FEP电路110的一个实施例的框图。图2示出了与主机120通信的PCIe接口150和与该PCIe接口通信的主机处理器152。主机处理器152可以是适合于实现的本领域已知的任何类型的处理器。主机处理器152与片上网络(network-on-chip,NOC)154通信。NOC是集成电路上的通信子系统,通常在SoC中的核心之间。NOC可以跨越同步和异步时钟域,或者使用非时钟异步逻辑。NOC技术将网络理论和方法应用于片上通信,并带来了对传统总线和纵横开关(crossbar)的显著改进。与其他设计相比,NOC改进了SoC的可扩展性和复杂SoC的功率效率。NOC的线路和链路由许多信号共享。因为NOC中的所有链路可以同时对不同的数据包进行操作,所以实现了高级并行。因此,随着集成子系统的复杂性不断增长,与先前的通信架构(例如,专用点对点信号线路、共享总线或带桥的分段总线)相比,NOC提供了增强的性能(诸如吞吐量)和可扩展性。存储器处理器156、SRAM 160和DRAM控制器162连接到NOC154并与之通信。DRAM控制器162用于操作DRAM(例如,DRAM 106)并与之通信。SRAM 160是由存储器处理器156使用的本地RAM。存储器处理器156用于运行FEP电路并执行各种存储器操作。与NOC通信的还有两个PCIe接口164和166。在图2的实施例中,SSD控制器将包括两个BEP电路112;因此,可以有两个PCIe接口164/166。每个PCIe接口与BEP电路112中的一个通信。在其他实施例中,可以有多于或少于两个BEP电路112;因此,可以有两个以上的PCIe接口。
图3是BEP电路112的一个实施例的框图。图3示出了用于与FEP电路110通信(例如,与图2的PCIe接口164和166之一通信)的PCIe接口200。PCIe接口200与两个NOC 202和204通信。在一个实施例中,两个NOC可以组合为一个大的NOC。每个NOC(202/204)经由XOR引擎(224/254)和ECC引擎(226/256)连接到SRAM(230/260)、缓冲器(232/262)、处理器(220/250)和数据路径控制器(222/252)。如本领域中已知的,ECC引擎226/256用于执行纠错。XOR引擎224/254用于对数据进行XOR运算,使得数据能够以在有编程错误的情况下能够被恢复的方式被组合和存储。数据路径控制器22连接到接口模块,用于经由四个通道与存储器封装通信。因此,顶部NOC 202与用于与存储器封装通信的四个通道的接口228相关联,并且底部NOC 204与用于与存储器封装通信的四个附加的通道的接口258相关联。每个接口228/258包括四个触变模式接口(Toggle Mode interface,TM接口)、四个缓冲器和四个调度器。每一个通道都有一个调度器、缓冲器和TM接口。处理器可以是本领域已知的任何标准处理器。数据路径控制器222/252可以是处理器、FPGA、微处理器或其他类型的控制器。XOR引擎224/254和ECC引擎226/256是专用硬件电路,称为硬件加速器。在其他实施例中,XOR引擎224/254和ECC引擎226/256可以以软件实现。调度器、缓冲器和TM接口是硬件电路。
图4是包括连接到存储器总线(数据线和芯片使能线)294的多个存储器裸芯292的存储器封装104的一个实施例的框图。存储器总线294连接到触变模式接口296,用于与BEP电路112的TM接口通信(例如,参见图3)。在一些实施例中,存储器封装可以包括连接到存储器总线和TM接口的小型控制器。存储器封装可以具有一个或多个存储器裸芯。在一个实施例中,每个存储器封装包括八个或16个存储器裸芯;然而,也可以实现其他数量的存储器裸芯。本文描述的技术不限于任何特定数量的存储器裸芯。
图5是存储器裸芯300的一个实施例的功能框图。图5中描绘的组件是电路。在一个实施例中,每个存储器裸芯300包括存储器结构326、控制电路310和读取/写入电路328。存储器结构126可经由行解码器324由字线寻址,可经由列解码器332由位线寻址。读取/写入电路328包括包括SB1、SB2、...、SBp(感测电路,sensing circuitry)的多个感测块350,并允许存储器单元的页被并行地读取或编程。命令和数据经由线318在控制器和存储器裸芯300之间传送。在一个实施例中,存储器裸芯108包括连接到线118的一组输入和/或输出(input and/or output,I/O)引脚。
控制电路310与读取/写入电路328合作以在存储器结构326上执行存储器操作(例如,写入、读取和其他),并且包括状态机312、片上地址解码器314、功率控制电路316和温度检测电路318。状态机312提供存储器操作的裸芯级控制。在一个实施例中,状态机312可由软件编程。在其他实施例中,状态机312不使用软件,并且完全在硬件(例如,电路)中实现。在一个实施例中,控制电路310包括缓冲器,诸如寄存器、ROM熔丝和其他存储设备,用于存储默认值,诸如基极电压和其他参数。
片上地址解码器314提供由控制器102使用的地址间的地址接口给由解码器324和332使用的硬件地址。功率控制模块316控制在存储器操作期间提供给字线和位线的功率和电压。功率控制模块316可以包括用于创建电压的电荷泵。感测块包括位线驱动器。
在一个实施例中,存储器结构326包括其中多个存储器级在单个衬底(诸如晶片)上形成的非易失性存储器单元的三维存储器阵列。存储器结构可以包括任何类型的非易失性存储器,该任何类型的非易失性存储器在具有设置在硅(或其他类型的)衬底上方的有源(active)区域的一个或多个物理级存储器单元中单片形成。在一个示例中,非易失性存储器单元包括有电荷俘获材料的垂直NAND串,诸如,例如在美国专利9,721,662中描述的,该专利整体通过引用结合于本文。
在另一实施例中,存储器结构326包括非易失性存储器单元的二维存储器阵列。在一个示例中,非易失性存储器单元是利用浮置栅极的NAND闪存单元,诸如,例如在美国专利9,082,502中描述的,该专利整体通过引用结合于本文。也可以使用其他类型的存储器单元(例如,NOR型闪存)。
被包括在存储器结构326中的存储器阵列架构或存储器单元的确切类型不限于上述示例。许多不同类型的存储器阵列架构或存储器技术可用于形成存储器结构326。本文提出的新的要求保护的实施例的目的不需要特定的非易失性存储器技术。用于存储器结构326的存储器单元的合适技术的其他示例包括ReRAM存储器、磁阻存储器(例如,MRAM(Magnetoresistive memory)、自旋转移转矩MRAM、自旋轨道转矩MRAM)、相变存储器(例如,phase change memory,PCM)等。存储器结构126的存储器单元架构的合适技术的示例包括二维阵列、三维阵列、交叉点阵列、堆叠二维阵列、垂直位线阵列等。
ReRAM或PCMRAM、交叉点存储器的一个示例包括以由X线和Y线(例如,字线和位线)访问的交叉点阵列布置的可逆电阻切换元件。在另一实施例中,存储器单元可以包括导电桥存储器元件。导电桥存储器元件也可以称为可编程金属化单元。基于离子在固体电解质内的物理重定位,导电桥存储器元件可以用作状态改变元件。在一些情况下,导电桥存储器元件可以包括两个固体金属电极,一个相对惰性(例如钨),并且另一个电化学活性(例如银或铜),其中在两个电极之间有固体电解质的薄膜。随着温度增加,离子的迁移率(mobility)也增加,导致导电桥存储器单元的编程阈值降低。因此,导电桥存储器元件可以在温度上具有宽范围的编程阈值。
磁阻存储器(MRAM)通过磁存储元件存储数据。这些元件由两块铁磁板组成,每一块铁磁板都可以保持磁化,由薄绝缘层隔开。两个板中的一个是设置为特定极性的永磁体;另一个板的磁化可以改变以匹配存储记忆的外部磁场。存储器设备由这种存储器单元的网格构成。在用于编程的一个实施例中,每个存储单元位于一对写入线之间,该对写入线彼此垂直,平行于该单元,一个在单元的上方切另一个在单元的下方。当电流通过它们时,创建感应磁场。
相变存储器(PCM)利用硫属玻璃的独特行为。一个实施例使用GeTe-Sb2Te3超晶格通过简单地用激光脉冲(或来自另一源的光脉冲)改变锗原子的配位状态来实现非热相变。因此,编程的剂量是激光脉冲。可以通过阻止存储器单元接收光来抑制存储器单元。注意,在本文档中“脉冲”的使用不需要方形脉冲,而是包括(连续的或非连续的)振动或声音、电流、电压光或其他波的突发。
本领域普通技术人员将认识到,本文描述的技术不限于单个特定的存储器结构,而是覆盖了如本文描述并且被本领域普通技术人员所理解的技术的精神和范围内的许多相关存储器结构。
如上所述,在一个实施例中,存储器系统100和主机120之间的接口130是PCIe上的NVMe。NVMe是允许主机软件与非易失性存储器系统通信的接口。该接口针对企业和客户端固态驱动器进行优化,通常作为寄存器级接口连接到PCIe接口。寄存器接口和命令组是与非易失性存储器系统的任何使用模型分开指定的,而是仅指定到非易失性存储器系统的通信接口。因此,本说明书没有指定非易失性存储器系统是否被用作固态驱动器、主存储器、高速缓冲存储器、备份存储器、冗余存储器等(可以为系统100实现其中任何一个)。
NVMe接口提供提交队列(submission queue,SQ)和完成队列(completion queue,CQ),用于主机提交命令并且存储器系统提供执行提交的命令的结果的指示。NVMe命令(例如,读取或写入)在主机上启动,并且到存在于主机存储器中的特定提交队列。一旦命令被插入队列,主机写入控制器上的每个队列门铃寄存器(per-queue doorbell register)。这种门铃写入唤醒控制器,然后控制器探测(多个)新请求的队列。其读取队列条目,执行命令并且最后将完成添加到完成队列中,然后经由中断向主机通知这种完成。主机醒来,从队列中弹出完成,并将结果返回给用户。
使用两种主要类型的队列:管理队列和I/O队列。管理队列用于配置和管理控制器的各个方面。每个控制器只有一对管理队列。I/O队列用于移动NVMe协议特定命令(例如,读取、写入)。每个控制器最多可以有64K个I/O队列。在一些实施例中,每个处理器核心有一对I/O队列;然而,处理器核心可以具有一对以上的I/O队列,并且/或者I/O队列的数量可以与处理器核心的数量无关。每个队列对包括提交队列和完成队列。所有队列都驻留在主机存储器中。
提交队列(SQ)是有固定的槽(slot)大小的循环缓冲器,主机软件使用该提交队列来提交命令以用于由控制器执行。每个提交队列条目是命令。命令大小为64字节。
完成队列(CQ)是有固定的槽大小的循环缓冲器,用于发布完成的命令的状态。完成的命令由相关联的SQ标识符和由主机软件分派的命令标识符的组合来唯一地标识。多个提交队列可以与单个完成队列相关联。在单个工作者线程经由一个完成队列处理所有命令完成的情况下,即使这些命令源自多个提交队列,也可以使用此特征。每个完成队列条目中的相位标记(P)位指示该条目是否是新发布的。这使主机软件能够确定新条目是作为先前轮的完成通知还是作为当前轮的完成通知的部分发布的。在读取和处理完成队列条目之后,控制器反转该条目的相位标签位。
每一个提交队列和完成队列都有头部指针和尾部指针。尾部指针指向下一个可用的条目以向队列中添加条目。在生产者向队列中添加条目之后,生产者递增尾部指针(考虑到一旦到达队列的末尾,指针将回退到零—队列都是循环队列)。如果头部指针和尾部指针相等,则队列被认为是空的。在检查尾部指针并确定队列是非空的后,消费者使用头部指针来确定从哪里开始读取队列。消费者将在读取每个条目后递增头部指针。
提交队列的尾部指针由主机管理。在一个或多个条目被推入队列中之后,尾部指针(被递增了)经由驻留在控制器上的提交队列门铃寄存器被写入控制器。控制器维持头部指针,并且一旦被通知尾部指针更新就开始读取队列。控制器可以继续读取队列,直到空。当控制器消耗条目时,头部指针被更新,并经由完成队列条目被发送回主机。
完成队列的尾部由控制器管理,但与主机不同,控制器只维持尾部指针的私有副本。有新完成队列条目的唯一指示是可以被询问的完成队列条目中的相位标记位。一旦主机确定条目可用,主机读取该条目并更新头部指针。通过主机写入完成队列门铃寄存器,控制器被通知头部指针更新。
注意,由NVMe控制器完成的所有工作都是由控制器自己拉入或推出该控制器的。主机只是将工作放入主机存储器,然后按门铃(“你有一个提交条目要处理”)。接着,主机从完成队列中收集结果,再次按门铃(“我完成了这些完成条目”)。因此控制器可以自由地与主机并行工作。对完成的排序没有要求——控制器可以以其选择的任何方式来对其工作排序。
图6是控制器102的组件和驻留在主机存储器124中的组件的逻辑框图,这些组件用于在存储器系统100和主机120之间的PCIe接口130上实现NVMe的一个实施例。在一个实施例中,主机的物理存储器(主机存储器124)包括驱动器402、管理命令的数据结构404、核心0的数据结构406、核心1的数据结构408和主机存储器缓冲器410。驱动器402是主机120上与存储器系统100接口的软件。数据结构404包括管理命令的提交队列(S)和完成队列(C),并且包括提交队列头部指针(submission queue head pointer,SQHPA)、提交队列尾部指针(submission queue tail pointer,SQTPA)以及完成队列头部指针(completion queuehead pointer,CQHPA)。在一个实施例中,系统将为每个核心维持单独的多组队列。图6示出了两个核心(核心0和核心1)的多组队列;然而,在其他实施例中,可以实现多于或少于两个核心。本文描述的技术不限于任何数量的核心。在其他多组实施例中,每个线程可以有一组提交队列和完成队列。在一些实施例中,单个核心可以具有多组提交队列和完成队列。在图6的示例中,核心0有提交队列(S)和完成队列(C),并且核心1有提交队列(S)和完成队列(C)。例如,数据结构406包括提交队列(S)、完成队列(C)、提交队列头部指针(SQHP0)、提交队列尾部指针(SQTP0)和完成队列头部指针(CQHP0),所有这些都用于核心0。数据结构408包括提交队列(S)、完成队列(C)、提交队列头部指针(SQHP1)、提交队列尾部指针(SQTP1)和完成队列头部指针(CQHP1),所有这些都用于核心1。主机存储器缓冲器410是可以被分配(根据控制器102的请求)给由控制器102使用的主机存储器124的部分。
图6示出了包括五个软件模块的控制器102,每个模块表示在控制器102上运行的过程:闪存转换层430、I/O自动化引擎432、存储器接口引擎434、主机接口引擎436(直接PCIe访问)和命令重放引擎438。闪存转换层430在由主机120使用的逻辑地址和由存储器系统100内的各种存储器芯片使用的物理地址之间进行转换。I/O自动化432访问提交队列中的各种命令,执行这些命令,并在完成队列中返回结果。存储器接口引擎434管理控制器102和各种存储器封装104之间的接口。例如,存储器接口引擎434可以在处理器220和250上实现(见图3)。主机接口引擎436实现控制器102和主机120之间的接口。例如,主机接口引擎434可以在主机处理器152上运行(见图2)。如下所述,命令重放引擎438用于重放或重新执行命令序列。在一个实施例中,闪存转换层430、I/O自动化引擎432和命令重放引擎438由存储器处理器156执行/实现(见图2)。在其他实施例中,可以使用控制器102的其他架构,从而可以使用其他处理器或处理器组来实现软件模块430-438。
图6还示出了具有四组数据的控制器102:命令日志440、活动命令缓冲器442、门铃寄存器444和队列指针446。在一个实施例中,多组数据440、442、444和446存储在控制器102的本地存储器中(例如,图1的DRAM106)。命令日志440存储命令序列的副本和这些命令的相关联的定时信息,使得这些命令可以在稍后的时间重放或重新执行。活动命令缓冲器442存储已经从各种提交队列访问、并且在将由控制器102执行的线中的命令。门铃寄存器444是被操作为门铃的一组寄存器。如上所述,当主机120向提交队列添加条目或消耗完成队列上的条目时,主机将通过向该门铃写入更新的指针来按适当的门铃。因此,图6示出了门铃寄存器444,该门铃寄存器444包括管理队列的提交队列尾部门铃(SQTDBA)、管理队列的完成队列头部门铃(CQHDBA)、核心0的提交队列尾部门铃(SQTDB0)、核心0的完成队列头部门铃(CQHDB0)、核心1的提交队列尾部门铃(SQTDB1)和核心1的完成队列头部门铃(CQHDB1)。
队列指针446包括上述各种组队列的头部和尾部指针。在一个实施例中,控制器102为每个队列维持头部指针和尾部指针的副本。在图6的示例中,有六个队列;因此,控制器102存储六个头部指针和六个尾部指针。例如,图6示出了队列指针446,该队列指针446包括管理队列的提交队列头部指针(SQHPA)、管理队列的提交队列尾部指针(SQTPA)、管理队列的完成队列头部指针(CQHPA)、管理队列的完成队列尾部指针(CQTPA)、核心0的提交队列头部指针(SQHP0)、核心0的提交队列尾部指针(SQTP0)、核心0的完成队列头部指针(CQHP0)、核心0的完成队列尾部指针(CQTP0)、核心1的提交队列头部指针(SQHP1)、核心1的提交队列尾部指针(SQTP1)、核心1的完成队列头部指针(CQHP1)和核心1的完成队列尾部指针(CQTP1)。在其他实施例中,提交队列和完成队列可以由其他类型的数据结构代替。队列指针446中的任何或所有指针可以是步骤604的命令指针。
在存储器系统的开发、鉴定和现场调试期间,某些异常可能由特定命令序列触发。例如,热应力反应可能在很长的写入工作负载之后发生,或者当队列内的命令长时间运行时,超时可能在特定的队列深度发生。在某些情况下,在特定命令序列期间发生的复位也可能触发存储器设备中的内部故障或错误。标识和解决这些情况通常需要捕获主机-存储器交互的总线踪迹,并且分析这些踪迹以发现指示错误已经发生的特定反常。由于主机和存储器之间的接口通常不受监控,调试通常需要在监控/记录接口上的活动时重新创建导致错误的确切条件。然而,重新创建导致错误的确切条件可能是困难的。因此,提出了存储器设备100被配置为重放(或重新执行)导致问题的命令序列。图7是描述这种过程的高级流程图。在图7的步骤502中,控制器102执行命令序列。在一个实施例中,控制器102在执行命令的同时执行命令的记录。例如,控制器102可以被配置为从主机存储器中的主数据结构接收一组命令,并执行那些命令,诸如执行来自主机处理器的核心中的一个的提交队列的命令。在执行命令之后,控制器被配置为在步骤504通过将命令序列写入主机存储器的物理存储器上的替代数据结构并针对该替代数据结构执行来重放(或重新执行)相同的命令序列。针对替代数据结构执行包括从主机向存储器系统传输一组命令,并在存储器系统上执行这些命令。下面参照图8-12描述图7处过程的更多细节。注意,存储器系统可以响应于来自主机的请求、来自存储器系统外部的实体的请求或者来自到存储器系统的输入的信号来重放命令序列。
图8是描述用于执行命令序列的过程的一个实施例的流程图,包括记录那些命令。也就是说,图8的过程是图7的步骤502的一个示例实现方式。在图8的步骤540中,主机120将命令写入提交队列。例如,主机120可以向核心0的提交队列(S)添加命令。在步骤542,主机120调整提交队列的尾部指针,以反映添加到提交队列的命令。例如,主机120将更新SQTP0(见图6)。在步骤544,主机120通过将更新的提交队列尾部指针(SQTP0)写入控制器102上的提交队列尾部门铃(SQTDB)来按提交队列的门铃。响应于主机对提交队列尾部门铃(SQTDB)写入,如果有一个以上的具有新条目的提交队列,则控制器102执行判优(arbitration)。可以执行多种类型的判优。三个合适的示例包括轮询判优(round robin arbitration)、有紧急优先级的加权轮询判优以及供应商特定判优;然而,也可以执行其他类型的判优。在一般意义上,判优是选择从哪个队列获得下一个命令。响应于主机对提交队列尾部门铃写入以及响应于判优,控制器102基于提交队列头部指针(SQHP0)的值和在步骤546执行的判优获取下一个命令。在步骤550,响应于获取命令,控制器102更新控制器102上的提交头部指针(SQHP0)。提交头部指针(SQHP0)将经由完成队列发送回主机,如下所述。以这种方式,控制器102和主机120都维持提交队列头部指针(SQHP0)和提交队列尾部指针(SQTP0)的副本。在步骤552,控制器102将获取的命令存储在活动命令缓冲器442中。
在步骤554,控制器102执行活动命令缓冲器442中的下一个命令。如果记录开启,控制器102在步骤554执行命令的同时,在步骤556执行命令的记录。记录包括在命令日志440中存储命令、指针、门铃和时间戳(或其他定时信息)的副本。注意,在一些实施例中,步骤540-552在独立且并行于步骤554和556的循环中执行。
在步骤558,在执行命令之后,控制器102基于仅驻留在控制器102上的完成队列尾部指针将结果写入适当的完成队列。在该示例中,控制器102使用完成队列尾部指针CQTP0来在核心0的完成队列(C)中写入。在步骤558添加的完成队列条目包括更新的提交队列头部指针(SQHP0)。在步骤560,完成队列尾部指针(CQTP0)递增。在步骤562,控制器102在主机120上生成中断。中断标识已经更新的适当的完成队列。在步骤564,响应于中断,主机120在由完成队列头部指针指向的条目处检查适当的完成队列。在步骤566,主机120处理完成队列条目。在步骤568,主机120更新完成队列头部指针(CQHP0)。在步骤570,主机120将更新的完成队列头部指针(CQHP0)写入控制器上的完成队列头部门铃(CQHDB0)。只要活动命令缓冲器442中有命令,将连续执行步骤554-570。每次主机向提交队列写入命令时,就执行步骤540-552。
图9是描述用于重放(或重新执行)命令序列的过程的一个实施例的流程图。也就是说,图9的过程是图7的步骤504的一个示例实现方式。在图9的步骤602中,控制器102将待重放的一组命令写入主机的物理存储器中的替代数据结构。在一个示例中,图6中的主机存储器124中描绘的队列是用于正常操作的主数据结构。因此,步骤602包括将命令序列写入图6中主机存储器124中描绘的队列之外的位置。在步骤604,控制器102将其命令指针从引用主数据结构切换到替代数据结构。在步骤604切换的命令指针可以包括存储在上述队列指针446中的任何或多个指针。在一些实施例中,步骤602和604的顺序可以切换。在一些实施例中,步骤602和步骤604可以同时执行。在步骤606,响应于命令指针被切换,控制器102针对替代数据结构而不是主数据结构来执行。在图9的过程的一个示例实现方式中,存储器系统是固态驱动器,其将正在被重放的一组命令保存到主机系统上的存储器,随后将命令从主机系统上的存储器传输回固态驱动器,并在固态驱动器上执行传输的命令。
图10是描述用于重放(或重新执行)命令序列的一个实施例的流程图。图10的过程提供了图9的过程的更详细的实现方式,并且还表示图7的步骤504的示例实施例。在图10的步骤702中,控制器102排空当前活动命令。也就是说,控制器102执行活动命令缓冲器442中剩余的所有命令。在步骤704,控制器102产生处理暂停标志(也称为暂停标志),如图2中的PP 151描绘的。在一个实施例中,处理暂停标志向主机120指示控制器102正忙,因此主机120应该停止发送命令,直到控制器102清除该标志。在步骤706,控制器102向主机120发送请求,以分配主机存储器缓冲器410中的空间。在步骤708,控制器102在主机存储器缓冲器410的分配的空间中创建替代队列和相关联的指针。图9的步骤602讨论了向替代数据结构写入命令。替代数据结构的一个示例是在步骤708创建的替代队列和相关联的指针。在步骤710,控制器102将主队列的所有当前指针和门铃的值复制到控制器102中的临时缓冲器。主队列是数据结构404、406和408的队列。替代队列是存储在主机存储器缓冲器410中的数据结构404、406和408的副本。在步骤710,存储在队列指针446中的指针和存储在门铃寄存器444中的门铃寄存器值被复制到临时缓冲器。在步骤712,指针和门铃的新值被写入门铃寄存器444和队列指针446,以指向存储在主机存储器缓冲器410中的替代队列。因此,步骤710和712类似于图9的步骤604。
图11是描绘主机存储器124和控制器122的逻辑框图。也就是说,图11示出了与图6相同的结构;然而,图11示出了在图10的步骤712之后该结构的状态。可以看到,主机存储器缓冲器410现在包括替代数据结构780、782和784,其包括存储在数据结构404、406和408中的队列的副本。当被创建时,替代数据结构780、782、784的队列可以没有数据,或者可以具有从数据结构404、406、408的队列复制的数据。替代数据结构包括管理提交队列和管理完成队列、核心0提交队列和核心0完成队列、和核心1提交队列和核心1完成队列以及相关联的指针。队列指针446包括指向数据结构780、782和784而不是数据结构404、406和408的新指针。例如,图11示出了队列指针446,该队列指针446包括管理队列的提交队列头部指针(SQHPA’)、管理队列的提交队列尾部指针(SQTPA’)、管理队列的完成队列头部指针(CQHPA’)、管理队列的完成队列尾部指针(CQTPA’)、核心0的提交队列头部指针(SQHP0’)、核心0的提交队列尾部指针(SQTP0’)、核心0的完成队列头部指针(CQHP0’)、核心0的完成队列尾部指针(CQTP 0’),核心1的提交队列头部指针(SQHP1’),核心1的提交队列尾部指针(SQTP1’),核心1的完成队列头部指针(CQHP1’),以及核心1的完成队列尾部指针(CQTP1’)。
门铃寄存器444的值已经被更新以指向数据结构780、782和784。例如,图11示出了门铃寄存器444,该门铃寄存器444包括管理队列的提交队列尾部门铃(SQTDBA’)、管理队列的完成队列头部门铃(CQHDBA’)、核心0的提交队列尾部门铃(SQTDB 0’)、核心0的完成队列头部门铃(CQHDB 0’)、核心1的提交队列尾部门铃(SQTDB 1’)和核心1的完成队列头部门铃(CQHDB 1’)。
图11示出了由于控制器102在步骤702排空活动命令,活动命令缓冲器442中不再有命令。此外,命令日志440包括在图8的步骤556中添加到命令日志440的记录的命令、指针、门铃和时间戳(和/或其他定时信息)。
回顾图10,在步骤712之后,控制器102在执行步骤714、716、718和720的过程的同时执行步骤730。只要命令日志440中有命令(步骤714),则控制器将该命令写入主机存储器缓冲器410中的提交队列(这是替代提交队列)。使用上面讨论的示例,控制器120将命令写入核心0的提交队列。在步骤718,控制器102更新在步骤716写入的主机存储器缓冲器410中的替代队列的指针。例如,控制器102更新主机存储器缓冲器410中的提交队列尾部指针(SQTP0)(数据结构782)。在步骤720,门铃寄存器444的适当的门铃将被写入以反映来自步骤716的提交队列尾部指针(SQTP0)中的更新。例如,门铃寄存器SQTDB 0’将在步骤720被写入。当命令日志440中不再有命令时(步骤714),则在步骤742处,队列指针和门铃被恢复到在命令序列的重放之前的它们的值。也就是说,队列指针和门铃将被存储为步骤706之前存在的值。在步骤744,清除处理暂停标志,使得系统再次进入正常操作,并且允许主机102发送新命令。
在执行步骤714-720的同时,执行步骤730,在该步骤730中,执行下一个命令(在重放模式下)。此时,控制器102响应于在步骤720门铃被写入,执行来自数据结构780、782和784的替代队列的命令。步骤730由I/O自动化引擎432和闪存转换层430以与命令被正常执行相同的方式执行。类似地,步骤702由I/O自动化引擎432和闪存转换层430执行。然而,在一个实施例中,步骤704-720和742-744由命令重放引擎438执行。
图12是描述用于重放命令(或在重放模式下针对替代队列执行命令)的一个实施例的流程图。也就是说,图12的过程是图10的步骤730的一个示例实现方式,其包括控制器102在主机120上执行来自主机存储器缓冲器410的命令。在步骤800,命令重放引擎438将来自命令日志442的命令写入主机存储器缓冲器410中的提交队列中的一个。步骤800类似于图10的步骤716。在图12的步骤802中,命令重放引擎438调整提交队列的尾部指针(尾部指针驻留在主机上),以反映添加到提交队列的命令。图12的步骤802类似于图10的步骤718。在图12的步骤804中,命令重放引擎438根据命令日志440中的时间戳标识的定时,通过将更新的提交队列尾部指针写入控制器102上的提交队列门铃,按提交队列的门铃。图12的步骤804类似于图10的步骤720。
图12的剩余步骤包括由I/O自动化引擎432和闪存转换层430执行命令。在图12的步骤806中,响应于对提交队列门铃写入,如果一个以上的提交队列具有新条目,则控制器(例如,I/O自动化引擎432)执行判优。响应于对提交队列门铃写入,控制器基于提交队列头部指针和执行的判优获取下一个命令。从主机存储器缓冲器410中的替代提交队列中获取该命令。在图12的步骤810中,获取的命令被存储在活动命令缓冲器442中。在步骤812,响应于获取命令,控制器102更新控制器102上的适当的提交队列头部指针。在步骤814,控制器102执行来自活动命令缓冲器442的命令。命令的执行可以包括使用闪存转换层430来执行到非易失性存储器封装104的写入或从非易失性存储器封装104读取。在图12的步骤816中,在执行命令之后,控制器102基于仅驻留在控制器102中的完成队列尾部指针将结果写入完成队列。在步骤818,由控制器102将完成队列尾部指针递增一。在步骤820,控制器102在主机120上生成中断。中断标识完成队列。然而在这种情况下,完成队列是主机存储器缓冲器410中的替代队列。主机120不知道这些替代队列。因此,主机120不执行任何响应于中断的动作(步骤822)。在步骤824,命令重放引擎438在读取完成队列之后更新完成队列头部指针。在步骤826,命令重放引擎438将更新的完成队列头部指针写入完成队列门铃。
上述技术提供了存储器系统,该存储器系统在最初执行命令序列之后重放或重新执行这些命令。通过重放或重新执行这些命令,可以对系统进行调试,以标识问题的源或解决问题的方法。
一个实施例包括存储器系统,该存储器系统包括非易失性存储器和连接到非易失性存储器的控制器。控制器被配置为将一组命令写入主机的物理存储器中的替代数据结构,并将其命令指针从引用主数据结构切换到引用替代数据结构。响应于命令指针被切换,控制器被配置为针对替代数据结构而不是主数据结构来执行。
一个实施例包括方法,该方法包括固态驱动器将一组命令保存在连接到固态驱动器的主机系统上的存储器中;将命令从主机系统上的存储器传输到固态驱动器;以及在固态驱动器上执行传输的命令。
一个实施例包括装置,该装置包括被配置为连接到主机的主机接口、被配置为连接到非易失性存储器的存储器接口以及连接到主机接口和存储器接口的处理器。处理器被配置为执行用于存储器操作的命令序列。处理器被配置为通过经由主机接口将命令序列的副本写入主机上的物理存储器并执行来自主机上的物理存储器的命令序列的副本来重放命令序列。
一个实施例包括固态驱动器,该固态驱动器包括非易失性存储器裸芯和连接到非易失性存储器裸芯的控制器。控制器被配置为与固态驱动器外部的主机通信。控制器包括被配置为存储从主机接收到的命令序列的命令日志和部件,该部件用于通过从命令日志读取命令、将读取的命令写入主机上的存储器以及在控制器处执行来自主机上的存储器的命令,在命令序列已经被控制器执行之后重放命令序列。
在一个实施例中,用于重放命令序列的部件包括在处理器上运行的软件,诸如,例如在执行图9或图10的过程的控制器102上运行的命令重放引擎438,以及这些过程上的其他变化。也可以使用作为存储器控制器的部分的其他软件或硬件。
就本文档的目的而言,说明书中对“实施例”、“一个实施例”、“一些实施例”或“另一实施例”的引用可以用于描述不同的实施例或相同的实施例。
就本文档的目的而言,连接可以是直接连接或间接连接(例如,经由一个或多个其他部件)。在一些情况下,当元件被称为连接或耦合到另一元件时,该元件可以直接地连接到另一元件,或者经由中间元件间接连接到另一元件。当元件被称为直接连接到另一元件时,则在该元件和另一元件之间没有中间元件。如果两个设备直接或间接连接,从而可以在它们之间传递电信号,那么它们就是“通信的”。
就本文档的目的而言,术语“基于”可以解读为“至少部分地基于”。
就本文档的目的而言,在没有额外上下文的情况下,诸如“第一”对象、“第二”对象以及“第三”对象的数值术语的使用可能并不暗示着对象的排序,而是可以用于以标识不同对象的标识目的。
就本文档的目的而言,术语“一组”对象可以指“一组”一个或多个对象。
前面的详细描述是为了说明和描述的目的而给出的。其并不旨在穷举或限制公开的精确形式。根据上述教导,许多修改和变化是可能的。选择所述的实施例是为了最好地解释提出的技术的原理及其实际应用,从而使得本领域的其他技术人员能够在各种实施例中最佳地利用它,并且具有适合于设想到的特定用途的各种修改。该范围旨在由所附权利要求来限定。
Claims (17)
1.一种存储器系统,包括:
非易失性存储器;以及
连接到所述非易失性存储器的控制器,其中所述控制器被配置为:
执行一组命令,以及
在执行所述一组命令之后,将所述一组命令写入主机的物理存储器中的替代数据结构,
将命令指针从引用主数据结构切换到引用所述替代数据结构,以及
响应于所述命令指针被切换,针对所述替代数据结构而不是所述主数据结构执行来重放所述一组命令。
2.根据权利要求1所述的存储器系统,其中:
所述主数据结构由所述主机创建;
响应于来自所述控制器的请求,创建所述替代数据结构;以及
所述控制器还被配置为:
从所述主机的物理存储器中的主数据结构接收所述一组命令,
执行命令,并且
在执行所述命令之后,通过将所述一组命令写入所述替代数据结构并针对所述替代数据结构执行来重放所述一组命令。
3.根据权利要求1所述的存储器系统,其中:
所述控制器被配置为通过将所述一组命令从所述主机传输到所述存储器系统并执行来自所述存储器系统的命令来针对所述替代数据结构执行;以及
所述主机位于所述存储器系统外部,并且被配置为连接到所述存储器系统。
4.根据权利要求1所述的存储器系统,其中,所述控制器还被配置为:
从所述主机接收所述一组命令;
在将所述一组命令写入所述替代数据结构之前,将所述一组命令存储在所述存储器系统的日志中;以及
将所述一组命令从所述日志写入所述替代数据结构。
5.根据权利要求4所述的存储器系统,其中,所述控制器还被配置为:
在所述日志中存储所述一组命令的定时信息;以及
使用所述定时信息执行来自所述替代数据结构的所述一组命令。
6.根据权利要求1所述的存储器系统,其中,所述控制器还被配置为:
当重放所述一组命令时:
在针对所述替代数据结构执行之前,向所述主机声明暂停标志;以及
在针对所述替代数据结构执行之后,移除所述暂停标志。
7.根据权利要求1所述的存储器系统,其中,所述控制器还被配置为:
当重放所述一组命令时:
完成当前活动命令;
在针对所述替代数据结构执行之前,向所述主机声明暂停标志;
为所述替代数据结构,在所述主机的物理存储器中分配存储器空间;
触发所述替代数据结构中的所述一组命令的执行;以及
在针对所述替代数据结构执行之后,移除针对所述主机的暂停标志。
8.根据权利要求1所述的存储器系统,其中:
所述主数据结构是由所述主机创建和管理、并且在所述主机上的第一队列;以及
所述替代数据结构是在所述主机上的第二队列。
9.根据权利要求1所述的存储器系统,其中:
所述替代数据结构包括替代提交队列和替代完成队列;以及
所述主数据结构包括所述主机的物理存储器中的主提交队列和主完成队列。
10.根据权利要求1-9中任一项所述的存储器系统,其中:
所述命令指针包括提交队列尾部指针;以及
所述控制器还被配置为:
维持提交队列头部指针、完成队列头部指针和完成队列尾部指针;
将所述提交队列头部指针、所述完成队列头部指针和所述完成队列尾部指针从引用所述主数据结构切换到引用所述替代数据结构;以及
通过以下方式针对所述替代数据结构执行:
使用所述提交队列尾部指针和所述提交队列头部指针以访问替代提交队列中的一个或多个命令,并执行所述一个或多个命令;
使用所述完成队列头部指针和所述完成队列尾部指针以在替代完成队列中插入一个或多个完成条目;以及
在所述替代完成队列中插入一个或多个完成条目后,中断所述主机。
11.一种方法,包括:
固态驱动器将一组命令保存在连接到所述固态驱动器的主机系统上的存储器中;
将命令从所述主机系统上的存储器传输到所述固态驱动器;
在所述固态驱动器上执行传输的命令;以及
在将所述一组命令保存在所述主机系统上的存储器中之前,所述固态驱动器执行所述一组命令;
其中将所述一组命令保存在所述主机系统上的存储器中、传输所述命令以及执行所述传输的命令一起包括所述固态驱动器重新执行所述一组命令。
12.根据权利要求11所述的方法,还包括:
当在将所述一组命令保存在所述主机系统上的存储器中之前执行所述一组命令时,所述固态驱动器将所述一组命令存储在日志中,其中将所述一组命令保存在所述主机系统上的存储器中包括,从所述日志中读取所述一组命令并将读取的所述一组命令传输到所述主机系统上的存储器。
13.根据权利要求11所述的方法,还包括:
当重新执行所述一组命令时,所述固态驱动器指示所述主机暂停发送用于存储器操作的命令。
14.一种装置,包括:
主机接口,被配置为连接到主机;
存储器接口,被配置为连接到非易失性存储器;以及
处理器,连接到所述主机接口和所述存储器接口,其中,所述处理器被配置为:执行用于存储器操作的命令序列,并且通过经由主机接口将命令序列的副本写入主机上的物理存储器并且执行来自主机上的物理存储器的命令序列的副本来重放命令序列。
15.根据权利要求14所述的装置,还包括本地存储器,连接到处理器,并且被配置为:存储将被写入主机上的物理存储器的命令序列的副本;以及在存储指向主机上的第一存储器结构的指针,其中,处理器还被配置为响应于处理器重放命令序列,改变指针以引用主机上的第二存储器结构;并且命令序列的副本存储在主机上的第二存储器结构中。
16.一种固态驱动器,包括:
非易失性存储器裸芯;以及
控制器,连接到非易失性存储器裸芯,并且被配置为与固态驱动器外部的主机通信,控制器包括:
命令日志,被配置为存储从主机接收到的命令序列;以及
部件,用于通过从命令日志读取命令、将读取的命令写入主机上的存储器以及在控制器处执行来自主机上的存储器的命令,在命令序列已经被控制器执行之后重放命令序列。
17.根据权利要求16所述的固态驱动器,其中,控制器还被配置为:在重放命令序列之前执行命令序列;并且与在重放之前执行命令序列相协调地将命令序列存储在命令日志中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/912,944 US10642536B2 (en) | 2018-03-06 | 2018-03-06 | Non-volatile storage system with host side command injection |
US15/912,944 | 2018-03-06 | ||
PCT/US2018/061826 WO2019172971A1 (en) | 2018-03-06 | 2018-11-19 | Non-volatile storage system with host side command injection |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111164566A CN111164566A (zh) | 2020-05-15 |
CN111164566B true CN111164566B (zh) | 2023-08-01 |
Family
ID=67843970
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880064023.5A Active CN111164566B (zh) | 2018-03-06 | 2018-11-19 | 具有主机侧命令注入的非易失性存储系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10642536B2 (zh) |
CN (1) | CN111164566B (zh) |
DE (1) | DE112018004322T5 (zh) |
WO (1) | WO2019172971A1 (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11675659B2 (en) * | 2016-07-15 | 2023-06-13 | Advanced Micro Devices, Inc. | DDR memory error recovery |
KR20190110360A (ko) * | 2018-03-20 | 2019-09-30 | 에스케이하이닉스 주식회사 | 컨트롤러, 이를 포함하는 시스템 및 그 동작 방법 |
US11561912B2 (en) * | 2020-06-01 | 2023-01-24 | Samsung Electronics Co., Ltd. | Host controller interface using multiple circular queue, and operating method thereof |
TWI758745B (zh) * | 2020-06-10 | 2022-03-21 | 慧榮科技股份有限公司 | 排程主機命令執行的電腦程式產品及方法及裝置 |
CN113778317A (zh) | 2020-06-10 | 2021-12-10 | 慧荣科技股份有限公司 | 计算机可读取存储介质、调度主机命令的方法及装置 |
CN111857579B (zh) * | 2020-06-30 | 2024-02-09 | 广东浪潮大数据研究有限公司 | 一种ssd盘片控制器复位方法、系统、装置及可读存储介质 |
US11355214B2 (en) * | 2020-08-10 | 2022-06-07 | Micron Technology, Inc. | Debugging memory devices |
US11755223B2 (en) | 2020-09-29 | 2023-09-12 | EMC IP Holding Company LLC | Systems for modular hybrid storage devices |
US11586508B2 (en) | 2020-09-29 | 2023-02-21 | EMC IP Holding Company LLC | Systems and methods for backing up volatile storage devices |
US11550506B2 (en) * | 2020-09-29 | 2023-01-10 | EMC IP Holding Company LLC | Systems and methods for accessing hybrid storage devices |
US11861217B2 (en) | 2020-10-05 | 2024-01-02 | Western Digital Technologies, Inc. | DRAM-less SSD with command draining |
US11500589B2 (en) | 2020-10-05 | 2022-11-15 | Western Digital Technologies, Inc. | Command draining using host memory buffer |
US20220171572A1 (en) * | 2020-12-01 | 2022-06-02 | Micron Technology, Inc. | Queue configuration for host interface |
US11494124B2 (en) | 2021-02-17 | 2022-11-08 | Micron Technology, Inc. | Inversion refresh of physical memory location |
US11899941B2 (en) * | 2021-11-11 | 2024-02-13 | Samsung Electronics Co., Ltd. | Storage device and operating method thereof |
US11914900B2 (en) | 2022-05-31 | 2024-02-27 | Western Digital Technologies, Inc. | Storage system and method for early command cancelation |
TWI807919B (zh) * | 2022-07-14 | 2023-07-01 | 群聯電子股份有限公司 | 資料重讀方法、記憶體儲存裝置及記憶體控制電路單元 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101411134A (zh) * | 2006-03-31 | 2009-04-15 | 高通股份有限公司 | 用于高速媒体接入控制的存储器管理 |
CN105190572A (zh) * | 2013-06-05 | 2015-12-23 | 英特尔公司 | 用于防止未经授权的堆栈转移的系统和方法 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5931954A (en) * | 1996-01-31 | 1999-08-03 | Kabushiki Kaisha Toshiba | I/O control apparatus having check recovery function |
DE10141092A1 (de) | 2001-08-22 | 2003-03-06 | Siemens Ag | Verfahren zur Übertragung von Datenpaketen in einem Funk-Kommunikationssystem |
US7266750B1 (en) | 2002-07-10 | 2007-09-04 | Maxtor Corporation | Error recovery strategies for iterative decoders |
DE60208921T2 (de) | 2002-09-24 | 2006-09-21 | Telefonaktiebolaget Lm Ericsson (Publ) | Verfahren und vorrichtung zur übertragung fehlertoleranter daten, wobei eine wiederholte übertragung fehlerhafter daten ausgeführt wird, bis die anzahl der übrigen fehlerhaften daten akzeptabel ist |
KR100681429B1 (ko) | 2005-10-24 | 2007-02-15 | 삼성전자주식회사 | 반도체 메모리 장치 및 그것의 비트 에러 검출 방법 |
US7904793B2 (en) | 2007-03-29 | 2011-03-08 | Sandisk Corporation | Method for decoding data in non-volatile storage using reliability metrics based on multiple reads |
US7966550B2 (en) | 2007-03-31 | 2011-06-21 | Sandisk Technologies Inc. | Soft bit data transmission for error correction control in non-volatile memory |
US8359522B2 (en) | 2007-05-01 | 2013-01-22 | Texas A&M University System | Low density parity check decoder for regular LDPC codes |
US7849383B2 (en) | 2007-06-25 | 2010-12-07 | Sandisk Corporation | Systems and methods for reading nonvolatile memory using multiple reading schemes |
US8301963B2 (en) | 2007-10-23 | 2012-10-30 | Spansion Llc | Low-density parity-check code based error correction for memory device |
US8301979B2 (en) | 2008-10-07 | 2012-10-30 | Sandisk Il Ltd. | Low density parity code (LDPC) decoding for memory with multiple log likelihood ratio (LLR) decoders |
US8321627B1 (en) | 2011-10-06 | 2012-11-27 | Google Inc. | Memory operation command latency management |
US20130151755A1 (en) | 2011-12-12 | 2013-06-13 | Reuven Elhamias | Non-Volatile Storage Systems with Go To Sleep Adaption |
US9438483B2 (en) | 2012-10-15 | 2016-09-06 | At&T Intellectual Property I, L.P. | System and method of implementing quality of service over a packet-based Network |
US9201777B2 (en) | 2012-12-23 | 2015-12-01 | Advanced Micro Devices, Inc. | Quality of service support using stacked memory device with logic die |
US9110813B2 (en) | 2013-02-14 | 2015-08-18 | Avago Technologies General Ip (Singapore) Pte Ltd | Cache load balancing in storage controllers |
US9082502B2 (en) | 2013-10-10 | 2015-07-14 | Sandisk Technologies Inc. | Bit line and compare voltage modulation for sensing nonvolatile storage elements |
CN105794263B (zh) | 2014-01-08 | 2019-08-13 | 华为技术有限公司 | 用于网络辅助自适应流中协商服务质量(简称QoS)的方法和系统 |
US9448936B2 (en) * | 2014-01-13 | 2016-09-20 | Apple Inc. | Concurrent store and load operations |
US9417945B2 (en) | 2014-03-05 | 2016-08-16 | International Business Machines Corporation | Error checking and correction for NAND flash devices |
US9563382B2 (en) | 2014-06-05 | 2017-02-07 | Sandisk Technologies Llc | Methods, systems, and computer readable media for providing flexible host memory buffer |
KR101699377B1 (ko) | 2014-07-02 | 2017-01-26 | 삼성전자주식회사 | 불휘발성 메모리 및 메모리 컨트롤러를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법 |
US10268584B2 (en) | 2014-08-20 | 2019-04-23 | Sandisk Technologies Llc | Adaptive host memory buffer (HMB) caching using unassisted hinting |
US10474618B2 (en) | 2014-09-04 | 2019-11-12 | Western Digital Technologies, Inc. | Debug data saving in host memory on PCIE solid state drive |
US10101763B2 (en) | 2015-07-29 | 2018-10-16 | Sandisk Technologies Inc. | Interface adjustment processes for a data storage device |
US10140036B2 (en) * | 2015-10-29 | 2018-11-27 | Sandisk Technologies Llc | Multi-processor non-volatile memory system having a lockless flow data path |
US10235102B2 (en) * | 2015-11-01 | 2019-03-19 | Sandisk Technologies Llc | Methods, systems and computer readable media for submission queue pointer management |
US9721662B1 (en) | 2016-01-13 | 2017-08-01 | Sandisk Technologies Llc | Non-volatile memory with efficient programming |
US20170242606A1 (en) | 2016-02-19 | 2017-08-24 | Sandisk Technologies Llc | Methods and systems for transitioning to and from different storage device power states using host memory buffer (hmb) |
US10055377B2 (en) | 2016-02-24 | 2018-08-21 | Western Digital Technologies, Inc. | Using a proprietary framework on a standards-based embedded device |
US10521118B2 (en) | 2016-07-13 | 2019-12-31 | Sandisk Technologies Llc | Methods, systems, and computer readable media for write classification and aggregation using host memory buffer (HMB) |
KR20180016679A (ko) | 2016-08-04 | 2018-02-19 | 삼성전자주식회사 | 호스트 메모리를 이용하는 데이터 저장 장치 및 그것의 동작 방법 |
US10223199B2 (en) | 2016-09-23 | 2019-03-05 | Sandisk Technologies Llc | Non-volatile memory configured to return error reduced read data |
US10191812B2 (en) * | 2017-03-30 | 2019-01-29 | Pavilion Data Systems, Inc. | Recovery mechanism for low latency metadata log |
-
2018
- 2018-03-06 US US15/912,944 patent/US10642536B2/en active Active
- 2018-11-19 WO PCT/US2018/061826 patent/WO2019172971A1/en active Application Filing
- 2018-11-19 DE DE112018004322.3T patent/DE112018004322T5/de active Pending
- 2018-11-19 CN CN201880064023.5A patent/CN111164566B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101411134A (zh) * | 2006-03-31 | 2009-04-15 | 高通股份有限公司 | 用于高速媒体接入控制的存储器管理 |
CN105190572A (zh) * | 2013-06-05 | 2015-12-23 | 英特尔公司 | 用于防止未经授权的堆栈转移的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111164566A (zh) | 2020-05-15 |
WO2019172971A1 (en) | 2019-09-12 |
US10642536B2 (en) | 2020-05-05 |
DE112018004322T5 (de) | 2020-05-14 |
US20190278514A1 (en) | 2019-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111164566B (zh) | 具有主机侧命令注入的非易失性存储系统 | |
US10990311B2 (en) | Multi-stream non-volatile storage system | |
US11487434B2 (en) | Data storage device and method for adaptive command completion posting | |
US10572185B2 (en) | Non-volatile storage system with command replay | |
KR101702280B1 (ko) | 명령어 큐잉 | |
CN111443866B (zh) | 能从非正常关机迅速恢复的非易失性存储系统及其方法 | |
EP2715730B1 (en) | Apparatus including memory system controllers and related methods for memory management using blok tables | |
US11137914B2 (en) | Non-volatile storage system with hybrid command | |
US10331345B2 (en) | Method and apparatus for reducing silent data errors in non-volatile memory systems | |
US11119954B2 (en) | Host emulator | |
EP3474282A2 (en) | Method and apparatus for adjusting demarcation voltages based on cycle count metrics | |
WO2012166531A2 (en) | Apparatus including memory system controllers and related methods | |
WO2012166535A2 (en) | Apparatus including memory system controllers and related methods | |
EP2715732A2 (en) | Apparatus including memory system controllers and related methods | |
US20190214087A1 (en) | Non-volatile storage system with decoupling of write transfers from write operations | |
KR20190115072A (ko) | 멀티코어 온-다이 메모리 마이크로컨트롤러 | |
US20180059943A1 (en) | Media Controller and Method for Management of CPU-Attached Non-Volatile Memory | |
WO2015176040A1 (en) | Memory devices and methods having instruction acknowledgement | |
CN114078526A (zh) | 在三维交叉点存储器架构中浮置用于取消选定地址线的解码器的设备、系统和方法 | |
US11960730B2 (en) | Distributed exception handling in solid state drives | |
US11656994B2 (en) | Non-volatile memory with optimized read |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |