CN114490445A - 支持积极预取的快速高速缓存跟踪 - Google Patents
支持积极预取的快速高速缓存跟踪 Download PDFInfo
- Publication number
- CN114490445A CN114490445A CN202111213899.1A CN202111213899A CN114490445A CN 114490445 A CN114490445 A CN 114490445A CN 202111213899 A CN202111213899 A CN 202111213899A CN 114490445 A CN114490445 A CN 114490445A
- Authority
- CN
- China
- Prior art keywords
- address
- bloom filter
- cache
- candidate
- hash
- 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.)
- Pending
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
- 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/1021—Hit rate improvement
-
- 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
-
- 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)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
布隆过滤器用于跟踪高速缓存的内容。***在决定是否预取地址之前检查布隆过滤器(通过对地址进行散列并基于散列来检查索引处布隆过滤器的值)。这允许***通过降低浪费的冗余预取操作的风险来利用更积极的预取方案。
Description
背景技术
几乎所有的现代计算***都以某种形式或另一种形式利用高速缓存。高速缓存本质上用作信息的临时本地副本。访问高速缓存比从长期和/或更大的存储装置(诸如,硬盘驱动器和/或主存储器)读取数据在时间和功率上明显更有效。
预取是尝试减少应用所需的耗时的存储访问数量的越来越常见的方式。如果所期望的行(line)(指数据指令或数据段)未存储在高速缓存中,则可能需要从长期存储装置中读取该行,这将伴随着显著的时间损失。预取利用了被称为“时间局部性”的概念,其认识到数据/指令在小组(small group)内被高频地调用。例如,如果地址0003的数据被调用,则时间局部性暗示在不久的将来可能调用地址0004、0005和0006的数据。因此,在检测到对地址0003处的数据的调用后,许多预取***可以抢先将地址0004-0006读取到高速缓存中。这样,如果接下来的确要调用地址0004-0006,则这些调用将产生高速缓存命中(cache hit)。
发明内容
本公开的一些实施例可以被例示为一种方法。该方法包括预测候选对象地址。该方法还包括计算候选对象地址的散列。该方法还包括基于该散列来检查布隆过滤器(Bloomfilter)。该方法还包括(基于该检查)确定预取存储在候选对象地址处的信息。
本公开的一些实施例还可以被例示为包括计算机可读存储介质的一种计算机程序产品,该计算机可读存储介质包括程序指令,该程序指令可由计算机执行以使计算机执行以上讨论的方法。
本公开的一些实施例可以被例示为一种***。该***可以包括存储器和处理单元,诸如控制器或中央处理单元(CPU)。处理单元可以被配置为执行指令以执行上述方法。
以上发明内容并非旨在描述本公开的每个所示实施例或每种实施方式。
附图说明
本申请中包括的附图并入说明书中并形成说明书的一部分。它们示出了本公开的实施例,并且与说明书一起用于解释本公开的原理。附图仅说明某些实施例,而不限制本公开。随着以下详细描述的进行,并且在参考附图时,所要求保护的主题的各种实施例的特征和优点将变得显而易见,在附图中,相同的参考标号指示相同的部分,并且其中:
图1示出了根据本公开若干实施例的包括在决定是否预取信息之前检查布隆过滤器内容的高级高速缓存监视方法。
图2示出了根据本公开若干实施例的布隆过滤器更新方法的高级流程图。
图3示出了根据本公开若干实施例的示例布隆过滤器实现。
图4示出了可以用于实现本公开的实施例的示例计算机***的高级框图。
虽然本发明可以有各种修改和替换形式,但是其细节已经在附图中通过示例的方式示出并且将被详细描述。然而,应当理解,其目的不是将本发明限制于所描述的特定实施例。相反,本发明覆盖落入本发明的精神和范围内的所有修改、等效和替换。
具体实施方式
本公开的各方面涉及用于监视高速缓存内容的***和方法。更具体的方面涉及一种***,该***用于检测高速缓存命中、确定预取候选对象的地址、基于布隆过滤器确定是否预取候选对象、以及基于高速缓存写入来维护布隆过滤器。
在本公开中,引用了“数据”、“指令”和“信息”。许多***实现单独的数据高速缓存(Dcache)和指令高速缓存(Icache)。可以实现与本公开一致的***和方法来改进这两者或其中之一的性能以及在数据和指令之间没有区别的***。因此,为了避免混淆,术语“信息”被用作“数据”和“指令”两者的一般化形式。高速缓存在本文被描述为存储信息;这可以指存储数据的Dcache或存储指令的Icache以及诸如分页和单级存储的其他存储器管理技术。
在本公开中,引用了“预取”,以及决定是否预取。如本文所使用的,预取指的是“抢先”将信息从存储器读取到高速缓存中(在信息被需要之前将信息从存储器读取到高速缓存中)。当确定是否预取信息时,该信息在本文被称为“预取候选对象”,并且存储该信息的存储器地址被称为“候选对象地址”。
在本公开中,引用了“地址”和“索引”。如本文所使用的,“地址”指存储器(其可以指诸如随机存取存储器(RAM)的易失性存储器或诸如硬盘驱动器(HDD)的非易失性存储器)中的地址。信息被存储在存储器中的特定地址处。信息也可以存储在高速缓存中的特定高速缓存地址处。然而,出于本公开的目的,“地址”指存储器中的特定位置。本发明参考用于跟踪高速缓存的状态的一个或多个阵列和/或向量。信息的“地址”被散列(或以其他方式转换)以生成数据结构(诸如向量)的对应“索引”。虽然两者是相关的,但它们是不可互换的。存储在给定索引处的向量的值用于通知存储在对应地址处的信息当前是否也存储在高速缓存中。
在本公开中,引用了布隆过滤器。如本文所使用的,布隆过滤器指概率数据结构(例如,1维矩阵或向量)。布隆过滤器被更新以监视/跟踪高速缓存的内容。典型地,布隆过滤器将具有值“0”或“1”(其在本文被称为“二进制”布隆过滤器)。当高速缓存写入发生时,该值可以被更新,以反应特定信息被高速缓存。作为说明性示例,在一些实施例中,每当存储在存储器中的地址处的信息被写入高速缓存时,索引处布隆过滤器的值被设置为“1”以反映这一点。索引取决于被高速缓存的信息的存储器地址。在示例实施例中,写入高速缓存的信息的地址被散列,并且散列的结果被用作布隆过滤器的索引。因此,***能够通过对地址进行散列并检查布隆过滤器的值(在布隆过滤器的与地址的散列对应的索引处)是“1”还是“0”来检查给定地址处的信息是否被高速缓存。
值得注意的是,对地址使用的散列算法不一定提供唯一的输出;这使得能够以引入“假肯定”的可能性为代价,使用具有比地址空间的大小更少的索引的布隆过滤器。例如,如果地址A和地址B都散列到索引X,则当A或B被高速缓存时,在索引X处布隆过滤器的值将被更新。例如,高速缓存被存储在地址A处的信息将导致X被设置为“1”。用于确定地址B是否被高速缓存的稍后进行的检查将检查到索引X(由于A,索引X为“1”)指示地址B被高速缓存了而不管其实际上是否被高速缓存。通过对散列算法/布隆过滤器的大小进行适当微调/调整,可以实现显著的性能改进。简单的索引计算算法将简单地使用高速缓存行地址(lineaddress)的最低有效位的必需数目(在丢弃高速缓存行偏移位之后的地址)。例如,为了访问1024条目的布隆过滤器,可以仅使用高速缓存行地址的10个最低有效位。更复杂的散列算法可以将XOR函数应用于高速缓存行地址的附加位,以将该地址的20-30位压缩成10位索引。这可以提供布隆过滤器的更均匀的使用。类似地,布隆过滤器本身的大小可以根据高速缓存的大小和在处理器上运行的典型工作负载的占用量(footprint)来调整。已经发现1024个条目的大小在大多数情况下提供足够的覆盖。
当某个地址被调用时,接下来的若干地址可能被调用(基于时间局部性),如本领域普通技术人员将理解的。因此,当地址被读取时,预取一组随后的地址可能导致一系列的高速缓存命中。然而,如果预取的候选对象已经在高速缓存中,则即使没有预取,它们也将被高速缓存命中,这将造成预取冗余和浪费。这种“不使用的”预取的功率成本可能特别高,因为必须查询高速缓存目录来验证该预取是否需要。这种查询消耗大量功率,尤其是对于高度关联的高速缓存。由于时间局部性的概念也可以应用于高速缓存的内容,因此,在高速缓存命中之后预取可能特别可能导致浪费的工作。
作为一个清楚的示例,信息可以是指令“将3添加到X”,这个信息可以被存储在存储器中的地址5350处。当地址5350被调用时,指令“将3添加到X”被写入到高速缓存中。当这发生时,地址(5350)被散列。出于简单示例的目的,散列算法可简单地采用地址的最后两个数字,因此,散列结果在此为50(5350的最后两个数字为50)。地址的散列结果被用作布隆过滤器的索引。过滤器的在该索引处的值被设置为“1”。因此,在该示例中,当指令“将3添加到X”被写入高速缓存时,向量中的第50个条目被设置为“1”(为了简单起见,这些值以10为基数)。稍后,可以检查布隆过滤器以确定存储在地址5350处的信息(即,“将3添加到X”)是否被高速缓存。为了执行该检查,再次对地址进行散列(再次得到50),散列的结果被用作索引(因此,检查布隆过滤器的第50个值)。由于值为“1”,这表示存储在所讨论的地址(5350)处的信息在高速缓存中。
如果候选对象未被高速缓存,则预取它们可能导致高速缓存命中而不是高速缓存遗漏(cache miss),从而节省大量时间。然而,如果候选已经被高速缓存,则预取它们是冗余的,因此浪费了预取所需的功率、时间和资源。因此,“积极的”预取方案(例如,自动预取被调用的地址之后的5个后续地址)最终会花费比它们节省的资源更多的资源。因此,符合本公开的***和方法提供了一种计算量轻的方式来确定候选对象是否已经在高速缓存中,通知是否预取它们的决定。如果候选已经被高速缓存,则避免预取它们可以节省重复的工作和功率。
然而,维护一个或多个布隆过滤器以跟踪高速缓存的内容可以有利地启用“积极”预取方案,否则该方案可能频繁地浪费功率。一些***实现多种高速缓存;指令高速缓存(Icache)和数据高速缓存(Dcache)。当与来自数据高速缓存(Dcache)的数据相比时,指令通常在相对较小的局部化组中读取。例如,当读取数据时,通常顺序地读取数千个地址,而指令通常以大约三到十个的组来读取。因此,典型的积极预取在Icache vs.Dcache的背景下明显更有可能是浪费的。
例如,虽然预取几千个数据地址可能导致至少一些浪费的工作(例如,存储在被预取的一些地址处的信息可能已被高速缓存),但是其他预取所节省的时间和功率(将高速缓存遗漏转变为高速缓存命中)通常仍然是显著的性能提升。然而,对于在Icache中处理的较小的组的情况下,仅花费少量浪费的预取,因为预取的成本超过节省。作为简单实例,当与将2,950个原本的高速缓存遗漏转变为高速缓存命中的益处相比时,3,000个预取中的50个浪费的预取(典型的数据读取)是浪费资源的微不足道的量。另一方面,3个预取中的2个浪费的预取(典型的指令读取)可能比产生的单个高速缓存命中节省而花费得更多。鉴于这种风险,许多***忽略了在Icache的环境下的积极地预取,因为可能的增益被相当的风险超过。因此,与本公开一致的***和方法在应用于指令高速缓存(Icache)时特别有利,尽管它们在应用于Dcache时也将导致性能改进。
由于在高速缓存被写入时布隆过滤器的值被设置为“1”,所以随着时间的推移,布隆过滤器可能变得饱和,如果保持未检查,则所有值将最终变为“1”。为了解决这个问题,在一些实施例中,布隆过滤器被周期性地刷新,将它们的所有值设置为“0”。在一些实施例中,每当信息从高速缓存中被逐出时,布隆过滤器的对应索引可以被设置为“0”,尽管这可能导致对被散列时对应于相同索引的其他地址的假否定。
在一些实施例中,布隆过滤器可在本文中描述为具有“寿命周期”,并且被称为相对于这些寿命周期是“年长的”或“年轻的”。在布隆过滤器被刷新之后,新刷新的过滤器的后续查找很可能返回否定,而不管高速缓存的状态如何。随着时间的推移,随着信息被写入高速缓存,过滤器中的值将从“0”变为“1”,因此随着高速缓存被写入,新刷新的过滤器将“成熟”。为了减轻从“最年轻”(最近被刷新)的过滤器返回可能的假否定,本公开的许多实施例利用至少两个不同的过滤器。例如,在一些实施例中,过滤器的寿命可以被设置为10,000个周期,这意味着每10,000个周期,过滤器被刷新。然而,使用两个过滤器,刷新可以偏移5,000个周期。
作为说明性示例(但暂时忽略以上出于示例的目的所解释的“假肯定”的可能性),如果数据地址在7,000个周期之前(即,在较年轻的过滤器被刷新之前)被高速缓存,则它将仅出现在较年长的过滤器中。换句话说,较年长的过滤器在对应于地址的散列的索引处将具有值“1”,但是较年轻的过滤器在相同索引处将具有“0”。然而,如果数据地址在12,000个周期之前(即,在两个过滤器都被刷新之前)被高速缓存,则它将不会出现在任一过滤器中。另一方面,如果在最年轻的过滤器被刷新之后数据地址被高速缓存,则两个过滤器都将指示该数据地址被高速缓存。
当检查过滤器以确定地址是否已被高速缓存时,***可以取两个(或更多)过滤器的逻辑OR。这减轻了最年轻的过滤器的错误否定。当高速缓存被写入时,所有的布隆过滤器的对应索引可以被设置为“1”。因此,检查过滤器的逻辑OR与检查最年长的过滤器实际上相同(但是取OR可能比跟踪和确定哪个过滤器已经过去最长时间而没有被刷新更快和更有效)。
在一些实施例中,不是如在以上讨论的“二进制”布隆过滤器中那样具体地将值设置为“1”,而是可以递增该值。这样,布隆过滤器可以表示被散列到特定输出的(被写入到高速缓存的信息的)地址的次数。在一些实施例中,可以实现多个这样的布隆过滤器,其中检查过滤器包括对每个索引取最大值(例如,如果两个过滤器是[0,0,1,0]和[1,0,3,0],则检查过滤器的***可以检查来自[1,0,3,0]的值)。如同上面参照“二进制”过滤器(其值被限制为“1”或“0”的过滤器)所描述的逻辑OR一样,这在功能上与检查“最年长”的过滤器相同。虽然本公开集中于更简单的“二进制”过滤器实施例,但是这不是限制性的。如本领域普通技术人员将理解的,具有两个以上可能值的布隆过滤器可以以最小的修改来实现。
在一些实施例中,是否预取的决定可以进一步通过认识所使用的散列算法的特定属性(或“行为”)来通知。例如,不同的散列算法可以具有不同大小的“输出空间”(给定可能的输入范围的情况下可能的输出值的范围)。这可以与跟踪其地址散列到特定输出的指令已经被高速缓存了多少次(例如,以便更准确地确定给定指令已经被高速缓存的可能性)结合使用。作为简单的示例,散列算法可以简单地将输入地址除以二,向下取整,并且布隆过滤器可以暗示两个先前的高速缓存写入存储其存储器地址被散列到给定索引的信息。如果候选对象地址散列到给定索引,则在整个地址空间中仅存在两个可能的能够散列到特定索引(索引*2以及索引*2+1)的存储器地址的知识与布隆过滤器的两个先前的高速缓存写入属于散列到该索引的存储器地址的指示相结合,可以强烈地暗示所讨论的信息被高速缓存了。然而,与均散列到相同索引的两个地址处的信息被写入到高速缓存一次相反,这两个高速缓存写入仍然可能是单个地址处的信息被写入到高速缓存两次的结果。任一情况都可能导致过滤器具有值“2”,因此错误肯定仍然是可能的。
作为说明性示例,第一“散列”算法的输出可能是输入数的最后一个数字(“多个一”)(因此,输入“64”将产生输出“4”,输入“1024”也将产生相同的输出“4”,并且输入“4096”将产生输出“6”等等)。第二散列算法的输出可以是输入除以16,向下取整(因此,输入“64”将产生输出“4”,输入“1024”将产生输出“64”,输入“4097”将产生输出“256”等等)。值得注意的是,第一算法仅具有10个可能的输出,0-9,因此,在具有多于10个可能的不同输入的***中,重复输出是不可避免的。虽然第二算法的向下取整也会导致重复,但是具有超过159个可能输入的***将具有更多的可能输出,并且因此具有比第一算法的“输出空间”更大的“输出空间”。
图1示出了根据本公开若干实施例的包括在决定是否预取信息之前检查布隆过滤器内容的高级高速缓存监视方法100。方法100可以由实现一个或多个存储器高速缓存的计算机***(例如,图4的***400)执行。
方法100包括在操作102确定地址的集合。在一些实施例中,可以响应于检测到高速缓存命中而执行操作102。在一些实施例中,操作102可以响应于读取请求而周期性地执行(例如,在每5个读取请求之后,在每个读取请求之后等等)。操作102可以包括确定第一读取请求的地址。操作102还包括基于第一读取请求的地址来确定一个或多个后续地址。一个或多个后续地址被用作“预期候选对象”的集合。在一些实施例中,预取候选对象的集合可以仅包括单个地址(例如,紧跟第一读取请求的地址之后的地址)。其它数量的预取候选对象也是可能的(例如,之后的3个地址、之后的5个地址等等)。在方法100在数据高速缓存的背景下执行的实施例中,该组可以包含显著更多的地址(例如,之后的5,000个地址)。
方法100还包括在操作104生成预取候选对象地址的散列。可以利用各种散列方法;例如,在一些实施例中,操作104可以包括对地址执行一个或多个数学运算(例如,除以2的幂)、裁剪地址的预设数量的字节等等。在一些实施例中,操作104可以包括对地址实施一个或多个已知的散列算法。
在一些实施例中,可以针对每个候选对象地址执行操作104。在一些实施例中,可以仅对候选对象地址的集合中的第一候选对象地址执行操作104;在这样的实施例中,可以基于第一候选对象做出预取决策,然后将其应用于其余的候选对象。
方法100还包括在操作106使用散列来索引到布隆过滤器中。操作106可以包括例如利用候选对象地址的散列作为向量的索引。在一些实施例中,可以利用多个布隆过滤器来减少假否定结果的机会(如将在下面进一步详细解释的)。在这些“多个过滤器”实施例中的一些实施例中,操作106可以包括选择单个过滤器并检查在散列导出的索引处的值。例如,操作106可以检查“最年长”的布隆过滤器(“最年长”的布隆过滤器是从被刷新以来已经过去最久的布隆过滤器)。为了减少跟踪各种过滤器的“年龄”的开销,在一些实施例中,通过“检查”,操作106可以改为对所有过滤器进行逻辑OR,并检查所得向量的索引。值得注意的是,仍然可以监视过滤器的“年龄”(以便确定是否应该刷新过滤器),但是相同的硬件结构可能不能用于这两种功能。例如,第一结构可以仅跟踪时间的流逝并且重置最年长的过滤器,而第二结构可以读取所有过滤器并且对它们进行OR运算。
作为说明性示例,如果***正在使用两个布隆过滤器,并且在操作104生成的候选对象地址的散列是十六进制10FB,则操作106可以包括通过取两个布隆过滤器的OR并且检查V(4347)是“1”还是“0”(注意十六进制10FB等同于十进制4347)来生成向量V。
方法100还包括在操作108通过分析操作106的结果来确定候选对象地址是否可能是高速缓存命中。例如,在一些实施例中,如果在操作106检查到的索引处的值是“1”,则认为对应的候选对象地址可能被高速缓存(108“是”)。值得注意的是,布隆过滤器的使用引入了假肯定的可能性;因此,即使在操作108作出的确定暗示候选对象地址的信息可能在高速缓存中(意味着对可能是高速缓存命中的候选对象地址的查找),高速缓存遗漏仍然是可能的。然而,可以经由方法100节省的资源可以实现更积极的预取方案,其通常在聚合中超过这个风险。
在操作102确定的预取候选对象地址不保证是准确的预测;无论高速缓存的状态如何,在操作104-108评估的地址最终都不会被调用。然而,这种可能性对于预取的概念来说通常是固有的,并且被很好地确立为可接受的风险。
如果对于该候选对象地址高速缓存命中是不期望的(108“否”),则方法100进行到操作112。操作112包括预取存储在候选对象地址处的信息。例如,操作112可以包括访问存储器并将存储在候选对象地址处的信息写入高速缓存。操作112还可以包括与典型的高速缓存操作一致地促使高速缓存的线被逐出。
方法100还包括在操作114更新布隆过滤器。无论候选对象是否可能是高速缓存命中,或者甚至无论候选对象是否被实际调用,布隆过滤器都被更新以反映什么被实际写入高速缓存。操作114可以包括例如基于写入到高速缓存的信息将过滤器的值设置为“1”。例如,在一些实施例中,不管被调用的下一地址如何,该下一地址都被散列(以类似于操作104的方式),并且散列的地址被用作布隆过滤器的索引。在该索引处布隆过滤器的值可以被设置为“1”,而不管其先前状态。值得注意的是,即使被调用的下一地址不是候选对象地址之一,布隆过滤器也被更新以反映存储在下一地址处的信息被写入高速缓存。在一些实施例中,操作114包括在将对应索引处的值设置为“1”之前等待信息实际上被写入高速缓存。
如果对于该候选对象地址,高速缓存命中是预期的(108“是”),则方法100从操作108前进到操作114。值得注意的是,操作114不包括预取候选对象地址,因为预期这将浪费资源,因为存储在候选对象地址处的信息预期已经在高速缓存中(尽管这可能由于假肯定而不正确)。相反,方法100在操作114进行到更新布隆过滤器。以下参考图2更详细地描述维护和/或更新布隆过滤器的过程。
图2示出了根据本公开的若干实施例的布隆过滤器更新方法200的高级流程图。方法200可由实现一个或多个存储器高速缓存的计算机***(例如图4的***400)执行。方法200可以使***能够维护和/或更新一个或多个布隆过滤器以跟踪高速缓存内容(继而有利地使得能够进行更积极的预取策略)。
方法200包括在操作202确定与请求相关联的信息的地址(在存储器中)。根据实施例,在操作202确定的地址可以对应于最近写入、正在写入或将要从存储器写入高速缓存的信息(例如,该地址可以是最近由应用调用的指令的存储器地址)。在一些实施例中,地址可以对应于已经在高速缓存中的信息。例如,如果应用程序调用指令并且随后的高速缓存查找导致高速缓存命中,则操作202可以包括确定指令的地址,即使该指令最近没有从存储器中读取。
方法200还包括在操作204检测高速缓存写入和/或命中。操作204可以包括例如检测与在操作202确定的地址相关联的请求是将导致高速缓存写入的调用或读取操作。在一些实施例中,在操作204检测到的高速缓存写入可能尚未发生(例如,操作204可以包括检测紧接在高速缓存写入之前的操作等等)。在一些实施例中,操作204可以包括检测高速缓存命中。
方法200还包括在操作206生成地址的散列。可以利用各种散列方法;例如,在一些实施例中,操作206可以包括对地址执行一个或多个数学运算(诸如,除以因子)、裁剪地址的预设数量的字节等等。在一些实施例中,操作206可以包括对地址实施一个或多个已知的散列算法。
方法200还包括在操作208确定布隆过滤器的寿命是否已到期。操作208可以包括例如读取、计算或以其它方式确定自从过滤器最后一次被刷新以来已经过去的周期的数量,并将该数量与预设最大值进行比较。如果该数量超过最大值,则布隆过滤器的寿命已到期(208“是”),且方法200前进到操作210的刷新过滤器。操作210可以包括例如将到期的过滤器的每个值设置为“0”。“周期计数”之外的其它度量可用于跟踪过滤器的“年龄”并且在本文中也被考虑,例如,已过去的时间、写入的次数(例如,对过滤器、高速缓存、存储器等中的一个或多个的写入次数)等等。刷新(例如,操作208和210)可以在方法200之外执行(换句话说,刷新不依赖于执行操作204)。
在操作208刷新到期的过滤器之后,或者如果布隆过滤器的寿命尚未到期(208“否”),则方法200前进到在操作212更新布隆过滤器的值。操作212可以包括例如将布隆过滤器的特定索引处的值设置为“1”。其值被修改的特定索引是基于在操作206生成的散列地址来确定的。例如,如果在操作202确定的地址是“4050”,并且操作206的散列输出是“50”,则操作212可包括将布隆过滤器的第50个值设置为“1”。
在一些实施例中,操作212可以将值递增1,而不是严格地将值设置为“1”。例如,如果地址的散列再次为“50”,但布隆过滤器的第50个值已经为“1”,则操作212可以将布隆过滤器的第50个值设置为“2”。这可以有效地使布隆过滤器能够跟踪在对应于特定索引的地址处的信息被写入高速缓存的次数。值得注意的是,这不一定是在特定地址处的信息已被写入高速缓存的次数,因为对(一个或多个)散列算法的一些地址输入可能导致相同的输出(相同的问题引起假肯定的可能性)。例如,如果三个地址“共享”索引(意味着所有三个地址散列到相同结果),则过滤器值4可能意味着一个地址已被写入高速缓存三次,第二地址已被写入高速缓存一次,并且第三地址尚未被写入高速缓存(从最后一次刷新开始)。在“递增”实施例中,不采用过滤器的OR,而可以采用MAX。
可以对所有过滤器执行方法200。在包括多个过滤器的实施例中,方法200的各方面(诸如,操作212)可以在每个过滤器上串行或并行地执行。方法200在212结束。
图3示出了与本公开若干实施例一致的示例布隆过滤器实施方式300、310和320。图3包括检查给定索引处的一系列布隆过滤器(300)、设置布隆过滤器的给定索引(310)以及刷新布隆过滤器(320)的示例。为了简化说明,这些示例包括具有8个值的布隆过滤器,其中,正被检查和/或更新的值是第4个(例如,地址可能已被散列以产生索引4)。这些示例由虚线301和303分开。
检查布隆过滤器(300)可以包括对每个布隆过滤器取逻辑OR。在图3中,描绘了正在检查3个布隆过滤器(302、304和306)。通过对过滤器302、304和306进行逻辑OR,生成结果向量308。如果结果向量308的第4个值(从左侧开始)是“1”,则这可以指示其地址被散列到索引“4”的信息在高速缓存中。由于该结果向量实际上与“最年长”的布隆过滤器相同,所以结果向量本身可被认为是另一个布隆过滤器。
在一些实施例中,可以在每个周期生成结果向量。这可以有利地减少检查地址是否可能导致高速缓存命中所需的时间,因为结果向量是提前生成的。然而,这可能导致额外的功耗,因为在整个向量被替换之前,可能仅检查结果向量的单个值。因此,在一些实施例中,直到所讨论的索引已知才生成结果向量,此时,在该索引处的每个布隆过滤器的值被检查(其中,在定位“1”时立即结束检查)。这可以导致功率节省,但是可能比结果向量方法更慢,因为它需要检查多个值并且仅在索引被确定之后开始。
如果其地址散列到索引“4”的信息被写入高速缓存,则如310所示,通过将布隆过滤器的第4个值设置为“1”来更新所有的布隆过滤器。在图3中,过滤器312、314和316分别表示过滤器302、304和306的更新版本。值得注意的是,当过滤器302和304第4个值为“0”时,过滤器312和314将其第4个值设置为“1”。在一些实施例中,当过滤器306第4个值已为“0”时,过滤器316仍可经历写入操作(用另一个“1”重写“1”)。虽然这可能是冗余的,但是它也可以降低***的复杂性。在一些实施例中,值被检查,并且只有在最终结果不同的情况下才被重写(换言之,检查可以确定过滤器306的第4个值是否为“1”,如果是,则可将其保留原样以节省资源)。在一些实施例中,不是将特定值设置为“1”,而是可以增加值。例如,过滤器316的第4个值可被设为“2”(在过滤器306的“1”上递增)。
过滤器也可以被周期性地刷新,其示例在列320中描绘。刷新过滤器可以包括将过滤器的所有值设置为“0”。如图3所示,过滤器326(其对应于过滤器306和316)被刷新。如上所述,可基于时间、周期计数、写入计数等来刷新过滤器。例如,过滤器可以每10,000个周期被刷新。在具有多个过滤器的实施例中(例如,图3中所描绘的实例),可以以相同的频率刷新过滤器,但彼此偏移。例如,可以每10,000个周期刷新过滤器322、324和326,但是可以在周期X刷新过滤器326,可以在周期(X+3,333)刷新过滤器322,可以在周期(X+6,667)刷新过滤器324,然后可以在周期(X+10,000)再次刷新过滤器326。结合同时更新过滤器(如列310所示)以及在检查所有过滤器时对它们取逻辑OR(如列300所示),这允许结果向量308基于最后10,000个周期来实质上反映高速缓存内容(但不受超过10,000个周期之前发生的任何操作的影响)。这样,结果向量308可以用相对快速的手段在没有显著开销的情况下检查高速缓存的内容。刷新的频率和过滤器的数量可以基于***配置来调整。例如,如果***的高速缓存特别小,使得高速缓存的内容通常在被写入的5,000个周期内被逐出,则过滤器可以被更频繁地刷新(例如,每5,000个周期,而不是每10,000个周期),以减少布隆过滤器检查产生“假肯定”的机会。
现在参考图4,示出了可以被配置为执行本公开的各个方面的示例计算机***400的高级框图,该各个方面例如分别包括方法200和300。根据本公开的实施例,示例计算机***400可以用于实现本文描述的方法或模块中的一个或多个以及任何相关功能或操作(例如,使用计算机的一个或多个处理器电路或计算机处理器)。在一些实施例中,计算机***400的主要组件可以包括一个或多个CPU 402、存储器子***408、终端接口416、存储接口418、I/O(输入/输出)设备接口420和网络接口422,所有这些组件可以直接或间接地通信耦合,以便经由存储器总线406、I/O总线414和I/O总线接口单元412进行组件间通信。
计算机***400可以包含一个或多个通用可编程中央处理单元(CPU)402,其中的一些或全部可以包括一个或多个核404A、404B、404C和404D,本文统称为CPU 402。在一些实施例中,计算机***400可以包含相对大的***的典型的多个处理器;然而,在其它实施例中,计算机***400可以替代地是单CPU***。每个CPU 402可以执行存储在CPU核404上的存储器子***408中的指令,并且可以包括一级或多级的板载高速缓存。
在一些实施例中,存储器子***408可以包括随机存取半导体存储器、存储设备或用于存储数据和程序的存储介质(易失性或非易失性)。在一些实施例中,存储器子***408可以表示计算机***400的整个虚拟存储器,并且还可以包括耦合到计算机***400或经由网络连接的其他计算机***的虚拟存储器。存储器子***408在概念上可以是单个单片实体,但是在一些实施例中,存储器子***408可以是更复杂的布置,诸如高速缓存和其他存储器设备的层级。例如,存储器可存在于多级高速缓存中,并且这些高速缓存可进一步按功能划分,使得一个高速缓存保存指令,而另一个高速缓存保存由一个或多个处理器使用的非指令数据。存储器还可以是分布式的,并且与不同的CPU或CPU组相关联,如在各种所谓的非均匀存储器存取(NUMA)计算机体系结构中的任何一种中所熟知的。在一些实施例中,主存储器或存储器子***804可以包含用于控制和流动由CPU 402使用的存储器的元件。这可以包括存储器控制器410。
尽管存储器总线406在图4中被示为提供CPU 402、存储器子***408和I/O总线接口412之间的直接通信路径的单个总线结构,但是在一些实施例中,存储器总线406可以包括多个不同的总线或通信路径,其可以以各种形式中的任何形式来布置,诸如分层的点对点链路、星形或网状配置、多层总线、并行和冗余路径、或任何其他适当类型的配置。此外,虽然I/O总线接口412和I/O总线414被示为单个相应的单元,但是在一些实施例中,计算机***400可以包含多个I/O总线接口单元412、多个I/O总线414或这两者。此外,虽然示出了将I/O总线414与通向各种I/O设备的各种通信路径分开的多个I/O接口单元,但是在其他实施例中,一些或所有I/O设备可以直接连接到一个或多个***I/O总线。
在一些实施例中,计算机***400可以是多用户大型计算机***、单用户***、或服务器计算机或具有很少或没有直接用户接口但从其它计算机***(客户端)接收请求的类似设备。此外,在一些实施例中,计算机***400可以被实现为桌上型计算机、便携式计算机、膝上型或笔记本计算机、平板计算机、袖珍计算机、电话、智能电话、移动设备或任何其他适当类型的电子设备。
注意,图4旨在描绘示例性计算机***400的代表性主要组件。然而,在一些实施例中,各个组件可以具有比图4中所表示的更大或更小的复杂度,可以存在不同于图4中所示的那些组件或除其之外的组件,并且这些组件的数量、类型和配置可以变化。
在整个公开中,参考将布隆过滤器的各种值设置为“1”(解释为暗示信息可能存在于高速缓存中)并且偶尔刷新该过滤器,将其所有值设置为“0”(解释为暗示信息不可能存在于高速缓存中)。如本领域技术人员将理解的,所使用的特定值(“1”和“0”)仅用于示例性目的,而不意味着限制。在此充分考虑其他可能的惯例;例如,在一些实施例中,“0”可以被解释为暗示信息可能存在于高速缓存中,而过滤器可以通过将所有值设置为“1”而偶尔被“刷新”。为了进一步澄清,在一些实施例中,“5”可以暗示信息可能存在于高速缓存中,而“36”可以暗示信息可能不存在于高速缓存中;这些值本身可以简单地用作指示符。
本发明可以是任何可能的技术细节集成水平的***、方法和/或计算机程序产品。计算机程序产品可以包括其上具有计算机可读程序指令的计算机可读存储介质(或多个介质),该计算机可读程序指令用于使处理器执行本发明的各方面。
计算机可读存储介质可以是能够保留和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述的任何合适的组合。计算机可读存储介质的更具体示例的非穷举列表包括以下:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、诸如上面记录有指令的打孔卡或凹槽中的凸起结构的机械编码装置,以及上述的任何适当组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,通过光纤线缆的光脉冲)、或通过导线传输的电信号。
本文描述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理设备,或者经由网络,例如因特网、局域网、广域网和/或无线网络,下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数据,或者以一种或多种编程语言(包括面向对象的编程语言,例如Smalltalk、C++等)和过程编程语言(例如“C”编程语言或类似的编程语言)的任意组合编写的源代码或目标代码。计算机可读程序指令可以完全在用户的计算机上执行,部分在用户的计算机上执行,作为独立的软件包执行,部分在用户的计算机上并且部分在远程计算机上执行,或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络连接到用户的计算机,包括局域网(LAN)或广域网(WAN),或者可以连接到外部计算机(例如,使用因特网服务提供商通过因特网)。在一些实施例中,为了执行本发明的各方面,包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化。
在此参考根据本发明实施例的方法、装置(***)和计算机程序产品的流程图和/或框图描述本发明的各方面。将理解,流程图和/或框图的每个框以及流程图和/或框图中的框的组合可以由计算机可读程序指令来实现。
这些计算机可读程序指令可以被提供给计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现流程图和/或框图的一个或多个框中指定的功能/动作的装置。这些计算机可读程序指令还可以存储在计算机可读存储介质中,其可以引导计算机、可编程数据处理装置和/或其他设备以特定方式工作,使得其中存储有指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或框图的一个或多个框中指定的功能/动作的各方面的指令。
计算机可读程序指令还可以被加载到计算机、其他可编程数据处理装置或其他设备上,以使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图的一个或多个框中指定的功能/动作。
附图中的流程图和框图示出了根据本发明的各种实施例的***、方法和计算机程序产品的可能实现的架构、功能和操作。在这点上,流程图或框图中的每个框可以表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替代实施方案中,框中所注明的功能可不按图中所注明的次序发生。例如,连续示出的两个框实际上可以作为一个步骤来实现,同时、基本同时、以部分或全部时间重叠的方式执行,或者这些框有时可以以相反的顺序执行,这取决于所涉及的功能。还将注意,框图和/或流程图图示的每个框以及框图和/或流程图图示中的框的组合可以由执行指定功能或动作或执行专用硬件和计算机指令的组合的专用的基于硬件的***来实现。
已经出于说明的目的呈现了对本公开的各种实施例的描述,但是其并非旨在是穷举的或限于所公开的实施例。在不背离所描述的实施例的范围和精神的情况下,许多修改和变化对于本领域的普通技术人员将是显而易见的。选择本文所使用的术语来解释实施例的原理、实际应用或对市场上存在的技术改进,或使本领域的其他普通技术人员能够理解本文所公开的实施例。
Claims (20)
1.一种方法,包括:
预测候选对象地址;
计算所述候选对象地址的散列;
基于所述散列检查第一布隆过滤器;以及
基于所述检查来确定预取存储在所述候选对象地址处的信息。
2.根据权利要求1所述的方法,其中,所述预测包括:
预测第二候选对象地址;
计算所述第二候选对象地址的第二散列;
基于所述第二散列检查所述第一布隆过滤器;以及
基于所述检查,确定预取存储在所述第二候选对象地址处的第二信息是不必要的。
3.根据权利要求1所述的方法,其中,所述预测包括:
确定高速缓存命中的第一地址;以及
基于所述第一地址确定所述候选对象地址。
4.根据权利要求1所述的方法,其中,所述检查包括:
比较所述第一布隆过滤器和第二布隆过滤器;
基于所述比较生成结果向量;以及
检查所述结果向量。
5.根据权利要求4所述的方法,还包括:
检测高速缓存写入;以及
基于所述散列更新所述第一布隆过滤器和所述第二布隆过滤器的值。
6.如权利要求5所述的方法,其中,所述更新包括递增所述值。
7.根据权利要求6所述的方法,还包括周期性地刷新所述第一布隆过滤器和所述第二布隆过滤器,其中,所述第一布隆过滤器的刷新从所述第二布隆过滤器的刷新偏移。
8.一种***,包括:
存储器;以及
处理单元,其耦合到所述存储器,其中,所述处理单元被配置为执行指令以:
确定写入到所述高速缓存的信息的地址;
计算所述地址的散列;
基于所述散列确定索引;以及
更新所述索引处布隆过滤器的值。
9.根据权利要求8所述的***,其中,所述处理单元还被配置为:
检测高速缓存命中;
预测与所述高速缓存命中相关联的候选对象地址;以及
基于所述布隆过滤器来决定是否预取存储在所述候选对象地址处的信息。
10.根据权利要求9所述的***,其中,所述预测包括:
确定高速缓存命中的第一地址;以及
基于所述第一地址确定所述候选对象地址。
11.根据权利要求9所述的***,其中,所述决定包括:
计算所述候选对象地址的候选散列;
基于所述候选散列来确定候选索引;以及
检查所述索引处所述布隆过滤器的候选对象值。
12.根据权利要求11所述的***,其中,所述检查包括:
将所述布隆过滤器与第二布隆过滤器进行比较;
基于所述比较生成结果向量;以及
检查所述结果向量。
13.根据权利要求8所述的***,其中,所述处理单元还被配置成周期性地刷新所述布隆过滤器和第二布隆过滤器,其中,所述布隆过滤器的刷新从所述第二布隆过滤器的刷新偏移。
14.根据权利要求8所述的***,其中,所述更新包括递增所述值。
15.一种计算机程序产品,所述计算机程序产品包括可由计算机执行以使所述计算机执行以下操作的程序指令:
确定写入到所述高速缓存的信息的地址;
计算所述地址的散列;
基于所述散列确定索引;以及
更新所述索引处布隆过滤器的值。
16.根据权利要求15所述的计算机程序产品,其中,所述指令还使得所述计算机执行以下操作:
检测高速缓存命中;
预测与所述高速缓存命中相关联的候选对象地址;以及
基于所述布隆过滤器来决定是否预取存储在所述候选对象地址处的信息。
17.根据权利要求16所述的计算机程序产品,其中,所述决定包括:
计算所述候选对象地址的候选散列;
基于所述候选散列来确定候选索引;以及
检查所述索引处所述布隆过滤器的候选对象值。
18.根据权利要求17所述的计算机程序产品,其中,所述检查包括:
将所述布隆过滤器与第二布隆过滤器进行比较;
基于所述比较生成结果向量;以及
检查所述结果向量。
19.根据权利要求15所述的计算机程序产品,其中,所述指令还使得所述计算机周期性地刷新所述布隆过滤器和第二布隆过滤器,其中,所述布隆过滤器的刷新从所述第二布隆过滤器的刷新偏移。
20.根据权利要求15所述的计算机程序产品,其中,所述更新包括递增所述值。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/079,619 | 2020-10-26 | ||
US17/079,619 US11816034B2 (en) | 2020-10-26 | 2020-10-26 | Fast cache tracking to support aggressive prefetching |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114490445A true CN114490445A (zh) | 2022-05-13 |
Family
ID=78497921
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111213899.1A Pending CN114490445A (zh) | 2020-10-26 | 2021-10-19 | 支持积极预取的快速高速缓存跟踪 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11816034B2 (zh) |
JP (1) | JP2022070218A (zh) |
CN (1) | CN114490445A (zh) |
DE (1) | DE102021123290A1 (zh) |
GB (1) | GB2604205B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11960544B2 (en) * | 2021-10-28 | 2024-04-16 | International Business Machines Corporation | Accelerating fetching of result sets |
US11822922B2 (en) * | 2021-12-31 | 2023-11-21 | International Business Machines Corporation | Miss-driven instruction prefetching |
CN116049033B (zh) * | 2023-03-31 | 2023-07-28 | 沐曦集成电路(上海)有限公司 | 一种高速缓冲存储器Cache读写方法、***、介质及设备 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8301650B1 (en) * | 2008-12-19 | 2012-10-30 | Google, Inc. | Bloom filter compaction |
US8290972B1 (en) * | 2009-04-29 | 2012-10-16 | Netapp, Inc. | System and method for storing and accessing data using a plurality of probabilistic data structures |
AU2010200866B1 (en) * | 2010-03-08 | 2010-09-23 | Quantum Corporation | Data reduction indexing |
US20110276744A1 (en) * | 2010-05-05 | 2011-11-10 | Microsoft Corporation | Flash memory cache including for use with persistent key-value store |
CN103080910B (zh) * | 2010-09-09 | 2016-06-01 | 日本电气株式会社 | 存储*** |
US8868843B2 (en) * | 2011-11-30 | 2014-10-21 | Advanced Micro Devices, Inc. | Hardware filter for tracking block presence in large caches |
US8472983B1 (en) * | 2011-12-07 | 2013-06-25 | Cisco Technology, Inc. | Selective location-aware paging |
US9519614B2 (en) * | 2012-01-10 | 2016-12-13 | Verizon Digital Media Services Inc. | Multi-layer multi-hit caching for long tail content |
US9898445B2 (en) | 2012-08-16 | 2018-02-20 | Qualcomm Incorporated | Resource prefetching via sandboxed execution |
US20140053064A1 (en) | 2012-08-16 | 2014-02-20 | Qualcomm Incorporated | Predicting the usage of document resources |
US9378021B2 (en) | 2014-02-14 | 2016-06-28 | Intel Corporation | Instruction and logic for run-time evaluation of multiple prefetchers |
US10691731B2 (en) * | 2015-11-26 | 2020-06-23 | International Business Machines Corporation | Efficient lookup in multiple bloom filters |
US10579530B2 (en) * | 2016-05-31 | 2020-03-03 | Intel Corporation | Prefetch filter cache for a processor |
US10642618B1 (en) * | 2016-06-02 | 2020-05-05 | Apple Inc. | Callgraph signature prefetch |
US10747667B2 (en) * | 2018-11-02 | 2020-08-18 | EMC IP Holding Company LLC | Memory management of multi-level metadata cache for content-based deduplicated storage |
US11847053B2 (en) * | 2020-03-27 | 2023-12-19 | Intel Corporation | Apparatuses, methods, and systems for a duplication resistant on-die irregular data prefetcher |
-
2020
- 2020-10-26 US US17/079,619 patent/US11816034B2/en active Active
-
2021
- 2021-09-08 DE DE102021123290.2A patent/DE102021123290A1/de active Pending
- 2021-10-06 GB GB2114291.4A patent/GB2604205B/en active Active
- 2021-10-13 JP JP2021167837A patent/JP2022070218A/ja active Pending
- 2021-10-19 CN CN202111213899.1A patent/CN114490445A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
DE102021123290A1 (de) | 2022-04-28 |
GB2604205B (en) | 2023-06-14 |
US11816034B2 (en) | 2023-11-14 |
GB202114291D0 (en) | 2021-11-17 |
JP2022070218A (ja) | 2022-05-12 |
US20220129385A1 (en) | 2022-04-28 |
GB2604205A (en) | 2022-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10482032B2 (en) | Selective space reclamation of data storage memory employing heat and relocation metrics | |
US8972662B2 (en) | Dynamically adjusted threshold for population of secondary cache | |
CN114490445A (zh) | 支持积极预取的快速高速缓存跟踪 | |
US20130138867A1 (en) | Storing Multi-Stream Non-Linear Access Patterns in a Flash Based File-System | |
US10740240B2 (en) | Method and arrangement for saving cache power | |
US8364904B2 (en) | Horizontal cache persistence in a multi-compute node, symmetric multiprocessing computer | |
US9582423B2 (en) | Counter-based wide fetch management | |
US9524100B2 (en) | Page table including data fetch width indicator | |
US8661169B2 (en) | Copying data to a cache using direct memory access | |
US20230315627A1 (en) | Cache line compression prediction and adaptive compression | |
US11182293B2 (en) | Operating different processor cache levels | |
US9483180B2 (en) | Memory-area property storage including data fetch width indicator | |
US20230297382A1 (en) | Cache line compression prediction and adaptive compression |
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 |