CN108694132B - 计算每一中央处理单元预取的逻辑块号的最佳数目 - Google Patents
计算每一中央处理单元预取的逻辑块号的最佳数目 Download PDFInfo
- Publication number
- CN108694132B CN108694132B CN201711399885.7A CN201711399885A CN108694132B CN 108694132 B CN108694132 B CN 108694132B CN 201711399885 A CN201711399885 A CN 201711399885A CN 108694132 B CN108694132 B CN 108694132B
- Authority
- CN
- China
- Prior art keywords
- data
- cpu
- cache
- lbn
- lba
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/602—Details relating to cache prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6026—Prefetching based on access pattern detection, e.g. stride based prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本公开一般涉及在主机装置请求数据之前从一个或多个CPU预取数据。预取的数据从存储器预取并被存储在高速缓存中。如果主机装置请求还没有在高速缓存中的数据,则进行关于是否调度数据以写入高速缓存中的判断。如果数据不在高速缓存中并且没有被调度以写入高速缓存中,则数据从存储器恢复并传递到主机装置。如果数据被调度以写入高速缓存中、或者当前正被写入高速缓存中,则恢复数据的请求被延迟或调度,从而一旦数据在高速缓存中就恢复数据。如果数据已经在高速缓存中,则将数据传递到主机装置。
Description
技术领域
本公开的实施例一般涉及在从主机装置接收对于数据的请求之前、用于在高速缓存存储器中预取(prefetching)数据的方法和设备。
背景技术
在多处理器硬盘驱动器或SSD环境中,使用多个处理器以在存储器中同时预取主机预期将来读取所需的数据。为了这样做,“主”处理器可以分配哪些处理器将预取期望范围,使得多个处理器不会正从盘或NAND读取相同数据,如果允许的话,这将导致不可解决的冲突。作为选择,可以利用固件代码中的不同范围对不同处理器进行硬编码(hardcoded)。
典型地按照LBN粒度从盘或NAND读取数据。然而,主机能请求按照作为LBN的子集的LBA粒度读取数据。由于此,可能在单一命令中,主机将请求与两个不同处理器的预取范围重叠的数据,这并不是最佳的,因为将需要附加开销(overhead),以在将数据返回到主机之前将所有数据移动到一个处理器。
作为示例,如果预取引擎预测主机正顺序发送具有6个LBN的长度的命令,则两个不同处理器可预取LBN,其中第一处理器具有LBN 1-3并且第二处理器具有LBN 4-6。LBN 1-3具有LBA1-299,而LBN 4-6具有LBA300-599。如果主机装置在LBA275开始读取并且对于一个LBN顺序读取,则主机将尝试读取LBA275-325。然而,这些LBA跨越(span)LBN 3和4,这将引起问题,因为LBN在两个不同处理器上高速缓存。
所以,现有技术中存在按照更有效的方式预取数据的需求。
发明内容
本公开一般涉及在主机装置请求数据之前、从一个或多个CPU预取数据。预取的数据从存储器预取并被存储在高速缓存中。如果主机装置请求还没有在高速缓存中的数据,则进行关于是否调度数据以写入高速缓存中的判断。如果数据不在高速缓存中并且没有被调度写入高速缓存中,则数据从存储器恢复并传递到主机装置。如果数据被调度写入高速缓存中、或者当前正被写入高速缓存中,则恢复数据的请求被延迟或调度,从而一旦数据在高速缓存中就恢复数据。如果数据已经在高速缓存中,则将数据传递到主机装置。应理解的是,尽管这里公开的示例涉及NAND存储器,但是这里的实施例也可等同应用到硬盘驱动器(HDD)储存器。
在一个实施例中,一种***包括:主机装置和耦接到该主机装置的存储器***。该存储器***包括:第一CPU;至少一个附加CPU;以及存储器装置,耦接到所述第一CPU和所述至少一个附加CPU。该***还包括确定要预取的LBN的数量、并促使所述数量的LBN被预取和写入到高速缓存中的部件。
在另一实施例中,一种方法包括:从主机装置接收读取第一数据的第一请求,并从耦接到多个CPU的存储器装置接收读取第二数据的第二请求,其中所述多个CPU中的第一CPU具有高速缓存储存器;使用该第一CPU从该存储器装置读取该第一数据;使用所述多个CPU中的第二CPU从该存储器装置读取该第二数据;将该第一数据和该第二数据写入到该高速缓存储存器中;从该高速缓存储存器读取所述第一和第二数据;以及将所述第一和第二数据传递到该主机装置。
在另一实施例中,一种方法包括:从主机装置接收从在与多个CPU耦接的存储器装置中安排的多个LBN读取第一LBA数据的第一请求,其中所述多个CPU中的第一CPU具有高速缓存储存器;从该存储器装置的一个或多个第一LBN读取第一LBA数据的第一部分;从该存储器装置的一个或多个第二LBN读取第一LBA数据的第二部分;向该高速缓存储存器写入所述一个或多个第一LBN数据以及所述一个或多个第二LBN数据;从该高速缓存储存器读取所述第一LBA数据;和将所述第一LBA数据传递到该主机装置。
在另一实施例中,一种方法包括:预取第一预定数目的LBN,并存储在第一CPU的高速缓存中;从该高速缓存读取数据;将该数据传递到主机装置;和预取第二数目的LBN,并存储在该高速缓存中,其中在从该主机装置接收读取数据的请求之前发生所述恢复和存储。
附图说明
为了其中能详细理解本公开的以上阐述的特征的方式,可通过参考其中一些在附图中图示的实施例,来进行上面简要概述的本公开的更具体的描述。然而,应注意的是,附图仅图示了该公开的典型实施例,并所以不应被看作其范围的限制,因为该公开可承认其他等同有效的实施例。
图1是根据一个实施例的***的示意图。
图2A和2B是图1的***的CPU的示意图。
图3是图示了根据一个实施例的方法的流程图。
图4是图示了根据另一实施例的方法的流程图。
图5是图示了根据另一实施例的方法的流程图。
为了促进理解,只要可能,已使用了相同附图标记来指定这些图共同的相同元素。预期到可在其他实施例上有利地利用一个实施例中公开的元素,而没有特定阐述。
具体实施方式
下面,对本公开的实施例进行参考。然而,应理解的是,本公开不限于特定描述的实施例。取代的是,预期以下特征和元素的任何组合,无论是否与不同实施例相关,以实现和实践本公开。此外,尽管本公开的实施例可实现超越其他可能方案和/或超越现有技术的优点,但是给定实施例是否实现特定优点不成为本公开的限制。由此,以下方面、特征、实施例和优点仅是示意性的,并且不被看作所附权利要求的元素或限制,除非在(多个)权利要求中明确阐述。类似地,引用“本公开”不应被解释为这里公开的任何发明主题的概括,并且不应被看作所附权利要求的元素或限制,除非在(多个)权利要求中明确阐述。应理解的是,尽管对NAND或硬盘驱动器进行了参考,但是本公开也可等同应用到其他类型的非易失性存储器。
本公开一般涉及在主机装置请求数据之前、从一个或多个CPU预取数据。预取的数据从存储器预取并被存储在高速缓存中。如果主机装置请求还没有在高速缓存中的数据,则进行关于是否调度数据以写入到高速缓存中的判断。如果数据不在高速缓存中并且没有被调度以写入到高速缓存中,则数据从存储器恢复并被传递到主机装置。如果数据被调度以写入到高速缓存中、或者当前正被写入到高速缓存中,则恢复数据的请求被延迟或调度,使得一旦数据在高速缓存中就恢复数据。如果数据已经在高速缓存中,则数据被传递到主机装置。
图1是根据一个实施例的***100的示意图示。该***包括与存储器***104交互的主机装置102。控制器106耦接到主机装置102和存储器***104两者。存储器***存储主机装置102在各个时间可能需要的数据。当需要数据时,主机装置102联系存储器***104以获得数据。控制器106控制存储器***104和主机装置102之间的通信。
存储器***104包括存储器控制器108和多个CPU。存在第一或主CPU110以及一个或多个附加CPU 112A-112N。第一CPU 110是用于与主机装置102交互的主CPU,如下面将讨论的那样。存储器***104还包括存储器装置114。存储器装置114耦接到所有CPU 110、112A-112N以及存储器控制器108。在一个实施例中,存储器装置114是NAND储存装置。在另一实施例中,存储器装置114是HDD储存装置。应理解的是,存储器装置114不限于NAND储存装置或HDD储存装置。相反,存储器装置114可应用到能够存储可由一个或多个CPU恢复的数据的任何储存装置。
图2A和2B是图1的***100的CPU的示意图。在图2A中,第一CPU110被示出为具有与高速缓存储存器204A和存储器装置114两者交互的控制器202A。类似地,在图2B中,CPU 112所表示的其他CPU 112A-112N全部具有与高速缓存储存器204B和存储器装置114两者交互的控制器202B。
控制器106、202A、202B是管理去往和来自存储器***104(在控制器106的情况下)以及去往和来自个别CPU 110、112A-112N(在控制器202A、202B的情况下)的数据流动的数字电路。控制器106、202A、202B能够是单独芯片或者集成在其他芯片中,诸如放置在相同印模(die)上或作为CPU的整体部分(如在控制器202A、202B的情况下)。控制器106、202A、202B可被称为集成存储器控制器(IMC)、存储器芯片控制器(MCC)或存储器控制器单元(MCU)。另外,控制器106、202A、202B起作用以确定要预取的LBN的数量,并促使该数量的LBN被预取和写入到高速缓存中。控制器202A还能够从主机装置102接收请求,并从至少一个附加CPU112A-112N预取LBN。控制器202B能将预取的LBN发送到第一或主CPU 110。控制器202A能够从控制器202B接收预取的LBN。
为了在主机装置102从存储器***104获得期望的数据,利用预取算法。该算法使用为了读取高速缓存所预留的尽可能多的存储器。从单一服务器能服务越多读取,则其他处理器在它们需要再次服务读取之前、具有越多时间来重新填满它们的读取高速缓存。该算法尝试具有跨越所有CPU预取的连续范围的LBN。如果存在没有预取的LBN,则与从高速缓存读取所有数据相比,需要使用LBN的主机命令将被显著减慢,等待从NAND或盘读取该单一LBN。该算法避免作为不同处理器的目标的不同命令所需要的单一LBN的问题。
为了理解该算法,现在将解释几个表格。MaxReadLBNsInCache是代表能在单一处理器的高速缓存中存储的LBN的最大数目的常数。NumLBAsPerLBN是代表LBN中的LBA的数目的常数。LastLBAPrefetched是在任何处理器上预取的最后LBA。如果还没有预取LBA,则LastLBAPrefetched是主机装置读取的最后LBA。CmdLen是期望主机装置进行的每一顺序读取请求所要读取的预取的LBA的数目。在所有情况下,特定处理器上要预取的第一LBN(FirstLBNToPrefetch)是跟随在LastLBAPrefetched之后的下一LBN。
如果要预取的下一LBA在LBN边界处开始,则计算相对容易。能被添加到高速缓存并仍然允许从单一处理器服务所有命令的LBN的最小数目(MinLBNsToAddToCache)仅是CmdLen和NumLBAsPerLBN的最小公倍数除以NumLBAsPerLBN。应高速缓存的LBN的总数是小于或等于MaxReadLBNsInCache的MinLBNsToAddToCache的最大倍数。
图3是图示了根据一个实施例的方法300的流程图。在该方法中,主机装置102将读取请求初始发送到存储器装置104。特别是,该读取请求在块302由第一或主CPU 110接收。该读取请求针对一个或多个LBN中包括的特定LBA中包括的数据。进行关于请求的数据是否已存在于高速缓存中的判断。更具体地,在块304进行关于请求的数据是否在第一或主CPU110的高速缓存中的判断。如果如块306的肯定判断所示请求的数据在第一或主CPU110的高速缓存中,则在块308将数据传递到主机装置102。如果如块306的否定判断所示该数据不在第一或主CPU 110的高速缓存中,则在块310从适当NAND(或者在盘***的情况下的盘)读取数据。
在时间零开始,高速缓存中将没有数据,并由此来自主机装置的初始读取请求将使得从NAND(或盘)读取数据成为必须,这花费时间。在读取请求处理期间(或甚至之后),在块312未请求的数据能开始从NAND(或盘)读取并存储在高速缓存中。如果数据还没有在第一或主CPU 110NAND(或盘)中,则在块314读取的数据被发送到第一或主CPU 110的高速缓存。未请求的数据是被预测要基于上述算法使用的预取数据。在足够迭代之后,充足数据将在第一或主CPU 110高速缓存中,使得与从NAND(或盘)或从多个高速缓存直接读取数据的情况相比,将降低读取等待时间。
如果认为数据在某些部分(即,LBN的LBA)中,则一般来说,在接收到第一读取请求之后,在块316从主机装置接收读取第二LBA数据的第二请求。对于第二请求,将第二LBA数据的第一部分安置在第一LBN中,并将第二LBA数据的第二部分安置在第二LBN中。第一部分和第二部分从存储器装置114读取。包括第一部分的LBN和来自第二部分的LBN被写入到高速缓存204A。数据然后从高速缓存204A读取并传递到主机装置102。能以主机装置102作出请求时所有请求的数据已经在高速缓存204A中为目标,按照类似方式来处置附加请求。对于第二读取请求,理想地,从存储器装置114读取和向高速缓存204A写入将在接收读取请求之前发生。
图4是图示了根据另一实施例的方法400的流程图。在图4的方法中,在块402初始进行判断以预取数据。然后在块404进行关于要预取的LBA数据是否在LBN边界开始和结束的判断。如果回答是肯定的,则LBN数据在块406从存储器装置114读取,在块408写入到主CPU 110的高速缓存。
如果要预取的下一LBA没有在LBN边界处开始(即,块404的回答为“否”),则计算更困难。首先,在块410进行关于在读取命令在LBN边界结束之前、必需多少附加读取命令(NumCmdsToLBNBoundary)的判断。在块412计算为了处置所述数目命令需要高速缓存的全部LBN的数目(InitLBNToCache)。从那里开始,在块414从MaxReadLBNsInCache的数目减去InitLBNToCache,以确定能适合高速缓存的剩余LBN(FreeLBNsInCache)。在块416,根据上面用MaxRemainingReadLBNsInCache代替MaxReadLBNsInCache,能使用该算法来计算在高速缓存中能读取多少附加LBN(AdditionalLBNsInCache)。要预取的LBN的总数是NumWholeLBNsToReachLBNBoundary和NumAdditionalLBNsInCache之和,并且最终在块418被预取。
在一些情况下,可能不存在小到足以适合高速缓存的MinLBAsToAddToCache的值。最简单的示例是顺序读取,其长度总是NumLBAsPerLBN,但是不在LBN边界开始。在这些情况下,不可能避免其中一些特定LBN将需要由多个处理器读取的情形,并且将需要代替进行最佳情况努力(best case effort)。在该情况下,要预取的LBN的总数是能服务的全部命令的数目,而无需知道读取高速缓存的最大尺寸。
该算法能容易地提取为以下等式:
FirstLBNtoPrefetch=LastLBAPrefetched/(NumLBAsPerLBN+1)。
MinLBNsToAddToCache=LCM(CmdLEN,NumLBAsPerLBN)/NumLBAsPerLBN。
NextLBAToPrefetch=LastLBAPrefetched+1。
如果(NextLBAToPrefetch)mod NumLBAsPerLBN=0,则NumLBNsToCache=MaxReadLBNsInCache四舍五入为MinLBNsToAddToCache的最接近的倍数,否则对于NumCmdsToLBNBoundary求解((NextLBAToPrefetch+NumCmdsToLBNBoundary*CmdLen)modNumLBAsPerLBN=0。
InitLBNsToCache=NumCmdsToLBNBoundary*CmdLen/NumLBAsPerLBN。
FreeLBNsInCache=MaxReadLBNsInCache–InitLBNsToCache。
AdditionalLBNsToCache=FreeLBNsInCache四舍五入为MinLBNsToAddToCache的最接近的倍数。
NumLBNsToCache=InitLBNsToCache+AdditionalLBNsToCache。
如果NumLBNsToCache=0,则LeadingLBAsNotInCache=FirstLBNToPrefetch/(NumLBAsPerLBN–NextLBAToPrefetch)。
NumCmdsFromCache=(MaxReadLBNsInCache*(NumLBAsPerLBN+LeadingLBAsNotInCache))/CmdLen。
NumLBNsToCache=(NumCmdsFromCache*(CmdLen–LeadingLBAsNotInCache))/NumLBAsPerLBN。
LastLBAPrefetched=NumCmdsFromCache*CmdLen elseLastLBAPrefetched=(FirstLBNToPrefetch+NumLBNsToCache)*NumLBAsPerLBN–1。
当从NAND或盘预取数据时,可能在完成预取并且数据已被添加到读取高速缓存之前、开始处理读取该数据的预期主机命令。在该情况下,如果和平常一样继续主机命令,则数据将不在高速缓存中发现,并且将被作为正常读取看待。这造成两个问题。首先,驱动器花费不必要的时间从NAND或盘预取数据,这将最终被丢弃(get thrown away)。其次,取决于预取命令处理的进展如何,可存在预取命令和主机命令之间的读取冲突,这将导致主机命令的附加开销(overhead)。该问题的潜在解决方案是,在主机读取处理期间,如果驱动器检测到用于和主机读取相同的LBN的预取命令在处理中,则其停止(stalls)处理主机命令直到预取命令完成为止。然而这不是最优的,因为在相同主机命令中可存在不在读取高速缓存中或即将要添加到读取高速缓存中的随后LBN。如果没有停止主机命令,则能与预取命令并行地运行没有被调度为预取的LBN上的读取,这导致主机命令的全面更快的运行时间。
现在将关于图5中示出的方法500讨论在高速缓存中预留空间用于即将读取到高速缓存的操作、以防止随后的主机读取请求读取相同LBN、同时允许作为相同主机读取请求的一部分的随后LBN读取。
当在块502首先发布预取命令时,在块504对于预取命令中的每一LBN,向读取高速缓存添加临时占位符,指示即将进行向高速缓存的读取。当开始处理预取引擎期望的主机读取命令时,对于命令中的每一LBN,处理器在块506检查LBN是否在高速缓存中,以确定LBN在高速缓存中、不在高速缓存中、还是即将在高速缓存中。如果已经完成LBN读取到高速缓存中,则在块508处理器继续处理LBN,如同LBN已刚刚从NAND或盘读取。如果LBN不在高速缓存中,则处理器在块510启动从NAND或盘对于那个LBN的新读取请求。如果处理器发现即将进行LBN读取到高速缓存,则与LBN关联的上下文的副本在块512被关联到主机读取命令,并在块514被添加到等待完成读取到高速缓存的LBN上下文的列表。该处理继续,直到已处理主机命令中的所有LBN为止,或者由于在高速缓存中没有发现LBN而发布从NAND或盘的新读取为止。
当在块516对于给定LBN完成未决读取到高速缓存时,处理器将在块518在未决列表中查找匹配LBN上下文。如果发现匹配,则在块520将数据链接到主机命令,该主机命令继续如同刚从NAND或盘读取LBN一样,并且在块522从高速缓存去除条目。如果未发现匹配,则LBN数据留在高速缓存中,等待读取它的主机命令。
该算法能导致的一个问题是冲突的LBN的问题。特别是,存在能发生的两个问题。第一是高速缓存中预取的LBN检测到冲突,并且主机命令当前正等待那个LBN。第二是主机命令正从NAND读取的LBN已从高速缓存读取随后LBN。在这两种情况下,存在对于冲突的LBN保持锁定(lock)的命令和该主机命令对于随后LBN保持的任何锁定之间的僵局(deadlock)的可能性。处理器需要贯穿该主机命令中的所有随后LBN迭代,并释放它们。一旦解决了当前LBN上的冲突,则能重新请求随后LBN。
大体上,通过预取包括LBA的LBN并在单一处理器的高速缓存中存储数据将降低来自主机装置的读取请求的读取等待时间。在单一处理器的高速缓存中高速缓存LBN数据降低在接收到读取请求时从NAND或者从附加处理器读取数据的任何需求。结果,仅在从主机装置接收读取请求和从单一处理器中的高速缓存传递读取之间存在等待时间。可通过从单一CPU或多个CPU获得LBN并且在单一CPU的高速缓存中存储单一CPU中的预取数据,而发生该预取。作为选择,可通过从多个CPU获得LBN并且在单一CPU的高速缓存中合并(consolidating)(存储)单一CPU上的所有预取数据,而发生该预取。
尽管以上针对本公开的实施例,但是可设想本公开的其他和进一步实施例,而不脱离其基本范围,并且其范围由随后的权利要求确定。
Claims (21)
1.一种用于数据处理的***,包括:
存储器***,将被耦接到主机装置,该存储器***包括:
第一CPU,将被耦接到所述主机装置,其中所述第一CPU具有第一高速缓存;
至少一个附加CPU,与所述主机装置解耦,其中所述至少一个附加CPU具有第二高速缓存;
控制器,耦接到所述第一CPU和所述至少一个附加CPU,其中所述控制器不同于所述第一CPU和所述至少一个附加CPU;
存储器装置,耦接到所述第一CPU、所述控制器和所述至少一个附加CPU;和
确定要从所述第二高速缓存预取到所述第一高速缓存的LBN的数量并促使所述数量的LBN从所述第二高速缓存被预取和写入到所述第一高速缓存中的部件。
2.根据权利要求1所述的***,其中该第一CPU包括从该主机装置接收请求的部件。
3.根据权利要求2所述的***,其中该第一CPU附加包括从该存储器装置接收预取的LBN的部件。
4.根据权利要求3所述的***,其中所述至少一个附加CPU包括将预取的LBN发送到该第一CPU的部件。
5.根据权利要求1所述的***,其中该第一CPU附加包括从该存储器装置接收预取的LBN的部件。
6.根据权利要求5所述的***,其中所述至少一个附加CPU包括将预取的LBN发送到该第一CPU的部件。
7.根据权利要求1所述的***,其中所述至少一个附加CPU包括将预取的LBN发送到该第一CPU的部件。
8.一种用于数据处理的方法,包括:
从主机装置接收读取第一数据的第一请求,并从耦接到多个CPU的存储器装置接收读取第二数据的第二请求,其中所述多个CPU中的第一CPU具有第一高速缓存储存器,并且所述多个CPU中的第二CPU具有第二高速缓存储存器;
使用该第一CPU从该存储器装置读取该第一数据;
使用所述多个CPU中的所述第二CPU从该存储器装置读取该第二数据;
将该第一数据和该第二数据写入到所述第一CPU的所述第一高速缓存储存器中;
从所述第一高速缓存储存器读取所述第一和第二数据;和
将所述第一和第二数据传递到该主机装置。
9.根据权利要求8所述的方法,其中该存储器装置是NAND储存装置。
10.根据权利要求8所述的方法,其中该存储器装置是硬盘驱动器储存装置。
11.一种用于数据处理的方法,包括:
从主机装置接收从在与第一CPU和第二CPU耦接的存储器装置中安排的第一LBN和第二LBN读取第一LBA数据的第一请求,其中所述第一CPU具有第一高速缓存储存器并且被分配所述第一LBN,其中所述第二CPU具有第二高速缓存储存器并且被分配所述第二LBN;
从该存储器装置的所述第一LBN读取第一LBA数据的第一部分;
从该存储器装置的所述第二LBN读取第一LBA数据的第二部分;
向该第一高速缓存储存器写入所述第一LBN数据的第一部分以及所述第一LBN数据的第二部分;
从该第一高速缓存储存器读取所述第一LBA数据;和
将所述第一LBA数据传递到该主机装置。
12.根据权利要求11所述的方法,进一步包括:
从该主机装置接收从该存储器装置读取第二LBA数据的第二请求,其中所述第一LBA数据和所述第二LBA数据是顺序数据;
从该存储器装置读取该第二LBA数据;
将所述第二LBA数据写入到所述第一高速缓存储存器;和
向该主机装置传递该第二LBA数据。
13.根据权利要求11所述的方法,其中读取该第一LBA数据的第一部分由该第一CPU执行,并且读取该第一LBA数据的第二部分由所述第二CPU执行。
14.根据权利要求13所述的方法,其中在接收第二请求之前发生向该第一高速缓存储存器写入第二LBA数据。
15.一种用于数据处理的方法,包括:
从主机装置接收第一请求以从安排在存储器装置中的第一LBN读取第一LBA数据,所述存储器装置与第一CPU和第二CPU耦接,其中所述第一CPU具有分配所述第一LBN的第一高速缓存储存器,并且所述第二CPU具有分配第二LBN的第二高速缓存储存器;
从该主机装置接收第二请求以从该存储器装置中安排的所述第二LBN读取第二LBA数据,其中所述第一LBA数据和所述第二LBA数据是顺序数据;
确定该第二LBA数据没有被调度写入该第二高速缓存储存器中,并且不是已经在所述第二高速缓存储存器中;
从该存储器装置读取该第二LBA数据;和
向该主机装置传递该第二LBA数据。
16.一种用于数据处理的方法,包括:
从主机装置接收第一请求以从安排在存储器装置中的第一LBN读取第一LBA数据,所述存储器装置与第一CPU和第二CPU耦接,其中所述第一CPU具有分配所述第一LBN的第一高速缓存储存器,并且所述第二CPU具有分配第二LBN的第二高速缓存储存器;
从该主机装置接收第二请求以从该存储器装置中安排的所述第二LBN读取第二LBA数据,其中所述第一LBA数据和所述第二LBA数据是顺序数据;
确定该第二LBA数据被调度写入该第二高速缓存储存器中;
等待直到该第二LBA数据在该第二高速缓存储存器中为止;
从该第二高速缓存储存器读取该第二LBA数据;和
向该主机装置传递该第二LBA数据。
17.一种用于数据处理的方法,包括:
从主机装置接收第一请求以从安排在存储器装置中的第一LBN读取第一LBA数据,所述存储器装置与第一CPU和第二CPU耦接,其中所述第一CPU具有分配所述第一LBN的第一高速缓存储存器,并且所述第二CPU具有分配第二LBN的第二高速缓存储存器;
从该主机装置接收第二请求以从该存储器装置中安排的所述第二LBN读取第二LBA数据,其中所述第一LBA数据和所述第二LBA数据是顺序数据
确定该第一LBA数据已经在该第二高速缓存储存器中;
从该第二高速缓存储存器读取该第二LBA数据;以及
向该主机装置传递该第二LBA数据。
18.一种用于数据处理的方法,包括:
预取第一预定数目的LBN,并存储在第一CPU的高速缓存中,其中所述第一CPU将被耦接到主机装置,其中所述第一CPU是存储器***的一部分,并且该存储器***包括具有第二高速缓存的至少一个附加CPU和不同于所述第一CPU和所述至少一个附加CPU的控制器,并且其中所述第一预定数量的LBN从所述第二高速缓存被预取;
从该高速缓存读取数据;
将该数据传递到所述主机装置;和
预取第二数目的LBN,并存储在该高速缓存中,其中在从该主机装置接收读取数据的请求之前发生恢复和存储。
19.根据权利要求18所述的方法,其中所述第二数目的LBN等于从该高速缓存读取的数据中包括的LBN的数目。
20.根据权利要求19所述的方法,其中所述第一预定数目的LBN全部被安排在与该第一CPU耦接的存储器装置中。
21.根据权利要求18所述的方法,其中所述第一预定数目的LBN全部被安排在与该第一CPU耦接的存储器装置中。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/474,340 | 2017-03-30 | ||
US15/474,340 US10565115B2 (en) | 2017-03-30 | 2017-03-30 | Calculating the optimal number of LBNS to prefetch per CPU |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108694132A CN108694132A (zh) | 2018-10-23 |
CN108694132B true CN108694132B (zh) | 2022-09-13 |
Family
ID=63525796
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711399885.7A Active CN108694132B (zh) | 2017-03-30 | 2017-12-22 | 计算每一中央处理单元预取的逻辑块号的最佳数目 |
Country Status (3)
Country | Link |
---|---|
US (3) | US10565115B2 (zh) |
CN (1) | CN108694132B (zh) |
DE (1) | DE102017128944A1 (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04250542A (ja) * | 1990-08-06 | 1992-09-07 | Ncr Corp | コンピューターメモリシステム |
US5778423A (en) * | 1990-06-29 | 1998-07-07 | Digital Equipment Corporation | Prefetch instruction for improving performance in reduced instruction set processor |
CN101034381A (zh) * | 2006-03-08 | 2007-09-12 | 松下电器产业株式会社 | 多主机***和数据传送*** |
CN101133400A (zh) * | 2005-07-29 | 2008-02-27 | 松下电器产业株式会社 | 存储器控制器,非易失性存储器,非易失性存储器***,和非易失性存储器地址管理方法 |
TW201040717A (en) * | 2009-05-06 | 2010-11-16 | Via Telecom Inc | Flash memory managing methods and computing systems utilizing the same |
CN106462601A (zh) * | 2014-03-31 | 2017-02-22 | 亚马逊科技公司 | 针对多盘区操作的原子写入 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5854942A (en) * | 1996-09-06 | 1998-12-29 | International Business Machines Corporation | Method and system for automatic storage subsystem configuration |
US6615319B2 (en) * | 2000-12-29 | 2003-09-02 | Intel Corporation | Distributed mechanism for resolving cache coherence conflicts in a multi-node computer architecture |
JP4597507B2 (ja) * | 2003-12-02 | 2010-12-15 | 株式会社日立製作所 | 記憶デバイス制御装置及び記憶デバイス制御装置の制御方法 |
US8504798B2 (en) * | 2003-12-30 | 2013-08-06 | Sandisk Technologies Inc. | Management of non-volatile memory systems having large erase blocks |
US8590001B2 (en) * | 2010-08-20 | 2013-11-19 | Promise Technology, Inc. | Network storage system with data prefetch and method of operation thereof |
US9122606B2 (en) * | 2011-11-21 | 2015-09-01 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Method and system for distributing tiered cache processing across multiple processors |
US9690953B2 (en) * | 2013-03-14 | 2017-06-27 | Apple Inc. | Generating efficient reads for a system having non-volatile memory |
US20150277764A1 (en) * | 2014-03-28 | 2015-10-01 | Kabushiki Kaisha Toshiba | Multi-mode nand-caching policy for hybrid-hdd |
US9495478B2 (en) * | 2014-03-31 | 2016-11-15 | Amazon Technologies, Inc. | Namespace management in distributed storage systems |
US10264071B2 (en) * | 2014-03-31 | 2019-04-16 | Amazon Technologies, Inc. | Session management in distributed storage systems |
US9514059B2 (en) * | 2014-12-22 | 2016-12-06 | Texas Instruments Incorporated | Hiding page translation miss latency in program memory controller by selective page miss translation prefetch |
JP6521694B2 (ja) * | 2015-03-27 | 2019-05-29 | 株式会社バイオス | 記憶制御システム及び記憶制御装置 |
US9916252B2 (en) * | 2015-05-19 | 2018-03-13 | Linear Algebra Technologies Limited | Systems and methods for addressing a cache with split-indexes |
-
2017
- 2017-03-30 US US15/474,340 patent/US10565115B2/en active Active
- 2017-12-06 DE DE102017128944.5A patent/DE102017128944A1/de active Granted
- 2017-12-22 CN CN201711399885.7A patent/CN108694132B/zh active Active
-
2020
- 2020-01-21 US US16/748,790 patent/US11422941B2/en active Active
-
2022
- 2022-07-05 US US17/857,224 patent/US11656993B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5778423A (en) * | 1990-06-29 | 1998-07-07 | Digital Equipment Corporation | Prefetch instruction for improving performance in reduced instruction set processor |
JPH04250542A (ja) * | 1990-08-06 | 1992-09-07 | Ncr Corp | コンピューターメモリシステム |
CN101133400A (zh) * | 2005-07-29 | 2008-02-27 | 松下电器产业株式会社 | 存储器控制器,非易失性存储器,非易失性存储器***,和非易失性存储器地址管理方法 |
CN101034381A (zh) * | 2006-03-08 | 2007-09-12 | 松下电器产业株式会社 | 多主机***和数据传送*** |
TW201040717A (en) * | 2009-05-06 | 2010-11-16 | Via Telecom Inc | Flash memory managing methods and computing systems utilizing the same |
CN106462601A (zh) * | 2014-03-31 | 2017-02-22 | 亚马逊科技公司 | 针对多盘区操作的原子写入 |
Also Published As
Publication number | Publication date |
---|---|
US20220334974A1 (en) | 2022-10-20 |
DE102017128944A1 (de) | 2018-10-04 |
US10565115B2 (en) | 2020-02-18 |
CN108694132A (zh) | 2018-10-23 |
US20180285273A1 (en) | 2018-10-04 |
US20200159662A1 (en) | 2020-05-21 |
US11422941B2 (en) | 2022-08-23 |
US11656993B2 (en) | 2023-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10521375B2 (en) | Controller for a memory system | |
US11194710B2 (en) | Garbage collection—automatic data placement | |
CN107870732B (zh) | 从固态存储设备冲刷页面的方法和设备 | |
EP2889776B1 (en) | Data arrangement control program, data arrangement control method and data arrangment control apparatus | |
KR101544309B1 (ko) | 스트림 기반의 비휘발성 메모리 제어 방법 및 장치 | |
WO2017069648A1 (en) | Distributed cache live migration | |
CN111324556A (zh) | 高速缓存预取 | |
EP2908248B1 (en) | Memory data pushing method and device | |
US20150089097A1 (en) | I/o processing control apparatus and i/o processing control method | |
EP2577472B1 (en) | Asynchronous bad block management in nand flash memory | |
KR100988334B1 (ko) | 캐쉬 제어 장치, 정보 처리 장치 | |
US20140344503A1 (en) | Methods and apparatus for atomic write processing | |
CN107851065B (zh) | 预先缓存分配器 | |
US9378151B2 (en) | System and method of hinted cache data removal | |
US11169923B2 (en) | Method for performing read-ahead in data storage systems | |
CN108694132B (zh) | 计算每一中央处理单元预取的逻辑块号的最佳数目 | |
JP5158576B2 (ja) | 入出力制御システム、入出力制御方法、及び、入出力制御プログラム | |
JP2007102436A (ja) | ストレージ制御装置およびストレージ制御方法 | |
US10719441B1 (en) | Using predictions of outcomes of cache memory access requests for controlling whether a request generator sends memory access requests to a memory in parallel with cache memory access requests | |
US9384135B2 (en) | System and method of caching hinted data | |
JP2005352711A (ja) | キャッシュ制御方法およびデータ処理システム並びにその処理プログラム | |
KR101691286B1 (ko) | 입출력 정보 공유 방법, 상기 방법을 수행하는 저장 장치 및 호스트 장치 | |
KR101456373B1 (ko) | 캐시 장치를 관리하는 장치 및 방법 | |
CN108733583A (zh) | 提高NVMe SSD顺序数据读取性能的预读方法及*** | |
US8533392B2 (en) | Cache hit management |
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 |