[发明专利]一基于大页的冷热页追踪及压缩回收方法有效
申请号: | 201710142306.4 | 申请日: | 2017-03-10 |
公开(公告)号: | CN106970881B | 公开(公告)日: | 2020-04-28 |
发明(设计)人: | 陈文智;王总辉;赵朋磊;徐浩;李国玺 | 申请(专利权)人: | 浙江大学 |
主分类号: | G06F12/02 | 分类号: | G06F12/02;G06F12/0882 |
代理公司: | 杭州天勤知识产权代理有限公司 33224 | 代理人: | 蒋琼 |
地址: | 310013 浙江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 冷热 追踪 压缩 回收 方法 | ||
1.一种基于大页的冷热页追踪及压缩回收方法,包括以下步骤:
(1)针对每个内存节点,系统调用函数hp_kswapd,该函数hp_kswapd启动内核守护线程,该守护线程周期性地检查大页内存的使用情况;
(2)每个周期内,函数hp_kswapd调用函数hp_balance_node对大页内存进行扫描,针对大页内存不足的节点执行步骤(3)~步骤(6)
(3)函数hp_balance_node调用函数hp_shrink_lruvec对大页内存不足的节点的LRU链表中的大页进行处理,得到处于热页链表上的大页数目m,处于冷页链表上的大页数目n,若m大于n,执行步骤(4),否则,执行步骤(5);
(4)函数hp_shrink_lruvec调用函数hp_shrink_active_list判断热页链表上的大页的活动程度,并将热页链表上的活动程度低的冷页大页移动到冷页链表上;
(5)函数hp_shrink_lruvec调用函数hp_shrink_inactive_list判断冷页链表上的大页的活动程度,得到没有被进程访问的冷页;
(6)函数hp_shrink_inactive_list调用函数hp_shrink_page_list对冷页链表上没有被进程访问的冷页进行压缩;
所述的函数hp_kswapd启动内核守护进程,该守护进程周期性地检查大页内存的使用情况,实现方式是在无限循环中周期性睡眠一定时间,该时间可根据业务进行调节,每个周期内函数hp_kswapd调用hp_balance_node函数;
所述的函数hp_balance_node首先初始化控制扫描参数,该控制扫描参数包括是否允许解除映射、是否允许会写,这些参数会直接影响到接下来是否能够回收大页,只有允许解除映射,系统才会压缩那些被进程映射的页,只有允许回写,系统才会压缩那些被修改过的脏页;参数初始化完毕,实现DEF_PRIORITY次循环,每次循环判断每个节点的空闲内存是否充足,如果充足,则直接返回到函数hp_kswapd,否则,函数hp_balance_node调用hp_shrink_lruvec回收内存大页;
所述的函数hp_shrink_lruvec首先计算扫描大页数量,然后,根据热页链表与冷页链表的数量关系来确定是否调用hp_shrink_active_list来回收活动页,最终都会调用hp_shrink_inactive_list来回收非活动页;
所述的函数hp_shrink_active_list回收活动链表上的页,依据大页的活动程度方法来判断是否要将该页从活动链表转移到非活动链表;
所述的函数hp_shrink_inactive_list回收非活动链表上的页,依据大页的活动程度判断是否要将该页压缩回收;
所述的大页中设有确定大页活动程度的标志位PG_active和标志位Ref,其中,标志位PG_active表示页当前的冷热状态,若标志位PG_active为1,表示页当前处于热状态,若标志位PG_active为0,表示页当前处于冷状态;标志位Ref表示页是否被进程访问,若标志位Ref为0,表示大页在过去一段时间内没有被进程访问;若标志位Ref为1,表示大页在过去一段时间内被进程访问;
标志位PG_active的置位与清零:如果当前大页处于热页链表Lru_active上,则表明该大页为热页,设置标志位PG_active为1,如果当前大页处于冷页链表Lru_inactive上,表明该大页为冷页,设置标志位PG_active为0,标志位PG_active的置位与否,直接对应于大页所在的LRU链表;
标志位Ref的置位与清零:每次扫描大页时,根据使用该页进程的页表项中访问位是否置位来确定是否要设置标志位Ref,若页表项中访问位置位,表明该页被进程访问,设置标志位Ref为1,若页表项中访问位清零,表明该页未被进程访问,设置标志位Ref为0;
从热页链表到冷页链表的移动:当线程hp_kswapd扫描到当前大页,发现从上次扫描到现在,该大页都没有被进程访问,且该大页的标志位Ref为0,则将该大页从热页链表转移到冷页链表上,且设置标志位PG_active为0;否则,将该大页返回到热页链表上;
从冷页链表到热页链表的移动:当线程hp_kswapd扫描到当前大页,发现从上次扫描到现在,该大页被进程访问,且该大页的标志位Ref为1,则将该大页从冷页链表转移到热页链表上,且设置该大页的标志位Ref为0;否则,将该大页返回到冷页链表上。
2.如权利要求1所述的基于大页的冷热页追踪及压缩回收方法,其特征在于,所述的大页于热页链表与冷页链表之间的移动方法,包括以下步骤:
(1)对于一个初始于热页链表Lru_active上的大页,系统判断该大页的页描述符中的_count标识位是否为零,若是,将该大页移回到热页链表上,若否,执行步骤(2);
(2)令该大页的页描述符中的_count标识位加1,并将该大页移动到局部链表L_hold上;
(3)调用page_referenced函数判断移动到局部链表L_hold上的大页是否被进程访问过,若是,执行步骤(4),若否,执行步骤(5);
(4)将该大页从局部链表L_hold上移到局部热页链表L_active上,并设置该大页的标志位PG_active为1;
(5)将该大页从局部链表L_hold上移动到局部冷页链表L_inactive上,并设置该大页的标志位PG_active为0;
(6)对于局部热页链表L_active上的大页,令大页的页描述符中的_count标识位减1,并判断_count标识位是否为0,若是,执行步骤(7),若否,执行步骤(8);
(6’)对于局部冷页链表L_inactive上的大页,令大页的页描述符中的_count标识位减1,并判断_count标识位是否为0,若是,执行步骤(7),若否,执行步骤(9);
(7)将该大页从局部热页链表L_active或局部冷页链表L_inactive移动到链表pageset中,进行回收;
(8)将该大页从局部热页链表L_active移动到热页链表Lru_active上,并设置标志位PG_active为1;
(9)将该大页从局部冷页链表L_inactive移动到冷页链表Lru_inactive上,并设置标志位PG_active为0。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江大学,未经浙江大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710142306.4/1.html,转载请声明来源钻瓜专利网。