CN116107932B - 一种数据队列更新方法、装置、存储介质及电子设备 - Google Patents
一种数据队列更新方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN116107932B CN116107932B CN202310397646.7A CN202310397646A CN116107932B CN 116107932 B CN116107932 B CN 116107932B CN 202310397646 A CN202310397646 A CN 202310397646A CN 116107932 B CN116107932 B CN 116107932B
- Authority
- CN
- China
- Prior art keywords
- state
- node
- access request
- result
- data
- 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/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/123—Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
- G06F12/125—Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list being generated by decoding an array or storage
-
- 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/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/128—Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
-
- 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
本说明书提供了一种数据队列更新方法、装置、存储介质及电子设备。在本说明书提供的数据队列更新方法中,通过请求队列接收访问所述缓存的多个访问请求,并确定各访问请求在所述缓存中的查找结果,所述查找结果包括成功结果和失败结果;根据所述成功结果,确定伪最近最少使用PLRU策略对应的中间状态;针对每个失败结果,根据该失败结果对应的访问请求在所述请求队列中的位置、所述中间状态以及所述失败结果的数量,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置;将该失败结果对应的访问请求所访问的数据更新到所述替换位置。
Description
技术领域
本说明书涉及计算机技术领域,尤其涉及一种数据队列更新方法、装置、存储介质及电子设备。
背景技术
目前,高速缓冲存储器(cache,缓存)是一种十分常用的存储设备。由于缓存的工作特性,在缓存中存在着最近使用过的数据的数据队列。由于队列的长度有限,通常,缓存中的数据队列会基于各种不同的更新策略,来对数据队列中保存的数据进行更新,确保队列中存放的均为最近使用的数据。
其中,较为常见的更新策略为伪最近最少使用(Pseudo-Least Recently Used,PLRU)策略,利用一套特定的规则维护缓存中的数据队列,并在需要更新时给出替换位置,通常可采用二叉树的形式表现PLRU策略维护数据队列的过程。然而,现有的PLRU策略,由于需要根据访问时间的先后顺序对数据队列进行维护,每次仅能生成一个替换位置。当存在多个访问请求同时访问缓存时,现有的PLRU只能够依次处理每一个请求,逐个生成每一个替换位置,而不能同时生成多个替换位置,效率较慢且开销较大。
因此,如何提高多请求下缓存在更新数据队列时的性能是一个亟待解决的问题。
发明内容
本说明书提供一种数据队列更新方法、装置、存储介质及电子设备,以至少部分地解决现有技术存在的上述问题。
本说明书采用下述技术方案:
本说明书提供了一种数据队列更新方法,所述方法应用于缓存,所述方法包括:
通过请求队列接收访问所述缓存的多个访问请求,并确定各访问请求在所述缓存中的查找结果,所述查找结果包括成功结果和失败结果;
根据所述成功结果,确定伪最近最少使用PLRU策略对应的中间状态;
针对每个失败结果,根据该失败结果对应的访问请求在所述请求队列中的位置、所述中间状态以及所述失败结果的数量,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置;
将该失败结果对应的访问请求所访问的数据更新到所述替换位置。
可选地,处理各访问请求,以确定各访问请求在所述缓存中的查找结果,具体包括:
针对每个访问请求,查找所述缓存的数据队列中是否包含该访问请求所需的数据;
若所述数据队列中包含该访问请求所需的数据,则确定查找结果为成功结果;
若所述数据队列中不包含该访问请求所需的数据,则确定查找结果为失败结果。
可选地,PLRU策略的状态对应于一二叉树,所述二叉树包含状态结点与叶子结点,其中,所述状态结点的取值为第一状态值或第二状态值,且所述第一状态值与所述第二状态值互为反置;
当所述状态结点的取值为第一状态值时,所述状态结点的指针指向所述状态结点的子结点中的一个子结点,当所述状态结点的取值为第二状态值时,所述状态结点的指针指向所述状态结点的子结点中的另一个子结点;
所述叶子结点对应于数据队列中的数据的存储位置;从所述二叉树的根结点到叶子结点之间由指针连接而成的路径用于表征所述二叉树的当前状态所指向的存储位置。
可选地,根据所述成功结果,确定PLRU策略对应的中间状态,具体包括:
针对所述二叉树中的每个状态结点,分别判断该状态结点的左子树和右子树中是否包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点;
若该状态结点的左子树和右子树中均包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,或该状态结点的左子树和右子树中均不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,则该状态结点的取值和指针均不发生改变;
若该状态结点的左子树中包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,该状态结点的右子树中不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,且该状态结点的指针指向该状态结点的左子树的根结点,则对该状态结点进行反置,并将该状态结点的指针指向该状态结点的右子树的根结点;
若该状态结点的右子树中包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,该状态结点的左子树中不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,且该状态结点的指针指向该状态结点的右子树的根结点,则对该状态结点进行反置,并将该状态结点的指针指向该状态结点的左子树的根结点;
将根据所述成功结果调整后的所述二叉树的当前状态确定为所述PLRU策略对应的中间状态。
可选地,根据该失败结果对应的访问请求在所述请求队列中的位置、所述中间状态以及所述失败结果的数量,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置,具体包括:
确定所述请求队列中位于该失败结果对应的访问请求所处位置之前且查找结果为失败结果的访问请求的数量,作为状态变化次数;
根据所述中间状态以及所述状态变化次数确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
可选地,根据所述中间状态以及所述状态变化次数确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置,具体包括:
针对所述二叉树中的每个状态结点,根据该状态结点位于所述二叉树中的层数以及所述状态变化次数,确定该状态结点的反置次数;
以所述中间状态中该状态结点的取值为起始状态,对该状态结点进行所述反置次数的反置,得到该状态结点的最终取值;
根据该状态结点的最终取值,确定该状态结点的指针所指向的子结点;
根据各状态结点的指针变更后所述二叉树的当前状态,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
可选地,根据该状态结点位于所述二叉树中的层数以及所述状态变化次数,确定该状态结点的反置次数,具体包括:
根据该状态结点位于所述二叉树中的层数,确定该状态结点的周期值;
根据状态变化次数与周期值的比值的下取整值,确定该状态结点的反置次数。
可选地,根据各状态结点的指针变更后所述二叉树的当前状态,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置,具体包括:
将各状态结点的指针变更后,从所述二叉树的根结点出发,由指针经过状态结点指向的叶子结点对应的数据队列中的存储位置,确定为该失败结果的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
本说明书提供的一种数据队列更新装置,所述装置包括:
接收模块,用于通过请求队列接收访问缓存的多个访问请求,并确定各访问请求在所述缓存中的查找结果,所述查找结果包括成功结果和失败结果;
中间模块,用于根据所述成功结果,确定伪最近最少使用PLRU策略对应的中间状态;
确定模块,用于针对每个失败结果,根据该失败结果对应的访问请求在所述请求队列中的位置、所述中间状态以及所述失败结果的数量,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置;
更新模块,用于将将该失败结果对应的访问请求所访问的数据更新到所述替换位置。
本说明书提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述数据队列更新方法。
本说明书提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述数据队列更新方法。
本说明书采用的上述至少一个技术方案能够达到以下有益效果:
在本说明书提供的数据队列更新方法中,通过请求队列接收访问所述缓存的多个访问请求,并确定各访问请求在所述缓存中的查找结果,所述查找结果包括成功结果和失败结果;根据所述成功结果,确定伪最近最少使用PLRU策略对应的中间状态;针对每个失败结果,根据该失败结果对应的访问请求在所述请求队列中的位置、所述中间状态以及所述失败结果的数量,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置;将该失败结果对应的访问请求所访问的数据更新到所述替换位置。
从上述方法中可以看出,在采用本说明书提供的数据队列更新方法对数据队列进行更新时,可在处理多个访问请求时,先通过查找结果为成功的访问请求确定出中间状态,再根据中间状态以及查找结果为失败的访问请求的数量以及在请求队列中的位置,为每个查找结果为失败的访问请求确定出替换位置。通过对二叉树中的每个状态结点进行周期性地反置的方式,降低逻辑级数,以更小的开销实现更新状态的功能的,并实现同时为多个访问请求产出多个替换位置。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:
图1为本说明书中一种二叉树的结构示意图;
图2为本说明书中一种PLRU策略中二叉树状态更新的基础过程示意图;
图3为本说明书中一种PLRU策略中访问请求命中缓存中数据时状态变化示意图;
图4为本说明书中一种PLRU策略中访问请求命中状态指向的数据时状态变化示意图;
图5为本说明书中一种数据队列更新方法的流程示意图;
图6为本说明书中一种数据队列更新方法中采用的确定中间状态的过程示意图;
图7为本说明书中一种请求队列的示意图;
图8为本说明书中一种数据队列更新方法中通过反置状态结点取值对状态进行更新的过程示意图;
图9为本说明书提供的一种数据队列更新装置的示意图;
图10为本说明书提供的对应于图5的电子设备示意图。
具体实施方式
通常情况下,在缓存中存储的数据为较为活跃的数据,也就是近期被访问过,可能会被再次调用的数据。但由于缓存中能够存储的数据量有限,因此在缓存中存储的数据量达到上限时,如果想要再存入新的数据,就需要将一个原本存储在缓存中的数据替换出去。为了确保被替换的数据是缓存所存储的数据中相对不活跃的数据,也就是最近被访问的时间相对较早的数据,需要采用一些特定的策略来实现数据队列的更新。
PLRU策略是一种常见的用于更新缓存中的数据队列的策略,在PLRU策略中,采用二进制的数值表示的状态来对应地表示在新数据进入缓存时,需要被替换出去的旧数据在数据队列中的位置。其中,状态的位数由数据队列的大小决定,其关系为状态的位数为数据队列中可存储的数据的最大数量减去一。例如,当数据队列中可存储的数据的最大数量为8时,状态的位数为7位;当数据队列中可存储的数据的最大数量为16时,状态的位数为15位等。
为了便于理解PLRU策略中状态的更新,常用二叉树来表示状态。二叉树的层数由状态的同样由数据队列中可存储的数据的最大数量决定。假设数据队列中可存储的数据的最大数量为N,那么通常情况下,二叉树的层数为以2为底时,N的对数加1,即+1。例如,当N=8时,二叉树的层数为4层;当N=16时,二叉树的层数为5层等。其中,二叉树的最后一层中的结点为保存数据的叶子结点,其他层中的结点为表征状态的状态结点。在二叉树中,状态结点的数量与状态的位数相同,每个状态结点的取值均用于表征状态中的一位的数值。一个状态结点通常存在两种取值,分别为0或1。在二叉树中,每个状态结点均存在两个子结点,可以是其它状态结点,也可以是叶子结点。
图1为一个可存储的数据的最大数量为8位的数据队列在PLRU策略下对应的二叉树。如图1所示,在8位的数据队列下,状态的位数为7位,二叉树的层数为4层。其中,二叉树的前3层中的结点为状态结点,用圆形表示;最后一层中的结点为存储数据的叶子结点,用正方形表示。图1仅用于展示二叉树的基本形状,因此各结点的取值或数据均未画出。
目前,已有的PLRU策略对数据队列在出现查找失败时的基础更新逻辑可如图2所示。其中,为了便于理解,在图2中隐藏用于表征结点之间连接关系的边,增加用于表征结点当前指向的指针。其中,当一个状态结点的取值为0时,该状态结点的指针指向该状态结点的左子结点;反之,当一个状态结点的取值为1时,该状态结点的指针指向该状态结点的右子结点。以二叉树的根结点为起始,沿指针不断经过状态结点前进,直到一个状态结点的指针指向叶子结点为结束,为二叉树当前的路径。路径中的各状态结点中的取值对应到状态中的各位置上,即为二叉树当前的状态;路径终点的叶子结点便是二叉树中当前的替换位置,即在新数据进入缓存时,采用新数据替换掉该叶子结点中的旧数据。需要注意的是,缓存中存储的各数据在数据队列中的顺序关系,在二叉树中的并不会体现为叶子结点从左到右或从右到左的顺序。
在PLRU策略中,缓存每处理一个访问请求,PLRU策略对应的状态就会发生一次变化。在访问请求均未命中缓存中数据的情况下,变化逻辑为指针连接而成的路径上的状态结点的数值取反,并且路径上的指针发生翻转。图2给出了当缓存可存储数据的最大数量为8时,一种较为简单的状态变化过程示意图。如图2所示,每更新一次,路径上的结点的取值以及指针对应的指向都会发生改变。假设图2的二叉树中8个叶子结点从左到右依次编号为0~7,起始状态为所有状态结点的取值均为0,即图2左上角的二叉树对应的状态,那么最终,PLRU策略对应的二叉树会按照编号0,4,2,6,1,5,3,7的顺序依次选中叶子结点对应的缓存行。
而如果访问请求命中了缓存的数据队列中的数据,也就是叶子结点中保存的数据时,为了保证最近被访问过的数据不会被替换出去,需要在上述更新逻辑的基础上,额外进行一次更新。
当访问请求命中了数据队列中保存的数据时,对于二叉树中的任意一个状态结点,可以该状态结点为中心,将二叉树分为左右两部分。每一部分均会包含相等数量的从该状态结点能够连接到的叶子结点。以图3为例,在如图3所示的二叉树中,由二叉树的根结点可分为左半部分包含数据A、B、C、D的叶子结点,以及右半部分包含数据E、F、G、H的叶子结点;又例如,由二叉树第二层左起第一个状态结点可分为左半部分包含数据A、B的叶子结点,以及右半部分包含数据C、D的叶子结点;再例如,由二叉树第三层左起第三个状态结点可分为左半部分包含数据E的叶子结点,以及右半部分包含数据F的叶子结点。对于任意一个状态结点,当该状态结点的指针指向的半部分叶子结点中存在被访问到数据的叶子结点时,该状态结点的取值就要反置,同时指针指向该状态结点的另一个子结点。
以图3为例进行说明。如图3所示,以图3中左侧的二叉树所示的状态为起始,当接收到访问请求时,会变化至中间的二叉树所示的状态。而假如接收到的访问请求所访问的数据为H,那么此时,所有指针指向包含H对应的叶子结点的子树的状态结点的取值都需要反置,并将指针指向另一个子结点,二叉树的状态会变为图3中右侧二叉树所示的状态。值得一提的是,作为一种特殊的情况,叶子结点本身也算是一个子树。另外需要注意的是,图3所示的过程中,从左侧二叉树到右侧二叉树发生的变化为处理一次请求之间发生的变化,中间的二叉树仅为了便于理解画出,其所示的状态可被省略,看作是从左到右仅发生了一次变化。
再例如,当被访问的数据为正好为二叉树变化后的状态下指针所指向的叶子结点的数据时,二叉树的状态更新过程可以图4为例进行说明。如图4所示,假设可存储数据最大数量为8的数据队列中存储了A、B、C、D、E、F、G、H这8个数据。以图4中最左边的二叉树为起始,在该状态下,处理了一个访问请求后,二叉树的状态会变为中间的二叉树所示的状态,状态所指向的叶子结点中保存的数据为C。假设处理的访问请求所访问的数据也为C,那么如果处理的下一个访问请求未命中,那么将会有新数据进入缓存,将数据C替换出去。而在对数据队列进行更新时需要尽可能保证最新被访问的数据应不被替换出去,也就是说,在这里将数据C替换出去不符合PLRU策略的目的。因此,此时需要使状态再次发生变化,使状态指向的叶子结点变为其它叶子结点,由此来保证数据C在短期内不会被替换出去。如图4所示,在中间的二叉树所示的状态下,再次对由指针连接而成的路径上的所有状态结点的取值和指针进行改变,得到新的状态。
以上是针对一个查找结果为成功的访问请求对用于更新数据队列的PLRU策略对应的二叉树的状态进行更新的方式。
每处理一个访问请求,状态便按上述介绍的规则发生变化;当访问请求没有命中缓存中的数据,也就是发生了数据替换时,先用新数据将状态对应的位置上的旧数据替换出去,随后再更新状态。如此便是目前的PLRU策略对数据队列的更新逻辑。
可以看出,现有的PLRU策略中队数据队列的更新十分复杂,在并行处理多个访问请求时,现有的更新方法难以快速产出替换位置,无法满足性能的需求。为解决上述问题,本说明书提供一种更优的数据队列更新方法。
为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
图4为本说明书中一种数据队列更新方法的流程示意图,具体包括以下步骤:
S100:通过请求队列接收访问所述缓存的多个访问请求,并确定各访问请求在所述缓存中的查找结果,所述查找结果包括成功结果和失败结果。
本说明书所提供的数据队列更新方法中的所有步骤均可由任何电子设备中的缓存实现,其中,电子设备可以是例如终端、服务器、单片机等设备。
在缓存中,当有新数据进入缓存时,数据队列就会发生更新,而新数据通常是响应于未命中缓存中数据的访问请求而从上级存储器中接收的。同时,本说明书提供的数据队列更新方法应用于处理多访问请求的场景。由此,在此步骤中,可首先接收访问缓存的多个访问请求。
在缓存处理访问请求时,通常存在命中与未命中两种情况。其中,命中指缓存的数据队列中保存有访问请求所访问的数据,未命中指数据队列中没有访问请求所访问的数据。对于两种不同的情况,需要在后续步骤中分别进行不同的处理。因此可在接受到访问请求后,处理各访问请求并确定各访问请求在缓存中的查找结果。
其中,查找结果可分为成功结果与失败结果两种,分别对应命中与未命中的情况。具体的,可针对每个访问请求,查找所述缓存的数据队列中是否包含该访问请求所需的数据;若所述数据队列中包含该访问请求所需的数据,则确定查找结果为成功结果;若所述数据队列中不包含该访问请求所需的数据,则确定查找结果为失败结果。
S102:根据所述成功结果,确定伪最近最少使用PLRU策略对应的中间状态。
本说明书所提供的数据队列更新方法中,在以PLRU策略为基础上进行优化,对数据队列进行更新。
可以确定的是,当一个访问请求的查找结果为成功结果时,该访问请求是不会引入新的数据到缓存中的,也就是该访问请求不需要替换位。因此,可首先根据处理的多个访问请求中,查找结果为成功结果的访问请求,对PLRU策略对应的二叉树进行更新,得到二叉树的中间状态。
其中,PLRU策略的状态对应于一二叉树,所述二叉树包含状态结点与叶子结点,其中,所述状态结点的取值为第一状态值或第二状态值,且所述第一状态值与所述第二状态值互为反置;当所述状态结点的取值为第一状态值时,所述状态结点的指针指向所述状态结点的子结点中的一个子结点,当所述状态结点的取值为第二状态值时,所述状态结点的指针指向所述状态结点的子结点中的另一个子结点;所述叶子结点对应于数据队列中的数据的存储位置;从所述二叉树的根结点到叶子结点之间由指针连接而成的路径用于表征所述二叉树的当前状态所指向的存储位置。
与PLRU策略的状态对应的二叉树在上文针对PLRU策略的介绍中已进行过具体说明,本方法中仍采用相同的二叉树,此处不再进行赘述。其中,第一状态值可以是0,第二状态值可以是1;第一状态值与第二状态值互为反置,其含义为一个状态结点有且仅有第一状态值和第二状态值这两种取值,二者为一种“非你即我”的状态;当状态结点的取值为第一状态值时,状态结点的指针可指向该状态结点的左结点,当状态结点的取值为第二状态值时,状态结点的指针可指向该状态结点的右结点;从二叉树的根结点到叶子结点之间由指针连接而成的路径用于表征二叉树的当前状态所指向的叶子节点,也就是存储位置。换句话说,在一个二叉树中,每个路径所指向的叶子结点是固定的,即每个路径指向的数据队列中的存储位置是固定的。
其中,对状态结点的取值进行反置,可以指将状态结点的取值从第一状态值变为第二状态值,或从第二状态值变为第一状态值。
对于二叉树中的任意一个叶子结点来说,在二叉树中会存在若干个包含该叶子结点的子树。当一个叶子结点对应的存储位置中保存的数据被访问时,如果一个状态结点的指针指向了任意一个包含该叶子结点的子树的根结点,那么这个状态结点的取值就需要反置,同时将这个状态结点的指针指向另一个子结点。不难想到,状态结点的取值变化与指针的变化是同步的,每当状态结点的取值反置时,指针就需要同时状态结点的一个子结点指向另一个子结点。
在本说明书上文中介绍了传统PLRU策略的更新逻辑,与之不同的是,由于本说明书提供的方法中需要同时处理多个访问请求,因此在对PLRU策略的状态进行更新时,需要采用其它更新规则。
具体的,可在根据所述成功结果,确定PLRU策略对应的中间状态时,可针对所述二叉树中的每个状态结点,分别判断该状态结点的左子树和右子树中是否包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点;若该状态结点的左子树和右子树中均包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,或该状态结点的左子树和右子树中均不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,则该状态结点的取值和指针均不发生改变;若该状态结点的左子树中包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,该状态结点的右子树中不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,且该状态结点的指针指向该状态结点的左子树的根结点,则对该状态结点进行反置,并将该状态结点的指针指向该状态结点的右子树的根结点;若该状态结点的右子树中包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,该状态结点的左子树中不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,且该状态结点的指针指向该状态结点的右子树的根结点,则对该状态结点进行反置,并将该状态结点的指针指向该状态结点的左子树的根结点;将根据所述成功结果调整后的所述二叉树的当前状态确定为所述PLRU策略对应的中间状态。
简单来说,就是对于任意一个状态结点,都存在若干个从该状态结点能够访问到的叶子结点,将这些叶子结点称为该状态结点下的叶子结点。在二叉树中,一个状态结点下的叶子节点一定平均分布在该状态节点的左侧和右侧,也就是指针指向左子结点时能访问到的叶子结点和指针指向右子结点时能访问到的叶子结点。在上述情况下,处理一批访问请求时,如果在一个状态结点下叶子结点中,左侧和右侧均存在被命中的叶子结点,或均不存在被命中的叶子结点,那么该状态节点的取值和指针都不发生改变;如果左侧和右侧之中仅有一侧存在被命中的叶子结点,那么该状态结点的指针指向不存在被命中的叶子节点的一侧,且取值也随之变化。
以图6为例对上述更新规则进行说明,图6为本说明书中一种数据队列更新方法中采用的确定中间状态的过程示意图,其中0表示第一状态值,1表示第二状态值。如图6所示,在二叉树处于图6左侧状态的情况下,处理了一批访问请求,并命中了叶子结点A、B、E、H对应的存储地址。针对其中的部分状态结点进行分析:根结点下左侧的叶子结点为A、B、C、D,右侧的叶子结点为E、F、G、H,左侧和右侧均存在被命中的叶子结点,因此保持不变;第二层左起第一个状态结点下左侧的叶子结点为A、B,右侧的叶子结点为C、D,左侧存在被命中的叶子结点,右侧不存在被命中的叶子结点,因此指针指向右侧,且取值变为1;第三层左起第二个状态结点下组左侧的叶子结点为C,右侧的叶子结点为D,左侧和右侧均不存在被命中的叶子结点,因此不发生改变;第三层左起第四个状态结点下左侧的叶子结点为G,右侧的叶子结点为H,左侧的叶子结点未被命中,右侧的叶子结点被命中,因此指针变为指向左侧,同时取值也变为0。
另外,在未进行任何更新时,二叉树的状态,也就是初始状态可以是二叉树的任意一种状态。通常情况下二叉树的初始状态可以是人为规定,或根据缓存处理上一批次的访问请求后二叉树的状态决定的,本说明书对此不做具体限制。
S104:针对每个失败结果,根据该失败结果对应的访问请求在所述请求队列中的位置、所述中间状态以及所述失败结果的数量,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
对于任意一个失败结果对应的访问请求,缓存会相应的从上级存储器中接收该访问请求需要的数据,返回给该访问请求,同时将接收到的数据作为新数据保存在数据队列中,并将数据队列中的一个旧数据替换出去。可以想到的,当存在多个失败结果对应的访问请求时,需要同时产出多个不同的替换位置,用于保存新的数据。因此,在此步骤中,可针对每个失败结果对应的访问请求,根据访问请求在请求队列中的位置、查找结果为失败的访问请求的数量以及步骤S102中确定出的中间状态,确定出该访问请求的替换位置。
具体的,可确定所述请求队列中位于该失败结果对应的访问请求所处位置之前且查找结果为失败结果的访问请求的数量,作为状态变化次数;根据所述中间状态以及所述状态变化次数确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
由于只要处理了访问请求,二叉树的状态一定会发生变化,因此可首先根据查找结果为失败的访问请求的数量确定出二叉树将会发生的状态变化次数。而由于不同访问请求需要不同的替换位置,因此可针对失败结果对应的访问请求,将请求队列中位于该访问请求所处位置之前且查找结果为失败结果的访问请求的数量,作为该访问请求对应的状态变化次数。由此,每个查找结果为失败结果的访问请求都能够对应不同的状态变化次数。
以图7为例,假设缓存以请求队列形式接收并处理了8个访问请求,其中,请求队列的队头在右,队尾在左。成功结果对应的访问请求为5个,用X表示;失败结果对应的访问请求的数量为3个,分别为请求1,请求4,请求6。那么,对于这三个查找结果为失败的访问请求,其对应的状态变化次数应分别为0、1、2。
而针对每个查找结果为失败的访问请求,在根据中间状态以及状态变化次数确定该访问请求所访问的数据在数据队列中的替换位置时,可具体的,针对所述二叉树中的每个状态结点,根据该状态结点位于所述二叉树中的层数以及所述状态变化次数,确定该状态结点的反置次数;以所述中间状态中该状态结点的取值为起始状态,对该状态结点进行所述反置次数的反置,得到该状态结点的最终取值;根据该状态结点的最终取值,确定该状态结点的指针所指向的子结点;根据各状态结点的指针变更后所述二叉树的当前状态,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
在确定一个访问请求在数据队列中的替换位置时,可根据确定出的对应的状态变化次数以及二叉树中每个状态结点在二叉树中所在的层数,确定出每个状态结点的反置次数;以中间状态为起始状态,对各状态结点进行相应反置次数的反置,并根据反置后各状态结点的取值确定各状态结点的指针指向;根据反置以及指针调整后的二叉树的当前状态,确定出访问请求所访问的数据在数据队列中的替换位置。
其中,针对二叉树中的每个状态结点,根据该状态结点位于二叉树中的层数以及状态变化次数,确定该状态结点的反置次数的方式可以有多种,本说明书在此给出一种具体实施例以供参考。具体的,可根据该状态结点位于所述二叉树中的层数,确定该状态结点的周期值;根据状态变化次数与周期值的比值的下取整值,确定该状态结点的反置次数。
可根据一个状态结点在二叉树中所在的层数,确定出该状态结点在二叉树发生多少次状态变化时进行一次反置,也就是一个状态结点的周期值。而根据状态变化次数中最多可包含多少个周期值,便能够确定出状态结点的反置次数。在本方法中,周期值的确定方法可以是以2为底数,以状态结点所在的层数减1为幂,确定出周期值。即,第一层的状态结点,每当二叉树发生1次变化时进行反置;第二层的状态结点,每当二叉树发生2次变化时进行反置;第三层的状态结点,每当二叉树发生4次变化时进行反置;第四层的状态结点,每当二叉树发生8次变化时进行反置……以此类推。
由于在正常的状态循环中,每次状态改变时,位于最低位的数都会发生变化;每两次状态改变时,位于第二位的数发生变化;每四次状态改变时,位于第三位的数发生变化……。对应到二叉树中,则体现为第一层的状态结点每个状态下都存在于指针连接而成的路径中;第二层的每个状态结点每经过两个状态存在于路径中一次;第三层的每个状态结点每经过四个状态存在于路径中一次……。并且,同一层的状态结点不可能同时存在于路径中,只会在相邻的几个状态中轮流出现。
简单来说可以理解为,二叉树中每个状态结点都会周期性地被选中,且每个状态结点被选中的周期由该状态结点在二叉树中所处的层数决定;对于每一层来说,这一层的周期值大小等于这一层中包含的状态结点的数量。因此,可按照上述周期性地对状态结点取值进行反置地方式,来更为简单地确定出最终状态以及替换位置。
在数据队列可存储的数据的最大数量为8时,上述对状态结点的取值进行反置的具体过程可如图8所示。图8为在采用上述方式下,以全0状态为初始状态,发生一轮变化的过程示意图。可以看出,相比于图2中的基本更新逻辑,图8中的二叉树在变化的过程中,会出现部分状态结点的取值与按照常规更新方式不一致的情况,在图中采用阴影标出。需要注意的是,为了便于理解,在实施例中采用了以最为常见的全0状态为起始状态,但在实际应用过程中,初始状态可以是任一状态。
可以看出,虽然在更新状态的过程中,二叉树中的部分结点取值常规更新方式不一致,但由于每个状态结点只会周期性地被选中,因此在每一状态下,取值不一致的结点均不存在于状态对应的路径中,也就是不会被选中。换句话说,即使在更新过程中存在取值不一致的状态结点,得到的每个状态下对应的路径依然都是正确的,即路径所指向的叶子结点始终是正确的,取值不一致的状态结点不会对整体过程造成任何影响。而采用上述方式替换PLRU策略中的基础更新逻辑,便能够在不影响最终结果的情况下降低逻辑级数,优化缓存性能。
在确定一个查找结果为失败的访问请求在数据队列中的替换位置时,当确定出二叉树中每个状态结点的反置次数,便可以步骤S102中确定出的中间状态为起始,对各状态结点执行相应反置次数的反置,同时将各状态结点的指针调整为与反置后的取值相对应的指向。由此,便能够将由指针连接而成的路径对应的状态确定为替换位置。具体的,可将各状态结点的指针变更后,从所述二叉树的根结点出发,由指针经过状态结点指向的叶子结点对应的数据队列中的存储位置,确定为该失败结果的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
以图7中所示的请求队列与图8中所示的更新过程为例,假设步骤S104中确定出的二叉树的中间状态全为0,对应于图8左上角的二叉树。在图7中查找结果为失败的访问请求为1号、4号、6号请求,对应的状态变化次数分别为0、1、2次。也就是说,从全0的中间状态开始,分别经过0、1、2次变化,就能够分别得到1号、4号、6号请求在数据队列中的替换位置。即,1号请求的替换位置是路径000所指向的叶子结点中在数据队列中对应的存储位置;4号请求的替换位置是路径为100所指向的叶子结点中在数据队列中对应的存储位置;6号请求的替换位置是路径010所指向的叶子结点在数据队列中对应的存储位置。
S106:将该失败结果对应的访问请求所访问的数据更新到所述替换位置。
在此步骤中,可将失败结果对应的访问请求所访问的数据,更新到数据队列中相应的替换位置中,完成对数据队列的更新。
在采用本说明书提供的数据队列更新方法对数据队列进行更新时,可在处理多个访问请求时,先通过查找结果为成功的访问请求确定出中间状态,再根据中间状态以及查找结果为失败的访问请求的数量以及在请求队列中的位置,为每个查找结果为失败的访问请求确定出替换位置。通过对二叉树中的每个状态结点进行周期性地反置的方式,降低逻辑级数,以更小的开销实现更新状态的功能的,并实现同时为多个访问请求产出多个替换位置。
以上是本说明书提供的数据队列更新方法,基于同样的思路,本说明书还提供了相应的数据队列更新装置,如图9所示。
图9为本说明书提供的一种数据队列更新装置示意图,具体包括:
接收模块200,用于通过请求队列接收访问缓存的多个访问请求,并确定各访问请求在所述缓存中的查找结果,所述查找结果包括成功结果和失败结果;
中间模块202,用于根据所述成功结果,确定伪最近最少使用PLRU策略对应的中间状态;
确定模块204,用于针对每个失败结果,根据该失败结果对应的访问请求在所述请求队列中的位置、所述中间状态以及所述失败结果的数量,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置;
更新模块206,用于将该失败结果对应的访问请求所访问的数据更新到所述替换位置。
可选的,所述接收模块200,具体用于针对每个访问请求,查找所述缓存的数据队列中是否包含该访问请求所需的数据;若所述数据队列中包含该访问请求所需的数据,则确定查找结果为成功结果;若所述数据队列中不包含该访问请求所需的数据,则确定查找结果为失败结果。
可选的,PLRU策略的状态对应于一二叉树,所述二叉树包含状态结点与叶子结点,其中,所述状态结点的取值为第一状态值或第二状态值,且所述第一状态值与所述第二状态值互为反置;当所述状态结点的取值为第一状态值时,所述状态结点的指针指向所述状态结点的子结点中的一个子结点,当所述状态结点的取值为第二状态值时,所述状态结点的指针指向所述状态结点的子结点中的另一个子结点;所述叶子结点对应于数据队列中的数据的存储位置;从所述二叉树的根结点到叶子结点之间由指针连接而成的路径用于表征所述二叉树的当前状态所指向的存储位置。
可选的,所述中间模块202,具体用于针对所述二叉树中的每个状态结点,分别判断该状态结点的左子树和右子树中是否包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点;若该状态结点的左子树和右子树中均包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,或该状态结点的左子树和右子树中均不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,则该状态结点的取值和指针均不发生改变;若该状态结点的左子树中包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,该状态结点的右子树中不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,且该状态结点的指针指向该状态结点的左子树的根结点,则对该状态结点进行反置,并将该状态结点的指针指向该状态结点的右子树的根结点;若该状态结点的右子树中包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,该状态结点的左子树中不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,且该状态结点的指针指向该状态结点的右子树的根结点,则对该状态结点进行反置,并将该状态结点的指针指向该状态结点的左子树的根结点;将根据所述成功结果调整后的所述二叉树的当前状态确定为所述PLRU策略对应的中间状态。
可选的,所述确定模块204,具体用于确定所述请求队列中位于该失败结果对应的访问请求所处位置之前且查找结果为失败结果的访问请求的数量,作为状态变化次数;根据所述中间状态以及所述状态变化次数确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
可选的,所述确定模块204,具体用于针对所述二叉树中的每个状态结点,根据该状态结点位于所述二叉树中的层数以及所述状态变化次数,确定该状态结点的反置次数;以所述中间状态中该状态结点的取值为起始状态,对该状态结点进行所述反置次数的反置,得到该状态结点的最终取值;根据该状态结点的最终取值,确定该状态结点的指针所指向的子结点;根据各状态结点的指针变更后所述二叉树的当前状态,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
可选的,所述确定模块204,具体用于根据该状态结点位于所述二叉树中的层数,确定该状态结点的周期值;根据状态变化次数与周期值的比值的下取整值,确定该状态结点的反置次数。
可选的,所述确定模块204,具体用于将各状态结点的指针变更后,从所述二叉树的根结点出发,由指针经过状态结点指向的叶子结点对应的数据队列中的存储位置,确定为该失败结果的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
本说明书还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图5提供的数据队列更新方法。
本说明书还提供了图10所示的电子设备的示意结构图。如图10所述,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述图5所述的数据队列更新方法。当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device, PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20 以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (11)
1.一种数据队列更新方法,其特征在于,所述方法应用于缓存,所述方法包括:
通过请求队列接收访问所述缓存的多个访问请求,并确定各访问请求在所述缓存中的查找结果,所述查找结果包括成功结果和失败结果;
根据所述成功结果,确定伪最近最少使用PLRU策略对应的中间状态;
针对每个失败结果,根据该失败结果对应的访问请求在所述请求队列中的位置、所述中间状态以及所述失败结果的数量,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置;
将该失败结果对应的访问请求所访问的数据更新到所述替换位置;
其中,与PLRU策略的状态对应的二叉树中的状态节点为除叶子节点外其他层用于表征状态的结点;所述状态结点的取值为第一状态值或第二状态值,且所述第一状态值与所述第二状态值互为反置;当所述状态结点的取值为第一状态值时,所述状态结点的指针指向所述状态结点的子结点中的一个子结点,当所述状态结点的取值为第二状态值时,所述状态结点的指针指向所述状态结点的子结点中的另一个子结点;采用下述方法确定中间状态,包括:针对每个状态节点,根据所述成功结果,若确定该状态结点仅一边子树包含对应的访问请求所访问的数据的存储地址所在的叶子结点时,且该状态结点的指针指向所述一边子树,则对该状态结点进行反置;将根据所述成功结果调整后的所述二叉树的当前状态确定为所述PLRU策略对应的中间状态。
2.如权利要求1所述的方法,其特征在于,处理各访问请求,以确定各访问请求在所述缓存中的查找结果,具体包括:
针对每个访问请求,查找所述缓存的数据队列中是否包含该访问请求所需的数据;
若所述数据队列中包含该访问请求所需的数据,则确定查找结果为成功结果;
若所述数据队列中不包含该访问请求所需的数据,则确定查找结果为失败结果。
3.如权利要求1所述的方法,其特征在于,PLRU策略的状态对应于一二叉树,所述二叉树包含状态结点与叶子结点;
所述叶子结点对应于数据队列中的数据的存储位置;从所述二叉树的根结点到叶子结点之间由指针连接而成的路径用于表征所述二叉树的当前状态所指向的存储位置。
4.如权利要求3所述的方法,其特征在于,将根据所述成功结果调整后的所述二叉树的当前状态确定为所述PLRU策略对应的中间状态,具体包括:
针对所述二叉树中的每个状态结点,分别判断该状态结点的左子树和右子树中是否包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点;
若该状态结点的左子树和右子树中均包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,或该状态结点的左子树和右子树中均不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,则该状态结点的取值和指针均不发生改变;
若该状态结点的左子树中包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,该状态结点的右子树中不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,且该状态结点的指针指向该状态结点的左子树的根结点,则对该状态结点进行反置,并将该状态结点的指针指向该状态结点的右子树的根结点;
若该状态结点的右子树中包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,该状态结点的左子树中不包含成功结果对应的访问请求所访问的数据的存储地址所在的叶子结点,且该状态结点的指针指向该状态结点的右子树的根结点,则对该状态结点进行反置,并将该状态结点的指针指向该状态结点的左子树的根结点;
将根据所述成功结果调整后的所述二叉树的当前状态确定为所述PLRU策略对应的中间状态。
5.如权利要求1所述的方法,其特征在于,根据该失败结果对应的访问请求在所述请求队列中的位置、所述中间状态以及所述失败结果的数量,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置,具体包括:
确定所述请求队列中位于该失败结果对应的访问请求所处位置之前且查找结果为失败结果的访问请求的数量,作为状态变化次数;
根据所述中间状态以及所述状态变化次数确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
6.如权利要求5所述的方法,其特征在于,根据所述中间状态以及所述状态变化次数确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置,具体包括:
针对所述二叉树中的每个状态结点,根据该状态结点位于所述二叉树中的层数以及所述状态变化次数,确定该状态结点的反置次数;
以所述中间状态中该状态结点的取值为起始状态,对该状态结点进行所述反置次数的反置,得到该状态结点的最终取值;
根据该状态结点的最终取值,确定该状态结点的指针所指向的子结点;
根据各状态结点的指针变更后的所述二叉树的当前状态,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
7.如权利要求6所述的方法,其特征在于,根据该状态结点位于所述二叉树中的层数以及所述状态变化次数,确定该状态结点的反置次数,具体包括:
根据该状态结点位于所述二叉树中的层数,确定该状态结点的周期值;
根据状态变化次数与周期值的比值的下取整值,确定该状态结点的反置次数。
8.如权利要求6所述的方法,其特征在于,根据各状态结点的指针变更后所述二叉树的当前状态,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置,具体包括:
将各状态结点的指针变更后,从所述二叉树的根结点出发,由指针经过状态结点指向的叶子结点对应的数据队列中的存储位置,确定为该失败结果的访问请求所访问的数据在所述缓存的数据队列中的替换位置。
9.一种数据队列更新装置,其特征在于,包括:
接收模块,用于通过请求队列接收访问缓存的多个访问请求,并确定各访问请求在所述缓存中的查找结果,所述查找结果包括成功结果和失败结果;
中间模块,用于根据所述成功结果,确定伪最近最少使用PLRU策略对应的中间状态;其中,与PLRU策略的状态对应的二叉树中的状态节点为除叶子节点外其他层用于表征状态的结点;所述状态结点的取值为第一状态值或第二状态值,且所述第一状态值与所述第二状态值互为反置;当所述状态结点的取值为第一状态值时,所述状态结点的指针指向所述状态结点的子结点中的一个子结点,当所述状态结点的取值为第二状态值时,所述状态结点的指针指向所述状态结点的子结点中的另一个子结点;采用下述方法确定中间状态,包括:针对每个状态节点,根据所述成功结果,若确定该状态结点仅一边子树包含对应的访问请求所访问的数据的存储地址所在的叶子结点时,且该状态结点的指针指向所述一边子树,则对该状态结点进行反置;将根据所述成功结果调整后的所述二叉树的当前状态确定为所述PLRU策略对应的中间状态;
确定模块,用于针对每个失败结果,根据该失败结果对应的访问请求在所述请求队列中的位置、所述中间状态以及所述失败结果的数量,确定该失败结果对应的访问请求所访问的数据在所述缓存的数据队列中的替换位置;
更新模块,用于将该失败结果对应的访问请求所访问的数据更新到所述替换位置。
10.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1~8任一项所述的方法。
11.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述权利要求1~8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310397646.7A CN116107932B (zh) | 2023-04-13 | 2023-04-13 | 一种数据队列更新方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310397646.7A CN116107932B (zh) | 2023-04-13 | 2023-04-13 | 一种数据队列更新方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116107932A CN116107932A (zh) | 2023-05-12 |
CN116107932B true CN116107932B (zh) | 2023-07-11 |
Family
ID=86260208
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310397646.7A Active CN116107932B (zh) | 2023-04-13 | 2023-04-13 | 一种数据队列更新方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116107932B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117349198A (zh) * | 2023-11-30 | 2024-01-05 | 摩尔线程智能科技(北京)有限责任公司 | 缓存行替换方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114297100A (zh) * | 2021-12-28 | 2022-04-08 | 摩尔线程智能科技(北京)有限责任公司 | 用于缓存的写策略调整方法、缓存装置及计算设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9928179B2 (en) * | 2011-12-16 | 2018-03-27 | Intel Corporation | Cache replacement policy |
CN109815232B (zh) * | 2018-12-27 | 2022-03-18 | 厦门市美亚柏科信息股份有限公司 | 一种利用二叉查找树的数据排名的检索、数据处理的方法和系统 |
CN110442579B (zh) * | 2019-08-02 | 2022-06-28 | 杭州复杂美科技有限公司 | 一种状态树数据存储方法、同步方法及设备和存储介质 |
CN115168244A (zh) * | 2022-07-29 | 2022-10-11 | 苏州浪潮智能科技有限公司 | 一种数据更新方法、装置、设备及可读存储介质 |
-
2023
- 2023-04-13 CN CN202310397646.7A patent/CN116107932B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114297100A (zh) * | 2021-12-28 | 2022-04-08 | 摩尔线程智能科技(北京)有限责任公司 | 用于缓存的写策略调整方法、缓存装置及计算设备 |
Also Published As
Publication number | Publication date |
---|---|
CN116107932A (zh) | 2023-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3547168A1 (en) | Block chain based data processing method and device | |
CN116107932B (zh) | 一种数据队列更新方法、装置、存储介质及电子设备 | |
CN117312394B (zh) | 一种数据访问方法、装置、存储介质及电子设备 | |
CN110399359B (zh) | 一种数据回溯方法、装置及设备 | |
CN112905365B (zh) | 一种数据处理方法、装置、设备及介质 | |
CN115328924B (zh) | 一种创建表空间的方法、装置、存储介质及电子设备 | |
CN111427885B (zh) | 基于查找表的数据库管理方法和装置 | |
CN111190655B (zh) | 一种应用缓存数据的处理方法、装置、设备及系统 | |
CN115617799A (zh) | 一种数据存储的方法、装置、设备及存储介质 | |
CN116150563B (zh) | 一种业务执行方法、装置、存储介质及电子设备 | |
CN116304212A (zh) | 一种数据处理系统、方法、设备及存储介质 | |
CN116010419A (zh) | 一种创建唯一索引和优化逻辑删除的方法及装置 | |
CN113641872B (zh) | 一种散列方法、装置、设备及介质 | |
CN116166614A (zh) | 一种日志归档的方法、装置、存储介质及电子设备 | |
CN109753351B (zh) | 一种限时任务处理方法、装置、设备及介质 | |
CN114860260A (zh) | 一种空中下载方法、装置、存储介质及电子设备 | |
CN110096477B (zh) | 一种数据存储的方法及装置 | |
CN110032563B (zh) | 一种失配值的处理方法、系统以及电子设备 | |
CN117033005B (zh) | 一种无死锁路由方法、装置、存储介质及电子设备 | |
CN116107636B (zh) | 一种硬件加速方法、装置、存储介质及电子设备 | |
CN117407124B (zh) | 一种基于构建出的数据编排策略生成模型的业务执行方法 | |
CN113641871B (zh) | 一种无锁散列方法、装置、设备及介质 | |
CN117171401B (zh) | 基于分层预计算的图数据中最短路径的查询方法和装置 | |
CN117743472B (zh) | 一种存储任务断点同步方法、装置、介质及设备 | |
CN114676132A (zh) | 一种数据表关联方法、装置、存储介质及电子设备 |
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 |