linux緩存清除

什麼是page cache?

Page cache主要用來作爲文件系統上的文件數據的緩存來用,尤其是針對當進程對文件有read/write操作的時候。如果你仔細想想的話,作爲可以映射文件到內存的系統調用:mmap是不是很自然的也應該用到page cache?在當前的系統實現裏,page cache也被作爲其它文件類型的緩存設備來用,所以事實上page cache也負責了大部分的塊設備文件的緩存工作。

什麼是buffer cache

Buffer cache則主要是設計用來在系統對塊設備進行讀寫的時候,對塊進行數據緩存的系統來使用。這意味着某些對塊的操作會使用buffer cache進行緩存,比如我們在格式化文件系統的時候。一般情況下兩個緩存系統是一起配合使用的,比如當我們對一個文件進行寫操作的時候,page cache的內容會被改變,而buffer cache則可以用來將page標記爲不同的緩衝區,並記錄是哪一個緩衝區被修改了。這樣,內核在後續執行髒數據的回寫(writeback)時,就不用將整個page寫回,而只需要寫回修改的部分即可。

如何回收cache?

Linux內核會在內存將要耗盡的時候,觸發內存回收的工作,以便釋放出內存給急需內存的進程使用。一般情況下,這個操作中主要的內存釋放都來自於對buffer/cache的釋放。尤其是被使用更多的cache空間。既然它主要用來做緩存,只是在內存夠用的時候加快進程對文件的讀寫速度,那麼在內存壓力較大的情況下,當然有必要清空釋放cache,作爲free空間分給相關進程使用。所以一般情況下,我們認爲buffer/cache空間可以被釋放,這個理解是正確的。

但是這種清緩存的工作也並不是沒有成本。理解cache是幹什麼的就可以明白清緩存必須保證cache中的數據跟對應文件中的數據一致,才能對cache進行釋放。所以伴隨着cache清除的行爲的,一般都是系統IO飆高。因爲內核要對比cache中的數據和對應硬盤文件上的數據是否一致,如果不一致需要寫回,之後才能回收。

在系統中除了內存將被耗盡的時候可以清緩存以外,我們還可以使用下面這個文件來人工觸發緩存清除的操作:

 

echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的對象(包括目錄項緩存和inode緩存)。slab分配器是內核中管理內存的一種機制,其中很多緩存數據實現都是用的pagecache。
echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的緩存對象。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章