CN101989236B - 一种指令缓存锁实现方法 - Google Patents
一种指令缓存锁实现方法 Download PDFInfo
- Publication number
- CN101989236B CN101989236B CN2010105317999A CN201010531799A CN101989236B CN 101989236 B CN101989236 B CN 101989236B CN 2010105317999 A CN2010105317999 A CN 2010105317999A CN 201010531799 A CN201010531799 A CN 201010531799A CN 101989236 B CN101989236 B CN 101989236B
- Authority
- CN
- China
- Prior art keywords
- memory block
- memory
- access
- buffer memory
- counter
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000005516 engineering process Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 238000004134 energy conservation Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000006386 neutralization reaction Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种指令缓存锁实现方法,所述方法包括如下步骤:1)程序概要分析,预先运行一段程序,记录包括内存块访问顺序和引用次数、重复访问的时间间隔、命中次数;2)选择内存块锁入缓存,对每个内存块设置一个访问计数器和LRU计数器,访问计数器记录内存块的访问次数,将每个内存块中的访问计数器和LRU计数器分别分配权重N1、N2,按照N1*访问次数+N2*(LRU计数器的极限值-LRU值)进行统计,如果统计值超过阈值M,则将该内存块锁在缓存中,N1+N2=1。本发明锁在指令缓存中的内存块只有在锁被解除时才能被替换,大大提高缓存命中率,减少低级存储器的访问,减少了平均内存访问延迟。
Description
技术领域
本发明涉及体系结构中的存储领域,特别涉及一种指令缓存锁实现方法。
背景技术
目前大多数嵌入式系统的性能在很大程度上是受内存平均访问延迟来决定的,提高缓存的命中率就能减少内存的访问次数,也就能提高系统性能。当前的一些嵌入式处理器都使用缓存锁机制,在软件的控制下将一些内存块锁在缓存中。缓存的作用主要是缓解调整处理器与低速主存之间速度及性能上的不匹配,在实际过程中,指令缓存在嵌入式系统性能和能源消耗方面起到至关重要的作用,因为指令是在每个时钟周期都要提取的。指令缓存性能的提高,对整个系统性能影响很大,很多技术都是针对指令缓存性能进行改进的。
指令缓存锁机制主要是用于实时要求较高的系统,实时判断性强。在高实时性系统中,最坏情况下的执行时间是多任务实时任务调度分析算法的输入数据,但是这种方法用在微型硬件结构上就难以评估一个安全可靠的最坏运行时间。在缓存中静态锁住一些指令,最坏运行时间的可预测性变得更高。目前也有人提出过一些关于指令缓存锁的方法,例如LRU算法(最近最少使用算法),对于在内存中但最近又不用的数据块(内存块),每次调换时,找到最近最少使用的那个页面调出内存。还有一些缓存锁方法是循环结构,每次循环都要进行评估预测,性能损耗大,且用得是相同的方法来评估性价比这就导致不精确。前人也曾为每一数据访问指令而提出的基于引用长度窗口的数据缓存锁机制,数据缓存锁没有评估好性价比,也不能保证性能提高。
发明内容
为了提高系统性能和降低能源消耗,提高缓存命中率,减少低级存储器的访问,本发明提出一种指令缓存锁实现方法。
本发明解决技术问题所采用的技术方案是:
一种指令缓存锁实现方法,所述方法包括如下步骤:
1)程序概要分析
预先运行一段程序,记录包括内存块访问顺序和引用次数、重复访问的时间间隔、命中次数;
2)选择内存块锁入缓存
程序开始运行时,对每个内存块设置一个访问计数器和LRU计数器,访问计数器记录内存块的访问次数,对每个内存块中的访问计数器和LRU计数器分别分配权重N1、N2,根据步骤1)记录内存块命中次数,按照N1*访问次数+N2*(LRU计数器的极限值-LRU值)进行统计,如果统计值超过阈值M,则将该内存块锁在缓存中,并满足锁入缓存中内存块总数不超过缓存空间容量,N1+N2=1。
所述访问计数器权值N1值为:0.3≤N1≤0.6,所述LRU计数器权值N2值为:0.4≤N2≤0.7。
所述选择内存块锁入缓存,如果锁入缓存中的内存块命中次数小于阈值A,则调高LRU计数器的权重;如果锁入缓存中内存块命中次数超过阈值B,则调高内存块访问计数器的权重;如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的值,则将该内存块锁入缓存中。
所述选择内存块锁入缓存,如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的值,则将该内存块替换缓存中小于该统计值的内存块。
本发明具有的有益效果是:锁在缓存中的内存块是不会被替换算法替换出去的,只有在锁被解除时才能被替换,这些具有锁状态的内存块是一些引用次数较多的块,将它们保留在缓存中能大大提高缓存命中率,减少低级存储器的访问,减少了平均内存访问延迟。这种锁缓存技术在性能和节能方面都有很大的提高,相对于之前的一些节能技术精确度更高。
附图说明
图1是本发明一种实施例的流程图;
图2是本发明一种实施例的局部流程图。
具体实施方式
以下结合附图对本发明提供的指令缓存锁实现方法作进一步详细的描述:
图1是本发明一种实施例的流程图,该方法包括如下步骤:
1)程序概要分析,预先运行一段程序,记录包括内存块访问顺序和引用次数、重复访问的时间间隔、命中次数;
2)选择内存块锁入缓存
程序开始运行时,对每个内存块设置一个访问计数器和LRU计数器,访问计数器记录内存块的访问次数,对每个内存块中的访问计数器和LRU计数器分别分配权重N1、N2,根据步骤1)记录内存块命中次数,按照N1*访问次数+N2*(LRU计数器的极限值-LRU值)进行统计,如果统计值超过阈值M,则将该内存块锁在缓存中,并满足锁入缓存中内存块总数不超过缓存空间容量,N1+N2=1。
本发明的内存块的LRU算法为已有技术,对内存块设置LRU计数器,当该内存块命中时,命中的内存块的LRU计数器清零,未命中的LRU计数器加1。访问计数器用于记录内存块访问次数,第一次装入缓存时该计数器值为0,每次访问到它时就增加1。阈值M可以进行设定,例如4/16、3/16等值。其中:
1)程序概要分析过程如下:
①模拟运行一段程序:图2是本发明局部流程图,要对程序特征进行分析,就需要先模拟运行一段程序,或者完整地运行一次。在这个过程中,要记录程序内存块访问序列,每个内存块被引用的次数。
②程序运行过程特征分析:根据之前程序运行的记录信息,对程序特征进行分析,这是为内存块锁算法选择最优锁方案提供基础信息。这些分析包括内存块访问顺序和引用次数,重复访问的时间间隔,命中次数及跳转记录。
这个阶段可执行一次,保存的信息可供以后使用,这可避免多次重复无效的执行程序,一次记录信息可供终身使用,对于不同的输入数据,程序的行为可能会不一样,也可根据输入数据进行更新,从总体来看,这部分只不会对程序性能造成负面影响。通过在机器上运行一段程序,并记录访问信息,从而得到访问较多的内存块。
程序概要分析过程中,可以使用临时内存块重复引用信息表来模拟程序行为,临时内存块引用件中包含程序运行过程中一些内存块的访问记录。这部分是为后面的锁算法提供基础信息,一般是在程序运行前操作完成,或是程序以前运行保存下来的。
2)选择内存块锁入缓存
是否将该内存块锁入缓存中,可以采用最优算法和启发式算法。
①最优算法,实现步骤
按照N1*访问次数+N2*(LRU计数器的极限值-LRU值)进行统计,如果统计值超过阈值M,则将该内存块锁在缓存中,并满足锁入缓存中内存块总数不超过缓存空间容量,N1+N2=1。阈值M可以进行设定。
在程序概要分析时,当获得命中较多的内存块时,将其N1值设定为较大,未命中或者命中较少的内存块的N1值设定为较小。
当一个内存块的访问次数很大(相对于其他块来说),LRU计数时不是最高那么就可以考虑将它锁在缓存中;如果一个块访问次数较少,但是它的LRU计数器很低,那么也可心考虑将它锁在缓存,其中还有一点就是当前锁在缓存中的内存块数不能超过缓存空间容量,如果被锁的块的LRU计数器增加较多时,便对它解锁,认为它对缓存命中无贡献。
缓存是分组的,每个组独立分析,最终选择能使这个组的命中率达到最高的方案。对每一个内存块,要分析它是否能锁在缓存中,搜索空间可以看成是一个二叉搜索树。在二叉搜索树中和每一级都是对应于一个内存块的锁判定方案,是否要锁该块,当到达叶子结点或者缓存组中锁定的内存块数量为组关联行数时,就停止搜索,返回一个锁策略。
二叉搜索树中的每一级对应一个内存块的锁策略,在搜索过程中,当发现锁住该块在指令缓存中时能增加总体命中率时,便表示这块将被标记不锁状态,否则为非锁状态。它会为程序分析信息表中记录的每一个内存块进行锁判定,根据状态计算命中率,最后选择命中率最高的状态作为最终方案。
②启发式算法,实现步骤
启发式算法是相对于最优算法,它的目的也是寻找一种使缓存命中率最高的锁方案,所谓启发也就是会受前面搜索结果的影响(启发)。它也是根据各内存块的访问频率,以寻找能达到最高缓存命中率的锁方案。
如果锁入缓存中的内存块命中次数小于阈值A,则调高LRU计数器的权重。阈值A的值可以预先设定,例如2。
如果锁入缓存中内存块命中次数超过阈值A,则调高内存块访问计数器的权重。阈
如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的值,则将该内存块锁入缓存中。将未锁入缓存中内存块的统计值与锁入缓存中内存块值分别比较,只要有大于任一锁入缓存中内存块值则将该内存块锁入缓存中。
如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的值,则将该内存块替换缓存中的内存块。将未锁入缓存中内存块的统计值与锁入缓存中内存块值分别比较,如果有未锁入缓存中内存块的统计值大于锁入缓存中内存块的统计值,则将该内存块替换缓存中的内存块。
启发式算法根据前面被锁住的块的访问次数和LRU计数器进行下一个块的寻找。前面最优算法是综合考虑访问次数和LRU计数器。如果之前的判定方式是访问次数权重大一点,而且在被锁后访问也比较多(这可通过访问计数器或LRU计数器判断),那么表示之前的访问次数权重大一点的方案是可靠的,这次仍然可用这种方式,反之则应该增加LRU数值的权重,因为前面的锁方案表现并不太好(被锁的内存块没被访问或者访问太少)。
3)程序运行
每次程序运行前,便将这些标记为锁状态的内存块锁在指令缓存中,这样在程序运行过程中,这些访问频繁的内存块就不会丢失。
实施例
现有一个程序A,程序运行过程中的一段内存块访问序列为(m0m1m2m3m4m5m6m7)10,这个序列访问10次,各块都映射到同一个缓存组中,缓存是4路相联的。在不锁的情况下,这个访问序列全都不命中,也就是80次访问全部丢失,按照指令缓存锁技术,如果将这8个内存块中的任意4块,如m0,m1,m2,m3锁在指令缓存中,就会减少一半的丢失。这个过程很简单,最主要的就是在外设上存储好程序内存块访问信息及各块的锁状态策略。
这个例子中,在m0-m7的访问结束后,每个块的访问计数器值都为0,不好区分锁哪个块更好,但是LRU计数值不一样,m4m5m6m7的值比较低,分别是3,2,1,0那么可以考虑将它们锁在内存中,再经过一轮访问后,被锁的块确实被访问了,则锁住这些块的方案是比较好的。相对于LRU算法来说,它增加了一个访问计数值的考虑,就是这两个计数值的权重之和来判定锁方案,它们之间的权重可以是0.5,0.5。权重可以在程序概要分析时确定,当获得命中较多的内存块时,将其N1值设定为较大,未命中或者命中较少的内存块的N1值设定为较小。
也可以是其他值,在启发式算法中,这些值是可变化的。
如果前面被锁的块访问次数比较多,则权重分配不变,否则,访问计数器的权重值降低0.1,LRU计数器的值增加0.1。
当LRU计数值的权重为1时就是LRU算法。与LRU的另一区别是LRU是每次有新的块要进入缓存时都要判定,将LRU数值最大的块换出去,而块锁方法并不是有新行要进来是就判定而是经过几次(缓存空间大小,如4路组就是4)缓存访问后如果被锁的块还没被用到,则进行新行锁判定,这个缓存的访问次数可以通过被锁块的LRU值(它们中最大的)来确定。
最优算法:
m0m1m2m3访问完后,接着访问m4,这时要要用锁判定了,这5块的访问计数器值都为0,LRU计数器值为4,3,2,1,0,(目前还没有块被锁在缓存中)锁方案选择:0.5*0+0.5*(4-LRU值),结果分别是0,0.5,1,1.5,2,那么锁住m4,m3,m1,m2,并将它们的LRU计数器和访问次数计数器设为0,接着访问m5,不用计算权值,因为缓存访问次数还没超过4,同理m6,m7。下一轮访问m0,在4次缓存访问中没访问被锁块,如果下次还没访问被锁块,则要重新锁方案选择,后续访问序列为m1,m2,m3,m4,被锁块被访问了,所以仍然保持锁状态。
启发式算法:
初始块的选择与最优算法类似,不同点在于新锁方案选择时,如果m1,m2,m3,m4的访问计数值比较小,则表明之前访问次数多的块不一定在将来会被访问,所以权值计数为:0.4*访问次数+0.6*(4-LRU值),最后选择数值最大的4块锁在缓存中。
Claims (4)
1.一种指令缓存锁实现方法,其特征在于所述方法包括如下步骤:
1)程序概要分析
预先运行一段程序,记录包括内存块访问顺序和引用次数、重复访问的时间间隔、命中次数;
2)选择内存块锁入缓存
程序开始运行时,对每个内存块设置一个访问计数器和LRU计数器,访问计数器记录内存块的访问次数,对每个内存块中的访问计数器和LRU计数器分别分配权重N1、N2,根据步骤1)记录的内存块命中次数,按照N1*访问次数+N2*(LRU计数器的极限值-LRU值)进行统计,如果统计值超过阈值M,则将该内存块锁在缓存中,并满足锁入缓存中内存块总数不超过缓存空间容量,N1+N2=1;
如果锁入缓存中的内存块命中次数小于阈值A,则调高LRU计数器的权重;如果锁入缓存中内存块命中次数超过阈值A,则调高内存块访问计数器的权重。
2.根据权利要求1所述的指令缓存锁实现方法,其特征在于:所述访问计数器权值N1值为:0.3≤N1≤0.6,所述LRU计数器权值N2值为:0.4≤N2≤0.7。
3.根据权利要求1或2所述的指令缓存锁实现方法,其特征在于:所述选择内存块锁入缓存,如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的统计值,则将该未锁入缓存中的内存块锁入缓存中。
4.根据权利要求1所述的指令缓存锁实现方法,其特征在于:所述选择内存块锁入缓存,如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的统计值,则将该未锁入缓存中的内存块替换缓存中的内存块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105317999A CN101989236B (zh) | 2010-11-04 | 2010-11-04 | 一种指令缓存锁实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105317999A CN101989236B (zh) | 2010-11-04 | 2010-11-04 | 一种指令缓存锁实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101989236A CN101989236A (zh) | 2011-03-23 |
CN101989236B true CN101989236B (zh) | 2012-05-09 |
Family
ID=43745776
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010105317999A Expired - Fee Related CN101989236B (zh) | 2010-11-04 | 2010-11-04 | 一种指令缓存锁实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101989236B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8806139B2 (en) * | 2012-01-20 | 2014-08-12 | International Business Machines Corporation | Cache set replacement order based on temporal set recording |
US9110815B2 (en) | 2012-05-07 | 2015-08-18 | International Business Machines Corporation | Enhancing data processing performance by cache management of fingerprint index |
US9021203B2 (en) | 2012-05-07 | 2015-04-28 | International Business Machines Corporation | Enhancing tiering storage performance |
US9645944B2 (en) | 2012-05-07 | 2017-05-09 | International Business Machines Corporation | Enhancing data caching performance |
CN102722446B (zh) * | 2012-06-06 | 2015-03-25 | 北京航空航天大学 | 一种面向流处理器的局部内存访问模式动态记录器 |
US9244837B2 (en) * | 2012-10-11 | 2016-01-26 | Texas Instruments Incorporated | Zero cycle clock invalidate operation |
CN104641347B (zh) * | 2013-03-11 | 2018-06-05 | 华为技术有限公司 | 函数调用方法、装置和终端设备 |
CN103309740B (zh) * | 2013-06-05 | 2016-12-28 | 腾讯科技(深圳)有限公司 | 程序启动方法、装置和设备 |
CN108021437A (zh) * | 2016-10-31 | 2018-05-11 | 深圳市中兴微电子技术有限公司 | 一种资源分配方法和高速缓冲存储器Cache |
CN106572184B (zh) * | 2016-11-09 | 2019-05-31 | 深圳华远云联数据科技有限公司 | 一种串口设备通讯方法及系统 |
CN109947667B (zh) * | 2017-12-21 | 2023-12-15 | 华为技术有限公司 | 数据访问预测方法和装置 |
CN110147331B (zh) * | 2019-05-16 | 2021-04-02 | 重庆大学 | 缓存数据处理方法、系统及可读存储介质 |
CN110399316B (zh) * | 2019-06-28 | 2021-10-01 | 苏州浪潮智能科技有限公司 | 一种用于业务系统性能优化的方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6615316B1 (en) * | 2000-11-16 | 2003-09-02 | International Business Machines, Corporation | Using hardware counters to estimate cache warmth for process/thread schedulers |
US6996678B1 (en) * | 2002-07-31 | 2006-02-07 | Cisco Technology, Inc. | Method and apparatus for randomized cache entry replacement |
CN1848095A (zh) * | 2004-12-29 | 2006-10-18 | 英特尔公司 | 在多核心/多线程处理器中高速缓存的公平共享 |
CN1851675A (zh) * | 2006-04-04 | 2006-10-25 | 浙江大学 | 处理器高速数据缓存重配置方法 |
CN101694640A (zh) * | 2009-10-22 | 2010-04-14 | 浙江大学 | 多核架构下共享二级Cache的替换策略的实现方法 |
-
2010
- 2010-11-04 CN CN2010105317999A patent/CN101989236B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6615316B1 (en) * | 2000-11-16 | 2003-09-02 | International Business Machines, Corporation | Using hardware counters to estimate cache warmth for process/thread schedulers |
US6996678B1 (en) * | 2002-07-31 | 2006-02-07 | Cisco Technology, Inc. | Method and apparatus for randomized cache entry replacement |
CN1848095A (zh) * | 2004-12-29 | 2006-10-18 | 英特尔公司 | 在多核心/多线程处理器中高速缓存的公平共享 |
CN1851675A (zh) * | 2006-04-04 | 2006-10-25 | 浙江大学 | 处理器高速数据缓存重配置方法 |
CN101694640A (zh) * | 2009-10-22 | 2010-04-14 | 浙江大学 | 多核架构下共享二级Cache的替换策略的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101989236A (zh) | 2011-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101989236B (zh) | 一种指令缓存锁实现方法 | |
Gaur et al. | Bypass and insertion algorithms for exclusive last-level caches | |
US9031826B2 (en) | Method and apparatus for simulating operation in a data processing system | |
US20190361811A1 (en) | Data processing apparatus and prefetch method | |
CN107729535B (zh) | 一种键值数据库内布隆过滤器的配置方法 | |
Laga et al. | Lynx: A learning linux prefetching mechanism for ssd performance model | |
CN108509723B (zh) | 基于人工神经网络的LRU Cache预取机制性能收益评估方法 | |
US20140195771A1 (en) | Anticipatorily loading a page of memory | |
Chen et al. | Flow-guided file layout for out-of-core pathline computation | |
Pan et al. | A modeling framework for reuse distance-based estimation of cache performance | |
Mukherjee | Synthesis of non-replicated dynamic fragment allocation algorithm in distributed database systems | |
Pan et al. | predis: Penalty and locality aware memory allocation in redis | |
Zhou et al. | Gas: A heterogeneous memory architecture for graph processing | |
CN109154933B (zh) | 分布式数据库系统以及分布和访问数据的方法 | |
CN108829343B (zh) | 一种基于人工智能的缓存优化方法 | |
Pan et al. | Penalty-and locality-aware memory allocation in Redis using enhanced AET | |
Schuh et al. | AIR: adaptive index replacement in Hadoop | |
Jiang et al. | A cost-aware buffer management policy for flash-based storage devices | |
Tian et al. | An effectiveness-based adaptive cache replacement policy | |
Liu et al. | FLAP: Flash-aware prefetching for improving SSD-based disk cache | |
Boukhelef et al. | COPS: Cost based object placement strategies on hybrid storage system for DBaaS cloud | |
Etsion et al. | Exploiting core working sets to filter the L1 cache with random sampling | |
Lee et al. | Partial tiering: A hybrid merge policy for log structured key-value stores | |
CN112269947B (zh) | 空间文本数据的缓存方法、装置、电子设备及存储介质 | |
Menon et al. | Logstore: A workload-aware, adaptable key-value store on hybrid storage systems |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120509 Termination date: 20141104 |
|
EXPY | Termination of patent right or utility model |