linux下buffer和cache的異同及free中shared的含義


1.buffer和cache的異同

linux下使用free -m 時

 

 

 可以看到buffers和cached 這二者經常被混為一談。

相同點:二者具備改善系統 I/O 吞吐量的能力

cache改善系統性能主要原因是數據訪問的局部性:一般情況下應用程序在一段時間內操作的數據集的某個有限的部分,通常是很小的一部分。而內存使用相較於硬盤等外部存儲更加昂貴,放置於距離CPU較近的位置。

cached(緩存):讀取過的數據保存在高速緩存中,重新讀取時如果在緩存中有需要的數據就不用去讀取硬盤了,若沒有找到就讀硬盤。其中的數據會根據讀取頻率進行組織,把頻繁讀取的內容放在最容易找到的位置,把使用不頻繁的內容不斷的往后排,直達從中刪除。緩存實際並不是緩沖文件,而是緩沖塊的,塊是磁盤I/O操作的最小單位(在Linux中,他們通常是1KB)。這樣,目錄、超級塊、其他文件系統的薄記數據以及非文件系統的磁盤數據都可以被緩沖了。

buffers(緩沖):把分散的讀寫操作集中進行,減少磁盤碎片和硬盤的反復尋道,從而提高系統性能。linux有一個守護進程定期清空緩沖內容(即寫磁盤),也可以通過sync命令手動清空緩沖。舉個例子吧:我這里有一個ext2的U盤,我往里面cp一個3M的 MP3,但U盤的燈沒有跳動,過了一會兒(或者手動輸入sync)U盤的燈就跳動起來了。卸載設備時會清空緩沖,所以有些時候卸載一個設備時要等上幾秒鍾。

 兩者都是RAM中的數據。簡單來說,buffer是即將要被寫入磁盤或從硬盤讀取的數據集中化,減少實際需要的IO次數,而cache是被從磁盤中讀出來的。 

 

不同點:能夠清空時間不同

Buffer用於臨時存儲IO設備數據,不分讀寫。在Buffer中的數據 必須進行下一步處理后才能清空回收內存空間。例如用於讀取的Buffer,需要后續指令對讀取到buffer中的數據進行處理,在處理完成前清空內存會出現讀失敗;用於寫入的Buffer,則需要寫入到IO設備,在寫入完成前清空內存會出現數據丟失。嚴格意義上的Buffer,在后續處理完成后則應當回收內存。
 
Cache則是把暫時不用的數據存儲在內存中,以加快下一次對這些數據的訪問。理論上來說,Cache是隨時可以清空的,代價是下一次訪問相同數據的時候性能下降。但實際上Cache機制中往往存在某種形式的Buffer,並非所有用於Cache的內存都可以隨時清空回收。

2.free 中shared的含義

 

 

 先看linux 官方給出的解釋

 

指的是被tmpfs使用的內存;再看下tmpfs是個什么系統

  • 首先tmpfs是temporary filesystem的縮寫 望文生義 就是"暫時的文件系統的意思"
  • 為什么說是暫時的呢 因為它是使用VM內存空間作為存儲的系統,系統掉電之后其上存儲的數據也會丟失。

 

VM介紹

1.linux下面VM(virtual memory)的大小由RM(Real Memory)和swap組成

2.RM的大小就是物理內存的大小,而Swap的大小是由你自己決定的。Swap是通過硬盤虛擬出來的內存空間,因此它的讀寫速度相對RM(Real Memory)要慢許多,我們為什么需要Swap呢?當一個進程申請一定數量的內存時,如內核的vm子系統發現沒有足夠的RM時,就會把RM里面的一些不常用的數據交換到Swap里面,如果需要重新使用這些數據再把它們從Swap交換到RM里面。 如果你有足夠大的物理內存,根本不需要划分Swap分區。

 

通過上面的說明,你該知道tmpfs使用的存儲空間VM是什么了吧? 前面說過VM由RM+Swap兩部分組成,因此tmpfs最大的存儲空間可達(The size of RM + The size of Swap)。但是對於tmpfs本身而言,它並不知道自己使用的空間是RM還是Swap,這一切都是由內核的vm子系統管理的。

 

 

怎樣使用tmpfs呢?

 


 

#mount -t tmpfs -o size=20m tmpfs /mnt/tmp

 

上面這條命令分配了上限為20m的VM到/mnt/tmp目錄下,用df命令查看一下,確實/mnt/tmp掛載點顯示的大小是20m,但是tmpfs一個優點就是它的大小是隨着實際存儲的容量而變化的,換句話說,假如/mnt/tmp目錄下什么也沒有,tmpfs並不占用VM。上面的參數20m只是告訴內核這個掛載點最大可用的VM為20m,如果不加上這個參數,tmpfs默認的大小是RM的一半,假如你的物理內存是128M,那么tmpfs默認的大小就是64M,

 


tmpfs"缺點"

 


 

當然有,由於它的數據是在VM里面,因此斷電或者你卸載它之后,數據就會立即丟失,這也許就是它叫tmpfs的原故。不過這其實不能說是缺點。那tmpfs到底有什么用呢?

 


tmpfs優點及用途

 


 

由於tmpfs使用的是VM,因此它比硬盤的速度肯定要快

 

因此我們可以利用這個優點使用它來提升機器的性能。

 


#mount -t tmpfs -o size=2m tmpfs /tmp

 

上面這條命令分配了最大2m的VM給/tmp。 

由於/tmp目錄是放臨時文件的地方,因此我們可以使用tmpfs來加快速度,由於沒有掛載之前/tmp目錄下的文件也許正在被使用,因此掛載之后系統也許有的程序不能正常工作。沒有關系,只要在/etc/fstab里面加上下面的語句

 

tmpfs /tmp tmpfs size=2m 0 0


 

部分轉載於tmpfs詳解 - fire909090 - 博客園 (cnblogs.com)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM