用于快速执行封装体内命令的系统和方法与流程

文档序号:18301853发布日期:2019-07-31 10:15阅读:291来源:国知局
用于快速执行封装体内命令的系统和方法与流程

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



背景技术:

非易失性存储器express(nvme)是用于访问经由pciexpress(pcie)总线附接的非易失性存储介质的标准。nvme可以与各种非易失性存储介质一起使用,诸如固态驱动器(ssd)。nvme的替代实施方式是基于结构的nvme,其是旨在使得基于nvme消息的命令能够通过网络(诸如以太网、光纤信道和infiniband)在主机计算机与目标固态存储设备或系统之间转移数据的技术规范。

附图说明

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

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

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

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

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

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

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

图4是主机设备、存储器设备和结构通信接口的示例性部件的框图的一个示例。

图5a至图5b示出了nvme结构封装体,包括nvme结构命令封装体(图5a)和nvme结构响应封装体(图5b)。

图6是存储器设备确定在执行命令时是否绕过提交队列的流程图。

图7是存储器设备确定是延迟响应封装体还是立即发送响应封装体的流程图。

图8是存储器设备确定是否使命令在提交队列中排队以及确定是延迟响应封装体还是立即发送响应封装体的流程图。

具体实施方式

概述

基于结构的nvme构建在nvme基本规范中限定的架构、命令集和排队接口上。此外,基于结构的nvme以多种方式修改nvme基本规范。作为一个示例,代替使用pciexpress(pcie)总线,而是使用作为结构(诸如结构总线)的物理端口。作为另一个示例,基于结构的nvme限定所有提交队列在存储器设备中实现而不在主机设备存储器中实现。在这方面,存储器设备不会从驻留在主机设备中的提交队列获取命令。相反,存储器设备使用命令封装体来直接从主机设备接收命令。在此之后,存储器设备将命令封装体保存到驻留在存储器设备中的提交队列上。因此,基于结构的nvme限定通用架构,并且支持一系列存储联网结构以用于通过存储联网结构的nvme块存储协议。以此方式,基于结构的nvme限定不同功能,诸如:将前侧接口启用到存储系统中;扩展到大量的nvme设备;并扩展可访问nvme设备和nvme子系统的距离。

设想了用于nvme的各种类型的结构传输,包括:使用远程直接存储器访问(rdma)的基于结构的nvme(例如,使用各种计算机联网通信标准,诸如infiniband、基于汇聚以太网的rdma(roce)和iwarp);以及使用光纤信道(例如,fc-nvme)的基于结构的nvme。

命令封装体可以包括命令(诸如写入非易失性存储器的命令操作),并且还可以包括与该命令相关联的其他数据。例如,在将复杂消息发送到基于结构的nvme存储器设备时,封装体允许多个小消息作为一个消息发送,这可以改善传输效率并减小延迟。命令封装体是提交队列条目,并且可以包括其他数据,诸如写入数据、元数据或分散-聚集列表(sgl)。响应封装体是完成队列条目(其可以指示完成)并且可以包括附加信息(例如,从非易失性存储器读取的数据)。在一个实施方式中,sgl可以用于执行写入主机设备存储器的非连续区域的数据的数据转移。另选地,sgl可以描述将在响应封装体中而不在主机设备存储器中传输的数据的结构(诸如在下面讨论的图5b中描绘的)。例如,sgl可以描述从封装体开始的偏移和大小。此外,sgl可以描述在命令封装体中传输的数据的结构(例如,用于写入命令)。因此,在基于结构的nvme中,存储器设备执行较少的读取操作,因为命令封装体包括用于处理命令的信息(例如,写入数据)。

在一个实施方式中,如根据nvme基本规范一样,根据基于结构的nvme,发送到存储器设备/从存储器设备发送的数据是相同的。然而,根据基于结构的nvme,数据的封装(诸如用于封装数据的封装体的形式)是不同的。图5a至图5b示出了nvme结构封装体,包括示例性nvme结构命令封装体(图5a)和示例性nvme结构响应封装体(图5b)。

如图5a所示,从主机设备接收的nvme结构命令封装体包括:命令id(其为辅助命令序列的编号);操作码(其可以包括一种类型的命令,诸如用于写入命令的第一操作码和用于读取命令的第二操作码);nsid(其为nand空间id,并且每个命令可以通过其与不同的nand空间相关联);缓冲器地址(其可以指示缓冲器,诸如读取数据将存储在其中的驻留在主机设备上的缓冲器);命令参数(其可以包括命令的所有参数,诸如逻辑块地址(lba)、命令大小等);和任选的sgl或命令数据。

如图5b所示,从存储器设备发送到主机设备的nvme结构响应封装体包括:命令参数(其可以包括命令的所有参数,诸如命令大小等);sq头指针(其为针对提交队列的指针);命令状态(其指示执行命令时的成功/失败);命令id(其为与nvme结构命令封装体中的编号相同的编号);和任选的命令数据(其可以包括响应于执行命令而从非易失性存储器读取的数据)。

在基于结构的nvme中,存储器设备接收nvme结构命令封装体,使其在相关提交队列(sq)中排队,并且获得存储在命令封装体缓冲器中的数据。例如,在写入命令的情况下,存储器设备在单个封装体中接收nvme写入命令以及要写入非易失性存储器的数据(也称为“写入数据”)。继而,存储器设备将写入数据存储在缓冲器中。因此,对于提交队列中的命令的每个条目或其他指示,数据缓冲器用于存储写入数据。在此之后,存储器设备控制器从提交队列中获取命令。如下面更详细讨论的,在确定要从一个或多个提交队列获取哪些命令时,存储器设备可以使用仲裁方案,诸如循环、加权循环等。然后,命令可以仅在从提交队列获取之后开始执行。在这方面,写入命令可以在提交队列中深度排队。使得,由于执行写入命令的延迟,与写入命令相关联的资源(包括写入数据缓冲器)可以使用更长的时间。

在一个实施方式中,存储器设备确定在执行命令(诸如基于结构的nvme封装体内命令)时是否绕过提交队列。是否绕过提交队列的确定可以基于命令的一个或多个方面。作为一个示例,确定可以基于命令的类型,诸如命令是否是预定类型(诸如写入命令)。如下面更详细讨论的,响应于确定命令封装体匹配和/或不匹配某个方面,与命令封装体相关联的命令不会放置在提交队列中,并且与提交队列中放置的命令不同地进行处理。例如,响应于确定命令封装体被指向写入命令,存储器设备确定不将命令封装体的至少某个部分(诸如命令封装体中的写入数据)放置在提交队列中。如下面更详细讨论的,可以将与命令相关联的无操作命令条目放置在提交队列中。因此,写入命令不经受获取以及与其相关的延迟的影响。

以此方式,存储器设备可以包括用于nvme封装体内数据命令的高性能路径。在该路径中,写入命令不在提交队列中排队,而是绕过此阶段。写入数据缓冲器可以被立即转发到后端,以便将写入数据刷新到非易失性存储器并更快地重新使用缓冲器。更具体地,绕过避免了对写入命令(包括写入数据)进行排队,该排队可能消耗dram空间直到执行命令。此外,可以在初始化时限定的提交队列的大小可以保持超过64,000个命令。提交队列中的命令的处理可以基于fifo。因此,深度排队的写入命令可能导致存储器设备的资源被浪费,而正在处理队列中的进一步向上的其他命令。

另选地,或者在附加的实施方式中,存储器设备可以在开始执行命令之前生成响应封装体。存储器设备可以分析一个或多个因素以便确定在开始执行命令之前是否生成响应封装体。可以分析以下示例性因素中的任何一个、任何组合或全部:命令的类型;数据的完整性;和封装体的完成度。设想了其他因素。因此,在生成并发送响应封装体之后,存储器设备可以开始执行命令。

作为一个示例,存储器设备可以响应于确定命令是特定类型的命令和/或不是特定类型的命令而发送响应封装体。具体地,存储器设备可以响应于确定命令是写入命令而发送响应封装体。另选地,存储器设备可以响应于确定命令不是强迫单元访问(fua)命令而发送响应封装体。作为另一个示例,存储器设备可以响应于确定数据(例如,写入数据)具有足够水平的数据完整性而发送响应封装体,如下面更详细地讨论的。作为又一个示例,存储器设备可以响应于确定封装体内命令包括开始执行数据的所有方面而发送响应封装体。另选地,在不满足一个或多个因素的情况下(例如,在出现错误的情况下,诸如在写入命令或写入数据中),该命令被引导到正常流程(例如,排队到提交队列、命令获取仲裁等)和响应封装体的正常发送。因此,在具体实施方式中,与绕过提交队列并执行写入命令并行,存储器设备可以通过生成响应封装体并在开始执行写入命令之前将响应封装体(例如,指示完成)发布到结构来自动完成写入命令。

设想各种数据完整性分析。作为一个示例,封装体可以包括循环冗余校验(crc),其可以用于检测写入数据中的错误。可以在各个阶段执行数据完整性检查。在一个实施方式中,在将写入数据存储在dram中之前执行数据完整性检查。在替代性实施方式中,在将写入数据存储在dram中之后执行数据完整性检查。如果在将写入数据存储在dram中之前执行数据完整性检查,则当数据存储在临时存储缓冲器(例如,sram或内部触发器)中时,存储器设备可以执行数据完整性检查。另选地,在存储器设备不包括dram的情况下,当数据存储在临时存储缓冲器中时,存储器设备可以执行数据完整性检查。

在另一个实施方式中,存储器设备确定是否在一个或多个提交队列中放置无操作命令条目。如以上所讨论的,在基于结构的nvme中,存储器设备负责将命令条目放置在提交队列中。在某些情况下,存储器设备可以放置指示执行无操作的无操作命令条目。如以上所讨论的,存储器设备可以确定在执行命令时是否绕过提交队列。响应于确定绕过提交队列,存储器设备可以通过命令的一个或多个指示符在提交队列中放置无操作命令条目(例如,无操作命令条目可以包括命令封装体的命令id)。以此方式,即使为了执行命令封装体而绕过提交队列,提交队列和关联的完成队列也具有指示命令封装体的条目以用于管理命令封装体。此外,当最终从提交队列获取无操作命令时,存储器设备可以查看该命令并确定不执行任何动作(例如,存储器设备忽略无操作命令)。在执行与无操作命令相关联的命令(诸如写入命令)之后,存储器设备可以在完成队列上发布该命令的完成条目。例如,存储器设备可以接收具有命令id#xyz的写入命令。存储器设备可以在执行命令时(具有命令id#xyz)确定绕过提交队列,而是在提交队列中插入无操作命令(具有命令id#xyz)。但是,对于提交队列条目而言不需要包含命令id#。如以下所讨论的,甚至在开始执行具有命令id#xyz的写入命令之前,存储器设备可以将条目发布到完成队列,其中条目具有命令id#xyz。以此方式,无操作命令被排队到相关的提交队列,因此主机设备和存储器设备指针是对准的。具体地,在实践中,无操作命令条目可以被认为是用于将提交队列与完成队列同步的虚拟条目。

实施方案

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

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

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

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

控制器102和非易失性存储器管芯104之间的接口可以是任何合适的闪存接口,诸如切换模式200、400或800。在一个实施方案中,存储器设备100可为基于卡的系统,诸如安全数字卡(sd)或微型安全数字(micro-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)、快速外围组件express(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奇偶校验可以用作写入到非易失性存储器设备100中的数据的附加级的完整性保护。在一些情况下,raid模块128可以是ecc引擎124的一部分。存储器接口130向非易失性存储器管芯104提供命令序列,并且从非易失性存储器管芯104接收状态信息。连同命令序列和状态信息,要编程到非易失性存储器管芯104中以及从其读取的数据可通过存储器接口130传送。在一个实施方案中,存储器接口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和nop条目确定113。如下面更详细讨论的,存储器设备可以使用绕过确定111以便确定是否为了执行目的而绕过命令在提交队列中的排队,而不是在不从提交队列获取命令的情况下执行命令。另外,存储器设备可以使用完成发布112以便在开始执行命令之前确定是否发送完成消息,诸如nvme结构响应封装体。此外,存储器设备可以使用nop条目确定113以便确定是否在提交队列中发布无操作条目。

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

另外,闪存存储器单元可以在阵列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的其他功能在下面进一步详细描述。

如以上所讨论的,基于结构的nvme使用nvme标准的一些方面。在该方面,图3用于示出用于经由nvme标准执行命令的一系列步骤,其中突出显示在使用基于结构的nvme时的对nvme标准的改变。nvme标准公开了一种可扩展的主机控制器接口,其被设计成满足利用基于pciexpress的固态驱动器的企业和客户端系统的需求。此类系统基于配对的提交队列和完成队列机制。

如图3所示,主机设备300包括主机存储器302,并且存储器设备包括控制器,诸如nvme控制器310。在图3所示的实施方式中,主机存储器302包括提交队列304和完成队列306。相比之下,基于结构的nvme具有驻留在存储器设备中(诸如在控制器存储器缓冲器中)的提交队列和完成队列。另外,在一个实施方式中,提交队列和完成队列可以具有1:1的相关性。另选地,提交队列和完成队列没有1:1的相关性。

实际上,在初始化阶段,主机设备300可以指示存储器设备在驻留在存储器设备中的存储器(诸如控制器存储器缓冲器)中创建提交队列和对应的完成队列。

提交队列304和完成队列306可以基于具有头指针和尾指针的环形缓冲器。在一个实施方式中,提交队列和完成队列是具有固定时隙大小的循环缓冲器,诸如用于提交队列的64字节和用于完成队列的16字节。例如,主机设备可能具有到提交队列的最多64k个未完成命令。

在创建提交队列之后,主机设备300可以将命令(或多个命令)写入提交队列。这在图3中被指示为步骤1,标记为“队列命令”。具体地,图3示出了将四个命令写入提交队列。在步骤2中,主机设备300写入存储器设备中的提交队列尾门铃寄存器312。对提交队列尾门铃寄存器312的写入向存储器设备表示主机设备已经使一个或多个命令(例如,如图3所示的4个命令)在该具体提交队列304中排队。相比之下,在基于结构的nvme中,主机设备发送命令封装体,其包括与命令相关联的命令和数据。在此之后,存储器设备将命令写入提交队列。在这方面,在基于结构的nvme中未执行如图3中概述的步骤1和步骤2。

在一般情况下,可能有若干提交队列(在若干提交队列中可能有许多未决的命令)。因此,在执行步骤3之前,存储器设备控制器可以在各种提交队列之间进行仲裁,以选择从中获取命令的特定提交队列。在这方面,在决定是否从单个提交队列中获取命令时,存储器设备可以仅考虑该单个提交队列。另选地,在决定是否从多个提交队列中获取命令时,存储器设备可以组合地考虑多个提交队列。

响应于确定从哪个特定提交队列304获取命令,在步骤3处,存储器设备从特定提交队列304获取命令。实际上,存储器设备可以使用一个或多个仲裁方案(诸如循环、加权循环等)以便确定从提交队列中获取哪些命令。在美国专利申请号15/585,717中公开了对各种仲裁方案的讨论,该申请通过引用整体并入本文。另外,存储器设备可以访问特定提交队列304的基地址以及在主机设备300中实现的当前头指针上的指针。

在步骤4处,存储器设备处理该命令。在一个实施方式中,存储器设备解析命令,并确定执行命令的步骤(例如,读取/写入/等)。例如,命令可以包括读取命令。在nvme基本规范中,响应于接收到读取命令,存储器设备解析读取命令,实现地址转换,并访问闪存以接收数据。在接收数据之后,存储器设备可以对从闪存访问的数据执行错误校正。然后,存储器设备可以基于命令中的信息(例如,下面讨论的prp1)致使已错误校正的数据存储在主机设备上。具体地,prp1可以限定驻留在主机上的主机命令数据缓冲器的位置(例如,地址范围)。相比之下,在基于结构的nvme中,nvme结构命令封装体可以包括从闪存存储器读取的数据。作为另一个示例,该命令可以包括写入命令。在nvme基本规范中,响应于接收到写入命令,存储器设备解析写入命令,确定经受写入的主机设备上的数据的位置,从主机设备上的位置读取数据,以及将数据写入闪存存储器。相比之下,在基于结构的nvme中,nvme结构命令封装体可以包括要写入闪存存储器的数据。

在完成数据转移之后,在步骤5处,存储器设备控制器将完成消息发送到相关的完成队列306。完成消息可以包含关于命令的处理的信息,诸如命令是否成功完成或者在执行命令时是否存在错误。

在步骤5之后,主机设备300不知道存储器设备发布到完成队列306。这是由于存储器设备致使将数据写入完成队列306。在这方面,在步骤6处,存储器设备向主机设备300通知已完成对完成队列306的更新。具体地,存储器设备向主机设备300发布中断(例如,在nvme中,主机设备300可以使用msie中断)。中断向主机设备指示在完成队列306上存在条目。如下面更详细讨论的,在一个实施方式中,存储器设备可以使用主机命令数据缓冲器,直到存储器设备在步骤6处向主机设备通知已完成对完成队列306的更新。

响应于接收到中断,主机设备300确定在该完成队列306中存在针对主机设备300未决的一个或多个完成条目。在步骤7处,主机设备300然后处理完成队列306中的条目。相反,在基于结构的nvme中,存储器设备发送nvme结构响应封装体,从而指示对主机命令的响应。

在主机处理来自完成队列306的条目之后,在步骤8处,主机设备300通知主机设备300处理的来自完成队列306的存储器设备的条目。这可以通过更新完成队列头门铃寄存器314来执行,该完成队列头门铃寄存器向存储器设备指示主机设备300处理来自完成队列306的一个或多个条目。

响应于更新完成队列头门铃寄存器314,存储器设备更新完成队列306的头部。在给定新头部下,存储器设备知道完成队列306中的哪些条目已经由主机设备300处理并且可以被覆盖。

图4是主机设备400、存储器设备418和结构通信接口的示例性部件的框图的一个示例。主机设备400与结构402交互,该结构继而包括分别充当入口路径408和出口路径410的结构端口404和406。在这方面,主机设备400与存储器设备418之间的通信接口是双工的,具有单独的入口路径408和单独的出口路径410。从存储器设备418的角度来看,入口路径408包括从主机设备400到存储器设备418的传入请求。相反,从存储器设备418的角度来看,出口路径410包括从存储器设备418到主机设备400的传出请求。此外,如以上所讨论的,可以使用各种结构(诸如rdma或结构信道)。

存储器设备418包括存储器设备控制器420和存储器阵列450。存储器阵列450可能以各种方式来分段,诸如图4所示的那样分成10个部分。存储器设备控制器420可以包括一个或多个处理器440。闪存接口模块446被配置成控制和访问存储器阵列450。存储器设备控制器420还可以包括错误校正448。设想了各种类型的错误校正,包括线性错误校正码(例如,低密度奇偶校验(ldpc))。调度器444被配置成调度一种或多种类型的数据转移。作为一个示例,读取数据可以经由闪存接口模块446并行地从不同的存储器阵列450到达。调度器444可以在不同的数据转移中进行仲裁。

存储器设备控制器420可以包括单个或多个nvme端口422。每个端口可以实现命令和命令封装体管理器424,其负责与结构封装体交互。nvme端口422还可以包含命令获取仲裁器434、命令解析器436和dma438。命令解析器436被配置成解析和/或分类命令。可使用命令解析器436的命令获取器仲裁器434被配置成仲裁从提交队列428获取哪些命令。命令执行器442被配置成仲裁并执行由命令获取仲裁器434从提交队列428获取的命令。直接存储器访问(dma)438被配置成执行主机设备400与存储器设备418之间的实际数据转移。

命令封装体管理器424可以实现提交队列428和命令封装体缓冲器430。在一个实施方式中,命令封装体缓冲器430存储与命令封装体相关联的数据(诸如sgl)以及与提交队列相关联的数据。此外,命令封装体管理器424可以包括写入加速器426。写入加速器426可以包括命令封装体管理器424的入口处的逻辑,其将某些命令引导到高性能路径。例如,写入加速器426可以将具有封装体内数据的写入命令路由到高性能路径,而不是将写入命令发送到提交队列428以用于后续获取。在这方面,写入加速器426包括智能,其用于确定哪些命令在提交队列中排队(以用于稍后的获取/执行),以及哪些命令不在提交队列中排队(例如,插入无操作命令并执行命令而不从提交队列获取)。

nvme端口422还可以包括响应封装体发生器432。响应封装体发生器432可以被配置成生成响应封装体并且在没有检测到错误时立即(例如,在执行命令之前)将响应封装体发布到主机设备400,因为执行命令的所有信息都是在内部保存的。响应封装体发生器432可以在某些情况下立即生成响应封装体,诸如仅在允许高速缓存操作时。在该实施方式中,命令封装体缓冲器430可以直接提供给后端(例如,在nvme端口422外部),使得命令封装体缓冲器430可以尽可能快地重用于其他目的。

因此,写入加速器426可以处理写入缓冲器(包含写入数据)而不是排队/处理写入命令。具体地,写入加速器426被配置成将命令识别为写入命令(和/或不是fua命令),执行封装体中的数据的数据完整性检查,确定封装体是否包括处理此命令所需的所有数据,使响应封装体发生器432通过信号发送响应封装体,并且命令将来自缓冲器(例如,临时缓冲器或dram)的数据写入其他存储器(例如,非易失性存储器诸如nand存储器)。

此外,图4示出了多个nvme端口422。在一个实施方式中,单个nvme端口422驻留在存储器设备218上。在替代实施方式中,多个nvme端口422驻留在存储器设备218上。此外,在一个实施方式中,每个结构入口/出口被分配给不同的nvme端口422。另选地,可以将结构入口/出口分配给多个nvme端口422。

图6是存储器设备确定在执行命令时是否绕过提交队列的流程图600。如以上所讨论的,存储器设备可以使第一组命令在提交队列中排队,并且然后获取用于执行的命令。存储器设备还可以针对第二组命令绕过提交队列,由此执行执行而无需从提交队列排队和/或获取。在602处,存储器设备确定在执行命令时是否绕过提交队列。作为一个示例,存储器设备可以在确定是否绕过提交队列时分析命令的一个或多个方面。具体地,存储器设备可以在确定是否绕过提交队列时分析命令的类型(例如,命令是否是写入命令)。响应于确定绕过提交队列,在604处,存储器设备可以将无操作条目或虚拟条目插入提交队列中。命令获取仲裁器434可以查看无操作条目并确定无操作条目指示执行无操作。这样,命令执行器442不执行无操作条目。此外,在606处,命令执行器442可以开始执行命令,而无需使命令在提交队列中排队或从提交队列获取命令。另选地,响应于确定不绕过提交队列,在604处,存储器设备使命令在提交队列中排队。然后,在610处,在仲裁之后,存储器设备从提交队列获取命令,并且在612处,执行所获取的命令。

因此,可以使用无操作或虚拟提交队列条目,使得主机设备和存储器设备提交队列指针保持对准。当发布完成队列条目时,存储器设备向主机设备指示相关提交队列的当前头指针。因此,通过添加无操作或虚拟条目,当发布任何完成队列条目时,相关的提交队列头指针是正确的。此外,负责提交队列获取的逻辑被配置成识别无操作或虚拟条目并且丢弃无操作或虚拟条目(例如,响应于识别无操作或虚拟条目而执行无操作)。

图7是存储器设备确定是延迟响应封装体还是立即发送响应封装体的流程图700。如以上所讨论的,响应封装体可以在不同时间发送,诸如在开始执行命令之前或之后。在702处,存储器设备确定在开始执行命令之前是否生成响应封装体。如果是,则存储器设备可以分析命令的一个或多个方面。例如,在704处,存储器设备可以执行命令封装体中的数据的错误检查。在706处,存储器设备然后确定数据中是否存在错误。如果是,则在708处,存储器设备延迟发送响应封装体。如果不是,则在710处,存储器设备可以立即发送响应封装体(诸如在开始执行命令之前)。

图8是存储器设备确定是否使命令在提交队列中排队,以及确定是延迟响应封装体还是立即发送响应封装体的流程图800。在802处,存储器设备确定是否已从结构接收到新的命令封装体。如果是,则在804处,存储器设备确定命令封装体是否用于写入命令,以及是否所有数据都在封装体中。如果不是,则流程图800进入810,其中使命令在相关提交队列中排队,以使得命令将在正常路径中执行(即,不加速)。如果是,则在806处,存储器设备确定针对该命令是否允许写入高速缓存。如果不是,则流程图800进入810。如果是,则在808处,存储器设备确定关于命令和/或数据是否存在任何错误。如果是,则流程图800转到810。如果不是,则存储器设备:生成该命令的自动完成消息,并且将该自动完成消息发送给主机设备,而不使其在提交队列中排队;将数据缓冲器和请求转发到后端;并且使无操作(nop)条目在相关提交队列中排队。

最后,如上所述,可以使用任何合适类型的存储器。半导体存储器设备包括易失性存储器设备,诸如动态随机存取存储器(“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