一种基于数据对象热度的异构内存分配方法及系统转让专利

申请号 : CN201710382253.3

文献号 : CN107168654B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 廖小飞金海刘海坤刘仁山

申请人 : 华中科技大学

摘要 :

本发明公开了一种基于数据对象热度的异构内存分配方法及系统,包括:在源代码中进行插桩,统计源代码中包括的数据对象的读写操作信息;将数据对象的读写操作信息经过缓存过滤后得到数据对象的访存特征,数据对象的访存特征为数据对象对异构内存的读写操作访存次数随时间变化的特征;根据数据对象的访存特征确定数据对象的访存热度等级;根据数据对象的访存热度等级、动态随机存取存储器的时延能耗信息和可用容量信息以及非易失性存储器的时延能耗信息和可用容量信息中的至少一种信息将数据对象分配到动态随机存取存储器和非易失性存储器中的一个。本发明以对象为最小粒度可减少对内存带宽带来的资源浪费,并考虑内存的可用,保证系统的性能。

权利要求 :

1.一种基于数据对象热度的异构内存分配方法,所述异构内存包括动态随机存取存储器和非易失性存储器,其特征在于,包括:在源代码中进行插桩,统计所述源代码中包括的数据对象的读写操作信息;

将所述数据对象的读写操作信息经过缓存过滤后得到数据对象的访存特征,所述数据对象的访存特征为所述数据对象对所述异构内存的读写操作访存次数随时间变化的特征;

根据所述数据对象的访存特征确定所述数据对象的访存热度等级;包括:预设至少一种初始函数,包括:在每个周期内访存稳定的第三初始函数F3、第五初始函数F5和第二初始函数F2,在单个周期内访存不稳定,但在整个生命周期上呈稳定性变化的第四初始函数F4,在短时间内访存突变且在整个生命周期上并不呈稳定性变化的第一初始函数F1;F3对应的访存次数均值为f3,F5对应的访存次数均值为f5,F2对应的访存次数均值为f2,f3>f5>f2>0;设所述数据对象对所述异构内存的读写操作访存次数随时间变化的特征为函数fi(n),设rank表示访存热度等级,rank的数值与其所代表的访存热度等级反相关,1≤rank≤

5,rank为正整数,fi(n)对应数据对象的访存热度等级rank根据以下几种情况确定;若fi(n)趋近于F1,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于f2且小于f5,则rank值为4;若fi(n)的峰值大于F5且小于f3,则rank值为3;若fi(n)的峰值大于f3且小于f3的10倍,则rank值为2;若fi(n)的峰值大于f3的10倍,则rank值为1;若fi(n)趋近于F2,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于f2且小于f5,则rank值为4;若fi(n)趋近于F3,则若fi(n)的峰值大于f5且小于f3,则rank值为2;若fi(n)的峰值大于f3,则rank值为1;

若fi(n)趋近于F4,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于F2且小于f5,则rank值为4;若fi(n)的峰值大于f5且小于f5的两倍,则rank值为3;若fi(n)的峰值大于f5的两倍且小于f3,则rank值为2;若fi(n)的峰值大于f3,则rank值为1;

根据所述数据对象的访存热度等级、所述动态随机存取存储器的时延能耗信息和可用容量信息以及所述非易失性存储器的时延能耗信息和可用容量信息中的至少一种信息将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个。

2.根据权利要求1所述的异构内存分配方法,其特征在于,将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个,包括:若数据对象的rank值越小,则该数据对象越倾向于被分配到动态随机存取存储器中,若数据对象的rank值越大,则该数据对象越倾向于被分配非易失性存储器中;

当数据对象的rank值为1时,该数据对象被分配至动态随机存取存储器中;

当数据对象的rank值为5时,该数据对象被分配至非易失性存储器中。

3.根据权利要求1所述的异构内存分配方法,其特征在于,根据如下公式确定所述动态随机存取存储器和非易失性存储器的时延能耗比ζ(T×E):当ζ(T×E)>1时,所述数据对象在动态随机存取存储器上的完成所有操作所需的时延与能耗的乘积要多于非易失性存储器,当ζ(T×E)≤1时,所述数据对象在动态随机存取存储器上的完成所有操作所需的时延与能耗的乘积要小于等于非易失性存储器;

将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个,包括:

根据所述数据对象的rank值和所述时延能耗比信息设置常量X,根据所述常量X的数值和以下公式的数值γ分配所述数据对象:当所述数据对象的rank值为2时,所述常量X的值为2,当γ大于X时,将此数据对象分配到非易失性存储器中,反之则分配到动态随机存取存储器中;

当所述数据对象的rank值为3时,所述常量X的值为1,当γ大于X时,将此数据对象分配到非易失性存储器中,反之则分配到动态随机存取存储器中;

当所述数据对象的rank值为4时,所述常量X的值为0.5,当γ大于X时,将此数据对象分配到非易失性存储器中,反之则分配到动态随机存取存储器中;

其中,NVMAvailable为异构内存中非易失性存储器可用容量与其总容量的占比,DRAMAvailable为异构内存中动态随机存取存储器可用容量与其总容量的占比。

4.根据权利要求3所述的异构内存分配方法,其特征在于,还包括:

在所述源代码包括的每个循环体的前后分别插入一个记录时间的函数,以记录每个循环体的开始和完成时间,以此将所述数据对象的生命周期分为多个不同的时间段;

当所述数据对象被分配至所述动态随机存取存储器和非易失性存储器中的一个后,根据所述数据对象在不同时间段上的访存特征,确定需要进行迁移操作的数据对象及其对应的时间段。

5.根据权利要求4所述的异构内存分配方法,其特征在于,根据所述数据对象在不同时间段上的访存特征,确定需要进行迁移操作的数据对象及其对应的时间段,包括:若所述数据对象被分配至动态随机存取存储器中,且该数据对象在其生命周期的第一时间段内的访存次数的均值小于f5,则在进入所述第一时间段之前,将所述数据对象迁移至非易失性存储器中,在所述第一时间段结束后,将所述数据对象迁移回所述动态随机存取存储器中;

若所述数据对象被分配至非易失性存储器中,且该数据对象在其生命周期的第一时间段内的访存次数的均值大于f5,则在进入所述第一时间段之前,将所述数据对象迁移至动态随机存取存储器中,在所述第一时间段结束后,将所述数据对象迁移回所述非易失性存储器中。

6.根据权利要求1所述的异构内存分配方法,其特征在于,在源代码中进行插桩,统计所述源代码中包括的数据对象的读写操作信息,包括:对所述源代码编译源码生成对应的中间文件;

遍历所述中间文件中的所有指令,找到AllocInst、GetElementPtrInst、StoreInst和LoadInst四种指令,AllocInst指令为所述源代码对应的程序中所有数据对象的初始化操作,GetElementPtrInst指令为所述程序中利用地址偏移的方式取得数据对象中进行操作的数据对象量的地址并将此地址保存在一个中间地址中的指令,StoreInst指令和LoadInst指令分别为对数据对象中的数据量进行写和读操作的指令;

通过所述AllocInst和GetElementPtrInst指令分别确定要进行初始化操作的数据对象和进行实际操作的数据对象;

对所述要进行初始化操作的数据对象和进行实际操作的数据对象进行插桩,确定所述源代码中包括的数据对象的读写操作方式、操作地址、操作对象以及操作时间信息。

7.根据权利要求1所述的异构内存分配方法,其特征在于,将所述数据对象的读写操作信息经过缓存过滤后得到数据对象的访存特征,包括:根据所述数据对象的读写操作信息中的操作地址确定所述数据对象在缓存中对应的组编号;

将所述数据对象的读写操作信息插入所述组编号中,并在所述组编号内利用近期最少使用算法确定需要被所述缓存逐出的数据对象的读写操作信息,所述近期最少使用算法用于逐出缓存最近最少被使用的数据对象;

根据所述需要给缓存逐出的读写操作信息确定所述数据对象的访存特征。

8.一种基于数据对象热度的异构内存分配系统,所述异构内存包括动态随机存取存储器和非易失性存储器,其特征在于,包括:插桩单元,用于在源代码中进行插桩,统计所述源代码中包括的数据对象的读写操作信息;

访存特征确定单元,用于将所述数据对象的读写操作信息经过缓存过滤后得到数据对象的访存特征,所述数据对象的访存特征为所述数据对象对所述异构内存的读写操作访存次数随时间变化的特征;

热度等级确定单元,用于根据所述数据对象的访存特征确定所述数据对象的访存热度等级;所述热度等级确定单元,用于预设至少一种初始函数,包括:在每个周期内访存稳定的第三初始函数F3、第五初始函数F5和第二初始函数F2,在单个周期内访存不稳定,但在整个生命周期上呈稳定性变化的第四初始函数F4,在短时间内访存突变且在整个生命周期上并不呈稳定性变化的第一初始函数F1;F3对应的访存次数均值为f3,F5对应的访存次数均值为f5,F2对应的访存次数均值为f2,f3>f5>f2>0;设所述数据对象对所述异构内存的读写操作访存次数随时间变化的特征为函数fi(n),设rank表示访存热度等级,rank的数值与其所代表的访存热度等级反相关,1≤rank≤5,rank为正整数,fi(n)对应数据对象的访存热度等级rank根据以下几种情况确定;若fi(n)趋近于F1,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于f2且小于f5,则rank值为4;若fi(n)的峰值大于F5且小于f3,则rank值为3;若fi(n)的峰值大于f3且小于f3的10倍,则rank值为2;若fi(n)的峰值大于f3的10倍,则rank值为1;若fi(n)趋近于F2,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于f2且小于f5,则rank值为4;若fi(n)趋近于F3,则若fi(n)的峰值大于f5且小于f3,则rank值为2;若fi(n)的峰值大于f3,则rank值为1;若fi(n)趋近于F4,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于F2且小于f5,则rank值为4;若fi(n)的峰值大于f5且小于f5的两倍,则rank值为3;若fi(n)的峰值大于f5的两倍且小于f3,则rank值为2;若fi(n)的峰值大于f3,则rank值为1;

分配单元,用于根据所述数据对象的访存热度等级、所述动态随机存取存储器的时延能耗信息和可用容量信息以及所述非易失性存储器的时延能耗信息和可用容量信息中的至少一种信息将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个。

说明书 :

一种基于数据对象热度的异构内存分配方法及系统

技术领域

[0001] 本发明属于计算机存储技术领域,更具体地,涉及一种基于数据对象热度的异构内存分配方法及系统。

背景技术

[0002] 随着计算机多核技术和计算机应用技术的发展,当前应用对内存的需求越来越大,传统的动态随机访问存储器(Dynamic Random Access Memory,DRAM)因其巨大的能耗、工艺密度的限制,已经无法满足应用日益增加的内存要求。新型非易失性存储器(Non-Volatile Memory,NVM)因其读写速度接近DRAM、待机功耗小、可扩展性强等特征,成为替代DRAM提供大内存的理想存储介质。然而相比传统的DRAM内存,非易失性存储器也因其读写次数有限、读写时延大、写能耗高等缺陷无法直接替代DRAM成为内存。
[0003] 为了降低NVM的缺陷,当前主流的做法是将DRAM和NVM混合在一起,形成异构内存系统,同时利用NVM大容量、非易失、待机功耗低的优势和DRAM低访问时延、寿命长的优势,提升整个内存系统的功耗效率、性能和寿命。
[0004] 目前平行结构的异构内存分配器主要是使用Buddy或者Slab分配器,采用优先适用(First-Fit)的策略,将页面分配到DRAM和NVM这两种内存介质上,然后通过在应用层或者硬件层检测内存中页面的热度,如页面的读写访问频率,最后采用迁移的机制,如根据页面的热度将页面迁移到符合其访问特征的内存介质上来完成对异构内存性能的优化。
[0005] 当前的平行架构异构内存系统主要有以下几个缺点:
[0006] 1、运行时检测以页面为粒度,需要再在应用层或者硬件层检测页面的热度信息会带来较大的软硬件开销。
[0007] 2、以访问热度为指标的页面迁移策略无法感知源程序中数据的访存特征,因此在进行迁移操作时不一定会带来系统性能的提升。例如在某固定时刻对程序性能有直接影响的数据对象可能分散在不同的页面上,若此时仅仅以访问热度为指标来对页面进行迁移操作,则该程序对应的数据对象所在的不同页面可能有的访问热度已经超过阈值,有的访问热度并未超过阈值,此时只会迁移访问热度已经超过阈值的页面,而访问热度并未超过阈值的页面就不会进行迁移操作。显而易见,在这种情况下,完成迁移操作后系统的性能并不会得到提升。
[0008] 3、现有的异构内存管理方法是以页面为粒度的,当页面的访问热度达到阈值后就会通过进行页面迁移操作来提高系统性能,但是当某个页面需要进行迁移操作时,很有可能只是由于这个页面中的很小一部分数据被频繁访问,由于一个页面上的数据很有可能是没有任何关系的,此时若迁移整个页面则会对系统中的内存带宽带来很大程度上的资源浪费。

发明内容

[0009] 针对现有技术的缺陷,本发明的目的在于解决现有技术以页面为粒度检测热度信息的迁移机制无法兼顾数据对象的热度信息进行异构内存迁移,会带来较大的系统开销、性能损耗及资源浪费的技术问题。
[0010] 为实现上述目的,一方面,本发明提供了一种基于数据对象热度的异构内存分配方法,所述异构内存包括动态随机存取存储器和非易失性存储器,包括:在源代码中进行插桩,统计所述源代码中包括的数据对象的读写操作信息;将所述数据对象的读写操作信息经过缓存过滤后得到数据对象的访存特征,所述数据对象的访存特征为所述数据对象对所述异构内存的读写操作访存次数随时间变化的特征;根据所述数据对象的访存特征确定所述数据对象的访存热度等级;根据所述数据对象的访存热度等级、所述动态随机存取存储器的时延能耗信息和可用容量信息以及所述非易失性存储器的时延能耗信息和可用容量信息中的至少一种信息将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个。
[0011] 本发明实施例提供以数据对象为粒度静态分配数据对象至相应的内存中,不同于现有技术以页面为粒度,在页面保存至内存后通过大量软硬件的访问分析页面的热度,带来较大的软硬件开销,然后以页面为粒度进行迁移,造成页面上一些数据的不必要迁移,造成系统损耗和资源浪费,故本发明可以降低软硬件开销、系统损耗及资源浪费。同时,本发明在数据对象分配至内存后,结合数据对象访存热度随时间的变化,在对应的热度明显变化的时间段将数据对象迁移至对应的内存,以进一步充分发挥不同内存的优势,大大降低系统开销。
[0012] 可选地,所述根据所述数据对象的访存特征确定所述数据对象的访存热度等级,包括:预设至少一种初始函数,包括:在每个周期内访存稳定的第三初始函数F3、第五初始函数F5和第二初始函数F2,在单个周期内访存不稳定,但在整个生命周期上呈稳定性变化的第四初始函数F4,在短时间内访存突变且在整个生命周期上并不呈稳定性变化的第一初始函数F1;F3对应的访存次数均值为f3,F5对应的访存次数均值为f5,F2对应的访存次数均值为f2,f3>f5>f2>0。设所述数据对象对所述异构内存的读写操作访存次数随时间变化的特征为函数fi(n),设rank表示访存热度等级,rank的数值与其所代表的访存热度等级反相关,1≤rank≤5,rank为正整数,fi(n)对应数据对象的访存热度等级rank根据以下几种情况确定。
[0013] 若fi(n)趋近于F1,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于f2且小于f5,则rank值为4;若fi(n)的峰值大于F5且小于f3,则rank值为3;若fi(n)的峰值大于f3且小于f3的10倍,则rank值为2;若fi(n)的峰值大于f3的10倍,则rank值为1;
[0014] 若fi(n)趋近于F2,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于f2且小于f5,则rank值为4;
[0015] 若fi(n)趋近于F3,则若fi(n)的峰值大于f5且小于f3,则rank值为2;若fi(n)的峰值大于f3,则rank值为1;
[0016] 若fi(n)趋近于F4,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于F2且小于f5,则rank值为4;若fi(n)的峰值大于f5且小于f5的两倍,则rank值为3;若fi(n)的峰值大于f5的两倍且小于f3,则rank值为2;若fi(n)的峰值大于f3,则rank值为1。
[0017] 可选地,所述将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个,包括:若数据对象的rank值越小,则该数据对象越倾向于被分配到动态随机存取存储器中,若数据对象的rank值越大,则该数据对象越倾向于被分配非易失性存储器中;当数据对象的rank值为1时,该数据对象被分配至动态随机存取存储器中;当数据对应的rank值为2时,该数据对象倾向于被分配至动态随机存取存储器中;当数据对应的rank值为4时,该数据对象倾向于被分配至非易失性存储器中;当数据对应的rank值为5时,该数据对象被分配至非易失性存储器中。
[0018] 可选地,所述将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个,包括:根据如下公式确定所述动态随机存取存储器和非易失性存储器的时延能耗比ζ(T×E):
[0019]
[0020] 当ζ(T×E)>1时,所述数据对象在动态随机存取存储器上的完成所有操作所需的时延与能耗的乘积要多于非易失性存储器,该数据对象倾向于被分配至非易失性存储器中;当ζ(T×E)≤1时,所述数据对象在动态随机存取存储器上的完成所有操作所需的时延与能耗的乘积要小于等于非易失性存储器,该数据对象倾向于被分配至动态随机存取存储器中;其中,TDRAM、EDRAM分别为动态随机存取存储器的时延和能耗,TNVM、ENVM分别为非易失性存储器的时延和能耗。
[0021] 可选地,所述将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个,包括:根据所述数据对象的rank值和所述时延能耗比信息设置常量X,根据所述常量X的数值和以下公式的数值γ分配所述数据对象:
[0022]
[0023] 当所述数据对象的rank值为2时,所述常量X的值为2,当γ大于X时,将此数据对象分配到非易失性存储器中,反之则分配到动态随机存取存储器中;当所述数据对象的rank值为3时,所述常量X的值为1,当γ大于X时,将此数据对象分配到非易失性存储器中,反之则分配到动态随机存取存储器中;当所述数据对象的rank值为4时,所述常量X的值为0.5,当γ大于X时,将此数据对象分配到非易失性存储器中,反之则分配到动态随机存取存储器中;其中,NVMAvailable为异构内存中非易失性存储器可用容量与其总容量的占比,DRAMAvailable为异构内存中动态随机存取存储器可用容量与其总容量的占比。
[0024] 本发明使用了时延-能耗比作为一个能影响数据对象内存分配操作的因素。由于NVM与DRAM相比具有高时延、低能耗的特性,为了让整个系统能够充分利用NVM的特征,并且在一定程度上要让系统的能耗与性能达到一个平衡,所以此处使用时延-能耗比ζ(T×E)作为一个能影响数据对象内存分配操作的因素。其中时延-能耗比是通过分别计算此数据对象在DRAM和NVM上完成所有操作所需的时延与能耗的乘积的比值,来判断此数据对象更合适哪种内存介质。
[0025] 本发明实施例在进行具体的分配操作时还考虑到了当前异构内存中内存的可用量,可以尽可能的保证当前系统中内存的使用均衡,避免出现某一种内存介质被迅速用完的现象,因为一旦这种现象发生就会发生磁盘与内存介质中频繁的数据交换,进而会严重的影响系统的性能,因此本发明实施例考虑内存的可用量,可以保证系统的性能。
[0026] 可选地,本发明实施例提供的异构内存分配方法还包括:在所述源代码包括的每个循环体的前后分别插入一个记录时间的函数,以记录每个循环体的开始和完成时间,以此将所述数据对象的生命周期分为多个不同的时间段;当所述数据对象被分配至所述动态随机存取存储器和非易失性存储器中的一个后,根据所述数据对象在不同时间段上的访存特征,确定需要进行迁移操作的数据对象及其对应的时间段。
[0027] 可选地,所述根据所述数据对象在不同时间段上的访存特征,确定需要进行迁移操作的数据对象及其对应的时间段,包括:若所述数据对象被分配至动态随机存取存储器中,且该数据对象在其生命周期的第一时间段内的访存次数的均值小于f5,则在进入所述第一时间段之前,将所述数据对象迁移至非易失性存储器中,在所述第一时间段结束后,将所述数据对象迁移回所述动态随机存取存储器中;若所述数据对象被分配至非易失性存储器中,且该数据对象在其生命周期的第一时间段内的访存次数的均值大于f5,则在进入所述第一时间段之前,将所述数据对象迁移至动态随机存取存储器中,在所述第一时间段结束后,将所述数据对象迁移回所述非易失性存储器中。
[0028] 可选地,所述在源代码中进行插桩,统计所述源代码中包括的数据对象的读写操作信息,包括:对所述源代码编译源码生成对应的中间文件;遍历所述中间文件中的所有指令,找到AllocInst、GetElementPtrInst、StoreInst和LoadInst四种指令,AllocInst指令为所述源代码对应的程序中所有数据对象的初始化操作,GetElementPtrInst指令为所述程序中利用地址偏移的方式取得数据对象中进行操作的数据对象量的地址并将此地址保存在一个中间地址中的指令,StoreInst指令和LoadInst指令分别为对数据对象中的数据量进行写和读操作的指令;通过所述AllocInst和GetElementPtrInst指令分别确定要进行初始化操作的数据对象和进行实际操作的数据对象;对所述要进行初始化操作的数据对象和进行实际操作的数据对象进行插桩,确定所述源代码中包括的数据对象的读写操作方式、操作地址、操作对象以及操作时间信息。
[0029] 可选地,所述将所述数据对象的读写操作信息经过缓存过滤后得到数据对象的访存特征,包括:根据所述数据对象的读写操作信息中的操作地址确定所述数据对象在缓存中对应的组编号;将所述数据对象的读写操作信息插入所述组编号中,并在所述组编号内利用近期最少使用算法确定需要被所述缓存逐出的数据对象的读写操作信息,所述近期最少使用算法用于逐出缓存最近最少被使用的数据对象;根据所述需要给缓存逐出的读写操作信息确定所述数据对象的访存特征。
[0030] 另一方面,本发明实施例提供了一种基于数据对象热度的异构内存分配系统,所述异构内存包括动态随机存取存储器和非易失性存储器,包括:插桩单元,用于在源代码中进行插桩,统计所述源代码中包括的数据对象的读写操作信息;访存特征确定单元,用于将所述数据对象的读写操作信息经过缓存过滤后得到数据对象的访存特征,所述数据对象的访存特征为所述数据对象对所述异构内存的读写操作访存次数随时间变化的特征;热度等级确定单元,用于根据所述数据对象的访存特征确定所述数据对象的访存热度等级;分配单元,用于根据所述数据对象的访存热度等级、所述动态随机存取存储器的时延能耗信息和可用容量信息以及所述非易失性存储器的时延能耗信息和可用容量信息中的至少一种信息将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个。
[0031] 可选地,所述热度等级确定单元,用于预设至少一种初始函数,包括:在每个周期内访存稳定的第三初始函数F3、第五初始函数F5和第二初始函数F2,在单个周期内访存不稳定,但在整个生命周期上呈稳定性变化的第四初始函数F4,在短时间内访存突变且在整个生命周期上并不呈稳定性变化的第一初始函数F1;F3对应的访存次数均值为f3,F5对应的访存次数均值为f5,F2对应的访存次数均值为f2,f3>f5>f2>0;设所述数据对象对所述异构内存的读写操作访存次数随时间变化的特征为函数fi(n),设rank表示访存热度等级,rank的数值与其所代表的访存热度等级反相关,1≤rank≤5,rank为正整数,fi(n)对应数据对象的访存热度等级rank根据以下几种情况确定;若fi(n)趋近于F1,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于f2且小于f5,则rank值为4;若fi(n)的峰值大于F5且小于f3,则rank值为3;若fi(n)的峰值大于f3且小于f3的10倍,则rank值为2;若fi(n)的峰值大于f3的10倍,则rank值为1;若fi(n)趋近于F2,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于f2且小于f5,则rank值为4;若fi(n)趋近于F3,则若fi(n)的峰值大于f5且小于f3,则rank值为2;若fi(n)的峰值大于f3,则rank值为1;若fi(n)趋近于F4,则若fi(n)的峰值小于f2,则rank值为5;若fi(n)的峰值大于F2且小于f5,则rank值为4;若fi(n)的峰值大于f5且小于f5的两倍,则rank值为3;若fi(n)的峰值大于f5的两倍且小于f3,则rank值为
2;若fi(n)的峰值大于f3,则rank值为1。
[0032] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
[0033] (1)本发明实施例的重点在数据的内存分配操作,并且本发明实施例中的迁移操作也是通过离线的方式确定需要在什么时间段对哪些数据对象进行迁移操作,故本发明实施例不同于基于页面热度的内存管理方法,不需要支付额外的并且较为巨大的监测开销。
[0034] (2)本发明实施例以数据对象为迁移粒度,对象中的数据都是有一定关系的,并且以对象为最小粒度能够在进行迁移操作时尽可能地减少对内存带宽带来的资源浪费。
[0035] (3)本发明实施例在进行具体的分配操作时还考虑到了当前异构内存系统中内存的可用量,可以尽可能的保证当前系统中内存的使用均衡,避免出现某一种内存介质被迅速用完的现象,因为一旦这种现象发生就会发生磁盘与内存介质中频繁的数据交换,进而会严重的影响系统的性能,因此本发明实施例考虑内存的可用量,可以保证系统的性能。

附图说明

[0036] 图1为本发明实施例提供的一种基于数据热度的异构内存分配方法流程示意图;
[0037] 图2为本发明实施例提供的另一种数据分配方法流程示意图;
[0038] 图3为本发明实施例提供的代码分析插桩的流程示意图;
[0039] 图4为本发明实施例提供的cache过滤模型的构建过程示意图;
[0040] 图5为本发明实施例提供的确定数据对象迁移操作时间片示意图;
[0041] 图6为本发明实施例提供的确定rank值所使用的初始函数示意图;
[0042] 图7为本发明实施例提供的数据对象rank分类的流程示意图;
[0043] 图8为本发明实施例提供的基于数据对象热度的异构内存分配系统的结构示意图。

具体实施方式

[0044] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0045] 需要说明的是,本发明实施例提及的“插桩”为在保证程序原有逻辑完整性的基础上在程序中插入一些用于信息采集的代码段,进而得到程序运行时的特征数据。本发明实施例提及的“异构内存”为至少有两种不同物理介质的内存系统,本发明实施例中的异构内存指的是将DRAM和NVM混合在一起所构成的异构内存,并且此异构内存的采用的平行架构,也就是将DRAM和NVM都作为主存使用的架构。本发明实施例提及的“数据迁移”指的是在程序运行过程中由于各种原因,操作系统主动或被动地将内存中某段地址上的数据全部迁移到另一段地址上的过程。
[0046] 图1为本发明实施例提供的一种基于数据热度的异构内存分配方法流程示意图,如图1所示,包括:
[0047] 步骤S101,在源代码中进行插桩,统计所述源代码中包括的数据对象的读写操作信息。
[0048] 步骤S102,将所述数据对象的读写操作信息经过缓存过滤后得到数据对象的访存特征,所述数据对象的访存特征为所述数据对象对所述异构内存的读写操作访存次数随时间变化的特征。
[0049] 步骤S103,根据所述数据对象的访存特征确定所述数据对象的访存热度等级。
[0050] 步骤S104,根据所述数据对象的访存热度等级、所述动态随机存取存储器的时延能耗信息和可用容量信息以及所述非易失性存储器的时延能耗信息和可用容量信息中的至少一种信息将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个。
[0051] 可选地,在所述源代码包括的每个循环体的前后分别插入一个记录时间的函数,以记录每个循环体的开始和完成时间,以此将所述数据对象的生命周期分为多个不同的时间段;当所述数据对象被分配至所述动态随机存取存储器和非易失性存储器中的一个后,根据所述数据对象在不同时间段上的访存特征,确定需要进行迁移操作的数据对象及其对应的时间段。
[0052] 可选地,所述根据所述数据对象在不同时间段上的访存特征,确定需要进行迁移操作的数据对象及其对应的时间段,包括:若所述数据对象被分配至动态随机存取存储器中,且该数据对象在其生命周期的第一时间段内的访存次数的均值小于DRAM/NVM访存分割线对应的数值,则在进入所述第一时间段之前,将所述数据对象迁移至非易失性存储器中,在所述第一时间段结束后,将所述数据对象迁移回所述动态随机存取存储器中;若所述数据对象被分配至非易失性存储器中,且该数据对象在其生命周期的第一时间段内的访存次数的均值大于DRAM/NVM访存分割线对应的数值,则在进入所述第一时间段之前,将所述数据对象迁移至动态随机存取存储器中,在所述第一时间段结束后,将所述数据对象迁移回所述非易失性存储器中。
[0053] 其中,第一时间段为数据对象的生命周期中的某循环体所在的时间段。
[0054] 图1所示方法的具体步骤的细化流程可参照下述图2-图7中的介绍,在此不做赘述。
[0055] 图2为本发明实施例提供的另一种数据分配方法流程示意图。如图2所示,本发明首先通过代码分析工具,利用插桩的方法统计出所有数据对象的访存特征,然后通过缓存(cache)过滤作用的模型得到程序中所有数据对象的实际的访存特征,之后根据这些访存特征确定数据对象的访存热度等级,其中,通过rank值指代访存热度等级。并计算出每个对象的能耗-时延比。最后在进行具体分配操作时,内存分配器通过该对象的rank值、能耗-时延比和当前系统中内存的可用量来对数据对象进行具体的分配操作。并且在其中还提供了数据对象的迁移接口,以便数据对象能够在合适的时间段进行迁移操作。
[0056] 更具体而言,本发明数据分配方法的详细流程如下:
[0057] (1)通过代码分析工具,利用插桩的方式统计出所有数据对象在每个给定的时间窗口下的所有访存次数,如图3所示,具体包含以下子步骤:
[0058] (1-1)利用低级虚拟机(Low Level Virtual Machine,LLVM)编译源码生成IR中间文件,其中,IR文件为LLVM中的一种文件格式。
[0059] (1-2)遍历(1-1)中生成的IR文件中的所有指令,找到AllocInst、GetElementPtrInst、StoreInst和LoadInst四种指令。
[0060] (1-3)由于IR中的每条指令会利用中间地址来进行操作,因此需要利用一个容器来保存中间地址与实际操作的数据对象之间的关系,此处将这个容器称为Dependency。
[0061] (1-4)由于AllocInst指令是用来标识程序中所有的数据对象的初始化操作,因此对于AllocInst指令,所需要的处理操作就是得到此指令要初始化的数据对象的名字,然后将这个对象插入到(1-3)中所述的容器Dependency中。
[0062] (1-5)由于GetElementPtrInst指令是利用地址偏移的方式取得数据对象中进行操作的数据量(指的是数据对象中进行实际操作的数据)的地址并将此地址保存在一个中间地址中,因此对于GetElementPtrInst指令,所需的处理操作就是得到此指令要处理的数据对象和中间地址,然后将得到的数据对象与中间地址之间的关系保存到(1-3)所述的容器Dependency中。
[0063] (1-6)由于StoreInst和LoadInst指令分别是对数据对象中的数据量进行写(store)和读(load)操作,因此这两种指令拥有相同的处理操作,都是得到指令要处理的数据量的地址,然后通过插桩的方式在(1-3)所述的容器Dependency寻找此地址所对应的数据对象,然后再利用文本记录下此指令的相关信息(包括,操作方式、操作地址、操作对象、操作时间等)。其中,操作方式、操作地址、操作对象、操作时间等信息为数据对象的读写操作信息,记录数据对象读写操作信息的文本可称为trace文件。
[0064] 需要说明的是,基于LLVM编译源码生成IR中间文件,以及根据中间文件中AllocInst、GetElementPtrInst指令确定要进行插桩的数据对象,然后对其进行插桩得到数据对象的操作信息的整个过程可称为LLVM插桩操作。
[0065] 可以理解的是,插桩操作是在源代码对应的程序在异构内存中正式运行前进行的,以便对源代码对应的数据对象进行静态分配内存。
[0066] (2)利用cache过滤作用的模型将(1)中得到的包含数据对象所有操作信息的trace文件进行一次过滤操作,进而得到数据对象的真实访存信息。
[0067] (2-1)其中cache过滤作用的模型是利用近期最少使用算法(Least Recently Used,LRU)算法对cache中的逐出操作进行模拟。由于使用此模型的目的是得到数据对象真实的访存信息,所以此模型只需要模拟LLC cache的过滤作用,如图4所示,具体包含以下子步骤:
[0068] (2-1-1)根据(1)中得到的trace文件,得到所有数据对象进行相应操作时的操作地址,与操作信息。
[0069] (2-1-2)根据(2-1-1)中得到的操作地址计算得到此操作地址在cache中所对应的组(set)编号。
[0070] (2-1-3)将(2-1-1)中得到的操作地址对应的操作信息插入到(2-1-2)中计算得到的set中,然后在组内利用LRU算法得到需要被逐出的操作信息,并利用文本记录下所有被逐出的操作信息。
[0071] (3)根据(2)中得到的数据对象的真实访存特征对将所有数据对象分为rank1-rank5 5类。rank值越小的数据对象,越倾向于被分配到DRAM中。其中rank值为rank1的数据对象在进行数据分配操作时一定会被分配到DRAM中,而rank值为rank5中的数据对象则一定会被分配到NVM中。
[0072] (3-1)根据(2)中得到的文本信息,计算得到所有对象数据在其生命周期中的平均访存loadi、storei,其生存周期Ti以及其在每个时间窗口中的访存loadin、storein。
[0073] (3-2)根据(3-1)中的信息,计算得到数据对象访存随时间变化的函数fi(n),然后根据fi(n)的特性,以及峰值的大小再来确定数据对象的rank值。
[0074] (4)根据(2)中得到的数据对象在其生命周期中经cache过滤后的所有访存操作,然后根据如下公式计算出其时延-能耗比ζ(T×E)
[0075]
[0076] (4-1)当ζ(T×E)>1时,说明此数据对象在DRAM上的完成所有操作所需的时延与能耗的乘积要多于NVM,所以将此数据对象放置在NVM上更为合适。
[0077] (4-2)当ζ(T×E)≤1时,说明此数据对象在DRAM上的完成所有操作所需的时延与能耗的乘积要小于等于NVM,因此将此数据对象放置在DRAM上更为合适。
[0078] (5)根据(2)中得到的数据对象在所有时间窗口上的不同访存特征得到该数据对象的数据迁移操作的决策,然后将此决策信息利用插桩的方式插入到源程序中。
[0079] (5-1)根据程序中的循环体给程序分片,具体下面的示例1所示,即在源程序的每个循环体前后插入一个只用来记录时间的函数,记录每个循环体开始和完成的时间,并以此将数据对象的生存周期分为若干个不同的时间段,因为一般来说在循环体中会对数据进行频繁的读写操作,而对数据进行频繁的读写操作会引起数据对象的访存次数发生巨大变化。
[0080]
[0081] (5-2)观察数据对象在不同时间段上的访存特征,决定哪些数据对象需要进行迁移操作,并且确定相应的数据对象需要在哪个时间段完成后进行迁移操作。具体示例如图5所示:
[0082] (5-2-1)图5中的实线是某个数据对象的访存随时间变化的示意图;平行于时间轴的黑色虚线则是DRAM/NVM访存分割线,若此数据对象的访存少于此黑色虚线所示值则会被分配在NVM中,反之则会被分配在DRAM中。其中图5中所示的DRAM/NVM访存分割线与图6中所示的函数F5曲线对应。
[0083] (5-2-2)图5中的T1-T4是将源程序按照示例1进行分片插桩后得到的时间戳。
[0084] (5-2-3)由图5可知,在T1-T2时间段,数据对象的访存值大于DRAM/NVM访存分割线所示值,建议被分配在DRAM中,而T2-T4乃至T4后的时间段,数据对象的访存值小于DRAM/NVM访存分割线所示值,建议被分配在NVM中,因此为了使内存介质的特性得到充分地利用,在T1前需要保证这个数据对象已经在DRAM中,而在T2后就可将这个数据对象迁移到NVM中。
[0085] (5-3)根据(5-2)得到的信息,对需要进行迁移操作的数据对象,在其需要进行迁移操作的时间段对其进行迁移函数的插桩操作。具体以下示例2所示,其中示例2中的T1-T4只是为了与示例1中进行对比,在进行实际操作时会删除T1-T4所示的指令:
[0086] (5-3-1)根据(5-2)可知,此数据对象需要在T1前保证在DRAM中,而在T2之后就可以被迁移到NVM中。
[0087] (5-3-2)在源程序中T1所示的位置前插入函数,将此数据对象迁移到DRAM中,而在源程序中T2所示的位置后插入函数,将此数据对象迁移到NVM中。
[0088]
[0089]
[0090] (6)在程序具体执行的过程中,内存分配器通过(3)、(4)中得到的关于数据对象的信息以及当前系统中的可用内存的容量来共同决定数据对象的具体分配操作。内存分配器中一共有3个接口DyMalloc,NVMalloc和DRAMalloc,其中NVMalloc是用来将数据分配到NVM中,DRAMalloc是用来将数据分配到DRAM中,而DyMalloc则是用来决定在进行具体的分配时需要调用NVMalloc和DRAMalloc哪一个接口。
[0091] (6-1)内存分配器主要是利用如下公式计算得到的值与常量X之间的大小关系来决定数据对象的具体分配。其中NVMAvailable指的是异构内存中NVM可用量对NVM总量的占比,DRAMAvailable指的是DRAM可用量对DRAM总量的占比;
[0092]
[0093] (6-2)当rank值为rank2时,此数据对象更倾向于被分配到DRAM中,因此常量X的值为2。当计算值大于X时,将此数据对象分配到NVM中,反之则分配到DRAM中。
[0094] (6-3)当rank值为rank3时,此数据既可被分配在DRAM中,又可被分配在NVM中,因此常量值为1。当计算值大于X时,将此数据对象分配到NVM中,反之则分配到DRAM中。
[0095] (6-4)当rank值为rank4时,此数据对象更倾向于被分配到NVM中,因此常量X的值为0.5。当计算值大于X时,将此数据对象分配到NVM中,反之则分配到DRAM中。
[0096] 步骤(6)在进行具体的分配操作时,不仅考虑到了数据对象本身的特征,还考虑到了当前系统中内存使用的状态信息,这样就使得内存的数据分配能够更加契合系统当前的状态。
[0097] 图6所示为本发明中确定rank值所使用的初始函数示意图,此图主要标识了数据对象的几种基本访存规律。如图6所示,可预设至少一种初始函数,包括:在每个周期内访存稳定的第三初始函数F3、第五初始函数F5和第二初始函数F2,在单个周期内访存不稳定,但在整个生命周期上呈稳定性变化的第四初始函数F4,在短时间内访存突变且在整个生命周期上并不呈稳定性变化的第一初始函数F1;F3对应的访存次数均值为f3,F5对应的访存次数均值为f5,F2对应的访存次数均值为f2,f3>f5>f2>0。其中,图中的F5是DRAM/NVM访存分割线,若此数据对象的平均访存频率大于f5所示值,则将其分配到DRAM中的可能性较大,反之则将其分配到NVM中的可能性较大(因为此时还要考虑到内存的使用状态信息)。而F2和F3则是用来确定这些数据是否一定会被分配到DRAM或NVM中,如果数据对象的平均访存频率大于f3所示值则一定会被分配到DRAM中,与此同时,如果数据对象的平均访存频率小于f2所示值则一定会被分配到NVM中。
[0098] 图7所示为本发明中数据对象rank分类的示意图,此图主要描述了如何根据图6确定每个数据对象的rank值。在确定每个数据对象的rank值之前,需要遍历经过cache过滤的数据对象的trace文件,数据对象访存次数随时间变化的函数fi(n),以及确定图5中F2、F3、F5所示的固定值。然后再将fi(n)与图6中的F1、F2、F3和F4进行比较,看其更加趋近于哪条函数:
[0099] 1)若fi(n)趋近于F1,则接下来将会比较此函数与F2、F3和F5的峰值的大小,然后根据峰值的大小进行rank值的确定。若峰值小于f2,则rank值为5;若峰值大于f2且小于f5,则rank值为4;若峰值大于f5且小于f3,则rank值为3,;若峰值大于f3且小于f3的10倍,则rank值为2;若峰值大于f3的10倍,则rank值为1。
[0100] 2)若fi(n)趋近于F2,则接下来将会比较此函数与F2和F5的峰值的大小,然后根据峰值的大小情况进行rank值的确定。若此函数的峰值小于f2,则rank值为5;若此函数的峰值大于f2且小于f5,则rank值为4。
[0101] 3)若fi(n)趋近于F3,则接下来将会比较此函数与F3和F5的峰值的大小,然后根据峰值的大小情况进行rank值的确定。若此函数的峰值大于f5且小于f3,则rank值为2;若此函数的峰值大于f3,则rank值为1。
[0102] 4)若fi(n)趋近于F4,则接下来将会比较此函数与F2、F3和F5的峰值的大小,然后根据峰值的大小情况进行rank值的确定。若此函数的峰值小于f2,则rank值为5;若此函数的峰值大于f2且小于f5,则rank值为4;若此函数的峰值大于f5且小于f5的两倍,则rank值为3;若此函数的峰值大于f5的两倍且小于f3,则rank值为2;若此函数的峰值大于f3,则rank值为1。
[0103] 需要说明的是,fi(n)与图6中的F1、F2、F3和F4进行比较,看其更加趋近于哪条函数,指的是对比fi(n)对应的访存热度随时间的变化规律与F1、F2、F3和F4中哪一函数对应的变化规律相似,例如,若fi(n)对应的访存热度随时间的变化规律与F3对应的变化规律相似,如fi(n)对应在每个周期内访存稳定,且访存热度均值较大,则fi(n)趋近于F3。
[0104] 相应地,图8为本发明实施例提供的基于数据对象热度的异构内存分配系统的结构示意图,异构内存包括动态随机存取存储器和非易失性存储器,如图8所述,本发明实施例提供的异构内存分配系统包括:插桩单元810、访存特征确定单元820、热度等级确定单元830以及分配单元840。
[0105] 插桩单元810,用于在源代码中进行插桩,统计所述源代码中包括的数据对象的读写操作信息;访存特征确定单元820,用于将所述数据对象的读写操作信息经过缓存过滤后得到数据对象的访存特征,所述数据对象的访存特征为所述数据对象对所述异构内存的读写操作访存次数随时间变化的特征;热度等级确定单元830,用于根据所述数据对象的访存特征确定所述数据对象的访存热度等级;分配单元840,用于根据所述数据对象的访存热度等级、所述动态随机存取存储器的时延能耗信息和可用容量信息以及所述非易失性存储器的时延能耗信息和可用容量信息中的至少一种信息将所述数据对象分配到所述动态随机存取存储器和非易失性存储器中的一个。
[0106] 需要说明的是,本发明实施例提供的异构内存分配系统还可以包括更多或更少的部件,其中各部件具体功能可参照前述图1-图7中的介绍,在此不做赘述。
[0107] 本发明实施例实现了一种基于数据对象访存频度(热度)的异构内存分配方法,属于操作系统内存管理领域。异构内存分配系统包含传统DRAM和NVM两类存储介质,它们在读写延迟及能耗方面具有不同的特性。本发明方法首先利用LLVM插桩的方式得到每一个数据对象在每个时间窗口上的访存次数,然后利用cache过滤模型得到数据对象的真实访存信息,随后根据这些数据得到数据对象的内存分配策略,之后根据这些数据生成目标程序的可执行文件。在程序执行的过程中,内存分配器会根据数据对象的内存分配策略、当前系统中内存的可用量和数据对象的能耗-时延比来共同决定将数据分配在异构内存中的哪一种内存介质中。与此同时,对于那些在某一段时间窗口内访存热度较高,而在其后的时间窗口内变冷的数据,本方法还提供了一种数据对象迁移的方法,通过对象迁移操作可以使数据在内存中的位置能够更好地符合数据的访存特征。本发明依据数据的访存特征和当前系统中内存的可用量合理分配数据,使得数据能够分配到符合其访存特征的内存介质上;通过提供迁移接口,使得数据的内存分配能够吻合其在所有时间窗口上的访存特征,可有效提高异构内存的利用率和性能。
[0108] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。