www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]本文主要嘗試解釋兩個問題:1. swappiness的確切含義是什么,它對內(nèi)核進行頁回收機制的影響。2. swappiness設(shè)置成0,為什么系統(tǒng)仍然可能會有swap發(fā)生。

本文主要嘗試解釋兩個問題:

1. swappiness的確切含義是什么,它對內(nèi)核進行頁回收機制的影響。

2. swappiness設(shè)置成0,為什么系統(tǒng)仍然可能會有swap發(fā)生。

一. 關(guān)于內(nèi)存分配與頁回收(page reclaim)

page reclaim發(fā)生的場景主要有兩類,一個是kswapd后臺線程進行的活動,另一個是direct reclaim,即分配頁時沒有空閑內(nèi)存滿足,需要立即直接進行的頁回收。大體上內(nèi)存分配的流程會分為兩部分,一部分是fast path,另一部分是slow path,通常內(nèi)存使用非緊張情況下,都會在fast path就可以滿足要求。并且fast path下的內(nèi)存分配不會出現(xiàn)dirty writeback及swap等頁回收引起的IO阻塞情況。

fast path大體流程如下:

1.如果系統(tǒng)掛載使用了memory cgroup,則首先檢查是否超過cgroup限額,如果超過則進行direct reclaim,通過do_try_to_free_pages完成。如果沒超過則進行cgroup的charge工作(charge是通過兩階段提交完成的,這里不展開了)。

2.從本地prefered zone內(nèi)存節(jié)點查找空閑頁,需要判斷是否滿足系統(tǒng)watermark及dirty ratio的要求,如果滿足則從buddy system上摘取相應(yīng)page,否則嘗試對本地prefered zone進行頁回收,本次fast path下頁回收只會回收clean page,即不會考慮dirty page以及mapped page,這樣就不會產(chǎn)生任何swap及writeback,即不會引起任何blocking的IO操作,如果這次回收仍然無法滿足請求的內(nèi)存頁數(shù)目則進入slow path

slow path大體流程如下:

1. 首先喚醒kswapd進行page reclaim后臺操作。

2. 重新嘗試本地prefered zone進行分配內(nèi)存,如果失敗會根據(jù)請求的GFP相關(guān)參數(shù)決定是否嘗試忽略watermark, dirty ratio以及本地節(jié)點分配等要求進行再次重試,這一步中如果分配頁時有指定__GFP_NOFAIL標(biāo)記,則分配失敗會一直等待重試。

3. 如果沒有__GFP_NOFAIL標(biāo)記,則會需開始進行page compact及page direct reclaim操作,之后如果仍然沒有可用內(nèi)存,則進入OOM流程。

相關(guān)內(nèi)容可以參閱內(nèi)核代碼__alloc_pages函數(shù)的邏輯,另外無論page reclaim是由誰發(fā)起的,最終都會統(tǒng)一入口到shrink_zone,即針對每個zone獨立進行reclaim操作,最終會進入shrink_lruvec函數(shù),進行每個zone相應(yīng)page lru鏈表的掃描與回收操作。

二. 關(guān)于頁回收的一些背景知識

頁回收大體流程會先在每個zone上掃描相應(yīng)的page鏈表,主要包括inactive anon/active anon(匿名頁鏈表)以及inactive file/active file鏈表(file cache/映射頁鏈表),一共四條鏈表,我們所有使用過的page在被回收前基本是保存在這四條鏈表中的某一條中的(還有一部分在unevictable鏈表中,忽略),根據(jù)其被引用的次數(shù)會決定其處于active還是inactive鏈表中,根據(jù)其類型決定處于anon還是file鏈表中。

頁回收總體會掃描逐個內(nèi)存節(jié)點的所有zone,然后先掃描active,將不頻繁訪問的頁挪到inactive鏈表中,隨后掃描inactive鏈表,會將其中被頻繁引用的頁重新挪回到active中,確認(rèn)不頻繁的頁則最終被回收,如果是file based的頁則根據(jù)是否clean進行釋放或回寫(writeback,filecache則直接釋放),如果是anon則進行swap,所以本文實際關(guān)心的是swappiness參數(shù)對anon鏈表掃描的影響。

另外還需要了解前面描述的四個鏈表原來是放在zone數(shù)據(jù)結(jié)構(gòu)上的,后來引入了mem_cgroup則,重新定義了一組mem_cgroup_per_zone/mem_cgroup_per_node的數(shù)據(jù)結(jié)構(gòu),這四個鏈表同時定義在這組數(shù)據(jù)結(jié)構(gòu)上,如果系統(tǒng)開啟了mem cgroup則使用后者,否則用前者。

另外再重點說下swap只是page reclaim的一種處理措施,主要針對anon page,我們最終來看下swappiness的確切含義

三. swappiness對page reclaim的確切影響

page reclaim邏輯中對前面所述四個鏈表進行掃描的邏輯在vmscan.c中的get_scan_count函數(shù)內(nèi),該函數(shù)大部分邏輯注釋寫得非常清楚,我們簡單梳理下,主要關(guān)注scan_balance變量的取值:

1. 首先如果系統(tǒng)禁用了swap或者沒有swap空間,則只掃描file based的鏈表,即不進行匿名頁鏈表掃描

代碼如下:

if (!sc->may_swap || (get_nr_swap_pages() <= 0)) {

scan_balance = SCAN_FILE;

goto out;

}

2. 如果當(dāng)前進行的不是全局頁回收(cgroup資源限額引起的頁回收),并且swappiness設(shè)為0,則不進行匿名頁鏈表掃描,這個是沒得商量,這里swappiness值直接決定了是否有swap發(fā)生,設(shè)成0則肯定不會發(fā)生,另外需要注意,這種情況下需要設(shè)置的是cgroup配置文件memory.swappiness,而不是全局的sysctl vm.swappiness

代碼如下:

if (!global_reclaim(sc) && !vmscan_swappiness(sc)) {

scan_balance = SCAN_FILE;

goto out;

}

3. 如果進行鏈表掃描前設(shè)置的priority(這個值決定掃描多少分之一的鏈表元素)為0,且swappiness非0,則可能會進行swap

代碼如下:

if (!sc->priority && vmscan_swappiness(sc)) {

scan_balance = SCAN_EQUAL;

goto out;

}

4. 如果是全局頁回收,并且當(dāng)前空閑內(nèi)存和所有file based鏈表page數(shù)目的加和都小于系統(tǒng)的high watermark,則必須進行匿名頁回收,則必然會發(fā)生swap,可以看到這里swappiness的值如何設(shè)置是完全無關(guān)的,這也解釋了為什么其為0,系統(tǒng)也會進行swap的原因,另外最后我們會詳細(xì)解釋系統(tǒng)page watermark是如何計算的。

代碼如下:

anon = get_lru_size(lruvec, LRU_ACTIVE_ANON) +

get_lru_size(lruvec, LRU_INACTIVE_ANON);

file = get_lru_size(lruvec, LRU_ACTIVE_FILE) +

get_lru_size(lruvec, LRU_INACTIVE_FILE);

if (global_reclaim(sc)) {

free = zone_page_state(zone, NR_FREE_PAGES);

if (unlikely(file + free <= high_wmark_pages(zone))) {

scan_balance = SCAN_ANON;

goto out;

}

}

5. 如果系統(tǒng)inactive file鏈表比較充足,則不考慮進行匿名頁的回收,即不進行swap

代碼如下:

if (!inactive_file_is_low(lruvec)) {

scan_balance = SCAN_FILE;

goto out;

}

6. 最后一種情況則要根據(jù)swappiness值與之前統(tǒng)計的file與anon哪個更有價值來綜合決定file和anon鏈表掃描的比例,這時如果swappiness設(shè)置成0,則也不會掃描anon鏈表,即不進行swap,代碼比較多,不再貼出。

四. 系統(tǒng)內(nèi)存watermark的計算

前面看到系統(tǒng)內(nèi)存watermark對頁回收機制是有決定影響的,其實在內(nèi)存分配中也會頻繁用到這個值,確切的說它有三個值,分別是low,min和high,根據(jù)分配頁時來指定用哪個,如果系統(tǒng)空閑內(nèi)存低于相應(yīng)watermark則分配會失敗,這也是進入slow path或者wakeup kswapd的依據(jù)。

實際這個值的計算是通過sysctl里的vm.min_free_kbytes來決定的,大體的計算公式如下:

pages_min = min_free_kbytes >> (PAGE_SHIFT – 10);

tmp = (u64)pages_min * zone->managed_pages;

do_div(tmp, lowmem_pages);

zone->watermark[WMARK_MIN] = tmp;

zone->watermark[WMARK_LOW] = min_wmark_pages(zone) + (tmp >> 2);

zone->watermark[WMARK_HIGH] = min_wmark_pages(zone) + (tmp >> 1);

即根據(jù)min_free_kbytes的值按照每個zone管理頁面的比例算出zone的min_watermark,然后再加min的1/4就是low,加1/2就是high了

總結(jié):

swappiness的值是個參考值,是否會發(fā)生swap跟當(dāng)前是哪種page reclaim及系統(tǒng)當(dāng)前狀態(tài)都有關(guān)系,所以設(shè)置了swappiness=0并不代表一定沒有swap發(fā)生,同時設(shè)為0也確實會可能發(fā)生OOM。

個人仍然認(rèn)為線上環(huán)境設(shè)置swappiness=0是沒有任何問題的。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉