write back中文翻譯,write back是什么意思,write back發(fā)音、用法及例句
- 內(nèi)容導(dǎo)航:
- 1、write back
- 2、Page Cache
1、write back
write back發(fā)音
英:[?ra?t b?k] 美:[?ra?t b?k]
英: 美:
write back中文意思翻譯
常用釋義:回信:回復(fù)他人的來(lái)信、電子郵件等。
回復(fù),回信
write back雙語(yǔ)使用場(chǎng)景
1、It always warms my heart to hear from you, sweetie. write back soon.───得到你的回信總是讓我心感到溫暖, 親愛(ài)的. 請(qǐng)快點(diǎn)回信.
2、I'll write back to him tomorrow.───我明天給他回信.
3、Please attach resume next page exploration discretion , ask to accept write back and let us!───下頁(yè)附個(gè)人簡(jiǎn)歷敬請(qǐng)勘酌, 懇請(qǐng)接納,回函是盼!
4、Mr Clinton did not write back.───克林頓沒(méi)有給他回信。
5、After days of reflection she decided to write back.───想了幾天之后她決定回信。
6、Please write back soon.───請(qǐng)寫(xiě)回來(lái).
7、When men write to me and try to help me, then yes, sometimes I write back!───人們給我寫(xiě)信試圖想幫助我, 的確是的, 有時(shí)我也回信!
8、Should I write back immediately?───我應(yīng)該立即回復(fù) 嗎 ?
9、First you read a letter from someone. After that you write back to them.───首先你讀一封來(lái)自某人的信, 然后你回信給他.
10、After a few days of reflection she decided to write back.───想了幾天后她決定回信.
11、What are you doing now? I am expecting your write back!───現(xiàn)在你在干什么? 我正盼望你的來(lái)信.
12、Please write back as soon as you can.───請(qǐng)盡快給我回信啊!
13、I love you. Write back please.───我愛(ài)你,快點(diǎn)回信吧。
14、After days of reflection she decided to write back.───經(jīng)過(guò)幾天的認(rèn)真思考,她決定回信。
15、Please write back as soon as possible.───請(qǐng)盡快回信.
16、Those that write back to the input sequence require forward iterators.───那些寫(xiě)回輸入序列的算法要求前向迭代器.
write back相似詞語(yǔ)短語(yǔ)
1、to write back───回信
2、wrote back───回復(fù),回信
3、bit back───咬回;急忙收回要說(shuō)的話;抑制
4、writes back───回復(fù),回信
5、written back───撥回
6、writing back───回復(fù),回信
7、strike back───回?fù)?,反?/p>
8、bite back───咬回;急忙收回要說(shuō)的話;抑制
9、white bacon───白臘肉
2、Page Cache
Page Cache是通過(guò)將磁盤(pán)中的數(shù)據(jù)緩存到內(nèi)存中,減少磁盤(pán)I/O操作,從而提高性能。此外,還要確保Page Cache中的數(shù)據(jù)更改能夠同步到磁盤(pán)上,這稱之為page回寫(xiě)(page writeback)。一個(gè)inode對(duì)應(yīng)一個(gè)page cache對(duì)象,一個(gè)page cache對(duì)象包含多個(gè)物理page。
對(duì)磁盤(pán)的數(shù)據(jù)進(jìn)行緩存,從而提高性能主要基于兩個(gè)因素:一:磁盤(pán)訪問(wèn)速度比內(nèi)存慢幾個(gè)數(shù)量級(jí)。第二是訪問(wèn)過(guò)的數(shù)據(jù),很大概率再次訪問(wèn)(局部性原理)。
Page Cache是內(nèi)核管理的內(nèi)存,也就是說(shuō),它屬于內(nèi)核,而不屬于用戶。
在Linux上,可以直接查看Page Cache的方式有很多, 包括/proc/meminfo、free 、/proc/vmstat 命令,它們的內(nèi)容實(shí)際上是一致的。
以/proc/meminfo命令來(lái)說(shuō):
其中: Buffers + Cached + SwapCached = Active(file) + Inactive(file) + Shmem + SwapCached
等式兩邊的內(nèi)容就是平時(shí)說(shuō)的Page Cache ,兩邊都有SwapCached,只是為了說(shuō)明它也是Page Cache的一部分。
在Page Cache中,Active(file) + Inactive(file) 是File-backed page(與文件對(duì)應(yīng)的內(nèi)存頁(yè)),是最需要關(guān)注的部分,因?yàn)槠綍r(shí)用的mmap()內(nèi)存映射方式和buffered I/O來(lái)消耗的內(nèi)存就是這部分。
SwapCached是打開(kāi)了Swap分區(qū)后,把Inactive(anno) + Active(anno)兩項(xiàng)匿名頁(yè)交換到磁盤(pán)(swap out)之后,然后在讀入到內(nèi)存(swap in)之后分配的內(nèi)存。 由于讀入到內(nèi)存后,原來(lái)的Swap File還存在,所以SwapCached也可以認(rèn)為是File-backed page,屬于Page Cache。 注意:SwapCached只有在Swap分區(qū)打開(kāi)的請(qǐng)求下才會(huì)有,但是Swap過(guò)程產(chǎn)生的I/O很容易引起性能抖動(dòng),因此,線上環(huán)境Swap分區(qū)一般是關(guān)閉的。
Shmen是指匿名共享映射這種方式分配的內(nèi)存(free 命令中的shared一項(xiàng))。
當(dāng)內(nèi)核發(fā)起一個(gè)讀請(qǐng)求時(shí),會(huì)先檢查請(qǐng)求的數(shù)據(jù)是否緩存到了page cache中,如果有則直接從內(nèi)存中讀取,不需要訪問(wèn)磁盤(pán)。如果cache沒(méi)有請(qǐng)求的數(shù)據(jù),就必須從磁盤(pán)中讀取數(shù)據(jù),然后內(nèi)核將數(shù)據(jù)緩存到cache中。這樣后續(xù)讀請(qǐng)求就可以命中cache了。page可以只緩存一個(gè)文件部分的內(nèi)容,不需要把整個(gè)文件都緩存進(jìn)來(lái)。
當(dāng)內(nèi)核發(fā)起一個(gè)寫(xiě)請(qǐng)求時(shí),同樣直接寫(xiě)入到cache中。內(nèi)核會(huì)將被寫(xiě)入的page標(biāo)記為dirty,并將其加入到dirty list中。內(nèi)核會(huì)周期性的將dirty list中的page回寫(xiě)到磁盤(pán)上。從而使磁盤(pán)上的數(shù)據(jù)和內(nèi)存中緩存的數(shù)據(jù)一致。
Page Cache的產(chǎn)生有兩種不同的方式:
兩種方式產(chǎn)生如下圖:
對(duì)于標(biāo)準(zhǔn)I/O的寫(xiě),是寫(xiě)用戶緩沖區(qū),然后再講用戶緩沖區(qū)的數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū)。如果是讀的話,則先從內(nèi)核緩沖區(qū)拷貝到用戶緩沖區(qū),再?gòu)挠脩艟彌_區(qū)中讀數(shù)據(jù)。
對(duì)于存儲(chǔ)映射I/O,是直接將Pagecache 的Page 給映射到用戶地址空間,用戶直接讀寫(xiě)Pagecache Page中的內(nèi)容。
以標(biāo)準(zhǔn)I/O為例,解釋一下,Page Cache如何產(chǎn)生。具體如下圖:
1)往用戶緩沖區(qū)buffer寫(xiě)入數(shù)據(jù)。然后buffer中的數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū)(Pagecache page)。
2)如果內(nèi)核緩沖區(qū)中沒(méi)有這個(gè)Page,就會(huì)發(fā)生Page Fault,會(huì)去分配一個(gè)Page。
3)拷貝數(shù)據(jù),該P(yáng)agecache Page就是一個(gè)Dirty Page(臟頁(yè))。
4)然后Dirty Page的內(nèi)容會(huì)同步到磁盤(pán),同步到磁盤(pán)后,該P(yáng)agecache Page就會(huì)變成Clean Page并且繼續(xù)存在系統(tǒng)中。
如果是讀文件產(chǎn)生的PageCache ,它的內(nèi)容和磁盤(pán)內(nèi)容一樣,所以它一開(kāi)始就是Clean Page,除非改寫(xiě)了里面的內(nèi)容才會(huì)變成Dirty Page。
cat /proc/vmstat | egrep "dirty|writeback“
nr_dirty 表示當(dāng)前系統(tǒng)中積壓了多少臟頁(yè),nr_writeback 則表示有多少臟頁(yè)正在回寫(xiě)到磁盤(pán)中,他們兩個(gè)的單位都是 Page(4KB)。
先看寫(xiě)內(nèi)存分配的圖:
可以得出,應(yīng)用在申請(qǐng)內(nèi)存的時(shí)候,即使沒(méi)有free內(nèi)存了,只要還有足夠的可回收逇Page Cache,也可以通過(guò)回收Page Cache的方式來(lái)申請(qǐng)到內(nèi)存,所以,回收的方式主要有兩種: 直接回收和后臺(tái)回收。
也就是對(duì)應(yīng)的兩種頁(yè)面回收機(jī)制:
1)周期性的檢查:后臺(tái)運(yùn)行的守護(hù)進(jìn)程kswapd完成。該進(jìn)程定期檢查當(dāng)前系統(tǒng)的內(nèi)存使用情況,發(fā)現(xiàn)系統(tǒng)內(nèi)空閑的物理內(nèi)存數(shù)目少于特定的閾值(參數(shù)是什么?),該進(jìn)程就會(huì)發(fā)起頁(yè)面回收的操作。
2)“內(nèi)存嚴(yán)重不足”事件觸發(fā):如果需要很大內(nèi)存,而當(dāng)時(shí)系統(tǒng)的內(nèi)存沒(méi)有辦法提供足夠多的物理內(nèi)存以滿足內(nèi)存請(qǐng)求。這時(shí),操作系統(tǒng)就必須盡快進(jìn)行頁(yè)面回收,以便釋放一些內(nèi)存空間從而滿足內(nèi)存請(qǐng)求。
可以通過(guò)命令sar來(lái)觀察內(nèi)存回收行為,也可以通過(guò)查看/proc/vmstat里面的指標(biāo)進(jìn)行查看。
Linux中的頁(yè)面回收是基于LRU(Lease recently used ,最近最少使用)算法。Linux操作系統(tǒng)對(duì)LRU的實(shí)現(xiàn)是基于一對(duì)雙向鏈表,active鏈表和inactive鏈表。經(jīng)常被訪問(wèn)的處于活躍狀態(tài)的頁(yè)面會(huì)被放到activre鏈表上,并不經(jīng)常使用的頁(yè)面則會(huì)放到inactive聊表上。頁(yè)面會(huì)在兩個(gè)雙向鏈表中移動(dòng)。頁(yè)面可能從active鏈表移動(dòng)到inactive鏈表,反之也有可能。但是移動(dòng)并不是每次頁(yè)面訪問(wèn)都會(huì)發(fā)生(要通過(guò)自旋鎖來(lái)保證對(duì)鏈表并發(fā)訪問(wèn)操作不會(huì)出錯(cuò),為了降低鎖競(jìng)爭(zhēng),LInux提供了一種特殊的緩存,LRU緩存,用于批量的向LRU鏈表中快速的添加頁(yè)面。有了 LRU 緩存之后,新頁(yè)不會(huì)被馬上添加到相應(yīng)的鏈表上去,而是先被放到一個(gè)緩沖區(qū)中去,當(dāng)該緩沖區(qū)緩存了足夠多的頁(yè)面之后,緩沖區(qū)中的頁(yè)面才會(huì)被一次性地全部添加到相應(yīng)的 LRU 鏈表中去),頁(yè)面的移動(dòng)發(fā)生的間隔有可能比較長(zhǎng)。對(duì)于最近最少使用的頁(yè)面會(huì)被逐個(gè)放到inactive鏈表的尾部。進(jìn)行頁(yè)面回收時(shí),Linux操作系統(tǒng)會(huì)從inactive鏈表的尾部開(kāi)始回收。
而第一次讀取文件后,文件內(nèi)容都是Inactive的,只有再次讀取這些內(nèi)容后,才會(huì)把它放到active鏈表上。處于Inactive鏈表上的pagecache在內(nèi)存緊張的時(shí)候,是會(huì)首先被回收掉。有很多情況下,文件內(nèi)容往往只被讀取一次,它們占用的pagecache需要首先被回收掉;對(duì)于業(yè)務(wù)數(shù)據(jù),往往都會(huì)讀取幾次,那么他們就會(huì)被放到active鏈表上,以此來(lái)達(dá)到保護(hù)的目的。
在內(nèi)存緊張的情況下,會(huì)進(jìn)行內(nèi)存回收,回收會(huì)把Inactive list的部分page給回收掉。為了維護(hù)inactive和active的平衡,就需要把a(bǔ)ctive list的部分page給demote到inactive list,demote的原則也是LRU。
疑問(wèn):active list和inactive list的比例是多少?,線上環(huán)境看,這里兩個(gè)的比例還是比較大,超過(guò)1:2
不是file-backed pages,即為匿名頁(yè)(anonymous page),如堆、棧和數(shù)據(jù)段等,不是以文件形式存在,因此無(wú)法和磁盤(pán)文件交換,但可以通過(guò)磁盤(pán)上劃分額外的swap分區(qū)或使用swap文件進(jìn)行交換。
1)水位(watermark)控制
min:如果剩余內(nèi)存減少到觸及這個(gè)水位,可認(rèn)為內(nèi)存嚴(yán)重不足,當(dāng)前進(jìn)程就會(huì)被阻塞,kernel會(huì)直接在這個(gè)進(jìn)程的進(jìn)程上下文做內(nèi)存回收(direct reclaim)。
low:當(dāng)剩余內(nèi)存慢慢減少,觸及到這個(gè)水位,就會(huì)觸發(fā)kswapd線程進(jìn)行內(nèi)存回收。(后臺(tái)回收)
high:進(jìn)行內(nèi)存回收時(shí),內(nèi)存慢慢增加,觸及到這個(gè)水位時(shí),就停止回收。
由于每個(gè)ZONE是分別管理各自的內(nèi)存的,因此每個(gè)ZONE都有這個(gè)三個(gè)水位。
水位計(jì)算:/proc/sys/vm/min_free_kbytes 是一個(gè)用戶可配置的值,默認(rèn)值是min_free_kbytes = 4 * sqrt(lowmem_kbytes)。然后根據(jù)min算出來(lái)low和high水位的值:low=5/4min,high=6/4min。(計(jì)算不是這里的重點(diǎn),如果有需要見(jiàn)參考資料7)
1)swapness
回收的時(shí)候,會(huì)回收f(shuō)ile-backed page和 anonymous page ,但是誰(shuí)回收的多一些,可以通過(guò)/proc/sys/vm/swapness來(lái)控制誰(shuí)回收多一些。swapness的值越大,越傾向于回收匿名頁(yè)。值越小,越傾向于稅后file-backed的頁(yè)面?;厥辗椒ǘ际荓RU算法。
Page cache畢竟是為了提高性能占用的物理內(nèi)存,隨著越來(lái)越多的磁盤(pán)數(shù)據(jù)被緩存到內(nèi)存中,Page Cache也變得越來(lái)越大,如果一些重要的任務(wù)需要被Page cache占用的內(nèi)存,內(nèi)核將回收page cache以此來(lái)支持。
1)空間層面
當(dāng)系統(tǒng)的“dirty”的內(nèi)存大于某個(gè)閾值,該閾值是在總共的“可用內(nèi)存”(包括free pages 和reclaimable pages)中的占比。
參數(shù)“dirty_background_ratio”(默認(rèn)值10%),或者是絕對(duì)字節(jié)數(shù)“dirty_background_bytes”(默認(rèn)值為0,表示生效)。兩個(gè)參數(shù)只要誰(shuí)先達(dá)到即可執(zhí)行,此時(shí)就會(huì)交給專門負(fù)責(zé)writeback的background線程去處理。
參數(shù)“dirty_ratio”(默認(rèn)值30%)和“dirty_bates”(默認(rèn)值為0,表示生效),當(dāng)“dirty”的內(nèi)存達(dá)到這個(gè)比例或數(shù)量,進(jìn)程則會(huì)停下write操作(被阻塞),先把“dirty”進(jìn)行writeback。
2)時(shí)間層面
周期性的掃描,掃描間隔用參數(shù):dirty_writeback_interval表示,以毫秒為單位。發(fā)現(xiàn)存在最近一次更新時(shí)間超過(guò)某個(gè)閾值(參數(shù):dirty_expire_interval,單位毫秒)的pages。如果每個(gè)page都維護(hù)最近更新時(shí)間,開(kāi)銷會(huì)很大且掃描會(huì)很耗時(shí),因此具體實(shí)現(xiàn)不會(huì)以page為粒度,而是按inode中記錄的dirtying-time來(lái)計(jì)算。
3)用戶主動(dòng)發(fā)起。
調(diào)用sync()/msync()/fsync()。
參數(shù)設(shè)置可以在:/proc/sys/vm下。
其中dirty_writeback_interval實(shí)際的參數(shù)為:dirty_writeback_centisecs(默認(rèn)值為500,單位為1/100秒,也就是5秒)
dirty_expire_interval實(shí)際的參數(shù)為:dirty_expire_centisecs(默認(rèn)值為3000,單位為1/100秒,也就是30秒)
2.4內(nèi)核,用一個(gè)叫bdflush的線程專門負(fù)責(zé)writeback操作。因?yàn)榇疟P(pán)I/O操作很慢,而線程操作系統(tǒng)有多個(gè)塊設(shè)備,如果bdflush在其中一個(gè)塊設(shè)備上等待I/O操作的完成,可能會(huì)需要很長(zhǎng)的時(shí)間,此時(shí)單線程模式的bdfoush就會(huì)成為影響性能的瓶頸。而且bdflush沒(méi)有周期掃描功能。
在2.6內(nèi)核中,bdflush和kupdated一起被pdflush(page dirty flush)取代了。pdflush是一組線程,根據(jù)塊設(shè)備的I/O負(fù)載情況,數(shù)量從最少2個(gè)到最多8個(gè)不等。如果1秒內(nèi)沒(méi)有空閑的pdflush線程,則會(huì)創(chuàng)建一個(gè);如果pdflush線程的空閑時(shí)間超過(guò)1秒,則會(huì)被銷毀。一個(gè)塊設(shè)備可能有多個(gè)可以傳輸數(shù)據(jù)的隊(duì)列,為了避免在隊(duì)列上的擁塞(congestion),pdflush線程會(huì)動(dòng)態(tài)的選擇系統(tǒng)中相對(duì)空閑的隊(duì)列。
在2.6.32版本上,直接一個(gè)塊設(shè)備對(duì)應(yīng)一個(gè)thread(算法效果不明顯),這種內(nèi)核線程被稱為flusher threads。
無(wú)論是內(nèi)核周期性的掃描,還是用戶手動(dòng)觸發(fā),flusher threads的write back都是間隔一段時(shí)間才進(jìn)行的。如果這段時(shí)間內(nèi)系統(tǒng)掉電了,那么還沒(méi)有來(lái)得及write back的數(shù)據(jù)修改就面臨丟失的風(fēng)險(xiǎn),算是page cache機(jī)制存在的一個(gè)缺點(diǎn)。
free命令中,存在buff/cache的內(nèi)容,如下。但是不太好區(qū)分。
通過(guò)man free查看指標(biāo)含義,可以看到buffer和cache的區(qū)別。
通過(guò)man proc,可以得到proc文件系統(tǒng)的詳細(xì)文檔,其中就包括了/proc/meminfo的信息
通過(guò)這個(gè)文檔,可以得到:
實(shí)際上,寫(xiě)文件時(shí)會(huì)用到Cache緩存數(shù)據(jù)(雖然文檔上,Cache值提到是文件的讀緩存),寫(xiě)磁盤(pán)則會(huì)用到Bufffer來(lái)緩存數(shù)據(jù)。
讀文件時(shí),數(shù)據(jù)會(huì)緩存到Cache中。而讀磁盤(pán)時(shí)數(shù)據(jù)會(huì)緩存到Buffer中。
綜上:
0)Linux中的內(nèi)存回收[一] https://zhuanlan.zhihu.com/p/70964195
1) Linux中的Page Cache [二] https://zhuanlan.zhihu.com/p/71217136
2)Linux內(nèi)核中的頁(yè)面回收算法 http://liujunming.top/2017/09/28/Linux%E5%86%85%E6%A0%B8%E4%B8%AD%E7%9A%84%E9%A1%B5%E9%9D%A2%E5%9B%9E%E6%94%B6%E7%AE%97%E6%B3%95/
3)Linux內(nèi)存回收機(jī)制 http://baijiahao.baidu.com/s?id=1632115061958384848
4)Linux 內(nèi)核源碼分析-Page Cache 刷臟源碼分析 https://leviathan.vip/2019/06/01/Linux%E5%86%85%E6%A0%B8%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90-Page-Cache%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90/
5)Page Cache與Page回寫(xiě) https://www.cnblogs.com/linhaostudy/p/10196915.html#_label2
6)極客時(shí)間 《LInux內(nèi)核技術(shù)實(shí)戰(zhàn)課》
7)內(nèi)存管理參數(shù)min_free_kbytes 分析 http://linux.laoqinren.net/kernel/vm-sysctl-min_free_kbytes/
本站其他內(nèi)容推薦
1、hell languish dispense wroth billiard meritocracy respite Brit politicization multiplicable
2、ray ban是什么意思中文翻譯、發(fā)音、用法及例句
3、toujours中文翻譯,toujours是什么意思,toujours發(fā)音、用法及例句
4、frtb縮寫(xiě)是什么意思,frtb的全稱及含義,frtb全稱意思大全
5、moot是什么意思,moot中文翻譯,moot發(fā)音、用法及例句
6、鑰[ yuè yào ],鑰字的拼音,部首,意思,組詞,成語(yǔ),鑰字的筆順,筆畫(huà)順序怎么寫(xiě)
8、covenantor是什么意思,covenantor中文翻譯,covenantor怎么讀、發(fā)音、用法及例句
9、orthotomy是什么意思,orthotomy中文翻譯,orthotomy怎么讀、發(fā)音、用法及例句
10、harmonia
版權(quán)聲明: 本站僅提供信息存儲(chǔ)空間服務(wù),旨在傳遞更多信息,不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任,不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。如因作品內(nèi)容、版權(quán)和其它問(wèn)題需要同本網(wǎng)聯(lián)系的,請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。