CN116909942A - 在包括反向高速缓存和主高速缓存的高速缓存系统中使用重影列表进行高速缓存插入和逐出的方法 - Google Patents

在包括反向高速缓存和主高速缓存的高速缓存系统中使用重影列表进行高速缓存插入和逐出的方法 Download PDF

Info

Publication number
CN116909942A
CN116909942A CN202310379646.4A CN202310379646A CN116909942A CN 116909942 A CN116909942 A CN 116909942A CN 202310379646 A CN202310379646 A CN 202310379646A CN 116909942 A CN116909942 A CN 116909942A
Authority
CN
China
Prior art keywords
cache
entry
list
ghost
reverse
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
Application number
CN202310379646.4A
Other languages
English (en)
Inventor
K·B·德赛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dell Products LP
Original Assignee
Dell Products LP
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Dell Products LP filed Critical Dell Products LP
Publication of CN116909942A publication Critical patent/CN116909942A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • G06F12/127Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning using additional replacement algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/122Replacement control using replacement algorithms of the least frequently used [LFU] type, e.g. with individual count value
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/123Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/502Control mechanisms for virtual memory, cache or TLB using adaptive policy

Abstract

本发明涉及在包括反向高速缓存和主高速缓存的高速缓存系统中使用重影列表进行高速缓存插入和逐出的方法。公开了一种包括反向高速缓存和主高速缓存的高速缓存系统。反向高速缓存被配置为识别用于插入到主高速缓存中的候选者。反向高速缓存存储诸如指纹和索引值的条目,这些条目是数据的表示或标识数据。当该条目已被访问多次或是基于反向高速缓存的操作而被提升的候选者时,与该条目相对应的数据被提升到主高速缓存。主高速缓存被配置为使用最近性、频率和时间调整来逐出条目。主高速缓存和反向高速缓存可以类似地配置有最近列表、频繁列表和/或重影列表,但操作不同。

Description

在包括反向高速缓存和主高速缓存的高速缓存系统中使用重 影列表进行高速缓存插入和逐出的方法
技术领域
本发明的实施方式总体涉及计算系统中的高速缓存。更具体地,本发明的至少一些实施方式涉及用于将数据插入到计算系统中的高速缓存中的系统、硬件、软件、计算机可读介质和方法。
背景技术
在计算系统中,数据通常存储在诸如硬盘驱动器的存储设备上。当需要数据时,会访问该硬盘驱动器以检索和使用数据。为了改进这一过程,可以使用高速缓存。高速缓存通常在比硬盘驱动器更快的存储器中实现。硬盘驱动器中的数据可以被高速缓存在高速缓存中,并可以被更快地访问。因此,高速缓存倾向于至少通过避免在高速缓存数据时需要访问硬盘驱动器而提高计算系统的性能。
然而,高速缓存的大小通常是有限的或固定的,通常比硬盘驱动器小。因此,应用程序所需的一些数据可能不存在于高速缓存中,从而导致高速缓存未命中。为了提高性能和提高高速缓存命中率,需要存储将从高速缓存访问的数据。例如,与只使用一次或两次的高速缓存数据相比,高速缓存多次使用或访问的数据可能更有用。传统上,这是通过使用各种逐出策略来实现的。通常,逐出策略的目标是逐出访问频率低于高速缓存中的其他数据的数据。除了逐出数据外,将数据插入高速缓存也会影响性能。使用一次并插入到高速缓存中的数据可能会消耗高速缓存中的空间,这些空间可以更好地用于存储被访问多次的数据。
附图说明
为了描述可以获得本发明的至少一些优点和特征的方式,将参考附图中所示的本发明的具体实施方式,对本发明的实施方式进行更具体的描述。要理解这些附图仅描绘了本发明的典型实施方式,因此不应被视为对其范围的限制。将通过使用附图以附加的特征和细节来描述和解释本发明的实施方式,其中:
图1A公开了高速缓存、例如自适应替换高速缓存的各个方面;
图1B公开了可以与主高速缓存结合使用的反向高速缓存的各个方面;
图2公开了将条目从反向高速缓存提升到主高速缓存的各个方面以及从反向高速缓存中逐出条目的各个方面;
图3公开了操作反向高速缓存以将条目提升到主高速缓存的各个方面;
图4公开了从反向高速缓存中逐出条目的各个方面;
图5公开了操作反向高速缓存的各个方面,该反向高速缓存包括最近列表和频繁列表;
图6公开了操作反向高速缓存的各方面,该反向高速缓存包括重影最近列表、最近列表、重影频繁列表、和频繁列表;
图7A公开了调整高速缓存中的时间戳的各个方面;
图7B公开了调整高速缓存中的时间戳的补充方面;
图7C公开了从高速缓存中逐出条目的各个方面;
图8A公开了在包括重影列表的高速缓存中调整时间戳的各个方面;
图8B公开了从包括重影列表的高速缓存中逐出条目的各个方面;
图9公开了操作包括主高速缓存和反向高速缓存的高速缓存系统的各方面;
图10公开了高速缓存系统的各个方面;以及
图11公开了计算设备或计算系统的各个方面。
具体实施方式
本发明的实施方式总体涉及高速缓存、高速缓存系统和高速缓存操作。更具体地,本发明的至少一些实施方式涉及用于高速缓存操作的系统、硬件、软件、计算机可读介质和方法,所述高速缓存操作包括高速缓存条目操作、高速缓存管理操作、高速缓存控制操作、高速缓存插入操作和/或高速缓存逐出操作。
有效的高速缓存逐出和/或插入操作可以改善高速缓存的性能、使用高速缓存的应用程序、以及计算系统的操作的性能。本发明的实施方式涉及高速缓存操作,使得最近使用和/或最频繁使用的项目被插入到高速缓存中。通过以更深思熟虑的方式将数据插入高速缓存,高速缓存中的数据更有可能被访问,因此,提高了高速缓存命中率,从而提高了计算系统的性能。
本发明的实施方式涉及在各种高速缓存方法的上下文中描述的反向高速缓存,各种高速缓存方法包括基于频率(例如最不频繁使用的(least frequently used,LFU))的方法、基于最近性的方法(如最近最少使用的(least recently used,LRU))、以及基于时间的方法。作为示例而非限制,最近性指的是条目相对于其他条目被访问的时间,频率指的是条目已经被访问的次数。频率也可能包括最近性的方面。时间指的是条目已经在高速缓存中的时间。本发明的实施方式还涉及结合主高速缓存使用反向高速缓存。反向高速缓存可以实现条目标准,该条目标准确定哪些条目从反向高速缓存提升到主高速缓存。进入标准基于最近性、频率和/或时间。可以基于最近性、频率、和/或时间来管理从主高速缓存的逐出。
本发明的实施方式也在自适应替换高速缓存(ARC)的上下文中公开。ARC是一种同时使用最近性和频率的高速缓存管理方法。在描述反向高速缓存的操作之前,公开包括本发明的实施方式的各方面的示例高速缓存的操作。
图1A公开了自适应替换高速缓存的各个方面。自适应替换高速缓存或高速缓存100通常具有由框110表示的固定大小。存储在高速缓存100中的内容或数据由条目列表112表示,条目列表112例如包括最近条目118和频繁条目120。最近条目118包括最近列表102和重影最近列表116。频繁条目120包括频繁列表104和重影频繁列表114。最近列表102和重影最近列表116通常被配置为存储或列出关于最近性的条目。频繁列表104和重影频繁列表114被配置为存储或列出高速缓存100中关于频率和/或最近性的条目。
列表102的顶部和列表104的顶部与标记106(示出为“!”)相关联。标记108(示出为“^”)表示最近列表102和/或重影最近列表116的目标大小。在一个示例中,最近列表102和/或重影最近列表116的目标大小可以大于频繁列表104和/或重影频繁列表114的目标大小。实际上,标记106传达高速缓存100中的列表102和104的实际大小。如图所示,列表102、116、104和114的实际大小可以与目标大小不同。最近列表102、重影最近列表116、频繁列表104和/或重影频繁列表114的相对大小可以在高速缓存100的操作期间改变。
当条目被添加到列表102、116、104和114和/或从这些列表中移除时,它们的相对大小可能会改变。换句话说,标记106可以在高速缓存100的操作期间移动或改变。标记106可以参考相对于条目列表112的定位或位置。
最近列表102中的条目被示出为在标记106的左侧。当条目被添加到最近列表102时,该条目被添加在顶部(例如,在标记106旁边),并且最近列表102中的其余条目根据需要向左(或远离标记)偏移。最近列表102的末尾或底部的条目偏移到重影最近列表116中。随着时间的推移,条目可以从重影最近列表116中被逐出。
类似地,添加到频繁列表104的条目被添加到标记106的右侧,并且频繁列表104中的其余条目根据需要向右偏移。退出频繁列表104的条目进入重影频繁列表114。最终,重影频繁列表114中的条目被逐出。
最近列表102和重影最近列表116的操作非常类似于LRU(最近最少使用)列表。最近列表102和重影最近列表116用于高速缓存100中的最近条目。最近列表102中的条目已经被访问过一次。频繁列表104和重影频繁列表114被配置为存储已经被访问多次的条目。
高速缓存100的新条目被添加到最近列表102的顶部,并逐渐向左推移(在该视觉示例中)。最终,这些条目被从最近列表102推移到重影最近列表116中,然后被从重影最近列表116中逐出。类似地,进入频繁列表104的条目被添加在频繁列表104顶部。这些条目向右移动到重影频繁列表114中,并且最终从高速缓存100中被逐出。
在一个示例中,列表102、116、104和114中的每一者基本上作为最近最少使用/最不频繁使用列表操作。然而,如前所述,频繁列表104和重影频繁列表
114也考虑了访问频率。在一个示例中,列表102、116、104和114(条目列表
112)是标识存储在高速缓存110中的数据的高速缓存目录的示例。在另一示例中,条目列表112可以表示数据。当向高速缓存100添加数据/从高速缓存100移除数据时,可以使用条目列表112。
此外,可以理解,条目列表112的实现可以没有方向的概念,但可以使用适当的数据结构来实现。通常,该结构被配置为使得条目以时间相关和/或频率的方式布置。然而,这种结构或布置不是限制性的,其他结构或列表布置也在本发明的实施方式的范围内。图1A的描述有助于理解高速缓存大小、高速缓存中的条目、条目的进入/逐出的方式、以及在目录或条目列表112中标识条目的方式之间的关系。
图1B示出了反向高速缓存的示例。更具体地,本发明的实施方式涉及反向高速缓存或反向自适应替换高速缓存。在一个示例中,反向高速缓存150可以与主高速缓存结合使用,以控制如何将条目添加或提升到主高速缓存。因此,高速缓存100可以是主高速缓存,并且反向高速缓存150可以确定将哪些条目添加到主高速缓存100。
图1B还可以通过将箭头122(见图1A)的方向反转为如图1B所示的高速缓存150中所示的箭头124所示的方向来表示反向高速缓存。在一个示例中,反向高速缓存150使用最近性和频率来识别可以插入到主高速缓存中的数据。在一个示例中,反向高速缓存150被配置为识别应当被添加或提升到主高速缓存的数据。因为反向高速缓存的一个示例功能是识别要提升到主高速缓存的数据,所以反向高速缓存150可以存储数据标识符(例如指纹)、索引值、其他条目等,而不是实际数据。
反向高速缓存150的操作可以将条目提升到主高速缓存。当条目被提升时,主高速缓存存储实际数据,而不是数据的指纹。反向高速缓存150的操作还可以包括重影最近列表152、最近列表154、频繁列表156和重影频繁列表158。最近条目160包括重影最近列表152和最近列表154,频繁条目162包括频繁列表156和重影频繁列表158。因此,条目列表164包括最近条目160和频繁条目162。
在一个示例中,反向高速缓存150存储数据的表示、数据的指针、唯一数据标识符、索引值或条目等,而不是存储实际数据。诸如指纹(例如,数据的散列)、索引值等的标识符可以存储在反向高速缓存中。
例如,最近列表154和频繁列表156可以存储数据的指纹。重影最近列表152和重影频繁列表158可以存储索引值,该索引值实际上指向数据的指纹。存储指纹比存储相应的数据消耗更少的空间。存储索引值比指纹消耗更少的存储空间。
图2公开了反向高速缓存的各个方面,该反向高速缓存被配置为识别要提升到主高速缓存的数据。在一个示例中,主高速缓存202可以是自适应替换高速缓存(见图1A),也可以使用其他方法来管理/逐出主高速缓存中的数据。图2示出了反向高速缓存210,该反向高速缓存210被配置为与主高速缓存202协作,该主高速缓存202存储或高速缓存例如应用程序可能使用的数据。在该示例中,反向高速缓存210被配置为识别可以被存储在主高速缓存202中或被提升到主高速缓存202的数据。当数据被反向高速缓存识别时,该数据将被提升到主高速缓存。在一个示例中,以自动方式或通过反向高速缓存210的操作将数据提升到主高速缓存202。
通常,反向高速缓存210识别已被访问多次的数据来提升到主高速缓存202。更具体地,反向高速缓存210的操作倾向于识别已经被访问多次和/或最近被访问的数据。已经被访问多次的数据是用于提升到主高速缓存202的候选者。在一些示例中,数据在提升到主高速缓存202之前必须被访问阈值次数。在一些示例中,不需要阈值,并且通过反向高速缓存210的操作来提升数据,使得已经被访问最多(与反向高速缓存210中的其他条目相比)或访问多次的数据可以被提升到主高速缓存202。
主高速缓存202和反向高速缓存210可以在同一存储器中实现,使得反向高速缓存210与主高速缓存202一起消耗存储器的一部分。反向高速缓存210和主高速缓存202也可以是分开的,并且可以分开管理。主高速缓存202和反向高速缓存210在通常比诸如硬盘驱动器之类的其他存储器更快的存储器(例如,随机存取存储器(RAM))中实现。主高速缓存202和/或反向高速缓存210可以被实现为L1、L2、L3存储器等。
主高速缓存202存储由数据204、206和208表示的数据,并且可以与如图1B所示的最近条目和/或频繁条目相关联。数据204、206和208可以是块、区块、文件等。在一个示例实施方式中,反向高速缓存210不存储实际数据,然而本发明的实施方式不排除这一点。在该示例中,反向高速缓存210包括存储对数据的引用的最近性部分220和频繁部分222,例如由指纹212、214、216和218表示的数据指纹。指纹是可以唯一地表示块、区块、文件或其他数据的标识符的示例。指纹可以是数据的散列。这允许反向高速缓存210与主高速缓存202相比较小。
反向高速缓存210的重影列表、或包括重影最近性部分240和重影频繁部分244的部分可以存储由索引值242和246表示的索引值。索引值通常小于指纹或其他标识符。反向高速缓存210的一些实施方式可以不包括重影部分。
存储在反向高速缓存210中的指纹和索引值通常可以称为反向高速缓存210中的条目。
反向高速缓存210的一个示例功能是识别可提升到主高速缓存202的数据,或基于反向高速缓存的状态或操作将数据提升到主高速缓存202。标准可以是一旦数据已经被访问了指定次数就提升数据。例如,反向高速缓存210进行操作,以确定指纹216满足标准(例如,访问了“x”次),并且相应的数据可以被提升到主高速缓存202作为数据206。替选地,反向高速缓存210的操作可以提升指纹216,而不管是否使用标准。在一些示例中,标准可以是灵活的,并且可以取决于反向高速缓存210的状态。如前所述,提升前应访问数据的次数(这是标准的一个示例)可以是固定的或灵活的。此外,标准的使用不是必需的。
例如,当反向高速缓存210已满并且将新条目(例如,新指纹)插入226反向高速缓存210中时,可以提升条目。当然,反向高速缓存210可以选择逐出224条目,而不是将条目提升到主高速缓存202。例如,如果最有可能被提升到主高速缓存202的特定条目仅被访问过一次或少于阈值次数,则新条目的插入226可能导致将该特定条目从反向高速缓存210中逐出而不提升该特定条目。
当指纹216满足用于提升的标准或阈值时,或者通过反向高速缓存210的操作(其实际上实现了标准或实现了灵活的标准),与指纹206相对应的数据被提升到主高速缓存202作为数据206。提升指纹216还可以将指纹216从反向高速缓存210中逐出。在另一示例中,诸如指纹214之类的指纹可以到达指纹214从反向高速缓存中被逐出224的位置。在该示例中,指纹214仅被访问过一次,并且位于最近性部分220的末端。这指示指纹214是最旧的条目(至少就最近性而言)并且是最近访问最少的条目。因此,新指纹或索引值的插入226可以导致指纹214的逐出224。
这可以取决于反向高速缓存210的状态或其他因素。例如,如果反向高速缓存210已满,则添加新条目会导致条目的提升或条目的逐出。在一个示例中,反向高速缓存210可以进行操作以自动提升条目。替选地,反向高速缓存210可以实现一个或多个标准。如果不满足这一个或多个标准,则逐出条目以容纳新条目。
在一个示例实施方式中,反向高速缓存210可以仅包括最近性部分220和频繁部分222。在该示例中,反向高速缓存210可以存储指纹并如先前所述进行操作。条目通常被从最近性部分220中逐出并且从频繁部分222中提升。在最近性部分220中被第二次访问的条目被移动到频繁部分222。
在另一个示例中,反向高速缓存210可以具有重影最近性部分240、最近性部分220、频繁部分222和重影频繁部分244。在该示例中,条目也从频繁部分222提升到主高速缓存202,并且从最近性部分220或重影最近性部分240从反向高速缓存210中逐出。然而,提升和逐出并不限于此。
更具体地,重影最近性部分240和最近性部分220通常包括已经被访问过一次的条目。当一个条目被插入226到反向高速缓存210中时,该条目作为索引值242从左边插入到重影最近性部分240中,并且重影最近性部分240中的条目和最近性部分220中的条目被推到右侧。在某一点(例如,到达标记230),最近性部分220中的条目被逐出224。
如前所述,在一个示例中,重影最近性部分240和重影频繁部分244存储索引值。例如,计算系统(例如数据保护系统)可以存储指纹的索引,其中每个指纹标识数据。指纹索引F中的条目Fi的索引i可以被存储为索引值242。当索引值242到达重影最近性部分240的末端时,该值被提升到最近性部分220作为指纹。
如果重影最近性部分240中的条目被第二次访问,则该条目被移动到重影频繁部分244。例如,索引值242在重影最近性部分240中。当与索引值242相对应的数据被第二次访问时,索引值242可以被移动到重影频繁部分244并且从右侧进入重影频繁部分244。这随后导致重影频繁部分244和频繁部分222中的条目向左移动,并且可能导致将频繁部分222中的条目提升228到主高速缓存202。
如果最近性部分220中的条目(现在存储为指纹)被第二次访问,则将该条目移动到重影频繁部分244作为索引值。在这种情况下,指纹可以被替换为其索引值。替选地,被第二次访问的最近性部分220中的指纹可以被移动到频繁部分222,因为它们已经作为指纹存在于反向高速缓存210中。在任一种情况下,在该视觉示例中,来自重影最近性部分和最近性部分220的索引值和指纹从频繁部分222或重影频繁部分244的右侧进入。在一个示例中,重影频繁部分244可以被省略,使得当重影最近性部分240中的条目被第二次访问时,该条目被提升为指纹并移动到频繁部分222。
一旦条目在反向高速缓存210的频繁侧,则该条目向左移动,并且在到达标记230之后,在某个点可以被提升228到主高速缓存202。重影频繁部分244中的条目也可以基于它们在频繁部分222和/或重影频繁部分244中的位置、和/或根据它们与频繁部分222和/或重影频繁部分244中其他条目的关系、或反向高速缓存210的整体状态而被逐出。如果条目在一段时间内没有被访问,则该条目可以被逐出。
然而,通常情况下,反向高速缓存210的新条目被插入重影最近性部分240中,并向右移动,在那里它们最终被逐出224,除非移动到反向高速缓存的频繁部分,在该视觉示例中,它们从右侧进入重影频繁部分244。在一个示例中,省略最近性部分220,使得高速缓存的最近性部分中的条目作为索引进入。因此,当条目处于重影最近性部分240的底部时,这些条目可以被逐出。
图3公开了反向高速缓存的各个方面,包括将反向高速缓存中的条目提升为主高速缓存。图3示出了反向高速缓存302。反向高速缓存302包括重影最近性或重影最近列表306(B1)、最近性或最近列表308(T1)、频繁列表310(T2)和重影频繁列表312(B2)。操作304包括将条目添加到反向高速缓存302的操作,并且示出了条目如何从列表306和308移动到列表310和312。
该组操作304示出了条目如何进入反向高速缓存302并在反向高速缓存302中移动。在该示例中,反向高速缓存302可以容纳总共6个条目,但是高速缓存的大小可以更大或更小,并且可以由用户确定或改变。在该示例中,重影列表306和312可以各自容纳一个条目。然而,列表306、308、310和312的大小可以是灵活的和可改变的。例如,如果前6个条目都仅被访问一次,则这些条目都不移动到反向高速缓存302的频率侧。因此,重影最近列表306的大小可以是1,最近列表308的大小可以是5(因此使用反向高速缓存302的完整大小,在本示例中为6个条目)。反向高速缓存302的大小也可以是动态可变的。
图3用于说明如何将数据高速缓存在反向高速缓存中并提升到主高速缓存。在该示例中,数据的大小是64KB,并且被划分为8个区块或段,每个区块或段为8KB。对每个区块或段执行指纹采样(例如,散列化),这导致指纹00、01、02、03、04、05、06和07。这些指纹中的每一个都对应于示例数据的一个区块。如前所述,反向高速缓存302被配置为存储指纹或其他数据标识符,而不是相应的数据。与每个区块的大小(在该示例中为8KB)相比,每个指纹的大小实质上更小(例如,32字节)。因此,与存储实际区块所需的空间相比,反向高速缓存的大小可以较小。
为了方便起见,指纹用于表示高速缓存中的条目。然而,当指纹存在于重影列表中时,指示符(例如,00、01、…)表示索引值,而不是完整指纹。
描述操作304中的每个操作。为了便于描述反向高速缓存的操作,每个指纹或索引值可以被称为反向高速缓存中的条目。然而,在一个示例中,每个条目至少包括索引值、指纹或其他数据标识符。每次指纹进入反向高速缓存或被访问时,该指纹的访问计数都可以递增。因此,高速缓存302也可以存储一些元数据。以下操作包括检索数据的get(获取)操作。在该示例中,反向高速缓存302具有四(6)的大小,因此一次可以容纳四个条目。
get 02导致02进入重影最近列表306中作为条目02。如前所述,02可以是索引值。
get 02将02条目从重影最近列表306移动到重影频繁列表312。当第二次访问最近列表中的一个条目时,该条目从最近列表移动到频繁列表。在该示例中,条目02从重影最近列表306移动到重影频繁列表312。在重影频繁列表312中,02条目仍然是索引值。
get 00使00进入重影最近列表306中作为条目00。此时,条目00是索引值。
get 01使01进入重影最近列表306中作为条目01,并将00条目向右偏移。01条目是索引值。作为索引值的00条目被数据的指纹所替换。
get 03使03进入重影最近列表306中,并将01和00条目向右偏移。01条目和00条目都被存储为指纹,因为它们在最近列表308中而不是在重影最近列表306中。
get 03将03条目从重影最近列表306移动到重影频繁列表312。作为索引值进入重影频繁列表312的03条目将02条目向左偏移。02条目当进入频繁列表310时,被替换为指纹。
get 03使03条目前进到频繁列表312中的02条目之前。02条目被移动到重影频繁列表312,并且被改变或替换为索引值。03条目被替换为指纹。
get 03不会导致反向高速缓存312发生变化。然而,可以为条目03记录附加访问。在这个阶段,03条目已经被访问了4次。
get 01将01条目从重影最近列表306移动到重影频繁列表312,并将03和02条目向左偏移。此时,00条目返回到重影最近列表306。因此,只有00条目在重影最近列表306中,因为其他条目01、02和03已经被访问了多于一次。02条目已被改变或替换为指纹。
get 03不会导致反向高速缓存302发生变化。然而,03条目已经被访问了5次。
除了注意到03条目已被访问6次之外,get 03不会导致发生变化。
get 05导致05进入重影最近列表306中。00条目向右偏移并且进入最近列表308。00条目被替换为指纹。
get 05将05条目移动到重影频繁列表312中。因此,频繁列表310包含条目03、02、01和00。
get 06将06条目作为索引值放入重影最近列表306中。
此时,反向高速缓存302已满。添加另一个条目可能会导致一个条目被提升或从反向高速缓存中逐出。因此,一个条目必须被提升或逐出,以便容纳新添加的条目。
get 07将07条目移动到重影最近列表306中。在该示例中,为了将07条目作为索引值插入到反向高速缓存302中,03条目被提升到主高速缓存。因此,与指纹03相对应的实际数据被插入到主高速缓存中,并且03条目被从反向高速缓存302中移除。如前所述,以这种深思熟虑的方式将数据插入主高速缓存确保了主高速缓存包含已被访问多次、并且以后更有可能被访问的数据。这可以提高主高速缓存的命中率。
如前所述,可以通过高速缓存的操作将条目提升到主高速缓存。例如,当反向高速缓存302已满并且添加了新条目时,下一个候选被提升。然而,也可以逐出条目。例如,如果要求一个条目在提升到主高速缓存之前必须被访问7次,那么get 07可能会导致条目06(这是最旧的最近条目,并且只被访问过一次)被逐出,因为条目03尚未被访问7次(或其他阈值)。替选地,可以从重影频繁列表312逐出条目05而不是条目06,因为条目05是索引值,而条目06是指纹。因此,当需要从反向高速缓存302中逐出条目时,存在各种选项。
在该示例中,03条目在被访问6次之后被提升。如果另一个条目(例如,08)被添加到反向高速缓存,则只被访问过两次的条目02将被提升到主高速缓存。在一个示例中,这表明将条目提升到主高速缓存的阈值可以不同,并且可以基于高速缓存的操作而发生。更具体地,为新条目腾出空间可以简单地将频繁列表310左侧的条目提升到主高速缓存。
替选地,如果硬阈值在适当的位置,这可能会导致从反向高速缓存302中逐出条目。例如,如果访问的最小数量是3,则在该示例中条目02不能被提升,并且可能需要逐出。逐出可以从最近列表308(可以逐出最旧的条目)或从重影频繁列表312(可以逐出具有最少访问次数的条目)发生。然而,在这些示例中,典型的操作是提升条目。
图4公开了从反向高速缓存中逐出条目的各个方面。图4示出了反向高速缓存402中的示例操作404,反向高速缓存402是反向高速缓存302的一个示例。在该示例中,操作404在被配置为保存六个条目的反向高速缓存中执行。
描述每个操作404。
get 02将02作为索引值放置在重影最近列表406中。
get 02:将条目02移动到重影频繁列表412。
get 00将00作为索引值放置在重影最近列表406中。
get 01将01作为索引值放置在重影最近列表406中,并将00条目向右推移,在此索引值被替换为指纹。
get 03将03放置在重影最近列表406中,并将条目01和00向右推移。
get 04将04放置在重影最近列表406中,并将条目03、01和00向右推移到最近列表408中。
get 05将05放置在重影最近列表406中,并将条目04、03、01和00向右推移到最近列表408中。
在该示例中,在频繁列表410中不存在条目。然而,高速缓存已满(6个条目存储在反向高速缓存402中)。
get 06将06放置在重影最近列表406中。条目00被从反向高速缓存402中逐出,而没有被提升到主高速缓存。条目00是最近侧中最旧的条目,并且只被访问过一次。因此,条目00被逐出。
在一个实施方式中,反向高速缓存是一种用于将数据添加或插入主高速缓存的选通机构。在一个示例中,反向高速缓存被配置为使得只有被访问多于一次的条目被提升或进入到主高速缓存。反向高速缓存中数据只被访问过一次的条目保留在最近性侧,并且随着更近被访问的数据的条目被添加到反向高速缓存中,而数据只被访问过一次的条目最终将从反向高速缓存中被逐出。同时,被访问多于一次的条目位于要提升到主高速缓存的路径上。
通过合并重影列表,反向高速缓存的实施方式允许扩展反向高速缓存的大小,同时限制实现反向高速缓存所需的内存量。
图5示出了高速缓存系统的示例。高速缓存系统500包括反向高速缓存502和主高速缓存508,并且还示出了逐出操作和插入操作。在该示例中,高速缓存系统不包括重影最近列表或重影频繁列表。
反向高速缓存502包括最近列表512(T1)和频繁列表514(T2)。命令504表示数据访问,并导致反向高速缓存502中的操作。在该示例中,反向高速缓存502总共容纳4个条目。
最初,执行命令get 02、get 03、get 01和get 00。这导致条目00、01、03、02在最近列表512的内容506中。高速缓存502已满。当执行get 05时,02条目被逐出510。在该示例中,条目00、01、02、03和05都被访问过一次,并且都在最近列表512中。条目02在最近列表512的底部,并且当添加了更近的条目05时,条目02被逐出510。
下一组命令示出将条目03提升到主高速缓存508。get 03命令将条目03移动到频繁列表514,因为这是对最近列表512中的条目的第二次访问。执行命令get 01、get 00和get 05导致最近列表512中的所有条目都已被移动到频繁列表514的情况。
然后执行下一个命令get 06。因为高速缓存502已满,所以将条目06插入到最近列表512中也导致条目03被提升到主高速缓存508。
实际上,进入反向高速缓存502的条目,有效地进入标准评估。进入最近列表512中的条目被朝向“!”推移并且可以被逐出。频繁列表514中的条目也被朝向“!”推移,并且可以被提升到主高速缓存508。因此反向高速缓存502保存对数据(例如指纹)的引用,并且允许基于反向高速缓存502的标准来选择被提升到主高速缓存508的数据。例如,只有被访问过多于一次的数据才有资格进入主高速缓存508。
通过将对数据的引用存储在反向高速缓存502中,可以节省空间并更有效地使用空间。
图6示出了高速缓存系统的另一个示例。高速缓存系统600包括反向高速缓存610和主高速缓存608。在该示例中,数据在左侧进入602反向高速缓存610中,或者更具体地,进入重影最近列表B1中。在一个示例中,新条目作为索引值被添加,该索引值小于数据的指纹。
在该视觉示例中,当条目向右移动时,该条目可以在进入最近列表T1之前被逐出604。在高速缓存系统600的一个示例中,可以不使用或不存在最近列表T1。
如果重影最近列表B1中的条目被第二次访问,则该条目被移动606到重影频繁列表B2(在一个示例中仍然作为索引值)。一旦在重影频繁列表B2中,该条目就可以向左移动到频繁列表T2中。当移动到频繁列表T2时,该条目被提升为数据的指纹。然后,该条目可以继续朝向“!”移动,此时,该条目被提升612到主高速缓存608。
更具体地,新条目进入重影最近列表B1,并逐渐被向右推移。在一个示例中,重影最近列表B1中的条目是索引值。如果该条目在重影最近列表B1中没有被再次引用,则该条目(指纹索引)被从重影最近列表B1中逐出。仅被引用一次的条目没有资格移动到频繁列表,并且不是进入主高速缓存608的候选者。
如果重影最近列表B1中的条目被第二次引用,则该条目进入频繁列表。更具体地,在一个示例中,该条目进入重影频繁列表B2。当该条目向左移动并进入频繁列表T2时,在频繁列表T2中引用指纹而不是索引。通过比较,索引值的大小可以较小(例如,5),而指纹可以较大,例如lx1234abd1234bbbf。
频繁列表T2中的条目可以被多次访问,并且可以逐渐朝向“!”移动,并且可以从反向高速缓存610中被逐出并进入主高速缓存608。
图7A公开了基于时间阈值的高速缓存管理的各个方面。在一个示例中,主高速缓存被实现为ARC高速缓存,并且本发明的实施方式旨在使用基于频率、最近性、和/或基于时间的调整来从主高速缓存中逐出数据。在该示例中,表710示出了存储四个条目00、01、02和03的高速缓存。对于每个条目,表710示出了最后访问的时间戳、使用频率、和使用最近性。使用频率大于1的条目在T2或频繁列表中,而使用频率等于1的条目在T1或最近列表中。
当基于时间(例如,早于某个时间)逐出条目时,与逐出标准相比,更近/更频繁使用的条目可能会因为其访问时间戳而被逐出。如果逐出过程仅限于逐出N个条目,则最近不太使用/不频繁使用的条目可能会保留在高速缓存中,因为逐出过程从未处理过这些条目(即,N个条目在到达这些条目之前已经被逐出)。
图7A中的表710示出了当逐出引擎712执行逐出过程以从高速缓存中逐出过时条目时,高速缓存条目的状态。在本示例中,逐出进程被配置为使用10:03:01的阈值时间逐出两个条目。使用该阈值,有三个条目是逐出的候选者(00、01、03),因为每个条目的最后访问的时间戳小于(或早于)阈值时间。然而,逐出过程被配置为最多逐出两个条目。如果高速缓存条目被线性处理,并且逐出的数量被限制为2,则条目00和01将被从高速缓存中逐出。
如表714所示,结果不是最佳的。表714示出了在运行逐出过程之后的高速缓存。如图所示,只有条目02和03保留在高速缓存中。这可能不是最佳结果。
例如,对高速缓存中剩余条目的最近性和频率的评估表明,条目03的时间戳早于或发生在条目00和01的时间戳之前。剩余的条目02和03的使用频率低于被逐出的条目00和01。与被逐出的条目00和01相比,剩余的条目03具有较少的使用最近性。这表明,当有更好的逐出候选者时,逐出线程会从高速缓存中逐出条目。更具体地,这表明条目03应该在条目00和01之前被逐出
图7B公开了使用调整因子的逐出操作的各个方面。调整因子被配置为提高高速缓存逐出操作的效率,并确保逐出引擎识别和逐出更佳的候选者。调整因子用于调整高速缓存条目的至少一个特征或元数据。
图7B示出了一个高速缓存720,它包括四个条目:00、01、02和03。条目02和03在T1列表中,而条目00和01在T2列表中。当逐出引擎在代表高速缓存条目的表722上执行时,为条目提供调整因子。将调整因子应用于最后一次访问的时间戳,以生成具有调整因子的最后一次访问的时间戳。因此,使用调整因子来生成经调整的时间戳。
调整因子可以通过多种不同的方式和配置来实现。仅作为示例而非限制,T1列表中的条目的调整因子可以如下确定。顶部条目(在高速缓存320的T1列表中为02)被赋予30秒的调整因子。在该示例中,T1列表中的下一个条目(03)被赋予25秒的调整因子。在该示例中,对于离列表顶部更远或离标记726更远的条目,调整因子减小。作为一般规则,仅通过示例,使用比离列表顶部更远的条目更大的调整因子来调整T1中的条目或最近列表中更靠近顶部的条目。调整因子降低的方式可以不同。在该示例中,每个条目的调整因子减少5秒。
T2或频繁列表中的条目的调整因子可以相同或不同。在该示例中,T2列表中的条目的调整因子是T1列表中的条目的调整因子的两倍。因此,条目01(在T2列表的顶部)具有60秒的调整因子,条目02具有50秒的调整因子。应用于T2列表中的条目的调整因子可以随着条目索引的增加而减小因子、常数等(列表顶部的条目的索引是0,第n个条目的索引为n)。
当逐出引擎728处理表722中表示的高速缓存720中的其特征或元数据已经用调整因子进行了调整的条目时,逐出引擎728识别逐出的单个候选者——条目03。在该示例中,即使逐出引擎728被配置为识别用于逐出的最多两个条目,情况也是如此。因此,如表724中所示,条目03被从高速缓存720中逐出。
更具体地,在该示例中,假设阈值时间是10:03:01,除了条目03之外的所有条目都具有大于或晚于该阈值时间的经调整的时间戳。此外,条目03具有最低的使用频率。此外,条目03具有比高速缓存320中的其他条目更低的最近性,并且条目03的使用频率等于条目02的使用频率。因此,与图7A相比,逐出引擎728逐出了条目,该条目是比由不使用调整因子的逐出引擎712逐出的条目00和01更好的逐出候选者。在一个实施方式中,使用频率不受调整因子的影响。
因此,本发明的实施方式提供了新颖的高速缓存逐出策略,并且能够同时逐出多个条目。频繁使用或最近使用的条目不会被逐出,因为调整因子会阻止这些条目基于时间阈值被识别为逐出的候选者。
图7C公开了用于执行逐出操作的方法的各方面。在一个示例中,高速缓存可以基于高速缓存中的条目的一个或多个方面或特征来实现逐出策略,所述一个或多个方面或特征包括但不限于最近性、频率、和时间(即,时间戳)。在一个示例中,逐出操作可以在识别逐出的候选者之前调整条目的至少一些特征或元数据。一些元素可以持续地、周期性地或比方法400的其他元素更不频繁地执行。
在该示例方法750中,高速缓存正常操作752,并且包括条目列表或高速缓存目录或数据。高速缓存条目列表可以包括最近列表和频繁列表。正常操作可以包括向高速缓存添加新条目或访问高速缓存中的现有条目。当这些动作发生时,条目列表将如前所述进行调整。
接下来,可以启动754或触发高速缓存逐出操作。在一个示例中,高速缓存逐出操作包括基于时间阈值的逐出操作的各方面。因此,可以建立或确定阈值时间。时间阈值可以默认地、通过用户输入等来确定。
一旦启动逐出操作,就可以生成756对高速缓存条目的调整。对高速缓存条目的调整都可以由逐出过程来确定。替选地,可以在条目被新添加或重新布置时确定或重新计算该调整。因此,当产生逐出操作时,可能已经生成了调整值。在某些示例中,可能需要刷新这些调整。生成756调整可以包括通过以调整因子调整或改变自上次访问以来的时间戳来生成经调整的时间戳(即,自上次访问以来的经调整的时戳)。
一旦生成了该调整或经调整的时间戳,就基于经调整的条目来识别758逐出的候选者。因为逐出操作基于时间阈值来识别候选者,所以通过将时间阈值与高速缓存条目的经调整的时间戳进行比较来识别候选者。
在一个示例中,逐出操作可以识别逐出的所有候选者。在这种情况下,候选者被识别758,并且最早的条目被逐出710。该数量可以受到最大值限制。在另一个示例中,逐出操作识别758候选者,直到找到最大数量的候选者为止。在任一种情况下或在其他实施方式中,逐出760所识别的条目(直到最大值)。在一个示例中,不需要从高速缓存中逐出最大数量的条目。
在这些示例中,本发明的实施方式允许基于时间阈值的高速缓存逐出操作来考虑高速缓存条目的最近性和/或频率,而不是简单地依赖于仅基于时间阈值的所识别的候选者。
图8A公开了通过将调整因子应用于高速缓存条目列表中的条目来逐出高速缓存条目的各个方面,高速缓存条目列表包括最近列表(T1)、重影最近列表(B1)、频繁列表(T2)和重影频繁列表(B21)。图8A示出了高速缓存802,它包括四个条目:00、01、02和03。高速缓存802包括T1或最近列表中的条目03和02以及T2或频繁列表中的条目01和00。重影最近列表B1和重影最近列表B2当前是空的。这与图7B中所示的高速缓存720是相同的高速缓存。
在时间10:04:01,条目02被命中或被访问504。因为这是对条目02的第二次命中或访问,所以如高速缓存806中所示,条目02被移动到频繁列表的顶部,并且条目00被移动到重影频繁列表B2。在该示例中,与条目00相关联的数据可以不从高速缓存中移除。尽管当条目移动到重影列表时数据经常被丢弃,但是在本发明的实施方式中存在条目在重影列表上并且数据不被丢弃的情况。例如,如果新条目(例如条目04)被添加到高速缓存,则如果高速缓存已满,则可能需要丢弃与重影列表中的条目00相关联的数据。
在一个示例中,当条目00移动到重影列表B2时,调整因子可以进一步减小,或者可以以比频繁列表T2的调整因子更快的速率减小。前面已经描述了最近列表和频繁列表的调整因子(或值)。现在描述重影列表B1和B2的调整因子。通过示例而非限制的方式描述这些调整因子。
例如,当最近列表或T1列表中的条目移动到最近列表的底部时,调整因子的改变量可以是一个常数。从i=0到i=n的最近列表调整因子计算如下,其中T1列表中的顶部条目是索引i=0:
调整因子i+1=调整因子i–常数。
类似地,频繁列表中的条目的调整因子可以表示如下(仅以最近列表的常数为例):
调整因子i+1=调整因子i–2*常数。
这些示例表明,T1列表和T2列表中的条目的调整因子可以是相关的,但这不是必需的。此外,常数可以用可变常数替换,使得每一步都将调整因子或值减少比先前减少更大的量。
重影列表的调整因子可以与最近列表和频繁列表的调整因子不同。例如,T1列表的常数可以是5秒。如果第一个(索引0)条目的调整因子为25秒,则T1列表中下一个条目的调整因子为20秒。如果条目落入重影列表,则调整因子可以以更快的速度减小(例如,加倍)。例如,如果高速缓存506中的条目03的调整因子是25秒,并且条目03移动到重影列表或B1列表,则调整因子将减少10秒(而不是5秒)而成为15秒。
因此,当一个条目在T1列表中向左移动时,每次移动调整因子会减少5秒。一旦条目在重影列表上,则调整因子将增加到10秒。重影列表B2的调整因子也可以是10秒,但也可以使用其他因子。
表808和810示出了对重影列表中的条目使用调整因子的示例。
如表808所示,当应用调整因子时,条目00(在高速缓存806的重影列表中)的调整因子为40秒。表810考虑了其中没有调整因子被应用于重影列表中的条目的示例。
如果高速缓存806已满并且执行了逐出操作,则为重影列表条目提供调整因子可以提高高速缓存806的性能。例如,如果在高速缓存806上使用10:02:59的时间阈值来执行基于时间阈值的操作,则应用调整因子并产生表808中所示的经调整的时间戳(具有调整因子的最后一次访问的时间戳)。这导致逐出条目03,因为只有条目03的经调整的时间戳早于时间阈值(10:01:25早于10:02:59)。
这是好的结果,因为条目03具有最差的最近性值4,并且只被访问过一次(访问频率)。相反,重影列表中的条目00具有使用频率2和最近性值3。因此,调整因子通过识别比重影列表中的条目更好的逐出候选者而提高了性能。
表810示出,在没有调整因子并且使用相同的时间阈值的情况下,条目00和03被从高速缓存806中逐出。这可能不如表808中所示的结果那样最佳。
除了最近列表和频繁列表之外,还对重影最近列表和重影频繁列表使用调整因子,可以逐渐减少应用于条目列表(该条目列表包括最近列表、重影最近列表、频繁列表和重影频繁列表)中的条目的调整因子,并允许条目在高速缓存中有更长的生存时间。
图8B公开了逐出操作的各个方面。该方法类似于方法750,并且进一步考虑了重影列表中的条目。在方法820中,高速缓存正在操作822。接下来,启动824高速缓存逐出操作。一旦启动,就将相关的调整因子应用于条目列表中的条目,以生成826调整,例如经调整的时间戳。在该示例中,条目列表包括最近列表及其相关联的重影列表、以及频繁列表及其相关联的重影列表。
基于被比作时间阈值的经调整的时间戳来识别828逐出的候选者。然后逐出830所识别的候选者。如前所述,被逐出的条目的实际数量可以受到限制。然而,不需要逐出多于一个条目,尽管本发明的实施方式有利地允许同时识别和逐出多个条目。
图9公开了使用网关机构(如反向高速缓存)将数据插入高速缓存的各个方面。在该示例中,识别902已经被请求的数据。例如,应用程序可以访问数据。在一个示例中,方法900是在确定所请求的数据不存在于主高速缓存中之后执行的。
确定所请求的数据(或指纹或其索引值)是否存在于904反向高速缓存中。如果条目(例如,所请求的数据的指纹或索引值)存在于反向高速缓存中(904处的“是”),则调整高速缓存中的条目906。例如,如果条目在最近侧(重影最近列表或最近列表),则将该条目移动到频繁侧。例如,将该条目移动到重影频繁列表中。如果该条目在频繁侧,则可以基于访问次数和/或访问时间在频繁列表内移动该条目。可以基于访问次数和/或基于访问的最近性来对频繁列表进行排序。因此,在频繁侧移动条目可以将条目移动到列表的顶部,也可以不将条目移动到列表的顶部。
例如,假设频繁列表中的第一个条目已被访问5次,频繁列表中接下来的三个条目已被访问3次。如果已被访问2次的条目被第三次访问,则该条目被移动到第二个位置,该位置位于已被访问3次的其他条目之前(由于最近性),但位于已被访问5次的条目之后。在另一个示例中,该条目被简单地移动到频繁列表的顶部,而不管其他条目已被访问了多少次。这允许反向高速缓存在操作以将条目提升到主高速缓存时,同时考虑频率和最近性。
如果条目不在反向高速缓存中(904处的“否”),则确定是否存在将提升908到主高速缓存的候选者。如果存在候选者(908处的“是”),则将候选者提升910到主高速缓存,并且将当前条目添加到反向高速缓存的最近列表。
如果没有要提升的候选者(908处的“否”),则确定是否从反向高速缓存中逐出912旧条目。如果存在要逐出的条目(例如,最近列表中最旧的条目或重影频繁列表中最近最少使用的条目),则从反向高速缓存中逐出914旧条目,并且将条目添加到反向高速缓存的最近列表中。
如果没有要逐出的候选者,则将条目添加916到反向高速缓存的重影最近列表。
当从反向高速缓存提升或逐出条目时,提升或逐出可以在各种情况下发生。在一个示例中,当反向高速缓存已满并且接收到高速缓存的新条目时,该决策发生。因此,为了将新条目添加到反向高速缓存中,需要通过逐出或提升另一个条目来为新条目腾出空间。
替选地,如果高速缓存中有空间,则可以简单地添加新条目。然而,即使在高速缓存未满的情况下(例如,基于访问阈值),仍然可以提升条目。当一个条目被访问一定次数(阈值)时,无论反向高速缓存是否已满,都可以提升该条目。
接下来,对主高速缓存进行管理918。更具体地,基于最近列表、频繁列表、和/或经调整的时间阈值来管理主高速缓存中的条目或数据。本发明的实施方式除了操作反向高速缓存(该反向高速缓存确定哪些条目被提升到主高速缓存)之外,还管理主高速缓存以确保条目如本文所讨论地被逐出。
图10公开了高速缓存系统的各个方面。高速缓存系统1000包括主高速缓存1004、反向高速缓存1006、和高速缓存引擎1002。高速缓存引擎1002可以是被配置为操作主高速缓存1004和反向高速缓存1006的高速缓存控制器。
在该示例中,反向高速缓存1006操作以识别要提升1008到主高速缓存1004的条目或数据。因此,高速缓存引擎1002可以操作反向高速缓存1006,并识别要从反向高速缓存1006提升1008和/或逐出1012的条目。反向高速缓存1006可以包括重影最近列表、最近列表、频繁列表和重影频繁列表的任何组合。重影最近列表和重影频繁列表可以被配置为存储索引值,而最近列表和频繁列表可以存储指纹或其他标识符。
主高速缓存1004可以是ARC高速缓存,其操作以基于最近性、频率、和/或经调整的时间值来逐出条目。主高速缓存1004和反向高速缓存1006可以具有以不同方式操作的类似结构(重影最近列表B1、重影频繁列表B2、最近列表T1和/或T2)。如本文所讨论的,反向高速缓存1006操作以识别要提升的条目,而主高速缓存1004操作以逐出过时的条目。参照图1A和图1B讨论了主高速缓存1004和反向高速缓存1006之间的操作的差异。
以下是对本发明的各个实施方式的示例操作环境的各个方面的讨论。该讨论不旨在以任何方式限制本发明的范围和实施方式的适用性。
一般地,本发明的实施方式可以结合系统、软件和组件来实现,这些系统、软件或组件单独和/或共同实现高速缓存操作和/或导致高速缓存操作的实现,该高速缓存操作包括高速缓存逐出操作、最不频繁使用操作、基于频率和/或最近性的操作、基于时间阈值的操作、或其组合。更一般地,本发明的范围包括所公开的概念在其中可能有用的任何操作环境。
本发明的至少一些实施方式提供了在现有备份平台(其实例包括Dell EMCNetWorker和Avamar平台以及相关备份软件)和存储环境(例如Dell EMC DataDomain存储环境)中实现所公开的功能。然而,一般地,本发明的范围不限于任何数据备份平台或数据存储环境。
示例云计算环境可以是公共的,也可以不是公共的,包括可以为一个或多个客户端提供数据保护功能的存储环境。云计算环境的另一示例是可以代表一个或多个客户端执行处理、数据保护和其他服务的环境。可以结合本发明的实施方式使用的一些示例云计算环境包括但不限于Microsoft Azure、Amazon AWS、Dell EMC云存储服务和Google云。然而,更一般地,本发明的范围不限于使用任何特定类型或实现方式的云计算环境。可以在该云计算环境中实现高速缓存操作。
除了云环境之外,操作环境还可以包括一个或多个能够收集、修改和创建数据的客户端。这些客户端可以在这些操作期间使用高速缓存。这样,特定的客户端可以使用一个或多个应用程序中的每一者的一个或多个实例,或者以其他方式与之相关联,所述应用程序针对包括高速缓存相关操作的数据执行这种操作。这种客户端可以包括物理机、或虚拟机(VM)或容器。
特别地,操作环境中的设备可以采取软件、物理机器、或VM、或容器或其任何组合的形式,尽管任何实施方式都不需要特定的设备实现方式或配置。相似地,数据保护系统组件(例如数据库、存储服务器、存储卷(LUN)、存储磁盘、复制服务、备份服务器、恢复服务器、备份客户端和恢复客户端)同样可以采取软件、物理机、虚拟机(VM)或容器的形式,尽管对于任何实施方式都不需要特定的组件实现方式。类似地,诸如数据库、存储服务器之类的数据保护系统组件可以包括在操作环境中。。
如本文所用,术语“数据”旨在涵盖广泛的范围。因此,该术语通过示例而非限制的方式包括例如可以由数据流分割过程产生的数据段、数据区块、数据块、原子数据、电子邮件、任何类型的对象、任何类型的文件(包括媒体文件、文字处理文件、电子表格文件和数据库文件)以及联系人、目录、子目录、卷、和上述一者或多者的任意组。
本发明的示例实施方式适用于能够以模拟、数字或其他形式存储和处理各种类型的对象的任何系统。尽管可以通过示例的方式使用诸如文档、文件、段、块、或对象的术语,但本发明的原理不限于表示和存储数据或其他信息的任何特定形式。相反,这些原理等同地适用于任何能够表示信息的对象。
值得注意的是,任何公开的过程、操作、方法和/或这些中的任一者的任何部分都可以响应于、由于和/或基于任何先前过程、方法和(或)操作的执行而执行。相应地,例如,一个或多个过程的执行可以是一个或更多个附加过程、操作和/或方法的后续执行的预测或触发。因此,例如,可以构成方法的各种过程可以通过例如刚才提到的示例的关系链接在一起或以其他方式彼此相关联。最后,虽然不必要,但在一些实施方式中,构成本文所公开的各种示例方法的各个过程以这些示例中所述的特定顺序执行。在其他实施方式中,构成所公开方法的各个过程可以以不同于所述特定序列的序列执行。
以下是本发明的一些其他示例性实施方式。这些仅通过示例的方式给出,并不旨在以任何方式限制本发明的范围。
实施方式1.一种方法,包括:识别对数据的请求;确定所请求的数据的条目是否存在于反向高速缓存中;当所请求的数据的所述条目不存在于所述反向高速缓存中时,将所述条目添加到所述反向高速缓存,其中,当所述条目存在于所述反向高速缓存中时,在所述反向高速缓存中调整所述条目;以及将候选条目从所述反向高速缓存提升到主高速缓存,并基于与每个条目相关联的元数据从所述主高速缓存中逐出条目,其中,所述元数据包括最近性值、频率值、时间戳和经调整的时间戳。
实施方式2.根据实施方式1所述的方法,其中,所述反向高速缓存包括重影最近列表、最近列表、频繁列表、和/或重影频繁列表,所述方法还包括:当所述条目存在于所述反向高速缓存中时,并且当所述条目在所述最近列表中或在所述重影最近列表中时,将所述条目移动到所述重影频繁列表。
实施方式3.根据实施方式1和/或2所述的方法,其中,将进入所述反向高速缓存的新条目添加到重影最近列表。
实施方式4.根据实施方式1、2和/或3所述的方法,还包括:在一段时间后以及当一条目未被第二次访问时,从所述反向高速缓存的所述重影最近列表中逐出该条目。
实施方式5.根据实施方式1、2、3和/或4所述的方法,还包括:当所述重影最近列表中的条目被第二次访问时,将该条目从所述重影最近列表移动到重影频繁列表。
实施方式6.根据实施方式1、2、3、4和/或5所述的方法,还包括:在所述条目被移动到频繁列表并成为候选条目之后,将所述条目提升到所述主高速缓存。
实施方式7.根据实施方式1、2、3、4、5和/或6所述的方法,其中,从所述主高速缓存逐出条目还包括调整每个所述时间戳以生成经调整的时间戳。
实施方式8.根据实施方式1、2、3、4、5、6和/或7所述的方法,其中,所述主高速缓存和所述反向高速缓存各自包括列表,所述列表包括重影最近列表、最近列表、频繁列表、和/或重影频繁列表,其中,所述反向高速缓存的列表与所述主高速缓存的列表的操作不同。
实施方式9.根据实施方式1、2、3、4、5、6、7和/或8所述的方法,其中,添加到所述反向高速缓存的列表中的条目首先进入所述反向高速缓存的重影频繁列表中,并且添加到所述主高速缓存的列表中的条目首先被添加到所述主高速缓存的最近列表中。
实施方式10.根据实施方式1、2、3、4、5、6、7、8和/或9所述的方法,其中,当对所述反向高速缓存和所述主高速缓存中的每一者进行第二次访问时,所述重影最近列表和所述最近列表中的条目被移动到所述频繁列表或所述重影频繁列表。
实施方式11.一种方法,包括:操作反向高速缓存以识别要提升到主高速缓存的条目,其中,基于访问最近性和/或访问频率来提升条目,以及基于访问最近性、访问频率、和经调整的时间戳值从所述主高速缓存中逐出条目。
实施方式12.一种用于执行本文公开的操作、方法或过程或其中任何部分或其任何组合中的任一者的方法。
实施方式13.一种非暂时性存储介质,其中存储有指令,所述指令由一个或多个硬件处理器可执行以执行包括实施方式1至13中的任一者或多者的操作。
本文所公开的实施方式可以包括使用包括各种计算机硬件或软件模块的专用或通用计算机,如下面更详细讨论的。计算机可以包括处理器和承载指令的计算机存储介质,所述指令在被处理器执行时和/或使得所述指令被处理器执行时,执行本文所公开的方法中的任一者或多者、或所公开的任何方法的任一部分。
如上所述,在本发明的范围内的实施方式还包括计算机存储介质,所述计算机存储介质是用于承载或带有其上存储的计算机可执行指令或数据结构的物理介质。这种计算机存储介质可以是能够被通用或专用计算机访问的任何可用的物理介质。
以示例而不是限制的方式,这种计算机存储介质可以包括硬件存储器,所述硬件存储器诸如固态硬盘/设备(SSD)、RAM、ROM、EEPROM、CD-ROM、闪存、相变内存(“PCM”)、或者其他光盘存储器、磁盘存储器或其他磁存储设备、或者可用于以计算机可执行指令或数据结构的形式存储程序代码的任何其他硬件存储设备,所述计算机可执行指令或数据结构可以被通用或专用计算机系统访问和执行以实现本发明所公开的功能。以上的组合也应该被包括在计算机存储介质的范围内。这些介质也是非暂时性存储介质的示例,并且非暂时性存储介质也包含基于云的存储系统和结构,尽管本发明的范围未被限定到非暂时性存储介质的这些示例。
计算机可执行指令包括例如指令和数据,这些指令和数据在执行时使通用计算机、专用计算机或专用处理设备执行特定功能或功能组。因此,本发明的一些实施方式可以例如从网站、网格拓扑或其他源下载到一个或多个系统或设备。同样,本发明的范围包括任何硬件系统或设备,其包括包含所公开的可执行指令的应用程序的实例。
尽管已经用特定于结构特征和/或方法动作的语言描述了主题,应理解的是,所附权利要求中限定的主题不必限定到上述特定特征或动作。相反,本文所公开的特定特征和动作被公开作为实现权利要求的示例形式。
如本文中所使用的,术语“模块”或“组件”或“引擎”可以指在计算系统上执行的软件对象或程序。本文描述的不同的组件、模块、引擎、和服务可以实现为例如作为单独的线程在计算系统上执行的对象或进程。尽管本文描述的系统和方法可以以软件实现,但是以硬件或者软件和硬件的组合实现也是可以的且可预期的。在本申请中,“计算实体”可以是如本文之前所限定的任何计算系统、或者在计算系统上运行的任何模块或模块组合。
在至少一些实例中,提供硬件处理器,该硬件处理器可操作成执行用于执行方法或过程(诸如本文所公开的方法和过程)的可执行指令。该硬件处理器可以包括或不包括其他硬件的元件、诸如本文所公开的计算设备和系统的元件。
在计算环境方面,本发明的实施方式可以在客户端-服务器环境、网络环境或本地环境、或任何其他合适的环境中执行。用于本发明的至少一些实施方式的合适的操作环境包括云计算环境,在云计算环境中,客户端、服务器、或其它机器中的一者或多者可以驻留并操作在云环境中。
现在简要参考图11,由图和/或本文其他地方公开或暗示的任一个或多个实体可以采用物理计算设备的形式,或包括物理计算设备,或在物理计算设备上实现,或由物理计算设备托管,其中一个示例用1100表示。同样,如果任何上述元件包括虚拟机(VM)或由虚拟机(VM)组成,则该VM可以构成图11中公开的物理组件的任何组合的虚拟化。
在图11的示例中,物理计算设备1100包括存储器1102,该存储器1102可以包括随机存取存储器(RAM)、非易失性存储器(NVM)1104(例如NVRAM)、只读存储器(ROM)和持久性存储器、一个或多个硬件处理器1106、非暂时性存储介质1108、UI设备1110和数据存储器1112中的一个、一些或全部。物理计算设备1100的存储器组件1102中的一个或多个可以采取固态设备(SSD)存储器的形式。同样,可以提供一个或多个应用程序1114,其包括由一个或更多个硬件处理器1106可执行以执行本文公开的任何操作或其部分的指令。存储器组件1102中的一个或多个可以包括一个或多个高速缓存。高速缓存可以包括多个级别的高速缓存。
这种可执行指令可以采取各种形式,包括例如可执行以执行本文公开的任何方法或其部分的指令,和/或由/在任何存储站点可执行的指令,无论是在企业本地或云计算站点、客户端、数据中心、包括云存储站点的数据保护站点、或备份服务器,以执行本文公开的任何功能。同样,这种指令可以是可执行的,以执行本文公开的任何其他操作和方法及其任何部分。
在不偏离本发明的精神或基本特征的情况下,本发明可以以其他特定形式体现。所描述的实施方式在所有方面仅被认为是说明性的而非限制性的。因此,本发明的范围由所附权利要求而不是由前述描述来指示。在权利要求的含义和等效范围内的所有变更都应包含在其范围内。

Claims (12)

1.一种方法,包括:
识别对数据的请求;
确定所请求的数据的条目是否存在于反向高速缓存中;
当所请求的数据的所述条目不存在于所述反向高速缓存中时,将所述条目添加到所述反向高速缓存,其中,当所述条目存在于所述反向高速缓存中时,在所述反向高速缓存中调整所述条目;
将候选条目从所述反向高速缓存提升到主高速缓存;以及
基于与每个条目相关联的元数据从所述主高速缓存中逐出条目,其中,所述元数据包括最近性值、频率值、时间戳和经调整的时间戳。
2.根据权利要求1所述的方法,其中,所述反向高速缓存包括重影最近列表、最近列表、频繁列表、和/或重影频繁列表,所述方法还包括:当所述条目存在于所述反向高速缓存中时,并且当所述条目在所述最近列表中或在所述重影最近列表中时,将所述条目移动到所述重影频繁列表。
3.根据权利要求1所述的方法,其中,将进入所述反向高速缓存的新条目添加到重影最近列表。
4.根据权利要求3所述的方法,还包括:在一段时间后以及当一条目未被第二次访问时,从所述反向高速缓存的所述重影最近列表中逐出该条目。
5.根据权利要求4所述的方法,还包括:当所述重影最近列表中的所述条目被第二次访问时,将所述条目从所述重影最近列表移动到重影频繁列表。
6.根据权利要求4所述的方法,还包括:在所述条目被移动到频繁列表并成为候选条目之后,将所述条目提升到所述主高速缓存。
7.根据权利要求1所述的方法,其中,从所述主高速缓存逐出条目还包括调整每个所述时间戳以生成所述经调整的时间戳。
8.根据权利要求1所述的方法,其中,所述主高速缓存和所述反向高速缓存各自包括列表,所述列表包括重影最近列表、最近列表、频繁列表、和/或重影频繁列表,其中,所述反向高速缓存的列表与所述主高速缓存的列表的操作不同。
9.根据权利要求8所述的方法,其中,添加到所述反向高速缓存的列表中的条目首先进入所述反向高速缓存的重影频繁列表中,并且添加到所述主高速缓存的列表中的条目首先被添加到所述主高速缓存的最近列表中。
10.根据权利要求8所述的方法,其中,当对所述反向高速缓存和所述主高速缓存中的每一者进行第二次访问时,所述重影最近列表和所述最近列表中的条目被移动到所述频繁列表或所述重影频繁列表。
11.一种非暂时性存储介质,其中存储有指令,所述指令由一个或多个硬件处理器执行以执行根据权利要求1至10中任一项所述的方法中的操作。
12.一种方法,包括:
操作反向高速缓存以识别要提升到主高速缓存的条目,其中,基于访问最近性和/或访问频率来提升条目;以及
基于访问最近性、访问频率、和经调整的时间戳值从所述主高速缓存中逐出条目。
CN202310379646.4A 2022-04-13 2023-04-11 在包括反向高速缓存和主高速缓存的高速缓存系统中使用重影列表进行高速缓存插入和逐出的方法 Pending CN116909942A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/659,115 2022-04-13
US17/659,115 US20230333985A1 (en) 2022-04-13 2022-04-13 Methods for cache insertion and cache eviction using ghost list in a cache system that includes a reverse cache and a main cache

Publications (1)

Publication Number Publication Date
CN116909942A true CN116909942A (zh) 2023-10-20

Family

ID=88191831

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310379646.4A Pending CN116909942A (zh) 2022-04-13 2023-04-11 在包括反向高速缓存和主高速缓存的高速缓存系统中使用重影列表进行高速缓存插入和逐出的方法

Country Status (3)

Country Link
US (1) US20230333985A1 (zh)
CN (1) CN116909942A (zh)
DE (1) DE102023109227A1 (zh)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7596662B2 (en) * 2006-08-31 2009-09-29 Intel Corporation Selective storage of data in levels of a cache memory
US8407419B2 (en) * 2010-11-30 2013-03-26 Open Text S.A. System and method for managing a cache using file system metadata
US8924647B1 (en) * 2012-09-26 2014-12-30 Emc Corporation Dynamic selection of data replacement protocol for multi-level cache
US11347428B2 (en) * 2019-01-16 2022-05-31 EMC IP Holding Company LLC Solid state tier optimization using a content addressable caching layer

Also Published As

Publication number Publication date
US20230333985A1 (en) 2023-10-19
DE102023109227A1 (de) 2023-10-19

Similar Documents

Publication Publication Date Title
US10503423B1 (en) System and method for cache replacement using access-ordering lookahead approach
US11307765B2 (en) System and methods for storage data deduplication
US9934231B2 (en) System and methods for prioritizing data in a cache
US9779027B2 (en) Apparatus, system and method for managing a level-two cache of a storage appliance
US10108547B2 (en) High performance and memory efficient metadata caching
US9805048B2 (en) System and method for managing a deduplication table
US6385699B1 (en) Managing an object store based on object replacement penalties and reference probabilities
Liu et al. Hybrid storage management for database systems
JP6106028B2 (ja) サーバ及びキャッシュ制御方法
US9189408B1 (en) System and method of offline annotation of future accesses for improving performance of backup storage system
US11194720B2 (en) Reducing index operations in a cache
CN109002400B (zh) 一种内容感知型计算机缓存管理系统及方法
US20230251966A1 (en) Methods for cache insertion using ghost lists
JP2013156766A (ja) 情報処理装置、メモリ管理方法およびメモリ管理プログラム
CN112799590A (zh) 一种针对在线主存储重删的差异化缓存方法
CN116909942A (zh) 在包括反向高速缓存和主高速缓存的高速缓存系统中使用重影列表进行高速缓存插入和逐出的方法
US20230376425A1 (en) Methods for cache insertion and cache eviction in a cache system that includes a reverse cache and a main cache
US11669449B1 (en) Ghost list cache eviction
US20230251965A1 (en) Method for optimized cache insertion
US11650934B1 (en) Cache eviction methods
US20140115246A1 (en) Apparatus, system and method for managing empty blocks in a cache
US11836090B2 (en) Cache management for search optimization
US11829302B2 (en) Detecting sequential access patterns and proactive caching in a tree-based file system
US10922228B1 (en) Multiple location index
US11403232B2 (en) Sequence thrashing avoidance via fall through estimation

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication