日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux kernel内存回收机制

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux kernel内存回收机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.wowotech.net/linux_kenrel/233.html

無論計算機上有多少內存都是不夠的,因而linux kernel需要回收一些很少使用的內存頁面來保證系統持續有內存使用。頁面回收的方式有頁回寫、頁交換和頁丟棄三種方式:如果一個很少使用的頁的后備存儲器是一個塊設備(例如文件映射),則可以將內存直接同步到塊設備,騰出的頁面可以被重用;如果頁面沒有后備存儲器,則可以交換到特定swap分區,再次被訪問時再交換回內存;如果頁面的后備存儲器是一個文件,但文件內容在內存不能被修改(例如可執行文件),那么在當前不需要的情況下可直接丟棄。

1?回收的時機

2?哪些內存可以回收

2.1?頁框的回收

LRU(Least Recently Used),近期最少使用鏈表,是按照近期的使用情況排列的,最少使用的存在鏈表末尾,通過以下宏定義即可看出:

#define lru_to_page(_head) (list_entry((_head)->prev, struct page, lru))

每個zone有5個LRU鏈表用以存放各種最近使用狀態的頁面。

enum lru_list {

???????? LRU_INACTIVE_ANON = LRU_BASE,

???????? LRU_ACTIVE_ANON = LRU_BASE + LRU_ACTIVE,

???????? LRU_INACTIVE_FILE = LRU_BASE + LRU_FILE,

???????? LRU_ACTIVE_FILE = LRU_BASE + LRU_FILE + LRU_ACTIVE,

???????? LRU_UNEVICTABLE,

???????? NR_LRU_LISTS

};

其中INACTIVE_ANON、ACTIVE_ANON、INACTIVE_FILE、ACTIVE_FILE 4個鏈表中的頁面是可以回收的。ANON代表匿名映射,沒有后備存儲器;FILE代表文件映射。

頁面回收時,會優先回收INACTIVE的頁面,只有當INACTIVE頁面很少時,才會考慮回收ACTIVE頁面。

為了評估頁的活動程度,kernel引入了PG_referend和PG_active兩個標志位。為什么需要兩個位呢?假定只使用一個PG_active來標識頁是否活動,在頁被訪問時,設置該位,但是何時清除呢?為此需要維護大量的內核定時器,這種方法注定是要失敗的。

使用兩個標志,可以實現一種更精巧的方法,其核心思想是:一個表示當前活動程度,一個表示最近是否被引用過,下圖說明了基本算法。

基本上有以下步驟:

(1)如果頁是活動的,設置PG_active位,并保存在ACTIVE LRU鏈表;反之在INACTIVE;

(2)每次訪問頁時,設置PG_referenced位,負責該工作的是mark_page_accessed函數;

(3)PG_referenced以及由逆向映射提供的信息用來確定頁面活動程度,每次清除該位時,都會檢測頁面活動程度,page_referenced函數實現了該行為;

(4)再次進入mark_page_accessed。如果發現PG_referenced已被置位,意味著page_referenced沒有執行檢查,因而對于mark_page_accessed的調用比page_referenced更頻繁,這意味著頁面經常被訪問。如果該頁位于INACTIVE鏈表,將其移動到ACTIVE,此外還會設置PG_active標志位,清除PG_referenced;

(5)反向的轉移也是有可能的,在頁面活動程度減少時,可能連續調用兩次page_referenced而中間沒有mark_page_accessed。

如果對內存頁的訪問是穩定的,那么對page_referenced和mark_page_accessed的調用在本質上是均衡的,因而頁面保持在當前LRU鏈表。這種方案同時確保了內存頁不會再ACTIVE與INACTIVE鏈表間快速跳躍。

2.2 slab緩存回收

slab緩存回收相對比較靈活,所有注冊到shrinker_list中的方法都會被執行。

內核默認針對每個文件系統都注冊了prune_super方法,這個函數用來回收文件系統中不再使用的dentry和inode緩存;

android的lowmemorykiller機制注冊了選擇性殺死進程的方法,回收進程使用的內存。

3怎樣回收頁框

其中shrink_page_list是真正回收頁面的過程



4周期性回收的頻率

4.1 kswapd

kswapd是內核為每個內存node創建的內存回收線程,為什么有了緊缺回收機制還需要周期性回收呢?因為有些內存分配是不允許阻塞等待回收的,比如中斷和異常處理程序中的內存分配;還有些內存分配不允許激活I/O訪問的。只有少數情況的內存緊缺可以完整執行回收過程,所以利用系統空閑時間回收內存非常必要。

該函數記錄了上一次均衡操作時所用的分配order,如果kswapd_max_order大于上一次的值,或者classzone_idx小于上一次的值,則調用balanc

無論計算機上有多少內存都是不夠的,因而linux kernel需要回收一些很少使用的內存頁面來保證系統持續有內存使用。頁面回收的方式有頁回寫、頁交換和頁丟棄三種方式:如果一個很少使用的頁的后備存儲器是一個塊設備(例如文件映射),則可以將內存直接同步到塊設備,騰出的頁面可以被重用;如果頁面沒有后備存儲器,則可以交換到特定swap分區,再次被訪問時再交換回內存;如果頁面的后備存儲器是一個文件,但文件內容在內存不能被修改(例如可執行文件),那么在當前不需要的情況下可直接丟棄。

4.2 cache_reap

cache_reap用來回收slab中的空閑對象,如果空閑對象可以還原成一個頁面,則釋放回buddy system。每次調用cache_reap會把所有的slab_caches遍歷一遍,之后休眠2*HZ,對于arm(HZ=100)來說,周期就是20ms。

5?參考文獻

(1)《understanding the linux kernel》

(2)《professional linux kernel architecture》

總結

以上是生活随笔為你收集整理的linux kernel内存回收机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲一线二线在线观看 | 国产伦精品一区二区 | 青青国产在线视频 | 偷拍综合网 | av在线播放不卡 | 91久| 制服丝袜天堂网 | 91精品视频网 | 伊人久久免费视频 | 黄色网址大全免费 | 福利在线免费视频 | 欧美日韩综合网 | 女同一区 | 女同av在线播放 | 国产伦理片在线观看 | 欧美视频一区二区 | 色综合狠狠 | 欧美人日b | 无码人妻久久一区二区三区不卡 | 欧亚av| 亚洲图片在线播放 | 少妇把腿扒开让我舔18 | 一本大道久久 | 高清三区| www.国产在线视频 | 天堂成人国产精品一区 | 国产精品久久久久久久久免费桃花 | 久久久久久久偷拍 | 一区二区三区四区精品 | 色热热 | 国产成人无码一区二区在线播放 | 久久精品www人人爽人人 | 97夜夜 | 亚洲yy | 国产中文一区二区 | 青青青国产视频 | 91色影院| 一区在线看| 免费看成人片 | 久久精品视频免费 | 久久亚洲国产 | www夜插内射视频网站 | 大度亲吻原声视频在线观看 | 欧美色图亚洲色 | 亚洲男女激情 | 日本性xxxxx| 欧美日韩一区电影 | 99热免费在线 | 午夜大片在线观看 | 精品久久久无码中文字幕 | 综合爱爱网 | 99精品热视频 | 国产3p精品一区 | 五月天六月婷 | 2021天天干 | 蜜臀va | 奇米影视一区二区三区 | 亚洲国产欧美在线观看 | 97av在线播放 | 亚洲中文字幕一区在线 | h视频免费在线观看 | 国产高清无遮挡 | 一区二区中文字幕在线观看 | 美国美女黄色片 | 亚洲区中文字幕 | 亚洲网站免费观看 | 亚洲午夜精品福利 | 欧美日韩精品中文字幕 | 九色精品| 国产深夜福利在线 | 欧美jjzz| 免费视频成人 | 国产精品99久久久久久一二区 | 奇米色婷婷| 精品久久久999 | 欧美精品亚洲精品 | 国产精品久久久av | 911毛片| 国产精品伦一区二区三级视频 | av中文字幕免费 | 天天操天天射天天舔 | 久久国产精品影视 | 97精品人妻麻豆一区二区 | 瑟瑟视频在线免费观看 | 天天躁狠狠躁狠狠躁夜夜躁68 | jzjzz成人免费视频 | 久久久久久国 | 欧美日韩国产一区 | 国产一卡二卡在线播放 | 亚洲欧美日本国产 | 欧美交换国产一区内射 | 日本xxxxxxxxx| 欧美福利在线观看 | 欧美又黑又粗 | 国内露脸中年夫妇交换 | 26uuu国产| 亚洲成人激情小说 | 欧洲女性下面有没有毛发 | 国产成人区 |