使用控制器存储器缓冲区进行推测性执行命令的系统和方法与流程

文档序号:18301856发布日期:2019-07-31 10:15阅读:224来源:国知局
使用控制器存储器缓冲区进行推测性执行命令的系统和方法与流程

本申请要求2017年3月24日提交的美国申请no.15/468,620和2017年5月3日提交的美国申请no.15/585,827的优先权,这两个申请据此全文以引用方式并入本文。



背景技术:

nvmexpress(nvme)是访问经由pciexpress(pcie)总线附接的非易失性存储介质的标准。nvme可与多种非易失性存储介质诸如固态驱动器(ssd)一起使用。nvme的一个焦点涉及主机设备(其可访问和/或写入非易失性存储介质)与存储器设备(其包括非易失性存储介质)之间的i/o通信。在这一点上,nvme实现配对的提交队列和完成队列机制,其中主机设备上的主机软件将命令放置到提交队列中。存储器设备控制器将完成放置到相关联的完成队列上。

附图说明

并入本说明书中并且构成本说明书的一部分的附图示出了本发明的各个方面,并与说明书一起用于解释其原理。在方便的情况下,相同的附图标记将在整个附图中用来指代相同或相似的元件。

图1a是示例性非易失性存储器系统的框图。

图1b是包括多个非易失性存储器系统和主机的存储模块的框图。

图1c是分级存储系统的框图。

图2a是图1a的非易失性存储器系统的控制器的示例性部件的框图。

图2b是图1a的非易失性存储器系统的非易失性存储器管芯的示例性部件的框图。

图3是主机设备和nvme控制器的框图,示出了主机设备和存储器设备请求和处理nvme命令的序列。

图4是主机设备和存储器设备的其他示例性部件的框图。

图5是提交队列中的命令的推测性执行的流程图。

图6是提交队列中的读取命令的推测性执行的流程图。

具体实施方式

概述

nvme基于配对的提交队列(sq)和完成队列(cq)。主机设备使用主机软件将命令放置到相应的提交队列中。存储器设备经由存储器设备控制器将条目放置在相关联的完成队列上,其中条目指示命令的完成执行。在一个实施方式中,提交队列和完成队列被分配在主机设备存储器中,诸如主机存储器缓冲区中。对主机存储器缓冲区中的队列的分配可在物理上位于连续或非连续的位置。因此,对于驻留在主机存储器中的提交队列,存储器设备控制器进行从主机存储器的pciexpress(pcie)读取,以便获取队列条目。

另选地,提交队列和完成队列可存储在存储器设备中。例如,控制器存储器缓冲区(cmb)使得主机设备能够将提交队列和完成队列放置在控制器存储器中。因此,基于控制器存储器的队列以与基于主机存储器的队列相同的方式使用,不同之处在于所使用的存储器地址位于存储器设备内(例如,位于存储器设备控制器自身的存储器内而不是主机存储器内)。具体地讲,管理员和/或i/o队列可放置在cmb内,如下面更详细讨论的。因此,在一个实施方式中,对于特定队列,与特定队列相关联的所有存储器完全驻留在cmb中或主机存储器中。控制器存储器中的提交队列使得主机软件能够将整个提交队列条目直接写入存储器设备控制器的内部存储器空间,从而避免从存储器设备控制器到主机设备的一次读取。

队列的示例性类型包括管理员队列和i/o队列。管理员队列(诸如管理员提交和完成队列)是管理提交队列,其包括对存储器设备的管理命令。示例性管理命令包括但不限于:获得日志页面(例如,从nvme设备检索nvme日志页面并提供重新调整的结构);识别(例如,返回描述有关nvme子系统、控制器或命名空间的信息的数据缓冲区)、获得特征(例如,检索所指定的特征的属性)和设置特征(例如,指定所指示的特征的属性)。列出的管理命令仅用于说明目的。i/o队列可涉及数据传输,诸如读取命令(例如,从闪存存储器读取数据)和写入命令(例如,将数据写入闪存存储器)。

通常,主机设备首先将命令写入提交队列,然后通过更新提交队列尾部门铃寄存器来通知存储器设备,如下面更详细讨论的。响应于主机设备对提交队列上的命令的通知,存储器设备控制器开始处理命令。在一个实施方式中,对提交队列尾部门铃寄存器的存储器写入请求不应设置宽松的排序位,以确保其在所有写入cmb之后到达存储器设备控制器。

在一个实施方式中,存储器设备控制器在主机设备通知提交队列上的命令之前(例如,在经由提交队列尾部门铃寄存器通知之前)开始处理命令。例如,存储器设备可确定主机设备是否已经将命令写入提交队列。这可通过几种方式中的一者进行。在一种方式中,存储器设备可监测物理上位于控制器存储器缓冲区中的nvme提交队列,从而使得存储器设备能够甚至在接收来自主机设备的对应通知(例如,门铃写入事务)之前开始推测性执行命令。在另一种方式中,存储器设备可监测主机设备和存储器设备之间的通信接口(例如,pcie总线的入口),以确定主机设备是否已经发送了指示将命令写入提交队列的任何通信。

响应于存储器设备确定主机设备已经将命令写入提交队列,存储器设备可解析命令,并且响应于确定一个或多个新命令位于提交队列上,可开始以推测性的方式执行一个或多个新命令。

各种命令可受到推测性执行。例如,读取命令可受到推测性读取命令执行,触发读取先行(rla)算法。具体地讲,可将受到读取命令的相关数据从闪存存储器获取到时间缓冲区。当主机设备向存储器设备通知该命令时(例如,通过向对应的提交队列门铃寄存器发出写入事务来将相关命令排入队列),可立即从时间缓冲区获取数据并将其提供给主机设备。在这一点上,rla命中可导致更好的闪存存储器延时(例如,感测和传输时间),从而产生更好的性能。作为另一个实例,写入命令可受到推测性写入命令执行。例如,可在主机设备对命令进行排队之前进行用于进行写入命令的一个或多个步骤(诸如,获取闪存转换层(ftl)表)。因此,可改善存储器设备的整体性能。

在一个实施方式中,存储器设备选择性地进行命令的推测性执行。在第一具体实施方式中,存储器设备可分析命令,并基于命令的类型,可在经由门铃寄存器通知主机设备在提交队列上放置命令之前确定是否推测性地开始执行命令。如本文所讨论的,具有不同类型的命令,诸如读取命令、写入命令等。在nvme中,读取命令包括指向prp列表的指针,其中prp列表指示主机存储器中存储器设备要写入从闪存存储器读取的数据的部分。同样,写入命令包括指向prp列表的指针,该列表指示主机存储器中要写入闪存的数据所在的部分(即,存储器设备使用prp列表来读取数据的主机存储器位置,其中被读取的数据被写入闪存存储器)。

在第二具体实施方式中,存储器设备可分析命令的至少一个方面,诸如命令的优先级,可在经由门铃寄存器通知主机设备在提交队列上放置命令之前确定是否(或何时)推测性地开始执行命令。如共同未决的美国申请no.____(代理人参考号10519-3193(sda-2985-us)),其全部内容以引用方式并入本文中所讨论的,存储器设备可基于一个或多个标准来确定命令的优先级(或用于进行一个或多个阶段),该一个或多个标准包括以下任何一个、任何组合或全部:(1)相应命令的优先级;(2)存储器设备的内件(例如,管芯的状态或存储器设备的处理能力,如下面所讨论的);(3)功率消耗;(4)主机设备和存储器设备之间的通信接口的状态(例如,入口路径和/或出口路径的状态);以及(5)受到执行的命令的阶段。根据与命令相关联的优先级,存储器设备可确定命令是否受到推测性执行。在一个示例中,存储器设备确定第一命令和第二命令的优先级,与第一命令相关联的优先级高于与第二命令相关联的优先级。基于所确定的优先级,存储器设备在推测性执行第二命令之前或者代替推测性执行第二命令来进行第一命令的推测性执行。另选地,在存储器设备正在进行第二命令的推测性执行的情况下,存储器设备可停止进行第二命令的推测性执行并且响应于确定主机设备已经将第一命令放置在提交队列上并响应于确定与第一命令相关联的优先级高于与第二命令相关联的优先级而开始推测性执行第一命令。

因此,在第一和第二具体实施方式中,存储器设备仅对存储器设备内部的进程进行推测性执行,而不对涉及主机设备的进程(例如,主机设备外部或者涉及与主机设备通信的进程)进行推测性执行。在这一点上,涉及主机设备的任何进程(诸如读取主机设备上的prp列表)都不是推测性地进行的。然而,可推测性地进行内部进程,诸如从闪存存储器读取、进行错误校正或加密/解密。在这一点上,在具体实施方式中,存储器设备可进行读取命令的推测性执行,但不进行写入命令的推测性执行。更具体地讲,在从主机设备接收到门铃通知之前,存储器设备推测性地进行执行读取命令中的某些进程,诸如进行从闪存存储器的读取、进行错误校正和加密,但不进行关于与主机设备通信的其他进程,诸如驻留在主机设备上的prp列表的读取。

nvme命令执行性能的一个度量是主机设备发出对提交队列的门铃写入和存储器设备将完成消息发布到完成队列之间的时间。使用推测性执行可减少该时间。在这一点上,推测性执行可改善某些命令的性能,诸如读取和写入命令,特别是在低队列深度中。此外,可针对各种命令类型(例如,读取、写入和管理员命令)来改善在pcie总线上测量的命令执行延时。最后,推测性执行可在硬件或固件中实现,从而简化存储器设备内的实施方式。

通常,如果主机设备向提交队列写入命令,则主机设备将通知存储器设备该命令(例如,命令将最终通过主机设备写入相关的尾部门铃寄存器而进行排队)。非典型地,主机设备可将命令写入提交队列,然后用不同的命令重写该命令,然后对不同的命令进行排队。无论如何,推测性执行可考虑到这种非典型情况。

实施方案

以下实施方案描述了用于处理命令的非易失性存储器设备和相关方法。在转向这些和其他实施方案之前,以下段落提供了对可与这些实施方案一起使用的示例性非易失性存储器设备和存储模块的讨论。当然,这些仅仅是示例,并且可使用其他合适类型的非易失性存储器设备和/或存储模块。

图1a是示出非易失性存储器设备100的框图。非易失性存储器设备100可包括控制器102和可由一个或多个非易失性存储器管芯104构成的非易失性存储器。如本文所述,术语管芯指的是在单个半导体基板上形成的一组非易失性存储器单元,以及用于管理那些非易失性存储器单元的物理操作的相关联的电路。控制器102可与主机设备或主机系统进行交互,并且将用于读取、编程和擦除操作的命令序列传输到非易失性存储器管芯104。如下面所讨论的,命令可包括逻辑地址和/或物理地址。

控制器102(可以是闪存存储器控制器)可以采用以下形式:例如处理电路、微处理器或处理器,以及存储可由(微)处理器执行的计算机可读程序代码的计算机可读介质(例如,软件或固件)、逻辑门、开关、专用集成电路(asic)、可编程逻辑控制器和嵌入式微控制器。控制器102可以配置有硬件和/或固件,以执行下面描述并在流程图中示出的各种功能。另外,示出为控制器内部的一些部件也可以存储在控制器外部,并且可以使用其他部件。此外,短语“操作地与...通信”可能意味着直接或间接地(有线或无线)与一个或多个部件通信或通过一个或多个部件通信,其可在本文中示出或未示出。

如本文所用,闪存存储器控制器是管理存储在闪存存储器上的数据并与主机诸如计算机或电子设备通信的设备。除了这里描述的特定功能外,闪存存储器控制器可以具有各种功能。例如,闪存存储器控制器可以对闪存存储器进行格式化以确保存储器正确操作,标出坏的闪存存储器单元,并且分配备用单元以替代将来的故障单元。备用单元中的部分备用单元可以用来容纳固件以操作闪存存储器控制器并实现其他特征。固件的一个示例为闪存转换层。在操作中,当主机设备需要从闪存存储器读取数据或向闪存存储器写入数据时,它将与闪存存储器控制器通信。在一个实施方案中,如果主机设备提供要读取/写入数据的逻辑地址,则闪存存储器控制器可以将从主机接收的逻辑地址转换为闪存存储器中的物理地址。闪存存储器控制器还可以执行各种存储器管理功能,诸如但不限于损耗均衡(分配写入以避免损耗否则将被重复写入的特定存储器块)和垃圾收集(在块已满之后,仅将有效的数据页面移动到新块,因此可以擦除并重用完整块)。

控制器102和非易失性存储器管芯104之间的接口可以是任何合适的闪存接口,诸如切换模式200、400或800。在一个实施方案中,存储器设备100可为基于卡的系统,诸如安全数字(sd)卡或微型安全数字(微sd)卡。在另选的实施方案中,系统100可为嵌入式存储器设备的一部分。

虽然在图1a所示的示例中,非易失性存储器设备100可包括控制器102和非易失性存储器管芯104之间的单个信道,但是本文描述的主题不限于具有单个存储器信道。例如,在一些nand存储器设备架构中,控制器和nand存储器管芯104之间存在2、4、8个或更多个nand信道,这取决于控制器的能力。在本文描述的实施方案中的任一个中,即使在附图中示出单个信道,控制器和存储器管芯104之间也可以存在多于单个信道。

图1b示出了包括多个非易失性存储器设备100的存储模块200。因此,存储模块200可包括存储控制器202,该存储控制器与主机220以及与包括多个非易失性存储器设备100的存储系统204交互。作为示例,存储控制器202和非易失性存储器设备100之间的接口可为总线接口,诸如串行高级技术附件(sata)、外围设备快速互连(pcie)接口、嵌入式多媒体卡(emmc)接口、sd接口或通用串行总线(usb)接口。在一个实施方案中,存储系统200可为固态驱动器(ssd),诸如在便携式计算设备诸如膝上型计算机和平板电脑、以及移动电话中存在的。

图1c是示出分级存储系统250的框图。分级存储系统250可包括多个存储控制器202,该多个存储控制器中的每个存储控制器控制相应的存储系统204。主机系统252可经由总线接口访问分级存储系统250内的存储器。作为示例,示例性总线接口可包括非易失性存储器express(nvme)、以太网光纤信道(fcoe)接口、sd接口、usb接口、sata接口、pcie接口或emmc接口。在一个实施方案中,图1c所示的分级存储系统250可为机架可安装的大容量存储系统,该机架可安装的大容量存储系统可由多个主机计算机访问,诸如在数据中心中或在需要大容量存储的其他位置中可以找到。在一个实施方案中,主机系统252可包括主机220中描述的功能。

图2a是更详细地示出控制器102的示例性部件的框图。控制器102可包括与主机进行交互的前端模块108、与非易失性存储器管芯104进行交互的后端模块110、以及进行非易失性存储器设备100的各种功能的各种其他模块。一般来讲,模块可以是硬件或硬件和软件的组合。例如,每个模块可包括专用集成电路(asic)、现场可编程门阵列(fpga)、电路、数字逻辑电路、模拟电路、离散电路、门或任何其他类型的硬件的组合,或者其组合。除此之外或另选地,每个模块都可包括存储器硬件,该存储器硬件包括可用处理器或处理器电路执行以实现模块的特征中的一个或多个的指令。当模块中的任一个包括存储器的包括可用处理器执行的指令的部分时,模块可包括,或者可不包括处理器。在一些示例中,每个模块可仅为存储器的包括可用处理器执行以实现对应模块的特征的指令的部分,而模块不包括任何其他硬件。由于每个模块都包括至少一些硬件,因此即使在所包括的硬件包括软件时,每个模块也可互换地称为硬件模块。

控制器102可包括缓冲区管理器/总线控制模块114,该缓冲区管理器/总线控制模块管理随机存取存储器(ram)116中的缓冲区并控制内部总线仲裁以在控制器102的内部通信总线117上进行通信。只读存储器(rom)118可存储和/或访问系统引导代码。虽然在图2a中示为与控制器102分开定位,但在其他实施方案中,ram116和rom118中的一者或两者可位于控制器102内。在其他实施方案中,ram116和rom118的部分可以位于控制器102内和控制器102外部。此外,在一些实施方式中,控制器102、ram116和rom118可以位于单独的半导体管芯上。如下面所讨论的,在一个实施方式中,提交队列和完成队列可存储在控制器存储器缓冲区中,该控制器存储器缓冲区可容纳在ram116中。

另外,前端模块108可包括提供与主机或下一级存储控制器的电接口的主机接口120和物理层接口(phy)122。主机接口120类型的选择可取决于所使用的存储器的类型。主机接口120的示例性类型可包括但不限于sata、sataexpress、sas、光纤信道、usb、pcie和nvme。主机接口120通常可有利于传输数据、控制信号和定时信号。

后端模块110可包括错误校正控制器(ecc)引擎124,该ecc引擎对从主机接收的数据字节进行编码,并且对从非易失性存储器管芯104读取的数据字节进行解码和错误校正。如下面更详细讨论的,ecc引擎可为可调的,诸如基于模式生成不同量的ecc数据(例如,在正常编程模式下生成正常模式ecc数据并在突发编程模式下生成突发模式ecc数据,其中突发模式ecc数据大于正常模式ecc数据)。后端模块110还可包括命令定序器126,该命令定序器生成命令序列,诸如编程命令序列、读取命令序列和擦除命令序列,以传输到非易失性存储器管芯104。另外,后端模块110可包括raid(独立驱动器冗余阵列)模块128,该raid模块管理raid奇偶校验的生成和失败数据的恢复。raid奇偶校验可用作写入到非易失性存储器设备100中的数据的附加级的完整性保护。在一些情况下,raid模块128可以是ecc引擎124的一部分。存储器接口130向非易失性存储器管芯104提供命令序列,并且从非易失性存储器管芯104接收状态信息。连同命令序列和状态信息,可通过存储器接口130传送要编程到非易失性存储器管芯104中和从非易失性存储器管芯读取的数据。在一个实施方案中,存储器接口130可为双倍数据速率(ddr)接口,诸如切换模式200、400或800接口。闪存控制层132可控制后端模块110的总体操作。

因此,控制器102可包括用于管理存储系统100的操作的一个或多个管理表。一种类型的管理表包括逻辑地址到物理地址映射表。逻辑地址到物理地址映射表的大小可随着存储器大小而增大。在这一点上,用于高容量存储设备(例如,大于32g)的逻辑地址到物理地址映射表可能太大而不能存储在sram中,并且可与用户和主机数据一起存储在非易失性存储器104中。因此,对非易失性存储器104的访问可首先要求从非易失性存储器104读取逻辑地址到物理地址映射表。

图2a中所示的非易失性存储器设备100的附加模块可包括媒体管理层138,该媒体管理层进行非易失性存储器管芯104的存储器单元的损耗均衡。非易失性存储器设备100还可包括其他分立部件140,诸如外部电气接口、外部ram、电阻器、电容器或可与控制器102进行交互的其他部件。在另选的实施方案中,raid模块128、媒体管理层138和缓冲区管理/总线控制器114的一者或多者是控制器102中可能不需要的任选部件。

图2a中所示的非易失性存储器设备100的其他模块可包括主机命令写入模块111、推测性命令执行模块112以及主机盖写确定模块113。这些模块被示为与非易失性存储器设备100的其他模块分开,但在其他配置中,它们中的一个或多个可以是其他模块中的任一个的一部分。

如下面更详细讨论的,存储器设备可在主机设备使用主机命令写入模块111正式通知存储器设备之前确定主机设备是否已经写入提交队列。此外,响应于存储器设备确定主机已经向提交队列写入命令,推测性命令执行模块112可在来自主机设备的正式通知之前开始执行命令。此外,主机盖写确定模块113可确定主机设备是否已经盖写了受到推测性执行的命令,如下面更详细讨论的。

图2b是更详细地示出非易失性存储器管芯104的示例性部件的框图。非易失性存储器管芯104可包括非易失性存储器阵列142。非易失性存储器阵列142可包括多个非易失性存储器元件或单元,各自被配置为存储一个或多个数据位。非易失性存储器元件或单元可以是任何合适的非易失性存储器单元,包括采用二维和/或三维配置的nand闪存存储器单元和/或nor闪存存储器单元。存储器单元可采用固态(例如,闪存)存储器单元的形式,并且可以是一次可编程、几次可编程或多次可编程的。此外,存储器元件或单元可被配置为每个单元存储单个数据位的单级单元(slc)、每个单元存储多个数据位的多级单元(mlc)、或它们的组合。对于一些示例性配置,多级单元(mlc)可包括每单元存储三个数据位的三级单元(tls)。

此外,闪存存储器单元可在阵列142中包括具有浮栅和控制栅的浮栅晶体管(fgt)。浮栅由绝缘体或绝缘材料包围,该绝缘体或绝缘材料有助于保持浮栅中的电荷。浮栅内部的电荷的存在或不存在可引起fgt的阈值电压的偏移,该阈值电压用于区分逻辑电平。也就是说,每个fgt的阈值电压可指示存储在存储器单元中的数据。在下文中,fgt、存储器元件和存储器单元可互换使用以指同一物理实体。

存储器单元可根据存储器单元的行和列的矩阵状结构设置在存储器阵列142中。在行和列的交叉处为fgt(或存储器单元)。fgt的列可被称为串。串或列中的fgt可串联电连接。fgt的行可被称为页面。页面或行中的fgt的控制栅可电连接在一起。

存储器阵列142还可包括连接到fgt的字线和位线。fgt的每个页面都耦接到字线。具体地讲,每个字线都可耦接到页面中的fgt的控制栅。此外,fgt的每个串都可耦接到位线。此外,单个串可跨越多个字线,并且串中的fgt的数量可等于块中的页面的数量。

非易失性存储器管芯104还可包括页面缓冲区或数据缓存144,其缓存从存储器阵列142感测和/或将被编程到存储器阵列的数据。非易失性存储器管芯104还可包括行地址解码器146和列地址解码器148。当从存储器阵列142中的存储器单元读取或向其写入数据时,行地址解码器146可对行地址解码并选择存储器阵列142中的特定字线。列地址解码器148可对列地址解码以选择存储器阵列142中的要电耦接到数据高速缓存144的特定位线组。

此外,非易失性存储器管芯104可包括外围电路150。外围电路150可包括向控制器102提供状态信息的状态机151。状态机151的其他功能在下面进一步详细描述。

图3示出了用于经由nvme标准执行命令的步骤序列。如图所示,主机设备300包括主机存储器302,并且存储器设备包括控制器,诸如nvme控制器310。在一个实施方式中,主机存储器302包括提交队列304和完成队列306。在实践中,在初始化阶段,主机设备300创建一个或多个提交队列和一个或多个对应的完成队列。如上面所讨论的,在一个实施方式中,提交队列和完成队列可具有1:1相关性,而在另一个实施方式中,提交队列和完成队列不具有1:1相关性。

对于初始化,主机设备300可通过向存储器设备发送诸如每个队列的基地址的信息来向存储器设备通知提交队列和完成队列。在这一点上,每个提交队列都具有对应的完成队列。当提交队列和完成队列驻留在主机设备中时,主机设备向存储器设备发送信息,以便存储器设备确定主机设备中的提交队列和完成队列的位置。在具体实施方式中,主机设备发送指示创建提交队列和完成队列的命令。该命令可包括prp1指针,该指针是指向主机设备上的具体提交队列或具体完成队列的位置的列表的指针。在实践中,存储器设备使用prp1来发送tlp读取请求以便获得prp列表,并将prp列表存储在存储器设备中以确定主机设备内的存储器位置,以供将来在从具体提交队列读取或写入具体完成队列的命令中使用。另选地,主机设备300可指示存储器设备在驻留在存储器设备中的存储器(诸如控制器存储器缓冲区)中创建提交队列和对应的完成队列。

提交队列304可基于环形缓冲区,诸如图3所示,具有头部指针和尾部指针。在创建提交队列并向存储器设备通知所创建的提交队列之后,主机设备300可将命令(或若干命令)写入提交队列。这在图3中被指示为步骤1,标记为“队列命令”。具体地讲,图3示出了将四个命令写入提交队列。在一个实施方式中,存储器设备不知道主机设备300已经用四个命令更新了提交队列304,因为主机设备300更新了它自己的主机存储器302。在另一个实施方式中(诸如当提交队列和完成队列驻留在控制器存储器缓冲区中时),存储器设备可监测主机设备300和存储器设备之间的通信接口以进行特定通信,诸如写入驻留在存储器设备上的提交队列。例如,存储器设备可监测pciexpress总线上的传输层分组(tlp)以确定主机设备300是否已经发送tlp,该tlp导致对驻留在控制器存储器缓冲区中的提交队列的更新。在这一点上,存储器设备可识别正被写入提交队列的一个或多个条目。

在步骤2中,主机设备300写入存储器设备中的提交队列尾部门铃寄存器312。对提交队列尾部门铃寄存器312的该写入向存储器设备指示主机设备使该具体提交队列304中的一个或多个命令(例如,如图3所示的4个命令)排队。对提交队列尾部门铃寄存器312的写入可采用若干形式中的一种。在一种方式中,主机设备300指示提交队列304的新尾部,从而指示写入提交队列304的命令的数量。因此,由于存储器设备知道提交队列304的基地址,因此存储器设备仅需要知道尾部地址以指示写入提交队列304的新命令的数量。在处理了命令(或命令集)之后,存储器设备然后相应地设置提交队列304的新头部。因此,尾部指针可表示与头部指针的“偏移”。换句话说,主机设备300指示写入提交队列304的多个命令。在实践中,每个提交队列304在存储器设备中都具有对应的提交队列尾部门铃寄存器,使得当主机设备300更新特定门铃寄存器(与特定提交队列304相关)时,存储器设备可基于门铃寄存器来确定哪个特定提交队列304已被更新。

在步骤2之后(由此向存储器设备通知提交队列304上的命令)并且在步骤3之前(由此存储器设备获取命令),存储器设备知道在提交队列304中存在待处理的命令。在一般情况下,可能存在若干提交队列(在若干提交队列中可能有许多待处理命令)。因此,在进行步骤3之前,存储器设备控制器可在各种提交队列之间做出仲裁,以选择要从中获取命令的特定提交队列。

响应于确定要从哪个特定提交队列304获取命令,在步骤3处,存储器设备从特定提交队列304获取命令。在实践中,存储器设备可访问特定提交队列304的基地址以及在主机设备300中实现的当前头部指针上的指针。

如上面所讨论的,可为提交队列或完成队列分配存储器区域(诸如在主机设备中或在存储器设备中的控制器存储器缓冲区中)。提交队列和完成队列可包括多个条目,每个条目都与具体命令相关联。每个条目的大小都可为预定大小,诸如64kb。在这一点上,可使用提交队列的基地址,并且通过将条目数乘以每个条目的大小(例如,64kb)而偏移基地址来确定提交队列内的条目。

如上面所讨论的,存储器设备知道尾部指针,其已经由步骤2来通知。因此,存储器设备可从提交队列304获得所有新命令。在驻留在主机设备中的提交队列中,存储器设备可发送tlp请求以从提交队列304获得命令。响应于接收到tlp请求,主机设备300发送完成tlp消息,该tlp消息具有提交队列304中的命令。在这一点上,在步骤3结束时,存储器设备从提交队列304接收命令。

在步骤4处,存储器设备处理命令。在一个实施方式中,存储器设备解析命令,并确定执行命令(例如,读取/写入/等)的步骤。例如,该命令可包括读取命令。响应于接收到读取命令,存储器设备解析读取命令、实现地址转换、并访问闪存以接收数据。在接收到数据之后,存储器设备基于命令中的信息(例如,下面讨论的prp1)来使数据存储在主机设备上。作为另一示例,该命令可包括写入命令。响应于接收到写入命令,存储器设备解析写入命令、确定数据在受到写入的主机设备上的位置、从主机设备上的位置读取数据、并将数据写入闪存存储器。

具体地讲,存储器设备可通过prp1指针接收读取命令或写入命令。例如,主机设备请求存储器设备从闪存存储器读取的读取命令包括指向prp列表的prp1指针。存储器设备获得prp列表,以便确定主机设备内的存储器位置以写入从闪存存储器读取的数据。作为另一示例,主机设备请求存储器设备将数据写入闪存存储器的写入命令包括指向prp列表的prp1指针。存储器设备获得prp列表,以便确定主机设备内的要从中读取数据的存储器位置(然后将读取的数据保存到闪存存储器)。

prp列表中的每个条目都可与主机设备存储器中的特定部分相关联,并且可以是预定大小,诸如4kb。因此,在1mb传输中,prp列表中可能有250个引用,每个引用大小为4kb。在实践中,存储器设备可不按顺序检索数据。这可能是由于受到检索的数据存在于若干闪存管芯上,其中管芯可用于在不同时间进行数据检索。例如,在检索对应于1mb传输的0kb-100kb的数据之前,存储器设备可检索对应于1mb传输的100kb-200kb的数据。然而,由于存储器设备具有prp列表(并因此知道主机设备期望存储对应于100kb-200kb的数据的存储器位置),因此存储器设备可传输对应于1mb传输的100kb-200kb的数据,而无需首先检索对应于1mb传输的0kb-100kb的数据。

在nvme中,可存在多个pcietlp以将数据从存储器设备传输到主机设备300。通常,传输的数据基于命令中的指示而存储在主机设备300的主机存储器302中(例如,命令可包括存储所请求的数据的地址)。

在完成数据传输之后,在步骤5处,存储器设备控制器向相关的完成队列306发送完成消息。如上所述,在初始化阶段,主机设备300将提交队列与完成队列相关联。因此,主机设备300基于存储器设备要写入哪些完成队列而知道在提交队列中完成的命令。完成消息可包含关于命令处理的信息,诸如命令是否成功完成或者在执行命令时是否存在错误。

在步骤5之后,主机设备300不知道存储器设备发布到完成队列306。这是由于存储器设备使数据被写入完成队列306。在这一点上,在步骤6处,存储器设备通知主机设备300已经对完成队列306进行了更新。具体地讲,存储器设备发布对主机设备300的中断(例如,在nvme中,主机设备300可使用msie中断)。

响应于接收到中断,主机设备300确定在该完成队列306中存在针对主机设备300的一个或多个待处理完成条目。在步骤7处,主机设备300然后处理完成队列306中的条目。

在主机处理来自完成队列306的条目之后,在步骤8处,主机设备300向存储器设备通知主机设备300从完成队列306处理的条目。这可通过更新完成队列头部门铃寄存器314来进行,该完成队列头部门铃寄存器向存储器设备指示主机设备300处理了来自完成队列306的一个或多个条目。响应于更新完成队列头部门铃寄存器314,存储器设备更新完成队列306的头部。给定新的头部,存储器设备知道完成队列306中的哪些条目已经由主机设备300处理并且可被盖写。

图4是主机设备400和存储器设备420的其他示例性部件的框图。主机设备400包括主机存储器402,该主机存储器可包括物理区域页面(prp)404、数据缓冲区406和其他存储器408。

图4进一步示出了主机设备400和存储器设备420之间的通信接口。在第一实施方式(图4中未示出)中,主机设备和存储器设备之间的通信接口是单工的,其中到存储器设备的通信和来自存储器设备的通信在同一路径上。在第二实施方式(图4中示出)中,主机设备400和存储器设备420之间的通信接口是双工的,具有单独的入口路径和单独的出口路径。从存储器设备420的角度来看,入口路径包括从主机设备400到存储器设备420的传入请求。相反,从存储器设备420的角度来看,出口路径包括从存储器设备420到主机设备400的传出请求。

传入请求(从主机设备400到存储器设备420的请求)可以以不同方式划分,诸如传入读取请求和传入写入请求。例如,主机设备400可经由入口路径发送读取存储器设备420中的存储器部分的读取请求或写入存储器设备420中的存储器部分的写入请求。同样,存储器设备420可经由出口路径发送对主机设备400中的存储器部分的读取请求,或者写入主机设备400中的存储器部分的写入请求。

在使用了nvme的实践中,可存在一系列读取请求(主机设备对读取驻留在存储器设备上的数据的请求,反之亦然)和一系列写入请求(主机设备将数据写入驻留在存储器设备上的位置的请求,反之亦然)。具体地讲,在nvme中,存储器设备和主机设备使用事务层分组(tlp)请求(诸如在另一设备上进行读取的tlp读取请求,或在另一设备上进行写入的tlp写入请求)来彼此通信。在一个示例(其中sq和cq驻留在主机设备上)中,响应于主机设备对存储器设备上的门铃寄存器的tlp写入请求(经由入口路径发送)(其中对门铃寄存器的写入指示在sq上存在命令),存储器设备使用tlp读取请求(经由出口路径发送)来从sq(其驻留在主机设备上)获取写入命令。因此,写入命令是对存储器设备将数据写入非易失性存储器的请求。然后,存储器设备解析写入命令以获得信息,诸如指向prp列表的prp指针(例如,prp1)的指示。prp列表是指示主机设备中的数据的位置的一系列信息,诸如指针或地址。然后,存储器设备使用另一个tlp读取请求来从prp列表中的指针或地址读取数据。随后,存储器设备通过将数据存储在存储器设备上的非易失性存储器(例如,闪存存储器)中来进行写入。在存储数据之后,存储器设备使用tlp写入请求来将条目写入cq(指示写入命令已经完成)。最后,存储器设备使用tlp写入请求来生成对主机设备的中断,其中中断向主机设备发信号通知在cq上存在条目。响应于该中断,主机设备读取cq上的条目,然后向cq门铃写入寄存器发出发出指示主机设备已审核cq上的条目的tlp写入请求。

作为另一示例(同样,其中sq和cq驻留在主机设备上),响应于主机对存储器设备上的门铃寄存器的tlp写入请求(其中对门铃寄存器的写入指示在sq上存在命令),存储器设备使用tlp读取请求来从sq(其驻留在主机设备上)获取读取命令。因此,读取命令是对存储器设备从非易失性存储器读取数据并将读取的数据发送至主机设备的请求。然后,存储器设备读取非易失性存储器(例如,闪存存储器)以读取数据。存储器设备可对数据进行一系列操作,诸如错误校正、加密/解密等,其中存储缓冲区散布在串行操作中的每个串行操作之间。然后,存储器设备可解析读取命令以获得信息,诸如指向prp列表的prp指针(例如,prp1)的指示。prp列表是指示在主机设备中用于存储从非易失性存储器读取的数据的位置(并且任选地,错误已校正、加密等)的一系列信息,诸如指针或地址。存储器设备使用tlp读取请求来从prp列表中的指针或地址读取数据。随后,存储器设备使用tlp写入请求来写入从非易失性存储器读取的数据。在将数据写入主机设备之后,存储器设备使用tlp写入请求将条目写入cq(指示读取命令已经完成)。最后,存储器设备使用tlp写入请求来生成对主机设备的中断,其中中断向主机设备发信号通知在cq上存在条目。响应于该中断,主机设备读取cq上的条目,然后向cq门铃写入寄存器发出发出指示主机设备已审核cq上的条目的tlp写入请求。

任选地,cq和sq可驻留在存储器设备中,诸如驻留在控制器存储器缓冲区(cmb)中。在该实例中,主机设备可将tlp写入请求(经由入口路径发送)发送到存储器设备以写入sq。同样,存储器设备可发送tlp写入请求(经由出口路径发送)以生成对主机设备的中断。

存储器设备420包括存储器设备控制器422和存储器阵列446。存储器阵列446可以各种方式划分,诸如分成如图4中所示的10个部分。存储器设备控制器422可结合有pciemac和phy接口424中的一个或全部。存储器设备控制器422还可包括一个或多个处理器450。

存储器设备控制器422还包括为主机设备400分配的控制器存储器缓冲区(cmb)426。如上面所讨论的,各种队列(包括提交队列和完成队列)可驻留在主机设备中或存储器设备中。如图4所示,队列驻留在存储器设备420中的cmb426中,诸如提交队列428。此外,cmb426可包括其他数据430。

命令解析器432被配置为监测一个或多个内部总线,诸如从pciemac和phy接口424到cmb426的总线。命令解析器432进一步被配置为实时(或者当命令在存储器设备420内部传输时)解析由主机设备400写入的nvme命令,并且选择作为推测性执行的候选者的命令。命令解析器432可将这些命令排队在推测性命令执行器434中,其可在硬件或固件中实现。如下面更详细讨论的,基于存储器设备420内部的资源,推测性命令执行器434甚至可在主机设备400正式通知命令之前开始那些命令的执行阶段。

闪存接口模块440被配置为控制和访问存储器阵列446。例如,闪存接口模块440可与存储器阵列446交互,主要用于读取和写入操作。调度器440被配置为控制数据传输,同时激活控制路径436以获取prp、发布完成(例如,图3中的步骤5)和中断(例如,图3中的步骤6)并激活dma438以用于主机设备400和存储器设备420之间的实际数据传输。错误校正引擎442被配置为校正从存储器阵列446所获取的数据。

在一个实施方式中,推测性命令执行不推测性地将任何相关事务发布到主机设备400。相反,可仅在对命令进行排队之后进行发布完成,其可通过写入相关门铃寄存器来进行(参见图3中的步骤3)。

虽然图4在驻留在存储器设备420中的cmb426中包括队列(诸如提交队列428),但当队列(诸如顺序队列)驻留在主机设备400中时,可进行推测性执行。在这种情况下,顺序队列可存储在主机dram中。在一些应用中,即使在主机设备400向存储器设备420提供通知(例如,在图3的步骤2中写入门铃寄存器)之前,从顺序队列中的下一个时隙预获取命令也可能是有益的。在此类实施方式中,存储器设备在内部保持过去由主机设备400在相同时隙中进行排队的先前命令。当预获取命令时,存储器设备420可首先检测主机设备400是否将新命令放置在那些时隙中,或者先前命令是否仍在那里。如果存在新的可用命令,则即使在主机设备400发出门铃写入之前,存储器设备420也可开始推测性执行。因此,存储器设备420可经由pciemacphy接口424通信,以预获取驻留在主机设备400上的提交队列中的新命令。

图5是提交队列中的命令的推测性执行的流程图500。在502处,主机设备400将命令写入位于cmb426中的提交队列428。在504处,命令解析器432在命令被写入cmb426的同时实时解析命令。在506处,命令解析器432确定是否推测性地执行命令。具体地讲,命令解析器432可分析一个或多个方面以便确定是否进行推测性执行。在一个实施方式中,命令解析器432分析命令本身(例如,命令类型)以确定是否进行推测性执行。作为一个示例,响应于命令解析器432确定命令为读取命令,进行推测性执行。在该实例中,在510处,存储器设备可访问存储器阵列446并响应于读取命令预获取一些(或全部)数据,准备进入特殊状态或准备数据库。相反,存在某些nvme命令,其中不存在推测性执行的附加值。在这一点上,在508处,只有在主机设备通知命令之后(例如,经由图3的步骤2),才将开始执行这些某些nvme命令。

在另一个实施方式中,命令解析器432分析存储器设备420的可用内部资源,以确定是否进行推测性执行。作为一个示例,响应于命令解析器432确定存储器设备420具有足够的内部资源以进行推测性执行,命令解析器432确定进行推测性执行。相反,如果在某一点处,存储器设备中不存在执行命令所需的可用资源,则可稍后执行命令,甚至在主机命令排队之后执行。在再一个实施方式中,命令解析器432在确定是否进行推测性执行时分析存储器设备的命令和内部资源。因此,如果存在可用资源并且如果命令是推测性执行的候选者,则存储器设备将开始推测性执行阶段。

存在主机设备400可在命令被放置在提交队列428中之后重写命令的情况。因此,在512处,存储器设备确定主机设备400是否在对命令进行排队之前盖写命令。如果是,则在514处,取消盖写命令的推测性执行。否则,在516处,通过写入相关门铃寄存器来确定主机设备400是否已经对命令进行排队(例如,图3的步骤2)。如果不是,则流程图500循环回到512,并等待以确定是否发生了盖写。如果是,则在518处,存储器设备420可在利用推测性执行的同时继续正常执行命令。作为一个示例,读取命令的推测性执行可包括从存储器阵列446读取数据并将读取的数据存储到暂时存储器缓冲区中,如关于图6讨论的。

图6是提交队列中的读取命令的推测性执行的流程图600。如上面所讨论的,当主机设备400将命令写入需要对闪存存储器阵列的读取访问的提交队列时,读取操作可在此时以推测性方式开始(例如,读取先行)。因此,在602处,确定主机设备是否已经写入需要读取访问的命令。如果是,则在604处,存储器设备控制器422可访问存储器阵列446,在606处,读取相关页面,并在608处,将读取的相关页面存储在时间缓冲区中。如上面所讨论的,从存储器阵列446(诸如闪存存储器)读取的数据可受到后读取处理,诸如错误校正和/或加密/解密。例如,首先可分析读取的数据的错误,并使用ecc控制器124校正读取的数据中的错误。然后可对经过错误校正的数据进行加密或解密,并随后将其存储在时间缓冲区中。

在610处,存储器设备控制器422确定主机设备400是否已经对命令进行排队。当主机设备400对命令进行排队时,在612处,确定命令是否已经被盖写。如果不是,则在614处,可从时间缓冲区中检索数据,而不是从闪存存储器阵列中获取数据。在这一点上,在一个实施方式中,存储在时间缓冲区中的数据仅在主机设备400对命令进行排队之后才被传输到主机。在更具体的实施方式中,存储器设备可从时间缓冲区中检索经过错误校正的解密数据以传输到主机设备。以这种方式,存储器设备可在主机设备对命令进行排队(例如,主机设备进行图3中的步骤2)之前进行检索、错误校正和加密或解密功能。

相反,在数据存储在时间缓冲区的时间期间,主机设备400可能已经盖写命令。在这种情况下,在614处,为相关读取命令提供新数据。

由于推测性执行,当主机设备400对命令进行排队时,存储器设备可访问暂时存储器缓冲区以将读取的数据传输到主机设备。这与命令的传统执行形成对比,该传统执行响应于命令的排队从存储器阵列读取数据。因此,关于读取命令,推测性执行可更快,因为从暂时缓冲区读取数据比从存储器阵列446读取数据更快。在这种情况下的好处可能至关重要,因为可容易地提高低队列深度的读取性能。

除了读取命令之外的命令可以是推测性执行的候选者。作为一个示例,可推测性地执行写入命令。具体地讲,对于闪存写入操作,推测性执行可包括获取用于地址转换的闪存转换层(ftl)表(例如,逻辑块到物理块转换表)。作为另一示例,可推测性地执行功率管理命令。具体地讲,主机设备400可使用设置特征命令来请求存储器设备进入具体nvme功率状态。在这种情况下的推测性执行可包括将所有内部缓存刷新到闪存存储器阵列以及与该特殊状态相关的其他准备。作为再一示例,可推测性地执行刷新命令。具体地讲,主机设备400可发送刷新命令。作为响应,存储器设备420将其时间缓冲区刷新到媒体,并随后将完成发布到主机设备400。对于推测性刷新操作,存储器设备420可照常开始刷新操作。在最坏的情况下,主机设备可盖写命令(例如,将不会对命令进行排队)。然而,即使存储器设备420进行刷新操作,存储器设备420也没有违反任何规则。

最终,如上所述,可使用任何合适类型的存储器。半导体存储器设备包括易失性存储器设备,诸如动态随机存取存储器(“dram”)或静态随机存取存储器(“sram”)设备,非易失性存储器设备,诸如电阻式随机存取存储器(“reram”)、电可擦除可编程只读存储器(“eeprom”)、闪存存储器(也可以被认为是eeprom的子集)、铁电随机存取存储器(“fram”)和磁阻随机存取存储器(“mram”),以及能够存储信息的其他半导体元件。每种类型的存储器设备可具有不同的配置。例如,闪存存储器设备可以nand配置或nor配置进行配置。

该存储器设备可由无源元件和/或有源元件以任何组合形成。以非限制性示例的方式,无源半导体存储器元件包括reram设备元件,其在一些实施方案中包括电阻率切换存储元件诸如反熔丝、相变材料等,以及任选地导引元件诸如二极管等。进一步以非限制性示例的方式,有源半导体存储器元件包括eeprom和闪存存储器设备元件,其在一些实施方案中包括具有电荷存储区域的元件,诸如浮栅、导电纳米粒子或电荷存储介电材料。

多个存储器元件可被配置为使得它们串联连接或者使得每个元件可被单独访问。以非限制性示例的方式,nand配置中的闪存存储器设备(nand存储器)通常包含串联连接的存储器元件。nand存储器阵列可被配置为使得该阵列由存储器的多个串构成,其中串由共享单个位线并作为组被访问的多个存储器元件构成。另选地,存储器元件可被配置为使得每个元件均为单独可访问的,例如,nor存储器阵列。nand和nor存储器配置是示例性的,并且存储器元件可以其他方式配置。

位于基板内和/或上方的半导体存储器元件可被布置成两个或三个维度,诸如二维存储器结构或三维存储器结构。

在二维存储器结构中,半导体存储器元件被布置在单个平面或单个存储器设备级中。通常,在二维存储器结构中,存储器元件被布置在平面中(例如,在x-z方向平面中),所述平面基本上平行于支撑存储器元件的基板的主表面延伸。基板可以是存储器元件的层在其之上或之中形成的晶圆,或者其可以是在存储器元件形成后附接到其的承载基板。作为非限制性示例,基板可包括半导体,诸如硅。

存储器元件可被布置在处于有序阵列中(诸如在多个行和/或列中)的单个存储器设备级中。然而,存储器元件可以非常规配置或非正交配置排列。存储器元件可各自具有两个或更多个电极或接触线,诸如位线和字线。

三维存储器阵列被布置成使得存储器元件占据多个平面或多个存储器设备级,从而形成三个维度(即,在x方向、y方向和z方向上,其中y方向基本上垂直于基板的主表面,并且x方向和z方向基本上平行于基板的主表面)的结构。

作为非限制性示例,三维存储器结构可被垂直地布置为多个二维存储器设备级的叠堆。作为另一个非限制示例,三维存储器阵列可被布置为多个垂直列(例如,基本上垂直于基板的主表面延伸的列,即,在y方向上),其中在每一列中每一列均具有多个存储器元件。列可被布置成二维配置,例如,在x-z平面中,从而得到在多个垂直堆叠的存储器平面上具有元件的存储器元件的三维布置。三维存储器元件的其他配置也可构成三维存储器阵列。

以非限制性示例的方式,在三维nand存储器阵列中,存储器元件可耦接在一起以在单个水平(例如,x-z)存储器设备级内形成nand串。另选地,存储器元件可耦接在一起以形成横贯多个水平存储器设备级的垂直nand串。可设想到其他三维配置,其中一些nand串包含在单个存储器级中的存储器元件,而其他串则包含跨越多个存储器级的存储器元件。三维存储器阵列也可以nor配置以及reram配置来设计。

通常,在单片三维存储器阵列中,一个或多个存储器设备级在单个基板上方形成。任选地,单片三维存储器阵列还可具有至少部分地在单个基板内的一个或多个存储器层。作为非限制性示例,基板可包括半导体,诸如硅。在单片三维阵列中,构成阵列的每个存储器设备级的层通常形成在阵列的底层存储器设备级的层上。然而,单片三维存储器阵列的相邻存储器设备级的层可被共享或具有位于存储器设备级之间的居间层。

然后,可单独形成二维阵列,然后封装在一起以形成具有多个存储器层的非单片存储器设备。例如,非单片的堆叠存储器可通过在单独的基板上形成存储器级并然后将存储器级堆叠在彼此之上而构造。可在堆叠前将基板减薄或从存储器设备级移除,但由于存储器设备级在单独基板上初始形成,因此所得的存储器阵列不是单片的三维存储器阵列。此外,多个二维存储器阵列或三维存储器阵列(单片或非单片)可在单独的芯片上形成,然后封装在一起以形成堆叠的芯片存储器设备。

通常需要相关联的电路来操作存储器元件并与存储器元件通信。作为非限制性示例,存储器设备可具有用于控制并驱动存储器元件以实现诸如编程和读取的功能的电路。该相关联的电路可与存储器元件位于同一基板上和/或位于单独的基板上。例如,用于存储器读取-写入操作的控制器可位于单独的控制器芯片上和/或位于与存储器元件相同的基板上。

预期将前面的详细描述理解为本发明可以采用的选定形式的说明,而不是作为本发明的定义。预期只有以下权利要求(包括所有等同物)限定要求保护的本发明的范围。最后,应当指出的是,本文所述的优选实施方案中的任一个的任何方面均可单独使用或彼此组合使用。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1