用于存储器子系统中的单独的只读高速缓存和写入-读取高速缓存的未完成命令队列的使用

文档序号:108373 发布日期:2021-10-15 浏览:43次 >En<

阅读说明:本技术 用于存储器子系统中的单独的只读高速缓存和写入-读取高速缓存的未完成命令队列的使用 (Use of outstanding command queues for separate read-only and write-read caches in a memory subsystem ) 是由 D·巴维什 于 2020-02-27 设计创作,主要内容包括:可以接收针对读取存储在存储器子系统处的数据的请求。可以确定所述数据是否存储在所述存储器子系统的高速缓存中。响应于确定所述数据未存储在所述存储器子系统的所述高速缓存中,可以由处理装置确定一组队列中的一个队列,以将所述请求与针对存储在所述存储器子系统处的所述数据的其它读取请求一起存储。所述一组队列中的每个队列对应于所述高速缓存的相应高速缓存行。所述请求可以与针对存储在所述存储器子系统处的所述数据的所述其它读取请求一起存储在确定的队列处。(A request may be received to read data stored at a memory subsystem. It may be determined whether the data is stored in a cache of the memory subsystem. In response to determining that the data is not stored in the cache of the memory subsystem, one queue of a set of queues may be determined by a processing device to store the request with other read requests for the data stored at the memory subsystem. Each queue in the set of queues corresponds to a respective cache line of the cache. The request may be stored at the determined queue with the other read requests for the data stored at the memory subsystem.)

具体实施方式

本公开的各方面涉及用于存储器子系统中的单独的只读高速缓存和写入-读取高速缓存的未完成命令队列的使用。存储器子系统在下文中也被称为“存储器装置”。存储器子系统的实例是经由外围互连(例如,输入/输出总线、存储区域网络)耦合到中央处理单元(CPU)的存储装置。存储装置的实例包含固态驱动器(SSD)、闪存驱动器、通用串行总线(USB)闪存驱动器和硬盘驱动器(HDD)。存储器子系统的另一实例是经由存储器总线耦合到CPU的存储器模块。存储器模块的实例包含存储器模块的实例包含双列直插式存储器模块(DIMM)、小型DIMM(SO-DIMM)、非易失性双列直插式存储器模块(NVDIMM)等。在一些实施例中,存储器子系统可以是混合存储器/存储子系统。通常,主机系统可以利用包含一或多个存储器装置的存储器子系统。主机系统可提供将被存储在存储器子系统处的数据,并且可请求将从存储器子系统被检索的数据。

存储器子系统可以包含可以存储来自主机系统的数据的多个存储器部件。在一些主机系统中,在主机系统上执行的应用程序的性能可以高度取决于可以在存储器子系统中存取数据的速度。为了加速数据存取,常规的存储器子系统使用存储器存取模式的空间和时间局部性来优化性能。这些存储器子系统可以使用称为高速缓存的更高性能且更低容量的介质来存储被频繁存取的数据(时间局部性)或位于最近已被存取的存储器区域中的数据(空间局部性)。

存储器部件中的每一个可以与指定存储器部件所使用的管理单元的大小和/或针对存取存储在管理单元处的数据的请求的优选大小的协议相关联。例如,一个存储器部件的协议可以规定对存储器部件执行512千字节(KB)大小的请求。在主机系统上执行的应用程序最初可以请求从存储器部件读取512KB数据,但是由于用于在主机系统与存储器子系统之间通信的总线的协议,512KB请求通常被分解成较小粒度的请求(例如,八个64KB请求)。常规的存储器子系统可以执行较小粒度请求以从存储器部件获得数据,该数据然后可以存储在高速缓存中和/或返回到请求应用程序。在能够处置较大粒度请求的存储器部件上执行较小粒度请求可导致存储器部件的磨损更快和耐久性更低,因为将在存储器部件处执行更多读取操作。

另外,在主机系统上执行的一些应用程序可以使用存储器子系统作为主存储器。在这种范例中,地址空间通常具有用于读取数据和写入数据的单独的存储器地址区域。在常规的存储器子系统中,可以使用能够写入和读取数据的单个高速缓存,这对于不同的存储器存取工作量可能是不期望的。例如,读取和写入请求等待时间可以是不同的,并且应用程序当对不同地址空间进行写入和读取时,使用单个高速缓存可降低存储器子系统的性能。

不同类型的存储器存取工作量可以是顺序(有序)和随机(无序)存取。例如,应用程序可以请求从地址读取原始数据,向该地址写入不同的数据,以及从该地址读取不同的数据。如果未按次序正确地处置请求,则可能存在诸如存储器子系统向应用程序返回错误数据(例如,在写入不同数据之前响应于对不同数据的读取请求而返回原始数据)之类的数据冒险。

此外,在一些范例中,应用程序可请求存取不同地址处的数据。该数据可位于相同或不同的存储器部件处。从相同或不同的存储器部件返回不同地址处的数据的等待时间可基于诸如存储器部件的速度、所请求的数据的大小等之类的各种因素而变化。常规的存储器子系统通常等待,直到在首先接收的请求的地址处的数据从存储器部件返回,而不考虑在另一请求的不同地址处的数据是否更快地从存储器部件返回。即,不同地址处的数据在从存储器部件返回之后可处于闲置状态,直到首先接收到的请求的地址处的数据存储在高速缓存中。这可降低存储器子系统中的数据吞吐量。

本公开的各方面通过使用存储器子系统中的单独的只读高速缓存和写入-读取高速缓存来解决上述和其它缺陷。存储器子系统前端中的单独的只读高速缓存和写入-读取高速缓存可以为在主机系统上执行的应用程序提供不同的空间以供读取和写入。例如,应用程序可请求由主机操作系统转译为逻辑地址的某些虚拟地址。该逻辑地址可以被转译为物理地址,该物理地址可以维持在不同的空间中以供使用单独的只读高速缓存和写入-读取高速缓存读取和写入。单独的只读和写入-读取高速缓存可以位于主机系统与存储器子系统的介质部件(也称为“后备存储区”)之间。只读高速缓存可以用于针对存储器部件中的数据的顺序读取请求,而写入-读取高速缓存可以用于处置针对介质部件中的数据的读取和写入请求。单独的高速缓存可以通过比对于每个请求存取较慢的后备存储区更快地读取/写入数据来提高存储器子系统的性能。此外,单独的高速缓存通过减少对后备存储区的请求数量来提高后备存储区的耐久性。

在一些实施例中,存储器子系统可以检测存储器存取工作量,诸如顺序存储器存取工作量或随机存储器存取工作量。顺序存储器存取工作量可以指代针对相同或顺序地址相继发生的读取请求。在顺序存储器存取工作量中请求的数据可以填充在只读高速缓存中,以用于比每次使用后备存储区更快的存取。

随机存储器存取工作量可以指代随机发生的写入和读取。某些应用程序可以使用随机存储器存取工作量。与随机写入和读取请求相关联的数据可填充在写入-读取高速缓存中。例如,被请求写入后备存储区的数据可以最初被写入该写入-读取高速缓存,当请求读取数据时,写入-读取高速缓存可以返回写入的数据而不必存取后备存储区。

只读高速缓存和写入-读取高速缓存中的每一个都可以使用相应的内容可寻址存储器(CAM)来确定与从主机系统接收的请求相关联的数据是否存在于只读高速缓存和/或写入-读取高速缓存中。例如,存储器子系统可以使用CAM来确定包含标签的所请求的数据是否存储在只读高速缓存和/或写入-读取高速缓存中。数据请求具有指定所请求数据的位置的地址。可以将地址分解成多个部分,诸如识别高速缓存行内的特定位置的偏移、识别含有所请求数据的组的设置,以及包含地址的一或多个位的标签,该一或多个位可与其数据一起保存在每一高速缓存行中以区分可放置在组中的不同地址的标签。与要存储所请求数据的只读高速缓存或写入-读取高速缓存相对应的CAM可以存储所请求数据的标签,以使得能够在接收到请求时比搜索高速缓存本身更快地进行查找。

此外,如上文所讨论,主机系统可通过基于将主机系统通信地耦合到存储器子系统的存储器总线所使用的协议将请求分解成64字节的小粒度请求来提供针对数据(例如,512字节)的请求。在一些实施例中,只读高速缓存和写入-读取高速缓存中的每一个使用扇区来将较小粒度的请求聚集到较大粒度的高速缓存行(例如,聚集8个64字节的请求以实现512字节的高速缓存行大小)。扇区可具有由主机系统使用的存储器存取协议指定的固定大小和存储数据的后备存储区中的存储器部件的管理单元的大小。例如,如果存储器部件中管理单元的大小为512字节且协议规定使用64字节请求,则扇区可具有64字节的固定数据大小并且高速缓存行可以包含八个扇区以等于管理单元的512字节。在一些范例中,管理单元可以是例如128字节,并且可以仅使用具有64字节的固定数据大小的两个扇区。写入-读取高速缓存的扇区数量可大于只读高速缓存的扇区数量,因为需要对后备存储区执行较少的写入以提高后备存储区的耐久性。存储器子系统可以对后备存储区执行512字节一个请求,而不是八个64字节请求,以减少对存储器部件中具有大管理单元的后备存储区的请求的数量,由此提高存储器部件的耐久性。

在一些实施例中,只读高速缓存和/或写入-读取高速缓存可以在从主机系统接收存储器存取请求之前预加载数据。例如,只读高速缓存和/或写入-读取高速缓存可以在对主机系统执行的应用程序的初始化期间预加载。存储器协议可以包含使得应用程序能够向存储器子系统发送预加载指令以用期望数据预加载只读高速缓存和/或写入-读取高速缓存的语义。可以由存储器子系统生成一或多个读取请求以从后备存储区获得数据。如下所述,未完成命令队列可用于以生成请求的次序来存储该请求,并且可执行优先级调度以确定执行该请求的调度。可生成填充操作以将从后备存储区获得的数据存储在只读高速缓存和/或写入-读取高速缓存中的高速缓存行的一或多个扇区中。应用程序可基于应用程序通常在执行期间使用的数据或应用程序计划使用的数据来发送预加载指令。

此外,未完成命令队列可用于存储读取请求和写入请求,以防止数据冒险并提高存取存储器子系统中的数据的服务质量。未完成命令队列可以基于存储器子系统中的不同类型的业务来提高请求业务吞吐量。例如,存储器子系统可以使用控制逻辑和未完成命令队列来提供对在同一高速缓存行处请求的数据的有序存取和对在不同高速缓存行处请求的数据的无序存取。单独的未完成命令队列可用于只读高速缓存和写入-读取高速缓存。只读未完成命令队列的每个高速缓存行可以对应于只读高速缓存中的相应高速缓存行,而写入-读取未完成命令队列的每个高速缓存行可以对应于写入-读取高速缓存中的相应高速缓存行。未完成命令队列中的每一个中的队列数量可以比只读高速缓存和写入-读取高速缓存中的高速缓存行的数量少。

通常,可以从主机系统接收请求。可以搜索只读内容可寻址存储器(CAM)和写入-读取CAM,以确定与包含在请求中的地址相关联的匹配标签是否存在于CAM中。如果发现匹配标签,则可针对读取请求从对应的高速缓存行返回数据,或者可针对写入请求将数据写入高速缓存行。如果在任一CAM中都没有发现匹配标签,则可以在只读未完成命令队列和写入-读取未完成命令队列中搜索匹配标签。如果在未完成命令队列中的任一个中发现匹配标签,则存在针对分配给标签的高速缓存行的挂起请求,并且将所接收的请求存储在队列中位于该地址处的数据的其它请求之后。如果在未完成命令队列中的任一个中没有发现匹配标签,则可以选择一个队列作为期望的未完成命令队列,并且可以将请求的标签分配给选定的未完成命令队列。此外,存储器子系统可以设置封锁位以封锁选定的未完成命令队列并将请求存储在选定的未完成命令队列中。该请求可以按照在同一队列中接收请求的次序来处理。可基于何时接收到请求并且通过使用封锁位来对分配给不同高速缓存行的不同未完成命令队列进行封锁和解除封锁来无序地存取不同高速缓存行,如下文进一步详细描述。

在一些实施例中,为了进一步提高存储器子系统的性能和服务质量,优先级调度器可与优先级队列一起使用以确定对何时执行请求和填充操作的调度。如上所述,未完成命令队列可以在高速缓存中对针对数据的读取请求的未命中和针对数据的写入请求的未命中进行排队。优先级调度器可以基于何时接收到请求来确定对何时执行请求的调度。优先级调度器可以生成优先级指示符(例如,具有优先级值的令牌)并将其分配给请求,以维持所生成的用于将从后备存储区获得的数据存储在高速缓存的高速缓存行处的请求和填充操作的次序。

例如,对于读取请求未命中,优先级调度器可以为与该特定读取请求相关联的填充操作生成具有较高优先级值的优先级指示符,该优先级指示符可以在从后备存储区获得与该特定读取请求相关联的数据时被分配。当请求存储在未完成命令队列中并且用于执行的调度被确定时,优先级调度器可以中继要存储在优先级队列中的请求。可以按照将请求存储在优先级队列中的次序来处理该请求,以从后备存储区获得与该请求相关联的数据或者将与该请求相关联的数据写入后备存储区。从后备存储区返回的数据可以用被分配有优先级指示符的填充操作存储在填充队列中。优先级指示符可以指定首先在填充队列中执行填充操作,并且可以用于调节通过未完成命令队列对请求的处理。

如下面进一步描述的,当存储在不同高速缓存行处的数据请求可以无序执行时,存在某些范例。即,可以从未完成命令队列执行针对读取数据的一个请求,但是可封锁同一未完成命令队列中针对同一数据的另一请求,以允许在不同未完成命令队列中执行另一请求。在此类范例中,可基于分配给请求的优先级指示符和与请求相关联的填充操作无序地执行该请求。可以在未完成命令队列之间无序地执行请求,以防止应用程序必须等待从后备存储区获得数据。这种技术可以提高向主机系统返回数据的服务质量,由此提高存储器子系统的性能。

本公开的优点包含但不限于通过使用分扇区高速缓存行来累积请求使得可减少对存储器部件执行的请求的数量而提高存储器部件的耐久性。而且,使用单独的只读高速缓存和写入-读取高速缓存可以为在主机系统上执行的应用程序提供单独的空间以供从其中读取数据和向其写入数据。通过检测应用程序所使用的存储器存取工作量的类型并选择适当的高速缓存以实现对应用程序的存储器存取,该单独空间可提高应用程序的存取数据的性能。另外,通过使用未完成命令队列和优先级调度器来确定执行请求的调度,可以提高存储器子系统的服务质量和性能。

图1示出了根据本公开的一些实施例的实例性计算环境100,该实例性计算环境包含存储器子系统110。存储器子系统110可以包含介质,诸如存储器部件112A至112N。存储器部件112A至112N可以是易失性存储器部件、非易失性存储器部件或它们的组合。在一些实施例中,存储器子系统是存储系统。存储系统的实例是SSD。在一些实施例中,存储器子系统110是混合存储器/存储子系统。通常,计算环境100可以包含使用存储器子系统110的主机系统120。例如,主机系统120可以将数据写入到存储器子系统110并从存储器子系统110读取数据。

主机系统120可以是诸如台式计算机、膝上型计算机、网络服务器、移动装置之类的计算装置,或者是包含存储器和处理装置的此计算装置。主机系统120可以包含或耦合到存储器子系统110,使得主机系统120可以从存储器子系统110中读取数据或向存储器子系统写入数据。主机系统120可经由物理主机接口耦合到存储器子系统110。如本文所使用的,“耦合到”通常是指部件之间的连接,该连接可以是间接通信连接或直接通信连接(例如,没有中间部件),无论是有线还是无线的,包含诸如电、光学、磁性等连接。物理主机接口的实例包含但不限于串行高级技术附件(SATA)接口、外围部件互连快速(PCIe)接口、通用串行总线(USB)接口、光纤通道、串行附接SCSI(SAS)等。物理主机接口可以用于在主机系统120与存储器子系统110之间转移数据。当存储器子系统110通过PCIe接口与主机系统120耦合时,主机系统120可以进一步利用NVM快速(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)以及非易失性存储器单元的交叉点阵列。非易失性存储器的交叉点阵列可以基于体电阻变化结合可堆叠的交叉网格数据访问阵列来执行位存储。另外,与许多基于快闪存储器的存储器相比,交叉点非易失性存储器可以执行就地写入(write in-place)操作,其中可以对非易失性存储器单元进行编程,而无需事先擦除非易失性存储器单元。此外,存储器部件112A至112N的存储器单元可以被分组为可以指代用于存储数据的存储器部件的一个单元的存储器页面或数据块。

存储系统控制器115(以下称为“控制器”)可以与存储器部件112A至112N进行通信以执行诸如在存储器部件112A至112N处读取数据、写入数据或擦除数据之类的操作以及其它此类操作。控制器115可以包含诸如一或多个集成电路和/或离散部件之类的硬件、缓冲存储器或它们的组合。控制器115可以是微控制器、专用逻辑电路(例如,现场可编程门阵列(FPGA)、专用集成电路(ASIC)等)或其它合适的处理器。控制器115可以包含被配置为执行存储在本地存储器119中的指令的处理器(处理装置)117。在所示实例中,控制器115的本地存储器119包含嵌入式存储器,该嵌入式存储器被配置为存储用于执行各种过程、操作、逻辑流以及控制存储器子系统110的操作(包含处理存储器子系统110与主机系统120之间的通信)的例程的指令。在一些实施例中,本地存储器119可以包含存储存储器指针、所预取的数据等的存储器寄存器。本地存储器119还可以包含用于存储微代码的只读存储器(ROM)。尽管图1中的实例性存储器子系统110已经被示为包含控制器115,但是在本公开的另一个实施例中,存储器子系统110可以不包含控制器115,而是可以依赖于外部控制(例如,通过外部主机或通过与存储器子系统分离的处理器或控制器提供)。

通常,控制器115可以从主机系统120接收命令或操作,并且可以将命令或操作转换为指令或适当命令以实现对存储器部件112A至112N的期望访问。控制器115可以负责其它操作,诸如损耗均衡操作、垃圾回收操作、错误检测和纠错码(ECC)操作、加密操作、缓存操作以及逻辑块地址与和存储器部件112A至112N相关联的物理块地址之间的地址转换。控制器115还可以包含主机接口电路以经由物理主机接口与主机系统120进行通信。主机接口电路可以将从主机系统接收到的命令转换为访问存储器部件112A至112N的命令指令,以及将与存储器部件112A至112N相关联的响应转换为主机系统120的信息。

存储器子系统110还可以包含未示出的附加电路或部件。在一些实施例中,存储器子系统110可以包含可以从控制器115接收地址并对地址进行解码以访问存储器部件112A至112N的高速缓存或缓冲器(例如,DRAM)和地址电路(例如,行解码器和列解码器)。

存储器子系统110包含高速缓存部件113,其可以使用存储器子系统中的单独的只读高速缓存和写入-读取高速缓存。在一些实施例中,控制器115包含高速缓存部件113的至少一部分。例如,控制器115可以包含处理器117(处理装置),该处理器被配置为执行存储在本地存储器119中的指令以执行本文所述的操作。在一些实施例中,高速缓存部件113是主机系统110、应用程序或操作系统的一部分。

高速缓存部件113可以使用存储器子系统110中的单独的只读高速缓存和写入-读取高速缓存。只读高速缓存可以用于针对存储器部件中的数据的顺序读取请求,而写入-读取高速缓存可以用于处置针对介质部件中的数据的读取和写入请求。单独的高速缓存可以通过比每次存取较慢的后备存储区更快地读取/写入数据来提高存储器子系统的性能。此外,单独的高速缓存通过凭借使用高速缓存行中的扇区减少对后备存储区的请求数量来提高后备存储区的耐久性。在一些实施例中,高速缓存部件113可以检测存储器存取工作量,诸如顺序存储器存取工作量或随机存储器存取工作量。在顺序存储器存取工作量中请求的数据可以填充在只读高速缓存中,以用于比每次使用后备存储区更快的存取。与随机写入和读取请求相关联的数据可填充在写入-读取高速缓存中。在一些实施例中,高速缓存部件113可从在主机系统120上执行的一或多个应用程序接收预加载指令,并预加载只读高速缓存和/或写入-读取高速缓存以提高服务质量。

此外,高速缓存部件113可以使用未完成命令队列以存储读取请求和写入请求,以防止数据冒险并提高存取存储器子系统中的数据的服务质量。未完成命令队列可以基于存储器子系统中的不同类型的业务来提高请求业务吞吐量。控制器可以使用控制逻辑和未完成命令队列来提供对在同一高速缓存行处请求的数据的有序存取和对在不同高速缓存行处请求的数据的无序存取。

在一些实施例中,为了进一步提高存储器子系统的性能和服务质量,高速缓存部件113可以使用具有优先级队列的优先级调度器来确定对何时执行请求和填充操作的调度。如上所述,未完成命令队列可以在高速缓存中对针对数据的读取请求的未命中和针对数据的写入请求的未命中进行排队。优先级调度器可以基于何时接收到请求来确定对何时执行请求的调度。优先级调度器可以生成优先级指示符(例如,具有优先级值的令牌)并将其分配给请求,以维持所生成的用于将从后备存储区获得的数据存储在高速缓存的高速缓存行处的请求和填充操作的次序。

图2示出了根据本公开的一些实施例的存储器子系统110的实例性高速缓存部件113和本地存储器119。如图所描绘,本地存储器119可以包含单独的只读高速缓存200和写入-读取高速缓存202。高速缓存部件113可以包含用于只读高速缓存200的只读内容可寻址存储器(CAM)204、用于写入-读取高速缓存202的写入-读取CAM 206、只读未完成命令队列208和写入-读取未完成命令队列210。只读未完成命令队列208和写入-读取未完成命令队列210可以是先进先出(FIFO)队列。下面进一步讨论只读CAM 204、写入-读取CAM 206、只读未完成命令队列208和写入-读取未完成命令队列210的结构和内容。高速缓存部件113还包含优先级调度器212,其使用优先级指示符(例如,数字令牌)来确定用于执行请求和/或填充操作的调度。高速缓存部件113可以包含状态机,该状态机还确定将用来自后备存储区的数据填充的只读高速缓存200或写入-读取高速缓存202的高速缓存行的大小所需的读取请求的数量。优先级调度器212还可以包含仲裁逻辑,该仲裁逻辑确定执行请求和/或填充操作的次序。仲裁逻辑可以按照接收操作的次序来指定调度请求和/或填充操作。仲裁逻辑的一个目的可以是如果在高速缓存部件113中从后备存储区获得数据,则不保持应用程序等待。这样,优先级调度器212可以将较高的优先级分配给填充操作和数据。下面讨论优先级调度器212的附加功能性。

高速缓存部件113还包含用于不同目的的各种队列。队列可以是先进先出(FIFO)队列。这样,队列可用于按照请求、操作和/或数据被接收并存储在各种队列中的次序来处理请求、操作和/或数据。高速缓存部件113可以包含填充队列214、命中队列216、逐出队列218、优先级队列220和挂起队列222。填充队列214可以存储从后备存储区获得的数据和为该数据生成的填充操作。当接收到读取请求并且在只读高速缓存200或写入-读取高速缓存202中没有发现所请求的数据(高速缓存未命中)时,可以生成填充操作。命中队列216可以将发现的数据请求(高速缓存命中)存储在只读高速缓存200或写入-读取高速缓存202中。

逐出队列218可用于根据需要从只读高速缓存200和/或写入-读取高速缓存202逐出数据。例如,当只读高速缓存200和/或写入-读取高速缓存202已满(每个高速缓存行在一或多个扇区中包含至少一些有效数据)时,可以使用诸如最近最少使用的逐出策略来选择具有最近最少用于逐出的数据的高速缓存行。选定的高速缓存行的数据可以从只读高速缓存200和/或写入-读取高速缓存202中读出并存储在逐出队列218中。然后可通过将有效位设定为无效状态来使选定的高速缓存行无效。无效高速缓存行可用于存储后续数据。

优先级队列220可以存储要在后备存储区上执行的请求。优先级调度器212可以将优先级指示符分配给接收到的每一请求和/或在接收到请求时为该请求生成的填充操作。优先级调度器212可以使用优先级指示符来确定对执行请求和/或填充操作的调度。基于所确定的调度,优先级调度器212将请求存储在优先级队列220中,以按照请求存储在优先级队列220中的次序在后备存储区上执行该请求。当没有只读未完成命令队列208可供使用或有写入-读取未完成命令队列210可供使用时,挂起队列222可以存储接收到的针对高速缓存200和202中未发现的数据的请求。

包含在本地存储器119中的只读高速缓存200和写入-读取高速缓存202可以提供对存储在后备存储区的较慢存储器部件中的数据的较快存取。只读高速缓存200和写入-读取高速缓存202可以是存储由主机系统120的应用程序频繁存取(时间局部性)的数据或位于最近已被存取(空间局部性)的存储器区域中的数据的高性能、低容量介质。使用存储器子系统作为地址空间的应用程序二进制或分页软件系统可以具有单独的存储器地址区域,以用于通过使用只读高速缓存200和写入-读取高速缓存202从该系统中读取数据和向其写入数据。在只读高速缓存200和写入-读取高速缓存202的每一个中可以有许多高速缓存行。如下文进一步讨论,每一高速缓存行可以包含具有固定大小的一或多个扇区。

对于读取请求,高速缓存部件113搜索只读CAM 204和写入-读取CAM 206以确定是否发现匹配标签。发现匹配标签指示数据存储在只读高速缓存200或写入-读取高速缓存202的高速缓存行上,这取决于在哪个CAM 204或206处发现匹配标签。如果存在命中,意味着在CAM 204或206中的一个中发现匹配标签,则与存取后备存储区相比,相对快速地执行请求。如果存在未命中,意味着在CAM 204或206中的一个中没有发现匹配标签,则在只读未完成命令队列208和写入-读取未完成命令队列210中搜索匹配标签。如果存在命中,并且在未完成命令队列208或210中的一个中发现匹配标签,则将请求存储在分配有匹配标签的未完成命令队列中。如果在未完成命令队列208和210中存在未命中,则可选择未完成命令队列208或210中的一个并将其分配给包含在请求的地址中的标签。未完成命令队列208和210可通过以接收到针对高速缓存行的请求的次序启用请求处理来防止数据冒险。此外,未完成命令队列208和210可以通过以下方式来提高服务质量和性能:当对于在第一请求之后接收到的请求更快地获得数据时,使得能够针对不同的高速缓存行无序地执行请求。

只读未完成命令队列208或写入-读取未完成命令队列210可基于应用程序当前使用的存储器存取工作量的类型或基于请求的类型来选择。例如,如果存储器存取工作量是顺序的,则可以选择只读未完成命令队列。如果存储器存取工作量是随机的,则可以选择写入-读取未完成命令队列。如果请求是写入数据,则可以选择写入-读取未完成命令队列。在任何范例中,可以选择具有设置为无效状态的有效位的未完成命令队列,并且可以将请求的标签分配给选定的未完成命令队列208或210。未完成命令队列208和210中的每一队列可以对应于给定时间下高速缓存200或202中的单个高速缓存行。当标签被分配时,未完成命令队列208或210中的选定队列的有效位可以被设置为有效状态。如果如通过将有效位设置为有效状态所指示的那样使用每个未完成命令队列,则可以将请求存储在挂起队列222中,直到只读未完成命令队列208或写入-读取未完成命令队列210中的未完成命令队列变为无效。

对于写入请求,高速缓存部件113可搜索只读CAM 204,并且如果高速缓存行包含正被请求的地址的数据,则该高速缓存部件使高速缓存行无效。高速缓存部件113可以使用写入-读取CAM 206来识别写入-读取高速缓存中的空的、无效的高速缓存行。可以将数据写入该写入-读取高速缓存202中的选定高速缓存行。可针对高速缓存行设置写入-读取CAM206中的更改位(dirty bit)以指示数据写入高速缓存行。向高速缓存写入数据可以比向较慢后备存储区写入数据更快地执行。后续写入请求可以将数据写入相同或不同的高速缓存行,并且可针对执行后续写入请求的高速缓存行在写入-读取CAM 206中设置更改位。此外,如果在只读高速缓存200中发现,则可以使与写入请求相关联的后续数据无效。在操作期间,当存储器子系统确定刷新高速缓存200或202中的任一个时,可识别更改高速缓存行并将其排队到逐出队列218以便发送到后备存储区。

图3是根据本公开的一些实施例的用于基于应用程序的所确定的存储器存取工作量来使用单独的只读高速缓存和写入-读取高速缓存的实例性方法300的流程图。方法300可以通过处理逻辑来执行,该处理逻辑可以包含硬件(例如,处理装置、电路、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令)或它们的组合。在一些实施例中,方法300由图1的高速缓存部件113执行。尽管以特定的顺序或次序示出,但是除非另有规定,否则可以修改过程的次序。因此,所示实施例应仅被理解为实例,并且所示出的过程可以不同次序执行,并且一些过程可并行执行。此外,在各种实施例中可以省略一或多个过程。因此,不是在每个实施例中都需要所有过程。其它过程流程也是可能的。

在操作310处,处理装置确定应用程序的存储器存取工作量。处理装置可以通过从应用程序接收一组存储器存取请求、基于该组存储器存取请求确定模式以及基于该模式确定应用程序的存储器存取工作量来确定应用程序的存储器存取工作量。例如,如果请求读取类似地址区域中的相同或顺序地址,则处理装置可以确定存储器存取工作量是顺序的,并且只读高速缓存应当用于存储与该请求相关联的数据。此外,如果该模式指示相继地接收顺序读取请求或操作,则处理装置可以确定存储器存取工作量是顺序的,并且只读高速缓存应当用于存储与该请求相关联的数据。如果该模式指示正从应用程序接收随机读取请求和写入请求,则处理装置可确定存储器存取工作量对于应用程序是随机的并且写入-读取高速缓存应当用于存储与该请求相关联的数据。在一些实施例中,写入-读取高速缓存用于存储与任何写入请求相关联的数据。

在操作320处,处理装置确定应用程序的存储器存取工作量是否与顺序读取操作相关联。例如,如上所述,可以确定应用程序的存储器存取工作量是顺序的还是随机的。在操作330处,基于确定应用程序的存储器工作量是否与顺序读取操作相关联,处理装置将与应用程序相关联的数据存储在第一类型的高速缓存(只读)或第二类型的另一高速缓存(写入-读取)中的一个高速缓存处。当存储器存取工作量与顺序读取操作相关联时,处理装置将与应用程序相关联的数据存储在第一类型的高速缓存处。在一些实施例中,如果处理装置确定存储器存取工作量与写入和读取操作相关联,则处理装置可以将与应用程序相关联的数据存储在第二类型的高速缓存处。

处理装置可通过搜索相应的只读CAM和写入-读取CAM来确定数据是存在于只读高速缓存还是写入-读取高速缓存中。如果数据存在于任一高速缓存的高速缓存行中,则可执行读取请求并且可以将数据返回到应用程序。如果数据不存在,则可以在只读未完成命令队列和写入-读取未完成命令队列中搜索与所请求数据的地址相关联的标签。如果在只读未完成命令队列中没有发现匹配标签,则读取请求可存储在只读未完成命令队列中的一个队列中,并被执行以从后备存储区获得与请求相关联的数据。如果在只读未完成命令队列中发现匹配标签,则将针对高速缓存行的一或多个请求存储在未完成命令队列中,并且将当前请求存储在只读未完成命令中的其它请求之后。基于由优先级调度器确定的调度,当前请求将在针对特定高速缓存行的其它请求之后执行。下面讨论关于未完成命令队列和优先级调度器的操作的进一步细节。

在一些实施例中,处理装置可以在针对将数据写入存储器部件的一或多个请求中接收与应用程序相关联的数据。一或多个写入请求可以具有固定的数据大小。固定数据大小由用于经由总线在主机系统与存储器子系统之间通信的协议的存储器语义指定。处理装置可以将与应用程序相关联的数据存储在第二类型的高速缓存的高速缓存行的一或多个扇区处,以基于确定应用程序的存储器存取工作量是否与写入和读取操作相关联而在高速缓存行中积累数据。一或多个扇区中的每一个具有固定的数据大小。处理装置可确定存储与应用程序相关联的数据的一或多个扇区的累积数据大小何时满足阈值条件。响应于确定存储与应用程序相关联的数据的一或多个扇区的累积数据大小满足阈值条件,处理装置可传输针对将累积数据存储在存储器部件处的请求。当高速缓存行中的每一扇区包含有效数据时,可以将写入请求发送到后备存储区以将累积数据写入高速缓存行中。这样,可仅向后备存储区发出针对高速缓存行的一个写入请求,而非向后备存储区发出八个写入请求。使用这种技术可以通过执行较少的写入操作来提高后备存储区中的存储器部件的耐久性。

此外,还可从应用程序接收读取请求,并且读取请求可各自具有固定的数据大小。只读存储器中的高速缓存行可以分解成一或多个扇区,每个扇区具有固定的数据大小。当请求读取的数据已经存在于只读高速缓存或写入-读取高速缓存中的任一高速缓存中时,可以执行读取请求以从存储所请求数据的适当高速缓存行读取数据。当存在高速缓存未命中并且只读高速缓存和写入-读取高速缓存都不存储所请求数据时,可以使用未完成命令队列来处理读取请求。优先级调度器可基于高速缓存行的大小(例如,两个64字节扇区)来确定要执行的读取请求的数量。例如,如果只接收到针对64字节的一个读取请求并且高速缓存行大小为128字节,则优先级调度器可以确定要执行针对64字节的两个读取请求(总共128字节),以返回全部数据来存储在与该请求相关联的高速缓存行中。

在一些实施例中,处理装置可以从应用程序接收命令或指令,以将与应用程序相关联的数据预加载到只读高速缓存或写入-读取高速缓存。这种数据可以是由应用程序使用或操作的数据。在从应用程序接收到针对存取数据的任何请求之前,处理装置可以向只读高速缓存或写入-读取高速缓存预加载与应用程序相关联的数据。该指令可以与用于在主机系统与存储器子系统之间通信的协议中的存储器语义相关联。为了处理预加载指令,处理装置可以使用优先级调度器中的状态机来生成针对数据的适当数量的读取请求。处理装置可以将所生成的读取请求存储在只读未完成命令队列或写入-读取未完成命令队列中,以便在后备存储区上执行。当从后备存储区获得与读取请求相关联的数据时,可以将数据存储在只读高速缓存或写入-读取高速缓存的一或多个高速缓存行中。

图4是根据本公开的一些实施例的用于使用高速缓存行中具有固定数据大小的扇区来在高速缓存中累积数据的实例性方法400的流程图。方法400可以通过处理逻辑来执行,该处理逻辑可以包含硬件(例如,处理装置、电路、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令)或它们的组合。在一些实施例中,方法400由图1的高速缓存部件113执行。尽管以特定的顺序或次序示出,但是除非另有规定,否则可以修改过程的次序。因此,所示实施例应仅被理解为实例,并且所示出的过程可以不同次序执行,并且一些过程可并行执行。此外,在各种实施例中可以省略一或多个过程。因此,不是在每个实施例中都需要所有过程。其它过程流程也是可能的。

在操作410处,处理装置接收存取存储器部件处的数据的一组请求。该请求中的每一个可以指定固定大小的数据。固定大小的数据由存储器存取协议指定,该存储器存取协议由主机系统使用来与包含后备存储区中的一或多个存储器部件的存储器子系统对接。该请求可以是将数据写入后备存储区。

在操作420处,处理装置将请求中的每一个的数据存储到高速缓存的高速缓存行的一组扇区中的相应扇区中以在高速缓存行中累积数据。高速缓存行的该组扇区中的每个相应扇区存储固定大小的高速缓存数据。所选择的特定高速缓存行可以在写入-读取高速缓存中,并且可以通过识别无效的高速缓存行来选择。换句话说,最初可选择不具有包含有效位设置或更改位设置的任何扇区的高速缓存行来存储第一请求的数据。第一写入请求可存储在写入-读取未完成命令队列中,并且写入请求的标签可以被分配给未完成命令队列中的一个。所选择的未完成命令队列可对应于将要写入数据的高速缓存行。处理装置可执行未完成命令队列中的写入请求以将数据写入对应高速缓存行的扇区。此外,可以利用写入请求的标签来创建写入-读取CAM中的条目。针对用在写入-读取CAM中发现的匹配标签写入数据的后续请求可存储在命中队列中,然后被执行以在其它扇区中写入数据。每当写入一个扇区时,可以将该扇区的有效位设置为指示存储有效数据的状态。此外,可设置扇区的更改位以指示数据正被写入该扇区。

在操作430,处理装置确定为请求中的每一个存储数据的一组扇区的累积数据大小何时满足阈值条件。阈值条件可以包含累积数据大小满足为存取存储器部件而指定的数据大小参数。例如,针对存储器部件的数据存取请求的数据大小参数可以被设置为比从主机接收的请求的数据大小大的粒度。在一个实例中,数据大小参数可以为512字节且扇区的数据大小可以为64字节。当512字节的数据累积在高速缓存行中的八个扇区中时,可满足阈值条件。

在操作440处,响应于确定该组扇区的累积数据大小满足阈值条件,处理装置传输针对将累积数据存储在存储器部件处的请求。在应用程序试图快速存取数据的情况下,数据可保留在高速缓存行中。例如,应用程序可从写入-读取高速缓存的高速缓存行中读出数据。

在一些实施例中,处理装置可以接收命令或指令以将数据和与应用程序相关联的其它数据一起预加载在高速缓存(例如,只读高速缓存和/或写入-读取高速缓存)中。在接收到针对存取存储器部件中的数据的多个请求之前,处理装置可以向高速缓存预加载与应用程序相关联的其它数据。如果应用程序确定数据将被应用程序频繁地使用,则应用程序可以将指令发送到存储器子系统。

图5示出了根据本公开的一些实施例的实例性只读高速缓存200和写入-读取高速缓存202。单独的只读高速缓存200和写入-读取高速缓存202可以为应用程序或分页系统提供单独的地址空间以供从该系统读取数据和向其写入数据,这可以提高存储器子系统的性能。只读高速缓存200和写入-读取高速缓存202分别包含多个高速缓存行500和504。尽管在高速缓存200和202的每一个中仅示出了四个高速缓存行,但是应当理解,可以包含更多的高速缓存行(例如,数百、数千等)。高速缓存200和202中的每一个的总大小可以是任何合适的量,诸如32千字节。

如图中描绘,只读高速缓存200中的高速缓存行500包含两个扇区502。扇区中的每一个具有固定大小,该固定大小可等于从主机系统发送的请求的数据大小。该请求的数据大小可以由用于经由总线在主机系统与存储器子系统之间对接的协议的存储器语义来指定。在一个实例中,扇区可以各自为64字节,并且高速缓存行500的总数据大小可以是128字节。此外,写入-读取高速缓存202中的高速缓存行504包含比只读高速缓存200更多的扇区506,因为需要对后备存储区执行写入操作的次数少于读取操作的次数,以提高后备存储区中的存储器部件的耐久性。在所描绘的实例中,写入-读取高速缓存202包含也具有固定的数据大小(例如,64字节)的八个扇区。固定的数据大小也可以等于从主机系统接收的请求的数据大小。在一个实例中,写入-读取高速缓存202中的高速缓存行504的每一扇区的固定的数据大小可以为64字节。写入-读取高速缓存202可累积八个写入请求的数据,直到八个扇区506的累积数据大小满足阈值条件。阈值条件可以是累积数据大小满足为存取存储器部件而指定的数据大小参数。数据大小参数可以是存储器部件的管理单元的数据大小,例如512字节。响应于确定存储请求的数据中的每一个的高速缓存行504的该组扇区506的累积数据大小满足阈值条件,高速缓存部件可传输写入请求以将累积数据存储在后备存储区处。

图6是根据本公开的一些实施例的用于在未完成命令队列中存储针对高速缓存中不存在的数据的读取请求的实例性方法600的流程图。方法600可以通过处理逻辑来执行,该处理逻辑可以包含硬件(例如,处理装置、电路、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令)或它们的组合。在一些实施例中,方法600由图1的高速缓存部件113执行。尽管以特定的顺序或次序示出,但是除非另有规定,否则可以修改过程的次序。因此,所示实施例应仅被理解为实例,并且所示出的过程可以不同次序执行,并且一些过程可并行执行。此外,在各种实施例中可以省略一或多个过程。因此,不是在每个实施例中都需要所有过程。其它过程流程也是可能的。

在操作610,处理装置接收针对读取存储在存储器子系统处的数据的请求。可从在主机系统上执行的应用程序发送针对读取数据的请求。该请求可以包含从其中读取存储器子系统中的数据的地址。可以从地址中提取被称为“标签”的识别符。标签可以是地址的位的子集,其可用于识别数据在存储器子系统中的地址处的位置。

在操作620处,处理装置确定数据是否存储在存储器子系统的高速缓存处。在一些实施例中,处理装置在只读CAM和写入-读取CAM中搜索与所请求数据相关联的标签。只读CAM和写入-读取CAM可以包含与存储在相应CAM中的每个高速缓存行处的数据相对应的标签。处理装置可以使用只读CAM和写入-读取CAM中的每一个CAM中的比较器来确定是否为从其中读取数据的所请求地址发现匹配标签。确定该数据是否存储在高速缓存中可以包含确定是否将有效位设置为在其中发现匹配标签的CAM中的数据的有效状态。响应于确定数据存储在存储器子系统的高速缓存处,处理装置可以将请求存储在用于管理执行针对高速缓存中存在的数据的请求的另一队列(例如,命中队列)处。

在操作630处,响应于确定数据未存储在存储器子系统的高速缓存处,处理装置确定一组队列中的一个队列以将请求与针对存储在存储器子系统处的数据的其它读取请求一起存储。在一些实施例中,高速缓存可以指代只读高速缓存或写入-读取高速缓存。该组队列可以包含只读未完成命令队列或写入-读取未完成命令队列,这取决于选择哪个高速缓存来为请求提供服务。这些队列可用于存储高速缓存未命中(例如,读取未命中和写入未命中)。如上文所讨论,存储器存取工作量可以规定使用哪个高速缓存来为请求提供服务。如果存储器存取工作量包含顺序读取操作,则只读高速缓存和只读未完成命令队列可用于为请求提供服务。如果存储器存取工作量包含随机读取和写入操作,则写入-读取高速缓存和写入-读取未完成命令队列可用于为请求提供服务。

处理装置可以通过确定该组队列中的任何队列是否与请求的识别符相关联来确定队列。处理装置可以在只读未完成命令队列和写入-读取未完成命令队列中搜索被分配有请求的识别符的队列。如果没有队列被分配有识别符,则处理装置可以从适当的一组队列中选择具有被设置为无效状态的有效位和/或被设置为解除封锁状态的封锁位的队列。处理装置可以将请求以无效状态存储在队列中,将标签分配给队列,将有效位设置为有效状态,并将封锁位设置为封锁状态。如果正在使用适当的一组队列中的每个队列(将有效状态设置为有效位并将封锁位设置为封锁状态),则将请求存储在挂起队列中,直到适当的一组队列中的一个队列变为无效。

如果该组队列中的队列中的一个被分配有识别符并且是有效的,则存在已经接收到的针对已经存储在队列中的相同地址的其它请求。在操作640处,处理装置将请求与针对存储在存储器子系统处的数据的其它读取请求一起存储在所确定的队列处。该组队列中的每个队列对应于高速缓存的相应高速缓存行。通过将请求的标签分配给队列并且还将该标签分配给适当的CAM中的条目,该队列对应于相应的高速缓存行,该条目对应于在适当的高速缓存中存储请求的数据的高速缓存行。

该请求可以被分配有优先级指示符,并且当该请求存储在队列中时,该请求由优先级调度器中继到优先级队列,如下面进一步讨论的。优先级调度器可以基于高速缓存行的大小来确定要为该请求生成的请求的数量。例如,如果请求达64字节,但是高速缓存行大小是128字节,则优先级调度器可以确定生成两个64字节的请求,以从后备存储区中读出数据以用有效数据填充整个高速缓存行。当请求存储在优先级队列中时,优先级调度器可以将读取计数器和填充计数器递增。可在后备存储区上执行请求以获得所需数据,并且可以将读取计数器递减。

从后备存储区获得的数据可以存储在具有填充操作的另一队列(填充队列)中。处理装置可向填充操作分配优先级指示符并执行填充操作以将数据存储到高速缓存中的适当高速缓存行。处理装置可以将存储请求的队列的封锁位设置为解除封锁状态,并且可以将填充计数器递减。可针对存储数据的高速缓存行生成CAM条目,并且可以将标签分配给CAM条目。处理装置可执行队列中的请求以从高速缓存行读取数据或将数据写入高速缓存行。此外,在执行队列中的请求之后,处理装置可以通过将有效位设置为无效状态并取消分配标签来使队列无效。然后,基于所接收的后续请求,可以将队列重新用于相同或另一高速缓存行。

在一些实施例中,处理装置可以接收针对将数据写入后备存储区的写入请求。处理装置可以从请求中获得标签,并在写入-读取CAM和写入-读取未完成命令队列中搜索标签。如果在写入-读取CAM中发现匹配标签,则将请求中的数据写入与该标签相对应的高速缓存行。处理装置可在高速缓存行中选择将要被写入数据的一或多个无效扇区。当将数据写入一或多个扇区中时,处理装置可以将一或多个扇区的有效位和更改位设置在与包含一或多个扇区的高速缓存行相对应的写入-读取CAM条目中。

如果在写入-读取CAM中没有发现匹配标签,但是在写入-读取未完成命令队列中发现匹配标签,则将包含该标签的其它请求存储在被分配有匹配标签的所识别队列中。处理装置可以将写入请求存储在被分配有匹配标签的队列中,并且该请求可以其接收的次序类似地处理以将数据写入该写入-读取高速缓存中的对应高速缓存行的一或多个扇区。例如,优先级调度器可以为写入请求生成优先级指示符,并将优先级指示符分配给写入请求。优先级调度器可以将写入请求存储在优先级队列中,并且当写入请求到达队列的前部时执行写入请求以将数据写入高速缓存行。将写入请求存储在未完成命令队列中可通过不允许在写入请求之前接收到的其它请求之前执行写入请求来防止数据冒险发生。

图7是根据本公开的一些实施例的用于执行存储在未完成命令队列中的请求的实例性方法700的流程图。方法700可以通过处理逻辑来执行,该处理逻辑可以包含硬件(例如,处理装置、电路、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令)或它们的组合。在一些实施例中,方法700由图1的高速缓存部件113执行。尽管以特定的顺序或次序示出,但是除非另有规定,否则可以修改过程的次序。因此,所示实施例应仅被理解为实例,并且所示出的过程可以不同次序执行,并且一些过程可并行执行。此外,在各种实施例中可以省略一或多个过程。因此,不是在每个实施例中都需要所有过程。其它过程流程也是可能的。

在操作710处,处理装置确定已经从存储器子系统的存储器部件中检索由一组读取操作请求的数据。从存储器部件中检索的数据可与所生成的填充操作相关联,并且数据和填充操作可存储在填充队列中。

在框720处,处理装置执行一或多个填充操作以将数据存储在存储器子系统的高速缓存的高速缓存行处。当从后备存储区中检索数据时,可以生成填充操作。当生成填充操作时,填充操作可与相关联的数据一起存储在填充队列中。填充操作可以按照它们存储在填充队列中的次序来执行。执行填充操作可以包含从填充队列中删除数据并将数据存储在高速缓存(例如,只读高速缓存或写入-读取高速缓存)中的适当高速缓存行处。处理装置可以将针对所执行的一或多个填充操作中的每一个的填充计数器递减。响应于执行一或多个填充操作以将数据存储在高速缓存行处,处理装置可以将与所确定的队列相关联的封锁位设置为解除封锁状态以使得能够执行存储在所确定的队列处的请求。

在操作730处,处理装置确定一组队列中与已经由该组读取操作请求的数据相对应的一个队列。该组队列中的每个队列对应于存储器子系统的高速缓存的一组高速缓存行中的相应高速缓存行。高速缓存可以是只读高速缓存和/或写入-读取高速缓存,并且该组队列可以是只读未完成命令队列和/或写入-读取未完成命令队列。确定该队列对应于所请求的数据可以包含确定该队列是否被分配有与数据相关联的识别符(例如,标签)。

在操作740处,响应于执行一或多个填充操作以将数据存储在高速缓存行处,处理装置以存储器子系统已接收到存储在所确定的队列处的一组读取操作的次序执行该组读取操作。使用用于存储请求的未完成命令队列使得能够有序存取与未完成命令队列相对应的高速缓存行,这可以防止存储器子系统中的数据冒险。该请求可由优先级调度器分配优先级指示符,该优先级调度器可基于存储器子系统接收请求的次序,如下文进一步描述。读取操作可读取存储在高速缓存行处的数据并将数据返回到发送该请求的应用程序。

图8示出了根据本公开的一些实施例的只读未完成命令队列208、写入-读取未完成命令队列210、只读内容可寻址存储器204和只读内容可寻址存储器206的实例。如图中描绘,只读未完成命令队列208可以包含多个条目,并且每个条目可以包含用于标签、队列计数器、用于请求的队列、读取计数器和有效位以及填充计数器和有效位的字段。

标签字段存储从主机系统接收的请求中获得的标签。队列计数器可以跟踪存储在队列的条目中的请求的数量。当附加的请求存储在队列中时,队列计数器(qc)可以递增,而当请求被执行并从队列中删除时,队列计数器(qc)可以递减。用于请求的队列可以具有任何适当数量的条目。在一个实例中,队列中的条目的数量等于只读高速缓存的高速缓存行中的扇区的数量。当请求存储在队列中时,可以有为请求设置的封锁位。

读取计数器(R)可以跟踪要被执行以从后备存储区获得所请求的数据的读取操作的数量。当多个读取操作确定为从后备存储区中检索数据时,读取计数器可以递增,而当对后备存储区执行读取操作以获得数据时,读取计数器可以递减。读取计数器的有效位可以指示与读取相关联的数据是有效的还是无效的。填充计数器(F)可以跟踪要执行的填充操作的数量,以将所请求数据存储在与存储请求的队列相对应的高速缓存行中。当生成填充操作时填充计数器可递增,而在执行填充操作时填充计数器递减。填充计数器的有效位可以指示与填充操作相关联的数据是有效的还是无效的。

写入-读取未完成命令队列210可以包含多个条目,并且每个条目可以包含用于标签、队列计数器、用于请求的队列、逐出计数器(E)和有效位以及回写计数器(WB)和有效位的字段。标签字段存储从主机系统接收的请求中获得的标签。队列计数器可以跟踪存储在队列的条目中的请求的数量。当附加的请求存储在队列中时,队列计数器可以递增,而当请求被执行并从队列中删除时,队列计数器可以递减。用于请求的队列可以具有任何适当数量的条目。在一个实例中,队列中的条目的数量等于写入-读取高速缓存的高速缓存行中的扇区的数量。当请求存储在队列中时,可以有为请求设置的封锁位。

逐出计数器可以跟踪要被执行以从写入-读取高速缓存中删除数据的逐出操作的数量。当选择将高速缓存行的数据逐出时,逐出计数器可以递增,而当从高速缓存中逐出高速缓存行中的数据时,逐出计数器可以递减。逐出计数器的有效位可以指示与逐出相关联的数据是有效的还是无效的。回写计数器可跟踪要执行以将与队列相对应的高速缓存行中的数据写入后备存储区的写入操作的数量。当写入请求存储在队列中时,回写计数器可递增,而当执行写入请求时,回写计数器递减。回写计数器的有效位可以指示与写入操作相关联的数据是有效的还是无效的。

只读CAM 204可以包含多个条目,并且每个条目可以包含用于标签的字段、用于每个扇区的有效位、用于每个扇区的更改位和地址。标签字段存储从请求获得的标签。当与该条目相对应的高速缓存行的扇区存储有效数据时,可以设置每个扇区的有效位。当在扇区处存储数据时,可设置每一扇区的更改位。地址字段可以存储包含在请求中的地址。

写入-读取CAM 206可以包含多个条目,并且每个条目可以包含用于标签的字段、用于每个扇区的有效位、用于每个扇区的更改位和地址。标签字段存储从请求获得的标签。当与该条目相对应的高速缓存行的扇区存储有效数据时,可以设置每个扇区的有效位。当在扇区处存储数据时,可设置每一扇区的更改位。地址字段可以存储包含在请求中的地址。

当接收到针对存取(例如,读取或写入)数据的请求时,可从包含在请求中的数据的地址获得标签。处理装置可以在只读未完成命令队列208、写入-读取未完成命令队列210、只读CAM 204和写入-读取CAM 206中搜索匹配标签。如果只读CAM 204或写入-读取CAM206包含匹配标签,则存在高速缓存命中,并且请求可存储在命中队列中以供执行。例如,对于读取请求高速缓存命中,可以将存储在与CAM 204或206中具有匹配标签的条目相对应的高速缓存行处的数据返回到请求应用程序。对于写入请求高速缓存命中,可以将请求中的数据写入与读取CAM 206中具有匹配标签的条目相对应的高速缓存行。当写入开始时,可设置写入-读取CAM 206中用于被写入数据的扇区的更改位。当将数据写入到扇区时,可设置扇区的写入-读取CAM 206中的有效位。

如果在只读CAM 204或写入-读取CAM 206中没有发现匹配标签,但是在只读未完成命令队列206中发现匹配标签,则可以将请求存储在只读未完成命令队列中与匹配标签相对应的空条目中。当请求存储在只读未完成命令队列中时,队列计数器可以递增,读取计数器和填充计数器可以递增。

如果在只读CAM 204或写入-读取CAM 206中没有发现匹配标签,但是在写入-读取未完成命令队列210中发现匹配标签,则可以将请求存储在写入-读取未完成命令队列中与匹配标签相对应的空条目中。当请求存储在写入-读取未完成命令队列中时,队列计数器可以递增,并且回写计数器可以递增。

如果在只读CAM 204、写入-读取CAM 206、只读未完成命令队列206或写入-读取未完成命令队列210中的任一个中未发现匹配标签,则基于应用程序所使用的存储器存取工作量从只读未完成命令队列204或写入-读取未完成命令队列210中选择队列。如果存储器存取工作量正使用顺序读取操作,则选择只读未完成命令队列208用于存储请求。只读命令队列208中包含被设置为无效状态的有效位、未被分配有标签并且未封锁的条目可以被选择来存储读取请求。读取请求可以存储在只读未完成命令队列中,请求的标签可以存储在标签字段中,可以为队列中的请求设置封锁位,队列计数器可以递增,读取计数器可以递增,填充计数器可以递增,和/或可以为读取计数器设置有效位。

如果存储器存取工作量正使用随机写入和读取操作,则选择写入-读取未完成命令队列210用于存储请求。只读命令队列208中包含被设置为无效状态的有效位、未被分配有标签并且未封锁的条目可以被选择来存储写入请求。写入请求可以存储在写入-读取未完成命令队列中,请求的标签可以存储在标签字段中,可以为队列中的请求设置封锁位,队列计数器可以递增,回写计数器可以递增,并且可以为回写计数器设置有效位。

图9是根据本公开的一些实施例的用于确定用于在存储器子系统中执行请求的调度的实例性方法900的流程图。方法900可以通过处理逻辑来执行,该处理逻辑可以包含硬件(例如,处理装置、电路、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令)或它们的组合。在一些实施例中,方法900由图1的高速缓存部件113执行。尽管以特定的顺序或次序示出,但是除非另有规定,否则可以修改过程的次序。因此,所示实施例应仅被理解为实例,并且所示出的过程可以不同次序执行,并且一些过程可并行执行。此外,在各种实施例中可以省略一或多个过程。因此,不是在每个实施例中都需要所有过程。其它过程流程也是可能的。

在操作910,处理装置接收针对读取存储在存储器子系统处的数据的请求。可从在主机系统上执行的应用程序接收读取数据的请求。该请求可以包含从中读取数据的存储器子系统的地址。

在操作920处,处理装置确定数据是否存储在存储器子系统的高速缓存处。存储器子系统可以包含单独的只读高速缓存和写入-读取高速缓存。处理装置可以通过从包含在请求中的地址获得标签来确定数据是否存储在高速缓存中。处理装置可在只读CAM和写入-读取CAM中搜索以确定匹配标签是否包含在任一CAM中。如果没有发现匹配标签,则处理装置确定数据没有存储在只读高速缓存或写入-读取高速缓存处。

处理装置可以通过在只读未完成命令队列和写入-读取未完成命令队列中搜索匹配标签来确定该标签没有包含在这两者中。如上所述,处理装置可以从只读未完成命令队列或写入-读取未完成命令队列中选择队列。处理装置可以执行包含在优先级调度器中的状态机,或者单独实施以基于适当高速缓存中的高速缓存行的大小来确定获得数据所需的请求的数量。处理装置可以将一或多个请求存储在选定的未完成命令队列中,该未完成命令队列用于存储从与数据相关联的地址读取或向其写入的请求。处理装置可以确定填充操作将用于读取请求以将从后备存储区获得的数据存储到高速缓存。优先级调度器可以为读取请求和填充操作生成优先级指示符(例如,具有数值的令牌)。处理装置可采用如下策略:规定填充操作具有带较高值的优先权指示符以使得填充操作能够在读取请求之前执行。可以按照接收读取请求的次序来生成优先级指示符并将其分配给读取请求和填充操作。

在操作930处,响应于确定数据未存储在存储器子系统的高速缓存处,处理装置从存储器子系统的存储器部件获得数据。处理装置可以通过将读取请求存储在优先级队列中并执行读取请求以从存储器部件获得数据来从存储器部件获得数据。可在从存储器部件获得数据时生成填充操作。

在操作940处,处理装置将第一优先级指示符(例如,具有值“1”的令牌)分配给与从存储器部件获得的数据相关联的填充操作。填充操作和从存储器部件获得的数据可以存储在填充队列中。

在操作950处,处理装置将第二优先级指示符(例如,具有值“2”的令牌)分配给针对读取数据的请求。分配给填充操作的第一优先级指示符可具有比分配给读取数据的请求的第二优先级指示符更高的优先级值。

在操作960处,处理装置基于第一优先级指示符和第二优先级指示符来调度执行填充操作的次序和针对读取数据的请求。优先级调度可以使用仲裁逻辑来确定调度。如果没有接收到其它请求,则处理装置可以使用该调度来执行填充操作,以从填充队列中删除数据,并将数据存储在与存储读取请求的队列相对应的高速缓存行中。此外,处理装置可以执行读取请求以读取高速缓存行中的数据并将数据返回到请求应用程序。

在一些实施例中,当针对读取数据的请求存储在未完成命令队列(例如,只读或写入-读取)中时,处理装置可以接收针对读取存储在存储器子系统处的数据的第二请求。处理装置可以确定与针对读取数据的第二请求相关联的识别符(标签)是否被分配有未完成命令队列。响应于确定与针对读取数据的第二请求相关联的识别符被分配给未完成命令队列,处理装置可以向第二请求分配第三优先级指示符,并将未完成命令队列中的第二请求存储在针对读取数据的初始请求之后的条目中。

在一些实施例中,处理装置可以接收针对将其它数据写入与存储器子系统处的数据相关联的地址的第三请求。处理装置可以确定与针对写入其它数据的第三请求相关联的识别符是否被分配给队列。响应于确定与针对写入其它数据的第三请求相关联的识别符被分配给队列,处理装置可以将第四优先级指示符分配给第三请求,并将写入请求存储在第二请求之后的条目中。处理装置可基于第一优先级指示符、第二优先级指示符、第三优先级指示符和第四优先级指示符来确定对执行填充操作的调度、针对读取数据的请求、针对读取数据的第二请求和针对写入其它数据的第三请求。该调度可以反映在未完成命令队列中接收到请求、第二请求和第三请求的次序。如果没有接收到其它请求,则调度可用于执行填充操作、针对读取数据的请求、针对读取数据的第二请求和针对写入其它数据的第三请求。

在一些实施例中,处理装置可以接收针对读取存储在存储器子系统处的其它数据的第二请求。处理装置可以通过在只读CAM和写入-读取CAM中搜索与包含在第二请求中的标签匹配的标签来确定其它数据是否存储在存储器子系统的高速缓存处。如果数据未存储在高速缓存处并且处理装置确定在只读未完成命令队列或写入-读取未完成命令队列中也未发现匹配标签,则可以选择第二未完成命令队列来存储针对读取其它数据的第二请求。存储针对读取其它数据的第二请求的第二未完成命令队列可以不同于用于存储针对读取数据的请求的未完成命令队列。响应于确定其它数据未存储在存储器子系统的高速缓存处,处理装置可以从存储器子系统的存储器部件获得其它数据。

处理装置可以确定第二填充操作将用于将从存储器部件获得的所请求的数据存储在适当的高速缓存处。处理装置可生成用于第二填充操作和针对读取数据的第二请求的优先级指示符。可生成第二填充操作并且可以将第三优先级指示符分配给第二填充操作。可以生成第四优先级指示符并将其分配给针对读取其它数据的第二请求。处理装置可至少基于第一优先级指示符、第二优先级指示符、第三优先级指示符和第四优先级指示符来确定执行填充操作、针对读取数据的请求、第二填充操作和针对读取其它数据的第二请求的调度。

处理装置可以基于所确定调度来以与接收针对数据的请求和针对读取其它数据的第二请求的次序不同的次序来执行针对读取数据的请求和针对读取其它数据的第二请求。例如,在一些范例中,即使针对数据的请求首先被发送到后备存储区,第二请求所请求的其它数据也可以更快地从后备存储区返回。在此范例中,处理装置可确定首先处理用于其它数据的第二填充操作,并且在填充操作和针对读取数据的请求之前处理针对读取其它数据的第二请求。填充操作可以将数据存储在与未完成命令队列相对应的高速缓存行中,并且第二填充操作可以将其它数据存储在与第二未完成命令队列相对应的第二高速缓存行中。针对读取数据的请求可从高速缓存行读取数据并将数据返回到发送请求的应用程序。针对读取数据的第二请求可从第二高速缓存行读取其它数据并将其它数据返回到发送第二请求的应用程序。

在一些实施例中,在执行填充操作、读取请求和/或写入请求之后,可重新使用优先级指示符并将其重新分配给后续填充操作、读取请求和/或写入请求。处理装置可以对所生成的优先级指示符的数量设置限制。该限制可以是任何合适的数量,并且可以被动态地配置以实现有效的请求吞吐量。

图10是根据本公开的一些实施例的用于确定用于在存储器子系统中执行请求的调度的另一实例性方法1000的流程图。方法1000可以通过处理逻辑来执行,该处理逻辑可以包含硬件(例如,处理装置、电路、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令)或它们的组合。在一些实施例中,方法1000由图1的高速缓存部件113执行。尽管以特定的顺序或次序示出,但是除非另有规定,否则可以修改过程的次序。因此,所示实施例应仅被理解为实例,并且所示出的过程可以不同次序执行,并且一些过程可并行执行。此外,在各种实施例中可以省略一或多个过程。因此,不是在每个实施例中都需要所有过程。其它过程流程也是可能的。

在操作1010处,处理装置接收针对存取存储在存储器子系统处的数据的一组请求。可从在主机系统上执行的一或多个应用程序接收该组请求。该请求可以包含要存取数据的地址。如果包含在该组请求中的数据没有存在于只读高速缓存或写入-读取高速缓存中,则处理装置确定在一或多个未完成命令队列(例如,只读或写入-读取)中的哪个未完成命令队列中存储该组请求。如果包含在该组请求的地址中的标签是相同的,则使用相同的未完成命令队列来存储该组请求。如果包含在该组请求的地址中的标签不同,则可以使用一个以上的未完成命令队列来存储该组请求。例如,可以为单独的未完成命令队列分配相应的标签。

在操作1020处,处理装置将一组优先级指示符分配给该组请求。例如,优先级指示符可以由处理装置生成,并且可以包含数值。优先级指示符可以反映存储器子系统接收该组请求的次序。优先级指示符可以被分配给存储在一或多个未完成命令队列中的该组请求。在一些范例中,当请求是读取请求时,可以生成也被分配有优先级指示符的填充操作,如上所述。

在操作1030处,处理装置基于分配给针对存取数据的该组请求的该组优先级指示符来确定执行该组请求的次序。例如,如果优先级指示符是诸如1、2、3、4、5、6等数值,则该次序可以是顺序的。如果在该组请求中存在读取请求,则处理装置可以使用状态机来基于高速缓存中的高速缓存行的大小来确定针对读取数据的该组请求中的每个相应请求的一或多个读取请求的数量。处理装置可以基于次序将一或多个读取请求存储在优先级队列中。处理装置可以执行存储在优先级队列中的一或多个请求,以从一或多个存储器部件读取数据。处理装置可响应于从一或多个存储器部件获得数据而将填充操作和数据存储在填充队列中。处理装置可执行填充操作以从填充队列中删除数据并将数据存储在存储器子系统的高速缓存的高速缓存行中。

在操作1040处,响应于从存储器子系统的一或多个存储器部件获得数据,处理装置基于所确定的次序执行该组请求。在一些实施例中,当填充队列中存储有填充操作时,处理装置可在执行与填充操作相对应的读取请求之前执行填充操作,因为被分配给填充操作的优先级指示符可具有比被分配给对应的读取请求的优先级指示符更高的优先级值。

在一些实施例中,可以接收针对存取存储在存储器子系统处的其它数据的一组第二请求。处理装置可以将一组第二优先级指示符分配给该组第二请求。当在从一或多个存储器部件获得数据之前从一或多个存储器部件获得其它数据时,该组第二优先级指示符可具有比该组优先级指示符更高的优先级值。处理装置可以基于该组优先级指示符和该组第二优先级指示符来确定执行该组请求和该组第二请求的次序。

图11示出了根据本公开的一些实施例的使用优先级调度器基于优先级指示符确定用于执行请求的调度的实例。在所描绘的实例中,处理装置可确定应用程序的存储器存取工作量包含顺序读取请求,并且只读高速缓存将用于从应用程序接收的读取请求。处理装置可从应用程序接收第一读取请求并在只读CAM和写入-读取CAM中进行搜索以确定是否发现请求的标签。如果在任一CAM中发现匹配标签,则可以将第一读取请求发送到命中队列,并且可按照在命中队列中接收该第一读取请求的次序来处理该第一读取请求以将数据返回到应用程序。如果在任一CAM中都未发现匹配标签,则处理装置可以确定使用只读未完成命令队列208,因为应用程序正在使用顺序读取请求类型的存储器存取工作量。

在所描绘的实例中,处理装置针对第一读取请求获得标签“123”并在只读未完成命令队列208中搜索匹配标签。处理装置未发现匹配标签并选择条目1100来存储第一读取请求。处理装置可以将与条目1100的请求字段中的只读未完成命令队列相关联的封锁位设置为指示只读未完成命令队列被封锁的值(例如,当被封锁时,在只读未完成命令队列中没有请求可以被执行)。处理装置可以将队列计数器递增为“1”。处理装置将标签“123”分配给条目1100的标签字段。处理装置可以确定将为与从后备存储区返回的第一读取请求相关联的数据生成填充操作。优先级调度器212可以为第一读取请求生成优先级指示符(“2”)并为填充操作生成优先级指示符(“1”)。与第一读取请求相对应的填充操作的优先级指示符的值可以具有较高优先级,以使得能够在执行第一读取请求之前将从后备存储区获得的数据存储在高速缓存中。优先级调度器212可以将优先级指示符“2”分配给条目1100的请求字段中的未完成命令队列中的第一读取请求。如图中描绘,处理装置还可以将读取计数器递增为“1”并将填充计数器递增为“1”。

处理装置可以接收包含标签“234”的第二读取请求,并且可以在只读未完成命令队列208中搜索匹配标签。处理装置在只读未完成命令队列208和选定的条目1102中未发现匹配标签来存储第二读取请求。处理装置可以将与条目1102的请求字段中的只读未完成命令队列相关联的封锁位设置为指示只读未完成命令队列被封锁的值(例如,当被封锁时,在只读未完成命令队列中没有请求可以被执行)。处理装置将标签“234”分配给条目1102中的标签字段。优先级调度器212可以确定将为与从后备存储区返回的第二读取请求相关联的数据生成填充操作。优先级调度器212可以为第二读取请求生成优先级指示符(“4”)并为填充操作生成优先级指示符(“3”)。优先级调度器212可以将优先级指示符(“4”)分配给条目1102的请求字段中的未完成命令队列中的第二读取请求。

处理装置可以接收包含标签“123”的第三读取请求,并且可以在只读未完成命令队列208中搜索匹配标签。处理装置在条目1100中发现匹配标签“123”。因而,处理装置可以将第三读取请求存储在条目1100的请求字段中的只读未完成命令队列中。如图中描绘,处理装置可以将队列计数器递增到“2”。优先级调度器212可以确定已经为与具有标签“123”的第二读取请求相关联的数据生成填充操作,因此不需要生成另一填充操作并为其分配优先级指示符。优先级调度器212可以生成仅用于第三读取请求的优先级指示符(“5”),并且可以将优先级指示符“5”分配给条目1100的请求字段中的未完成命令队列中的第三读取请求。

优先级调度器212可以使用优先级队列220来存储读取请求,并按照存储读取请求的次序来执行读取请求以从后备存储区获得数据。如图中描绘,被分配有优先级指示符“2”的第一读取请求首先存储在优先级队列220中,并且其次被分配有优先级指示符“4”的第二读取请求存储在优先级队列220中,因为其优先级指示符具有比第一读取请求更小的优先级值。此外,第三读取请求可以不存储在优先级队列220中,因为具有相同标签的第一读取请求可以从与相同标签相对应的地址处的后备存储区获得数据。

处理装置可以执行第一读取请求以从后备存储区获得与标签“123”相对应的数据。在执行第一读取请求之后,处理装置可以将条目1100中的读取计数器递减为“0”。可生成用于从第一读取请求获得的数据的第一填充操作,并将该第一填充操作与从后备存储区获得的数据一起存储在填充队列214中。优先级调度器212可以将优先级指示符“1”分配给与第一读取请求相对应的第一填充操作。

处理装置可以执行第二读取请求以从后备存储区获得与标签“234”相对应的数据。在执行第二读取请求之后,处理装置可以将条目1102中的读取计数器递减为“0”。可生成用于从第二读取请求获得的数据的第二填充操作,并将该第二填充操作与从后备存储区获得的数据一起存储在填充队列214中。优先级调度器212可以将优先级指示符“3”分配给与第二读取请求相对应的第二填充操作。

优先级调度器212可以基于被分配给读取请求和填充操作的优先级指示符来确定用于执行读取请求和填充操作的调度。调度可以基于数值而按顺序进行。在一个实例中,调度执行具有优先级指示符“1”的第一填充操作、具有优先级指示符“2”的第一读取请求、具有优先级指示符“3”的第二填充操作、具有优先级指示符“4”的第二读取请求,以及具有优先级指示符“5”的第三读取请求。

处理装置可通过从填充队列214中删除数据并将数据存储到与只读高速缓存中的标签“123”相对应的高速缓存行来执行第一填充操作。处理装置可在条目1100中将填充计数器递减为“0”。优先级调度器212可获得优先级指示符“1”并将其重新用于后续读取请求和/或填充操作。处理装置可以通过将与只读未完成命令队列相关联的封锁位的值设置为指示解除封锁状态的值来对只读未完成命令队列解除封锁。处理装置可执行具有下一优先级指示符“2”的第一读取请求,同时对条目1100中的未完成命令队列解除封锁以将数据从与标签“123”相对应的高速缓存行返回到发送第一读取请求的应用程序。处理装置可以将队列计数器递减为“1”。优先级调度器212可获得优先级指示符“2”并将其重新用于后续读取请求和/或填充操作。

处理装置可搜索具有下一优先级指示符(例如,“3”)的读取请求或填充操作,并且可确定第二填充操作被分配有下一优先级指示符。因为在第三读取请求之前接收到与第二填充操作相关联的第二读取请求,所以可以为第二填充操作而非第三读取请求分配下一优先级。处理装置可以将与只读未完成命令队列相对应的封锁位设置为指示阻止第三读取请求执行的封锁状态的值。

处理装置可通过从填充队列214中删除数据并将数据存储到与只读高速缓存中的标签“234”相对应的高速缓存行来执行第二填充操作。处理装置可在条目1102中将填充计数器递减。优先级调度器212可获得优先级指示符“3”并将其重新用于后续读取请求和/或填充操作。处理装置可以通过将与只读未完成命令队列相关联的封锁位的值设置为指示解除封锁状态的值来对只读未完成命令队列解除封锁。处理装置可执行具有下一优先级指示符“4”的第二读取请求,同时对条目1100中的未完成命令队列解除封锁以将与标签“234”相对应的高速缓存行处的数据返回到发送第二读取请求的应用程序。优先级调度器212可获得优先级指示符“4”并将其重新用于后续读取请求和/或填充操作。在执行第二读取请求之后,条目1102的队列计数器可递减为“0”。

处理装置可以搜索被分配给第三读取请求的下一个优先级指示符“5”。处理装置可以将与条目1100的未完成命令队列相关联的封锁位设置为解除封锁状态。处理装置可执行第三读取请求,同时条目1100的未完成命令队列被解除封锁以将与标签“123”相对应的高速缓存行处的数据返回到发送第三请求的应用程序。优先级调度器212可获得优先级指示符“5”并将其重新用于后续读取请求和/或填充操作。在执行第三读取请求之后,条目1100的队列计数器可递减为“0”。

可以理解,可以在与不同的高速缓存行相对应的未完成命令队列之间无序地执行请求。例如,在条目1100的队列中执行具有优先级指示符“2”的第一读取请求,在条目1102的队列中执行具有优先级指示符“4”的第二读取请求,然后在条目1100的队列中执行具有优先级指示符“5”的第三读取请求。这可以提供提高服务质量的益处,因此如果所请求的数据可用,则在接收所请求的数据之前,应用程序不必等待其它请求完成执行。而且,可以基于何时接收到针对同一高速缓存行的请求来有序地执行请求。如图中描绘,在针对从与相同标签相对应的高速缓存行读取数据的第一请求之后接收第三请求,并且在第一请求之后将第三请求存储在队列中。使用先入先出未完成命令队列可以确保该请求按照它们被接收的次序进行处理。

图12示出了计算机系统1200的实例性机器,在其中可以执行用于使该机器执行本文所讨论的方法中的任何一或多种方法的指令集。在一些实施例中,计算机系统1200可以对应于主机系统(例如,图1的主机系统120),该主机系统包含、耦合到或利用存储器子系统(例如,图1的存储器子系统110)或者可以用于执行控制器的操作(例如,执行操作系统以执行与图1的高速缓存部件113相对应的操作)。在替代实施例中,该机器可以连接(例如,联网)到LAN、内联网、外联网或互联网中的其它机器。该机器可以在客户机-服务器网络环境中作为服务器或客户机、作为对等(或分布式)网络环境中的对等机器、或作为云计算基础设施或环境中的服务器或客户机来操作。

该机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、网络电器、服务器、网络路由器、交换机或网桥或能够执行指定由该机器要采取的动作的指令集(按顺序或以其它方式执行)的任何机器。进一步地,尽管说明了单个机器,但术语“机器”还应当被理解为包含单独地或联合地执行指令的集合(或多个集合)以执行本文所讨论的方法中的任何一或多者的机器的任何集合。

实例性计算机系统1200包含经由总线1230彼此通信的处理装置1202、主存储器1204(例如,只读存储器(ROM)、快闪存储器、动态随机存取存储器(DRAM),诸如同步DRAM(SDRAM)或Rambus DRAM(RDRAM)等)、静态存储器1206(例如,快闪存储器、静态随机存取存储器(SRAM)等)和数据存储系统1218。

处理装置1202表示一或多个通用处理装置,诸如微处理器、中央处理单元等。更具体地,处理装置可以是复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器,或实现其它指令集的处理器或实现指令集组合的处理器。处理装置1202还可以是一个或多个专用处理装置,诸如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器等。处理装置1202被配置为执行用于执行本文所讨论的操作和步骤的指令1226。计算机系统1200可进一步包含网络接口装置1208以通过网络1220进行通信。

数据存储系统1218可以包含机器可读存储介质1224(也被称为计算机可读介质),在该机器可读存储介质上存储了具体体现本文描述的方法或功能中的任何一或多种的一或多个指令集1226或软件。在计算机系统1200执行指令1226期间,指令也可以完全或至少部分地驻留在主存储器1204内和/或处理装置1202内,主存储器1204和处理装置1202也构成机器可读存储介质。机器可读存储介质1224、数据存储系统1218和/或主存储器1204可以对应于图1的存储器子系统110。

在一个实施例中,指令1226包含用于实施与高速缓存部件(例如,图1的高速缓存部件113)相对应的功能性的指令。尽管在实例性实施例中将机器可读存储介质1224示为单个介质,但是术语“机器可读存储介质”应被认为包含存储一或多个指令集的单个介质或多个介质。术语“机器可读存储介质”也应被认为包含能够存储或编码指令集以供机器执行并且使机器执行本公开的方法中的任何一或多种方法的任何介质。因此,术语“机器可读存储介质”应被视为包括但不限于固态存储器、光学介质和磁介质。

根据对计算机存储器内的数据位的操作的算法和符号表示来呈现前面详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用来最有效地将他们工作的实质传达给本领域的其它技术人员的方式。算法在此并且通常被认为是导致期望结果的自洽操作序列。操作是需要物理量的物理操纵的那些操作。通常,尽管不是必须的,这些量采取能够被存储、组合、比较和以其它方式操纵的电或磁信号的形式。主要出于通用的原因,将这些信号称为位、值、元素、符号、字符、项、数字等有时被证明是方便的。

然而,应当牢记,所有这些或类似术语将与适当的物理量相关联并且仅仅是应用于这些量的方便标签。本公开可以涉及计算机系统或类似的电子计算装置的动作和过程,该计算机系统或类似的电子计算装置将表示为计算机系统的寄存器和存储器内的物理(电子)量的数据操纵和转换为类似地表示为计算机系统存储器或寄存器或其它这样的信息存储系统内的物理量的其它数据。

本公开还涉及一种用于执行这里的操作的设备。这种设备可以被具体构造用于预期目的,或者它可以包含由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。此类计算机程序可以被存储在计算机可读存储介质中,该计算机可读存储介质诸如但不限于包含软盘、光盘、CD-ROM和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光学卡的任何类型的磁盘或适合于存储电子指令的任何类型的介质,所有这些都各自耦合到计算机系统总线。

这里给出的算法和显示并不固有地涉及任何特定的计算机或其它设备。各种通用系统可以与根据这里的教导的程序一起使用,或者可以证明构造更专用的设备来执行该方法是方便的。如下文描述中所阐述的,将出现用于各种这些系统的结构。此外,不参考任何特定编程语言来描述本公开。应当理解,可以使用多种编程语言来实施本文所描述的本公开的教示。

本公开可以被提供作为计算机程序产品或软件,其可以包含上面存储有指令的机器可读介质,该指令可以用于对计算机系统(或其它电子装置)进行编程以执行根据本公开的过程。机器可读介质包含用于以机器(例如,计算机)可读形式存储信息的任何机制。在一些实施例中,机器可读(例如,计算机可读)介质包含机器(例如,计算机)可读存储介质,诸如只读存储器(“ROM”)、随机存取存储器(“RAM”)、磁盘存储介质、光学存储介质、快闪存储器部件等。

在前述说明书中,已参考本公开的特定实例实施例描述了本公开的实施例。显然,在不脱离所附权利要求中阐述的本公开的实施例的较宽精神和范围的情况下,可以对其进行各种修改。因此,说明书和附图被认为是说明性的而不是限制性的。

40页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:交流支持系统、交流支持方法、交流支持程序以及图像控制程序

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类