CN109857681B - 高速缓存cache地址映射方法以及相关设备 - Google Patents
高速缓存cache地址映射方法以及相关设备 Download PDFInfo
- Publication number
- CN109857681B CN109857681B CN201711247808.XA CN201711247808A CN109857681B CN 109857681 B CN109857681 B CN 109857681B CN 201711247808 A CN201711247808 A CN 201711247808A CN 109857681 B CN109857681 B CN 109857681B
- Authority
- CN
- China
- Prior art keywords
- cache
- code segment
- hot
- group
- offset
- 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
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/10—Address translation
-
- 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/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0864—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
-
- 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/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- 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/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/28—Using a specific disk cache architecture
- G06F2212/282—Partitioned cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/653—Page colouring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
-
- 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
本申请公开了高速缓存cache地址映射方法以及相关设备,该方法包括:获取二进制文件,二进制文件包括第一热点代码段;获取第二热点代码段的对齐信息;第二热点代码段为已加载到所述cache的热点代码段;对齐信息包括第二热点代码段加载到所述cache后,第二热点代码段所占用的最后一个cache组的组号;根据对齐信息,对第一热点代码段进行偏移操作,使得第一热点代码段映射到所述cache中组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻。实施本发明实施例,能够在不增加物理硬件开销的前提下解决N路组相联结构中cache冲突失效问题,提高cache命中率。
Description
技术领域
本申请涉及高速缓存技术领域,尤其涉及高速缓存cache地址映射方法以及相关设备。
背景技术
高速缓存(cache)是用于计算机处理器(Central Processing Unit,CPU)和主存储器(main memory)之间高速数据交换的存储器,容量比较小但读写速度比主存储器高得多,接近于CPU的处理速度。Cache是按照缓存行(cache line)形式组织的,Cache的功能是用来存放那些近期需要在CPU运行的指令或数据。当CPU要访问主存储器(简称主存)的时候,如果所需的数据或者指令位于cache line中,称之为缓存命中(cache hit),这种情况下,CPU直接获取所需的数据或者指令,而不需要访问主存储器,从而提高了访问速度;如果所需的数据或者指令没有位于cache line中,称之缓存失效(cache miss),这种情况下,CPU需要再去从外部的主存储器加载数据或指令到cache中来,且如果此时cache line已被占据,还要对cache line中的数据或指令进行替换,这会导致明显的性能下降。通常高速缓存失效的原因通常有三种:强制性失效(compulsory miss),容量实效(capacity miss)和冲突失效(conflict miss)。其中,冲突失效是由于多个地址映射到相同的cache单元中而引起的访问冲突。
目前主流的cache硬件架构都采用N路组相联(N-way Set Associative)结构,N路组相联cache被分为若干个缓存组(cache set),每个缓存组包含N个cache line,也称为N路。N个主存储器中的数据块地址可以映射到cache的同一个缓存组,并且在该缓存组中可以映射到任意一路(way)。N路组相联(N-way Set Associative)结构可以在一定程度上缓解冲突失效引起的cache miss问题。然而,如果CPU中并发运行的程序较多、负载较大,那么仍然会存在缓存路数不够导致访问冲突的现象,受限于处理器物理硬件的延时、功耗和成本等因素,cache的容量和路数很难有大幅提升,所以目前主流的cache硬件架构仍然存在多个数据块同时争抢同一组cache line的cache访问冲突的问题,影响整个计算机***的性能。
发明内容
为了解决现有技术的缺陷,本发明实施例提供了高速缓存cache地址映射方法以及相关设备,能够在不增加物理硬件开销的前提下解决N路组相联结构中cache冲突失效问题,提高cache命中率。
第一方面,本发明实施例提供了一种cache地址映射方法,所述cache包括多个cache组,所述方法包括:获取二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数;获取第二热点代码段的对齐信息;其中,所述第二热点代码段为已加载到所述cache的热点代码段;所述对齐信息包括所述第二热点代码段加载到所述cache后,所述第二热点代码段所占用的最后一个cache组的组号;根据所述对齐信息,对所述第一热点代码段进行偏移操作,使得所述第一热点代码段映射到所述cache中地址连续的cache组,并且所述地址连续的cache组与所述最后一个cache组相邻。
其中,二进制文件通常包括数据段(data segment)和代码段(code segment)等,code segment具有代码部分(code setion),code setion例如为某些具体的函数代码。在很多应用场景中,一组程序或共享库必须要运行在同一个处理核上争抢同一个cache组,我们把程序或共享库的二进制文件中经常性地运行在CPU中的函数代码称为热点函数,这些热点函数或共享库在程序运行中占用CPU时间较长、执行次数较多,会被经常访问,所以需要经常性地缓存在cache中。本发明实施例中,为了实现减少cache冲突,可首先将这些需要经常性地缓存在cache中的热点函数识别出来,作为一个特殊的段,我们将这个特殊的段称为热点代码段(hot setion),相应的,二进制文件中除热点代码段外的段可称为非热点代码段。如果程序源码中只有一个热点函数,程序源码编译为二进制文件后该热点函数就是二进制文件的热点代码段;如果程序源码中有多个热点函数,那么程序源码编译时需要将所述多个热点函数归并为热点代码段。这些热点函数均具有相同的标识,该标识用于实现将所述多个热点函数归并为热点代码段。将多个热点函数归并为热点代码段是对热点函数的代码地址进行重定位操作,经过重定位操作,使得该多个热点函数在该二进制文件内地址连续。
其中,本发明实施例中所述相邻是指两个cache组的组号互相紧接,最后一个cache组相邻的cache组即为最后一个cache组的下一个cache组。例如,一个cache组组号为128,那么其相邻的cache组(下一个cache组)为组号129的cache组。
具体的,本发明实施例提出了一种加载器,该加载器具有全局变量性质的对齐信息,所述对齐信息记录了前一个被加载的热点代码段所占用的最后一个cache组的组号。操作***当前需要运行程序或共享库时,通过该加载器,就可以获得前一个已加载的热点代码段的对齐信息。本发明实施例中,通过偏移操作的手段,将当前需要加载的热点代码段映射到前一个已加载的热点代码段所占据的最后一个cache组的下一个cache组,使得不同二进制文件的热点代码段对应的的缓存行索引(cache line index)连续。经过偏移操作后,热点代码段之间的间隙将不超过一个cache组。这样,可以更充分地利用Cache空间,优化一组若干相关联的程序,同时也为其它程序腾出更多可用空间,从而能够最大程度地避免cache冲突失效的出现。
基于第一方面,在可能的实施例中,所述根据所述对齐信息,对所述第一热点代码段进行偏移操作,包括:根据所述对齐信息,对所述第一热点代码段的存储地址进行偏移操作,使得所述第一热点代码段的存储地址映射到所述cache中地址连续的cache组,并且所述地址连续的cache组与所述最后一个cache组相邻;其中,所述存储地址包括虚拟地址或物理地址。
基于第一方面,在可能的实施例中,所述cache类型为虚拟索引物理标签VIPT架构;所述cache的映射方式包括将所述虚拟地址映射至所述cache的cache组;根据所述对齐信息,对所述第一热点代码段进行偏移操作包括:根据所述对齐信息,对所述第一热点代码段的虚拟地址进行偏移操作,使得所述第一热点代码段的虚拟地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
基于第一方面,在可能的实施例中,根据所述对齐信息,对所述第一热点代码段的虚拟地址进行偏移操作,包括:获取所述第一热点代码段的虚拟地址;根据所述对齐信息确定所述最后一个cache组相邻的cache组;根据所述相邻的cache组和所述第一热点代码段的虚拟地址得到所述偏移操作的偏移量;根据所述偏移操作的偏移量对所述第一热点代码段的虚拟地址进行偏移操作。
在可能实施例中,可以根据所述对齐信息,对当前需要加载的二进制文件的虚拟地址进行偏移操作,也就是说,无论是热点代码段的虚拟地址还是非热点代码段的虚拟地址都进行了一定偏移量的偏移操作(重定位)。其中,偏移操作后,热点代码段的虚拟地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。具体实现过程中,可从加载器获取当前需要加载的二进制文件的虚拟地址以及热点代码段的虚拟地址;根据对齐信息确定所述last_index的下一个cache组;根据所述下一个cache组和热点代码段的虚拟地址,确定偏移操作的偏移量;根据所述偏移操作的偏移量对所述当前需要加载的二进制文件的内存虚拟地址进行偏移操作,使得所述二进制文件的热点代码段的虚拟地址映射到所述last_index的下一个cache组。
在又一种可能的实施例中,可以根据所述对齐信息,仅对当前需要加载的热点代码段的虚拟地址进行偏移操作(重定位),而非热点代码段的虚拟地址未进行偏移操作。偏移操作后,热点代码段的虚拟地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。具体实现过程中,可从加载器获取当前需要加载的热点代码段的虚拟地址;根据对齐信息确定所述last_index的下一个cache组;根据所述下一个cache组和所述热点代码段的虚拟地址,得到偏移操作的偏移量;根据所述偏移操作的偏移量对所述热点代码段的虚拟地址进行偏移操作,使得所述二进制文件的热点代码段的虚拟地址映射到last_index的下一个cache组。
具体实现中,重定位后,热点代码段能够从组号为((last_index+1)%cache组数)的cache组开始(%表示取余运算),映射到连续的cache组,其中,所述last_index表示所述对齐信息所记录的上一个被加载的热点代码段所占用的最后一个cache组的组号。由于热点代码段从组号为((last_index+1)%cache组数)的cache组开始映射,所以当一路全部被热点代码段占据之后,热点代码段将循环映射到cache组,多个热点代码段之间只有当cache的一路全部被占据之后才会发生cache组的重叠,且直到多路全部被占据后才会发生cache冲突,所以能够最大程度降低了冲突失效。
基于第一方面,在可能的实施例中,所述cache类型为物理索引物理标签PIPT架构;所述cache的映射方式包括将所述物理地址映射至所述cache的cache组;根据所述对齐信息,对所述第一热点代码段进行偏移操作包括:根据所述对齐信息,对所述第一热点代码段的虚拟地址的第一页内偏移page offset进行偏移操作,以及对所述第一热点代码段所在的物理页进行物理页分配操作,得到所分配的物理页和所述第一热点代码段的物理地址;将存在于所述物理页中的所述第一热点代码段的所述物理地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
具体的,本发明实施例提出了一种加载器,该加载器具有全局变量性质的对齐信息,所述对齐信息用于记录了前一个被加载的热点代码段所占用的最后一个cache组的组号(即该cache组对应的cache line index),操作***当前需要加载程序或共享库时,通过该加载器,就可以获得前一个已加载的热点代码段的对齐信息。
基于第一方面,在可能的实施例中,根据所述对齐信息,对所述第一热点代码段的虚拟地址的第一页内偏移page offset进行偏移操作,以及对所述第一热点代码段所在的物理页进行物理页分配操作,得到所分配的物理页和所述第一热点代码段的物理地址,包括:根据所述下一个cache组和所述第一热点代码段的虚拟地址的第一page offset,得到所述偏移操作的偏移量;根据所述偏移量对所述第一热点代码段的虚拟地址的第一pageoffset进行偏移操作,得到所述第一热点代码段的虚拟地址的第二page offset;根据所述最后一个cache组的下一个cache组,获得所述第一热点代码段所涉及页面的着色位colorindex;根据所述color index获得所分配的物理页;根据所述所分配的物理页对应的物理页号PFN和所述第二page offset,得到所述第一热点代码段的物理地址。
其中,物理地址由物理页号(page frame number,PFN)和页内偏移(page offset)两部分构成,对于PIPT,物理地址的页内偏移直接来源于虚拟地址的页内偏移部分。
对于物理地址的page offset,在可能实施例中,可以通过加载器查询对齐信息,确定前一个已加载热点代码段所占据的最后一个cache组的下一个cache组,根据所述最后一个cache组的下一个cache组,获得PFN相关部分和page offset相关部分。其中PFN相关部分即着色位(color index)。所述热点代码段所涉及页面的着色位(color index)。根据color index根据所述page offset相关部分和所述当前需要加载的原始热点代码段的虚拟地址的page offset,得到偏移量。根据所述偏移量,对所述当前需要加载的二进制文件的内存虚拟地址进行偏移操作,也就是说,无论是热点代码段的虚拟地址还是非热点代码段的虚拟地址都进行了一定偏移量的偏移操作(重定位)。在这个过程中,热点代码段的虚拟地址的page offset相应发生了偏移,而重新得到热点代码段的虚拟地址的新的pageoffset,再将所述虚拟地址的新的page offset作为物理地址的page offset。
对于物理地址的page offset,在又一可能实施例中,可以通过加载器查询对齐信息,确定前一个已加载热点代码段所占据的最后一个cache组的下一个cache组,根据所述最后一个cache组的下一个cache组,获得所述热点代码段所涉及页面的着色位(colorindex)。根据color index和所述当前需要加载的原始热点代码段的虚拟地址的pageoffset,得到偏移量。根据所述偏移量,对所述当前需要加载的热点代码段的虚拟地址的page offset进行偏移操作(重定位),而非热点代码段的虚拟地址未进行偏移操作,进而重新得到热点代码段的虚拟地址的新的page offset,再将所述虚拟地址的新的page offset作为物理地址的page offset。
对于物理地址的物理页号,由于PFN来自于页表,需要通过物理页分配器,根据所述color index中与物理页相关的位进行页面分配,获得所分配的页面,所述所分配的页面对应的物理页号即为物理地址的物理页号。
基于第一方面,在可能的实施例中,根据所述color index获得所分配的物理页,包括:根据所述color index,从物理页分配器随机获取特定数量的连续物理页;从所述特定数量的连续物理页中选取符合所述color index的物理页,作为所述所分配的物理页。所述特定数量等于所述所分配的物理页的页数与页面颜色数量之和减1;其中,所述页面颜色数量由所述color index的位数确定。
其中,当程序执行过程中发生缺页中断,会触发物理页分配,具体的,本发明实施例通过物理页分配器,根据所述着色位(color index)随机获取特定数量的连续物理页。对于物理地址,只要位于PFN低位的color index相同,那么就属于同一个cache bin,即具有同一颜色。为了实现本发明中页面对齐的方案,在确定了当前所要分配页面的color index后,即可随机分配N个连续的物理页,N=请求分配的页数+页面颜色数量-1,其中,所述请求分配的页数就是实际分配的物理页的页数,所述请求分配的页数能满足所述需要加载的热点代码段的承载;所述页面颜色数量由所述color index的位数来确定。本发明实施例中,所述N个连续的物理页中必定具有符合color index的物理页。从所述N个连续的物理页中选取所述具有color index的物理页作为实际分配的物理页,该物理页必能能满足页面对齐的需要。
需要说明的是,具体实施例中,由于热点代码段从组号为((last_index+1)%cache组数)的cache组开始映射,所以当一路全部被热点代码段占据之后,热点代码段将循环映射到cache组,多个热点代码段之间只有当cache的一路全部被占据之后才会发生cache组的重叠,且直到多路全部被占据后才会发生cache冲突,所以能够最大程度降低了冲突失效。
基于第一方面,在可能的实施例中,根据第二热点代码段的虚拟地址范围确定所述第二热点代码段占用的cache组的个数;根据所述第二热点代码段占用的cache组的个数,和第三热点代码段映射到所述cache后所占用的最后一个cache组,确定所述第二热点代码段映射到所述cache后所占用的最后一个cache组,将该最后一个cache组的组号更新到所述对齐信息;其中,所述第三热点代码段为在加载所述第二热点代码段之前已加载到所述cache的热点代码段。
第二方面,本发明实施例提供了一种设备,该设备包括获取模块、加载器模块、偏移模块。其中:获取模块,用于获取二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数;加载器模块,用于获得第二热点代码段的对齐信息;其中,所述第二热点代码段为在所述第一热点代码段之前已加载的热点代码段;所述对齐信息包括所述第二热点代码段映射到高速缓存cache后,所述第二热点代码段所占用的最后一个cache组的组号;所述cache包括多个cache组;偏移模块,用于根据所述对齐信息,对所述第一热点代码段进行偏移操作,使得所述第一热点代码段映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。需要说明的是,在可能的实施例中,所述设备还包括物理页分配模块。具体实现中,所述设备的各模块用于实现第一方面所述的方法。
第三方面,本发明实施例提供了又一种设备。所述设备包括:处理器、高速缓存cache和主存储器,所述cache包括多个cache组;其中,所述处理器用于实现第一方面所述的方法。
第四方面,所述本发明实施例提供了一种计算机可读存储介质,用于存储第一方面所述方法的实现代码。
第五方面,本发明实施例提供了一种计算机软件产品,当其在计算机中运行时,可用于实现第一方面所述的方法。
可以看到,本发明实施例中,对于包括VIPT类型cache的***架构,本发明实施例通过归并热点函数为热点代码段,重定位代码地址空间,将当前需要加载的热点代码段映射到前一个已加载的热点代码段所占据的最后一个cache组的下一个cache组,使得不同二进制文件的热点代码段对应的的缓存行索引(cache line index)连续,热点代码段之间的间隙小。对于包括PIPT类型cache的***架构,本发明实施例通过归并热点函数为热点代码段,通过加载器对虚拟地址的页内偏移进行偏移操作,通过比较便捷的方式获得物理页分配器所分配的页面,重定位代码地址空间,将当前需要加载的热点代码段映射到前一个已加载的热点代码段所占据的最后一个cache组的下一个cache组,使得不同二进制文件的热点代码段对应的的缓存行索引(cache line index)连续,热点代码段之间的间隙小。所以,实施本发明实施例,可以更充分地利用Cache空间,从而优化一组若干相关联的程序,同时也为其它程序腾出更多可用空间,从而能够最大程度地避免cache冲突失效的出现。
附图说明
图1是本发明实施例提供的一种应用场景中的***架构示意图;
图2是本发明实施例提供的一种N路组相联结构示意图;
图3是现有技术提供的一种分页机制操作***映射方式示意图;
图4是本发明实施例提供的一种映射方式示意图;
图5是本发明实施例提供的又一种映射方式示意图;
图6是本发明实施例提供的一种cache地址映射方法的流程示意图;
图7是本发明实施例提供的一种归并热点函数的场景示意图;
图8是本发明实施例提供的一种cache地址映射方法的场景示意图;
图9是本发明实施例提供的又一种cache地址映射方法的流程示意图;
图10是本发明实施例提供的一种物理页分配的场景示意图;
图11是本发明实施例提供的又一种cache地址映射方法的场景示意图;
图12是本发明实施例提供的一种设备结构示意图;
图13是本发明实施例提供的又一种设备结构示意图;
图14是本发明实施例提供的又一种设备结构示意图。
具体实施方式
下面结合相关附图来介绍本发明实施例的方案所应用到的***架构。该***架构的实体可以是具备分页机制操作***的计算机,包括通用计算机、终端设备、服务器、笔记本电脑、智能手机、PAD、车载的移动装置、个人数字助理PDA、云计算服务器等。参见图1,该***架构包括非易失性存储器(如硬盘、光盘、flash等)、主存储器、cache和处理器等,非易失性存储器可用于保存程序或共享库等等二进制文件;主存储器具有存储地址,又可分为具有虚拟地址的虚拟地址空间和具有物理地址的物理地址空间;cache为N路组相联结构,N为大于或等于1的整数。所需的二进制文件可由加载器从非易失性存储器加载到内存中,然后经由cache缓存后被处理器执行。具体的,二进制文件可经由加载器加载到虚拟地址空间,建立了二进制文件和虚拟地址的关系,此时真正的二进制文件尚未读入主存储器,在程序执行时,若访问虚拟页面时对应的物理页尚未分配,则会发生缺页中断,操作***此时响应缺页请求,调用物理页分配器,在物理地址空间中分配响相应的物理页,一个程序最终可以映射到分散的物理页位置。然后操作***继续执行程序,二进制文件映射到cache被处理器执行。
本发明实施例中所涉及的cache硬件架构通为N路组相联结构,下面对N路组相联结构进行简单介绍。
N路组相联结构的cache可分成M个缓存组(cache set),每组内可以有N个缓存行cache line(例如N可为是2、4、8、16等等,分别称为2路、4路、8路、16路组相联Cache),每个cache line属于一路。对于每个缓存组,每一路的cache line均具有相同的缓存行索引(cache line index)。N路组相联结构的主存储器可分为K组,每组内分为M个块(即对应M个存储地址),即主存储器的一个组内的块数与Cache中的缓存组的组数相同,主存储器中的各块与Cache各组有固定的映射关系,且可自由映射到对应缓存组中的任何一路的cacheline。
例如,参见图2,cache硬件架构为2路组相联结构,Cache分为8组,每组有两路的cache line;主存储器分为256组,每组有8个数据块;主存储器中的数据块1、数据块8…数据块2041等均可固定映射到Cache组1,且可自由映射到cache line{Cache组1,路1}或cache line{Cache组1,路2}。
通常来说,如果在处理器上,有3个以上程序(如图2所示的应用程序1、应用程序2、应用程序3)同时并行运行,并且这些程序同时需要访问cache组1,由于cache1同一组同一时刻只能容纳cache line index相同的两个数据块,3个应用程序此时发生了同时争抢cache组1的情况,所以必然会出现cache组1中数据块频繁的相互替换,导致cache性能严重损耗。受限于处理器物理硬件的延时、功耗和成本等因素,cache的容量和路数很难有大幅提升,在并发运行负载较大的情况下,目前主流的N路组相联结构同样容易发生冲突失效。
另外,典型的分页机制操作***以页(page)为单位进行内存管理采用页面染色(page coloring)技术来使不同的程序以页为粒度进行隔离,以避免冲突失效。参见图3,从操作***的角度来看,虚拟地址(Virtual Address,VA)可以分为两部分:虚拟页号(virtual page number)和页内偏移(page offset);物理地址(Physical Address,PA)也可以分为两部分:物理页号(page frame number,PFN)和页内偏移(Page Offset)。页号可用于表征具体的页,页内偏移的位数可用于表征页面的大小。在操作***页表缓冲(Translation Lookaside Buffer,TLB)的页表中保存虚拟页地址和物理页地址的映射关系。当CPU发出地址访问的时候,从CPU出去的地址是虚拟地址,经过页表地址映射,查询虚拟页号对应的物理页号,结合页内偏移,即得到物理地址。从Cache的角度来看,存储地址可以分为三部分:缓存标签(Cache Tag)、缓存行索引(Cache line Index)和缓存行偏移(Cache Line Offset)。其中,缓存行偏移的位数可表征cache line的大小,缓存行索引的位数可用于表征cache组数,缓存标签可用于确定最终映射的cache line。cache根据自身的单路容量和cache line大小来确定高速缓存行索引和高速缓存行偏移在物理地址中所占的位数,再由物理地址的具***确定映射到哪个cache组、哪个字节。其中,在PFN中,PFN与Cache line Index的交集部分称为着色位(color index),操作***控制着色位,通过物理页分配器分配相应的页面,就可以使地址映射到指定的具有连续cache组的集合中,该集合称为cache bin,具有相同的color index的物理页就是具有同一颜色的物理页。这样,通过给不同的程序分配不同的着色位,就可以使其映射到指定的cache bin中,从而缓解冲突失效。
然而,在实际应用中,由于通常L1的cache单路容量较小,页的个数是比较有限的,以页为粒度来错开程序,可用的颜色个数并不多,在程序并发较多的情况下,还是有较大概率会发生冲突失效。另外,操作***还需要额外的数据结构(如链表)来记录颜色分配情况,频繁对分配情况的查询导致了较大的额外开销。
为了解决现有技术的缺陷,下面基于本发明实施例提供的***架构描述减少cache缓存冲突的实现方式。本发明实施例中,对于Cache组和主存储器的存储地址的映射关系,cache类型可以是虚拟索引物理标签(virtual index physical tag,VIPT)或者物理索引物理标签(physical index physical tag,PIPT)。本发明实施例将从PIPT和VIPT这两种cache类型出发描述本发明实施例的技术方案。
下面简述本发明实施例中PIPT和VIPT这两种cache类型。
(1)VIPT。参见图4,在存储地址和Cache组的映射中,当CPU需要进行地址访问的时候,一方面,CPU输出的虚拟地址中的虚拟索引(virtual index)直接对应于cache的高速缓存行索引(Cache line Index),故直接使用该高速缓存行索引来寻找cache组;另一方面,从CPU输出的虚拟地址经过内存管理单元(memory management unit,MMU)基于它的页表缓冲(Translation Lookaside Buffer,TLB)的翻译,变成物理地址,然后使用物理地址对应的高速缓存标签(Cache Tag)来匹配cache组中的缓存行(cache line),如果能最终确认cache line成功,则为缓存命中,否则为缓存缺失。
本发明实施例中,对于VIPT类型的cache,设置一个加载器,该加载器具有偏移感知的功能。具体的,该加载器维护有对齐信息,该对齐信息用于指示上一个已加载的程序代码在cache中所占据的最后一个cache组(可称为last index),那么,加载器计算偏移量,基于该偏移量将当前需要加载的程序代码的虚拟地址进行细粒度的偏移操作,使得当前需要加载的程序中的代码段紧跟上一个已加载的程序中的代码段,连续映射到以last index的下一个cache组为起点的若干cache组中,且无需再调用物理页分配器进行页面分配,这样,可以更充分地利用Cache空间,从而能够优化一组相关联的程序在cache空间的分布,同时也能够为其它程序腾出更多可用空间。
(2)PIPT。参见图5,在存储地址和Cache组的映射中,当CPU需要进行地址访问的时候,从CPU输出的虚拟地址经过内存管理单元(memory management unit,MMU)基于它的页表缓冲(Translation Lookaside Buffer,TLB)的翻译,变成物理地址,物理地址中的物理索引(physical index)对应于cache的高速缓存行索引(Cache line Index),故使用该高速缓存行索引(Cache line Index)来寻找cache组,另外,还使用物理地址对应的高速缓存标签(Cache Tag)来匹配cache组中的缓存行(cache line),如果能最终确认cache line成功,则为缓存命中,否则为缓存缺失。
本发明实施例中,对于PIPT类型的cache,设置一个加载器,该加载器具有偏移感知的功能。具体的,该加载器维护有对齐信息,该对齐信息用于指示上一个已加载的程序代码在cache中所占据的最后一个cache组(可称为last index),那么,加载器计算偏移量,基于该偏移量将当前需要加载的程序代码的原始虚拟地址的页内偏移(page offset)进行细粒度的偏移操作。另外,虚拟地址经TLB翻译为物理地址,物理地址的物理页号来自于页表,是程序运行过程中发生缺页中断处理时才会确定的,需要调用物理页分配器进行物理页号所对应的物理页的分配。本发明实施例中,物理页分配器随机分配特定数量的物理页,其中,特定数量=当前请求分配的页数+cache的页面颜色数量-1,那么,在这些特定数量的物理页中,必然存在能够与上一个已加载程序的物理页对齐的物理页,选择该对齐的物理页作为最终加载程序的物理页,这样,将最终得到的物理地址映射到cache后,当前需要加载的程序中的代码段紧跟上一个已加载的程序中的代码段,连续映射到以last index的下一个cache组为起点的若干cache组中,这样,可以更充分地利用Cache空间,从而能够优化一组相关联的程序在cache空间的分布,同时也能够为其它程序腾出更多可用空间。
本发明实施例提供的用于减少高速缓存冲突的cache地址映射方法,包括但不局限于以下步骤:
步骤1、获取当前需要加载的二进制文件的热点代码段(后文简称为:当前需要加载的热点代码段)。
其中,所述当前需要加载的热点代码段包括一个热点函数,或者,所述当前需要加载的热点代码段包括多个归并的热点函数。
程序或共享库运行时,程序或共享库的二进制文件需要从非易失性存储器加载到内存(主存储器)。二进制文件通常包括数据段(data segment)和代码段(code segment)等,code segment具有代码部分(code setion),code setion例如为某些具体的函数代码。在很多应用场景中,一组程序或共享库必须要运行在同一个处理核上争抢同一个cache组,我们把程序或共享库的二进制文件中经常性地运行在CPU中的函数代码称为热点函数,这些热点函数或共享库在程序运行中占用CPU时间较长、执行次数较多,会被经常访问,所以需要经常性地缓存在cache中。本发明实施例中,为了实现减少cache冲突,可首先将这些需要经常性地缓存在cache中的热点函数识别出来,作为一个特殊的段,我们将这个特殊的段称为热点代码段(hot setion),相应的,二进制文件中除热点代码段外的段可称为非热点代码段。如果程序源码中只有一个热点函数,程序源码编译为二进制文件后该热点函数就是二进制文件的热点代码段;如果程序源码中有多个热点函数,那么程序源码编译时需要将所述多个热点函数归并为热点代码段。这些热点函数均具有相同的标识,该标识用于实现将所述多个热点函数归并为热点代码段。将多个热点函数归并为热点代码段是对热点函数的代码地址进行重定位操作,经过重定位操作,使得该多个热点函数在该二进制文件内地址连续。
步骤2、获取前一个已加载的二进制文件的热点代码段(后文简称为:前一个已加载的热点代码段)的对齐信息,所述对齐信息包括所述前一个已加载的热点代码段映射到cache后,该热点代码段所占用的最后一个cache组的组号。
其中,所述cache属于N路组相联结构,N为大于或等于1的整数。
本发明实施例提出了一种加载器,该加载器具有全局变量性质的对齐信息,所述对齐信息记录了前一个被加载的热点代码段所占用的最后一个cache组的组号(即该cache组对应的cache line index)。操作***当前需要运行程序或共享库时,通过该加载器,就可以获得前一个已加载的热点代码段的对齐信息。
步骤3、根据所述对齐信息,对所述当前需要加载的热点代码段进行偏移操作,使得所述当前需要加载的热点代码段映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
本发明实施例中,通过偏移操作的手段,将当前需要加载的热点代码段映射到前一个已加载的热点代码段所占据的最后一个cache组的下一个cache组,使得不同二进制文件的热点代码段对应的的缓存行索引(cache line index)连续。经过偏移操作后,热点代码段之间的间隙将不超过一个cache组。这样,可以更充分地利用Cache空间,优化一组若干相关联的程序,同时也为其它程序腾出更多可用空间,从而能够最大程度地避免cache冲突失效的出现。
在本发明不同的实施例中,对热点代码段进行偏移操作会有不同的实现方式。下面将分别从VIPT类型cache和PIPT类型cache两个角度,详细说明发明实施例提供的减少高速缓存冲突的方法。
参见图6,下面首先介绍本发明实施例提供的一种用于减少高速缓存冲突的cache地址映射方法,应用于包括VIPT类型cache的***架构。该方法包括但不局限于以下步骤:
步骤S101、确定当前需要加载的二进制文件的热点代码段。
具体实现中,可通过profiling等手段,识别程序中的热点函数。在编译过程中,用编译手段将热点函数归并到热点代码段。例如,热点函数可以用“__attribute__”属性标识修饰,在该热点函数中标记该函数最终所属的热点代码段,在热点函数重定位过程中,识别这些带有相同属性标识的热点函数,将这些热点函数归并到相同的热点代码段。其中,编译过程中的编译手段可采用可执行程序编译(fpie)、可执行程序链接(pie)、共享库编译(fpic)、共享库链接(pic)等标准选项,编译链接为地址无关代码,以便于在加载的时候重定位热点函数的代码地址空间。
例如,参见图7,原始的程序源码包括热点函数1和热点函数2,且热点函数1和热点函数2分布在不同的代码地址空间,热点函数1和热点函数2具有相同的属性标识修饰,在将程序源码编译为时二进制文件时,基于所述属性标识将热点函数1和热点函数2归并成一个热点代码段,该热点代码段具有相应的基地址和页内偏移。可以看到,编译后,热点函数1和热点函数2在该二进制文件内地址连续。
步骤S102、获取前一个已加载的二进制文件的热点代码段(后文简称为:前一个已加载的热点代码段)的对齐信息,所述对齐信息包括所述前一个已加载的热点代码段映射到cache后,该热点代码段所占用的最后一个cache组的组号。
本发明实施例提出了一种加载器,该加载器具有全局变量性质的对齐信息,所述对齐信息记录了前一个被加载的热点代码段所占用的最后一个cache组的组号(即该cache组对应的cache line index)。操作***当前需要运行程序或共享库时,通过该加载器,就可以获得前一个已加载的热点代码段的对齐信息。
步骤S103、根据所述对齐信息,对当前需要加载的热点代码段的虚拟地址进行偏移操作,使得所述热点代码段的虚拟地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
在可能实施例中,可以根据所述对齐信息,对当前需要加载的二进制文件的虚拟地址进行偏移操作,也就是说,无论是热点代码段的虚拟地址还是非热点代码段的虚拟地址都进行了一定偏移量的偏移操作(重定位)。其中,偏移操作后,热点代码段的虚拟地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。具体实现过程中,可从加载器获取当前需要加载的二进制文件的虚拟地址以及热点代码段的虚拟地址;根据对齐信息确定所述last_index的下一个cache组;根据所述下一个cache组和热点代码段的虚拟地址,确定偏移操作的偏移量;根据所述偏移操作的偏移量对所述当前需要加载的二进制文件的内存虚拟地址进行偏移操作,使得所述二进制文件的热点代码段的虚拟地址映射到所述last_index的下一个cache组。
在又一种可能的实施例中,可以根据所述对齐信息,仅对当前需要加载的热点代码段的虚拟地址进行偏移操作(重定位),而非热点代码段的虚拟地址未进行偏移操作。偏移操作后,热点代码段的虚拟地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。具体实现过程中,可从加载器获取当前需要加载的热点代码段的虚拟地址;根据对齐信息确定所述last_index的下一个cache组;根据所述下一个cache组和所述热点代码段的虚拟地址,得到偏移操作的偏移量;根据所述偏移操作的偏移量对所述热点代码段的虚拟地址进行偏移操作,使得所述二进制文件的热点代码段的虚拟地址映射到last_index的下一个cache组。
具体的,重定位后,热点代码段能够从组号为((last_index+1)%cache组数)的cache组开始(%表示取余运算),映射到连续的cache组,其中,所述last_index表示所述对齐信息所记录的上一个被加载的热点代码段所占用的最后一个cache组的组号。
下面举例详细说明本发明实施例所描述的减少cache冲突的方法。
参见图8,以当前需要加载的二进制文件为应用程序3为例,应用程序3中的热点函数在编译时已经通过属性修饰的方式归并为热点代码段(具体过程可参考图7实施例),编译时采用了fpie选项,链接时采用pie选项,保证程序为可重定位的地址无关代码。假设此时热点代码段(又可称为原始热点代码段)所在的虚拟地址页基地址为“xxxx xxxx xxxxxxxx xx01 0000 0000 0000”,页内偏移为36字节(即0000 0010 0100),因此原始热点代码段的虚拟地址为“xxxx xxxx xxxx xxxx xx01 0000 0010 0100”。假如具体实施例中的cache组相联结构为2路256组,每路容量为16KB,那么每个cache line的容量是64字节。因此,该缓存行索引(cache line index)对应于虚拟地址的是6-13位范围,缓存行偏移(cache line offset)对应于虚拟地址的低位0-5位。
操作***在加载应用程序3的时候,可读取程序文件头,获取段表的相关描述,确定该应用程序3存在热点代码段,则调用本发明实施例的加载器。一方面,加载器从段表中获取到热点代码段的基地址,并取其0-13位(即01 0000 0010 0100)。另一方面,加载器中记录了上一个已加载程序(即应用程序2)加载后的热点代码段(即图8应用程序2图示中的阴影部分)所覆盖的最后一个cache组号,该组号为128,即last_index为128。
本发明具体实施例中,可通过加载器,对整个应用程序3的虚拟地址进行偏移操作,这个过程中,应用程序3的原始热点代码段的虚拟地址的0-13位也相应发生了偏移。其中,加载器进行偏移操作的偏移量为:10 0000 0100 0000-01 0000 0010 0100=10 00000011 1100,即用热点代码段的目标虚拟地址0-13位减去原始热点代码段虚拟地址0-13位。加载器将以此偏移量对整个应用程序3进行重定位操作,对应用程序3中所有的可重定位符号加偏移。
偏移操作后,应用程序3所加载的热点代码段在cache中的映射位置紧接应用程序2的热点代码段的末尾cache组,即应用程序3的热点代码段的虚拟地址将对齐到组号为129(即last_index的下一个)的cache组。可以看到,偏移操作后,要加载的热点代码段的虚拟地址为“xxxx xxxx xxxx xxxx xx10 0000 0100 0000”,其中,重定位加载后的要加载的热点代码段的虚拟地址0-13位就为“10 0000 0100 0000”,缓存行偏移为0(即000000)。
需要说明的是,本发明实施例中,并不限定操作***中重定位方法的具体实现形式。经重定位后,此时,所加载的应用程序3的热点代码段即为图8要加载的应用程序3图示中的阴影部分,该热点代码段将紧跟着应用程序2的热点代码段,从cache组129开始,连续映射到后续的cache组中(图8实施例中该热点代码段仅映射到cache组129)。
还需要说明的是,具体实施例中,由于热点代码段从组号为((last_index+1)%cache组数)的cache组开始映射,所以当一路全部被热点代码段占据之后,热点代码段将循环映射到cache组,多个热点代码段之间只有当cache的一路全部被占据之后才会发生cache组的重叠,且直到多路全部被占据后才会发生cache冲突(如图8实施例中2路全被占据后才会发生cache冲突),所以能够最大程度降低了冲突失效。
还需要说明的是,在加载的应用程序3的热点代码段映射到cache组之后,加载器将更新其所维护的对齐信息(即last_index),将应用程序3的热点代码段所占用的最后一个cache组的组号更新到对齐信息中。具体的,由于每个cache line的容量是64字节,应用程序3的热点代码段映射所占用的组数为:热点代码段容量除以64字节,向上取整,如果热点代码段容量小于或等于64字节,那么该热点代码段只映射到cache组129(可自由映射到块{Cache组129,路1}或块{Cache组129,路2}),故加载器将所维护的对齐信息中last_index更新为129。
还需要说明的是,本发明实施例中,可以针对一个程序组来应用本发明的技术方案,如图8中应用程序1、应用程序2、应用程序3和其他应用程序等预先设置为一个程序组,本发明实施例可实现程序组中的所有程序都加载完毕后,程序组中所有程序的各自的热点代码段都能在cache里的映射都呈连续分布,在cache中这些热点代码段间隙更很小,以细粒度的方式错开,最大间隙不会超过一个cache组,最大程度利用了有限的cache空间,解决了多个程序或库的热点代码在VIPT架构的cache上连续映射的问题。
可以看到,对于包括VIPT类型cache的***架构,本发明实施例通过归并热点函数为热点代码段,重定位代码地址空间,将当前需要加载的热点代码段映射到前一个已加载的热点代码段所占据的最后一个cache组的下一个cache组,使得不同二进制文件的热点代码段对应的的缓存行索引(cache line index)连续,热点代码段之间的间隙小。这样,可以更充分地利用Cache空间,从而优化一组若干相关联的程序,同时也为其它程序腾出更多可用空间,从而能够最大程度地避免cache冲突失效的出现。
下面介绍本发明实施例提供的又一种减少高速缓存冲突的cache地址映射方法,应用于PIPT框架。参见图9,该方法包括但不局限于以下步骤:
步骤S201、确定当前需要加载的二进制文件的热点代码段(后文简称为:当前需要加载的热点代码段)。
所述二进制文件包括热点代码段,所述热点代码段包括一个热点函数,或者,所述热点代码段包括多个归并的热点函数,所述多个归并的热点函数在所述二进制文件中地址连续,每个热点函数均具有相同的标识,所述标识用于实现将所述多个热点函数归并为所述热点代码段;其中,所述二进制文件可以是程序或者共享库的二进制文件。
具体的,本步骤可参考图7实施例步骤S101的描述,这里不再赘述。
步骤S202、获取前一个已加载的二进制文件的热点代码段(后文简称为:前一个已加载的热点代码段)的对齐信息,所述对齐信息包括所述前一个已加载的热点代码段映射到cache后,该热点代码段所占用的最后一个cache组的组号。
本发明实施例提出了一种加载器,该加载器具有全局变量性质的对齐信息,所述对齐信息用于记录了前一个被加载的热点代码段所占用的最后一个cache组的组号(即该cache组对应的cache line index),操作***当前需要加载程序或共享库时,通过该加载器,就可以获得前一个已加载的热点代码段的对齐信息。
步骤S203、根据所述对齐信息,对当前需要加载的热点代码段的虚拟地址的页内偏移(page offset)进行偏移操作,以及对该热点代码段所在页面进行物理页分配操作,得到所分配的物理页和该热点代码段的物理地址。
其中,物理地址由物理页号(page frame number,PFN)和页内偏移(page offset)两部分构成,对于PIPT,物理地址的页内偏移直接来源于虚拟地址的页内偏移部分。
对于物理地址的page offset,在可能实施例中,可以通过加载器查询对齐信息,确定前一个已加载热点代码段所占据的最后一个cache组的下一个cache组,根据所述最后一个cache组的下一个cache组,获得PFN相关部分和page offset相关部分。其中PFN相关部分即着色位(color index)。所述热点代码段所涉及页面的着色位(color index)。根据color index根据所述page offset相关部分和所述当前需要加载的原始热点代码段的虚拟地址的page offset,得到偏移量。根据所述偏移量,对所述当前需要加载的二进制文件的内存虚拟地址进行偏移操作,也就是说,无论是热点代码段的虚拟地址还是非热点代码段的虚拟地址都进行了一定偏移量的偏移操作(重定位)。在这个过程中,热点代码段的虚拟地址的page offset相应发生了偏移,而重新得到热点代码段的虚拟地址的新的pageoffset,再将所述虚拟地址的新的page offset作为物理地址的page offset。
对于物理地址的page offset,在又一可能实施例中,可以通过加载器查询对齐信息,确定前一个已加载热点代码段所占据的最后一个cache组的下一个cache组,根据所述最后一个cache组的下一个cache组,获得所述热点代码段所涉及页面的着色位(colorindex)。根据color index和所述当前需要加载的原始热点代码段的虚拟地址的pageoffset,得到偏移量。根据所述偏移量,对所述当前需要加载的热点代码段的虚拟地址的page offset进行偏移操作(重定位),而非热点代码段的虚拟地址未进行偏移操作,进而重新得到热点代码段的虚拟地址的新的page offset,再将所述虚拟地址的新的page offset作为物理地址的page offset。
对于物理地址的物理页号,由于PFN来自于页表,需要通过物理页分配器,根据所述color index中与物理页相关的位进行页面分配,获得所分配的页面,所述所分配的页面对应的物理页号即为物理地址的物理页号。
其中,当程序执行过程中发生缺页中断,会触发物理页分配,具体的,本发明实施例通过物理页分配器,根据所述着色位(color index)随机获取特定数量的连续物理页。对于物理地址,只要位于PFN低位的color index相同,那么就属于同一个cache bin,即具有同一颜色。为了实现本发明中页面对齐的方案,在确定了当前所要分配页面的color index后,即可随机分配N个连续的物理页,N=请求分配的页数+页面颜色数量-1,其中,所述请求分配的页数就是实际分配的物理页的页数,所述请求分配的页数能满足所述需要加载的热点代码段的承载;所述页面颜色数量由所述color index的位数来确定(例如位数为Y,则页面颜色数量=2Y)。本发明实施例中,所述N个连续的物理页中必定具有符合color index的物理页。从所述N个连续的物理页中选取所述具有color index的物理页作为实际分配的物理页,该物理页必能能满足页面对齐的需要。举例来说,参见图10,假如当前请求分配的物理页的color index为10,即又假如请求分配的页数为1,页面颜色数量为4(color index的位数为2,22=4),那么,N=1+4-1=4,物理页分配器将从编号为0x00 00、0x00 01、0x0010…等等一系列物理页中,随机分配4个连续的物理页,如图所示,4个连续的物理页例如为0x0010、0x00 11、0x01 00和0x01 01,那么,可以理解的,编号为0x00 10的物理页的colorindex为10,所以,最终将选择0x00 10的物理页作为最终实际分配的物理页。
步骤S204、将存在于所述物理页中的所述热点代码段的物理地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
经过上述操作后,当前需要加载的热点代码段的物理地址就能映射到cache中,紧接上一个已加载热点代码段的末尾cache组,并且,当前需要加载的热点代码段所在的物理页对齐上一个已加载热点代码段的物理页。
下面举例详细说明本发明实施例所描述的又一种减少cache冲突的方法。
参见图11,以当前需要加载的二进制文件为应用程序3为例,应用程序3中的热点函数在编译时已经通过属性修饰的方式归并为热点代码段(具体过程可参考图7实施例),并且编译时采用了fpie选项,链接时采用pie选项,保证程序为可重定位的地址无关代码。假设热点代码段(又可称为原始热点代码段)所在的虚拟地址页基地址为“xxxx xxxx xxxxxxxx xx01 0000 0000 0000”,页内偏移为36字节(即0000 0010 0100),因此热点代码段的虚拟地址为“xxxx xxxx xxxx xxxx xx01 0000 0010 0100”。假如具体实施例中的cache组相联结构为2路256组,每路容量为16KB,那么每个cache line的容量是64字节。因此,该缓存行索引(cache line index)对应于虚拟地址的是6-13位范围,缓存行偏移(cache lineoffset)对应于虚拟地址的低位0-5位。
本发明具体实施例中,操作***在加载应用程序3的时候,可读取程序文件头,获取段表的相关描述,确定该程序存在热点代码段,则调用本发明实施例的加载器,对整个应用程序3的虚拟地址进行偏移操作,重定位的偏移量的计算采用了加载后虚拟地址的页内偏移(同物理地址页内偏移)与原始虚拟地址页内偏移的差:一方面,加载器从段表中获取到原始热点代码段的虚拟地址,并取其0-11位的页内偏移(即0000 0010 0100);另一方面,加载器中记录了上一个已加载程序(即应用程序2)加载后的热点代码段所覆盖的最后一个cache组号,该组号为128,即last_index为128。那么,原始热点代码段的加载后的应用程序3的热点代码段的物理地址将对齐last_index的下一条,即cache组129,且cache lineoffset为0,则重定位加载的热点代码段的物理地址的0-13位为(10 0000 0100 0000),取其物理地址的页内偏移0-11位。由于PIPT中物理地址的页内偏移来源于虚拟地址的页内偏移,所以,对整个应用程序3的进行偏移操作的偏移量为:0000 0100 0000-0000 0010 0100=0000 0001 1100。可以理解的,偏移操作过程中,原始热点代码段的虚拟地址的页内偏移(0-11)位同样基于所述偏移量进行偏移,得到热点代码段的虚拟地址新的页内偏移,即可得到所需的物理地址的页内偏移。
另外,对于PIPT,物理地址的物理页号PFN来自于页表,是在程序加载后,程序运行过程中发生缺页中断处理时才会确定的,而PFN中的着色位color index直接与cache lineindex相关,该color index表征了该物理页在cache中的对齐信息,能够影响到cache组映射。如图11所示,加载器根据last_index进行计算,得到的cache line index(10 000001)中与PFN相关的部分,确定color index为10。加载器在加载程序并进行虚拟地址重定位之后,把热点代码段所覆盖的各个物理页的color index存入对应页表项的PFN区间。热点代码段页表项的U位标记为1,表示着该项需要物理页分配器进行物理页的对齐分配;P位标记为0,意味着该物理页尚待分配。所以,对于PIPT的cache架构,本发明还要通过物理页分配器进行物理页分配。物理页分配器的目的是分配PFN末几位等于color index的物理页,即物理页对齐。本发明的物理页分配器根据分配请求的页数、以及页面的对齐信息,初步分配N个连续的物理页,N=请求分配的页面数+页面颜色数量-1,具体可参考图10实施例的描述,这里不再赘述。通过这种页面分配方法,能够保障从获得的内存中一定能找到满足物理页对齐的物理页(或连续物理页)。物理页分配器选取该物理页(该物理页的color index为10)映射到热点代码段所在的页表项中。至此,所述需加载的热点代码段的物理地址就满足了cache line index为129(即10000001),cache line offset为0(000000)的目标。如图11所示,应用程序2的热点代码段占据的最后一个cache组所在物理页的着色位是0x10,应用程序3的热点代码段占据的第一个cache组所在物理页的着色位也是0x10,两者实现了物理页对齐。
同样需要说明的是,具体实施例中,由于热点代码段从组号为((last_index+1)%cache组数)的cache组开始映射,所以当一路全部被热点代码段占据之后,热点代码段将循环映射到cache组,多个热点代码段之间只有当cache的一路全部被占据之后才会发生cache组的重叠,且直到多路全部被占据后才会发生cache冲突(如图8实施例中2路全被占据后才会发生cache冲突),所以能够最大程度降低了冲突失效。
同样还需要说明的是,在加载的应用程序3的热点代码段映射到cache组之后,加载器将更新其所维护的对齐信息(即last_index),将应用程序3的热点代码段所占用的最后一个cache组的组号更新到对齐信息中,也就是说,加载器将所维护的对齐信息中last_index更新为129。
同样还需要说明的是,本发明实施例中,可以针对一个程序组来应用本发明的技术方案,如图11中应用程序1、应用程序2、应用程序3和其他应用程序等预先设置为一个程序组,本发明实施例可实现程序组中的所有程序都加载完毕后,程序组中所有程序的各自的热点代码段都能在cache里的映射都呈连续分布,在cache中这些热点代码段间隙更很小,以细粒度的方式错开,最大间隙不会超过一个cache组,最大程度利用了有限的cache空间,解决了多个程序或库的热点代码在PIPT架构的cache上连续映射的问题。
可以看到,对于包括PIPT类型cache的***架构,本发明实施例通过归并热点函数为热点代码段,通过加载器对虚拟地址的页内偏移进行偏移操作,通过比较便捷的方式获得物理页分配器所分配的页面,重定位代码地址空间,将当前需要加载的热点代码段映射到前一个已加载的热点代码段所占据的最后一个cache组的下一个cache组,使得不同二进制文件的热点代码段对应的的缓存行索引(cache line index)连续,热点代码段之间的间隙小。这样,可以更充分地利用Cache空间,从而优化一组若干相关联的程序,同时也为其它程序腾出更多可用空间,从而能够最大程度地避免cache冲突失效的出现。
上文描述了本发明实施例的方法,下面将描述本发明实施例的相关设备。
本发明实施例提供了一种设备包括:获取模块、加载器模块和偏移模块,其中:
获取模块,用于确定当前需要加载的二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数;
加载器模块,用于获得第二热点代码段的对齐信息;其中,所述第二热点代码段为在所述第一热点代码段之前已加载的热点代码段;所述对齐信息包括所述第二热点代码段映射到高速缓存cache后,所述第二热点代码段所占用的最后一个cache组的组号;所述cache属于N路组相联结构,N为大于或等于1的整数;
偏移模块,用于根据所述对齐信息,对所述第一热点代码段进行偏移操作,使得所述第一热点代码段映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
下面将从VIPT类型cache和PIPT类型cache两种具体实现方式上详细描述本发明实施例提供的设备。
参见图12,基于同一发明构思,本发明实施例提供了一种设备300,设备300具体包括:获取模块301,加载器模块302,偏移模块303,描述如下:
获取模块301,用于确定当前需要加载的二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数;
加载器模块302,用于获得第二热点代码段的对齐信息;其中,所述第二热点代码段为在所述第一热点代码段之前已加载的热点代码段;所述对齐信息包括所述第二热点代码段映射到高速缓存cache后,所述第二热点代码段所占用的最后一个cache组的组号;所述cache属于N路组相联结构,N为大于或等于1的整数;所述cache类型为虚拟索引物理标签VIPT架构;
偏移模块303,用于根据所述对齐信息,对所述第一热点代码段的虚拟地址进行偏移操作,使得所述第一热点代码段的虚拟地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
具体实施例中,所述偏移模块303用于根据所述对齐信息,对所述第一热点代码段的虚拟地址进行偏移操作,包括:所述加载器模块302用于获取所述第一热点代码段的虚拟地址;所述偏移模块303用于根据所述对齐信息确定所述最后一个cache组的下一个cache组;根据所述下一个cache组和所述第一热点代码段的虚拟地址得到所述偏移操作的偏移量;根据所述偏移操作的偏移量对所述第一热点代码段的虚拟地址进行偏移操作。
具体实施例中,所述第一热点代码段包括多个归并的热点函数,包括:所述多个归并的热点函数在所述第一热点代码段中地址连续,每个热点函数均具有相同的标识,所述标识用于实现将所述多个热点函数归并为所述第一热点代码段。
具体实施例中,在所述获取模块301确定当前需要加载的二进制文件之前,包括:所述获取模块301用于根据第二热点代码段的虚拟地址范围virtual address size确定所述第二热点代码段占用的cache组的个数;
所述加载器模块302用于根据所述第二热点代码段占用的cache组的个数,和第三热点代码段映射到所述cache后所占用的最后一个cache组,确定所述第二热点代码段映射到所述cache后所占用的最后一个cache组,将该最后一个cache组的组号更新到所述对齐信息;其中,所述第三热点代码段为在所述第二热点代码段之前已加载的热点代码段。
需要说明的是,设备300所涉及各个功能模块的具体实现方式可以参照图6所示的方法实施例的相应描述,这里不再赘述。
参见图13,基于同一发明构思,本发明实施例提供了一种设备400,设备400具体包括:获取模块401,加载器模块402,偏移模块403,物理页分配器模块404,描述如下:
获取模块401,用于确定当前需要加载的二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数;
加载器模块402,用于获得第二热点代码段的对齐信息;其中,所述第二热点代码段为在所述第一热点代码段之前已加载的热点代码段;所述对齐信息包括所述第二热点代码段映射到高速缓存cache后,所述第二热点代码段所占用的最后一个cache组的组号;所述cache属于N路组相联结构,N为大于或等于1的整数;所述cache类型为物理索引物理标签PIPT架构;
偏移模块403,用于根据所述对齐信息,对所述第一热点代码段的虚拟地址的第一页内偏移page offset进行偏移操作;
物理页分配器模块404,用于对所述第一热点代码段所在的物理页进行物理页分配操作,得到所分配的物理页和所述第一热点代码段的物理地址;存在于所述物理页中的所述第一热点代码段的所述物理地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
具体实施例中,所述偏移模块403用于根据所述对齐信息,对所述第一热点代码段的虚拟地址的第一页内偏移page offset进行偏移操作,以及对所述第一热点代码段所在的物理页进行物理页分配操作,得到所分配的物理页和所述第一热点代码段的物理地址,包括:
所述偏移模块403用于根据所述下一个cache组和所述第一热点代码段的虚拟地址的第一page offset,得到所述偏移操作的偏移量;根据所述偏移量对所述第一热点代码段的虚拟地址的第一page offset进行偏移操作,得到所述第一热点代码段的虚拟地址的第二page offset;根据所述最后一个cache组的下一个cache组,获得所述第一热点代码段所涉及页面的着色位color index;
所述物理页分配模块404用于根据所述color index获得所分配的物理页;根据所述所分配的物理页对应的物理页号PFN和所述第二page offset,得到所述第一热点代码段的物理地址。
具体实施例中,根据所述color index获得所分配的物理页,包括:所述物理页分配模块404根据所述color index,随机获取特定数量的连续物理页;从所述特定数量的连续物理页中选取符合所述color index的物理页,作为所述所分配的物理页。
具体实施例中,所述特定数量等于所述所分配的物理页的页数与页面颜色数量之和减1;其中,所述页面颜色数量由所述color index的位数确定。
具体实施例中,在所述获取模块确定当前需要加载的二进制文件之前,包括:
所述获取模块401用于根据第二热点代码段的虚拟地址范围virtual addresssize确定所述第二热点代码段占用的cache组的个数;
所述加载器模块402根据所述第二热点代码段占用的cache组的个数,和第三热点代码段映射到所述cache后所占用的最后一个cache组,确定所述第二热点代码段映射到所述cache后所占用的最后一个cache组,将该最后一个cache组的组号更新到所述对齐信息;其中,所述第三热点代码段为在所述第二热点代码段之前已加载的热点代码段。
需要说明的是,设备400所涉及各个功能模块的具体实现方式可以参照图9所示的方法实施例的相应描述,这里不再赘述。
基于相同的发明构思,本发明实施例提供了又一种设备500,如图14所示,图14为一种用于减少高速缓存冲突的设备500的硬件结构示意图。其中,该设备500可包括处理器501、存储器(包括主存储器502、高速缓存cache503)、和总线504。其中,处理器501、存储器通过总线504连接。
处理器501可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。
存储器可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器可以存储操作***、应用程序、二进制文件等。在通过软件或者固件来实现本发明实施例提供的技术方案时,用于实现本发明实施例提供的技术方案的程序代码保存在存储器中,并由处理器501来执行。
总线504可包括一通路,在设备各个部件(例如,主存储器502、高速缓存cache503和处理器501)之间传送信息。
应注意,尽管图14所示的硬件仅仅示出了处理器501、主存储器502、高速缓存cache503和总线504,但是在具体实现过程中,本领域的技术人员应当明白,该设备终端还可包含实现正常运行所必须的其他器件。具体实现中存储器还可包括非易失性存储器等。同时,根据具体需要,本领域的技术人员应当明白,还可包含实现其他功能的硬件器件。
其中,所述处理器501可用于调用存储器存储的程序代码,执行以下步骤:
确定主存储器中当前需要加载的二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数;
获得第二热点代码段的对齐信息;其中,所述第二热点代码段为在所述第一热点代码段之前已加载的热点代码段;所述对齐信息包括所述第二热点代码段映射到高速缓存cache后,所述第二热点代码段所占用的最后一个cache组的组号;所述cache503属于N路组相联结构,N为大于或等于1的整数;
根据所述对齐信息,对所述第一热点代码段进行偏移操作,使得所述第一热点代码段映射到连续的cache503的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
具体的,当所述cache503类型为VIPT架构时,所述处理器501可用于基于程序代码执行以下步骤:
确定当前需要加载的二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数;
获得第二热点代码段的对齐信息;其中,所述第二热点代码段为在所述第一热点代码段之前已加载的热点代码段;所述对齐信息包括所述第二热点代码段映射到高速缓存cache后,所述第二热点代码段所占用的最后一个cache组的组号;所述cache属于N路组相联结构,N为大于或等于1的整数;所述cache类型为虚拟索引物理标签VIPT架构;
根据所述对齐信息,对所述第一热点代码段的虚拟地址进行偏移操作,使得所述第一热点代码段的虚拟地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
需要说明的是,处理器501执行的步骤以及处理器501涉及的其他技术特征还可以参照图6所示的方法实施例的相应描述,这里不再赘述。
具体的,当所述cache503类型为PIPT架构时,所述处理器501可用于基于程序代码执行以下步骤:
确定当前需要加载的二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数;
获得第二热点代码段的对齐信息;其中,所述第二热点代码段为在所述第一热点代码段之前已加载的热点代码段;所述对齐信息包括所述第二热点代码段映射到高速缓存cache后,所述第二热点代码段所占用的最后一个cache组的组号;所述cache属于N路组相联结构,N为大于或等于1的整数;所述cache类型为物理索引物理标签PIPT架构;
根据所述对齐信息,对所述第一热点代码段的虚拟地址的第一页内偏移pageoffset进行偏移操作;
对所述第一热点代码段所在的物理页进行物理页分配操作,得到所分配的物理页和所述第一热点代码段的物理地址;
将存在于所述物理页中的所述第一热点代码段的所述物理地址映射到连续的cache组,并且所述连续的cache组紧跟所述最后一个cache组。
需要说明的是,处理器501执行的步骤以及处理器501涉及的其他技术特征还可以参照图9所示的方法实施例的相应描述,这里不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者任意组合来实现。当使用软件实现时,可以全部或者部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令,在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或其他可编程装置。所述计算机指令可存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网络站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、微波等)方式向另一个网络站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质,也可以是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带等)、光介质(例如DVD等)、或者半导体介质(例如固态硬盘)等等。
在上述实施例中,对各个实施例的描述各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (25)
1.一种高速缓存cache地址映射方法,其特征在于,所述cache包括多个cache组,所述方法包括:
获取二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数,所述热点函数为经常性地运行在CPU中的函数代码;
获取第二热点代码段的对齐信息;其中,所述第二热点代码段为已加载到所述cache的热点代码段;所述对齐信息包括所述第二热点代码段加载到所述cache后,所述第二热点代码段所占用的最后一个cache组的组号;
根据所述对齐信息,对所述第一热点代码段进行偏移操作,使得所述第一热点代码段映射到所述cache中组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻。
2.根据权利要求1所述的方法,其特征在于,所述根据所述对齐信息,对所述第一热点代码段进行偏移操作,包括:
根据所述对齐信息,对所述第一热点代码段的存储地址进行偏移操作,使得所述第一热点代码段的所述存储地址映射到所述cache中组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻;其中,所述存储地址包括虚拟地址或物理地址。
3.根据权利要求2所述的方法,其特征在于,所述cache的映射方式包括将所述虚拟地址映射至所述cache的cache组;
所述根据所述对齐信息,对所述第一热点代码段进行偏移操作包括:
根据所述对齐信息,对所述第一热点代码段的虚拟地址进行偏移操作,使得所述第一热点代码段的虚拟地址映射到组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻。
4.根据权利要求3所述的方法,其特征在于,根据所述对齐信息,对所述第一热点代码段的虚拟地址进行偏移操作,包括:
获取所述第一热点代码段的虚拟地址;
根据所述对齐信息确定所述最后一个cache组相邻的cache组;
根据所述相邻的cache组和所述第一热点代码段的虚拟地址得到所述偏移操作的偏移量;
根据所述偏移操作的偏移量对所述第一热点代码段的虚拟地址进行偏移操作。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述第一热点代码段包括多个归并的热点函数;所述多个归并的热点函数在所述第一热点代码段中地址连续,每个热点函数均具有相同的标识,所述标识用于实现将多个热点函数归并为所述第一热点代码段。
6.根据权利要求2所述的方法,其特征在于,所述cache的映射方式包括将所述物理地址映射至所述cache的cache组;
所述根据所述对齐信息,对所述第一热点代码段进行偏移操作包括:
根据所述对齐信息,对所述第一热点代码段的虚拟地址的第一页内偏移page offset进行偏移操作以及对所述第一热点代码段所在的物理页进行物理页分配操作,以得到所分配的物理页和所述第一热点代码段的物理地址;
将存在于所述物理页中的所述第一热点代码段的所述物理地址映射到组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻。
7.根据权利要求6所述的方法,其特征在于,根据所述对齐信息,对所述第一热点代码段的虚拟地址的第一页内偏移page offset进行偏移操作,以及对所述第一热点代码段所在的物理页进行物理页分配操作,得到所分配的物理页和所述第一热点代码段的物理地址,包括:
根据所述最后一个cache组相邻的cache组和所述第一热点代码段的虚拟地址的第一page offset,得到所述偏移操作的偏移量;
根据所述偏移量对所述第一热点代码段的虚拟地址的第一page offset进行偏移操作,得到所述第一热点代码段的虚拟地址的第二page offset;
根据所述最后一个cache组相邻的cache组,获得所述第一热点代码段所涉及页面的着色位 color index;
根据所述color index获得所分配的物理页;
根据所述所分配的物理页对应的物理页号PFN和所述第二page offset,得到所述第一热点代码段的物理地址。
8.根据权利要求7所述的方法,其特征在于,根据所述color index获得所分配的物理页,包括:
根据所述color index,从物理页分配器随机获取特定数量的连续物理页;从所述特定数量的连续物理页中选取符合所述color index的物理页,作为所述所分配的物理页。
9.根据权利要求8所述的方法,其特征在于,所述特定数量等于所述所分配的物理页的页数与页面颜色数量之和减1;其中,所述页面颜色数量由所述color index的位数确定。
10.根据权利要求1至4、6-9中任一项所述的方法,其特征在于,所述方法还包括:
根据第二热点代码段的虚拟地址范围确定所述第二热点代码段占用的cache组的个数;
根据所述第二热点代码段占用的cache组的个数,和第三热点代码段加载到所述cache后所占用的最后一个cache组,确定所述第二热点代码段加载到所述cache后所占用的最后一个cache组,将该最后一个cache组的组号更新到所述对齐信息;其中,所述第三热点代码段为在加载所述第二热点代码段之前已加载到所述cache的热点代码段。
11.一种用于高速缓存cache地址映射的设备,其特征在于,包括:
获取模块,用于获取二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数,所述热点函数为经常性地运行在CPU中的函数代码;
加载器模块,用于获取第二热点代码段的对齐信息;其中,所述第二热点代码段为已加载到所述cache的热点代码段;所述对齐信息包括所述第二热点代码段加载到所述cache后,所述第二热点代码段所占用的最后一个cache组的组号;所述cache包括多个cache组;
偏移模块,用于根据所述对齐信息,对所述第一热点代码段进行偏移操作,使得所述第一热点代码段映射到所述cache中组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻。
12.根据权利要求11所述的设备,其特征在于,所述偏移模块用于根据所述对齐信息,对所述第一热点代码段进行偏移操作,包括:
所述偏移模块用于根据所述对齐信息,对所述第一热点代码段的存储地址进行偏移操作,使得所述第一热点代码段的所述存储地址映射到所述cache中组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻;其中,所述存储地址包括虚拟地址或物理地址。
13.根据权利要求12所述的设备,其特征在于,所述cache的映射方式包括将所述虚拟地址映射至所述cache的cache组;
所述偏移模块用于根据所述对齐信息,对所述第一热点代码段进行偏移操作,包括:
所述偏移模块用于根据所述对齐信息,对所述第一热点代码段的虚拟地址进行偏移操作,使得所述第一热点代码段的虚拟地址映射到组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻。
14.根据权利要求13所述的设备,其特征在于,所述偏移模块用于根据所述对齐信息,对所述第一热点代码段的虚拟地址进行偏移操作,包括:
所述加载器模块用于获取所述第一热点代码段的虚拟地址;
所述偏移模块用于根据所述对齐信息确定所述最后一个cache组相邻的cache组;
根据所述相邻的cache组和所述第一热点代码段的虚拟地址得到所述偏移操作的偏移量;
根据所述偏移操作的偏移量对所述第一热点代码段的虚拟地址进行偏移操作。
15.根据权利要求11至14任一项所述的设备,其特征在于,所述第一热点代码段包括多个归并的热点函数;所述多个归并的热点函数在所述第一热点代码段中地址连续,每个热点函数均具有相同的标识,所述标识用于实现将多个热点函数归并为所述第一热点代码段。
16.根据权利要求12所述的设备,其特征在于,所述cache的映射方式包括将所述物理地址映射至所述cache的cache组;所述设备还包括物理页分配器模块;
所述偏移模块用于根据所述对齐信息,对所述第一热点代码段进行偏移操作,包括:
所述偏移模块用于根据所述对齐信息,对所述第一热点代码段的虚拟地址的第一页内偏移page offset进行偏移操作;
所述物理页分配器模块用于对所述第一热点代码段所在的物理页进行物理页分配操作,得到所分配的物理页和所述第一热点代码段的物理地址;存在于所述物理页中的所述第一热点代码段的所述物理地址映射到组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻。
17.根据权利要求16所述的设备,其特征在于,所述偏移模块用于根据所述对齐信息,对所述第一热点代码段的虚拟地址的第一页内偏移page offset进行偏移操作,以及对所述第一热点代码段所在的物理页进行物理页分配操作,得到所分配的物理页和所述第一热点代码段的物理地址,包括:
所述偏移模块用于根据所述最后一个cache组相邻的cache组和所述第一热点代码段的虚拟地址的第一page offset,得到所述偏移操作的偏移量;
根据所述偏移量对所述第一热点代码段的虚拟地址的第一page offset进行偏移操作,得到所述第一热点代码段的虚拟地址的第二page offset;
根据所述最后一个cache组相邻的cache组,获得所述第一热点代码段所涉及页面的着色位 color index;
所述物理页分配模块用于根据所述color index获得所分配的物理页;
根据所述所分配的物理页对应的物理页号PFN和所述第二page offset,得到所述第一热点代码段的物理地址。
18.根据权利要求17所述的设备,其特征在于,根据所述color index获得所分配的物理页,包括:
所述物理页分配模块根据所述color index,随机获取特定数量的连续物理页;从所述特定数量的连续物理页中选取符合所述color index的物理页,作为所述所分配的物理页。
19.根据权利要求18所述的设备,其特征在于,所述特定数量等于所述所分配的物理页的页数与页面颜色数量之和减1;其中,所述页面颜色数量由所述color index的位数确定。
20.根据权利要求11至14、16-19任一项所述的设备,其特征在于,所述获取模块还用于根据第二热点代码段的虚拟地址范围virtual address size确定所述第二热点代码段占用的cache组的个数;
所述加载器模块还用于根据所述第二热点代码段占用的cache组的个数,和第三热点代码段加载到所述cache后所占用的最后一个cache组,确定所述第二热点代码段加载到所述cache后所占用的最后一个cache组,将该最后一个cache组的组号更新到所述对齐信息;其中,所述第三热点代码段为在加载所述第二热点代码段之前已加载到所述cache的热点代码段。
21.一种设备,其特征在于,所述设备包括:处理器、高速缓存cache和主存储器,所述cache包括多个cache组;其中,所述处理器用于:
获取二进制文件,所述二进制文件包括第一热点代码段;其中,所述第一热点代码段包括一个热点函数,或者,所述第一热点代码段包括多个归并的热点函数,所述热点函数为经常性地运行在CPU中的函数代码;
获取第二热点代码段的对齐信息;其中,所述第二热点代码段为已加载到所述cache的热点代码段;所述对齐信息包括所述第二热点代码段加载到所述cache后,所述第二热点代码段所占用的最后一个cache组的组号;
根据所述对齐信息,对所述第一热点代码段进行偏移操作,使得所述第一热点代码段映射到所述cache中组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻。
22.根据权利要求21所述的设备,其特征在于,所述处理器用于所述根据所述对齐信息,对所述第一热点代码段进行偏移操作,包括:
所述处理器用于根据所述对齐信息,对所述第一热点代码段的存储地址进行偏移操作,使得所述第一热点代码段的所述存储地址映射到所述cache中组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻;其中,所述存储地址包括虚拟地址或物理地址。
23.根据权利要求21或22所述的设备,其特征在于,所述cache的映射方式包括将虚拟地址映射至所述cache的cache组;
所述处理器用于根据所述对齐信息,对所述第一热点代码段进行偏移操作,包括:
所述处理器用于根据所述对齐信息,对所述第一热点代码段的虚拟地址进行偏移操作,使得所述第一热点代码段的虚拟地址映射到组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻。
24.根据权利要求21或22所述的设备,其特征在于,所述cache的映射方式包括将物理地址映射至所述cache的cache组;
所述处理器用于根据所述对齐信息,对所述第一热点代码段的虚拟地址的第一页内偏移page offset进行偏移操作以及对所述第一热点代码段所在的物理页进行物理页分配操作,以得到所分配的物理页和所述第一热点代码段的物理地址;
将存在于所述物理页中的所述第一热点代码段的所述物理地址映射到组号连续的cache组,并且所述组号连续的cache组与所述最后一个cache组相邻。
25.一种存储计算机指令的可读非易失性存储介质,其特征在于,包括计算机指令,所述计算机指令被执行以实现权利要求1至10任一项描述的方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711247808.XA CN109857681B (zh) | 2017-11-30 | 2017-11-30 | 高速缓存cache地址映射方法以及相关设备 |
EP18883092.1A EP3690660B1 (en) | 2017-11-30 | 2018-05-31 | Cache address mapping method and related device |
PCT/CN2018/089377 WO2019104978A1 (zh) | 2017-11-30 | 2018-05-31 | 高速缓存cache地址映射方法以及相关设备 |
US16/886,752 US11256630B2 (en) | 2017-11-30 | 2020-05-28 | Cache address mapping method and related device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711247808.XA CN109857681B (zh) | 2017-11-30 | 2017-11-30 | 高速缓存cache地址映射方法以及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109857681A CN109857681A (zh) | 2019-06-07 |
CN109857681B true CN109857681B (zh) | 2023-07-18 |
Family
ID=66664693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711247808.XA Active CN109857681B (zh) | 2017-11-30 | 2017-11-30 | 高速缓存cache地址映射方法以及相关设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11256630B2 (zh) |
EP (1) | EP3690660B1 (zh) |
CN (1) | CN109857681B (zh) |
WO (1) | WO2019104978A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111078318B (zh) * | 2019-12-18 | 2023-06-13 | Oppo广东移动通信有限公司 | 配置文件的处理方法、装置、***及存储介质 |
CN116010109B (zh) * | 2023-02-23 | 2023-07-04 | 摩尔线程智能科技(北京)有限责任公司 | 缓存资源分配方法、装置、电子设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1971538A (zh) * | 2005-08-05 | 2007-05-30 | 富士通株式会社 | 降低高速缓存的功耗 |
CN101552840A (zh) * | 2009-03-09 | 2009-10-07 | 北京天碁科技有限公司 | 一种降低移动终端功耗的方法及移动终端 |
CN103713933A (zh) * | 2013-12-31 | 2014-04-09 | 华为技术有限公司 | 计算机程序中热点函数、变量的汇聚方法、装置及*** |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6408368B1 (en) | 1999-06-15 | 2002-06-18 | Sun Microsystems, Inc. | Operating system page placement to maximize cache data reuse |
US7299318B2 (en) * | 2001-12-20 | 2007-11-20 | Sun Microsystems, Inc. | Method for reducing cache conflict misses |
US7237084B2 (en) * | 2003-10-27 | 2007-06-26 | Hewlett-Packard Development Company, L.P. | Method and program product for avoiding cache congestion by offsetting addresses while allocating memory |
US7747820B2 (en) * | 2007-06-15 | 2010-06-29 | Microsoft Corporation | Managing working set use of a cache via page coloring |
CN102323909B (zh) * | 2011-09-13 | 2014-03-19 | 北京北大众志微***科技有限责任公司 | 实现使用大容量高速缓存的内存管理方法及装置 |
CN102521150B (zh) * | 2011-11-28 | 2014-10-08 | 华为技术有限公司 | 一种应用程序cache分配方法及装置 |
CN102662868B (zh) * | 2012-05-02 | 2015-08-19 | 中国科学院计算技术研究所 | 用于处理器的动态组相联高速缓存装置及其访问方法 |
CN103365797B (zh) | 2013-07-05 | 2017-05-31 | 华为技术有限公司 | 物理内存页分配方法和计算机*** |
CN104899159B (zh) * | 2014-03-06 | 2019-07-23 | 华为技术有限公司 | 高速缓冲存储器Cache地址的映射处理方法和装置 |
US20160004644A1 (en) * | 2014-07-02 | 2016-01-07 | Lsi Corporation | Storage Controller and Method for Managing Modified Data Flush Operations From a Cache |
US9959215B2 (en) * | 2015-12-10 | 2018-05-01 | Microsoft Technology Licensing, Llc | Efficient address-to-symbol translation of stack traces in software programs |
US10089233B2 (en) * | 2016-05-11 | 2018-10-02 | Ge Aviation Systems, Llc | Method of partitioning a set-associative cache in a computing platform |
-
2017
- 2017-11-30 CN CN201711247808.XA patent/CN109857681B/zh active Active
-
2018
- 2018-05-31 WO PCT/CN2018/089377 patent/WO2019104978A1/zh unknown
- 2018-05-31 EP EP18883092.1A patent/EP3690660B1/en active Active
-
2020
- 2020-05-28 US US16/886,752 patent/US11256630B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1971538A (zh) * | 2005-08-05 | 2007-05-30 | 富士通株式会社 | 降低高速缓存的功耗 |
CN101552840A (zh) * | 2009-03-09 | 2009-10-07 | 北京天碁科技有限公司 | 一种降低移动终端功耗的方法及移动终端 |
CN103713933A (zh) * | 2013-12-31 | 2014-04-09 | 华为技术有限公司 | 计算机程序中热点函数、变量的汇聚方法、装置及*** |
Also Published As
Publication number | Publication date |
---|---|
WO2019104978A1 (zh) | 2019-06-06 |
EP3690660B1 (en) | 2023-05-31 |
EP3690660A4 (en) | 2020-12-23 |
CN109857681A (zh) | 2019-06-07 |
EP3690660A1 (en) | 2020-08-05 |
US11256630B2 (en) | 2022-02-22 |
US20200293455A1 (en) | 2020-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105740164B (zh) | 支持缓存一致性的多核处理器、读写方法、装置及设备 | |
JP6460497B2 (ja) | ファイルアクセス方法およびファイルアクセス装置、ならびに記憶装置 | |
US9104327B2 (en) | Fast translation indicator to reduce secondary address table checks in a memory device | |
US9223712B2 (en) | Data cache method, device, and system in a multi-node system | |
US10824555B2 (en) | Method and system for flash-aware heap memory management wherein responsive to a page fault, mapping a physical page (of a logical segment) that was previously reserved in response to another page fault for another page in the first logical segment | |
CN113568562A (zh) | 一种存储***、内存管理方法和管理节点 | |
US20170364442A1 (en) | Method for accessing data visitor directory in multi-core system and device | |
CN109857681B (zh) | 高速缓存cache地址映射方法以及相关设备 | |
CN102063386A (zh) | 一种单载体多目标的缓存***的缓存管理方法 | |
US8707006B2 (en) | Cache index coloring for virtual-address dynamic allocators | |
CN115357196A (zh) | 动态可扩展的组相联高速缓存方法、装置、设备及介质 | |
US7237084B2 (en) | Method and program product for avoiding cache congestion by offsetting addresses while allocating memory | |
US20100257319A1 (en) | Cache system, method of controlling cache system, and information processing apparatus | |
CN116225693A (zh) | 元数据管理方法、装置、计算机设备及存储介质 | |
CN109299021A (zh) | 页迁移方法、装置和中央处理器 | |
US20180089106A1 (en) | Method and apparatus for replacing data block in cache | |
CN101221539A (zh) | 提高缓存性能的方法及缓存*** | |
CN118245398A (zh) | 内存管理方法、装置、存储介质以及终端 | |
WO2024082702A1 (zh) | 数据处理方法、装置、芯片以及计算机可读存储介质 | |
US10853267B2 (en) | Adaptive method for selecting a cache line replacement algorithm in a direct-mapped cache | |
CN115668153A (zh) | 闪存控制方法和装置 | |
CN116627890A (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 |