[發明專利]一基于大頁的冷熱頁追蹤及壓縮回收方法有效
| 申請號: | 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.szxzyx.cn/pat/books/201710142306.4/1.html,轉載請聲明來源鉆瓜專利網。





