一种基于内存访问热度的大内存页整合方法

文档序号:9304502阅读:297来源:国知局
一种基于内存访问热度的大内存页整合方法
【技术领域】
[0001]本发明涉及操作系统内存管理技术领域,具体涉及一种基于内存访问热度的大内存页整合方法。
【背景技术】
[0002]随着计算机硬件技术的不断发展,当前个人计算机以及服务器上所配置的内存越来越大,目前普遍配置的内存可以达到数GB,有些服务上可以达到几百GB甚至上TB的内存。
[0003]为了提高对内存使用的灵活性以及使用效率,现代操作系统多使用内存分页机制,即将系统的所有的物理内存划分为若干固定大小的内存页。应用程序需要使用内存时,向操作系统提出申请,操作系统根据请求来分配若干物理内存页,并将这些物理页面映射到应用程序的虚拟地址空间中,物理内存到虚拟地址空间的映射对于应用程序来说是透明的。
[0004]应用程序读写某个虚拟内存地址时,操作系统会通过查找页表的方式,找到该虚拟内存地址所对应的物理内存地址,然后再转化成为对该物理内存地址的读写。由于应用程序的虚拟地址空间可能很大,所以现代操作系统一般会将地址转换过程分级,先查找页目录表,再查找页表,再查找具体的页表项。
[0005]虽然分级方式方便了地址的转换,但是同时也降低了查找的速度:每一次查找都要经过三级甚至更多次的转换。为了加速这个过程,CPU中引入了 TLB(translat1nlookside buffer)的概念。即将最近地址转换过程中的源地址和目的地址缓存到TLB中,下次再做转换时,便可以直接使用这个缓存,从而避免复杂的查找页表操作。
[0006]随着计算机内存容量的不断增大,应用程序所使用的内存也逐渐变大,这意味着更多次数的地址转换。这也就加大了 TLB的压力。然后,CPU内部空间有限,并且TLB造价比较昂贵,所以TLB大小的增长速度远远小于内存容量的增长速度。
[0007]为了能充分的利用TLB加速地址的转换,可以使操作系统扩大每一个内存页的大小。如将原来的每个物理页面大小为4KB增加为2MB。这样,每一个TLB条目能映射相当于原来512倍大小的内存。
[0008]但是,如果将所有内存页大小都设置成为2MB,将大大增加内存页面的内部碎片,虽然可以较高效率的使用内存,但同时也造成了内存资源的极大浪费。

【发明内容】

[0009]针对现有技术的不足,本发明提出一种基于内存访问热度的大页内存整合方法,能够有效提高系统的内存访问效率,同时还能够保证内存的使用率,避免浪费内存。
[0010]本发明的基于内存访问热度的大页内存整合方法,按照预设周期获取系统内存(即系统的物理内存)的缺页频率,当缺页频率大于第一阈值时通过如下步骤进行大页内存整合:[0011 ] SI:获取该周期内各个内存页的访问信息,并根据各个内存页的访问信息计算各个内存页的访问热度;
[0012]S2:根据各个内存页的访问热度更新系统的位图,并计算更新前后的位图之间的编辑距离,当编辑距离大于第二阈值时根据更新后的位图对系统内存进行大页拆分或小页合并。
[0013]本发明的大页内存整合方法通过对大页内存进行整合使系统内存中采取大页面内存(大页内存)与小页面内存(小页内存)共存的形式,对于经常使用的热页内存采用大页存储,对于不经常使用的内存使用普通小页面存储,并且在发现某些普通小页面内存频繁受到访问时,通过一定的机制将这些小页面提升为大页面,以加速后续的访问。对于已经被提升为大页面的内存,经过一段时间后,如果发现其不再频繁被访问,则将其拆分为若干小页面,以便释放更多的资源。
[0014]本发明的大内存页整合方法一次可以整合分配若干个大内存页面。一次整合分配结束后,可能仍有部分访问热度高,但是没有被整合的小页面存在。此时可能需要经过多次整合分配才能达到比较完善的效果,且由于整个过程中,各内存页面的使用情况(即访问情况)也会改变,因此按照预定周期进行整合,能够根据系统中各内存页面的使用情况动态调整,使系统内存分配情况与内存页面的实际使用情况相匹配,大大提供了系统的内存访问效率,同时还能够保证内存的使用率,避免浪费内存。
[0015]缺页频率通过如下方法计算:
[0016]按照预设周期定时获取操作系统(即系统)的缺页次数(在运行的时候系统会直接给出),与上一周期获取的缺页次数相减,即得到当前周期内系统内存的缺页频率。
[0017]预设周期根据实际应用情况调整,作为优选,本发明中所述预设周期为3?5秒。
[0018]作为优选,各个内存页的访问信息包括该内存页在当前周期内被访问的频率、最近一次被访问的时间和被共享的次数。
[0019]相应的,所述步骤SI中根据如下公式计算当前内存页的访问热度:
[0020]Hot_degreepage= w frequence*page_usage_frequence+wlast—Usage*last_usage_timepage+wshared—tines*shared_timespage,其中,Hot_degreepage为当前内存页的访问热度,Wfrequence、Wlast—usage萍口 W shared _ti_分别为当前内存页的访问频率权重系数、最后一次访问时间的权重系数和共享次数的权重系数,且Wfraqurarcf3 +WI as t_usage+Wshared_t imes — I ;
[0021]page—usage—frequencepage为当前内存页的使用频率,last—usage—time page为该内存页的最近一次访问时间,shared—times_为当前内存页面被共享的次数。作为优选,所述Wfi'equence的取值为0.4?0.5,所述W Iast usage的取值为0.3?0.4,所述W
shared—times 的取值为 0.1 ?0.3。进一步优选,Wfrequence= 0.4,w last—usage= 0.4,w shared—times = 0.2。
[0022]通过提高访问频率的权重(即,可以更好的发现使用频繁的页面。通过提高最后一次访问时间的权重(即wlast—usagJ,可以更好的发现最近使用比较频繁的页面。通过设置页面共享次数的权重(即wsh_d—tl_),可以考虑到多个进程都使用的页面,从而提高整体的运行性能。
[0023]本发明中大页内存整合方法实际上为系统内存的整合分配方法,通过对系统内存进行大页拆分和小页合并完成内存整合。首先通过缺页频率的阈值判断是否触发整合,在触发后进一步通过位图的编辑距离阈值判断是否进行最终整合操作(包括大页拆分和小页合并)。
[0024]两次阈值判断确定是否进行大页拆分或小页合并,能够减小由于负载波动可能引起的颠簸效应。其中,第一阈值和第二阈值设定直接关系到颠簸效应的消除效果。
[0025]作为优选,所述第一阈值为5000?8000次/秒;所述第二阈值为10000?20000。
[0026]所述步骤S2中根据如下方法更新系统的位图:
[0027]针对每个内存页,若该内存页的访问热度大于第三阈值,则将位图中该内存页对应的比特位置为1,
[0028]否则,将位图中该内存页对应的比特位置为O。
[0029]位图中的每一位(比特位,即bit)的取值用于表示对应的内存页的访问状态,本发明中,若取值为1,则认为对应的内存页为热页(其对应的内存为热页内存);若取值为0,则认为对应的内存页为冷页。
[0030]本发明初始情况下,认为位图中各个位的取值为零(即初始位图中各个位的取值为零),在系统运行过程中,通过内存页的访问热度对位图按位进行更新。
[0031]本发明中大页整合仅在缺页频率大于第一阈值时触发,而仅在进行大页整合的周期内才进行位图更新,因此,对于整个运行过程中,并不是每个预设周期都进行位图更新,对于当前周期,更新位图时是在当前周期之前最后一次更新的位图上进行的。若当前周期为第一个周期,则直接在初始位图上进行。
[0032]作为优选,所述第三阈值为0.4?0.6。进一步优选,所述第三阈值为0.5。
[0033]根据更新后的位图按照如下步骤对所有内存页进行大页拆分或小页合并:
[0034]按照大页、小页之间的容量大小关系将位图划分为若干个b i t段,并判断各个b i t段中是否存在连续m个O:
[0035](a)若存在连续m个0,则判断该bit段对应的内存页是否为大页:
[0036](al)若为大页,则对该bit段对应的内存页进行大页拆分,然后等待进入下一周期;
[0037](a2)否则,继续判断是否存在连续η个1:
[0038](a21)若存在,则判断该bit段对应的内存页是否为小页:
[0039]若是小页,则对该bit段对应的内存页进行小页合并然后等待进入下一周期;
[0040]否则,等待进入下一周期;
[0041](a22)否则,等待进入下一周期;
[0042](b)若不存在,则执行步骤(a2),
[0043]其中,m为大页容量的1/4?1/3,η为大页容量的1/3?1/2。
[0044]作为优选,m为大页容量的1/4,η为大页容量的1/2。
[0045]对所有内存页进行拆分或合并实际上通过对更新后的bitmap (即位图)进行两轮遍历完成。第一轮遍历过程中,将该bitmap中O出现的连续长度大于等于m,并且所对应内存为大页面的内存拆分成小内存页面。第二轮遍历过程中,将该bitmap中I出现的连续长度大于或等于η并且对应内存没有分配成大页面(即为小页)的内存合并成一个大页面。
[0046]此外,优先进行大页拆分操作,可以使操作系统释放出更多的内存与TLB表项,从而提供给后续可能存在的小页面合并操作提供条件。
[0047]本发明中采用现有技术对内存页进行拆分与合并,且每次拆分或合并后均为拆分或合并后的部分重新分配的页表项
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1