基于多级缓存的数据读/写方法、装置和计算机系统与流程

文档序号:11433539阅读:274来源:国知局
基于多级缓存的数据读/写方法、装置和计算机系统与流程
本发明涉及计算机系统的数据读写领域,尤其涉及一种基于多级缓存的数据读/写方法、装置和计算机系统。

背景技术:
缓存(Cache,也称为高速缓冲存储器)位于中央处理器(CPU,CentralProcessingUnit)和内存(Memory)之间,主要是为了解决CPU运算速度和内存读写速度不匹配的问题。目前计算机最多采用三级Cache结构,其中L1(Level1)采用高速小容量的Cache,L2(Level2)采用速度中等容量较大的Cache,L3(Level3)采用低速大容量的Cache。基于上述的多级Cache,现有技术中CPU执行读操作的具体过程如下:当CPUCore(CPU核)在发出读数据请求时,通过逐层查找的方式,即先从L1Cache开始查找数据,如果Cache未命中(Cachemiss),去L2Cache中查找,依次类推,直至查找到数据为止。在上述的过程中,通常需要经过多次查找方可命中,例如假如读操作针对的数据存储在L3Cache中,这样必须在L1Cache和L2Cache均未命中的情况下才会到L3Cache查找数据,从而导致Cache访问效率比较低。

技术实现要素:
本发明的实施例提供了一种基于多级缓存的数据读/写方法、装置和计算机系统,有助于提高Cache访问效率,进而有助于在数据读/写过程中降低Cache缺失率。为达到上述目的,本发明的实施例采用如下技术方案:第一方面,本发明提供了一种基于多级缓存的数据读/写方法,包括:获取读/写数据所针对的第一物理内存数据块的第一查询地址;获取所述第一物理内存数据块的第一缓存位置属性;所述第一缓存位置属性用于指示第一物理内存数据块所能进入缓存的级别;根据所述第一查询地址,按照所述第一缓存位置属性所指示的第一物理内存数据块所能进入的缓存级别从高到低的顺序依次查询缓存是否命中,直至一个缓存命中或所有缓存均未命中为止;若一个缓存命中,则针对所命中缓存中的第一物理内存数据块的第一查询地址读/写数据;或,若所有缓存均未命中,则针对内存中的第一物理内存数据块的第一查询地址读/写数据。在第一种可能的实现方式中,根据第一方面,所述第一缓存位置属性为根据第一物理内存数据块的被访问情况,在页表缓存TLB中为所述第一物理内存数据块所设定的;所述获取所述第一物理内存数据块的第一缓存位置属性包括:根据页表缓存TLB中存储的物理内存数据块的属性信息,查询所述第一查询地址对应的第一缓存位置属性;所述TLB中存储有物理内存数据块的属性信息,其中包括:物理内存数据块的查询地址、物理内存数据块的缓存位置属性的对应关系。在第二种可能的实现方式中,根据第一方面,所述第一缓存位置属性为根据第一物理内存数据块的被访问情况,在系统寄存器中为所述第一物理内存数据块所设定的;所述获取所述第一物理内存数据块的第一缓存位置属性包括:读取当前系统寄存器中存储的缓存位置属性,并其作为所述第一物理内存数据块的第一缓存位置属性;所述系统寄存器用于存储缓存位置属性。在第三种可能的实现方式中,根据第一方面,所述针对所命中缓存中的第一物理内存数据块的第一查询地址读/写数据包括:通过与所命中缓存间的直接数据通路,针对所命中缓存中的第一物理内存数据块的第一查询地址读/写数据;或者,所述针对内存中的第一物理内存数据块的第一查询地址读/写数据包括:通过与内存间的直接数据通路,针对内存中的第一物理内存数据块的第一查询地址读/写数据。在第四种可能的实现方式中,结合第一方面或前三种可能的实现方式中的任一种,在读数据时,若所命中缓存的级别是所述第一缓存位置属性指示的所能进入缓存级别中的非最高级别,则所述方法还包括:在所述第一缓存位置属性指示的所能进入的缓存级别中,将需要读的数据回填到级别高于所命中缓存的级别的缓存;或者,若所命中缓存的级别是所述第一缓存位置属性指示的所能进入缓存级别中的最高级别,则不向其他缓存回填数据;或者,若所有缓存均未命中,则所述方法还包括:将需要读的数据回填到所述第一缓存位置属性指示的所能进入的缓存中。在第五种可能的实现方式中,结合第一方面或前三种可能的实现方式中的任一种,在写数据时,在针对所命中缓存中的第一物理内存数据块的第一查询地址写数据之后,所述方法还包括:若所写的数据为共享数据,则在所述第一缓存位置属性指示的所能进入的缓存级别中,向级别等于和/或低于所命中缓存的级别的其他缓存发起共享数据一致性请求。在第六种可能的实现方式中,结合第一方面或前五种可能的实现方式中的任一种,所述第一缓存位置属性标识第一物理内存数据块所能进入缓存级别中的最高级别,或者标识第一物理内存数据块不能进入的缓存级别。第二方面,本发明提供了一种基于多级缓存的数据读/写装置,所述装置为包括多级缓存的中央处理器,包括:第一获取单元,用于获取读/写数据所针对的第一物理内存数据块的第一查询地址;第二获取单元,用于获取所述第一物理内存数据块的第一缓存位置属性;所述第一缓存位置属性用于指示第一物理内存数据块所能进入缓存的级别;查询单元,用于根据所述第一获取单元得到的所述第一查询地址,按照第二获取单元得到的所述第一缓存位置属性所指示的所述第一物理内存数据块所能进入的缓存级别从高到低的顺序依次查询缓存是否命中,直至一个缓存命中或所有缓存均未命中为止;读写单元,用于若一个缓存命中,则针对所述查询单元所命中缓存中的第一物理内存数据块的第一查询地址读/写数据;或,若所述查询单元的查询结果为所有缓存均未命中,则针对内存中的第一物理内存数据块的第一查询地址读/写数据。在第一种可能的实现方式中,根据第二方面,所述第一缓存位置属性为根据第一物理内存数据块的被访问情况,在页表缓存TLB中为所述第一物理内存数据块所设定的;所述第二获取单元,用于根据TLB中存储的物理内存数据块的属性信息,查询所述第一查询地址对应的第一缓存位置属性;所述TLB中存储有物理内存数据块的属性信息,其中包括:物理内存数据块的查询地址、物理内存数据块的缓存位置属性的对应关系。在第二种可能的实现方式中,根据第二方面,所述第一缓存位置属性为根据第一物理内存数据块的被访问情况,在系统寄存器中为所述第一物理内存数据块所设定的;所述第二获取单元,用于读取当前系统寄存器中存储的缓存位置属性,并其作为所述第一物理内存数据块的第一缓存位置属性;所述系统寄存器用于存储缓存位置属性。在第三种可能的实现方式中,根据第二方面,所述读写单元,用于通过与所命中缓存间的直接数据通路,针对所命中缓存中的第一物理内存数据块的第一查询地址读/写数据;或者,所述读写单元用于通过与内存间的直接数据通路,针对内存中的第一物理内存数据块的第一查询地址读/写数据在第四种可能的实现方式中,结合第二方面或前三种可能实现的方式中的任一种,所述读写单元,还用于在读数据时,若所命中缓存的级别是所述第一缓存位置属性指示的所能进入缓存级别中的非最高级别,则在所述第一缓存位置属性指示的所能进入的缓存级别中,将需要读的数据回填到级别高于所命中缓存的级别的缓存中;或者,若所命中缓存的级别是所述第一缓存位置属性指示的所能进入缓存级别中的最高级别,则不向其他缓存回填数据;或者,若所有缓存均未命中,则将需要读的数据回填到所述第一缓存位置属性指示的所能进入的缓存中。在第五种可能的实现方式中,结合第二方面或前三种可能实现的方式中的任一种,所述读写单元,还用于在写数据时,若所写的数据为共享数据,则在所述第一缓存位置属性指示的所能进入的缓存级别中,向级别等于和/或低于所命中缓存的级别的其他缓存发起共享数据一致性请求。在第六种可能的实现方式中,结合第二方面或前五种可能实现的方式中的任一种,所述第一缓存位置属性标识第一物理内存数据块所能进入缓存级别中的最高级别,或者标识第一物理内存数据块不能进入的缓存级别。第三方面,本发明提供了一种计算机系统,包括:内存以及上述的所述装置。本发明实施例提供的一种基于多级缓存的数据读/写方法、装置和计算机系统,通过缓存位置属性指示的物理内存数据块所能进入缓存的级别,并按照其指示的所能进入的级别查询缓存是否命中,能够支持越过无需访问的Cache,较快地命中缓存,从而有助于提高Cache访问效率,进而有助于增强Cache命中率,换言之,有助于在数据读/写过程中降低Cache缺失率;尤其对于一些访问频率低的物理内存数据块而言,可以通过对缓存位置属性的限定,避免其进入资源紧缺的高级别缓存,进而有助于在数据读/写过程中降低Cache缺失率。附图说明为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种基于多级缓存的数据读/写方法的示意图;图2为本发明实施例提供的一种计算机系统结构示意图;图3为本发明实施例提供的一种基于多级缓存的数据读操作的方法示意图;图4为本发明实施例提供的另一种基于多级缓存的数据读操作的方法示意图;图5为本发明实施例提供的一种基于多级缓存的数据写操作的方法示意图;图6为本发明实施例提供的另一种基于多级缓存的数据写操作的方法示意图;图7为本发明实施例提供的一种基于多级缓存的数据读/写操作的装置的结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明提供了一种基于多级缓存的数据读/写方法,其执行主体可以为包含多级缓存的CPU中的CPUCore,也可以为包含多级缓存的CPU中的具有读/写功能的硬件设备。所述方法可以适用于单核计算机系统,也可以适用于多核计算机系统,如图1所示,包括:S101、获取读/写数据所针对的第一物理内存数据块的第一查询地址。其中,所述物理内存数据块是指在计算机系统中,将内存分成的若干用于存储数据的存储单元,示例的,可以是内存页、内存段、或者是直接来自I/O的数据信息等;这些存储单元的大小没有限定,可以相等或不等。所述查询地址可以为物理内存数据块的物理地址(PA,PhysicalAddress)的高位比特,当然不限于此。为了清楚描述,本发明实施例中,将一次读/写数据过程中相关的对象前加“第一”。例如,第一物理内存数据块是指在一次读/写数据过程中所针对的物理内存数据块,第一查询地址是指第一物理内存数据块的物理地址的高位比特。示例的,CPUCore中可以包含TLB(TranslationLookasideBuffer,旁路转换缓冲或页表缓存);此步骤可以是,通过在TLB中得到一次读/写数据过程中的物理地址的高位比特。但TLB不限于设置在CPUCore中。此步骤具体可以为:当CPUCore中的基于多级缓存的数据读/写的装置在发出一次数据读/写请求时,该装置会给出一个虚拟地址(VA,VirtualAddress),用该VA的高位若干比特去TLB中进行查找,TLB负责将虚拟地址转化为物理内存数据块的物理地址的高位比特,从而使得该装置得到物理地址的高位比特。S102、获取所述第一物理内存数据块的第一缓存位置属性;所述第一缓存位置属性用于标识所述第一物理内存数据块所能进入缓存的级别。其中,所述第一缓存位置属性为根据所述第一物理内存数据块的被访问情况,为所述第一物理内存数据块所设定的。一般而言,访问频率较高的物理内存数据块存在于高级别的缓存中,访问频率较低的物理内存数据块存在于低级别的缓存中。为合理设置缓存位置属性,上述缓存位置属性可以为根据物理内存数据块的被访问情况,为该物理内存数据块所设定的。其中,物理内存数据块的被访问情况可以但不限于物理内存数据块的访问频率,还可根据该数据块本身的属性,例如:流媒体数据,这些数据很大程度上是只需要访问一遍就可以被丢弃的,所以这些数据也不需要进入高级别的缓存中。可选的,通常内存中存储有所有物理内存数据块的属性信息,本实施例可以在内存中的原有的物理内存数据块属性信息中添加若干比特,用此来标识各物理内存数据块的缓存位置属性,此时,物理内存数据块的属性信息中包括:物理内存数据块的查询地址、物理内存数据块的缓存位置属性的对应关系;该缓存位置属性可以根据物理内存数据块的被访问情况,由操作系统在划分数据块的时候直接设定。另外,内存会将添加了缓存位置属性的属性信息填入TLB用于存储属性项的空间中,可选的,若TLB原有空间存在保留比特(未被占用的比特)能够填入缓存位置属性,则直接填入即可,否则,可以增加原有空间的宽度用以填入缓存位置属性。此时,此步骤可以为:当CPUCore中的基于多级缓存的数据读/写的装置在发出一次数据读/写请求时,根据所述TLB中存储的物理内存数据块的查询地址和物理内存数据块属性信息的对应关系,查询所述第一查询地址对应的第一缓存位置属性。或者可选的,本发明实施例还可以为将缓存位置属性设置为CPU所包含的系统寄存器,也就是说,增设一系统寄存器用于存储缓存位置属性。通过一条新增的指令,或者在原指令集中添加一些比特专门来对缓存位置属性寄存器进行设置。此时,此步骤可以为:当CPUCore中的基于多级缓存的数据读/写的装置发起一次数据读/写请求时,读取当前系统寄存器中存储的缓存位置属性,并其作为所述第一物理内存数据块的第一缓存位置属性。进一步的,所述第一缓存位置属性标识第一物理内存数据块所能进入缓存级别中的最高级别,或者标识第一物理内存数据块不能进入的缓存级别。例如,假定计算机系统中的共有三级缓存,为了区分可以分别用00、01、10表示一级缓存(L1Cache)、二级缓存(L2Cache)、三级缓存(L3Cache)。若所述缓存位置属性为01,且表示该内存数据块最高只能进入L2Cache,即该内存数据块可能进入L2Cache或者L3Cache,但是不能进入L1Cache。若所述缓存位置属性为01,且表示该内存数据块不能进入L2Cache,相应的,该缓存位置属性控制物理内存数据块进入缓存的级别包括L1Cache和L3Cache。由于第一物理内存数据块与其第一缓存位置属性是一一对应的关系,则对于步骤S101和步骤S102,可以先获取读/写数据所针对的第一物理内存数据块的第一缓存位置属性,然后再获取所述第一物理内存数据块的第一查询地址;无论采取怎样的获取方式,都必须获取得到第一物理内存数据块的第一查询地址和第一缓存位置属性。S103、根据所述第一查询地址,按照所述第一缓存位置属性所指示的第一物理内存数据块所能进入的缓存级别从高到低的顺序依次查询缓存是否命中,直至一个缓存命中或所有缓存均未命中为止。对于具有N级缓存的计算机系统而言,一级缓存的级别最高,N级缓存的级别最低,一级缓存到N级缓存之间的缓存级别递减。根据第一查询地址查询一个i(1≤i≤N)级缓存是否命中的过程可以为:利用虚拟地址的中间若干比特到该i级缓存中查找,选出一组CacheLine的标签(Tag),该Tag可以是物理地址PA的高位比特;然后将TLB得到的第一查询地址和选出的一组Tag进行比较,若某条CacheLine的Tag能和PA高位比特匹配上,则该i级缓存命中,否则,则该i级缓存未命中。示例的,假定计算机系统中的共有三级缓存,S102中获取的所述缓存位置属性为01,且表示该内存数据块最高只能进入L2Cache。此时,此步骤具体可以为:CPUCore中的基于多级缓存的数据读/写的装置按照缓存位置属性忽略L1Cache,直接查询L2Cache是否命中,若L2Cache命中,则查询过程到此为止,若L2Cache未命中,则查询L3Cache是否命中;若L3Cache命中,则查询过程到此为止,若L3Cache未命中,由于L3Cache是最后一级缓存,则意味着第一缓存位置属性控制进入所有缓存均未命中,则查询过程也到此为止。又示例的,假定计算机系统中的共有三级缓存,S102中获取的所述缓存位置属性为01,且表示该内存数据块不能进入L2Cache,相应的,该缓存位置属性控制物理内存数据块进入缓存的级别包括L1和L3。此时,此步骤具体可以为CPUCore中的基于多级缓存的数据读/写的装置按照缓存位置属性先查询L1Cache是否命中,若L1Cache命中,则查询过程到此为止,若L1Cache未命中,则查询L3Cache是否命中,由于L3Cache是最后一级缓存,故L3Cache命中或未命中,则查询过程均到此为止。若此步骤中存在一个缓存命中,则进行步骤S104;若此步骤中所有缓存均未命中,则进行步骤S105。S104、若一个缓存命中,则针对所命中缓存中的第一物理内存数据块的第一查询地址读/写数据。优选的,可以预先增设各级别的缓存到CPUCore中的基于多级缓存的数据读/写的装置的直接数据通路,此时,此步骤可以为:通过所述装置与所命中缓存间的直接数据通路,针对所命中缓存中的第一物理内存数据块的第一查询地址读/写数据。当然,采用现有技术中所建立的数据通路,针对所命中缓存中的第一物理内存数据块的第一查询地址读/写数据也是可以的。S105、若所有缓存均未命中,则针对内存中的第一物理内存数据块的第一查询地址读/写数据。由于内存中必然能找到第一物理内存数据块,故而当所有缓存均未命中的情况下,可以利用此步骤完成数据的读/写。本发明实施例提供的一种基于多级缓存的数据读/写方法,通过缓存位置属性指示的物理内存数据块所能进入缓存的级别,并按照其指示的所能进入的级别查询缓存是否命中,能够支持越过无需访问的Cache,较快地命中缓存,从而有助于提高Cache访问效率,进而有助于增强Cache命中率,换言之,有助于在数据读/写过程中降低Cache缺失率;尤其对于一些访问频率低的物理内存数据块而言,可以通过对缓存位置属性的限定,避免其进入资源紧缺的高级别Cache,进而有助于在数据读/写过程中降低Cache缺失率。进一步的,针对在读数据时,若所命中缓存的级别是所述第一缓存位置属性指示的所能进入缓存级别中的非最高级别,则在S104针对所命中缓存中的第一物理内存数据块读数据之后,所述方法还包括:在所述第一缓存位置属性指示的所能进入的缓存级别中,将需要读的数据回填到级别高于所命中缓存的级别的缓存中;或者,若所命中缓存的级别是所述第一缓存位置属性指示的所能进入缓存级别中的最高级别,则不向其他缓存回填数据;或者,若所有缓存均未命中,则所述方法还包括:将需要读的数据回填到所述第一缓存位置属性指示的所能进入的缓存中。示例的,假定计算机系统中的共有三级缓存,且S102中获取的所述缓存位置属性为01,且表示该内存数据块最高只能进入L2Cache,也就是说,L2Cache是第一缓存位置属性指示的所能进入的最高级别。若经过步骤S103所命中的缓存是L2Cache,由于L2Cache是第一缓存位置属性指示的所能进入的最高级别,则不向其他缓存(例如:L1Cache)回填数据。若经过步骤S103所命中的缓存是L3Cache,则可以在S104针对L3Cache中的第一物理内存数据块读数据之后或同时,CPUCore中的基于多级缓存的数据读/写的装置在第一缓存位置属性指示的所能进入缓存的级别下,将需要读的数据回填到L2Cache中。这样,使得在再次针对第一物理内存数据块读/写数据时,就可以一次命中L2Cache。若经过步骤S103所有缓存均未命中,则可以在S105针对内存中的第一物理内存数据块读数据之后或同时,CPUCore中的基于多级缓存的数据读/写的装置将需要读的数据回填到L3Cache和L2Cache中。这样使得可以在下一次读取该数据的过程中,经一次查询就可命中L2Cache。通过对物理内存数据块进行合适的缓存位置级别限定,对于引起Cache缺失率高的应用,可以防止访问频率低的数据调入缺失率高的Cache中,避免了无谓的Cache数据回填。进一步的,为维护共享数据的一致性,针对写数据时,在S104针对所命中缓存中的第一物理内存数据块的第一查询地址写数据之后,所述方法还包括:若所写的数据为共享数据,则在所述第一缓存位置属性指示的所能进入的缓存级别中,向级别等于和/或低于所命中缓存的级别的其他缓存发起共享数据一致性请求。其中,所述共享数据为在多核处理器的缓存结构中,若其中一个CPUCore对某一数据进行了修改,而该数据同时在其他CPUCore的缓存中,则该数据为不同CPUCore间的共享数据。示例的,假定计算机系统中有两个CPUCore(CPUCore0和CPUCore1),每个CPUCore包含有三级缓存,若CPUCore0对其缓存中的L1Cache的数据进行了修改,而该数据同时在CPUCore1的L1Cache中,则该数据为CPUCore0和CPUCore1的共享数据。示例的,假定计算机系统中共有三级缓存,且S102中获取的所述缓存位置属性为01,且表示该内存数据块最高只能进入L2Cache,也就是说,在第一缓存位置属性指示的所能进入的缓存级别包括:L2、L3。若经过步骤S103所命中的缓存是L2Cache,且经步骤S104所写入的数据为共享数据,则(1)在计算机系统中除了所命中的L2Cache外,还包含其他L2Cache的情况下,CPUCore中的基于多级缓存的数据读/写的装置向其他L2Cache以及L3Cache发起共享数据一致性请求;(2)在计算机系统中不包含其他L2Cache的情况下,该装置仅向L3Cache发起共享数据一致性请...
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1