缓存替换技术的制作方法

文档序号:18188883发布日期:2019-07-17 05:29阅读:214来源:国知局
缓存替换技术的制作方法

本发明涉及存储技术领域,尤其涉及一种缓存替换技术。



背景技术:

缓存是指可以进行高速数据交换的存储器,由于其访问速率很快,它会优先于内存与中央处理器cpu交换数据。当cpu要读取一个数据时,首先从cpu缓存中查找,找到就立即读取并送给cpu处理。如果没有找到,就从速率相对较慢的内存中读取并送给cpu处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。通过这种方式,提升了计算机系统的访问速度。

通常,缓存采用静态随机存取存储器(staticrandomaccessmemory,sram)来实现,但sram存在静态漏电问题,导致系统功耗较大。并且,sram存储单元越来越难减少,导致硬件实现上存在瓶颈,且缓存的存储空间有限。随着存储技术的发展,越来越多的非易失性存储介质由于具有访问速度快、且静态功耗低的优点,也逐渐被作为缓存使用。然而,当采用非易失性存储器(non-volatilememory,nvm)作为缓存时,虽然nvm不存在静态漏电问题,也就是说nvm的静态功耗较小,但由于nvm的写功率消耗较大,因此,在将数据写入缓存时,也会消耗较多的系统功率。



技术实现要素:

本申请实施例中提供了一种能够减少内存功耗的缓存替换技术,并且能够提升内存访问速度。

第一方面,本申请提供一种应用于缓存替换方法。所述方法应用于包括缓存的计算机系统中,所述缓存包括缓存控制器以及与所述缓存控制器连接的用于缓存数据的存储介质,所述存储介质为非易失性存储介质。根据所述方法,在接收写请求并根据所述访问地址确定所述缓存中没有缓存对应的缓存行cacheline之后,所述缓存控制器从所述访问地址对应的缓存集合中确定n个待选择路。其中,所述缓存中包括多个缓存集合,每个缓存集合中包含有m个路,每个路中包含有一个cacheline,n的值不小于2,且m大于n。进一步的,所述缓存控制器分别将所述待写入数据与所述n个待选择路的样本数据进行比较以获得n个汉明距离,并将所述n个汉明距离中的最小值所对应的路中的cacheline作为待替换的cacheline。其中,所述样本数据与所述待写入数据的长度相同,所述汉明距离用于指示所述两个相同长度的数据具有的不同的对应位的数量。然后,所述缓存控制器将所述待写入的数据写入所述存储介质中,所述待写入数据用于替换所述待替换的cacheline。

本发明实施例提供的缓存替换方法,在采用非易失性存储介质做缓存时,通过在与访问地址对应的缓存集合的最近最少使用lru路中选择多个待选择路,并分别将所述待写入数据与所述多个待选择路的样本数据进行比较获得多个汉明距离,并将值最小的汉明距离对应的路中的cacheline作为待替换的cacheline。由于所述多个待选择路是在缓存集合的lru路中选择的,因此能够减少因替换cacheline对缓存命中率的影响。并且,由于待替换的cacheline是根据汉明距离在所述多个待选择路中确定的,汉明距离能够体现两个数据的相似性,因此,在将所述待写入数据写入缓存以替换所述待替换cacheline时能够减少写入的数据量,节省写数据时的功耗,降低系统的写开销。

结合第一方面,在第一种可能的实现方式中,所述方法还包括所述缓存控制器根据所述多个缓存集合中的每一个缓存集合中的第i路的cacheline获得所述缓存集合中的第i路的样本数据,其中,所述第i路的样本数据与所述第i路中的cacheline的长度相同,第i路为所述m个路中的任意一路,i大于等于1且小于等于m。

结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述缓存控制器采用模糊伪最近最少使用plru算法从所述缓存集合的最近最少使用lru的路中确定所述n个待选择路,其中,n=2n,n为不小于1的整数。

结合第一方面、第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述缓存的不同缓存集合中的第i路的样本数据相同,其中,i大于等于0且小于等于m-1。

结合第一方面的第一种至第三种可能的实现方式中的任意一种可能的实现方式,在第四种可能的实现方式中,所述方法还包括所述缓存控制器统计所述第i路cacheline中的各个比特位中写入第一预设值的数量,并根据各比特位中写入所述第一预设值的数量更新所述第i路的样本数据中的对应比特位,以获得更新的第i路的样本数据。其中,所述第一预设值包括“1”或“0”。

结合第一方面以及第一方面的第一至第四种可能的实现方式中的任意一种实现方式,在第五种可能的实现方式中,所述缓存集合中不同路的样本数据不同。

第二方面,本申请实施例提供了一种计算机系统。所述计算机系统包括缓存控制器和与所述缓存控制器连接的缓存,所述缓存为非易失性存储器,所述缓存控制器用于执行上述第一方面以及第一方面的各种可能的实现方式中的缓存替换方法。

第三方面,本申请实施例提供了一种缓存控制器。所述缓存控制器应用于包含有非易失性缓存的计算机系统中。所述缓存控制器包括用于执行上述第一方面以及第一方面的任意一种可能的实现方式中的缓存替换方法的模块。

第四方面,本申请提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行上述第一方面及第一方面的任意一种实现方式中的至少一种缓存替换方法。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例。

图1为本发明实施例提供的一种计算机系统的结构示意图;

图2为本发明实施例提供的一种组相连映射示意图;

图3为本发明实施例提供的一种缓存替换方法流程图;

图4为本发明实施例提供的一种访问地址结构示意;

图5为本发明实施例提供的一种搜索树的示意图;

图6为本发明实施例提供的一种缓存控制器的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。

图1为本发明实施例提供的一种计算机系统的结构示意图。如图1所示,计算机系统100至少可以包括处理器105、缓存110、内存控制器115以及内存120。处理器105是计算机系统100的核心,处理器105可以调用计算机系统100中不同的软件程序实现不同的功能。例如,处理器105能够实现对缓存110以及内存130的访问。可以理解的是,处理器105可以是中央处理器(centralprocessingunit,cpu)。除了cpu外,处理器还可以是其他特定集成电路(applicationspecificintegratedcircuit,asic),或者是被配置成实施本发明实施例的一个或多个集成电路。实际应用中,计算机系统还可以包括多个处理器。为了描述方便,本发明实施例以一个处理器为例进行示例。另外,处理器可以是单核处理器,也可以是多核处理器。在多核处理器架构中,处理器中可以包括多个处理器核。例如,如图1所示,处理器105中可以包括一个或多个cpu核110。可以理解的是,cpu核110只是处理器核的一种示例。在本发明实施例中不对处理器的数量以及一个处理器中处理器核的数量进行限定。

缓存110是计算机系统100中位于处理器105与内存120之间的临时存储器。由于缓存110的速率较快,因此,缓存110用于与cpu核108进行高速数据交换。缓存110用于缓存内存120中的部分数据以及将要写入内存120的数据。当处理器105访问数据时,处理器105会先在缓存110中查找,当缓存110中没有处理器105所需访问的数据时,处理器105才访问内存120,从而加快了处理器105的访问速率。具体的,缓存110可以包括缓存控制器112以及存储介质114。缓存控制器112是缓存110中的控制电路,能够对存储介质114进行访问。例如,缓存控制器112可以根据处理器105发送的读操作指令向处理器105返回存储介质114中缓存的数据。缓存控制器112还可以根据处理器105的写操作指令将待写入的数据缓存于缓存110的存储介质114中。并且,缓存控制器112还可以对存储介质114中缓存的数据进行管理。本领域人员可以知道,缓存110可以集成在处理器105中。在多核处理器系统中,每个cpu核108都可以包含一个缓存110。

通常,缓存110由静态随机存取存储器(staticrandomaccessmemory,sram)组成。然而,sram存储单元越来越难减小,因此,采用sram做缓存时其缓存容量受限。并且,sram还存在静态漏电等问题。因此,随着存储技术的发展,越来越多的非易失性存储介质被作为缓存。例如,存储介质114可以包括相变随机存取存储器(phase-changerandomaccessmemory,pcm)、阻变随机存取存储器(resistiverandomaccessmemory,rram)以及自旋扭矩传输随机存取存储器(spintorquetransferrams,stt-ram)等。

内存控制器115是计算机系统100内部控制内存120并且使内存120与处理器105(例如cpu)之间交换数据的重要组成部分。实际应用中,一种情况下,内存控制器115可以位于北桥芯片内部。在另一种情况下,可以将内存控制器115集成在处理器105中,具体的,内存控制器115可以集成在处理器105的基板上。可以理解的是,当内存控制器115位于北桥芯片内部时,内存控制器需要通过北桥芯片与处理器交换数据,导致数据的延迟较大。当内存控制器115集成在处理器105中时,内存控制115可以直接与处理器交换数据。

如图1所示,内存控制器115可以通过内存总线(例如,双倍速率ddr总线)连接内存120。可以理解的是,实际应用中,内存控制器115还可以通过pci高速总线、桌面管理接口(dmi)总线等其他类型的总线与内存120通信。

内存120用来存放操作系统中各种正在运行的软件、输入和输出数据以及与外存交换的信息等。内存120又可以被称为主存。内存120具有访问速度快的优点。在传统的计算机系统架构中,通常采用动态随机存取存储器(dynamicrandomaccessmemory,dram)作为内存120。随着非易失性存储器(non-volatilememory,nvm)技术的发展,相变存储器(phase-changerandomaccessmemory,pcm),阻变存储器(resistiverandomaccessmemory,rram)、磁性存储器(magneticrandomaccessmemory,mram)或铁电式存储器(ferroelectricrandomaccessmemory,fram)等新型nvm也逐渐被作为内存使用。在本发明实施例中不对内存120的具体存储介质类型进行限定。

本领域人员可以知道,缓存110主要用于缓存主存(例如图1中的内存120)的一部分数据以及缓存待写入主存中的数据。由于与主存相比,缓存cache的容量相对较小,cache保存的内容只是主存存储的内容的一个子集,且cache与主存的数据交换是以块为单位的。为了把主存中的数据缓存到cache中,必须应用某种函数把主存地址定位到cache中,这称为地址映射。在将主存中的数据按这种映射关系缓存到cache中后,cpu执行程序时,会将程序中的主存地址变换成cache地址。cache的地址映射方式通常有直接映射和组相联映射。在直接映射方式下,主存中的一个块只能映射到cache的某一特定块中去。直接映射是最简单的地址映射方式,它的硬件简单,成本低,地址变换速度快。但是这种方式不够灵活,cache的存储空间得不到充分利用。由于每个内存块只能存放在cache中的一个固定位置,容易产生冲突,使cache效率下降。为了提高缓存命中率,越来越多的存储系统采用组相连的映射方式。在本发明实施例中,缓存110和内存120也是采用组相连映射方式。为了便于理解本方案,下面将本发明实施例中内存120和缓存110采用的组相连映射方式进行描述。

在组相连映射方式中,将主存和cache都分成多个组,主存中一个组(set)内的块的数量与cache中的组的数量相同。主存中的各块与cache的组号之间有固定的映射关系,但可自由映射到对应cache组中的任何一块。换一种表达方式,在这种映射方式下,内存块存放到哪个组是固定的,至于存到该组的哪一块则是灵活的。例如,主存分为256组,每组8块,cache分为8组,每组2块。主存中的第0块、第8块……均映射于cache的第0组,但可映射到cache第0组中的第0块或第1块;主存的第1块、第9块……均映射于cache的第1组,但可映射到cache第1组中的第2块或第3块。在采用组相连映射方式的cache中,每组内可以有2、4、8或16块,相应的,可以分别被称为2路组相联cache、4路组相联cache、8路组相联cache或16路组相联cache。需要说明的是,本发明实施例中的“组”也可以被称为“集合”。

在本发明实施例中,采用组相连映射方式将内存120中的数据映射到缓存110中。为了描述方便,在本发明实施例中也可以将内存120中的数据块称为内存块,将缓存110中的数据块称为缓存块或缓存行(cacheline)。通常,一个内存块的大小可以为4kb(kilobyte),一个缓存行的大小也可以为4kb。可以理解的是,实际应用中,还可以将内存块和缓存行的大小设置为其他值。内存块的大小与缓存行的大小相同。

图2示出了本发明实施例中内存120和缓存110的映射示意。具体的,图2给出了内存和缓存之间的组相连映射方式示意。图2中主存和cache都被分成多个组(set)。如图2所示,缓存110中可以包括多个缓存集合(cacheset),每个缓存集合可以包括多个缓存行(cacheline)。换一种表达方式,每个缓存集合中可以包括多路(way)数据。其中,每一路有一个缓存条目(cacheentry)。也就是说,cacheentry用于指示缓存集合中的具体的路或cacheline。例如,nvm10包括cacheset1和cacheset2等多个缓存集合,缓存集合cacheset1中包含三个路,这三个路分别通过下述三个cacheentry进行指示:cacheentry200_1、cacheentry200_2以及cacheentry200_3。内存120的存储空间也被分成多个不同的内存集合(set):set1210_1,set2210_2,…setn210_n。根据组相连的映射方式,set1210_1中任意一个存储地址对应的内存块均可以映射到缓存110的一个缓存集合中,但可以自由映射到该缓存集合中的任何一块。例如,set1210_1中任意一个存储地址对应的内存块均可以映射到缓存110的缓存集合cacheset1中,且可以自由映射到cacheset1中的任意一路。根据这种方式,set1210_1中任意一个存储地址对应的内存块均可以映射到cacheset1中的cacheentry200_1、cacheentry200_2或cacheentry200_3中。

进一步的,如图2所示,一个缓存条目(cacheentry)对应一行数据。换一种表达方式,一条cacheentry对应一个缓存行(cacheline)。缓存110中可以包括多个行,每一行可以存储多个字节的数据。每一条cacheentry至少包括有效位(validbit)201、脏位(dirtybit)203、标签(tag)205以及数据(data)207。可以理解的是,实际应用中,每一条cacheentry中还可以包括纠错码信息(errorcorrectingcode,ecc),以保证存储的数据的准确性。其中,tag205为主存地址的一部分,用于指示缓存行映射的内存块在内存120中的位置。data207是指缓存行中缓存的内存块的数据。有效位(validbit)201用于指示缓存行的有效性。当validbit位指示为有效valid时,说明该缓存行中的数据可用。当validbit位指示为无效invalid时,说明该缓存行中的数据不可用。脏位(dirtybit)203用于指示缓存行中数据是否与对应的内存块中的数据相同。例如,当dirtybit位指示为脏时,说明缓存行中的数据部分(如图2中的data207)与对应的内存块中的数据不同,换一种表达方式,当dirtybit位指示为脏时,该缓存行中包含有新数据。当dirtybit位指示为干净clean时,说明该缓存行中的数据与对应的内存块中的数据相同。实际应用中,可以以某个值指示dirtybit位指示为脏或干净。在此不做限定。

上面对缓存110和内存120的映射方式进行了描述。本领域技术人员可以知道,为了提高访问速度,在进行数据访问时,处理器105可以向缓存110发出访问请求,该访问请求中包含访问地址。缓存控制器112首先根据访问地址确定处理器105请求访问的数据是否缓存在存储介质114中。换一种表达方式,缓存控制器112首先根据访问地址判断所述访问请求是否能够命中缓存。当所述访问请求命中缓存时,即在确定所述待访问地址对应的数据缓存在所述缓存中的情况下,缓存控制器112可以直接向处理器105返回其请求访问的数据,当所述访问请求没有命中时,也就是说,在确定所述待访问地址的数据没有缓存在所述缓存中的情况下,处理器105会访问内存120。具体的,可以通过内存控制器115从内存120中获取待访问地址的数据。

由于缓存110的缓存空间一般较小,因此,缓存110在数据访问过程中,需要根据访问情况不断更新其缓存内容,以满足不断变化的访问需求。具体来说,当数据访问命中缓存时,则可以直接访问缓存中的数据,而无需进行缓存线(cacheline)的替换更新。当数据访问未命中缓存时,缓存控制器112需要从当前缓存的缓存行(cacheline)中确定一待替换的cacheline,采用从内存中读取的新的地址的cacheline来替换所述待替换的cacheline。

本领域技术人员可以知道,cacheline是缓存控制器(cachecontroller)112的最小操作单位。换一种表达方式,当缓存控制器112将缓存114中的数据写入内存时,缓存控制器112会按照cacheline为单位将一行line数据写到内存中。当缓存控制器112从内存中读数据时,也是以cacheline为单位来读数据的。为了描述方便,在本发明实施例中,一个cacheline可以表示一个cacheline的数据。本发明实施例中的“替换cacheline”是指用从内存中读出的一个cacheline的数据来替换cache中的一个cacheline的数据。

现有技术中大部分的缓存替换方法的目标是优化缓存命中率,也就是说,现有技术中主要是基于提高缓存命中率来选择待替换的cacheline。然而,当采用nvm作为缓存时,由于将数据写入nvm时,nvm的写功率消耗较大。因此,现有技术中的缓存替换方法在将写请求中的数据写入以nvm为介质的缓存时通常会造成较大的写开销。尤其是在组相连映射的情形下,虽然组相连能够提高缓存命中率,但由于可以在一个cacheset中任意选择一个待替换的cacheline,从而进一步加大了由于待替换的cacheline选择的不合适而增加写开销的风险。基于该问题,本发明实施例提出了一种缓存替换方法,在以非易失性存储介质作为缓存的计算机系统中,在缓存与内存采用组相连映射的情况下,能够在提高缓存命中率的基础上,减少缓存替换过程中写数据的开销。

下面将结合图1对本发明实施例提供的缓存替换方法进行详细的介绍。需要说明的是,本发明实施例以缓存110中的存储介质114为非易失性存储介质为例进行描述。图3为本发明实施例提供的一种缓存替换方法流程图。该方法主要由缓存110中的缓存控制器112来执行。如图3所示,该方法可以包括如下步骤。

在步骤302中,所述缓存控制器接收写请求,所述写请求中包含有待写入的数据和访问地址。其中,所述访问地址为内存的物理地址。需要说明的是,由于本发明实施例主要解决写数据时对非易失性缓存造成的写开销的问题,所以本发明实施例以写请求为例进行描述。

在步骤304中,所述缓存控制器根据所述访问地址确定所述缓存中没有缓存对应的缓存行cacheline。具体的,在本步骤中,缓存控制器112可以通过所述访问地址中的标签(tag)来确定所述待访问的地址是否命中缓存110。换一种表达方式,缓存110可以通过所述访问地址中的标签(tag)判断其是否缓存有该地址中的数据。下面将结合图4,对缓存控制器如何判断访问地址是否命中缓存110进行描述。

如图4所示,缓存控制器112可以将访问地址400分成三个部分:标签(tag)402、集合索引(setindex)404以及块偏移(blockoffset)406。其中,setindex404用于指示访问地址400指向的内存块映射在缓存100中的哪个缓存集合;tag302用于指示访问地址400指向的内存块在内存120中的位置。块偏移(blockoffset)406用于指示待写入的数据在该行的偏移位置,也就是说,块偏移306用于确定在这行的哪一个位置写入所述待写入数据。实际应用中,当收到访问请求后,缓存控制器112可以先根据访问地址400中的setindex404部分确定所述访问地址400属于缓存110中的哪一个缓存集合。由于在组相连的映射方式中,一个缓存集合中包括多个路。换句话说,由于一个缓存集合中包括多个缓存行。因此,在确定访问地址400所属的缓存集合后,缓存控制器112可以将访问地址400中的tag402部分的值与setindex404部分指向的缓存集合中的各路的cacheentry(例如图2中的cacheentry200_1、cacheentry200_2和等cacheentry200_3)中的tag位(例如图2中的tag205)进行比较,以确定访问地址400是否命中所述缓存110。当访问地址400的tag与所述缓存集合中的某个cacheentry中的标签(tag)相同时,说明所述访问地址对应的数据缓存在缓存110中。当目标地址中的tag与所述缓存集合中的cacheentry的tag不相同时,确定所述访问请求未命中缓存110。在这种情况下,需要进一步访问内存120。

在本步骤中,若缓存控制器112根据上述方法确定所述访问请求未命中缓存110,也就是说,当所述缓存控制器112确定所述缓存110中没有缓存与所述访问地址对应的缓存行cacheline的情况下,则该方法进入步骤306。

在步骤306中,所述缓存控制器从所述访问地址对应的缓存集合中确定n个待选择路。其中,所述缓存中包括多个缓存集合,每个缓存集合中包含有m个路,每个路中包含有一个cacheline,n的值不小于2,且m大于n。所述n个待选择路均为最近最少使用lru路。具体的,在缓存控制器根据所述访问请求中的访问地址确定所述访问请求未命中缓存110后,则需要进一步从与所述访问地址对应的缓存集合中选择待替换的cacheline。为了描述方便,本发明实施例以一个缓存集合中包括m个路为例进行描述,其中,m为大于2的整数。

由于本发明实示例中的缓存110为非易失性缓存,如果采用传统的最近最少使用lru算法从所述访问地址对应的缓存集合中选择待替换的cacheline,则虽然可能保证缓存命中率,但可能在写入新数据的过程中造成较大的写消耗。因此,为了保证缓存命中率,在本发明实施例中,缓存控制器可以采用模糊伪最近最少使用(pseudoleastrecentlyused,plru)算法从所述缓存集合的最近最少使用lru路中选择n个待选择路,其中,n为不小于2的整数,n小于m。具体的,n可以为2的n次幂(即,n=2n),n为不小于1的整数。需要说明的是,n的值可以根据具体情况预先设定。

根据plru算法,缓存集合(cacheset)中的所有路可以通过一个二进制的搜索树来指示。如图5所示,假设与所述访问地址对应的缓存集合中包含4个路:路0、路1、路2和路3,则可以用图5所示的搜索树500来指示该缓存集合中的各个路。在图5所示的搜索树中,子节点“0”用于指示“向左边走以找到一个伪lru路”,子节点“1”用于指示“向右边走以找到伪lru路”。例如,根据子节点“0”可以找到路0和路1,根据子节点“1”可以找到路2和路3。

在本发明实施例提供的模糊plru算法可以根据预设的n的值从所述搜索树中选择相应数量的待选择路。根据图5所示的搜索树可以看出,在选择待选择路时,如果不考虑根节点的值,则可以选择两个lru路。如果不考虑根节点以及子树的根节点的值,则可以选择4个lru路。换一种表达方式,在按照模糊plru算法搜索待选择的路时,如果不考虑k层节点的值,则可以选择2k个lru路,其中,所述k层节点为不包括叶子节点的节点。k小于等于log2m。例如,如果所述缓存集合有4个路,则所述缓存集合的搜索树共有log2(4)=2层节点,则k的值小于等于2。

具体的,在本步骤中,可以根据与所述访问地址对应的缓存集合的plru编码查找所述缓存集合对应的搜索树以选择所述n个待选择路。为描述方便,以n=2为例进行描述。假设与所述访问地址对应的缓存集合的模糊p-lru编码为:“01”,所述缓存集合的搜索树为图5中的搜索树500所示,由于图5所述的搜索树有4个路,要查找2个待选择路。由于n=2k=2,则k=1,即,可以不考虑1层节点的值,也就是不考虑整个搜索树的根节点“1”,而只需考虑根节点“1”下层的两个子树。也就是说,在搜索所述搜索树时,可以根据所述缓存集合的p-lru编码“01”搜索根节点“1”下层的两个子树(包含子节点为“0”的子树502以及包含子节点为“1”的子树504)以选择2个待选择路。具体的,可以根据编码“01”中的高位“0”查找到子树502中的路0,根据编码“01”中的低位“1”查找到子树504中的路3,从而,子树502中的路0和子树504中的路3作为所述2个待选择路。该方法进入步骤308。

在步骤308中,所述缓存控制器分别将所述待写入数据与所述n个待选择路的样本数据进行比较以获得n个汉明距离。其中,所述样本数据与所述待写入数据的长度相同,所述汉明距离用于指示所述两个相同长度的数据具有的不同的对应位的数量。为了减少写数据时的功耗,在本发明实施例中,缓存集合中的每个路均设置有一个样本数据。其中,样本数据的长度与cacheline的长度相同。为了减少存储开销,在本发明实施例中,不同缓存集合中的第i路共用相同的样本数据,其中,第i路为所述缓存集合中的任意一路,i的值不大于m,例如,i大于等于0且小于等于m-1。根据这种方式,同一个缓存集合中的不同路的样本数据并不一定相同。

实际应用中,一种方式下,可以随机生成各路的样本数据。为了提高精确性,采用随机生成样本数据的方式时,不同的两个样本数据之间的汉明距离不小于第二预设值。例如,该第二预设值可以为512/m,其中,m为一个缓存集合中的路的数量。

在另一种情形下,还可以动态生成样本。为描述方便,以如何动态生成第i路的样本数据为例进行描述。具体的,在系统启动时,可以为第i路的样本数据设置一个初始值,例如,该初始值可以是0000,也可以是写入第i路的第一个数据。为了提高精确性,可以根据写入第i路的数据动态更新样本数据。具体的,在本发明实施例中为第i路设置有一个第一计数器,所述第一计数器用于跟踪向第i路写入数据的写请求的数量。并且,为第i路的cacheline的每一位分别设置一个第二计数器,所述第二计数器用于统计对应位被写入第一预设值的数量,所述第一预设值可以为“0”或“1”。也就是说,所述第二计数器用于统计对应位被写入“0”或被写入“1”的数量。根据这种方式,如果第i路的cacheline有p位,则需要对应设置p个第二计数器。可以理解的是,由于样本数据的长度和cacheline的长度相同,因此,所述p个第二计数器也可以被认为对应于所述样本数据的每一位。当第i路的写请求的数量达到第一阈值时,也就是说,当第一计数器的值达到第一阈值时,缓存控制器可以根据第i路cacheline的每一位设置的第二计数器的值更新所述样本数据。具体的,当第k位的第二计数器统计第i路cacheline中的第k位被写入“1”的次数超过第二阈值时,将所述样本数据的第k位的值置为“1”。当第k+1位的第二计数器统计第k+1位被写入“1”的次数未超过第二阈值时,将所述样本数据的第k+1位的值置为“0”。其中,第二阈值不大于所述第一阈值,例如,第二阈值可以为第一阈值的一半。可以理解的是,实际应用中,第一阈值和第二阈值也可以根据需要自行设定。例如,第一阈值可以为10,第二阈值可以为8。在此不作限定。

另外,实际应用中,还可以不为第i路设置第一计数器,而为第i路设置一个计时器。当所述第i路的计时器显示到达预设的第三阈值时,根据为所述第i路的cacheline的每一位分别设置的第二计数器的值更新所述样本数据。例如,可以设置每30分钟更新一次第i路的样本数据,具体更新时,也可以如前所述,根据样本数据的每一位中写入“1”的数量分别确定是否将该位设置为“1”,例如,当第k位的第二计数器统计第k位被写入“1”的次数超过第二阈值时,将所述样本数据的第k位的值置为“1”。可以理解的是,上述第i路可以是不同缓存集合的第i路。

上面以第i路为例对如何生成缓存集合中的各路的样本数据进行了简单的介绍。当通过步骤306确定了n个待选择的路后,为了减少写数据消耗,在步骤308中,缓存控制器可以将所述写请求中携带的待写入数据与所述n个待选择路的样本数据进行比较,以获得所述n个汉明距离。例如,若在步骤306中确定了图5所示的路0和路3为待选择的两个路,则在本步骤中,缓存控制器可以分别将路0的样本数据和路3的样本数据的各个位与所述待写入数据的相应位的值进行比较,以获得两个汉明距离,这两个汉明距离包括所述待写入数据与路0的样本数据的汉明距离以及所述待写入数据与路3的样本数据的汉明距离。其中,汉明距离是指两个相同长度的数据具有的不同的对应位的数量。例如,若待写入数据为0011,路0的样本数据为0101,路3的样本数据为1000,则所述待写入数据与路0的样本数据有两个对应位的值不同,即,所述待写入数据与路0的样本数据的汉明距离为2。所述待写入数据与路3的样本数据有三个对应位的值不同,即,待写入数据与路3的样本数据的汉明距离为3。

在步骤310中,所述缓存控制器将所述n个汉明距离中的最小值所对应的路中的cacheline作为待替换的cacheline。由于汉明距离能够反应待写入数据与缓存中的cacheline的值的近似程度。也就是说,两个数据的汉明距离越小,说明两个数据越近似。由于某路的样本数据是根据该路中的cacheline获得的,因此,所述待写入数据与某个路的样本数据的汉明距离也能指示所述待写入数据域该路中的cacheline的近似程度。因此,在本发明实施例中,在获得所述待写入数据与所述n个待选择路的样本数据的汉明距离之后,为了减少写功耗,所述缓存控制器可以将所述n个汉明距离中的最小值对应的路的cacheline作为待替换的cacheline,从而能够使得在写入所述待写入数据时,改写的位最少。例如,仍然以前述的路0和路3为例,在获得所述待写入数据与路0的样本数据的汉明距离为2,所述待写入数据与路3的样本数据的汉明距离为3后,在本步骤中,所述缓存控制器可以选择路0中的cacheline为待替换的cacheline。

在步骤312中,所述缓存控制器将所述待写入数据写入所述缓存中,所述待写入数据用于替换所述待替换的cacheline。具体的,缓存控制器可以将所述待写入数据按位写入所述路0中,以替换所述待替换的cacheline。由于所述待写入数据与路0的样本数据的汉明距离较小,因此,所述待写入数据与所述路0中的待替换的cacheline也更近似。从而,在写入所述待写入数据时,需要改写的位较少。例如,若待写入数据为0011,路0的cacheline为0101,则在写入所述待写入数据时,只需要改写所述cacheline的中间两位的值,从而能够在一定程度上减少写数据时的功率损耗。

可以理解的是,在将所述待写入数据写入所述缓存后,可以用所述访问地址中的tag替换所述缓存集合中的待替换cacheline对应的tag。从而缓存控制器可以根据所述缓存集合中替换后的cacheline处理后续的访问请求。

进一步的,在本发明实施例中,在所述缓存集合中的所述待替换cacheline替换后,由于被替换的路已不属于lru路,因此,需要更新所述缓存集合的模糊p-lru编码。例如,在图5所示的示例中,当路0的cacheline被选择替换后,则可以将路0所在的子树1的根节点“0”置为1,所述缓存集合的模糊p-lru编码则由“01”被更新为“11”,其中,高位的“1”用于指向根节点左边的子树1,低位“1”用于指向根节点右边的子树2。进而,缓存控制器可以根据所述缓存集合更新后的模糊p-lru编码按照本发明实施例提供的方法处理后续的访问请求。

本发明实施例提供的缓存替换方法,在采用非易失性存储介质做缓存时,通过在与访问地址对应的缓存集合的最近最少使用lru路中选择多个待选择路,并分别将所述待写入数据与所述多个待选择路的样本数据进行比较获得多个汉明距离,并将值最小的汉明距离对应的路中的cacheline作为待替换的cacheline。由于所述多个待选择路是在缓存集合的lru路中选择的,因此能够减少因替换cacheline对缓存命中率的影响。并且,由于待替换的cacheline是根据汉明距离在所述多个待选择路中确定的,汉明距离能够体现两个数据的相似性,因此,在将所述待写入数据写入缓存以替换所述待替换cacheline时能够减少写入的数据量,节省写数据时的功耗,降低系统的写开销。

图6为本发明实施例提供的一种缓存控制器的结构示意图。图6所示的缓存控制器可以为图1所示的计算机系统中的缓存控制器112。如图6所示,所述缓存控制器600可以包括下述模块。

接收模块602,用于接收写请求,所述写请求中包含有待写入的数据和访问地址。判断模块604,用于根据所述访问地址判断所述缓存中是否缓存有对应的缓存行cacheline。当所述判断模块604确定所述缓存中没有缓存对应的缓存行cacheline时,触发选择模块606。

所述选择模块606,用于从所述访问地址对应的缓存集合中确定n个待选择路。其中,所述缓存中包括多个缓存集合,每个缓存集合中包含有m个路,每个路中包含有一个cacheline,n的值不小于2,且m大于n。

计算模块608,用于分别将所述待写入数据与所述n个待选择路的样本数据进行比较以获得n个汉明距离。其中,所述样本数据与所述待写入数据的长度相同,所述汉明距离用于指示所述两个相同长度的数据具有的不同的对应位的数量。

所述选择模块606,还用于根据所述计算模块608的计算结果,将所述n个汉明距离中的最小值所对应的路中的cacheline作为待替换的cacheline。写入模块610,用于将所述待写入的数据写入所述存储介质中,所述待写入数据用于替换所述待替换的cacheline。

实际应用中,选择模块606具体用于采用模糊伪最近最少使用plru算法从所述缓存集合的最近最少使用lru的路中确定所述n个待选择路。

进一步的,所述缓存控制器600还可以包括样本数据处理模块612。所述样本数据处理模块612用于根据所述多个缓存集合中的每一个缓存集合中的第i路的cacheline获得所述缓存集合中的第i路的样本数据。其中,所述第i路的样本数据与所述第i路中的cacheline的长度相同,第i路为所述m个路中的任意一路,i大于等于1且小于等于m。

在另一种情形下,所述样本数据处理模块612还用于统计所述第i路cacheline中的各个比特位中写入第一预设值的数量,并根据各比特位中写入所述第一预设值的数量更新所述第i路的样本数据中的对应比特位,以获得更新的第i路的样本数据其中,所述第一预设值包括“1”或“0”。

可选的,在所述缓存中,不同缓存集合中的第i路的样本数据相同,其中,i大于等于0且小于等于m-1。同一个缓存集合中的不同路的样本数据不相同。

本发明实施例所提供的缓存控制器600中各个模块功能的详细描述可以参见前述实施例描述的缓存替换方法中的相关描述,在此不再赘述。

本发明实施例还提供一种缓存替换方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。本领域普通技术人员可以理解,前述的存储介质包括:u盘、移动硬盘、磁碟、光盘、随机存储器(random-accessmemory,ram)、固态硬盘(solidstatedrive,ssd)或者其他非易失性存储器(non-volatilememory)等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。

需要说明的是,本申请所提供的实施例仅仅是示意性的。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1