CN110088722B - 用于存储器设备中位置检测的系统和方法 - Google Patents
用于存储器设备中位置检测的系统和方法 Download PDFInfo
- Publication number
- CN110088722B CN110088722B CN201880005104.8A CN201880005104A CN110088722B CN 110088722 B CN110088722 B CN 110088722B CN 201880005104 A CN201880005104 A CN 201880005104A CN 110088722 B CN110088722 B CN 110088722B
- Authority
- CN
- China
- Prior art keywords
- address
- command
- stream
- read
- identified
- 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
Images
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/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了用于确定相对于先前所识别的写入或读取流的传入命令的位置的系统和方法。NVM Express(NVMe)实现了配对提交队列和完成队列机制,其中主机设备上的主机软件将命令放入多个提交队列中。存储器设备从多个提交队列中获取命令,这导致传入命令的散布。为了确定是否应该将所述传入命令分配给先前识别的读取或写入流,分析传入命令相对于先前识别的读取或写入流的位置。位置的一个示例是地址空间中的接近度。响应于确定位置,将传入命令分配给各种流。
Description
相关申请的交叉引用
本专利申请要求于2017年3月24日提交的美国专利申请No.15/468,620和2017年4月26日提交的美国申请No.15/497,547的优先权,这两个申请全文据此以引用方式并入本文。
背景技术
NVM Express(NVMe)是访问经由PCI Express(PCIe)总线附接的非易失性存储介质的标准。NVMe可与各种非易失性存储介质一起使用,诸如固态驱动器(SSD)。NVMe的一个关注点涉及主机设备(其可访问和/或写入非易失性存储介质)与存储器设备(其包括非易失性存储介质)之间的I/O通信。在这方面,NVMe实现了配对的提交队列和完成队列机制,其中主机设备上的主机软件将命令放入提交队列中。存储器设备控制器将完成的命令放置在相关联的完成队列上。
附图说明
包含在本说明书中并构成其一部分的附图示出了本发明的各个方面,并与说明书一起用于解释其原理。在方便的情况下,在整个附图中将使用相同的附图标记来表示相同或相似的元件。
图1A是示例性非易失性存储器系统的框图。
图1B是包括多个非易失性存储器系统和主机的存储模块的框图。
图1C是分级存储系统的框图。
图2A是图1A的非易失性存储器系统的控制器的示例性部件的框图。
图2B是图1A的非易失性存储器系统的非易失性存储器裸片的示例性部件的框图。
图3是主机设备和NVMe控制器的框图,示出了主机设备和存储器设备请求和处理NVMe命令的序列。
图4是示出NVMe平台中的命令流的图。
图5是主机系统和存储器设备的其他示例性部件的框图。
图6是使用来自不同命令的LBA范围的位置确定的图示。
图7A-C是SDM的第一示例操作方法的流程图。
图8是SDM的第二示例操作方法的流程图。
图9是读取数据操作的示例方法的流程图。
图10是流检测条目结构的表。
图11是流检测条目字段描述的表。
具体实施方式
发明内容
如背景技术中所讨论的,NVMe标准实现了配对的提交队列和完成队列机制,具有提交-完成队列的多个配对。例如,一种类型的提交-完成队列是用于对存储器设备的管理命令的管理提交-完成队列,而另一种类型的提交-完成队列用于其他类型的命令,诸如读取或写入命令。如下文进一步讨论的,来自多个提交队列的命令被提取,导致来自多个队列的命令的散布。由于该散布,识别命令流诸如读取流或写入流可能是困难的。
在一个具体实施中,存储器设备分析传入命令(例如,由存储器设备从提交队列提取的命令),以确定命令彼此的位置或接近度。响应于存储器设备确定传入命令接近先前分配给所识别的流的一个或多个命令(称为一个或多个流命令),将传入命令分配给所识别的流。因此,在第一特定具体实施中,分析传入读取命令的存储器设备检测读取流。在第二特定具体实施中,分析传入写入命令的存储器设备检测写入流。
参照该分析,可分析传入命令的一个或多个方面,以便确定一个或多个方面是否是本地的或接近先前分配给所识别的流的一个或多个命令的一个或多个方面。在一个具体实施中,存储器设备分析传入命令的地址(或地址范围),以确定传入命令的地址(或地址范围)是本地的还是接近一个或多个流命令中的地址(或地址范围)。例如,存储器设备可确定是否将传入命令分配给所识别的流(例如,读取流或写入流)。响应于确定传入命令是读取命令,存储器设备将传入命令与来自所识别的读取流的一个或多个命令进行比较。相反地,响应于确定传入命令是写入命令,存储器设备将传入命令与来自所识别的写入流的一个或多个命令进行比较。在该示例中,存储器设备将地址(诸如命令中的逻辑块地址(LBA))或地址范围(诸如由LBA描述的命令中的LBA范围和命令的大小)与一个或多个流命令的地址或地址范围进行比较。LBA是线性寻址方案,用于指定存储在计算机存储设备上的数据块的位置。设想了其他寻址方案。
参照比较地址,存储器设备可将传入命令中的地址与一个或多个流命令中的一者、一些或所有地址进行比较。参照比较地址范围,存储器设备可将由传入命令定义的地址范围与一个或多个流命令中的一者、一些或所有地址的地址范围进行比较。例如,存储器设备可将传入命令的地址范围与每个流命令的地址范围进行比较。又如,存储器设备可将传入命令的地址范围与整个流的地址范围进行比较。存储器设备可将整个流的地址范围定义为流命令中的最低地址与流命令中的最高地址之间的任何地址。因此,即使传入流的地址(或地址范围)不重叠,或者不与传入流的地址(或地址范围)接续,也可确定传入命令的地址或地址范围(诸如LBA范围)接近一个或多个流命令。就这一点而言,即使传入命令不遵循连续的地址序列,如果认为命令为本地的或接近传入流,则命令仍然可与传入流相关联。此外,传入命令的方面(诸如地址)可能不与一个或多个流命令的方面接续或共延;然而,对位置或接近度的分析可指示彼此之间的空间邻近性(诸如地址空间中的邻近性)的量度。下文描述“位置”或“本地”的任何讨论还可包括“接近度”或“接近”。
可通过几种方式之一确定位置。在一个具体实施中,可动态地确定位置。在第一特定具体实施中,位置可基于流命令中的一者的大小(例如,分配给流的最近命令的大小)。在第二特定具体实施中,接近度可基于传入命令的大小。在另一个具体实施中,可静态地确定接近度。例如,接近度可基于最大预先确定值、最小预先确定值或最大预先确定值和最小预先确定值两者。在又一个具体实施中,可动态地或静态地确定接近度。例如,接近度可基于流命令中的一者的大小(例如,分配给流的最近命令的大小),或者可基于预先确定值(例如,最大值或最小值)。
此外,所识别的流可用于存储器设备中的一个或多个操作。在一个具体实施中,存储器设备可使用所识别的写入流以便执行读取先行(RLA)。在美国公开专利申请No.2017/0075629中公开了执行RLA的示例,该申请以引用的方式全文并入本文。具体地,存储器设备可使用检测到的写入流作为RLA算法的输入,而不是检测到的读取流,或者作为检测到的读取流的补充。作为一个示例,存储器设备可针对先前确定的写入流分析传入读取命令,而无需等待分析传入读取命令是否是传入读取流的一部分。可假设主机设备以与先前写入存储器设备中的非易失性存储器相同的方式读取数据。此外,可假设随机写入将以与随机读取相同的方式被读取,而顺序写入将以与顺序读取相同的方式被读取。因此,通过针对先前确定的写入流分析第一读取命令而不等待直到实际检测到读取流,存储器设备可能更快地执行RLA,从而节省了访问非易失性存储器的等待时间。
在另一个具体实施中,存储器设备使用检测到的流(诸如检测到的写入和/或读取流),以便确定在主机设备命令中经常使用的地址(或地址范围)。这些经常使用的地址(或地址范围)可以称为“热地址”或“热地址范围”。实际上,主机设备可执行对特定LBA地址或对特定小范围的LBA地址的多次访问。为了更有效地处理命令(诸如写入命令或读取命令),存储器设备可使用常用的地址算法,以便确定常用的特定地址(诸如特定LBA地址)或特定地址范围(诸如LBA地址的特定范围)。常用的地址算法可在确定中使用先前检测到的流(诸如检测到的写入流和/或检测到的读取流)。具体地,如果传入命令落入先前检测到的流中的一者的热范围内,则该算法确定传入命令是写入命令还是读取命令。如果传入命令是写入命令,则存储器设备可将数据保存到内部缓冲器(诸如易失性内部缓冲器),从而推迟将数据保存到非易失性存储器中。由于期望主机设备将很快重写数据,因此可推迟保存到非易失性存储器。如果传入命令是读取命令,则存储器设备从内部缓冲器读取数据而不执行来自非易失性存储器的读取访问。
使用该信息,存储器设备可更智能地处理主机设备命令而无需主机设备支持。具体地,使用常用地址逻辑生成的该信息,存储器设备可在写入访问之后将存储在指定地址处的数据保存在内部缓冲器中,并且在读取访问期间读取存储在内部缓冲器中的数据而不从非易失性存储器中读取数据。这样,存储器设备可在两个方向上节省传输等待时间并且可减少对非易失性存储器设备的访问总数。
实施方案
以下实施方案描述了用于处理命令的非易失性存储器设备和相关方法。在转向这些和其他实施方案之前,以下段落提供了可与这些实施方案一起使用的示例性非易失性存储器设备和存储模块的讨论。当然,这些仅仅是示例,并且可使用其他合适类型的非易失性存储器设备和/或存储模块。
图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可包括与主机200和存储系统204交互的存储控制器202,该存储系统包括多个非易失性存储器设备100。存储控制器202与非易失性存储器设备100之间的接口可以是总线接口,例如,诸如串行高级技术附件(SATA)、快速外围组件接口(PCIe)、嵌入式多媒体卡(eMMC)接口、SD接口或通用串行总线(USB)接口。在一个实施方案中,存储系统200可以是固态驱动器(SSD),诸如存在于便携式计算设备诸如膝上型计算机和平板电脑和移动电话中。
图1C是示出了分级存储系统250的框图。分级存储系统250可包括多个存储控制器202,每个存储控制器控制相应的存储系统204。主机系统252可经由总线接口访问分级存储系统250内的存储器。作为示例,示例总线接口可包括标准非易失性存储器(NVMe)、以太网光纤通道(FCoE)接口、SD接口、USB接口、SATA接口、PCIe接口或eMMC接口。在一个实施方案中,图1C中所示的分级存储系统250可以是可由多个主计算机访问的可机架安装的大容量存储系统,诸如将存在于数据中心或需要大容量存储的其他位置中。在一个实施方案中,主机系统252可包括主机200中描述的功能。
图2A是更详细地示出控制器102的示例性部件的框图。控制器102可包括与主机交接的前端模块108、与一个或多个非易失性存储器裸片104交接的后端模块110以及执行非易失性存储器设备100的各种功能的各种其他模块。通常,模块可以是硬件或硬件和软件的组合。例如,每个模块可包括专用集成电路(ASIC)、现场可编程门阵列(FPGA)、电路、数字逻辑电路、模拟电路、分立电路的组合、门或任何其他类型的硬件或其组合。除此之外或另选地,每个模块可包括存储器硬件,该存储器硬件包括可与处理器或处理器电路一起执行的指令,以实现模块的一个或多个特征。当模块中的任一个包括存储器的包括可与处理器一起执行的指令的一部分时,模块可包括或不包括处理器。在一些示例中,每个模块可以仅仅是存储器的包括可与处理器一起执行的指令的一部分,以实现对应模块的特征而无需该模块包括任何其他硬件。因为即使当所包括的硬件包括软件时每个模块也包括至少一些硬件,因此每个模块可互换地称为硬件模块。
控制器102可包括缓冲管理器/总线控制模块114,其管理随机存取存储器(RAM)116中的缓冲器并控制内部总线仲裁以在控制器102的内部通信总线117上进行通信。只读存储器(ROM)118可存储和/或访问系统引导代码。尽管在图2A中示出为与控制器102分开设置,但在其他实施方案中,RAM 116和ROM 118中的一者或两者可位于控制器102内。在其他实施方案中,RAM 116和ROM 118的部分可同时位于控制器102内和控制器102外部。此外,在一些具体实施中,控制器102、RAM 116和ROM 118可位于独立的半导体裸片上。
另外,前端模块108可包括主机接口120和物理层接口(PHY)122,其提供与主机或下一级存储控制器的电接口。主机接口120的类型的选择可取决于所使用的存储器的类型。主机接口120的示例类型可包括但不限于SATA、SATA Express、SAS、光纤通道、USB、PCIe和NVMe。主机接口120通常可促进数据、控制信号和定时信号的传输。
后端模块110可包括纠错控制器(ECC)引擎124,其对从主机接收的数据字节进行编码,并对从非易失性存储器裸片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的读取流检测和常用LBA检测113。如下文更详细讨论的,存储器设备可使用位置分析来进行流检测111,以便识别流,诸如读取流或写入流。存储器设备还可使用写入流112来使用读取流检测,以便确定读取流是否与先前检测到的写入流相关联,并且继而基于先前检测到的写入流执行读取先行。另外,存储器设备可使用常用LBA检测113,以便确定主机设备常用的LBA地址或LBA地址范围,并继而确定在何处存储数据(在传入写入命令的情况下)或在何处读取数据(在传入读取命令的情况下)。
图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可包括状态机151,其向控制器102提供状态信息。状态机151的其他功能在下文进一步详细描述。
图3示出了用于经由NVMe标准处理命令的一系列步骤。如图所示,主机设备300包括主机存储器302,并且存储器设备包括控制器,诸如NVMe控制器310。在一个具体实施中,主机存储器302包括提交队列304和完成队列306。此外,在一个具体实施中,提交队列和完成队列可能具有1:1的相关性。另选地,提交队列和完成队列可能不具有1:1的相关性。
实际上,在初始化阶段,主机设备300创建了一个或多个提交队列以及一个或多个对应的完成队列。具体地,主机设备300可通过向存储器设备发送信息诸如每个队列的基地址来向存储器设备通知一个或多个提交队列和一个或多个完成队列。在这方面,每个提交队列具有对应的完成队列。当提交队列和完成队列驻留在主机设备中时,主机设备将信息发送到存储器设备,以便存储器设备确定主机设备中的提交队列和完成队列的位置。在特定具体实施中,主机设备发送指示创建提交队列和完成队列的命令。该命令可包括PRP1指针,该指针是指向特定提交队列或特定完成队列的位置的主机设备上的列表的指针。实际上,存储器设备使用PRP1发送TLP读取请求以获得PRP列表,并将PRP列表存储在存储器设备中以确定主机设备中的存储器位置,以便在将来的命令中使用,以从特定的提交队列中读取或写入特定的完成队列。另选地,主机设备300可指示存储器设备在驻留在存储器设备中的存储器(诸如控制器存储器缓冲器)中创建提交队列和对应的完成队列。
提交队列304可基于环形缓冲器,诸如图3中所示,其具有头指针和尾指针。在创建一个或多个提交队列并且向存储器设备通知所创建的一个或多个提交队列之后,主机设备300可将命令(或多个命令)写入提交队列。这在图3中表示为步骤1,标记为“队列命令”。具体地,图3示出了四个命令被写入提交队列。在一个具体实施中,存储器设备未察觉到主机设备300已经用四个命令更新了提交队列304,因为主机设备300更新了它自己的主机存储器302。在另一个具体实施中(诸如当一个或多个提交队列和一个或多个完成队列驻留在控制器存储器缓冲器中时),存储器设备可监视主机设备300与存储器设备之间的通信接口以进行特定通信,诸如写入驻留在存储器设备上的一个或多个提交队列。例如,存储器设备可监视PCI Express总线上的传输层分组(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中实现的当前头指针上的指针。
可向提交队列或完成队列分配存储器区域(诸如位于主机设备中或位于存储器设备中的控制器存储器缓冲器中)。提交队列和完成队列可包括多个条目,每个条目与特定命令相关联。每个条目的大小可以是预先确定的大小,诸如64字节。就这一点而言,可使用提交队列的基地址以及通过将条目数乘以每个条目的大小(例如,64字节)来偏移基地址以确定提交队列内的条目。
存储器设备知道尾指针,其已经经由步骤2通知。因此,存储器设备可从提交队列304获得所有新命令。在驻留在主机设备上的提交队列中,存储器设备可发送TLP请求以从提交队列304获得一个或多个命令。响应于接收到TLP请求,主机设备300发送具有提交队列304中的命令的完成TLP消息。就这一点而言,在步骤3的结束处,存储器设备从提交队列304处接收一个或多个命令。
在步骤4处,存储器设备处理该命令。在一个具体实施中,存储器设备解析命令,并确定执行命令的步骤(例如,读取/写入/等)。例如,该命令可包括读取命令。响应于接收到读取命令,存储器设备解析读取命令,实现地址转换并访问闪存以接收数据。在接收到数据之后,存储器设备基于命令中的信息(例如,下文讨论的PRP1)将数据存储在主机设备上。又如,该命令可包括写入命令。响应于接收到写入命令,存储器设备解析写入命令,确定被写入的主机设备上的数据的位置,从主机设备上的位置读取数据,并将数据写入闪存存储器。
具体地,存储器设备可接收具有PRP1指针的读取命令或写入命令。例如,其中主机设备请求存储器设备从闪存存储器读取的读取命令包括PRP1指针,其指向PRP列表。存储器设备获得PRP列表,以便确定主机设备内的存储器位置以写入从闪存存储器读取的数据。又如,其中主机设备请求存储器设备将数据写入闪存存储器的写入命令包括PRP1指针,其指向PRP列表。存储器设备获得PRP列表,以便确定主机设备内的存储器位置以从中读取数据(并且此后将读取的数据保存到闪存存储器)。
PRP列表中的每个条目可与主机设备存储器中的特定部分相关联,并且可以是预先确定的大小,诸如4Kb。因此,在1Mb传输中,PRP列表中可能存在250个引用,每个引用大小为4Kb。实际上,存储器设备可不按顺序检索数据。这可能是由于被检索的数据存在于若干闪存裸片上,其中裸片可用于在不同时间进行数据检索。例如,在检索与1Mb传输中的0-100Kb对应的数据之前,存储器设备可检索与1Mb传输中的100-200Kb对应的数据。然而,由于存储器设备具有PRP列表(因此知道主机设备期望存储与100-200Kb对应的数据的存储器位置),因此存储器装置可传输与1Mb传输中的100-200Kb对应的数据,而不首先检索与1Mb传输中的0-100Kb对应的数据。
在NVMe中,可能存在多个PCI Express TLP,以将数据从存储器设备传输到主机设备300。通常,基于命令中的指示将传输的数据存储在主机设备300的主机存储器302中(例如,该命令包括用于存储所请求数据的地址)。
在完成数据传输之后,在步骤5处,存储器设备控制器将完成消息发送到相关的完成队列306。如上所述,在初始化阶段,主机设备300将提交队列与完成队列相关联。这样,主机设备300基于存储器设备写入的完成队列而知道在提交队列中完成的命令。完成消息可包含关于一个或多个命令的处理的信息,诸如命令是否成功完成或者在执行命令时是否存在错误。
在步骤5之后,主机设备300不知道存储器设备发布到完成队列306。这是由于存储器设备使数据被写入完成队列306。就这一点而言,在步骤6处,存储器设备通知主机设备300已经对完成队列306进行了更新。具体地,存储器设备向主机设备300发布中断(例如,在NVMe中,主机设备300可使用MSIe中断)。
响应于接收到中断,主机设备300确定在该完成队列306中存在针对主机设备300的一个或多个未决完成条目。在步骤7处,主机设备300然后处理完成队列306中的条目。例如,利用驻留在存储器设备中的完成队列,主机设备可发送TLP读取请求以读取驻留在存储器中的完成队列。
在主机处理来自完成队列306的条目之后,在步骤8处,主机设备300向存储器设备通知主机设备300从完成队列306处理的条目。这可通过更新完成队列头部门铃寄存器314来执行,该完成队列头部门铃寄存器向存储器设备指示主机设备300处理了来自完成队列306的一个或多个条目。当主机发出完成队列门铃写入时,可更新相关中断合并向量的参数以反映该改变。例如,完成队列的状态可从几乎满态变为几乎空态。因此,可将中断刷新到主机设备。
响应于更新完成队列头部门铃寄存器314,存储器设备更新完成队列306的头部。在给定新头部的前提下,存储器设备知道完成队列306中的哪些条目已经由主机设备300处理并且可以被覆盖。
如上所述,存储器设备可从一个或提交队列提取命令。提取的命令可以是命令流的一部分。在一个具体实施中,流是具有顺序或几乎顺序的LBA的一组命令,其在窄时间帧中被发送到存储器设备。NVMe允许主机设备在每个命令中提供流信息;但是,通常不使用该特征。在每个命令中不存在流信息的情况下,存储器设备仍然可以在没有主机支持的情况下诸如通过使用下文进一步详细讨论的流检测来智能地处理主机命令。使用检测到的流信息,存储器设备可激活RLA方法,其可推测性地访问来自非易失性闪存的数据并将数据存储到临时缓冲器,同时试图节省与感测和传输来自非易失性闪存存储器的数据相关联的等待时间,如下文进一步讨论的。
从多个提交队列提取命令的NVMe标准可能使流检测复杂化。实际上,主机设备可具有多处理器,每个处理器可能具有其自己的NVMe提交队列。每个处理器可能具有任何工作负载,尽管特定线程内的命令可能具有位置关系。但是,存储器设备无序地从提交队列中提取命令,从而可能丢失可存在于特定提交队列中的命令的位置。这在图4中示出,该图是示出NVMe平台中的命令流的图。例如,线程0可以具有命令A、B、C、D,它们被放置在线程的相关提交队列(I/O队列0)上。存储器设备可执行仲裁,以从各个提交队列(诸如I/O队列0、I/O队列1和I/O队列3)提取命令。例如,在确定从提交队列中提取哪些命令时,存储器设备可使用仲裁算法,诸如循环算法或加权循环算法,以确定从多个提交队列提取命令的次序。通过循环法,存储器设备以对称方式选择放置在不同提交队列中的命令。利用加权循环法,存储器设备以非对称方式选择放置在不同提交队列中的命令,其中每个提交队列在初始化阶段由主机设备分配其自己的优先级。在任一具体实施中,来自各个提交队列的命令被分散在仲裁队列中,诸如图4所示。就这一点而言,NVMe中的流检测可能更困难。
在一种方式中,存储器设备可通过分析顺序接收的一组命令来检测流。具体地,如果所接收的命令具有连续的LBA(即,下一个LBA=当前LBA+命令大小),则存储器设备可检测顺序性。如上所述,NVMe中的提取命令可能是无序的;然而,所提取命令的LBA作为一个组可具有顺序性(例如,可具有连续的LBA)。换句话讲,存储器设备可基于HASH算法检测流。具体地,可在位图桶中收集可能无序到达的命令。起始LBA的较低地址位被屏蔽掉以产生散列的范围。然而,该方法可能无法识别具有较短邻LBA的流。就这一点而言,当从多个提交队列提取命令时,这两种选项缺乏识别流的灵活性和适应性。
因此,在一个具体实施中,流检测基于命令位置检测而不是命令顺序检测。流可包括通过一个或多个方面诸如其逻辑传输地址范围相关的一组相同类型的命令(诸如读取或写入命令)。存储器设备可在若干情况之一中使用所识别的流。例如,对于队列深度和吞吐量较低的情况,通过将预期的流数据从非易失性存储器(诸如闪存存储器)读入易失性存储器(诸如SRAM或DRAM)中,存储器设备可减少等待时间,而不管命令长度如何。具体地,当检测到一个或多个读取流时,即使在执行第一读取命令之前,存储器设备也可开始在专用缓冲器内准备读取数据。因此,为了能够预测存储器设备将从非易失性存储器读取的数据,存储器设备可在来自主机设备的到达命令内检测可能的读取流。
流中的命令在其传输地址中可能不一定是严格按顺序的。此外,连续命令可在相对较窄的位置定义内的地址空间中彼此为本地的。下文更详细地描述了各种位置的示例。流中的命令可具有某个共性,诸如LBA空间中的贴近性;然而,每个命令的起始地址可高于或低于前一个命令的地址。此外,命令可能不总是处于相同的相对方向(例如,向前或向后方向)。如上所述,NVMe特别倾向于本地的基于流的但不是严格的顺序访问模式。
图5是主机设备500和存储器设备520的其他示例性部件的框图,其中存储器设备520包括用于命令位置检测的流检测管理器(SDM)532和闪存存储器550。SDM 532可以是SDM内核530的一部分,其包括可以向SDM 532提供配置输入的固件(FW)寄存器534。例如,FW寄存器534可提供关于MinGap的输入(例如,最小接近度的指示)和MaxGap(例如,最大接近度的指示),如下文更详细地讨论的。
主机设备可发送彼此相关的命令,诸如顺序读取命令,或者可发送随机且彼此不相关的命令。SDM 532可分析命令的位置,而不管随机性如何,以便更有效地处理命令。例如,即使命令本身是随机的,命令的LBA也可具有顺序性。就这一点而言,下文讨论的位置分析可以识别顺序性,使得存储器设备可以高速缓存来自闪存存储器的数据,并且因此可以更有效地处理主机命令。
在一个具体实施中,SDM 532可检查传入命令以确定它们是否完全顺序地或几乎顺序地到相同方向的最后一组传入命令中的一者(例如,读取或写入)。此外,SDM 532可支持有序命令和无序命令。实际上,存储器设备520可解析传入命令,使用SDM 532检查是否检测到先前解析的命令的任何位置,并且根据预定义的参数将连续的命令累积到特定的条目(例如,诸如SDM RAM 440)中。当超过预先配置的阈值时,可将条目声明为流。在一个具体实施中,存在最大数量的并发条目。在该具体实施中,可移除和/或覆盖潜在条目列表中的旧条目,如下文更详细地讨论的。
此外,在一个具体实施中,SDM 532可使用位置检测算法。存储器设备可分析从提交队列提取的一个、一些或所有命令。例如,对于每个传入命令(InCmd),SDM 532可检查该命令是读取命令还是写入命令。对于读取命令,SDM 532针对所有读取流检查传入命令。在一个具体实施中,读取流可包括候选读取流和读取流。候选读取流是SDM 532尚未确定为读取流的一个或多个命令。在特定具体实施中,响应于候选读取流的某些特性(诸如与候选读取流相关联的一定数量的命令或与候选读取流相关联的一个或多个命令的地址范围的总和大于总地址范围长度),SDM 532可将命名从候选读取流变为读取流。
相反地,对于写入命令,SDM 532针对所有写入流(诸如候选写入流和写入流)检查传入命令。类似于读取流,候选写入流是SDM 532尚未确定为写入流的一个或多个命令。此外,SDM 532可响应于确定候选写入流的某些特性(诸如命令的总数或与候选写入流相关联的命令的总地址范围)而将候选写入流变为写入流。在一个具体实施中,在命名为写入流之后,存储器设备可使用命名的写入流进行进一步处理。例如,可将传入读取命令与写入流进行比较以确定是否执行RLA,如下文进一步讨论的。
如下文进一步讨论的,SDM可遍历候选流(Stream[x])的所选组(例如,读取或写入)的每个条目,并检查传入命令的范围是否是现有流或候选流的本地范围。如果传入命令被认为对于已经分配给相应流的一个或多个命令(例如,与分配给相应候选流的最后一个命令足够接近)而言是本地的(例如,在值方面足够接近),则可将传入命令分配给流。
可使用各种方法确定传入命令对于流而言的位置。在一个具体实施中,间隙可用于判断位置。如上所述,间隙可基于传入命令的长度和/或基于已经分配给相应流的一个或多个命令(例如,分配给相应候选流的最后一个命令的长度)。
在一个具体实施中,可根据与每个命令方向相关联的三个寄存器的内容来计算间隙值。在第一特定具体实施中,可将命令分配给第一候选流,对于该第一候选流,发现该命令位于最后添加到候选流的命令的间隙距离内。在第二特定具体实施中,可将命令分配给第一候选流,对于该第一候选流,发现该命令位于添加到候选流的任何命令的间隙距离内。这三个参数是:
LenMult:长度乘数用于乘以最后一个命令长度(或另一个命令长度)以计算允许的间隙。如果到最后一个命令(或候选流内的另一个命令)的距离小于或等于间隙,则可将命令分配给流。该字段可以是任意数字。
MinGap:如果长度乘数乘以最后一个命令长度小于预先确定的量,则最小间隙用于间隙值。可使用最小间隙,因为流中的命令长度是可变的,并且如果分配给相应流的最后一个命令很小,则SDM 532可试图替换不同的最小间隙值。
MaxGap:如果长度乘数乘以最后一个命令长度大于预读的合理数据量,则使用最大间隙作为间隙值。
可通过将流计数和流运行长度与阈值进行比较来执行流质量鉴定。可在配置寄存器(诸如FW寄存器534)中输入阈值。此外,在一个具体实施中,阈值对于读取流和写入流可以是不同的。
位置条件可取决于条目中最后一个命令的长度及其范围。首先,SDM532可计算所允许的间隙,如上所述可由LenMult、MinGap、MaxGap定义,并且可由FW和最后一个命令的长度来定义。
下文的等式描述了由SDM 532进行的计算的一个示例,以便找到间隙。
Gap=min(max(LAST_LEN*LenMult,MinGap),MaxGap)
设想了其他间隙计算。在计算所允许的间隙之后,SDM 532可以确定传入命令的LBA范围是否与候选流中的任一个、任何组合或所有命令的范围重叠,同时在一个或两个方向上添加间隙。作为一个示例,SDM 532可确定传入命令的LBA范围是否与最后一个命令的范围重叠,同时在两个方向上添加间隙。又如,SDM 532可确定传入命令的LBA范围是否与最后一个命令的范围重叠,同时仅在一个方向上添加间隙(例如,在流动量检测的情况下)。再如,SDM 532可确定传入命令的LBA范围是否与候选流中的一个或多个命令的范围重叠,同时将间隙添加到一个或两个方向。
图6是使用来自不同命令的LBA范围进行位置确定的图示。具体地,图6示出了为了使SDM 532检测命令是否对于候选流而言为本地的而进行的计算。所列的展示位置的传入命令被检测为流的本地命令,因为在考虑所允许间隙的同时,存储在时段中的命令与最后一个命令之间存在重叠。所列的不展示位置的新命令不是流的本地命令,因为它们的LBA范围太远。
如上所述,流的LBA范围能够通过若干方式中的一种确定。在一种方式中(图6中示出),可基于添加到流的最后一个命令的范围来确定LBA范围(例如,由起始LBA和添加到流的最后一个命令的大小确定)。换句话讲,可基于添加到流的命令中的一些但不是全部命令的范围来确定LBA范围。在另一种方式中,可基于添加到流的所有命令的范围来确定LBA范围。
下文的公式描述了由SDM 532进行的计算,以便确定传入命令是否是当前提取条目的本地命令:
LocDet=(LLBA-gap<=InCmd(LBA+LEN)-1<=LLBA+LAST_LEN-1+gap)OR
(LLBA-gap<=InCmd.LBA<=LLBA+LAST_LEN-1+gap)OR
(InCmd.LBA<=LLBA-gap)&(LLBA+LAST_LEN-1+gap<=InCmd(LBA+LEN)-1)
当检测到LocDet时(意味着传入命令对于当前获取的条目而言是本地的),可保存该条目的索引以供将来使用。
重新参照图6,顶行示出候选流或流的最后一个命令的地址范围。作为一个示例,来自候选流的单个命令可确定候选流的地址范围。每个条目可以是三个类别中的一种:(1)流条目的候选者(如上所述,当满足候选流的一个或多个阈值时,候选流被命名为流);(2)流条目(已满足一个或多个阈值以命名为流);或者(3)空条目(在操作开始时或由于清除最旧的条目而产生)。
如图6所示,候选流在图11所示的表中被描述为最后块地址(LLBA),或添加到候选流的最后一个命令的LBA。此外,候选流由添加到候选流(LAST_LEN)的最后一个命令的长度来描述。因此,在地址空间中,添加到候选流的最后一个命令的地址范围是从LLBA到LLBA+LAST_LEN-1。又如,来自候选流的多个命令可确定候选流的地址范围。具体地,与先前与候选流相关联的命令相关的一些或所有地址范围可定义SDM 523的地址范围。
图6还示出了间隙,该间隙可被添加到候选流的地址范围的一侧或两侧。如上所述,能够以各种方式确定间隙,诸如基于候选流中的一个或多个命令和/或传入命令。图6中的第二行示出了候选流的地址范围加上间隙。因此,图6中的第二行是如何确定位置的一个示例。如上所述,设想了位置确定的其他示例。
图6中的第三行是分析的第一个传入命令。如图所示,第一个传入命令的地址范围根本不与候选流的地址范围加上间隙重叠。就这一点而言,SDM 523确定第一个传入命令不具有候选流的位置。
图6中的第四、第五和第六行与分析的第二个、第三个和第四个传入命令相关。如图所示,第二个、第三个和第四个传入命令的地址范围各自至少部分地与候选流的地址范围加上间隙重叠。具体地,第二个传入命令在候选流的左侧加上间隙(更具体地在左间隙上)重叠。第四个传入命令在候选流的右侧加上间隙(更具体地在右间隙上)重叠。最后,第三个传入命令与候选流的地址范围共延。就这一点而言,SDM 523确定第二个、第三个和第四个传入命令具有候选流的位置。位置检测公式(LocDet)包括三个元素,其中第一个元素确定左边是否有重叠(对应于第二个传入命令),第二个元素确定地址是否包含在候选流的地址流中加上间隙(对应于第三个传入命令),并且第三个元素确定右边是否有重叠(对应于第四个传入命令)。
图6中的第七行是分析的第五个传入命令。如图所示,第五个传入命令的地址范围根本不与候选流的地址范围加上间隙重叠。就这一点而言,SDM 523确定第五个传入命令部具有候选流的位置。最后,图6中的第八行是分析的第六个传入命令。如图所示,第六个传入命令的地址范围与候选流的地址范围加上间隙完全重叠。就这一点而言,SDM 523确定第六个传入命令具有候选流的位置。
如图7A-C和图8所示,SDM 532分析新的传入命令。在特定具体实施方式中,SDM532将所有新的传入命令添加到条目表。SDM 532提取所有读取或写入命令(根据接收到的命令的类型)。对于每个提取的条目,SDM 532可检查以下内容:位置;如果未检测到位置,则SDM检查该条目是否为空;如果没有检测到位置并且条目不为空,则SDM 532可确定是否移除最近最少使用的条目(例如,SDM 532检查CurrLruDiff并在必要时更新LruDiff,如下文进一步讨论的)。在一个具体实施中,当SDM 532完成所有条目的提取时,SDM 532根据算法流程中的描述更新数据库。
由SDM 532使用的SDM数据库可存储在存储器设备的各个部件中。在一个具体实施中,SDM数据库可存储在易失性存储器(诸如RAM)中,并且可维护候选流表。在更特定的具体实施中,易失性存储器中的专用空间可被划分为读取条目和写入条目,其中固件指定每种类型的候选流的数量。对于每个候选流,SDM 532可存储关于可帮助SDM 532检测流的历史命令(诸如地址和/或大小)的一个或多个方面。
图7A-C是SDM的第一示例操作方法的流程图700。流程图700涉及一种类型的命令,诸如读取命令。也可使用其他类型的命令,诸如写入命令。
在702处,可执行初始化,其中在存储器设备中的数据库中定义的N个条目可用于存储候选流/流。条目的大小和结构可在图10中所示的表中定义。此外,在702处定义用于SDM 532操作的所有必要参数。
例如,在初始化阶段,固件可在系统中配置最大数量的读取流(READ_STREAMS)和写入流(WRITE_STREAMS)。该配置可确定SDM数据库的结构。具体地,条目0到READ_STREAMS-1可描述候选读取流,而条目READ_STREAMS到READ_STREAMS+WRITE_STREAMS-1指定候选写入流。
在704处,SDM等待接收新的传入命令。在706处,SDM 532确定是否已经提取了最后一个条目。如果是,则流程图700移动到“A”。如果不是,则在808处,SDM 532开始从数据库读取K个条目。在一个具体实施中,SDM 532可一次读取和检查一个条目。另选地,SDM 532可同时读取和检查多个条目以提高性能。K可如下定义:
K定义:1≤K≤N,N%K=0(其中模N/K运算为0)
可定义内部变量i以指示当前条目的数量。在操作开始时,i=0。
在710处,SDM 523使变量i递增并开始对第一条目i执行条件和计算的检查。在712处,SDM 532检查之前是否已检测到位置。如果是,则在714处,流程图移动到728。如果不是,则流程图移动到722。
因此,在一个具体实施中,在找到传入命令展示位置的第一条目时终止位置检测。在另选具体实施中,该算法可在当前条目列表中找到传入命令展示位置的所有条目。此后,该算法可选择展示最佳位置条件的单个条目。作为一个示例,具有距传入命令最小间隙的地址范围的条目可被选择为具有最佳位置。在该另选的具体实施中,可对所有条目执行LRU分析,包括被检测为本地但没有展示最佳位置的条目。
在716处,SDM 532计算间隙(诸如如图6中所示的地址范围间隙),并计算当前条目i的位置(诸如将地址范围间隙添加到地址范围LLBA到LLBA+LAST_LEN–1的两侧)。在718处,SDM 532检查该条目是否通过了一个或多个位置条件。例如,如图6所示,SDM 532可检查传入命令的地址范围是否与候选流的地址范围加上间隙至少部分地重叠。如果检测到位置,则在720处,SDM 523执行以下步骤:断言LocalityDet变量(用作后续条目的条件检查);保存当前条目的索引(位置)以供进一步使用;并开始检查下一个条目。
如果未检测到位置,则在722处,SDM检查当前条目是否是空条目。如果是,则SDM532仅找到第一个空闲(空)条目。具体地,在724处,SDM 532执行以下操作:断言EmptyDet变量(随后用作下一条目的条件检查);保存当前条目的索引(位置)以供进一步使用;并开始检查下一个条目。
如果当前条目i没有位置检测且没有空检测,则检查该条目以便确定是否移除该条目。移除条目的一个基础是使用最近最少使用的(LRU)方法来测量“陈旧性”。设想了确定是否移除条目的其他方法。以下是LRU方法的定义:
MaxLru:寄存器中配置的值(在操作期间保持不变)
MaxLruInd:是从MaxLru得出的索引。MaxLruInd=MaxLru-1
CurrLru:内部计数器,其每次收到新命令时递增,并在0,1,…MaxLruInd,0,1…之间计数。
Entry[i].Lru:条目i的LRU值。每次将当前命令添加到条目(LBA和SIZE)时,LRU字段使用CurrLru的值进行更新,这意味着更新的条目是最新的条目。
LruDiff[i]:是CurrLru与Entry[i].Lru之间的LRU差异。(即,LruDiff[i]=CurrLru-Entry[i].Lru)。减法的结果指示当前条目i的“陈旧性”。
LruDiff:是内部变量,其具有LruDiff[i]的结果。仅当新的LruDiff[i]值大于LruDiff时才新。因此,LruDiff在SDM操作结束时具有最大的差异值。
在给定LRU定义的前提下,在728处,SDM执行LRU计算。图7C示出了示例性LRU计算728。例如,在780处,SDM计算当前条目i的LRU_Diff;重置第一次迭代的局部变量;并且如果i=1,则LruDiff=0:
在782处,SDM 532确定以下条件:是否CurrLru>Entry[i].Lru。通常应该是这种情况,因为CurrLru会在每次收到新命令时递增;然而,Entry[i].Lru保持不变(直到下一个条目更新)。然而,SDM 532支持CurrLru值发生重叠的情况(流程图移动到784,如下所述)。
如果CurrLru>Entry[i].Lru,则在786处,SDM 532计算简单减法以确定当前条目的LruDiff[i]。
如果CurrLru不大于Entry[i].Lru,则在784处,SDM 532检查CurrLru<Entry[i].Lru。如果是,则发生重叠,因此在788处,实际差值计算如下:
LruDiff[i]=CurrLru+(MaxLruInd-Entry[i].Lru)
如果CurrLru不小于Entry[i].Lru,这是CurrLru=Entry[i].Lru的最后特定情况,这意味着这是一个可能的最大差值。就这一点而言,当前条目是最旧的条目。在此类情况下,在790处,当前条目的LruDiff[i]将获得最大可能值MaxLru。
在792处,SDM 532确定当前条目的LruDiff[i]是否大于LruDiff值。如果是,则将其覆盖。具体地,在794处,将LruDiff设置为等于LruDiff[i],并且保存当前条目的索引(地址)以供进一步使用。
在726处,SDM 532确定内部变量i是否小于K(从数据库检索的条目的数量)。如果不是,则流程图700迭代回到710。如果是,则流程图迭代回到706。此外,在706处,如果已经提取最后一个条目,则流程图700转到“A”。具体地,在完成所有迭代之后,已经检查了所有条目并且累积了所有必要的数据。然后,SDM 532可进入第二阶段,如图7B所示。
在752处,SDM 532确定是否已检测到位置(例如,通过检查LocalityDet=1)。如果检测到位置,则在764处,使用当前命令的信息更新位置条目。例如,位置条目的以下字段被更新:LLBA和LAST_LEN:其用新命令的LBA和SIZE覆盖;CMD_CNT:递增1;TOT_LEN按新命令的SIZE递增;LRU:用CurrLru值覆盖(每次添加命令时LRU都会更新);DET:断言条目是否将其类型从候选流更改为流(当CMD_CNT或/和TOT_LEN达到预先配置的阈值时);流动量(SM):指示流动量。
流动量可用作访问的趋势方向。此外,流动量可与决定读取哪些LBA范围相关,以便获得RLA上的命中,如下文进一步讨论的。在一个具体实施中,可通过将最后LBA与起始LBA进行比较以定义流的动量。如果最后一个更大,则将其视为前向流动量。否则,将其视为后向流动量。
在特定具体实施中,流动量(SM)包括单个位,并且根据以下公式进行更新:
If(CC_LBA>Entry.SLBA)SM=0,else SM=1
其中:
CC_LBA:新命令的LBA
Entry.SLBA:流的起始LBA(当将第一个命令添加到条目时,Entry.SLBA字段可能会更新一次)
SM=0表示前向动量;SM=1表示后向动量。
在766处,SDM 532确定是否找到最旧的条目(例如,LruDiff=MaxLRU)。如果是,则在768处,清除该最旧的条目并且可将其用于新的候选流/流。
如果在752处未检测到位置,则SDM 532仍可检查是否用当前命令打开新的候选流/流。因此,在754处,SDM 532检查是否LruDiff=MaxLRU。如果(LruDiff=MaxLRU),则在758处,新命令将覆盖最旧条目的数据。如果不是,则在756处,SDM 532确定是否检测到空条目。如果是,则在760处,SDM 532使用当前命令的信息更新空条目。如果不是,则在762处,新命令的数据将覆盖在740处找到的旧条目的数据。在770处,CurrLru变量将递増。这样,在完成所有迭代并更新条目之后,当新的传入命令到达时,可使用具有递增的CurrLru值的内部计数器。最后,在“B”处,SDM 532完成其操作,流程图750循环回到704。
图8是SDM 532的第二示例操作方法的流程图800。在802处,存储器设备接收新命令。在804处,SDM 532可初始化一个或多个内部变量。在806处,SDM 532检查索引值是否再次进行迭代。如果是,则在808处,SDM 532提取下一个条目。在810处,SDM 532检查是否检测到位置。如果已检测到位置,则SDM 532设置变量以在822处使用。如果不是,则在812处,SDM检查该条目是否为空。如果是,则在816处,SDM设置一个或多个变量以在822处使用。例如,SDM可将传入命令与检测到位置的流相关联。具体地,SDM可更新与检测到位置的流相关联的地址范围以供以后使用(诸如,如图6中所讨论的那样检查下一个传入命令的地址范围)。此外,SDM可基于相对于流中的其他命令对传入命令的分析来更新流动量。如下所述,流动量可用于RLA操作。另外,SDM可选择待移除的LRU条目。具体地,SDM可试图删除与较旧的流相关的数据,因为它们不太相关。就这一点而言,可移除与较旧流相关联的条目。
如果不是,则在814处,SDM 532检测该条目是否是较旧的条目,如果是,则设置变量以供在822处使用。例如,如果未检测到位置,则SDM可确定在何处保存关于传入命令的信息。如上所述,SDM具有一定数量的读取流条目和一定数量的写入流条目。在未检测到位置的情况下,SDM可将传入命令(传入读取命令或传入写入命令)分配给条目。如果存在空条目,则SDM可将来自传入命令的信息存储在空条目中。如果没有空条目,则SDM可选择最近最少使用的条目,以便用来自传入命令的信息覆盖该条目。如果SDM无法定位最近最少使用的条目,则SDM仍然可选择较旧的、最近较少使用的条目,其中用来自传入命令的信息覆盖该条目。
如果系统迭代了max_index次,则SDM 532更新流检测器数据库。例如,SDM 532使相关命令类型(无论是读取命令还是写入命令)的当前LRU递增。此外,如果检测到位置,则SDM 532更新变量以指示传入命令与特定流相关联。SDM 532还确定是否移除旧条目。如果未检测到位置,则SDM 532替换当前条目的最旧条目或将当前条目放入空条目中。
如上所述,在一个具体实施中,检测到的流诸如检测到的写入流可用于执行读取先行(RLA)操作。具体地,存储器设备可激活RLA逻辑,其可推测性地从非易失性存储器提取数据到临时缓冲器,以试图节省非易失性存储器感测等待时间和传输等待时间。由于节省了非易失性存储器感测时间和传输时间,因此RLA逻辑可在命中的情况下改善整体性能。然而,RLA特别有利于高命中率/未命中率。否则,存储器设备可通过读取数据并稍后丢弃数据来在非易失性存储器上添加额外的流量。因此,有效的RLA算法有益于存储器设备的操作。
在一个具体实施中,存储器设备检测写入流,并将检测到的写入流用于与写入流相关的操作。与检测到的写入流相关的一个示例操作是在处理非写入命令时使用检测到的写入流。一个示例非写入命令可以是读取命令。实际上,检测到的写入流可用作RLA算法的输入,以便处理读取命令。如上所述,SDM可被配置用于在NVMe标准下提取命令,其中命令被无序地提取。SDM可为灵活的且适于流促进和移除两者。
在一个具体的具体实施中,RLA算法可分析从主机设备发送的具有已检测到的写入流的读取命令的至少一个方面。例如,RLA算法可确定读取命令的地址是否位于已经检测到的写入流内。实际上,假设主机设备以与写入数据相同的方式从非易失性存储器读取数据(例如,对先前以顺序方式写入的数据执行顺序读取)。例如,随机写入或顺序写入可能导致随机读取或顺序读取的高概率。因此,存储器设备可提前提取写入流信息,响应于单个读取命令的接收而使用该信息,并应用RLA算法。因此,在一个具体实施中,RLA可在仅接收一个读取命令之后开始。这与需要较多数量的读取命令以便在启动RLA算法之前检测读取流形成对比。就这一点而言,已经检测到的写入流对于RLA算法可能是有指导性的。在另选具体实施中,除了作为RLA算法的输入的写入流检测之外,可作为RLA算法输入的读取流检测算法(其分析最新接受的读取命令)的输出是流检测算法。
已经检测到的写入流能够以若干方式中的一种表征。在一个具体实施中,检测到的写入流可用起始LBA和总长度以及对RLA有用的其他信息表征。例如,来自写入流的一个、一些或所有以下信息可用于决定为RLA高速缓存的数据:TOT_LENGTH(流的总长度)、CMD_NUM(例如,分配给流的命令的数量)、SM(流动量)、LLBA(最后的逻辑块地址)等。在一个具体实施中,固件可决定是否使用从写入流中提取的任何或所有信息。另选地,固件可使用预先配置的N个读取数据。
通常,主机设备以顺序方式发送写入命令,使得存储器设备将用于写入命令的数据顺序地存储在存储器设备的存储器内。如上所述,SDM可检测写入流。例如,在写入命令执行期间,SDM可操作,其中根据寄存器中的配置值检测写入流。在检测到写入流之后,在写入流结构内保存信息,如图10所示。图11中示出了图10中的字段的描述。
当主机设备随后发送位于已经检测到的写入流内的读取命令时,RLA算法可根据位于写入流内的信息启动与附加的后续读取数据一起预取所请求的读取数据。
图9是读取数据操作的示例方法的流程图900。在902处,存储器设备接收新的读取命令。然后,存储器设备可确定所接收的读取命令中的地址是否位于先前检测到的写入流内。例如,在904处,存储器设备确定当前命令起始LBA(CC.SLBA)是否大于或等于写入流起始LBA(WS.SLBA),并且当前命令起始LBA是否小于写入流最后LBA(WS.LLBA)。如果是,则接收到的读取命令的地址位于先前检测到的写入流内。
在906处,存储器设备确定必要的读取数据是否已经存在于内部缓冲器内。如果是,则不需要执行闪存读取(因此不存在闪存等待时间),并且在908处,从内部缓冲器读取数据。如果不是,则执行闪存读取,并且在910处,存储器设备确定是否已经针对该特定读取命令启动RLA操作。如果不是,则在912处,算法将启动RLA,并且在920处将预取所请求的读取数据和从CC.SLBA开始的随后N个读取数据块到内部缓冲器中。根据流动量确定,N个块读取可以是前向方向或后向方向。具体地,响应于确定流具有前向动量(如上所述),从CC.SLBA开始并且在前向方向上读取N个数据块。响应于确定流方向具有后向动量,从CC.SLBA开始并且在后向方向上读取N个数据块。
在一个具体实施中,N(RLA的块数)可以是预先确定的静态数。在另选具体实施中,可基于先前检测到的写入流来选择N。例如,先前检测到的写入流的地址范围和/或总长度可确定RLA的块数N。
如果RLA操作已经启动,则在914处,存储器设备执行最后检查是否已经检测到读取流。如果不是,则在918处,算法预取预先配置的N个读取数据块。如果是,则在916处,算法根据来自Hit::Miss函数924的输入预取读取数据块的数量。一旦检测到读取流,Hit::Miss函数就可以开始运行。来自在922处的存储器设备的操作期间检测到的读取流的信息可用作Hit::Miss函数的输入。Hit::Miss函数可配置为自适应算法,该算法决定在不久的将来针对可能的用途预取的后续读取数据块的数量。在一个具体实施中,Hit::Miss函数可以是简单的算法,其决定读入内部缓冲器的数量(除了N)。该决定可基于包含在检测到的读取流中的信息。
因此,在使用流程图900时,可减少闪存等待时间。具体地,尽管不会保存第一闪存等待时间,但是如果已经预取了所请求的数据,则将保存所有后续读取数据请求的等待时间。此外,使用检测到的写入流甚至可在存储器设备检测到读取流之前更快地预测和准备读取数据。
在又一个具体实施中,存储器设备可将地址或地址范围识别为经常由主机设备访问。具体地,为了减少对特定地址或地址范围的访问等待时间,存储器设备可使用热范围算法识别这些地址或地址范围。具体地,某些操作系统诸如操作系统通常访问相同的LBA或小范围的LBA。就这一点而言,识别这些地址或地址范围可通过在内部缓冲器内准备必要的数据来提高性能。在特定具体实施中,热范围算法可与其他算法结合使用,诸如RLA算法。单独使用的RLA算法可能会导致内部缓冲器中准备好的数据被不必要地删除/被新的更相关的数据覆盖。然而,可不同地处理被指示与热地址(或热地址范围)相关联的数据。例如,“热”数据可保存在临时缓冲器中并被标记,使得存储器设备允许此类数据保存更长的时间和/或更长时间的使用。
热范围算法可使用关于先前检测的写入/读取流的信息作为输入。这样,存储器设备可将存储在热地址或热地址范围中的数据存储在一个或多个内部缓冲器中,无论是否将数据存储在非易失性存储器中,如下文进一步讨论的。
在一个具体实施中,以下公式描述了由SDM进行的计算,以便确定热范围字段的值:
stream_range=|CC.LBA–SDB.SLBA|
CC.HR=((stream_range<<CFG)<=SDB.TOT_LEN)&StreamDetected
其中,CC.LBA:当前命令起始LBA
SDB.SLBA:流起始LBA
SDB.TOT_LEN:流总长度
CFG:配置值,流范围乘以2^CFG
StreamDetected:检测到流的指示
CC.HR:热范围算法的结果。
热范围算法可针对每个新命令应用于检测到的流。热范围算法可基于“流范围”,其是最后一个命令(新命令)起始LBA和流起始LBA(如上所示)的绝对值,以及通过流的总流量(累计扇区数),而不包括新传入命令的长度。仅当StreamDetected指示信号指示检测到流时,热范围位才包含有效信息。否则,将清除热范围位。
在更特定的具体实施中,为了使标准不那么敏感,流范围乘以CFG值,可在寄存器中设置该量。然后,将相乘的流范围与总流量进行比较。响应于相乘范围大于流的总流量,它被分类为顺序流(HR=0)。如果流的总流量大于或等于相乘范围,则设置上下文以指示该命令是热范围的一部分(HR=1)。
实际上,当识别被认为是“热”的LBA时,将存储在其中的数据存储在易失性存储器中而不是存储在非易失性存储器中(或除了非易失性存储器之外)是有益的。此外,如上所述,可在来自主机设备的每个命令到达时应用热范围算法。如果命令落入已经检测到的流中的一者的热范围内,则可根据命令的类型执行不同的操作。如果该命令是写入命令,则存储器设备可将数据保存在内部缓冲器(诸如控制器RAM)中。在一个具体实施中,存储器设备将数据保存到内部缓冲器,并推迟将数据保存到非易失性存储器。由于期望主机设备将很快重写数据,因此可推迟向非易失性存储器的转移,从而节省重复的写入操作。在另一个具体实施中,存储器设备将数据保存到内部缓冲器和非易失性存储器两者。如果该命令是读取命令,则存储器设备从内部缓冲器读取数据,而无需从非易失性存储器执行读取访问。因此,存储器设备可将热范围算法应用于每个到达的命令,同时利用已经存在的流检测数据库。使用热范围算法,可从流检测器数据库中过滤掉热LBA,并且可将热LBA存储在易失性存储器中。
最后,如上所述,可使用任何合适类型的存储器。半导体存储器设备包括易失性存储器设备,诸如动态随机存取存储器(“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配置来设计。
通常,在单体三维存储器阵列中,一个或多个存储器设备级在单个基板上方形成。任选地,单体三维存储器阵列还可具有至少部分地在单个基板内的一个或多个存储器层。作为非限制性示例,基板可包括半导体,诸如硅。在单体三维阵列中,构成阵列的每个存储器设备级的层通常形成在阵列的底层存储器设备级的层上。然而,单体三维存储器阵列的相邻存储器设备级的层可被共享或具有介于存储器设备级之间的居间层。
然后,可单独形成二维阵列,然后封装在一起以形成具有多个存储器层的非单体存储器设备。例如,非单体的堆叠存储器可通过在单独的基板上形成存储器级然后将存储器级堆叠在彼此之上而构造。可在堆叠前将基板减薄或从存储器设备级移除,但由于存储器设备级在单独基板上初始形成,因此所得的存储器阵列不是单体三维存储器阵列。此外,多个二维存储器阵列或三维存储器阵列(单体或非单体)可在单独的芯片上形成,然后封装在一起以形成堆叠的芯片存储器设备。
通常需要相关联的电路来操作存储器元件并与存储器元件通信。作为非限制性示例,存储器设备可具有用于控制并驱动存储器元件以实现诸如编程和读取功能的电路。该相关联的电路可与存储器元件位于同一基板上和/或位于单独的基板上。例如,用于存储器读取-写入操作的控制器可位于单独的控制器芯片上和/或位于与存储器元件相同的基板上。
预期将前面的详细描述理解为本发明可以采用的选定形式的说明,而不是作为本发明的定义。预期只有以下权利要求书(包括所有等同物)限定要求保护的本发明的范围。最后,应当指出的是,本文所述任何优选实施方案的任何方面可以单独使用或彼此组合使用。
Claims (23)
1.一种用于读取流的方法,包括:
访问识别的读取流,所述识别的读取流包括一个或多个读取命令和地址范围,所述地址范围基于存储器设备中接收的所述一个或多个读取命令中的地址确定;
访问传入命令;
检查所述传入命令的地址,其中所述传入命令的所述地址不与所述识别的读取流的所述地址范围接续;
分析所述传入命令的所述地址与所述识别的读取流的部分或全部所述地址范围的接近度;
基于对接近度的所述分析确定所述传入命令是否与所述识别的读取流相关联;以及
基于所述识别的读取流执行对所述存储器设备中的非易失性存储器的至少一次访问。
2.根据权利要求1所述的方法,其中所述传入命令包括所述传入命令的所述地址和大小;
其中所述传入命令的地址范围由所述传入命令的所述地址和所述大小定义;并且
其中分析所述传入命令与所述识别的读取流的部分或全部所述地址范围的接近度包括:分析所述传入命令的所述地址范围与所述识别的读取流中的部分或全部所述地址范围的接近度。
3.根据权利要求2所述的方法,其中所述接近度基于在所述识别的读取流中的至少一个所述读取命令中待读取的数据量。
4.根据权利要求3所述的方法,其中所述识别的读取流包括多个读取命令;
其中最后一个命令包括最后与所述识别的读取流相关联的所述读取命令;并且
其中所述最后一个命令包括待读取的所述数据量。
5.根据权利要求2所述的方法,其中所述接近度包括预先确定的最小接近度或预先确定的最大接近度。
6.根据权利要求2所述的方法,其中所述识别的读取流的所述地址范围由较低地址和较高地址定义;
还包括确定所述地址间隙;
其中分析接近度包括:
确定所述识别的地址流的扩展地址范围,所述扩展地址范围是通过将所述低地址扩展所述地址间隙并且将所述高地址扩展所述地址间隙而确定的;以及
确定所述传入命令的所述地址范围是否与所述识别的地址流的所述扩展地址范围至少部分地重叠,
其中基于对接近度的所述分析确定所述传入命令是否与所述识别的读取流相关联包括:
响应于确定所述传入命令的所述地址范围与所述识别的地址流的所述扩展地址范围至少部分地重叠,确定所述传入命令与所述识别的读取流相关联;以及
响应于确定所述传入命令的所述地址范围不与所述识别的地址流的所述扩展地址范围至少部分地重叠,确定所述传入命令不与所述识别的读取流相关联。
7.根据权利要求6所述的方法,其中基于预先确定的最小地址间隙、预先确定的最大地址间隙以及最近与所述识别的读取流相关联的命令的长度来确定所述地址间隙。
8.根据权利要求1所述的方法,其中基于所述识别的读取流执行对所述存储器设备中的非易失性存储器的至少一次访问包括基于所述识别的读取流在所述非易失性存储器中执行读取先行。
9.根据权利要求8所述的方法,还包括确定所述识别的读取流的方向;并且
其中使用所述识别的读取流的所述方向执行所述读取先行。
10.根据权利要求9所述的方法,其中所述识别的读取流的所述地址范围由较低地址和较高地址定义;
其中所述识别的读取流的所述方向包括较低地址方向和较高地址方向,所述较低地址方向包括小于所述较低地址的地址,所述较高地址方向包括大于所述较高地址的地址;并且
其中确定所述识别的读取流的所述方向包括确定尚未与所述识别的读取流相关联的附加命令是否包括所述较低地址方向上的地址或所述较高地址方向上的地址。
11.一种非易失性存储器设备,包括:
非易失性存储器,所述非易失性存储器具有多个存储器单元;
通信接口,所述通信接口被配置为与主机设备通信;和
控制器,所述控制器与所述非易失性存储器和所述通信接口通信,所述控制器被配置为:
识别写入命令流,所述写入命令流包括地址范围;
经由所述通信接口接收非写入命令;
确定所述非写入命令是否与所述写入命令流相关联;以及
响应于确定所述非写入命令与所述写入命令流相关联,使用所述写入命令流的部分或全部所述地址范围执行所述非易失性存储器的推测访问。
12.根据权利要求11所述的非易失性存储器设备,其中所述非写入命令包括读取命令。
13.根据权利要求12所述的非易失性存储器设备,其中所述读取命令包括读取地址;并且
其中所述控制器被配置为通过确定所述读取地址是否位于所述写入命令流的所述地址范围内来确定所述读取命令是否与所述写入命令相关联。
14.根据权利要求13所述的非易失性存储器设备,其中所述非易失性存储器的所述推测访问包括读取先行操作。
15.根据权利要求14所述的非易失性存储器设备,其中所述控制器被配置为响应于分析单个读取命令而执行所述读取先行操作。
16.一种非易失性存储器设备,包括:
非易失性存储器,所述非易失性存储器具有多个存储器单元;
通信接口,所述通信接口被配置为与主机设备通信;和
控制器,所述控制器与所述非易失性存储器和所述通信接口通信,所述控制器被配置为:
访问所识别的读取流,所述识别的读取流包括来自所述主机设备的地址范围和一个或多个读取命令,所述地址范围由在存储器设备中接收的所述一个或多个读取命令的较低地址和较高地址定义;
确定尚未与所述识别的读取流相关联的附加命令是否包括较低地址方向上的地址或较高地址方向上的地址,所述较低地址方向包括小于所述较低地址的地址,所述较高地址方向包括大于所述较高地址的地址;以及
至少部分地基于所述识别的读取流是否具有所述较低地址方向或所述较高地址方向上的地址来执行所述非易失性存储器的读取先行。
17.根据权利要求16所述的非易失性存储器设备,其中所述识别的读取流包括多个命令;
其中第一个命令包括最先与所述识别的读取流相关联的所述命令;
其中最后一个命令包括最后与所述识别的读取流相关联的所述命令;并且
其中确定尚未与所述识别的读取流相关联的附加命令是否包括所述较低地址方向上的地址或所述较高地址方向上的地址包括将与所述最后一个命令相关联的地址和与所述第一个命令相关联的地址进行比较。
18.一种用于读取流的方法,包括:
访问所识别的读取流,所述识别的读取流包括一个或多个读取命令和地址范围,所述地址范围基于存储器设备中接收的所述一个或多个读取命令中的地址确定;
访问传入命令;
将所述传入命令的地址与所述识别的读取流的所述地址范围进行比较;
基于所述比较确定所述传入命令是否与所述识别的读取流相关联;以及
响应于确定所述传入命令与所述识别的读取流相关联,通过对所述存储器设备中的易失性存储器执行至少一个操作来执行所述传入命令,而不对所述存储器设备中的非易失性存储器执行所述至少一个操作。
19.根据权利要求18所述的方法,其中所述传入命令包括写入命令;并且
其中所述至少一个操作包括将与所述写入命令相关联的数据保存在所述易失性存储器中,其中由于预期所述数据将被再次写入而延迟将所述数据保存到所述非易失性存储器。
20.根据权利要求18所述的方法,其中所述传入命令包括读取命令;并且
其中所述至少一个操作包括从所述易失性存储器中读取与所述读取命令相关联的数据,而不从所述非易失性存储器中读取所述数据。
21.一种非易失性存储器设备,包括:
非易失性存储器,所述非易失性存储器具有多个存储器单元;
通信接口,所述通信接口被配置为与主机设备通信;和
用于访问识别的读取流的装置,所述识别的读取流包括一个或多个读取命令和地址范围,所述地址范围基于存储器设备中接收的所述一个或多个读取命令中的地址确定;
用于访问经由所述通信接口接收的传入命令的装置;
用于检查所述传入命令的地址的装置,其中所述传入命令的所述地址不与所述识别的读取流的所述地址范围接续;
用于分析所述传入命令的所述地址与所述识别的读取流的部分或全部所述地址范围的接近度的装置;
用于基于对接近度的所述分析确定所述传入命令是否与所述识别的读取流相关联的装置;和
用于基于所述识别的读取流执行对所述非易失性存储器的至少一次访问的装置。
22.根据权利要求21所述的非易失性存储器设备,其中所述传入命令包括所述传入命令的所述地址和大小;
其中所述传入命令的地址范围由所述传入命令的所述地址和所述大小定义;并且
其中用于分析所述传入命令与所述识别的读取流中的部分或全部所述地址范围的接近度的装置包括用于分析所述传入命令的所述地址范围与所述识别的读取流中的部分或全部所述地址范围的接近度的装置。
23.根据权利要求22所述的非易失性存储器设备,其中所述接近度基于在所述识别的读取流中的至少一个所述读取命令中待读取的数据量。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/468,620 US10466903B2 (en) | 2017-03-24 | 2017-03-24 | System and method for dynamic and adaptive interrupt coalescing |
US15/468,620 | 2017-03-24 | ||
US15/497,547 | 2017-04-26 | ||
US15/497,547 US10564853B2 (en) | 2017-04-26 | 2017-04-26 | System and method for locality detection to identify read or write streams in a memory device |
PCT/US2018/019930 WO2018175063A1 (en) | 2017-03-24 | 2018-02-27 | System and method for locality detection to identify read or write streams in a memory device |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110088722A CN110088722A (zh) | 2019-08-02 |
CN110088722B true CN110088722B (zh) | 2022-08-30 |
Family
ID=61622742
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880005104.8A Active CN110088722B (zh) | 2017-03-24 | 2018-02-27 | 用于存储器设备中位置检测的系统和方法 |
Country Status (3)
Country | Link |
---|---|
CN (1) | CN110088722B (zh) |
DE (1) | DE112018000247T5 (zh) |
WO (1) | WO2018175063A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7408357B2 (ja) * | 2019-11-15 | 2024-01-05 | キオクシア株式会社 | メモリシステム及びその制御方法 |
CN111813345A (zh) * | 2020-07-17 | 2020-10-23 | 济南浪潮数据技术有限公司 | 一种数据传输方法、装置、服务器及可读存储介质 |
CN113312520B (zh) * | 2021-06-11 | 2023-05-02 | 西安微电子技术研究所 | 一种基于HASH和LRU算法的Linux模块化的并行冗余协议系统及数据处理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102171649A (zh) * | 2008-12-22 | 2011-08-31 | 英特尔公司 | 用于用单个命令对多个不连续地址范围的传送进行排队的方法和系统 |
CN105051684A (zh) * | 2013-03-14 | 2015-11-11 | 桑迪士克科技股份有限公司 | 用于预测和改进启动序列的系统和方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7173863B2 (en) * | 2004-03-08 | 2007-02-06 | Sandisk Corporation | Flash controller cache architecture |
US7386674B1 (en) * | 2005-04-25 | 2008-06-10 | Netapp, Inc. | Method and apparatus to provide a unified readahead scheme for multiple sources |
US9547472B2 (en) * | 2013-09-18 | 2017-01-17 | HGST Netherlands B.V. | ACK-less protocol for noticing completion of read requests |
KR102403489B1 (ko) * | 2015-07-10 | 2022-05-27 | 삼성전자주식회사 | 비휘발성 메모리 익스프레스 컨트롤러에 의한 입출력 큐 관리 방법 |
US10019161B2 (en) * | 2015-08-31 | 2018-07-10 | Sandisk Technologies Llc | Out of order memory command fetching |
US10025532B2 (en) * | 2015-09-11 | 2018-07-17 | Sandisk Technologies Llc | Preserving read look ahead data in auxiliary latches |
-
2018
- 2018-02-27 CN CN201880005104.8A patent/CN110088722B/zh active Active
- 2018-02-27 WO PCT/US2018/019930 patent/WO2018175063A1/en active Application Filing
- 2018-02-27 DE DE112018000247.0T patent/DE112018000247T5/de active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102171649A (zh) * | 2008-12-22 | 2011-08-31 | 英特尔公司 | 用于用单个命令对多个不连续地址范围的传送进行排队的方法和系统 |
CN105051684A (zh) * | 2013-03-14 | 2015-11-11 | 桑迪士克科技股份有限公司 | 用于预测和改进启动序列的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110088722A (zh) | 2019-08-02 |
WO2018175063A1 (en) | 2018-09-27 |
DE112018000247T5 (de) | 2019-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10564853B2 (en) | System and method for locality detection to identify read or write streams in a memory device | |
CN108628777B (zh) | 动态和自适应中断合并的系统和方法 | |
CN110447009B (zh) | 用于自适应命令获取聚合的系统和方法 | |
CN110088724B (zh) | 使用控制器存储器缓冲区进行自适应提前完成发布的系统和方法 | |
CN111356992B (zh) | 用于预测涉及非顺序数据的多个读取命令的系统和方法 | |
US10725835B2 (en) | System and method for speculative execution of commands using a controller memory buffer | |
US10908821B2 (en) | Use of outstanding command queues for separate read-only cache and write-read cache in a memory sub-system | |
CN110073323B (zh) | 使用控制器存储器缓冲区进行推测性执行命令的系统和方法 | |
US10732848B2 (en) | System and method for predictive read of random data | |
US10642502B2 (en) | System and method for prediction of read commands to non-sequential data | |
US10846226B2 (en) | System and method for prediction of random read commands in virtualized multi-queue memory systems | |
US10976964B2 (en) | Storage system and method for hit-rate-score-based selective prediction of future random read commands | |
WO2012040186A1 (en) | Selection of units for garbage collection in flash memory | |
US11366749B2 (en) | Storage system and method for performing random read | |
US11106609B2 (en) | Priority scheduling in queues to access cache data in a memory sub-system | |
US11010299B2 (en) | System and method for performing discriminative predictive read | |
CN110088722B (zh) | 用于存储器设备中位置检测的系统和方法 | |
US10725781B1 (en) | System and method for chain prediction of multiple read commands | |
US11620086B2 (en) | Adaptive-feedback-based read-look-ahead management system and method | |
WO2020176628A1 (en) | Separate read-only cache and write-read cache in a memory sub-system | |
CN114203237A (zh) | 分区命名空间设备中的读取处置 | |
US11675537B2 (en) | Controller for performing data input/output operation and memory management operation at the same time and operation method thereof | |
US11656979B2 (en) | Data tiering in heterogeneous memory system | |
CN113508368B (zh) | 存储器子系统及其操作方法 | |
US11983442B2 (en) | Data storage device and method for multi-level conditional prediction of future random read commands |
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 |