CN113614702B - 基于检测到的读取命令活跃流的自适应预读高速缓存管理器 - Google Patents
基于检测到的读取命令活跃流的自适应预读高速缓存管理器 Download PDFInfo
- Publication number
- CN113614702B CN113614702B CN202080019516.4A CN202080019516A CN113614702B CN 113614702 B CN113614702 B CN 113614702B CN 202080019516 A CN202080019516 A CN 202080019516A CN 113614702 B CN113614702 B CN 113614702B
- Authority
- CN
- China
- Prior art keywords
- command
- read
- entry
- flow
- read command
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0868—Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
-
- 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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C5/00—Details of stores covered by group G11C11/00
- G11C5/02—Disposition of storage elements, e.g. in the form of a matrix array
- G11C5/04—Supports for storage elements, e.g. memory modules; Mounting or fixing of storage elements on such supports
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6028—Prefetching based on hints or prefetch instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
描述一种用于基于读取命令的一或多个活跃流管理存储器子系统中的预读高速缓存的方法。所述方法包含接收请求来自存储器组件的数据的读取命令,以及基于所述读取命令的地址集合与以下中的一或多个的比较来确定所述读取命令是否是读取命令的活跃流的一部分:(1)命令历史表,其存储各自对应于尚未与活跃流相关联的所接收读取命令的命令条目的集合,或(2)活跃流表,其存储各自对应于读取命令的活跃流的流条目的集合。所述方法进一步包含响应于确定所述读取命令是活跃流的一部分而修改流条目的所述集合中的流条目。
Description
技术领域
本公开大体上涉及一种预读高速缓存管理器,且更确切地说涉及一种基于检测到的读取命令活跃流的自适应预读高速缓存管理器。
背景技术
存储器子系统可以是存储系统,例如固态驱动器(SSD)或硬盘驱动器(HDD)。存储器子系统可以是存储器模块,例如双列直插式存储器模块(DIMM)、小型DIMM(SO-DIMM)或非易失性双列直插式存储器模块(NVDIMM)。存储器子系统可包含存储数据的一或多个存储器组件。存储器组件可例如是非易失性存储器组件和易失性存储器组件。一般来说,主机系统可以利用存储器子系统在存储器组件处存储数据以及从存储器组件检索数据。
附图说明
根据下文给出的详细描述和本公开的各个实施例的附图,将更充分地理解本公开。然而,图式不应视为将本公开限于特定实施例,而是仅用于阐释和理解。
图1示出根据本公开的一些实施例的包含存储器子系统的实例计算环境。
图2示出根据本公开的一些实施例的包含流检测器、预读高速缓存分配器和策略引擎的预读高速缓存管理器。
图3A-3C是根据本公开的一些实施例的基于检测到的读取命令活跃流管理预读高速缓存的实例方法的流程图。
图4示出根据本公开的一些实施例的活跃流表。
图5示出根据本公开的一些实施例的命令历史表。
图6示出根据本公开的一些实施例的实例读取命令。
图7示出根据本公开的一些实施例的读取命令逻辑块地址(LBA)的集合。
图8示出根据本公开的一些实施例的命令历史LBA的集合。
图9是本公开的实施例可在其中操作的实例计算机系统的框图。
具体实施方式
本公开的方面是针对存储器子系统中的预读高速缓存管理器。存储器子系统在下文也称为“存储器装置”。存储器子系统的实例是经由存储器总线连接到中央处理单元(CPU)的存储器模块。存储器模块的实例包含双列直插式存储器模块(DIMM)、小型DIMM(SO-DIMM)、非易失性双列直插式存储器模块(NVDIMM)等。存储器子系统的另一实例是经由外围互连(例如输入/输出总线、存储区域网络等)连接到中央处理单元(CPU)的存储装置。存储装置的实例包含固态驱动器(SSD)、快闪驱动器、通用串行总线(USB)快闪驱动器和硬盘驱动器(HDD)。在一些实施例中,存储器子系统是混合式存储器/存储装置子系统。一般来说,主机系统可以利用包含一或多个存储器组件的存储器子系统。主机系统可提供待存储在存储器子系统处的数据,且可请求待从存储器子系统检索的数据。
预读高速缓存是一些存储器子系统中的组件,且相比于存储器子系统的较大且较慢/高时延介质充当较小且较快/较低时延存储器。在这些存储器子系统中,预读高速缓存尝试:(1)基于先前读取命令(有时被称作读取请求)预测主机系统将请求读取的下一数据段,以及(2)在存储器子系统从主机系统接收相应读取命令之前从介质提取此预测的下一数据段。当预测成功(即,预读高速缓存预测且从介质预取数据段且主机系统随后请求此数据段)时,读取性能的改进较高,因为存储器子系统可满足直接来自预读高速缓存的请求,而无需等待存取介质(即,在读取命令由存储器子系统接收的时候存取介质已经执行)。按照定义,不可预测随机读取工作负荷(即,不请求存取介质的循序寻址部分的读取命令)。因此,预读高速缓存对包含某一量的循序读取的读取工作负荷有效,使得预读高速缓存可检索/存储准确的预测。尽管存在潜在益处,但一些存储器子系统由于以下原因而不包含预读高速缓存:(1)存储器子系统中可致力于预读高速缓存的存储器资源有限,和/或(2)预读高速缓存因不能够准确地预测新读取命令的目标而性能较差。
本公开的方面通过提供一种预读高速缓存管理器来解决以上和其它缺陷,所述预读高速缓存管理器通过跟踪来自主机系统的活跃读取命令流而优化有限量的存储器针对预读高速缓存的使用。通过跟踪活跃读取命令流(即,正请求存取介质的循序部分的读取命令流),预读高速缓存管理器可用对应于这些流的数据智能地填充预读高速缓存。确切地说,预读高速缓存管理器管理:(1)活跃流表,其跟踪活跃的循序读取命令流,和(2)命令历史表,其跟踪尚未关联/添加到活跃流表中的活跃流但可在将来基于随后接收的读取命令而关联/添加的新近读取命令。举例来说,在从主机系统接收读取命令后,将读取命令的地址的集合与活跃流表中的活跃流的开始和结束地址进行比较。在确定读取命令的地址集合与活跃流表中的活跃流的开始或结束地址为循序后,更新活跃流(例如,用读取命令的地址更新开始地址或结束地址)。相应地,流现表示所接收的读取命令连同先前由所述流表示的任何其它读取命令。相反,在确定读取命令的地址集合与活跃流表中的活跃流的开始或结束地址非循序后,将读取命令的地址集合与命令历史表中的先前读取命令的地址集合进行比较。响应于确定读取命令的地址集合与命令历史表中的读取命令的地址集合为循序,使用命令历史表中的现有读取命令和所接收读取命令将新活跃流添加到活跃流表。然而,响应于确定读取命令的地址集合与命令历史表中的读取命令的地址集合非循序,针对所接收读取命令将条目添加到命令历史表,使得所述读取命令可基于稍后接收的读取命令潜在地被使用以供包含在活跃流中。活跃流表和命令历史表中的每一个的大小是有限的,且预读高速缓存管理器控制驱逐以维持存在于命令历史表中的最近接收的读取命令和存在于活跃流表中的最近更新的/活跃流。此外,预读高速缓存管理器基于活跃流表中的活跃流从介质填充预读高速缓存。因为活跃流表示最近接收的循序寻址的读取命令,所以基于活跃流填充预读高速缓存提供潜在的将来读取命令/请求的智能预测。即,可用来自介质中的邻近于或以其它方式非常接近于活跃流的开始和结束地址的地址的数据填充预读高速缓存。此外,分配到每一流的空间量和用于填充预读高速缓存的数据可基于流的其它特性来设定,所述其它特性包含用于修改每一流的最新命令大小、每一流扩展的方向、针对每一流的最后修改指示,和由每一流表示的命令计数。因此,即使在有限预读高速缓存的情况下,也可在存储器子系统中实现基于准确数据预测的性能增益。
图1示出根据本公开的一些实施例的包含存储器子系统110的实例计算环境100。存储器子系统110可包含介质,例如存储器组件112A到112N。存储器组件112A到112N可为易失性存储器组件、非易失性存储器组件或这类组件的组合。在一些实施例中,存储器子系统是存储系统。存储系统的实例是SSD。在一些实施例中,存储器子系统110是混合式存储器/存储子系统。通常,计算环境100可以包含使用存储器子系统110的主机系统120。举例来说,主机系统120可将数据写入到存储器子系统110和从存储器子系统110读取数据。。
主机系统120可以是计算装置,例如台式计算机、膝上型计算机、网络服务器、移动装置,或包含存储器和处理装置的此类计算装置。主机系统120可以包含或耦合到存储器子系统110,使得主机系统120可以从存储器子系统110读取数据或将数据写入到存储器子系统110。主机系统120可经由物理主机接口耦合到存储器子系统110。如本文中所使用,“耦合到”通常指代组件之间的连接,其可为间接通信连接或直接通信连接(例如,无中间组件),不论是有线还是无线的,包含例如电连接、光学连接、磁性连接等连接。物理主机接口的实例包含(但不限于)串行高级技术附件(SATA)接口、外围组件互连高速(PCIe)接口、通用串行总线(USB)接口、光纤通道、串行附接SCSI(SAS)等。物理主机接口可用于在主机系统120和存储器子系统110之间发射数据。当存储器子系统110通过PCIe接口与主机系统120耦合时,主机系统120可以进一步利用NVM高速(NVM Express,NVMe)接口来存取存储器组件112A到112N。物理主机接口可提供接口以用于在存储器子系统110与主机系统120之间传递控制、地址、数据以及其它信号。
存储器组件112A到112N可包含不同类型的非易失性存储器组件和/或易失性存储器组件的任何组合。非易失性存储器组件的实例包含“与非”(NAND)型快闪存储器。存储器组件112A到112N中的每一个可包含例如单层级单元(SLC)或多层级单元(MLC)(例如,三层级单元(TLC)或四层级单元(QLC))等存储器单元的一或多个阵列。在一些实施例中,特定存储器组件可包含存储器单元的SLC部分及MLC部分两者。存储器单元中的每一个可存储由主机系统120使用的一或多个数据位(例如,数据块)。尽管描述例如NAND型快闪存储器等非易失性存储器组件,但存储器组件112A到112N可基于任何其它类型的存储器,例如易失性存储器。在一些实施例中,存储器组件112A到112N可以是(但不限于)随机存取存储器(RAM)、只读存储器(ROM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(SDRAM)、相变存储器(PCM)、磁随机存取存储器(MRAM)、“或非”(NOR)快闪存储器、电可擦除可编程只读存储器(EEPROM)以及非易失性存储器单元的交叉点阵列。非易失性存储器的交叉点阵列可以结合可堆叠交叉网格化数据存取阵列基于体电阻的改变来执行位存储。另外,与许多基于快闪的存储器对比,交叉点非易失性存储器可执行就地写入操作,其中可在不预先擦除非易失性存储器单元的情况下对非易失性存储器单元进行编程。此外,存储器组件112A到112N的存储器单元可以分组为存储器页或数据块,所述存储器页或数据块可以指用于存储数据的存储器组件的单元。
存储器系统控制器115(下文称为“控制器”)可与存储器组件112A到112N通信以执行操作,例如在存储器组件112A到112N处读取数据、写入数据或擦除数据,以及其它这类操作。控制器115可包含硬件,例如一或多个集成电路和/或离散组件、缓冲存储器或其组合。控制器115可以是微控制器、专用逻辑电路系统(例如,现场可编程门阵列(FPGA)、专用集成电路(ASIC)等)或另一合适的处理器。控制器115可包含被配置成执行存储在本地存储器119中的指令的处理器(处理装置)117。在所示出的实例中,控制器115的本地存储器119包含嵌入式存储器,其被配置成存储指令以用于执行控制存储器子系统110的操作(包含处置存储器子系统110与主机系统120之间的通信)的各种过程、操作、逻辑流程以及例程。在一些实施例中,本地存储器119可包含存储存储器指针、所提取数据、预读高速缓存121等的存储器寄存器。本地存储器119还可包含用于存储微码的只读存储器(ROM)。虽然图1中的实例存储器子系统110已示出为包含控制器115,但在本公开的另一实施例中,存储器子系统110可不包含控制器115,且可改为依赖于外部控制(例如,由外部主机、由与存储器子系统分离的处理器或控制器提供)。
一般来说,控制器115可从主机系统120接收命令或操作且可将命令或操作转换成指令或适当的命令,以实现对存储器组件112A到112N的所要存取。尽管控制器115可满足直接来自存储器组件112A到112N的命令,但在一些实施例中,控制器115在来自预读高速缓存管理器113的辅助下可满足使用预读高速缓存121的读取命令,预读高速缓存管理器113用来自存储器组件112A到112N的对应于检测到的读取命令的活跃流的数据填充所述预读高速缓存。控制器115可负责其它操作,例如耗损均衡操作、垃圾收集操作、误差检测和误差校正码(ECC)操作、加密操作、高速缓存操作,以及与存储器组件112A到112N相关联的逻辑块地址与物理块地址之间的地址转译。控制器115可进一步包含主机接口电路系统以经由物理主机接口与主机系统120通信。主机接口电路可将从主机系统接收的命令转换成命令指令以存取存储器组件112A到112N,以及将与存储器组件112A到112N相关联的响应转换成用于主机系统120的信息。
存储器子系统110还可包含未示出的额外电路系统或组件。在一些实施例中,存储器子系统110可包含高速缓存或缓冲器(例如,预读高速缓存121)和可从控制器115接收地址且解码所述地址以存取存储器组件112A到112N的地址电路系统(例如,行解码器和列解码器)。
存储器子系统110包含可智能地为预读高速缓存121分配空间且填充所述预读高速缓存的预读高速缓存管理器113。在一些实施例中,控制器115包含预读高速缓存管理器113的至少一部分。举例来说,控制器115可包含处理器117(处理装置),其被配置成执行存储在本地存储器119中以用于执行本文中所描述的操作的指令。在一些实施例中,预读高速缓存管理器113是主机系统120、应用或操作系统的一部分。
预读高速缓存管理器113可基于检测到的读取命令的活跃流智能地分配空间且用来自存储器组件112A到112N的数据填充预读高速缓存121(有时被称作预见高速缓存121)。图2是根据一个实施例的预读高速缓存管理器113的组件图。如图2所示,预读高速缓存管理器113可包含:(1)流检测器113A,其用于使用活跃流表和命令历史表中的一或多个检测读取命令的活跃流,(2)预读高速缓存分配器113B,其用于确定预读高速缓存121中的针对每一活跃流的分配请求,以及(3)策略引擎113C,其用于在来自预读高速缓存分配器113B的分配请求超出预读高速缓存121的容量时基于活跃策略修改分配请求。下文描述关于预读高速缓存管理器113的操作的另外细节。
图3A-3C是根据本公开的一些实施例的基于检测到的读取命令活跃流管理预读高速缓存121的实例方法300的流程图。方法300可由处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路系统、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令),或其组合。在一些实施例中,方法300由图1的预读高速缓存管理器113执行,所述预读高速缓存管理器包含图2的流检测器113A、预读高速缓存分配器113B和策略引擎113C中的一或多个。虽然以特定序列或次序展示,但是除非另有指定,否则可修改过程的次序。因此,应理解,所示出的实施例仅为实例,且所示出的过程可以不同次序执行,且一些过程可并行地执行。另外,可在各种实施例中省略一或多个过程。因此,并非在每个实施例中需要所有的过程。其它过程流程是可能的。
在操作302处,处理装置起始活跃流表和命令历史表。举例来说,在处理装置启动/加电后,处理装置起始活跃流表和命令历史表。如本文中将更详细地描述,活跃流表跟踪检测到的读取命令活跃流,而命令历史表跟踪尚未与流相关联但将被检查可能与现有活跃流一起包含在活跃流表中或用于形成活跃流表的新活跃流的所接收读取命令。在一个实施例中,处理装置可在操作302处通过针对本地存储器119中或另一件存储器中的每一表的预定义数目的条目分配存储器来起始活跃流表和命令历史表。
根据一个实例实施例,图4展示活跃流表400,且图5展示命令历史表500。如图4中所展示,活跃流表400包含条目402(有时被称作流条目402)的集合,每一条目对应于检测到的读取命令活跃流,且每一条目402包含:(1)开始逻辑块地址(LBA)404,其对应于存储器组件112A到112N中的针对条目402的活跃流的开始LBA,(2)结束LBA 406,其对应于存储器组件112A到112N中的针对条目402的活跃流的结束LBA,(3)最新长度408(有时被称作最新命令大小408或最新命令长度408),其对应于用于更新条目402的最后读取命令中的长度(即,LBA的数目),(4)方向410,其指示条目402的活跃流最近扩展的方向(即,响应于用于更新条目402的先前读取命令,条目402的开始LBA 404或结束LBA 406是否经修改),(5)最后修改指示412,其指示条目402被最后修改的时间点,(6)预读高速缓存分配414,其指示预读高速缓存121中分配到条目402的活跃流的空间量,以及(7)命令计数416,其指示当前在条目402的活跃流中表示的读取命令的数目。
在一些实施例中,活跃流表400具有预定义数目的条目402,且随着新条目402被确定为添加到活跃流表400,从活跃流表400驱逐最老条目402。确切地说,从活跃流表400驱逐具有最老的最后修改指示412的条目,如将在下文更详细地描述。尽管本文中描述为处理装置使用活跃流表400中的条目402的最后修改指示412作为潜在将来使用的指示,但在其它实施例中,处理装置可使用潜在将来使用的其它指示符来引导条目402从活跃流表400的驱逐。举例来说,处理装置可在活跃流表400的条目402中记录何时已使用预读高速缓存121中的相应数据来满足存储器请求。在此实施例中,处理装置可利用预读高速缓存121中的数据的此使用指示来引导相应条目402从活跃流表400的驱逐。
如本文中所使用,读取命令的活跃流指示最近接收读取命令所针对的读取命令的循序/邻接集合(即,活跃流的第一读取命令的地址集合与活跃流的第二读取命令的地址集合为循序/邻接的)(例如,最近接收针对活跃流的读取命令集合中的读取命令,使得按照活跃流表400的驱逐策略,相应条目402尚未从活跃流表400驱逐)。
如图5所示,命令历史表500可包含条目502的集合,每一条目包含开始LBA 504和长度506(有时被称作命令大小506或命令长度506),且每一条目502对应于最近从主机系统120接收的读取命令。确切地说,每一读取命令包含对应于存储器组件112A到112N中的LBA的开始LBA504,以及对应于来自所指示的开始LBA 504的LBA的数目的长度506。在一些实施例中,命令历史表500可被实施为先进先出(FIFO)数据结构,使得命令历史表500存储最近接收的读取命令的条目502。在这些实施例中,当命令历史表500已满时,新接收的读取命令的条目502占据命令历史表500中的最老条目502的位置(即,驱逐最老条目502,且将新接收的读取命令的条目502添加到命令历史表500)。
出于说明的目的,将使用实例命令历史表500和活跃流表400来描述方法300。在一个实施例中,处理装置在操作302处分别起始不具有条目502和402的命令历史表500和活跃流表400,但处理装置已经在本地存储器119中或另一件存储器中分配用于添加条目502和402的空间。确切地说,处理装置在本地存储器119中为活跃流表400分配固定量的空间,且在本地存储器119中为命令历史表500分配固定量的空间。因此,基于本地存储器119中的固定空间,活跃流表400可支持固定数目的条目402,且命令历史表500可支持固定数目的条目502。处理装置分别基于每一表400和500中的条目402和502的所限定或另外需要的数目为活跃流表400和命令历史表500中的每一个分配空间量。
在操作304处,处理装置从主机系统120接收读取命令。举例来说,主机系统120可确定需要存储于存储器组件112A到112N中的数据,且在操作304处将读取命令发射到控制器115。读取命令包含对应于存储器组件112A到112N中的LBA的开始LBA和长度(即,从开始LBA起的LBA的数目)。举例来说,图6展示根据一个实例实施例的从主机系统120接收的实例读取命令600。如图6所示,读取命令600包含开始LBA 602和长度604。尽管仅展示为具有开始LBA602和长度604,但读取命令600可包含额外条信息。出于说明的目的,将使用图6的实例读取命令600来描述方法300。
在操作306处,处理装置确定读取命令600是否产生预读高速缓存121中的命中。举例来说,当预读高速缓存121包含开始LBA 602和读取命令600中指示的长度604的循序LBA集合的数据时,处理装置在操作306处确定预读高速缓存121中的命中。响应于处理装置在操作306处确定命中,方法300移动到操作308。
在操作308处,处理装置基于针对读取命令600的预读高速缓存121中的命中将数据从预读高速缓存121传回到主机系统120。确切地说,处理装置将来自开始LBA 602和读取命令600中指示的长度604的从开始LBA 602延伸的循序LBA集合的数据传回到主机系统120。此传回的数据先前基于检测到的活跃流而高速缓存/存储在预读高速缓存121中,如下文将更详细地描述。因为现利用存储在预读高速缓存121中的数据(例如,预读高速缓存121中的数据变为对于主机系统120有用的数据/实况数据),所以由主机系统120和/或处理装置(例如,存储器子系统110)实现性能增益。即,主机系统120和处理装置不需要等待从存储器组件112A到112N读取数据来满足读取命令600。
返回到操作306,响应于处理装置确定预读高速缓存121中的未中,方法300移动到操作310。在操作310处,处理装置基于读取命令600将数据从存储器组件112A到112N传回到主机系统120。确切地说,处理装置将来自开始LBA 602和读取命令600中指示的长度604的从开始LBA 602延伸的循序LBA集合的数据传回到主机系统120。
在一些实施例中,可在操作306处当读取命令600所请求的仅一些数据存在于预读高速缓存121中时确定命中。在这些实施例中,方法300可在操作308之后移动到操作310,使得处理装置可将剩余数据从存储器组件112A到112N传回到主机系统120。
在操作308(即,将数据从预读高速缓存121传回到主机系统120)或操作310(即,将数据从存储器组件112A到112N传回到主机系统120)之后,方法300移动到操作312。在操作312处,处理装置确定所接收读取命令600的LBA是否紧接在活跃流表400中的流/条目402之前或之后(即,处理装置确定读取命令600是否与活跃流表400中的流/条目402为循序)。确切地说,如上文所描述,读取命令600指示循序LBA的集合。举例来说,图7展示读取命令LBA700的集合,其以读取命令600的开始LBA 602开始且延伸读取命令600的长度604。如所展示,读取命令LBA 700的集合包含第一LBA702(即,读取命令600的开始LBA 602)和最后LBA 704。将使用读取命令LBA 700的集合来进一步阐释方法300。
在操作312处,处理装置确定:(1)读取命令LBA 700的集合中的最后LBA 704是否紧接在活跃流表400中的流/条目402的开始LBA 404之前,或(2)读取命令LBA 700的集合中的第一LBA 702是否紧接在活跃流表400中的流/条目402的结束LBA 406之后。当处理装置在操作312处确定所接收读取命令600的LBA(即,读取命令LBA 700的集合)紧接在活跃流表400中的流/条目402之前或之后,则方法300移动到操作314。
在操作314处,处理装置基于确定所接收读取命令600的LBA紧接在活跃流表400中的流/条目402之前或之后(即,读取命令LBA700的集合与流/条目402为循序)而更新活跃流表400中的一或多个流/条目402。举例来说,当处理装置在操作312处确定读取命令LBA 700的集合中的最后LBA 704紧接在活跃流表400中的流/条目402的开始LBA 404之前时,处理装置将所述条目402的开始LBA 404更新为等于读取命令LBA 700的集合中的第一LBA 702。当处理装置在操作312处确定读取命令LBA 700的集合中的第一LBA702紧接在活跃流表400中的流/条目402的结束LBA 406之后时,处理装置将所述流/条目402的结束LBA 406更新为等于读取命令LBA 700的集合中的最后LBA704。在任一情况下,处理装置还:(1)用来自所接收读取命令600的长度604更新条目402的最新命令大小408值,(2)基于开始LBA 404或结束LBA 406是否经修改而更新条目402的方向410(例如,当处理装置修改了开始LBA 404时,处理装置修改方向410以指示流/条目402正在更低LBA方向上增长,且当处理装置修改了结束LBA 406时,处理装置修改方向410以指示流/条目402正在更高LBA方向上增长),(3)更新最后修改指示412以指示对流/条目402的当前修改的时间,以及(4)通过递增命令计数416以表示在操作304处接收的读取命令600包含在流/条目402中来更新命令计数416。
在一些实施例中,处理装置在操作312处确定读取命令LBA 700的集合中的最后LBA 704紧接在活跃流表400中的第一流/条目402的开始LBA 404之前,且读取命令LBA 700的集合中的第一LBA 702紧接在活跃流表400中的第二流/条目402的结束LBA406之后(即,读取命令LBA 700的集合为循序的且汇合两个流/条目402)。在此情境下,处理装置在操作314处将第一和第二流/条目402组合为单个流/条目402,且从活跃流表400丢弃/移除剩余流/条目402。确切地说,组合流/条目402包含来自第一和第二流/条目402的最小/最低开始LBA 404作为组合条目402的开始LBA 404,以及来自第一和第二流/条目402的最大/最高结束LBA 406作为组合条目402的结束LBA 406。对于组合条目402,处理装置还:(1)用来自所接收读取命令600的长度更新条目402的最新命令大小408值,(2)将流/条目402的方向410更新为默认方向(例如,递增LBA),因为当前不明确流在哪一方向上扩展,(3)更新最后修改指示412以指示对组合流/条目402的当前修改的时间,以及(4)通过将来自第一和第二流/条目402中的每一个的命令计数416相加且将和递增一以考虑所接收读取命令600来更新命令计数416。
返回到操作312,当处理装置在操作312处确定读取命令600的LBA不紧接在活跃流表400中的流/条目402之前或之后时,方法300移动到操作316。在操作316处,处理装置确定读取命令600的LBA是否与命令历史表500中的任何条目502为循序的。确切地说,命令历史表500中的每一条目502可包含命令历史LBA的集合,其包含条目502的开始LBA 504,且从开始LBA 504循序延伸到条目502的长度506。举例来说,图8展示条目502的命令历史LBA 800的集合,其以条目502的开始LBA 504开始且延伸条目502的长度506。如所展示,命令历史LBA 800的集合包含第一LBA 802(即,条目502的开始LBA 504)和最后LBA 804。将使用命令历史LBA 800的集合来进一步阐释方法300。
当发生以下情况时处理装置确定读取命令600的LBA与命令历史表500中的条目502为循序的:(1)读取命令LBA 700的集合中的第一LBA 702紧接在条目502的命令历史LBA800的集合的最后LBA 804之后,或(2)读取命令LBA 700的集合中的最后LBA704紧接在条目502的命令历史LBA 800的集合的第一LBA 802之前。当处理装置在操作316处确定读取命令600的LBA不与命令历史表500中的条目502为循序时,处理装置尚未检测到新的读取命令活跃流,且方法300移动到操作318以针对读取命令600在命令历史表500中添加条目502。
在操作318处,处理装置确定命令历史表500是否已满。如上所述,命令历史表500具有固定大小(即,命令历史表500被分配具有相应固定数目的条目502的固定量的存储器)。当处理装置在操作318处确定命令历史表500已满(即,所有固定数目的条目502正用于其它读取命令)时,方法300移动到操作320。
在操作320处,处理装置驱逐命令历史表500中的最老条目502,使得处理装置可针对在操作304处接收的读取命令600将新条目502添加到命令历史表500。如上所述,命令历史表500可以是FIFO结构,使得命令历史表500跟踪条目502被添加到命令历史表500的次序,使得处理装置可在操作320处移除最老条目502(即,经由到添加到命令历史表500的最早条目502的指针)。
在操作320之后(即,当命令历史表500已满时)或在操作318之后(即,当命令历史表500未满时),处理装置针对在操作304处接收的读取命令600在操作322处将新条目502添加到命令历史表500。此新条目502包含设定为读取命令600中指示的开始LBA602的开始LBA504和设定为读取命令600中指示的长度604的长度506。相应地,读取命令600添加到命令历史表以供可能稍后用于检测新的读取命令活跃流或基于随后接收的读取命令修改现有读取命令活跃流。
返回到操作316,当处理装置在操作316处确定读取命令600的LBA与命令历史表500中的条目502为循序时,处理装置已检测到新的读取命令活跃流且方法300移动到操作324。
在操作324处,处理装置确定活跃流表400是否已满。如上所述,活跃流表400具有固定大小(即,活跃流表400被分配具有相应固定数目的条目402的固定量的存储器)。当处理装置确定活跃流表400已满(即,活跃流表400的所有固定数目的条目402正用于其它活跃流)时,方法300移动到操作326。
在操作326处,处理装置确定活跃流表400中的最老条目402是否比预定义寿命阈值年轻(即,处理装置将寿命阈值与每一条目402的最后修改指示412进行比较)。确切地说,利用与寿命阈值的比较来确保在预读高速缓存121中的相应数据可能有机会被利用之前不会从活跃流表400不断地驱逐活跃流表400中的条目402。如果处理装置在操作326处确定活跃流表400中的最老条目402比预定义寿命阈值年轻,则方法300移动到操作318,使得所接收读取命令600被添加到命令历史表500。
相反,当处理装置在操作326处确定活跃流表400中的最老条目402比预定义寿命阈值老时,方法300移动到操作328。在操作328处,处理装置驱逐活跃流表400中的最老条目402。因为被驱逐条目402不再位于活跃流表400中,所以当处理装置在预读高速缓存121中分配空间时处理装置将不在预读高速缓存121中为被驱逐条目402分配空间。因此,处理装置将不在预读高速缓存121中包含被驱逐条目402的数据。
在操作328处处理装置驱逐活跃流表400中的最老条目402之后或在处理装置在操作324处确定活跃流表400未满后,方法300移动到操作330。在操作330处,处理装置针对以下两者在活跃流表400中添加条目402:(1)在操作304处接收的读取命令600,和(2)命令历史表500中的处理装置在操作316处确定为与读取命令为循序的条目502。确切地说,处理装置将条目402添加到活跃流表400,其中:(1)条目402的开始LBA 404被设定成等于读取命令LBA 700的集合中的第一LBA 702和处理装置确定为与读取命令600为循序的命令历史表500中的条目502的命令历史LBA 800的集合的第一LBA 802中的较低值/最小值;(2)条目402的结束LBA 406被设定成等于读取命令LBA 700的集合中的最后LBA 704和处理装置确定为与读取命令600为循序的命令历史表500中的条目502的命令历史LBA 800的集合的最后LBA 804中的较大值/最大值;(3)条目402的最新命令大小408值具有来自所接收读取命令600的长度604;(4)条目402的方向410基于读取命令LBA 700的集合是否小于处理装置确定为与读取命令600为循序的命令历史表500中的条目502的命令历史LBA 800的集合(例如,当读取命令LBA 700的集合小于条目502的命令历史LBA 800的集合时,处理装置设定方向410以指示流/条目402正在更低LBA的方向上增长,且当读取命令LBA 700的集合大于条目502的命令历史LBA 800的集合时,处理装置设定方向410以指示条目402的活跃流正在更大LBA的方向上增长);(5)最后修改指示412指示对条目402的当前修改的时间;以及(6)命令计数416被设定为二,反映读取命令600和处理装置确定为与读取命令为循序的命令历史表500中的条目502。
在一些实施例中,处理装置可在操作316处确定读取命令600与命令历史表500中的两个条目502为循序的。在这些实施例中,在操作330处,将两个条目502与读取命令组合以形成活跃流表400中的单个条目402。
在操作332处,处理装置移除命令历史表500中的处理装置在操作316处确定为与读取命令600为循序的条目502(或多个条目502)。确切地说,此条目502从命令历史表500移除,因为相应读取命令现由活跃流表400中的活跃流/条目402表示。
在操作314或操作332之后,处理装置在操作334处在预读高速缓存121中向活跃流表400中的每一流/条目402分配空间片段。因此,先前被驱逐条目402将不再在预读高速缓存121中包含数据,以有利于来自活跃流表400的其它(可能新的)条目402。预读高速缓存121中的空间片段是预读高速缓存121的可用于存储来自存储器组件112A到112N的数据的部分,如下文将描述。处理装置可使用活跃流表400中的一或多条信息在预读高速缓存121中分配空间片段。举例来说,处理装置可基于流/条目402的最新命令大小408确定为流/条目402分配大空间片段还是小空间片段(例如,当第一流/条目402的最新命令大小408大于第二流/条目402的最新命令大小408时,处理装置可相比于第二流/条目402为第一流/条目402在预读高速缓存121中分配较大空间片段)。在另一实例中,处理装置可基于针对流/条目402的最后修改指示412确定为流/条目402分配大空间片段还是小空间片段(例如,当第一流/条目402具有比第二流/条目402的最后修改指示412更为新近的最后修改指示412时,处理装置可相比于第二流/条目402为第一流/条目402在预读高速缓存121中分配较大空间片段)。在又一实例中,处理装置可基于流/条目402的命令计数416确定为流/条目402分配大空间片段还是小空间片段(例如,当第一流/条目402的命令计数416大于第二流/条目402的命令计数416时,处理装置可相比于第二流/条目402为第一流/条目402在预读高速缓存121中分配较大空间片段)。在一些实施例中,处理装置基于在操作334处确定的分配更新针对活跃流表400中的每一流/条目402的预读高速缓存分配414。
在一个实施例中,处理装置基于流/条目402的最新命令大小408和流/条目402的命令计数416确定针对每一条目402的预读高速缓存分配414。举例来说,针对流/条目402的预读高速缓存分配414可以是流/条目402的最新命令大小408和命令计数416的和或乘积。
在一些实施例中,如果在操作306处读取命令600产生预读高速缓存121中的命中,则处理装置可在操作334处使用此命中的特性来调整针对每一条目402的预读高速缓存分配414。举例来说,当所述命中部分由预读高速缓存121服务(即,读取命令600的一些数据存在于预读高速缓存121中,但读取命令600的一些数据不存在)时,可增加针对相应流/条目402的分配以考虑此不足。相反,当所述命中确实对应于所有数据(即,读取命令600的所有数据存在于预读高速缓存121)中)但流/条目402的一些数据因为非读取命令600所请求而未被使用/传回时,可减少针对相应流/条目402的分配以考虑此过冲。
在操作336处,处理装置确定来自操作334的分配是否超出预读高速缓存121的存储容量。确切地说,预读高速缓存121为固定/有限大小,且来自操作334的片段的分配可能已经超出预读高速缓存121的有限容量。响应于处理装置在操作336处确定来自操作334的分配超出预读高速缓存121的存储容量,方法300移动到操作338。
在操作338处,处理装置基于策略调整分配请求。举例来说,处理装置可使用公平策略或轮选策略来调整分配请求,使得活跃流表400中的每一流/条目402在预读高速缓存121中接收相等空间。在另一实例中,处理装置可使用最大组块大小分配策略来调整分配请求。举例来说,处理装置可在预读高速缓存121中向首先具有最大初始分配请求或首先具有最大命令计数416的流/条目402分配空间,使得这些流/条目402被提供最大吞吐量。在又一实例中,处理装置可使用最小组块大小分配策略来调整分配请求。举例来说,处理装置可在预读高速缓存121中向首先具有最小初始分配请求或首先具有最小命令计数416的流/条目402分配空间,以在预读高速缓存121中为尽可能多的流/条目402提供空间。在一些实施例中,处理装置在操作340处基于所确定的分配更新而更新针对活跃流表400中的每一流/条目402的预读高速缓存分配414。
在操作336之后(即,分配请求不超出预读高速缓存121的容量)或操作338之后(即,调整分配请求之后),处理装置基于在操作334处确定且可能在操作340处更新的分配请求来填充/充填预读高速缓存的每一片段。举例来说,针对活跃流表400中的每一流/条目402,处理装置从存储器组件112A到112N检索数据,且将检索到的数据存储在预读高速缓存121中的所分配空间片段中。处理装置可使用来自活跃流表400的一或多条信息来填充/充填预读高速缓存121。举例来说,处理装置可基于流/条目402的方向410确定是否由存储器组件112A到112N的从开始FBA 404或结束FBA 406延伸的FBA填充/填充预读高速缓存121的所分配片段。
如上文所描述,预读高速缓存管理器113基于活跃流表400中的活跃流/条目402从介质(即,存储器组件112A到112N)填充预读高速缓存121。因为活跃流/条目402表示最近接收的循序寻址的读取命令,所以基于活跃流/条目402填充预读高速缓存121提供潜在的将来读取命令/请求的智能预测。即,可用来自介质中的邻近于或以其它方式非常接近于活跃流/条目402的开始和结束地址404和406的地址的数据填充预读高速缓存121。此外,分配到每一活跃流/条目402的空间量和用于填充预读高速缓存121的数据可基于活跃流/条目402的其它特性来设定,所述其它特性包含用于修改每一流/条目402的最新命令大小408、每一流/条目402扩展的方向410、针对每一流/条目402的最后修改指示412,和/或由每一流/条目402表示的命令计数416。因此,即使在有限预读高速缓存121的情况下,也可在存储器子系统110中实现基于准确数据预测的性能增益。
如上文所描述,在一些实施例中,方法300由图1的预读高速缓存管理器113执行(即,处理装置为预读高速缓存管理器113),所述预读高速缓存管理器包含图2的流检测器113A、预读高速缓存分配器113B和策略引擎113C中的一或多个。举例来说,操作302-332可由流检测器113A执行,操作334可由预读高速缓存分配器113B执行,且操作336-338可由策略引擎113C执行。
图9示出计算机系统900的实例机器,所述实例机器内可执行用于致使所述机器执行本文中所论述的方法中的任何一或多种的指令集。在一些实施例中,计算机系统900可对应于主机系统(例如,图1的主机系统120),所述主机系统包含、耦合到或利用存储器子系统(例如,图1的存储器子系统110)或可用于执行控制器的操作(例如,执行操作系统以执行对应于图1的预读高速缓存管理器113的操作)。在替代实施例中,机器可连接(例如,联网)到LAN、内联网、外联网和/或因特网中的其它机器。机器可作为对等(或分布式)网络环境中的对等机器或作为云计算基础架构或环境中的服务器或客户端机器在客户端-服务器网络环境中的服务器或客户端机器的容量中操作。
所述机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、网络器具、服务器、网络路由器、交换机或桥接器,或能够执行(循序或以其它方式)指定待由所述机器采取的动作的指令集的任何机器。另外,尽管说明单个机器,但还应认为术语“机器”包含机器的任何集合,所述机器个别地或联合地执行指令的集合(或多个集合)以执行本文中所论述的方法中的任何一或多种。
实例计算机系统900包含处理装置902、主存储器904(例如,只读存储器(ROM)、快闪存储器、例如同步DRAM(SDRAM)或Rambus DRAM(RDRAM)等动态随机存取存储器(DRAM))、静态存储器906(例如,快闪存储器、静态随机存取存储器(SRAM)等),以及数据存储系统918,其经由总线930彼此通信。
处理装置902表示一或多个通用处理装置,例如微处理器、中央处理单元等。更确切地说,处理装置可以是复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器,或实施其它指令集的处理器,或实施指令集的组合的处理器。处理装置902也可为一或多个专用处理装置,例如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器等。处理装置902被配置成执行指令926以用于执行本文中所论述的操作和步骤。计算机系统900可以进一步包含网络接口装置908以在网络920上通信。
数据存储系统918可以包含机器可读存储介质924(也称为计算机可读介质),其上存储有一或多个指令集926或体现本文中所描述的任何一或多种方法或功能的软件。指令926还可在其由计算机系统900执行期间完全或至少部分地驻留在主存储器904内和/或处理装置902内,主存储器904和处理装置902也构成机器可读存储介质。机器可读存储介质924、数据存储系统918和/或主存储器904可对应于图1的存储器子系统110。
在一个实施例中,指令926包含用以实施对应于预读高速缓存管理器(例如,图1的预读高速缓存管理器113)的功能性的指令。虽然机器可读存储介质924在实例实施例中展示为单个介质,但术语“机器可读存储介质”应被认为包含存储所述一或多个指令集的单个介质或多个介质。术语“机器可读存储介质”还应被认为包含能够存储或编码供机器执行的指令集且致使机器执行本公开的方法中的任何一种或多种的任何介质。术语“机器可读存储介质”应相应地被理解为包含(但不限于)固态存储器、光学介质和磁性介质。
已依据计算机存储器内的数据位的操作的算法和符号表示呈现了先前详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用以将其工作的主旨最有效地传达给所属领域的其他技术人员的方式。算法在这里并且通常被认为是引起所要结果的操作的自洽序列。操作为要求对物理量进行物理操纵的操作。这些量通常但未必呈能够被存储、组合、比较和以其它方式操纵的电或磁信号的形式。主要出于常见使用的原因,有时将此些信号称为位、值、要素、符号、字符、项、数字等已证实是方便的。
然而,应牢记,所有这些和类似术语应与适当物理量相关联,且仅是应用于这些量的方便的标签。本公开可涉及将计算机系统的寄存器和存储器内的表示为物理(电子)量的数据操纵和变换为计算机系统存储器或寄存器或其它此类信息存储系统内的类似地表示为物理量的其它数据的计算机系统或类似电子计算装置的动作和过程。
本公开还涉及一种用于执行本文中的操作的设备。此设备可以出于既定目的而专门构造,或其可包含由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。举例来说,计算机系统或其它数据处理系统(例如,控制器115)可响应于其处理器执行存储器或其它非暂时性机器可读存储介质中所含的计算机程序(例如,指令序列)而实行计算机实施的方法300。此计算机程序可存储在计算机可读存储介质中,例如(但不限于)任何类型的盘(包含软盘、光盘、CD-ROM和磁光盘)、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光卡,或适合于存储电子指令的任何类型的介质,它们各自耦合到计算机系统总线。
本文中呈现的算法和显示并不与任何特定计算机或其它设备在本质上相关。各种通用系统可根据本文中的教示与程序一起使用,或可证明构造更专用的设备来执行所述方法是方便的。将如下文描述中所阐述的那样来呈现多种这些系统的结构。另外,不参考任何特定编程语言来描述本公开。应了解,可使用多种编程语言来实施本文中所描述的本公开的教示。
本公开可以提供为计算机程序产品或软件,其可以包含在其上存储有指令的机器可读介质,所述指令可以用于编程计算机系统(或其它电子装置)以执行根据本公开的过程。机器可读介质包含用于以机器(例如,计算机)可读的形式存储信息的任何机制。在一些实施例中,机器可读(例如,计算机可读)介质包含机器(例如,计算机)可读存储介质,例如只读存储器(“ROM”)、随机存取存储器(“RAM”)、磁盘存储介质、光学存储介质、快闪存储器组件等。
在前述说明书中,已参考本公开的特定实例实施例描述了本公开的实施例。将显而易见的是,可以在不脱离如所附权利要求书中阐述的本公开的实施例的更广精神和范围的情况下对本公开作出各种修改。因此,应在说明性意义上而非限制性意义上看待说明书和图式。
Claims (20)
1.一种方法,其包括:
从主机系统接收请求来自存储器子系统的数据的第一读取命令;
通过将所述第一读取命令的地址集合与命令历史表中的第一命令条目进行比较来确定所述第一读取命令是读取命令的活跃流的一部分且检测针对地址集合的所述第一命令条目在所述第一读取命令的所述地址集合的开始地址之前或在所述第一读取命令的所述地址集合的结束地址之后,其中所述读取命令的活跃流包括至介质的邻接寻址部分的读取命令,且其中所述命令历史表存储各自对应于不与读取命令的活跃流相关联的所接收读取命令的多个命令条目,所述多个命令条目包含所述第一命令条目和第二命令条目,其中所述第二命令条目的地址集合不与所述第一读取命令的所述地址集合邻接;以及
响应于确定所述第一读取命令是活跃流的一部分,将流条目添加到活跃流表,所述活跃流表存储各自对应于由所述存储器子系统检测到的读取命令的活跃流的流条目的集合。
2.根据权利要求1所述的方法,其进一步包括:
从所述主机系统接收请求来自存储器子系统的数据的第二读取命令;以及
通过检测到所述第二读取命令与所述活跃流表中的流条目的所述集合中的地址邻接而确定所述第二读取命令是读取命令的所述活跃流的一部分,其中响应于检测到所述第二读取命令与流条目的所述集合中的流条目的所述地址邻接而修改所述流条目。
3.根据权利要求2所述的方法,其中修改所述流条目包含以下中的一或多个:(1)基于所述第二读取命令的地址集合修改由所述流条目表示的读取命令的活跃流的开始地址,(2)基于所述第二读取命令的所述地址集合修改所述活跃流的结束地址,(3)基于所述第二读取命令的所述地址集合修改最新命令大小,所述最新命令大小指示所述第二读取命令中的地址的数目,(4)修改所述活跃流的方向,所述方向指示所述主机系统正请求渐低数值地址还是渐高数值地址,(5)修改对应于所述流条目的修改时间的最后修改指示,(6)修改对应于预读高速缓存中的分配到所述活跃流的空间量的预读高速缓存分配,或(7)修改对应于由所述活跃流表示的读取命令的数目的命令计数。
4.根据权利要求1所述的方法,其中确定所述第一读取命令是读取命令的活跃流的一部分进一步包括:
响应于确定所述第一读取命令的地址集合不与所述活跃流表中的流条目的所述集合的地址邻接,检测到所述第一读取命令的地址集合与所述命令历史表中的所述多个命令条目的地址邻接。
5.根据权利要求1所述的方法,其进一步包括:
从所述主机系统接收请求来自存储器子系统的数据的第二读取命令;以及
响应于确定所述第二读取命令的地址集合不与所述多个命令条目的地址邻接,将针对所述第二读取命令的命令条目添加到所述命令历史表。
6.根据权利要求1所述的方法,其进一步包括:
在预读高速缓存中为流条目的所述集合中的每一流条目分配空间;以及
基于所述预读高速缓存中所分配的空间以流条目的所述集合中的每一流条目的方式填充所述预读高速缓存。
7.根据权利要求6所述的方法,其中以流条目的所述集合中的每一流条目的方式分配所述预读高速缓存是基于以下中的一或多个:(1)最新命令大小,其指示最近修改了相应流条目的读取命令中的地址的数目,或(2)命令计数,其指示由所述相应流条目表示的读取命令的数目。
8.一种系统,其包括:
存储器装置;以及
处理装置,其以操作方式与所述存储器装置耦合以:
从主机系统接收请求来自存储器子系统的数据的第一读取命令;
通过将所述第一读取命令的地址集合与命令历史表中的第一命令条目进行比较来确定所述第一读取命令是读取命令的活跃流的一部分且检测针对地址集合的所述第一命令条目在所述第一读取命令的所述地址集合的开始地址之前或在所述第一读取命令的所述地址集合的结束地址之后,其中所述读取命令的活跃流包括至介质的邻接寻址部分的读取命令,且其中所述命令历史表存储各自对应于不与读取命令的活跃流相关联的所接收读取命令的多个命令条目,所述多个命令条目包含所述第一命令条目和第二命令条目,其中所述第二命令条目的地址集合不与所述第一读取命令的所述地址集合邻接;以及
响应于确定所述第一读取命令是活跃流的一部分,将流条目添加到活跃流表,所述活跃流表存储各自对应于由所述存储器子系统检测到的读取命令的活跃流的流条目的集合。
9.根据权利要求8所述的系统,其中所述处理装置进一步:
从所述主机系统接收请求来自存储器子系统的数据的第二读取命令;以及
通过检测到所述第二读取命令与所述活跃流表中的流条目的所述集合中的地址邻接而确定所述第二读取命令是读取命令的所述活跃流的一部分,其中响应于检测到所述第二读取命令与流条目的所述集合中的流条目的所述地址邻接而修改所述流条目。
10.根据权利要求9所述的系统,其中修改所述流条目包含以下中的一或多个:(1)基于所述第二读取命令的地址集合修改由所述流条目表示的读取命令的活跃流的开始地址,(2)基于所述第二读取命令的所述地址集合修改所述活跃流的结束地址,(3)基于所述第二读取命令的所述地址集合修改最新命令大小,所述最新命令大小指示所述第二读取命令中的地址的数目,(4)修改所述活跃流的方向,所述方向指示所述主机系统正请求渐低数值地址还是渐高数值地址,(5)修改对应于所述流条目的修改时间的最后修改指示,(6)修改对应于预读高速缓存中的分配到所述活跃流的空间量的预读高速缓存分配,或(7)修改对应于由所述活跃流表示的读取命令的数目的命令计数。
11.根据权利要求8所述的系统,其中确定所述第一读取命令是读取命令的活跃流的一部分进一步包括:
响应于确定所述第一读取命令的地址集合不与所述活跃流表中的流条目的所述集合的地址邻接,检测到所述第一读取命令的地址集合与所述命令历史表中的所述多个命令条目的地址邻接。
12.根据权利要求8所述的系统,其中所述处理装置进一步:
从所述主机系统接收请求来自存储器子系统的数据的第二读取命令;以及
响应于确定所述第二读取命令的地址集合不与所述多个命令条目的地址邻接,将针对所述第二读取命令的命令条目添加到所述命令历史表。
13.根据权利要求8所述的系统,其中所述处理装置进一步:
在预读高速缓存中为流条目的所述集合中的每一流条目分配空间;以及
基于所述预读高速缓存中所分配的空间以流条目的所述集合中的每一流条目的方式填充所述预读高速缓存。
14.根据权利要求13所述的系统,其中以流条目的所述集合中的每一流条目的方式分配所述预读高速缓存是基于以下中的一或多个:(1)最新命令大小,其指示最近修改了相应流条目的读取命令中的地址的数目,或(2)命令计数,其指示由所述相应流条目表示的读取命令的数目。
15.一种包括指令的非暂时性计算机可读存储介质,所述指令在由处理装置执行时致使所述处理装置:
从主机系统接收请求来自存储器子系统的数据的第一读取命令;
通过将所述第一读取命令的地址集合与命令历史表中的第一命令条目进行比较来确定所述第一读取命令是读取命令的活跃流的一部分且检测针对地址集合的所述第一命令条目在所述第一读取命令的所述地址集合的开始地址之前或在所述第一读取命令的所述地址集合的结束地址之后,其中所述读取命令的活跃流包括至介质的邻接寻址部分的读取命令,且其中所述命令历史表存储各自对应于不与读取命令的活跃流相关联的所接收读取命令的多个命令条目,所述多个命令条目包含所述第一命令条目和第二命令条目,其中所述第二命令条目的地址集合不与所述第一读取命令的所述地址集合邻接;
响应于确定所述第一读取命令是活跃流的一部分,将流条目添加到活跃流表,所述活跃流表存储各自对应于由所述存储器子系统检测到的读取命令的活跃流的流条目的集合;
在预读高速缓存中为流条目的所述集合中的每一流条目分配空间;以及
基于所述预读高速缓存中所分配的空间以流条目的所述集合中的每一流条目的方式填充所述预读高速缓存。
16.根据权利要求15所述的非暂时性计算机可读存储介质,其中所述处理装置进一步:
从所述主机系统接收请求来自存储器子系统的数据的第二读取命令;以及
通过检测到所述第二读取命令与所述活跃流表中的流条目的所述集合中的地址邻接而确定所述第二读取命令是读取命令的所述活跃流的一部分,其中响应于检测到所述第二读取命令与流条目的所述集合中的流条目的所述地址邻接而修改所述流条目。
17.根据权利要求16所述的非暂时性计算机可读存储介质,其中修改所述流条目包含以下中的一或多个:(1)基于所述第二读取命令的地址集合修改由所述流条目表示的读取命令的活跃流的开始地址,(2)基于所述第二读取命令的所述地址集合修改所述活跃流的结束地址,(3)基于所述第二读取命令的所述地址集合修改最新命令大小,所述最新命令大小指示所述第二读取命令中的地址的数目,(4)修改所述活跃流的方向,所述方向指示所述主机系统正请求渐低数值地址还是渐高数值地址,(5)修改对应于所述流条目的修改时间的最后修改指示,(6)修改对应于所述预读高速缓存中的分配到所述活跃流的空间量的预读高速缓存分配,或(7)修改对应于由所述活跃流表示的读取命令的数目的命令计数。
18.根据权利要求15所述的非暂时性计算机可读存储介质,其中确定所述第一读取命令是读取命令的活跃流的一部分进一步包括:
响应于确定所述第一读取命令的地址集合不与所述活跃流表中的流条目的所述集合的地址邻接,检测到所述第一读取命令的地址集合与所述命令历史表中的所述多个命令条目的地址邻接。
19.根据权利要求15所述的非暂时性计算机可读存储介质,其中所述处理装置进一步:
从所述主机系统接收请求来自存储器子系统的数据的第二读取命令;以及
响应于确定所述第二读取命令的地址集合不与所述多个命令条目的地址邻接,将针对所述第二读取命令的命令条目添加到所述命令历史表。
20.根据权利要求15所述的非暂时性计算机可读存储介质,其中以流条目的所述集合中的每一流条目的方式分配所述预读高速缓存是基于以下中的一或多个:(1)最新命令大小,其指示最近修改了相应流条目的读取命令中的地址的数目,或(2)命令计数,其指示由所述相应流条目表示的读取命令的数目。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/296,044 US10877896B2 (en) | 2019-03-07 | 2019-03-07 | Adaptive readahead cache manager based on detected active streams of read commands |
US16/296,044 | 2019-03-07 | ||
PCT/US2020/020485 WO2020180725A1 (en) | 2019-03-07 | 2020-02-28 | Adaptive readahead cache manager based on detected active streams of read commands |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113614702A CN113614702A (zh) | 2021-11-05 |
CN113614702B true CN113614702B (zh) | 2023-05-30 |
Family
ID=72335248
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080019516.4A Active CN113614702B (zh) | 2019-03-07 | 2020-02-28 | 基于检测到的读取命令活跃流的自适应预读高速缓存管理器 |
Country Status (3)
Country | Link |
---|---|
US (2) | US10877896B2 (zh) |
CN (1) | CN113614702B (zh) |
WO (1) | WO2020180725A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20220067776A (ko) * | 2020-11-18 | 2022-05-25 | 에스케이하이닉스 주식회사 | 컨트롤러 및 컨트롤러의 동작방법 |
US11650758B2 (en) * | 2021-05-06 | 2023-05-16 | Western Digital Technologies, Inc. | Data storage device and method for host-initiated cached read to recover corrupted data within timeout constraints |
US20230376225A1 (en) * | 2022-05-17 | 2023-11-23 | Micron Technology, Inc. | Techniques for memory system rebuild |
US11983442B2 (en) * | 2022-06-22 | 2024-05-14 | Western Digital Technologies, Inc. | Data storage device and method for multi-level conditional prediction of future random read commands |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6317811B1 (en) * | 1999-08-26 | 2001-11-13 | International Business Machines Corporation | Method and system for reissuing load requests in a multi-stream prefetch design |
CN1950804A (zh) * | 2004-03-08 | 2007-04-18 | 桑迪士克股份有限公司 | 闪速存储器控制器高速缓存架构 |
US8732406B1 (en) * | 2011-03-15 | 2014-05-20 | Netapp, Inc. | Mechanism for determining read-ahead length in a storage system |
CN103970675A (zh) * | 2013-01-29 | 2014-08-06 | Lsi公司 | 用于使引导操作系统加速的快速引导列表 |
CN105373341A (zh) * | 2014-08-11 | 2016-03-02 | 达西系统股份有限公司 | 处理序列输入/输出串流的方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7177985B1 (en) * | 2003-05-30 | 2007-02-13 | Mips Technologies, Inc. | Microprocessor with improved data stream prefetching |
US7996623B2 (en) | 2006-06-30 | 2011-08-09 | Seagate Technology Llc | Read ahead storage control |
US8683136B2 (en) * | 2010-12-22 | 2014-03-25 | Intel Corporation | Apparatus and method for improving data prefetching efficiency using history based prefetching |
US8984225B2 (en) | 2011-06-22 | 2015-03-17 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Method to improve the performance of a read ahead cache process in a storage array |
US9239793B2 (en) | 2011-12-13 | 2016-01-19 | Ati Technologies Ulc | Mechanism for using a GPU controller for preloading caches |
US9684455B2 (en) | 2013-03-04 | 2017-06-20 | Seagate Technology Llc | Method and apparatus for sequential stream I/O processing |
US9021210B2 (en) * | 2013-02-12 | 2015-04-28 | International Business Machines Corporation | Cache prefetching based on non-sequential lagging cache affinity |
-
2019
- 2019-03-07 US US16/296,044 patent/US10877896B2/en active Active
-
2020
- 2020-02-28 WO PCT/US2020/020485 patent/WO2020180725A1/en active Application Filing
- 2020-02-28 CN CN202080019516.4A patent/CN113614702B/zh active Active
- 2020-11-24 US US17/103,811 patent/US11360902B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6317811B1 (en) * | 1999-08-26 | 2001-11-13 | International Business Machines Corporation | Method and system for reissuing load requests in a multi-stream prefetch design |
CN1950804A (zh) * | 2004-03-08 | 2007-04-18 | 桑迪士克股份有限公司 | 闪速存储器控制器高速缓存架构 |
US8732406B1 (en) * | 2011-03-15 | 2014-05-20 | Netapp, Inc. | Mechanism for determining read-ahead length in a storage system |
CN103970675A (zh) * | 2013-01-29 | 2014-08-06 | Lsi公司 | 用于使引导操作系统加速的快速引导列表 |
CN105373341A (zh) * | 2014-08-11 | 2016-03-02 | 达西系统股份有限公司 | 处理序列输入/输出串流的方法及装置 |
Non-Patent Citations (1)
Title |
---|
多用户存储中自适应动态预取策略;唐丽梅等;《电子技术应用》;20130106(第01期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
US20210073135A1 (en) | 2021-03-11 |
US11360902B2 (en) | 2022-06-14 |
WO2020180725A1 (en) | 2020-09-10 |
CN113614702A (zh) | 2021-11-05 |
US20200285582A1 (en) | 2020-09-10 |
US10877896B2 (en) | 2020-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113508368B (zh) | 存储器子系统及其操作方法 | |
CN113614702B (zh) | 基于检测到的读取命令活跃流的自适应预读高速缓存管理器 | |
US11914520B2 (en) | Separate read-only cache and write-read cache in a memory sub-system | |
US12007917B2 (en) | Priority scheduling in queues to access cache data in a memory sub-system | |
US11385836B2 (en) | Read look ahead data size determination | |
CN114077552A (zh) | 用于主机常驻转译层的存储器存取跟踪 | |
US11704249B2 (en) | Frozen time cache for multi-host read operations | |
US11175859B1 (en) | Managing memory commands in a memory subsystem by adjusting a maximum number of low priority commands in a DRAM controller | |
KR20220052353A (ko) | 조정된 파라미터를 사용한 메모리 컴포넌트의 가비지 수집 | |
US20200089610A1 (en) | Cache operations in a hybrid dual in-line memory module | |
US11301383B2 (en) | Managing processing of memory commands in a memory subsystem with a high latency backing store | |
CN112835815B (zh) | 具有高速缓冲存储器的存储器子系统的预提取 | |
CN112306403B (zh) | 基于数据图的概率存储数据 | |
US20240201850A1 (en) | Fragmentation management for memory systems | |
CN115729853A (zh) | 交错式高速缓存预取 |
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 |