linux flush 保证 磁盘,linux cache介绍及控制
參考文檔
有關(guān)Cache
文件緩存是提升性能的重要手段。毋庸置疑,讀緩存(Read caching)在絕大多數(shù)情況下是有益無害的(程序可以直接從RAM中讀取數(shù)據(jù)),而寫緩存(Write caching)則相對復(fù)雜。Linux內(nèi)核將寫磁盤的操作分解成了,先寫緩存,每隔一段時間再異步地將緩存寫入磁盤。這提升了IO讀寫的速度,但存在一定風(fēng)險。數(shù)據(jù)沒有及時寫入磁盤,所以存在數(shù)據(jù)丟失的風(fēng)險。
同樣,也存在cache被寫爆的情況。還可能出現(xiàn)一次性往磁盤寫入過多數(shù)據(jù),以致使系統(tǒng)卡頓。之所以卡頓,是因為系統(tǒng)認(rèn)為,緩存太大用異步的方式來不及把它們都寫進(jìn)磁盤,于是切換到同步的方式寫入。(異步,即寫入的同時進(jìn)程能正常運行;同步,即寫完之前其他進(jìn)程不能工作)。
好消息是,你可以根據(jù)實際情況,對寫緩存進(jìn)行配置。
可以看一下這些參數(shù):
[root@host ~]# sysctl -a | grep dirty
vm.dirty_background_ratio = 10
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000
vm.dirty_background_ratio 是內(nèi)存可以填充“臟數(shù)據(jù)”的百分比。這些“臟數(shù)據(jù)”在稍后是會寫入磁盤的,pdflush/flush/kdmflush這些后臺進(jìn)程會稍后清理臟數(shù)據(jù)。舉一個例子,我有32G內(nèi)存,那么有3.2G的內(nèi)存可以待著內(nèi)存里,超過3.2G的話就會有后來進(jìn)程來清理它。
vm.dirty_ratio 是絕對的臟數(shù)據(jù)限制,內(nèi)存里的臟數(shù)據(jù)百分比不能超過這個值。如果臟數(shù)據(jù)超過這個數(shù)量,新的IO請求將會被阻擋,直到臟數(shù)據(jù)被寫進(jìn)磁盤。這是造成IO卡頓的重要原因,但這也是保證內(nèi)存中不會存在過量臟數(shù)據(jù)的保護(hù)機(jī)制。
vm.dirty_expire_centisecs 指定臟數(shù)據(jù)能存活的時間。在這里它的值是30秒。當(dāng) pdflush/flush/kdmflush 進(jìn)行起來時,它會檢查是否有數(shù)據(jù)超過這個時限,如果有則會把它異步地寫到磁盤中。畢竟數(shù)據(jù)在內(nèi)存里待太久也會有丟失風(fēng)險。
vm.dirty_writeback_centisecs 指定多長時間 pdflush/flush/kdmflush 這些進(jìn)程會起來一次。
可以通過下面方式看內(nèi)存中有多少臟數(shù)據(jù):
[root@host ~]# cat /proc/vmstat | egrep "dirty|writeback"
nr_dirty 69
nr_writeback 0
nr_writeback_temp 0
這說明了,我有69頁的臟數(shù)據(jù)要寫到磁盤里。
情景1:減少Cache
你可以針對要做的事情,來制定一個合適的值。
在一些情況下,我們有快速的磁盤子系統(tǒng),它們有自帶的帶備用電池的NVRAM caches,這時候把數(shù)據(jù)放在操作系統(tǒng)層面就顯得相對高風(fēng)險了。所以我們希望系統(tǒng)更及時地往磁盤寫數(shù)據(jù)。
可以在/etc/sysctl.conf中加入下面兩行,并執(zhí)行"sysctl -p"
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
這是虛擬機(jī)的典型應(yīng)用。不建議將它設(shè)置成0,畢竟有點后臺IO可以提升一些程序的性能。
情景2:增加Cache
在一些場景中增加Cache是有好處的。例如,數(shù)據(jù)不重要丟了也沒關(guān)系,而且有程序重復(fù)地讀寫一個文件。允許更多的cache,你可以更多地在內(nèi)存上進(jìn)行讀寫,提高速度。
vm.dirty_background_ratio = 50
vm.dirty_ratio = 80
有時候還會提高vm.dirty_expire_centisecs 這個參數(shù)的值,來允許臟數(shù)據(jù)更長時間地停留。
情景3:增減兼有
有時候系統(tǒng)需要應(yīng)對突如其來的高峰數(shù)據(jù),它可能會拖慢磁盤。(比如說,每個小時開始時進(jìn)行的批量操作等)
這個時候需要容許更多的臟數(shù)據(jù)存到內(nèi)存,讓后臺進(jìn)程慢慢地通過異步方式將數(shù)據(jù)寫到磁盤當(dāng)中。
vm.dirty_background_ratio = 5
vm.dirty_ratio = 80
這個時候,后臺進(jìn)行在臟數(shù)據(jù)達(dá)到5%時就開始異步清理,但在80%之前系統(tǒng)不會強(qiáng)制同步寫磁盤。這樣可以使IO變得更加平滑。
從/proc/vmstat, /proc/meminfo, /proc/sys/vm中可以獲得更多資訊來作出調(diào)整。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的linux flush 保证 磁盘,linux cache介绍及控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux共享文件夹中毒,Linux f
- 下一篇: linux 有用的命令,linux有用命