CN113711193B - 用于存储器子系统的优先级调度 - Google Patents
用于存储器子系统的优先级调度 Download PDFInfo
- Publication number
- CN113711193B CN113711193B CN202080028488.2A CN202080028488A CN113711193B CN 113711193 B CN113711193 B CN 113711193B CN 202080028488 A CN202080028488 A CN 202080028488A CN 113711193 B CN113711193 B CN 113711193B
- Authority
- CN
- China
- Prior art keywords
- data
- read
- request
- memory
- cache
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 378
- 230000004044 response Effects 0.000 claims abstract description 26
- 238000012545 processing Methods 0.000 claims description 182
- 238000000034 method Methods 0.000 claims description 89
- 230000008569 process Effects 0.000 description 43
- 230000000903 blocking effect Effects 0.000 description 26
- 230000036316 preload Effects 0.000 description 10
- 238000007726 management method Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 5
- 230000009977 dual effect Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 239000012092 media component Substances 0.000 description 3
- 230000002123 temporal effect Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/18—Handling requests for interconnection or transfer for access to memory bus based on priority control
-
- 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
-
- 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
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/161—Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
-
- 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/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/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- 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
-
- 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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- 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/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- 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/20—Employing a main memory using a specific memory technology
- G06F2212/202—Non-volatile memory
- G06F2212/2022—Flash memory
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
可接收读取存储在存储器子系统处的数据的请求。可作出所述数据是否经存储在所述存储器子系统的高速缓存处的确定。响应于确定所述数据未经存储在所述存储器子系统的所述高速缓存处,可从所述存储器子系统的存储器组件获得所述数据。可将第一优先级指示符指派给与从所述存储器组件获得的所述数据相关联的填充操作。可将第二优先级指示符指派给读取所述数据的所述请求。可基于所述第一优先级指示符及所述第二优先级指示符来确定执行所述填充操作及读取所述数据的所述请求的时间表。
Description
技术领域
本公开的实施例大体上涉及存储器子系统,且更具体来说,涉及用以存取存储器子系统中的高速缓存数据的队列中的优先级调度。
背景技术
存储器子系统可为存储系统,例如固态驱动器(SSD)或硬盘驱动器(HDD)。存储器子系统可为存储器模块,例如双列直插式存储器模块(DIMM)、小尺寸DIMM(SO-DIMM)或非易失性双列直插式存储器模块(NVDIMM)。存储器子系统可包含存储数据的一或多个存储器组件。所述存储器组件可为例如非易失性存储器组件及易失性存储器组件。一般来说,主机系统可利用存储器子系统来将数据存储在所述存储器组件处及从所述存储器组件检索数据。
附图说明
从下文所给出的详细描述及从本公开的各种实施例的附图将更全面地理解本公开。
图1说明根据本公开的一些实施例的包含存储器子系统的实例计算环境。
图2说明根据本公开的一些实施例的存储器子系统的实例高速缓存组件及本地存储器。
图3是根据本公开的一些实施例的用于基于应用程序的经确定存储器存取工作负载来使用单独的只读高速缓存及写读高速缓存的实例方法的流程图。
图4是根据本公开的一些实施例的使用高速缓存线中的具有固定数据大小的扇区来将数据积累在高速缓存中的实例方法的流程图。
图5说明根据本公开的一些实施例的实例只读高速缓存及写读高速缓存。
图6是根据本公开的一些实施例的用于将对高速缓存中不存在的数据的读取请求存储在未处理命令队列中的实例方法的流程图。
图7是根据本公开的一些实施例的用于执行存储在未处理命令队列中的请求的实例方法的流程图。
图8说明根据本公开的一些实施例的实例只读未处理命令队列、写读未处理命令队列、只读内容可寻址存储器及只读内容可寻址存储器。
图9是根据本公开的一些实施例的用于确定在存储器子系统中执行请求的时间表的实例方法的流程图。
图10是根据本公开的一些实施例的用于确定在存储器子系统中执行请求的时间表的另一实例方法的流程图。
图11说明根据本公开的一些实施例的使用优先级调度器来基于优先级指示符确定执行请求时间表的实例。
图12是本公开的实施例可在其中操作的实例计算机系统的框图。
具体实施方式
本公开的方面涉及用以存取存储器子系统中的高速缓存数据的队列中的优先级调度。存储器子系统在后文中也被称为“存储器装置”。存储器子系统的实例是经由外围互连件(例如,输入/输出总线、存储区域网络)耦合到中央处理单元(CPU)的存储装置。存储装置的实例包含固态驱动器(SSD)、快闪存储器驱动器、通用串行总线(USB)快闪存储器驱动器及硬盘驱动器(HDD)。存储器子系统的另一实例是经由存储器总线耦合到CPU的存储器模块。存储器模块的实例包含双列直插式存储器模块(DIMM)、小尺寸DIMM(SO-DIMM)、非易失性双列直插式存储器模块(NVDIMM)等。在一些实施例中,存储器子系统可为混合存储器/存储子系统。一般来说,主机系统可利用包含一或多个存储器组件的存储器子系统。主机系统可提供待存储在存储器子系统处的数据且可请求待从存储器子系统检索的数据。
存储器子系统可包含可存储来自主机系统的数据的多个存储器组件。在一些主机系统中,在主机系统上执行的应用程序的性能可高度取决于可在存储器子系统中存取数据的速度。为了加快数据存取,常规存储器子系统使用存储器存取模式的空间及时间局部性来优化性能。这些存储器子系统可使用更高的性能及更低容量的媒体(被称为高速缓存)来存储频繁存取的数据(时间局部性)或位于最近存取的存储器区中的数据(空间局部性)。
存储器组件中的每一者可与指定由存储器组件使用的管理单元的大小及/或存取存储在管理单元处的数据的请求的优选大小的协议相关联。例如,一个存储器组件的协议可指定在所述存储器组件上执行512千字节(KB)大小的请求。在主机系统上执行的应用程序最初可请求从存储器组件读取512KB数据,但归因于用于在主机系统与存储器子系统之间进行通信的总线的协议,512KB请求通常被分解成更小粒度的请求(例如,八个64KB请求)。常规存储器子系统可执行更小粒度的请求以从存储器组件获得数据,接着可将所述数据存储在高速缓存中,及/或返回到提出请求的应用程序。在能够处置较大粒度请求的存储器组件上执行较小粒度请求可导致存储器组件的更快损耗及更低的耐久性,这是因为将在存储器组件处执行更多读取操作。
另外,在主机系统上执行的一些应用程序可使用存储器子系统作为主存储器。在此例子中,地址空间通常具有用于读取数据及写入数据的单独存储器地址区。在常规存储器子系统中,可使用能够写入及读取数据的单个高速缓存,这对于不同的存储器存取工作负载来说可能是不合意的。例如,读取及写入请求延时可能不同且当应用程序对不同地址空间进行写入及读取时使用单个高速缓存可能降低存储器子系统的性能。
不同类型的存储器存取工作负载可为循序(有序)及随机(无序)存取。例如,应用程序可请求从地址读取原始数据,将不同数据写入到地址,且从地址读取不同数据。如果未恰当地有序处置请求,那么可能存在数据冲突(data hazard),例如存储器子系统将错误数据返回到应用程序(例如,在写入不同数据之前响应于对不同数据的读取请求而返回原始数据)。
此外,在一些例子中,应用程序可请求存取不同地址处的数据。数据可位于同一或不同存储器组件处。从同一或不同存储器组件返回不同地址处的数据的延时可基于各种因素而变动,例如存储器组件的速度、所请求数据的大小等。常规存储器子系统通常等待直到首先接收的请求的地址处的数据从存储器组件返回,而不考虑另一请求的不同地址处的数据是否更快地从存储器组件返回。即,不同地址处的数据在从存储器组件返回之后可处于闲置状态,直到将首先接收的请求的地址处的数据存储在高速缓存中为止。这可能降低存储器子系统中的数据处理量。
本公开的方面通过使用存储器子系统中的单独的只读高速缓存及写读高速缓存来解决上述及其它缺陷。存储器子系统前端中的单独的只读高速缓存及写读高速缓存可为在主机系统上执行的应用程序提供不同的读取及写入空间。例如,应用程序可请求由主机操作系统转译为逻辑地址的某些虚拟地址。逻辑地址可被转译为可使用单独的只读高速缓存及写读高速缓存维持在不同的读取及写入空间中的物理地址。单独的只读及写读高速缓存可位于主机系统与存储器子系统的媒体组件(也被称为“后备存储区”)之间。只读高速缓存可用于对存储器组件中的数据的循序读取请求且写读高速缓存可用于处置对媒体组件中的数据的读取及写入请求。单独的高速缓存可通过针对每个请求比较慢后备存储区更快地读取/写入数据来改进存储器子系统的性能。此外,单独的高速缓存通过减少对后备存储区的请求的数目来改进后备存储区的耐久性。
在一些实施例中,存储器子系统可检测存储器存取工作负载,例如循序存储器存取工作负载或随机存储器存取工作负载。循序存储器存取工作负载可指一个接一个地发生的对相同或循序地址的读取请求。循序存储器存取工作负载中请求的数据可经填充在只读高速缓存中以比每次使用后备存储区更快地进行存取。
随机存储器存取工作负载可指随机发生的写入及读取。某些应用程序可使用随机存储器存取工作负载。与随机写入及读取请求相关联的数据可经填充在写读高速缓存中。例如,将被请求写入到后备存储区的数据可首先被写入到写读高速缓存,当请求读取数据时,写读高速缓存可返回经写入数据,而不必存取后备存储区。
只读高速缓存及写读高速缓存中的每一者可使用相应的内容可寻址存储器(CAM)来确定与从主机系统接收的请求相关联的数据是否存在于只读高速缓存且/或读写高速缓存中。例如,存储器子系统可使用CAM来确定包含标签的经请求数据是否经存储在只读及/或写读高速缓存中。数据请求具有指定经请求数据的位置的地址。地址可被分解成若干部分,例如识别高速缓存线内的特定位置的偏移、识别含有经请求数据的集的集及包含地址的一或多个地址位的标签,所述地址可与所述地址的用以区分可放置在集中的不同地址的数据保存在每一高速缓存线中。对应于将存储经请求数据的只读高速缓存或写读高速缓存的CAM可存储经请求数据的标签以在接收到请求时实现比搜索高速缓存本身更快的查找。
此外,如上文所论述,主机系统可通过基于由将主机系统通信地耦合到存储器子系统的存储器总线使用的协议将对数据的请求(例如,512字节)分解成64字节的小粒度请求来提供所述请求。在一些实施例中,只读高速缓存及写读高速缓存中的每一者使用扇区来将较小粒度的请求聚合成高速缓存线的较大粒度(例如,聚合八个64字节的请求以实现512字节的高速缓存线大小)。扇区可具有由主机系统使用的存储器存取协议及存储数据的后备存储区中的存储器组件的管理单元的大小指定的固定大小。例如,如果存储器组件中的管理单元的大小是512字节且协议指定使用64字节的请求,那么扇区可具有64字节的固定数据大小且高速缓存线可包含八个扇区以等于管理单元的512字节。在一些例子中,管理单元可为例如128字节,且可仅使用具有64字节的固定数据大小的两个扇区。写读高速缓存的扇区的数目可大于只读高速缓存的扇区的数目,这是因为期望对后备存储区执行较少写入以改进后备存储区的耐久性。存储器子系统可对后备存储区执行一个对512字节的请求,代替八个64字节的请求,以减少对在存储器组件中具有大管理单元的后备存储区所作的请求的数目,由此改进存储器组件的耐久性。
在一些实施例中,可在从主机系统接收存储器存取请求之前用数据预加载只读高速缓存及/或写读高速缓存。例如,可在主机系统上执行的应用程序的初始化期间预加载只读高速缓存及/或写读高速缓存。存储器协议可包含使应用程序能够将预加载指令发送到存储器子系统以用所要数据预加载只读高速缓存及/或写读高速缓存的语义。存储器子系统可生成一或多个读取请求以从后备存储区获得数据。如下文所描述,可使用未处理命令队列来按照生成请求的顺序存储请求且可执行优先级调度以确定执行请求的时间表。可生成填充操作以将从后备存储区获得的数据存储在只读高速缓存及/或写读高速缓存中的高速缓存线的一或多个扇区中。应用程序可基于应用程序在执行期间通常使用的数据或应用程序计划使用的数据来发送预加载指令。
此外,可使用未处理命令队列来存储读取请求及写入请求以防止数据冲突及提高存取存储器子系统中的数据的服务质量。未处理命令队列可基于存储器子系统中的不同类型的业务来改进请求业务处理量。例如,存储器子系统可使用控制逻辑及未处理命令队列来提供对在同一高速缓存线处请求的数据的有序存取及对在不同高速缓存线处请求的数据的无序存取。单独的未处理命令队列可用于只读高速缓存及写读高速缓存。只读未处理命令队列的每一高速缓存线可对应于只读高速缓存中的相应高速缓存线,且写读未处理命令队列的每一高速缓存线可对应于写读高速缓存中的相应高速缓存线。未处理命令队列中的每一者中的队列的数目可比只读高速缓存及写读高速缓存中的高速缓存线的数目少。
一般来说,可从主机系统接收请求。可搜索只读内容可寻址存储器(CAM)及写读CAM两者以确定与请求中包含的地址相关联的匹配标签是否存在于所述CAM中。如果找到匹配标签,那么可针对读取请求从对应高速缓存线返回数据或可针对写入请求将数据写入到所述高速缓存线。如果在任一CAM中均未找到匹配标签,那么可在只读未处理命令队列及写读未处理命令队列中搜索匹配标签。如果在所述未处理命令队列中的任一中找到匹配标签,那么存在对指派给所述标签的高速缓存线的未决请求且在队列中将经接收请求存储在对所述地址处的数据的其它请求之后。如果在所述未处理命令队列中的任一者中均未找到匹配标签,那么可选择队列作为所要的未处理命令队列且可将请求的标签指派给选定的未处理命令队列。此外,存储器子系统可设置阻塞位来阻塞选定的未处理命令队列且将请求存储在选定的未处理命令队列中。请求可按照在同一队列中收到请求的顺序进行处理。基于何时接收到请求且通过使用阻塞位来阻塞及解除阻塞指派给不同高速缓存线的不同未处理命令队列,可存在对不同高速缓存线的无序存取,如下文进一步详细描述。
在一些实施例中,为了进一步改进存储器子系统的性能及服务质量,可配合优先级队列使用优先级调度器来确定何时执行请求及填充操作的时间表。如上文所描述,未处理命令队列可对高速缓存中的数据读取请求未命中及数据写入请求未命中进行排队。优先级调度器可基于何时接收请求来确定何时执行请求的时间表。优先级调度器可生成优先级指示符(例如,具有优先级值的令牌)且将所述优先级指示符指派给请求以维持为了将从后备存储区获得的数据存储在高速缓存的高速缓存线处而生成的请求及填充操作的顺序。
例如,对于读取请求未命中,优先级调度器可针对与特定读取请求相关联的填充操作生成具有更高优先级值的优先级指示符,所述特定读取请求可在从后备存储区获得与特定读取请求相关联的数据时被指派。当请求经存储在未处理命令队列中且执行的时间表被确定时,优先级调度器可中继将存储在优先级队列中的请求。可按照请求经存储在优先级队列中的顺序处理请求以从后备存储区获得与请求相关联的数据或将与请求相关联的数据写入到后备存储区。可将从后备存储区返回的数据与被指派优先级指示符的填充操作一起存储在填充队列中。优先级指示符可指定首先执行填充队列中的填充操作且可用于通过未处理命令队列调节请求的处理。
如下文进一步描述,存在可无序执行对存储在不同高速缓存线处的数据的请求的某些例子。即,可从未处理命令队列执行读取数据的一个请求,但可阻塞同一未处理命令队列中的对同一数据的另一请求以允许执行不同未处理命令队列中的又一请求。在此类例子中,可基于指派给请求及与请求相关联的填充操作的优先级指示符来无序执行请求。可在未处理命令队列之间无序执行请求以防止应用程序必须等待从后备存储区获得的数据。此技术可改进将数据返回到主机系统的服务质量,由此改进存储器子系统的性能。
本公开的优点包含但不限于通过使用扇区化高速缓存线来积累请求使得可减少在存储器组件上执行的请求的数目来改进存储器组件的耐久性。而且,使用单独的只读及写读高速缓存可为在主机系统上执行的应用程序提供用于读取数据及写入数据的单独空间。单独空间可通过检测由应用程序使用的存储器存取工作负载的类型及选择适当高速缓存来完成针对应用程序的存储器存取来改进存取应用程序的数据的性能。另外,通过使用未处理命令队列及优先级调度器来确定执行请求的时间表,可改进存储器子系统的服务质量及性能。
图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快速(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可包含存储存储器指针、提取数据等的存储器寄存器。本地存储器119还可包含用于存储微代码的只读存储器(ROM)。虽然图1中的实例存储器子系统110已被说明为包含控制器115,但在本公开的另一实施例中,存储器子系统110可不包含控制器115,且可代替地依赖于外部控制(例如,由外部主机,或由与存储器子系统分开的处理器或控制器提供)。
一般来说,控制器115可从主机系统120接收命令或操作且可将命令或操作转换成指令或适当命令以实现对存储器组件112A到112N的所要存取。控制器115可负责其它操作,例如损耗均衡操作、废弃项目收集操作、错误检测及错误校正码(ECC)操作、加密操作、高速缓存操作及与存储器组件112A到112N相关联的在逻辑块地址与物理块地址之间的地址转译。控制器115可进一步包含用于经由物理主机接口与主机系统120进行通信的主机接口电路系统。主机接口电路系统可将从主机系统接收的命令转换成命令指令以存取存储器组件112A到112N并且将与存储器组件112A到112N相关联的响应转换成主机系统120的信息。
存储器子系统110还可包含未说明的额外电路系统或组件。在一些实施例中,存储器子系统110可包含高速缓存或缓冲器(例如,DRAM)及可从控制器115接收地址且对地址进行解码以存取存储器组件112A到112N的地址电路系统(例如,行解码器及列解码器)。
存储器子系统110包含可使用存储器子系统中的单独的只读高速缓存及写读高速缓存的高速缓存组件113。在一些实施例中,控制器115包含高速缓存组件113的至少一部分。例如,控制器115可包含经配置以执行存储在本地存储器119中的指令以执行本文中所描述的操作的处理器117(处理装置)。在一些实施例中,高速缓存组件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而非后备存储区中以供执行。未决队列222可存储当不存在可用的只读未处理命令队列208或写读未处理命令队列210可用时针对高速缓存200及202中未找到的数据接收的请求。
本地存储器119中包含的只读高速缓存200及写读高速缓存202可提供对存储在后备存储区的较慢存储器组件中的数据的较快存取。只读高速缓存200及写读高速缓存202可为存储由主机系统120的应用程序频繁存取的数据(时间局部性)或位于最近存取的存储器区中的数据(空间局部性)的高性能、低容量媒体。使用存储器子系统作为地址空间的二进制或分页软件系统的应用可具有用于通过使用只读高速缓存200及写读高速缓存202来读取数据及写入数据的单独的存储器地址区。在只读高速缓存200及写读高速缓存202的每一者中可存在众多高速缓存线。每一高速缓存线可包含具有固定大小的一或多个扇区,如下文进一步论述。
对于读取请求,高速缓存组件113搜索只读CAM 204及写读CAM 206以确定是否找到匹配标签。找到匹配标签指示数据经存储在只读高速缓存200或写读高速缓存202的高速缓存线处,这取决于在哪个CAM 204或206处找到匹配标签。如果存在命中(这意指在CAM204或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中的选定高速缓存线。可针对高速缓存线设置写读CAM 206中的脏位以指示将数据写入到那个高速缓存线。将数据写入到高速缓存可比将数据写入到较慢后备存储区更快地执行。后续写入请求可将数据写入到同一或不同高速缓存线且可针对在其处执行后续写入请求的高速缓存线在写读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中的数据的有效位是否被设置为有效状态。响应于确定数据经存储在存储器子系统的高速缓存处,处理装置可将请求存储在用于管理对存在于高速缓存中的数据的请求的执行的另一队列(例如,命中队列)处。
在操作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)可在额外请求经存储在队列中时递增且在执行请求并从队列移除所述请求时递减。请求队列可具有任何合适数目个条目。在一个实例中,队列中的条目的数目等于只读高速缓存的高速缓存线中的扇区的数目。当请求经存储在队列中时,可存在针对请求设置的阻塞位。
读取计数器(R)可跟踪为了从后备存储区获得经请求数据而执行的读取操作的次数。读取计数器可在所述次数的读取操作被确定为从后备存储区检索数据时递增且可在后备存储区上执行读取操作以获得数据时递减。读取计数器的有效位可指示与读取相关联的数据是有效的还是无效的。填充计数器(F)可跟踪为了将经请求数据存储在对应于存储请求的队列的高速缓存线中而执行的填充操作的次数。填充计数器可在生成填充操作时递增且在执行填充操作时递减。填充计数器的有效位可指示与填充操作相关联的数据是有效的还是无效的。
写读未处理命令队列210可包含多个条目且每一条目可包含标签、队列计数器、请求队列、逐出计数器(E)及有效位以及回写计数器(WB)及有效位的字段。标签字段存储从自主机系统接收的请求获得的标签。队列计数器可跟踪存储在队列中的条目中的请求的数目。队列计数器可在额外请求经存储在队列中时递增且可在执行请求并从队列移除请求时递减。请求队列可具有任何合适数目个条目。在一个实例中,队列中的条目的数目等于写读高速缓存的高速缓存线中的扇区的数目。当请求经存储在队列中时,可存在针对请求设置的阻塞位。
逐出计数器可跟踪为了从写读高速缓存移除数据而执行的逐出操作的数目。逐出计数器可在选择逐出高速缓存线的数据时递增且在从高速缓存逐出高速缓存线中的数据时递减。逐出计数器的有效位可指示与逐出相关联的数据是有效的还是无效的。回写计数器可跟踪为了将对应于队列的高速缓存线中的数据写入到后备存储区而执行的写入操作的次数。回写计数器可在写入请求经存储在队列中时递增且在执行写入请求时递减。回写计数器的有效位可指示与写入操作相关联的数据是有效的还是无效的。
只读CAM 204可包含多个条目且每一条目可包含标签、每一扇区的有效位、每一扇区的脏位及地址的字段。标签字段存储从请求获得的标签。当对应于条目的高速缓存线的扇区存储有效数据时,可设置每一扇区的有效位。当数据经存储在扇区处时,可设置每一扇区的脏位。地址字段可存储请求中包含的地址。
写读CAM 206可包含多个条目且每一条目可包含标签、每一扇区的有效位、每一扇区的脏位及地址的字段。标签字段存储从请求获得的标签。当对应于条目的高速缓存线的扇区存储有效数据时,可设置每一扇区的有效位。当数据经存储在扇区处时,可设置每一扇区的脏位。地址字段可存储请求中包含的地址。
当接收存取(例如,读取或写入)数据的请求时,可从请求中包含的数据的地址获得标签。处理装置可在只读未处理命令队列208、写读未处理命令队列210、只读CAM 204及写读CAM 206中搜索匹配标签。如果只读CAM 204或写读CAM 206包含匹配标签,那么存在高速缓存命中且所述请求可经存储在命中队列中以待执行。例如,对于读取请求高速缓存命中,可将存储在对应于具有匹配标签的CAM 204或206中的条目的高速缓存线处的数据返回到提出请求的应用程序。对于写入请求高速缓存命中,可将请求中的数据写入到对应于具有匹配标签的写读CAM 206中的条目的高速缓存线。当写入开始时,可设置数据所写入到的扇区的写读CAM 206中的脏位。当将数据写入到扇区时,可设置扇区的写读CAM 206中的有效位。
如果在只读CAM 204或写读CAM 206中未找到匹配标签但在只读未处理命令队列208中找到匹配标签,那么可将请求存储在对应于匹配标签的只读未处理命令队列中的空条目中。当请求经存储在只读未处理命令队列中时,队列计数器可递增,读取计数器及填充计数器可递增。
如果在只读CAM 204或写读CAM 206中未找到匹配标签但在写读未处理命令队列210中找到匹配标签,那么可将请求存储在对应于匹配标签的写读未处理命令队列中的空条目中。当请求经存储在写读未处理命令队列中时,队列计数器可递增且回写计数器可递增。
如果在只读CAM 204、写读CAM 206、只读未处理命令队列208或写读未处理命令队列210中的任一者中未找到匹配标签,那么基于由应用程序使用的存储器存取工作负载来从只读未处理命令队列208或写读未处理命令队列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可在条目1100的请求字段中将优先级指示符“2”指派给未处理命令队列中的第一读取请求。处理装置还可使读取计数器递增为“1”且使填充计数器递增为“1”,如所描绘。
处理装置可接收包含标签“234”的第二读取请求且可在只读未处理命令队列208中搜索匹配标签。处理装置在只读未处理命令队列208未找到匹配标签且选择条目1102中来存储第二读取请求。处理装置可将条目1102的请求字段中与只读未处理命令队列相关联的阻塞位设置为指示只读未处理命令队列被阻塞的值(例如,在被阻塞时无法执行只读未处理命令队列中的请求)。处理装置将标签“234”指派给条目1102中的标签字段。优先级调度器212可确定将针对从后备存储区返回的与第二读取请求相关联的数据生成填充操作。优先级调度器212可针对第二读取请求(“4”)及填充操作(“3”)生成优先级指示符。优先级调度器212可在条目1102的请求字段中将优先级指示符(“4”)指派给的未处理命令队列中的第二读取请求。
处理装置可接收包含标签“123”的第三读取请求且可在只读未处理命令队列208中搜索匹配标签。处理装置在条目1100中找到匹配标签“123”。因而,处理装置可将只读未处理命令队列中的第三读取请求存储在条目1100的请求字段中。处理装置可使队列计数器递增为“2”,如所描绘。优先级调度器212可确定已将针对与具有标签“123”的第二读取请求相关联的数据生成填充操作,因此不需要生成另一填充操作及对其指派优先级指示符。优先级调度器212可仅针对第三读取请求(“5”)生成优先级指示符且可在条目1100的请求字段中将优先级指示符“5”指派给未处理命令队列中的第三读取请求。
优先级调度器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内执行用于致使所述机器执行本文中所论述的方法中的任何一或多者的一组指令。在一些实施例中,计算机系统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可包含其上存储有体现本文中所描述的方法或功能中的任何一或多者的一或多组指令1226或软件的机器可读存储媒体1224(也被称为计算机可读媒体)。指令1226在由计算机系统1200执行期间也可全部或至少部分地驻留在主存储器1204内及/或处理装置1202内,主存储器1204及处理装置1202也构成机器可读存储媒体。机器可读存储媒体1224、数据存储系统1218及/或主存储器1204可对应于图1的存储器子系统110。
在一个实施例中,指令1226包含用于实施对应于高速缓存组件(例如,图1的高速缓存组件113)的功能性的指令。虽然机器可读存储媒体1224在实例实施例中被展示为单个媒体,但术语“机器可读存储媒体”应被理解为包含存储一或多组指令的单个媒体或多个媒体。术语“机器可读存储媒体”也应被理解为包含能够存储或编码一组指令以供机器执行且致使机器执行本发明的方法中的任何一或多者的任何媒体。因此,术语“机器可读存储媒体”应被理解为包含但不限于固态存储器、光学媒体及磁性媒体。
已根据对计算机存储器内的数据位的操作的算法及符号表示来呈现前述详细描述的一些部分。这些算法描述及表示是被数据处理领域的技术人员用于最有效地向所属领域的其它技术人员传达他们的工作实质的方式。算法在本文中被认为且通常被认为是导向所要结果的自洽操作序列。所述操作是需要对物理量进行物理操纵的操作。通常,尽管并非必需的,但这些量采取能够被存储、组合、比较及以其它方式操纵的电信号或磁性信号的形式。已证明,有时主要出于通用的原因将这些信号称为位、值、元素、符号、字符、项、数字等是方便的。
然而,应记住,所有这些及类似术语应与适当物理量相关联且仅仅是应用于这些量的方便标签。本发明可涉及计算机系统或类似电子计算装置的动作及过程,所述计算机系统或类似电子计算装置将表示为计算机系统的寄存器及存储器内的物理(电子)量的数据操纵及变换成类似地表示为计算机系统存储器或寄存器或其它此类信息存储系统内的物理量的其它数据。
本发明还涉及用于执行本文中的操作的设备。这个设备可经专门构造用于预期目的,或其可包含由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。此计算机程序可经存储在计算机可读存储媒体中,例如但不限于任何类型的磁盘,包含软盘、光盘、CD-ROM及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光卡、或适于存储电子指令的任何类型的媒体,其各自经耦合到计算机系统总线。
本文中所提出的算法及显示并非固有地与任何特定计算机或其它设备相关。各种通用系统可与根据本文中的教示的程序一起使用,或可证明构造更专用设备来执行所述方法是方便的。各种这些系统的结构将如在以下描述中所阐述那样出现。另外,未参考任何特定编程语言来描述本发明。将明白,可使用多种编程语言来实施如本文中所描述的本发明的教示。
本发明可被提供为计算机程序产品或软件,所述计算机程序产品或软件可包含其上存储有指令的机器可读媒体,所述指令可用于对计算机系统(或其它电子装置)进行编程以执行根据本发明的过程。机器可读媒体包含用于以机器(例如,计算机)可读的形式存储信息的任何机构。在一些实施例中,机器可读(例如,计算机可读)媒体包含机器(例如,计算机)可读存储媒体,例如只读存储器(“ROM”)、随机存取存储器(“RAM”)、磁盘存储媒体、光学存储媒体、快闪存储器组件等。
在前述说明书中,本发明的实施例已参考其特定实例实施例进行描述。将显而易见的是,在不脱离如所附权利要求书中所阐述的本发明的实施例的更广泛精神及范围的情况下,可对本发明进行各种修改。因此,说明书及附图应被认为是说明性而非限制性的。
Claims (19)
1.一种用于操作存储器的方法,所述方法包括:
接收读取存储在存储器子系统处的数据的请求;
确定所述数据是否经存储在所述存储器子系统的高速缓存处;
响应于确定所述数据未经存储在所述存储器子系统的所述高速缓存处,从所述存储器子系统的存储器组件获得所述数据;
将第一优先级指示符指派给与从所述存储器组件获得的所述数据相关联的填充操作;
将所述填充操作及从所述存储器组件获得的所述数据存储在填充队列中;
将第二优先级指示符指派给读取所述数据的所述请求;及
通过处理装置,基于所述第一优先级指示符及所述第二优先级指示符来确定执行来自所述填充队列的所述填充操作及读取所述数据的所述请求的时间表。
2.根据权利要求1所述的方法,其进一步包括将所述请求存储在对应于与所述数据相关联的地址的队列中。
3.根据权利要求2所述的方法,其进一步包括:
接收读取存储在所述存储器子系统处的所述数据的第二请求;
确定是否将与读取所述数据的所述第二请求相关联的标识符指派给所述队列;
响应于确定将与读取所述数据的所述第二请求相关联的所述标识符指派给所述队列:
将第三优先级指示符指派给所述第二请求;及
将所述第二请求存储在所述队列中。
4.根据权利要求3所述的方法,其进一步包括:
接收将其它数据写入到与所述存储器子系统处的所述数据相关联的所述地址的第三请求;
确定是否将与写入其它数据的所述第三请求相关联的另一标识符指派给所述队列;
响应于确定将与写入其它数据的所述第三请求相关联的所述标识符指派给所述队列:
将第四优先级指示符指派给所述第三请求;及
将所述第三请求存储在所述队列中。
5.根据权利要求4所述的方法,其进一步包括基于所述第一优先级指示符、所述第二优先级指示符、所述第三优先级指示符及所述第四优先级指示符来确定执行所述填充操作、读取所述数据的所述请求、读取所述数据的所述第二请求及写入所述其它数据的所述第三请求的时间表,其中所述时间表反映接收所述请求、所述第二请求及所述第三请求的顺序。
6.根据权利要求1所述的方法,其进一步包括:
接收读取存储在所述存储器子系统处的其它数据的第二请求;
确定所述其它数据是否经存储在所述存储器子系统的所述高速缓存处;
响应于确定所述其它数据未经存储在所述存储器子系统的所述高速缓存处,从所述存储器子系统的所述存储器组件获得所述其它数据;
将第三优先级指示符指派给与从所述存储器组件获得的所述其它数据相关联的第二填充操作;
将第四优先级指示符指派给读取所述其它数据的所述第二请求;及
至少基于所述第一优先级指示符、所述第二优先级指示符、所述第三优先级指示符及所述第四优先级指示符来确定执行所述填充操作、读取所述数据的所述请求、所述第二填充操作及读取所述其它数据的所述第二请求的时间表。
7.根据权利要求6所述的方法,其进一步包括基于经确定的所述时间表,以与接收读取所述数据的所述请求及读取所述其它数据的所述第二请求的顺序不同的顺序执行读取所述数据的所述请求及读取所述其它数据的所述第二请求。
8.根据权利要求1所述的方法,其进一步包括将所述数据存储在所述高速缓存中且基于经确定的所述时间表来执行读取所述数据的所述请求以将存储在所述高速缓存中的所述数据提供给主机系统。
9.根据权利要求1所述的方法,其进一步包括响应于执行所述填充操作及读取所述数据的所述请求,将所述第一优先级指示符及所述第二优先级指示符重新指派给与其它数据相关联的第二填充操作及读取所述其它数据的第二请求。
10.一种存储器系统,其包括:
存储器装置;
处理装置,其可操作地与所述存储器装置耦合以:
接收读取存储在所述存储器系统处的数据的请求;
确定所述数据是否经存储在所述存储器系统的高速缓存处;
响应于确定所述数据未经存储在所述存储器系统的所述高速缓存处,从所述存储器装置获得所述数据;
将第一优先级指示符指派给与从所述存储器装置获得的所述数据相关联的填充操作;
将所述填充操作及从所述存储器装置获得的所述数据存储在填充队列中;
将第二优先级指示符指派给读取所述数据的所述请求;及
基于所述第一优先级指示符及所述第二优先级指示符来确定执行来自所述填充队列的所述填充操作及读取所述数据的所述请求的时间表。
11.根据权利要求10所述的存储器系统,其中所述处理装置进一步:
接收读取存储在所述存储器系统处的所述数据的第二请求;
确定是否将与读取所述数据的所述第二请求相关联的标识符指派给队列;
响应于确定将与读取所述数据的所述第二请求相关联的所述标识符指派给所述队列:
将第三优先级指示符指派给所述第二请求;及
将所述第二请求存储在所述队列中。
12.根据权利要求11所述的存储器系统,其中所述处理装置进一步:
接收将其它数据写入到与所述存储器系统处的所述数据相关联的地址的第三请求;
确定是否将与写入其它数据的所述第三请求相关联的标识符指派给所述队列;
响应于确定将与写入其它数据的所述第三请求相关联的所述标识符指派给所述队列:
将第四优先级指示符指派给所述第三请求;及
将所述第三请求存储在所述队列中。
13.根据权利要求12所述的存储器系统,其中所述处理装置进一步基于所述第一优先级指示符、所述第二优先级指示符、所述第三优先级指示符及所述第四优先级指示符来确定执行所述填充操作、读取所述数据的所述请求、读取所述数据的所述第二请求及写入所述其它数据的所述第三请求的时间表,其中所述时间表反映接收所述请求、所述第二请求及所述第三请求的顺序。
14.根据权利要求10所述的存储器系统,其中所述处理装置进一步:
接收读取存储在所述存储器系统处的其它数据的第二请求;
确定所述其它数据是否经存储在所述存储器系统的所述高速缓存处;
响应于确定所述其它数据未经存储在所述系统的所述高速缓存处,从所述存储器装置获得所述其它数据;
将第三优先级指示符指派给与从所述存储器装置获得的所述其它数据相关联的第二填充操作;
将第四优先级指示符指派给读取所述其它数据的所述第二请求;及
至少基于所述第一优先级指示符、所述第二优先级指示符、所述第三优先级指示符及所述第四优先级指示符来确定执行所述填充操作、读取所述数据的所述请求、所述第二填充操作及读取所述其它数据的所述第二请求的时间表。
15.根据权利要求14所述的存储器系统,其中所述处理装置进一步基于经确定的所述时间表,以与接收读取所述数据的所述请求及读取所述其它数据的所述第二请求的顺序不同的顺序执行读取所述数据的所述请求及读取所述其它数据的所述第二请求。
16.一种用于操作存储器的方法,所述方法包括:
接收存取存储在存储器子系统处的数据的多个请求;
将多个优先级指示符指派给所述多个请求以及指派给与所述数据相关联的一或多个填充操作;
通过处理装置,基于指派给存取所述数据的所述多个请求的所述多个优先级指示符来确定执行所述多个请求以及所述一或多个填充操作的顺序;及
响应于从所述存储器子系统的一或多个存储器组件获得所述数据,将所述一或多个填充操作及所述数据存储在填充队列中,并且基于经确定的所述顺序来执行所述多个请求以及所述一或多个填充操作。
17.根据权利要求16所述的方法,其进一步包括:
接收存取存储在所述存储器子系统处的其它数据的多个第二请求;
将多个第二优先级指示符指派给所述多个第二请求指派,其中当在从所述一或多个存储器组件获得所述数据之前从所述一或多个存储器组件获得所述其它数据时,
所述多个第二优先级指示符具有比所述多个优先级指示符高的优先级值;及
基于所述多个优先级指示符及所述多个第二优先级指示符来确定执行所述多个请求及所述多个第二请求的所述顺序。
18.根据权利要求16所述的方法,其中从所述存储器子系统的所述一或多个存储器组件获得所述数据包括:
基于所述顺序来将从所述存储器组件读取所述数据的所述一或多个请求存储在优先级队列中;
执行存储在所述优先级队列中的所述一或多个请求以从所述一或多个存储器组件读取所述数据;及
执行所述一或多个填充操作以从所述填充队列移除所述数据且将所述数据存储在所述存储器子系统的高速缓存的高速缓存线中。
19.根据权利要求18所述的方法,其中基于所述存储器子系统的所述高速缓存中存储所述数据的所述高速缓存线的大小来确定读取所述数据所需的所述一或多个请求的数目。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/289,478 US11106609B2 (en) | 2019-02-28 | 2019-02-28 | Priority scheduling in queues to access cache data in a memory sub-system |
US16/289,478 | 2019-02-28 | ||
PCT/US2020/020289 WO2020176828A1 (en) | 2019-02-28 | 2020-02-28 | Priority scheduling in queues to access cache data in a memory sub-system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113711193A CN113711193A (zh) | 2021-11-26 |
CN113711193B true CN113711193B (zh) | 2024-06-04 |
Family
ID=72236134
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080028488.2A Active CN113711193B (zh) | 2019-02-28 | 2020-02-28 | 用于存储器子系统的优先级调度 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11106609B2 (zh) |
CN (1) | CN113711193B (zh) |
WO (1) | WO2020176828A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10083035B2 (en) * | 2013-07-15 | 2018-09-25 | Texas Instruments Incorporated | Dual data streams sharing dual level two cache access ports to maximize bandwidth utilization |
US20200348845A1 (en) * | 2019-05-01 | 2020-11-05 | EMC IP Holding Company LLC | Asynchronous and synchronous transmit priority mechanism |
US11467988B1 (en) | 2021-04-14 | 2022-10-11 | Apple Inc. | Memory fetch granule |
US11880299B2 (en) * | 2022-03-03 | 2024-01-23 | International Business Machines Corporation | Calendar based flash command scheduler for dynamic quality of service scheduling and bandwidth allocations |
CN117472802B (zh) * | 2023-12-28 | 2024-03-29 | 北京微核芯科技有限公司 | 高速缓存访问方法、处理器、电子设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107102955A (zh) * | 2016-02-19 | 2017-08-29 | 希捷科技有限公司 | 用于存储子系统的关联和原子回写高速缓冲存储系统和方法 |
Family Cites Families (53)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5687282A (en) | 1979-12-14 | 1981-07-15 | Nec Corp | Data processor |
US5671444A (en) | 1994-02-28 | 1997-09-23 | Intel Corporaiton | Methods and apparatus for caching data in a non-blocking manner using a plurality of fill buffers |
US5502833A (en) | 1994-03-30 | 1996-03-26 | International Business Machines Corporation | System and method for management of a predictive split cache for supporting FIFO queues |
WO1997004392A1 (en) | 1995-07-19 | 1997-02-06 | International Business Machines Corporation | Shared cache memory device |
US6378047B1 (en) | 1997-07-07 | 2002-04-23 | Micron Technology, Inc. | System and method for invalidating set-associative cache memory with simultaneous set validity determination |
US6157988A (en) | 1997-08-01 | 2000-12-05 | Micron Technology, Inc. | Method and apparatus for high performance branching in pipelined microsystems |
US6145054A (en) | 1998-01-21 | 2000-11-07 | Sun Microsystems, Inc. | Apparatus and method for handling multiple mergeable misses in a non-blocking cache |
US6499090B1 (en) * | 1999-12-28 | 2002-12-24 | Intel Corporation | Prioritized bus request scheduling mechanism for processing devices |
US6732236B2 (en) * | 2000-12-18 | 2004-05-04 | Redback Networks Inc. | Cache retry request queue |
US6985999B2 (en) * | 2001-10-23 | 2006-01-10 | Ip-First, Llc | Microprocessor and method for utilizing disparity between bus clock and core clock frequencies to prioritize cache line fill bus access requests |
US7032076B2 (en) | 2002-09-16 | 2006-04-18 | Intel Corporation | Prefetching data in a computer system |
US7197605B2 (en) | 2002-12-30 | 2007-03-27 | Intel Corporation | Allocating cache lines |
US7058764B2 (en) | 2003-04-14 | 2006-06-06 | Hewlett-Packard Development Company, L.P. | Method of adaptive cache partitioning to increase host I/O performance |
US7493450B2 (en) | 2003-04-14 | 2009-02-17 | Hewlett-Packard Development Company, L.P. | Method of triggering read cache pre-fetch to increase host read throughput |
US7552277B2 (en) | 2003-08-20 | 2009-06-23 | International Business Machines Corporation | Distributed buffer integrated cache memory organization and method for reducing energy consumption thereof |
US8356126B2 (en) | 2005-02-07 | 2013-01-15 | Dot Hill Systems Corporation | Command-coalescing RAID controller |
US7277992B2 (en) | 2005-03-22 | 2007-10-02 | Intel Corporation | Cache eviction technique for reducing cache eviction traffic |
US20070067572A1 (en) | 2005-09-19 | 2007-03-22 | Via Technologies, Inc. | Buffering missed requests in processor caches |
US7664918B2 (en) | 2006-07-24 | 2010-02-16 | Sun Microsystems, Inc. | Handling fetch requests that return out-of-order at an instruction fetch unit |
US8429351B1 (en) | 2008-03-28 | 2013-04-23 | Emc Corporation | Techniques for determining an amount of data to prefetch |
US8103834B2 (en) | 2008-10-29 | 2012-01-24 | Oracle America, Inc. | Coherence protocol with dynamic privatization |
JP4766498B2 (ja) | 2008-12-24 | 2011-09-07 | 株式会社ソニー・コンピュータエンタテインメント | ユーザレベルdmaとメモリアクセス管理を提供する方法と装置 |
US8392693B2 (en) * | 2009-08-28 | 2013-03-05 | Via Technologies, Inc. | Fast REP STOS using grabline operations |
KR101635395B1 (ko) | 2010-03-10 | 2016-07-01 | 삼성전자주식회사 | 멀티포트 데이터 캐시 장치 및 멀티포트 데이터 캐시 장치의 제어 방법 |
US9164886B1 (en) | 2010-09-21 | 2015-10-20 | Western Digital Technologies, Inc. | System and method for multistage processing in a memory storage subsystem |
US8904115B2 (en) * | 2010-09-28 | 2014-12-02 | Texas Instruments Incorporated | Cache with multiple access pipelines |
WO2012106362A2 (en) | 2011-01-31 | 2012-08-09 | Fusion-Io, Inc. | Apparatus, system, and method for managing eviction of data |
WO2012170025A1 (en) * | 2011-06-09 | 2012-12-13 | Hewlett-Packard Development Company, L.P. | Regulating power consumption of a mass storage system |
US8935478B2 (en) | 2011-11-01 | 2015-01-13 | International Business Machines Corporation | Variable cache line size management |
US8935476B2 (en) | 2012-01-17 | 2015-01-13 | International Business Machines Corporation | Managing caching of extents of tracks in a first cache, second cache and storage |
KR101384642B1 (ko) | 2012-06-22 | 2014-04-22 | 이화여자대학교 산학협력단 | N―말단이 제거된 유비퀴틴 c―말단 가수분해효소―l1(nt―uch―l1)를 유효성분으로 포함하는 파킨슨병 예방 및 치료용 약학적 조성물 |
US9218289B2 (en) | 2012-08-06 | 2015-12-22 | Qualcomm Incorporated | Multi-core compute cache coherency with a release consistency memory ordering model |
US9639466B2 (en) * | 2012-10-30 | 2017-05-02 | Nvidia Corporation | Control mechanism for fine-tuned cache to backing-store synchronization |
US9378148B2 (en) | 2013-03-15 | 2016-06-28 | Intel Corporation | Adaptive hierarchical cache policy in a microprocessor |
US9110809B2 (en) | 2013-07-03 | 2015-08-18 | Nvidia Corporation | Reducing memory traffic in DRAM ECC mode |
US9176879B2 (en) | 2013-07-19 | 2015-11-03 | Apple Inc. | Least recently used mechanism for cache line eviction from a cache memory |
US9535627B2 (en) * | 2013-10-02 | 2017-01-03 | Advanced Micro Devices, Inc. | Latency-aware memory control |
US9274970B2 (en) | 2013-12-31 | 2016-03-01 | Samsung Electronics Co., Ltd. | Method and apparatus for handling processor read-after-write hazards with cache misses |
US9348517B2 (en) | 2014-08-28 | 2016-05-24 | International Business Machines Corporation | Using a migration threshold and a candidate list for cache management of sequential write storage |
WO2017077502A1 (en) | 2015-11-04 | 2017-05-11 | Green Cache AB | Systems and methods for implementing coherent memory in a multiprocessor system |
US10387329B2 (en) * | 2016-02-10 | 2019-08-20 | Google Llc | Profiling cache replacement |
US20170235681A1 (en) | 2016-02-12 | 2017-08-17 | Kabushiki Kaisha Toshiba | Memory system and control method of the same |
KR20170138765A (ko) | 2016-06-08 | 2017-12-18 | 삼성전자주식회사 | 메모리 장치, 메모리 모듈 및 메모리 장치의 동작 방법 |
US10379855B2 (en) | 2016-09-30 | 2019-08-13 | Intel Corporation | Processors, methods, systems, and instructions to load multiple data elements to destination storage locations other than packed data registers |
CN106528450B (zh) | 2016-10-27 | 2019-09-17 | 上海兆芯集成电路有限公司 | 数据预先提取方法及使用此方法的装置 |
US10901909B2 (en) | 2017-04-17 | 2021-01-26 | Intel Corporation | Optimizing read only memory surface accesses |
CN109213696B (zh) | 2017-06-30 | 2023-06-06 | 伊姆西Ip控股有限责任公司 | 用于缓存管理的方法和设备 |
US10963567B2 (en) | 2017-10-12 | 2021-03-30 | Microsoft Technology Licensing, Llc | Speculative side-channel attack mitigations |
US10621103B2 (en) | 2017-12-05 | 2020-04-14 | Arm Limited | Apparatus and method for handling write operations |
US20190332384A1 (en) | 2018-04-30 | 2019-10-31 | Hewlett Packard Enterprise Development Lp | Processor architecture with speculative bits to prevent cache vulnerability |
US11169805B2 (en) | 2018-04-30 | 2021-11-09 | Hewlett Packard Enterprise Development Lp | Dynamic processor cache to avoid speculative vulnerability |
US11288199B2 (en) | 2019-02-28 | 2022-03-29 | Micron Technology, Inc. | Separate read-only cache and write-read cache in a memory sub-system |
US11487616B2 (en) | 2019-05-24 | 2022-11-01 | Texas Instruments Incorporated | Write control for read-modify-write operations in cache memory |
-
2019
- 2019-02-28 US US16/289,478 patent/US11106609B2/en active Active
-
2020
- 2020-02-28 WO PCT/US2020/020289 patent/WO2020176828A1/en active Application Filing
- 2020-02-28 CN CN202080028488.2A patent/CN113711193B/zh active Active
-
2021
- 2021-07-27 US US17/443,735 patent/US12007917B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107102955A (zh) * | 2016-02-19 | 2017-08-29 | 希捷科技有限公司 | 用于存储子系统的关联和原子回写高速缓冲存储系统和方法 |
Non-Patent Citations (1)
Title |
---|
基于FPGA的RISC CPU设计;龙惠民;吴静;;兵工自动化(第12期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
US20210357341A1 (en) | 2021-11-18 |
US12007917B2 (en) | 2024-06-11 |
US20200278941A1 (en) | 2020-09-03 |
US11106609B2 (en) | 2021-08-31 |
CN113711193A (zh) | 2021-11-26 |
WO2020176828A1 (en) | 2020-09-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113508368B (zh) | 存储器子系统及其操作方法 | |
CN113711193B (zh) | 用于存储器子系统的优先级调度 | |
US11914520B2 (en) | Separate read-only cache and write-read cache in a memory sub-system | |
JP7375215B2 (ja) | 順次的にプログラムするメモリサブシステムにおける順次読み出し最適化 | |
CN113614702B (zh) | 基于检测到的读取命令活跃流的自适应预读高速缓存管理器 | |
CN111352866A (zh) | 用于管理存储器突发存取的方法和系统 | |
US11461256B2 (en) | Quality of service levels for a direct memory access engine in a memory sub-system | |
US11455242B2 (en) | Scrubber driven wear leveling in out of place media translation | |
KR20220062399A (ko) | 하이브리드 dimm에서 비순차적 처리를 위한 데이터 의존도 관리 | |
CN115993930A (zh) | 用于有序访问块修改存储器中的数据的系统、方法和装置 | |
US20210405913A1 (en) | Host access tracking in a memory sub-system | |
CN113448511B (zh) | 通过链接阵列依序预提取 | |
US11494306B2 (en) | Managing data dependencies in a transfer pipeline of a hybrid dimm | |
CN112805692A (zh) | 混合式双列直插式存储器模块中的高速缓存操作 | |
US10691595B2 (en) | Cache in a non-volatile memory subsystem |
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 |