CN102999443B - 一种计算机缓存系统的管理方法 - Google Patents

一种计算机缓存系统的管理方法 Download PDF

Info

Publication number
CN102999443B
CN102999443B CN201210464057.8A CN201210464057A CN102999443B CN 102999443 B CN102999443 B CN 102999443B CN 201210464057 A CN201210464057 A CN 201210464057A CN 102999443 B CN102999443 B CN 102999443B
Authority
CN
China
Prior art keywords
cache lines
flag
hit
cache
address
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
Application number
CN201210464057.8A
Other languages
English (en)
Other versions
CN102999443A (zh
Inventor
邹阳
王去非
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.)
Guangdong global village computer system Limited by Share Ltd
Original Assignee
GUANGZHOU YOUBEIDA INFORMATION TECHNOLOGY Co Ltd
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 GUANGZHOU YOUBEIDA INFORMATION TECHNOLOGY Co Ltd filed Critical GUANGZHOU YOUBEIDA INFORMATION TECHNOLOGY Co Ltd
Priority to CN201210464057.8A priority Critical patent/CN102999443B/zh
Publication of CN102999443A publication Critical patent/CN102999443A/zh
Application granted granted Critical
Publication of CN102999443B publication Critical patent/CN102999443B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种计算机缓存系统的管理方法,其特征在于:该缓存系统由多个缓存线构成,且每个缓存线都包含一个或多个数据字,同时每个缓存线都有一个命中Hit标识位;其管理步骤为:在缓存线装载时,命中Hit标识位被置为0等步骤。本发明能确保CPU系统具有指令和数据的预取能力,能在指令和数据被真实使用前,提前发出请求从内存或者其他存储机构将指令和数据取回到CPU中,能显著的提高运算速度。

Description

一种计算机缓存系统的管理方法
技术领域
本发明涉及一种计算机缓存系统的管理算法,具体是指一种CPU缓存系统的管理方法。
背景技术
目前,计算机系统访问诸如内存和其他低级存储设备(如硬盘和网络设备)时均有很大的延迟。以访问内存为例,在CPU发出数据和指令的存取命令后,要约100纳秒的时间才能得到数据,这相当于CPU核心执行几百条指令的时间。由于CPU系统对指令和数据的使用有一定的规律,因此根据这些规律,我们便可以设计各种手段猜测CPU将要使用到的指令和数据,并提前预取这些内容到CPU中以备用。这样当CPU要实际使用这些指令和数据时,不需要等待,可以立即得到这些指令和数据。因此,预取(Prefetch)是能够有效地减少CPU访问内存和其他低级存储设备的平均访问延迟的一种手段。
然而,预取在实际应用中的功效取决于两个条件:第一,预取的准确性,也即预取的数据和指令是否及时,是否会被实际地用到;第二,预取的指令和数据对CPU缓存中现有的有用的指令和数据的排挤冲刷作用。虽然预取可以有效地降低内存访问的平均延迟,但是预取的内容会替换掉CPU缓存中现有的有用指令和数据,而这些被预取的内容替换掉的CPU缓存中现有的有用内容是将来要被重新耗费时间读入CPU的。因此对预取内容的处理不当,会增加CPU缓存失误,增加CPU对内存的访问次数,损害性能。
发明内容
本发明的目的在于克服目前CPU预取时,CPU缓存中现有的有用数据会被预取的内容替换掉,从而会增加缓存失误、降低性能的缺陷,提供一种能有效解决上述缺陷的一种计算机缓存系统的管理方法。
本发明通过以下技术方案实现:一种计算机缓存系统的管理方法,该缓存系统包括一个以上的缓存线,且每个缓存线均包含有一个或多个数据字,同时每个缓存线都有一个命中Hit标识位,所述缓存线的数据字为当前正在使用的或预取的;其管理步骤为:在缓存线装载时,其命中Hit标识位被置为0;在缓存线命中时,命中Hit标识位被置为1;替换时,首先替换命中Hit标识位为0的缓存线,再替换命中Hit标识位为1的缓存线。
进一步地,上述每个缓存线中都还设有一个预取P标识位,其管理步骤为,当缓存线的数据字为预取的内容时,P标识位置1,否则置0;在替换时,首先替换P标识位都为0的缓存线,再替换P标识位为1的缓存线。或者,每个缓存线中还设有一个U标识位,其管理步骤为,当缓存线第一次装载入缓存时,U标识位置1;在替换时,首先替换U标识位都为零的缓存线,再替换U标识位为1的缓存线。
为了较好的实现本发明,本发明的另一种技术方案为:
一种计算机缓存系统的管理方法,该缓存系统由多个缓存线构成,且每个缓存线都包含一个或多个数据字,同时每个缓存线都有一个命中Hit标识位。其管理步骤为:在缓存线装载时,命中Hit标识位被置为0;在缓存线命中时,命中Hit标识位被置为1;在替换时,首先替换命中Hit标识位为0的缓存线,再替换命中Hit标识位为1的缓存线;当命中Hit标识位为1的缓存线的数目达到预订的阈值时,或者命中Hit标识位为1的缓存线满足预定的组合逻辑近似条件的设定时,清零全部或者部分缓存线的命中Hit标识位。
为了较好的实现本发明,上述缓存线分为两个或以上的子集,当每个子集中所有缓存线的命中Hit标识位都为1,或者满足预定的组合逻辑近似条件的设定时,全部或者部分清除该子集的缓存线的命中Hit标识位。
本发明的第三种技术方案为:一种计算机缓存系统的管理方法,该缓存由多个缓存线构成,且每个缓存线包含多个数据字,同时每个缓存线按地址分成多个子集,每个子集对应一个或者多个数据字;每个子集设置一个或多个局部Sub-block标识位;当缓存查询和填充等操作采用缓存线子集对应的地址的粒度时,根据缓存线子集对应的地址粒度记录缓存线相应子集的状态和历史信息,并将信息保存在该子集对应的局部Sub-block标识位中。
为了较好的实现本发明,上述每个缓存线子集设置一个局部使用Sub-blockUsed标识位;整个缓存线设置一个或多个全局标识位,其管理步骤如下:
当缓存线第一次装入缓存时,除了正在访问的地址所对应的子集的局部使用Sub-block Used标识位置1,其他子集的局部使用Sub-block Used标识位置0;当缓存线在缓存中命中时,如果命中的地址所对应的子集的局部使用Sub-block Used标识位为0,则置1;如果命中的地址所对应的子集的局部使用Sub-block Used标识位已经为1,则改变全局标识位。
或者,在上述基础上,每个缓存线中都还设有一个全局命中Global Hit标识位,其管理步骤如下:当缓存线第一次装入缓存时,全局命中Global Hit标识位置为0,除了正在访问的地址所对应的子集的局部使用Sub-block Used标识位置1,其他子集的局部使用Sub-block Used标识位置0;当缓存线在缓存中命中时,如果命中的地址所对应的子集的局部使用Sub-block Used标识位为0,则置1;如果命中的地址所对应的子集的局部使用Sub-block Used标识位已经为1,则置全局命中Global Hit标识位为1;替换时,首先替换全局命中GlobalHit标识位为0的缓存线,在替换全局命中Global Hit标识位为1的缓存线。
第四种技术方案为:一种计算机缓存系统的管理方法,每个缓存线有一个全局使用Global Used标识位,其管理步骤如下:当缓存线第一次装入缓存时,全局Global Used标识位置为1,除了正在访问的地址所对应的子集的局部使用Sub-block Used标识位置1,其他子集的局部使用Sub-block Used标识位置0;缓存线在缓存中命中时,如果命中的地址所对应的子集的局部使用Sub-blockUsed标识位为0,则置1;如果命中的地址所对应的子集的局部使用Sub-blockUsed标识位已经为1,则置全局使用Global Used标识位为1;替换时,首先替换全局使用Global Used标识位为0的缓存线,再替换全局使用Global Used标识位为1的缓存线。
第五种技术方案:一种计算机缓存系统的管理方法,该缓存由多个缓存线构成,且每个缓存线有多个数据字;每个缓存线的数据字按地址分为多个子集,且每个子集都设置一个用于记录该子集访问历史的标识位,其管理步骤如下:
若子集对应的地址被访问,则将该子集的标识位置为1;若子集的标识位为1的数目达到预订阈值或者设定条件时,则发出内存访问的的预取命令。
本发明较现有技术相比,具有以下优点及有益效果:
(1)本发明能确保CPU系统具有效地进行指令和数据的预取,能在指令和数据被真实使用前,提前发出请求从内存或者其他存储机构将指令和数据取回到CPU中,能显著地降低平均访问延迟,从而提高运算速度。
(2)本发明CPU系统中预取的指令和数据既可以单独存放于一块缓存区,也可以与非预取的指令和数据存放于同样的缓存中,使用范围较广。
(3)本发明采用的缓存替换算法,能确保CPU系统运行的稳定性,最大程度地降低缓存失误,最少次数地对内存进行访问。
(4)本发明还具有防止WLRU缓存替换算法的过杀伤功能,因此能确保本发明的使用效果。
附图说明
图1为本发明涉及的CPU内部结构示意图。
图2为本发明实施例1中的缓存线的存储结构示意图。
图3为本发明实施例1中缓存线发生替换时选择被替换缓存线的流程图。
图4A和图4B为本发明实施例2中的缓存线的存储结构示意图。
图5A和图5B为本发明实施例2中缓存线发生替换时选择被替换缓存线的流程图。
图6为本发明实施例3中的缓存线的存储结构示意图。
图7为本发明实施例3中缓存线发生替换时选择被替换缓存线的流程图。
图8为本发明涉及的预取的指令和数据所在缓存线在填入缓存中的过程的一种流程图。
图9A为本发明预取内存访问命令在内存控制器中的第一种调度方法。
图9B为本发明预取内存访问命令在内存控制器中的第二种调度方法。
图10为本发明涉及的缓存管理方法处理“预取命中prefetch hit”的过程的一种流程图。
图11A和图11B为本发明的一种防止“假命中”现象的缓存管理方法的缓存线存储设计。
图12为本发明的一种防止WLRU替换算法“过杀伤”的设计。
图13为本发明的另一种防止WLRU替换算法“过杀伤”的设计。
具体实施方式
下面结合具体的实施例对本发明进行阐述,但本发明的实施方式不限于此。
实施例1
如图1~3所示,本发明CPU系统中的CPU独立芯片100内部集成有CPU核心110、二级缓存130、内存访问控制器MMU 140及四个内存通道。CPU核心110中内置有CPU执行机构116、第一级指令缓存112(即L1-I Cache)和第一级数据缓存114(即L1-D Cache)。二级缓存130直接与CPU核心110进行数据交换,而所述的四个内存通道(即内存通道一152、内存通道二154、内存通道三156和内存通道四158)则与内存访问控制器MMU 140相连接,以接受其管理指令。
内存访问控制器MMU 140与CPU核心110的指令和数据的填充机构交换数据。图1中的CPU独立芯片100的第一缓存采用的是指令和数据分开的存储的结构:指令存放于第一级指令缓存112中,数据存放于第一级数据缓存114中。CPU缓存是位于和CPU核心110同一块芯片上的存储区,且CPU缓存的读写延迟要明显小于位于CPU独立芯片100外部的内存,即图1中所设计的四个分别独立与四个内存通道相连接的内存模块120、内存模块122、内存模块124和内存模块126。目前,CPU缓存通常用高速读写电路,比如SRAM制造,而内存由DRAM电路制造。
图2描述了一种缓存线的存储结构示意图,该缓存线有TAG存储区260,Data存储区270,和5个标识位。所述的5个标识位为:V标识位210,H标识位220,A标识位230,D标识位240和P标识位250。其中,V标识位210代表缓存线为合法有效(Valid);H标识位220表示缓存线被命中(Hit)过,在缓存线最初装入时,H标识位220被设置为零,若缓存线命中,则置为1;A标识位230标识该缓存线已经被替换算法分配(Allocated);D标识位240表示该缓存线的内容曾经被改动过(Dirty),在被替换出缓存后,需要将改变后的内容写入内存;P标识位250代表Prefetch,如果该标识位被设置为1,表示该缓存线存储的是预取的内容。
对于非预取的指令和数据,当其填入CPU缓存中时,相应缓存线的P标识位250将被设置为零,以示和存储预取的内容的缓存线的区别。P标识位250为1的缓存线在命中后,P标识位250可以被清零。P标识位250为1的缓存线在第一次命中后,其命中H标识位220可以不置1。
如图3所示,本实施例的带P标识位的缓存线在发生替换时选择被替换缓存线的过程如下:
(310)系统运行并判断是否有不含有效信息的非法的缓存线;是,则替换V标识位为零的缓存线,用来存放新填入的缓存线,并结束进程;否,则执行步骤(320);
(320)判定是否有H标识位和P标识位同时为零的缓存线;是,则替换H标识位和P标识位都为零的缓存线,并结束进程;否,则执行步骤(330);
(330)判定是否有H标识位为零而P标识位不为零的缓存线;是,则替换H标识位为零而P标识位为1的缓存线,并结束进程;否,则执行步骤(340);
(340)判定是否有H标识位为零的缓存线;是,则替换H标识位为零的缓存线,并结束进程;否,则替换H标识位为1的缓存线,并结束进程。
实施例2
如图4A、5A所示,本实施例中的每条缓存线有TAG存储区450,Data存储区460,和4个标识位:V标识位410,H标识位420,A标识位430和D标识位440。其中,V标识位410代表缓存线为合法有效(Valid);H标识位420表示缓存线被命中(Hit)过,在缓存线最初装入时,H标识位420被设置为零,若缓存线命中,则置为1;A标识位430标识该缓存线已经被替换算法分配(Allocated),此标识位用于提醒替换算法不要重复分配同一条缓存线被替换;D标识位440表示该缓存线的内容曾经被改动过(Dirty),在被替换出缓存后,需要将改变后的内容写入内存。
本实施例与实施例1相比,其区别在于本缓存线的结构中没有用于区别预取(Prefetch)内容和即时(Demand Fetch)内容的P标识位250。当命中H标识位为1的缓存线的数目达到一定阈值或者满足一定条件时,缓存中命中H标识位为1的缓存线的命中H标识位将被全部或者部分清零。
图4B和图4A相比,每条缓存线多了一个Used标识位,简称U标识位451。当缓存线第一次载人缓存时,U标识位451置1。在替换时,U标识位451为1的缓存线的优先级高于U标识位451为0的缓存线。也就是说,同等条件下,U标识位451为0的缓存线先于U标识位451为1的缓存线被替换出去。当U标识位451被置为1的缓存线的数目超过一定的阈值,或者达到某条件后,缓存中U标识位451为1的缓存线的U标识位451将被全部或者部分清零。
如图5A所示,采用本实施例图4A的缓存线的存储结构时的替换过程如下:
(510)系统运行并判定V标识位是否有为零的缓存线;是,则替换该非法的缓存线,并结束过程;否,则执行步骤(520);
(520)判定H标识位是否有为零的缓存线;是,则替换该非法的缓存线,并结束进程;否,则替换H标识位为1的缓存线,并结束进程。
如图5B所示,当采用图4B所示的缓存线存储结构时的替换过程如下:
(530)系统运行并判定V标识位是否有为零的缓存线;是,则替换该缓存线,并结束过程;否,则执行步骤(540);
(540)判定是否有H标识位和U标识位都为零的缓存线;是,则替换该缓存线,并结束过程;否,则执行步骤(550);
(550)判定是否有H标识位为零,U标识位为1的缓存线;是,则替换该缓存线,并结束过程;否,则执行步骤(560);
(560)替换H标识位为1的缓存线,结束过程。
实施例3
如图6、7所示,本实施例中的缓存线有TAG存储区670,Data存储区680,和6个标识位:V标识位610,H标识位620,A标识位630,D标识位640,P标识位650和U标识位660。
其中,V标识位610代表缓存线为合法有效(Valid);H标识位620表示缓存线被命中(Hit)过,在缓存线最初装入时,H标识位620被设置为零,若缓存线命中,则置为1;A标识位630标识该缓存线已经被替换算法分配(Allocated);D标识位640表示该缓存线的内容曾经被改动过(Dirty),在被替换出缓存后,需要将改变后的内容写入内存;P标识位650若为1,表示该缓存线为预取(Prefetch)内容,若为零表示该缓存线为即时(Demand Fetch)内容;U标识位660,在缓存线初次被装入缓存时,置为1,表示该缓存线为新内容。
本实施例与实施例1相比,在其缓存线中增加了一个U标识位660。根据CPU系统的实际使用环境的不同特征,为了控制预取数据在缓存中的停留时间,对于预取(Prefetch)内容,U标识位660可以置为1或者零。
本实施例的缓存线的存储结构的缓存的替换过程如下:
(710)系统运行并判断是否有H标识位、P标识位和U标识位都为零的缓存线;是,则执行步骤(720)替换H标识位、P标识位和U标识位都为零的缓存线,并结束进程;否,则执行步骤(730);
(730)判断是否有H标识位和U标识位都为零,P标识位为1的缓存线;是,则执行步骤(740)替换H标识位和U标识位为零,而P标识位为1的缓存线,并结束进程;否,则执行步骤(750);
(750)判断是否有H标识位和P标识位都为零,U标识位为1的缓存线;是,则执行步骤(760)替换H标识位和P标识位都为零,U标识位为1的缓存线,并结束进程;否,则执行步骤(770);
(770)判断是否有H标识位为零,P标识位和U标识位都为1的缓存线;是,则执行步骤(780)替换H标识位为零,P标识位和U标识位都为1的缓存线,并结束进程;否,则执行步骤(715);
(715)判断是否有H标识位为1,P标识位和U标识位都为0的缓存线;是,则执行步骤(725)替换H标识位为1,P标识位和U标识位都为0的缓存线,并结束进程;否,则执行步骤(735);
(735)判断是否有H标识位和P标识位都为1,U标识位为0的缓存线;是,则执行步骤(745)替换H标识位和P标识位都为1,U标识位为0的缓存线,并结束进程;否,则执行步骤(755);
(755)判断是否有H标识位和U标识位都为1,P标识位为零的缓存线;是,则执行步骤(765)替换H标识位和U标识位都为1,P标识位为零的缓存线,并结束进程;否,则执行步骤(775);
(775)替换H标识位,P标识位和U标识位都为1的缓存线,并结束进程。
预取的指令和数据所在的缓存线填入缓存中的过程如图8所示,即首先将预取得到的指令和数据的缓存线按其地址映射到CPU缓存的相应的组(Set)中。如果该组中的缓存线的Hit标识位全部被设置为1,或者组中Hit标识位已经被设置为1的缓存线的数目超过一个预先设定的阈值,比如一半或者3/4的缓存线已经设置了Hit标识位,则此次预取得到的指令和数据的缓存线不填入缓存中,被抛弃;否则继续预取得到的缓存线的填入操作。
图9A为预取内存访问命令在内存控制器MMU中的一种调度方法,如图所示,即当系统开始运行时,首先判定内容访问是否预取?是,则判定预取内存访问命令的地址所映射的内存通道是否为空闲;否,则执行该预取内存访问命令并结束进程。若预取内存访问命令的地址所映射的内存通道为空闲,则预取该次预取内存访问命令取消,否则便放弃此次预取内存访问。
图9B为预取内存访问命令在内存控制器MMU中的另一种调度方法,如图所示,即在每个内存通道设置一个等待队列,用于存放所有内地地址映射到此内存通道的内存访问命令。当此队列满,或者达到了设定的上限,则预取内存访问命令取消,不进入内存通道的等待队列;只有当内存通道的等待队列未达上限,预取命令才进入内存通道的等待队列。
图10描述了本发明涉及的缓存管理方法处理“预取命中prefetch hit”的过程的一种设计。
预取Prefetch命令所请求的地址有可能已经存在于CPU缓存中了,这种情况被称为“预取命中prefetch hit”。在图10的设计中,缓存线的存储结构采用图4的设计。WLRU缓存替换算法对“预取命中Prefetch Hit”的处理完全等同于普通的内存访问的命中hit。如图10所示,在判断1010中,如果预取命令的地址在缓存中命中,则设置命中缓存线的H标识位420为1,一如非预取的内存访问命令在缓存中命中时的操作,并终止此次预取操作。
实施例4
为了减少存储地址标识(Address Tag)的空间开销,CPU缓存往往用一个地址标识对应多个内存数据字(Memory Words),也就是一个缓存线有多个内存数据字。这就产生了“假命中(False Hit)”现象。“假命中”是指在CPU缓存判定产生了命中,但是实际上CPU并没有真正地重复访问同一个内存数据字的地址。“假命中”产生的原因是因为CPU缓存的缓存线大于CPU实际的内存访问粒度,所以CPU缓存无法正确地判断是否CPU真正地重复访问了同一个地址。
“假命中”现象在多级CPU缓存中也会发生。在多级CPU缓存中,如果上一级缓存(L1 Cache)的缓存线尺寸(Cache Line Size)比下一级缓存(L2 Cache)的缓存线尺寸要小,也会产生“假命中”的现象。如图11A所示的例子,第一级缓存的缓存线为32字节,而第二级缓存的缓存线为128字节。第二级缓存线的大小为第一级缓存线的四倍。因为第一级缓存的缓存线比第二级小,如果第一级缓存从第二级缓存不重复地访问属于同一个第二级缓存线的四个32字节的地址,第二级缓存无法区分,会误以为该缓存线在第二级缓存中被命中了三次。我们称这种现象为多级缓存的“假命中”。
与“假命中”相对应,真正的命中是CPU或者多级缓存中的上一级缓存的确重复访问了同一个地址或者同一地址区间。举例,在一个32位的内存地址空间中,内存地址0x123abc80到内存地址0x123abcff都属于同一个128字节长的第二级缓存的缓存线;而在缓存线为32字节长的第一缓存中,内存地址0x123abcc0则属于不同于0x123abc80的第一级缓存缓存线。如果CPU依次访问内存地址0x123abc80和内存地址0x123abcc0,在第一级缓存没有命中,但是在第二级缓存看来则访问了同一缓存线两次,被错误地认为是命中。
“假命中”现象会使CPU缓存的替换算法产生误判,误以为一些缓存线是高价值的缓存内容,从而错误地将它们保存较长时间,浪费了稀有的缓存空间,造成更多的缓存失误,损害CPU的性能。缓存线尺寸越大,“假命中”的现象也越经常地发生。
图11B描述了一种防止“假命中”的方法的缓存线的存储方式安排。相比于图4,图11B增加了四个“局部使用(Sub-block Used)”标识位,分别是SU01150,SU11151,SU21152,SU31153。图11B描述的缓存线存储方式和图11A中的例子相对应。第二级缓存采用128字节的缓存线,第一级缓存采用32字节的缓存线,第二级缓存的缓存线尺寸是第一级缓存的缓存线大小的四倍。一般而言,第二级缓存的缓存线的尺寸为第一级缓存的缓存线的N倍,则应设定N个“局部使用标识位”。“局部使用标识位”把第二级缓存的缓存线按第一级缓存的缓存线的尺寸划分为N个小的局部地址区间(Sub-block),并用一个标识位来记录第二级缓存的缓存线在这个更小的局部地址区间中的使用历史,故得名“局部使用标识位”。在图11A的示例中,第二级缓存的缓存线为128个字节,是第一级缓存的缓存线尺寸32字节的四倍,故图11B设置四个“局部使用标识位”,SU01150,SU11151,SU21152和SU31153。在图11B的示例中,假设内存地址总长为32位(最高地址位编号为31,最低地址位编号为0),那么内存地址的第6位和第5位将用来映射相应的“局部使用标识位”。如果内存地址的这两位为00,则对应SU01150;如果为01,则对应SU11151;如果为10,则对应SU21152;如果为11,则对应SU31153。
与“局部使用标识位”,SU01150,SU11151,SU21152,SU31153,相对应,图11B中的“命中Hit标识位”H 1120,在此处被称为“全局命中(GlobalHit)”标识位。
当CPU访问某个内存地址时,如果产生缓存失误,第二级缓存将载入该内存地址对应的缓存线。在缓存线载入时,除了该内存地址对应的局部地址区间的“局部使用标识位”被置一以外,其他的“局部使用标识位”和“全局命中标识位”H 1120都被置为零。在图11A的示例中,如果引发缓存线载入所访问的内存地址处于128字节长的第二级缓存的缓存线的第二个32字节的区间,也就是其地址的第6位和第5位为01,则SU11151被置一,而SU01150,SU21152,SU31153被置零;如果引发缓存线载入时的地址处于第一个32字节的区间,也就是其地址的第6位和第5位为00,则SU01150,被置一,而SU11151,SU21152,SU31153被置零。在缓存线载入时,“全局命中标识位”H 1120总是被置为零。
在缓存线载入后,如果某次内存访问的地址的TAG字段和第二级缓存的某缓存线的TAG 1160内容的比较结果相同,这时还不能确定就一定是真正的命中。我们还将进一步分析内存访问地址所对应的局部区间的使用历史,才能确定是否是真正的命中。如果该次内存访问的地址所对应的第二级缓存的缓存线的相应局部区间的“局部使用标识位”为零,则置该标识位为一。
这不是一次真正的命中,而是“假命中”。在图11的示例中,假设访问的地址位于第二级缓存的缓存线的头32个字节区间,则置SU01150为一;如果地址位于第二个32字节区间,则置SU11151为一;如果地址位于第3个32字节的区间,则置SU21152为一;如果地址位于最后一个32字节区间,则置SU31153为一。在改变“局部使用标识位”,SU01150,SU11151,SU21152,SU31153,中的任何一个,从零置为一的过程中,“全局命中标识位”,H 1120,将始终保持为零,除非某“局部使用标识位”在已经为一的情况下再次被访问,也就是真正的命中的情况。
如果“局部使用标识位”,SU01150,SU11151,SU21152,SU31153,中的某些个已经被置为一,而后继内存访问的地址又落在该“局部使用标识位”所对应的地址区间,则这是真正的命中。此时,将置“全局命中标识位”H 1120为一。在设置“全局命中标识位”H 1120为一时,有可能有某些“局部使用标识位”依然保持为零。
在替换决策过程中,“全局命中标识位”H 1120被设置为一的缓存线,相比于“全局命中标识位”未被设置为一的缓存线有更高的优先级被保留在缓存中。在其他情况相当的前提下,替换算法将先将“全局命中标识位”H 1120为零的缓存线替换出缓存。
“全局”和“局部使用”标识位的设计也可以用在LRU算法中来缓解“假命中”对LRU算法不良影响。具体做法是,设置一个“全局使用(Global Used)”标识位和多个“局部使用(Sub-block Used)”标识位用以记录缓存线的全局和局部地址空间的使用情况。在缓存线装入时,全局使用标识位被置1,并在今后的缓存使用过程中,有可能被清零。“局部使用”标识位在缓存线装入时,除了正在被访问的地址所对应的局部地址空间的局部使用标识位被置1外,其他的局部使用标识位都被置为0。若某局部地址空间被访问,则置该局部地址空间所对应的局部使用标识位为1;如果某局部地址空间对应的局部使用标识位已经为1的情况下,又被访问,则置全局使用标识位为1。在替换时,全局使用标识位为1的缓存线有优先权被保留,全局使用标识位为零的缓存线将先被替换出去。
利用“局部使用标识位”进行预取。所谓的“局部使用标识位”记录一个比较大的缓存线中某个局部地址区间的使用记录。“局部使用标识位”的信息可以用来触发预取(Pre-fetch)。在图11 A的示例中,缓存线的大小为128字节,有四个“局部使用标识位”。如果四个“局部使用标识位”都被置为一,表示该缓存线对应的内存地址空间很有可能正在经历顺序遍历的访问。
此时,为了降低平均内存访问延迟,可以发出对该缓存线所对应内存地址附近地址的顺序预取命令。假设,如果该缓存线对应的内存地址为A,当此缓存线的四个“局部使用标识位”都为一时,就可以发出对内存地址A+k,A+2k等的预取命令(k为缓存线大小,对32字节的缓存线,k为32;对于128字节的缓存线,k为128)(注,k可以是负数,比如在堆栈中,地址是向下生长)。
在某些应用环境中,可以更加“激进”地预取。不必等到“局部使用标识位”全部为一才发出预取命令。可以根据具体应用环境的特征,设置一个阈值,如果“局部使用标识位”为一的数目超过这个阈值,就发出预取命令。在图11B的示例中,可以将预取阈值设定为2,如果内存地址A所对应的缓存线有两个“局部使用标识位”为一,就发出对A+128,A+256等的内存地址的预取命令。
预取的参数可以和“局部使用标识位”的记录情况相关联。比如,预取的长度,也就是预取多少个内存字节,可以是“局部使用标识位”中为一的标志位的状态的一个函数。如果一个缓存线的“局部使用标识位”中为一的数目多,可以更加“激进”地预取,预取更多的字节。如果一个缓存线的“局部使用标识位”中为一的数目少,则预取少一点的字节。
除了利用“局部使用标识位”进行顺序预取,还可以利用“局部使用标识位”的信息发出其他类型的预取命令,比如间隔预取(Stride Prefetch)和基于历史的预取(Prefetch Based On History-Buffer)。“局部使用标识位”提供了一个关于某地址区间的使用情况的很好的时机,可以被使用在各种预取方法中。
防止WLRU替换算法的“过杀伤”的设计。相比于LRU替换算法,WLRU替换算法能够更快地将不会被再次使用的地址替换出缓存。这是为什么WLRU替换算法相比于LRU替换算法对于数据量大的应用有更好的表现的原因。但是,对于某些应用,特别是当缓存的容量较小时,WLRU有可能过快地将新的缓存内容在其被再次访问之前替换出缓存,从而造成更多的缓存失误。这是WLRU替换算法的“过杀伤(Over Killing)”现象。
在WLRU替换算法中,被命中过的缓存线,也就是命中Hit标识位被置1的缓存线,在替换时比刚刚装入缓存的缓存线(其命中Hit标识位为0)有更高的优先级。限制缓存中命中Hit标识位为1的缓存线的数目,可以使得新装入的缓存线被替换掉的几率降低,使新装入的缓存线能够停留更长时间,从而缓解WLRU替换算法的“过杀伤”现象。
图12描述了一种防止WLRU替换算法过杀伤的设计。图12的示例为一个16路组相关(16 way set associative)缓存,每一个组共16条缓存线。此设计使用一个计数器1210监测缓存组中命中Hit标志位已经置1的缓存线的数目。当计数器1210的值超过某一阈值,比如13,则清零缓存线的命中Hit标识位。可以是全部清零所有缓存线的命中Hit标识位,也可以只清零一部分缓存线的命中Hit标识位。计数器1210也可以监控缓存组中命中Hit标识位未置1的缓存线数目,如果未置1的缓存线的数目低于阈值,比如3,则将缓存组中全部或者部分缓存线的命中Hit标识位清零。这个阈值可以是预先设定或者根据应用程序的特征动态设定的。
为了降低计数器的加法电路难度,在图12的示例中,也可以把16条缓存线划分两个或者多个子集,比如缓存线0到缓存线7为一个子集,缓存线8到缓存线15为一个子集,分别计算子集中的命中Hit标识位为1的缓存线的数目。如果子集的计数器超过一个阈值,则清零子集中全部或者部分的缓存线的命中Hit标识位。
采用组合逻辑电路的近似算法来计算命中Hit标识位为1的缓存线数目可以进一步地降低电路的复杂度并提高电路的计算速度。当组合逻辑电路的输出为1时,开始清除缓存线的命中Hit标识位。由组合逻辑电路计算出的缓存中的命中Hit标识位为1的缓存线数目是近似的,不精确,但是其计算结果可以容忍。
图13是另外一种比图11更加简单快速的防止WLRU替换算法“过杀伤”的电路设计。图13中,无需计算缓存线的命中Hit标识位为1或者0的数目,而是简单地使用一个“与(And)门”逻辑代替加法电路。一个“与门”连接任意一组缓存线的命中Hit标识位,如果这组缓存线的命中Hit标识位都为1,则“与门”输出为1,此时全部或者部分清零这组缓存线的命中Hit标识位。图13中的示例中,简单起见,每四条缓存线的命中Hit标识位和一个“与门”连接。缓存线0到3的命中Hit标识位和“与门”1320相连,缓存线12到15的命中Hit标识位和“与门”1330相连。以“与门”1320为例,如果缓存线0到3的命中Hit标识位都为1,则“与门”1320输出为1,此时,清零缓存线0到3的全部或部分命中Hit标识位。
在图13的设计中,还可以增加与门的数目,比如,增加4个与门:缓存线0,4,8,12,连接到一个与门;缓存线1,5,9,13连接到第二个与门;缓存线2,6,10,14连接到第三个与门;缓存线3,7,11,15连接到第四个与门。当这些与门的输出为1时,清除全部或者部分缓存线的命中Hit标识位。一般来讲,根据应用程序的不同特征,清除命中Hit标识位的组合逻辑条件的设定可以在精确和电路复杂度之间找到平衡。
在上述过程中,清零缓存线的命中Hit标识位,可以全部清零,也可以只清零一部分,比如清零其中一半的缓存线。部分清零时,可以采用一个伪随机的指针来确定要清零的缓存线。如果清零一半的缓存线,指针只需1位宽。当指针的值为零时,清零低半部分的缓存线的命中Hit标识位;指针的值为1时,清零编号在高半部分的缓存线的命中Hit标识位。在图12的示例中,如果每次清零一半的缓存线,当指针为0时,清零缓存线0到7,指针为1时,清零缓存线8到15。每做一次清零动作后,指针的值翻转,从0变为1或者从1变为0。
WLRU替换算法的防“过杀伤”设计可以保证新的缓存内容在缓存中能够有适当的停留时间通过这段停留时间,WLRU替换算法可以有效地判断缓存内容的价值,从而保留高价值的缓存内容,尽快地替换无价值的缓存内容。防止“过杀伤”设计的参数可以预先设定好的,也可以是根据应用程序的特征动态配置的。
如上所述,便可较好的实现本发明。

Claims (2)

1.一种计算机缓存系统的管理方法,其特征在于:该缓存系统由多个缓存线构成,且每个缓存线都包含一个或多个数据字,同时每个缓存线都有一个命中Hit标识位;
其管理步骤为:
在缓存线装载时,命中Hit标识位被置为0;
在缓存线命中时,命中Hit标识位被置为1;
在替换时,首先替换命中Hit标识位为0的缓存线,再替换命中Hit标识位为1的缓存线;
当命中Hit标识位为1的缓存线的数目达到预订的阈值时,或者命中Hit标识位为1的缓存线满足预定的组合逻辑近似条件的设定时,清零全部或者部分缓存线的命中Hit标识位。
2.根据权利要求1所述的一种缓存系统的管理方法,其特征在于,所述的缓存线分为两个或以上的子集,当每个子集中所有缓存线的命中Hit标识位都为1,或者满足预定的组合逻辑近似条件的设定时,全部或者部分清除该子集的缓存线的命中Hit标识位。
CN201210464057.8A 2012-11-16 2012-11-16 一种计算机缓存系统的管理方法 Active CN102999443B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210464057.8A CN102999443B (zh) 2012-11-16 2012-11-16 一种计算机缓存系统的管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210464057.8A CN102999443B (zh) 2012-11-16 2012-11-16 一种计算机缓存系统的管理方法

Publications (2)

Publication Number Publication Date
CN102999443A CN102999443A (zh) 2013-03-27
CN102999443B true CN102999443B (zh) 2015-09-09

Family

ID=47928033

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210464057.8A Active CN102999443B (zh) 2012-11-16 2012-11-16 一种计算机缓存系统的管理方法

Country Status (1)

Country Link
CN (1) CN102999443B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105988952B (zh) * 2015-02-28 2019-03-08 华为技术有限公司 为内存控制器分配硬件加速指令的方法和装置
CN105095114A (zh) * 2015-08-13 2015-11-25 广州优倍达信息科技有限公司 一种计算机缓存系统的管理方法
CN105005537A (zh) * 2015-08-13 2015-10-28 广州优倍达信息科技有限公司 一种计算机缓存系统的管理方法
CN105068942A (zh) * 2015-08-13 2015-11-18 广州优倍达信息科技有限公司 一种计算机缓存系统的管理方法
CN106649143B (zh) * 2015-10-29 2020-06-26 阿里巴巴集团控股有限公司 一种访问缓存的方法、装置及电子设备
CN109408411A (zh) * 2018-09-25 2019-03-01 浙江工商大学 基于数据访问次数的GPGPU的L1 Cache管理方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1829979A (zh) * 2003-08-05 2006-09-06 Sap股份公司 数据缓存方法
CN101576856A (zh) * 2009-06-18 2009-11-11 浪潮电子信息产业股份有限公司 一种基于长短周期访问频度的缓存数据替换方法
CN101944068A (zh) * 2010-08-23 2011-01-12 中国科学技术大学苏州研究院 一种共享高速缓存的性能优化方法
US7908439B2 (en) * 2007-06-25 2011-03-15 International Business Machines Corporation Method and apparatus for efficient replacement algorithm for pre-fetcher oriented data cache
CN102521158A (zh) * 2011-12-13 2012-06-27 北京北大众志微系统科技有限责任公司 一种实现数据预取的方法及装置
CN102662868A (zh) * 2012-05-02 2012-09-12 中国科学院计算技术研究所 用于处理器的动态组相联高速缓存装置及其访问方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6957304B2 (en) * 2000-12-20 2005-10-18 Intel Corporation Runahead allocation protection (RAP)

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1829979A (zh) * 2003-08-05 2006-09-06 Sap股份公司 数据缓存方法
US7908439B2 (en) * 2007-06-25 2011-03-15 International Business Machines Corporation Method and apparatus for efficient replacement algorithm for pre-fetcher oriented data cache
CN101576856A (zh) * 2009-06-18 2009-11-11 浪潮电子信息产业股份有限公司 一种基于长短周期访问频度的缓存数据替换方法
CN101944068A (zh) * 2010-08-23 2011-01-12 中国科学技术大学苏州研究院 一种共享高速缓存的性能优化方法
CN102521158A (zh) * 2011-12-13 2012-06-27 北京北大众志微系统科技有限责任公司 一种实现数据预取的方法及装置
CN102662868A (zh) * 2012-05-02 2012-09-12 中国科学院计算技术研究所 用于处理器的动态组相联高速缓存装置及其访问方法

Also Published As

Publication number Publication date
CN102999443A (zh) 2013-03-27

Similar Documents

Publication Publication Date Title
CN102999443B (zh) 一种计算机缓存系统的管理方法
US11636038B2 (en) Method and apparatus for controlling cache line storage in cache memory
US7558920B2 (en) Apparatus and method for partitioning a shared cache of a chip multi-processor
TWI234709B (en) Weighted cache line replacement
KR101620773B1 (ko) 복합식 비휘발성 저장 디바이스를 위한 데이터 이송
CN106909515B (zh) 面向混合主存的多核共享末级缓存管理方法及装置
US10831678B2 (en) Multi-tier cache placement mechanism
CN109313610A (zh) 用于高速缓存替换策略的缩放集合竞争
US6829679B2 (en) Different caching treatment of memory contents based on memory region
US20120151149A1 (en) Method and Apparatus for Caching Prefetched Data
CN105095114A (zh) 一种计算机缓存系统的管理方法
US11093410B2 (en) Cache management method, storage system and computer program product
CN109582600A (zh) 一种数据处理方法及装置
CN110297787A (zh) I/o设备访问内存的方法、装置及设备
CN115525793A (zh) 由计算机实现的方法、系统及存储介质
CN105068942A (zh) 一种计算机缓存系统的管理方法
CN107861819B (zh) 一种缓存组负载均衡的方法、装置和计算机可读存储介质
CN106339330A (zh) 高速缓存刷新的方法及系统
CN105005537A (zh) 一种计算机缓存系统的管理方法
CN115168248A (zh) 支持simt架构的高速缓冲存储器及相应处理器
CN104850508A (zh) 基于数据局部性的访存方法
CN113296686A (zh) 数据处理方法、装置、设备及存储介质
CN109117388B (zh) 针对内存端缓存的数据动态旁路装置及方法
CN115080459A (zh) 缓存管理方法及装置、计算机可读存储介质
WO2022199258A1 (zh) 一种缓存管理方法及存储设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20160128

Address after: 510080, room 37, No. 301 South Zhixin Road, Guangzhou, Guangdong, Yuexiu District

Patentee after: Zou Yang

Address before: 510000, room 242, 706 Tianhe East Road, Guangdong, Guangzhou, Tianhe District

Patentee before: Guangzhou Youbeida Information Technology Co., Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20171128

Address after: 510660 No. 62, room second, No. 62, No. second, industrial park, first industrial park, Tianhe District Hi-tech Industrial Development Zone, Guangzhou City

Patentee after: Guangdong global village computer system Limited by Share Ltd

Address before: 510080, room 37, No. 301 South Zhixin Road, Guangzhou, Guangdong, Yuexiu District

Patentee before: Zou Yang

TR01 Transfer of patent right

Effective date of registration: 20171206

Address after: 510660 No. 62, room second, No. 62, No. second, industrial park, first industrial park, Tianhe District Hi-tech Industrial Development Zone, Guangzhou City

Patentee after: Guangdong global village computer system Limited by Share Ltd

Address before: 510080, room 37, No. 301 South Zhixin Road, Guangzhou, Guangdong, Yuexiu District

Patentee before: Zou Yang

PE01 Entry into force of the registration of the contract for pledge of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Management method of computer cache system

Effective date of registration: 20190111

Granted publication date: 20150909

Pledgee: Bank of China Limited Guangzhou Yuexiu Branch

Pledgor: Guangdong global village computer system Limited by Share Ltd

Registration number: 2019440000016