分類: 作者同類文章X版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
linux buffer 與 cache 的區(qū)別。A buffer is something that has yet to be "written" to disk.A cache is something that has been "read" from the disk and stored for later use.兩者都是RAM中的數(shù)據(jù)。簡單來說,buffer(緩沖)是即將要被寫入磁盤的,而cache(緩存)是被從磁盤中讀出來的緩沖(buffers)緩沖區(qū),一個用于存儲速度不同步的設備或優(yōu)先級不同的設備之間傳輸數(shù)據(jù)的區(qū)域。通過緩沖區(qū),可以使進程之間的相互等待變少,從而使從速度慢的設備讀入數(shù)據(jù) 時,速度快的設備的操作進程不發(fā)生間斷是根據(jù)磁盤的讀寫設計的,把分散的寫操作集中進行,減少磁盤碎片和硬盤的反復尋道,從而提高系統(tǒng)性能。linux有一個守護進程定期清空緩沖內(nèi)容(即寫磁盤),也可以通過sync命令手動清空緩沖。舉個例子吧:我這里有一個ext2的U盤,我往里面cp一個3M的 MP3,但U盤的燈沒有跳動,過了一會兒(或者手動輸入sync)U盤的燈就跳動起來了。卸載設備時會清空緩沖,所以有些時候卸載一個設備時要等上幾秒鐘。緩存(cached)是把讀取過的數(shù)據(jù)保存起來,重新讀取時若命中(找到需要的數(shù)據(jù))就不要去讀硬盤了,若沒有命中就讀硬盤其實這緩存內(nèi)存(Cache Memory)在你需要使用內(nèi)存的時候會自動釋放,所以你不必擔心沒有 內(nèi)存可用。如果你希望手動去釋放Cache Memory也是可以的如何手工釋放Cache Memory(緩存內(nèi)存), 用下面的命令可以釋放Cache Memory:To free pagecache $sync; echo 1>/PRoc/sys/vm/drop_cachesTo free dentries and inodes: $sync; echo 2>/proc/sys/vm/drop_cachesTo free pagecache, dentries and inodes: $sync; echo 3>/proc/sys/vm/drop_caches注意,釋放前最好sync一下,防止丟失數(shù)據(jù)。2. 解釋 free 命令free命令中的buffer和cache:(它們都是占用內(nèi)存): buffer : 作為buffer cache的內(nèi)存,是塊設備的讀寫緩沖區(qū) cache: 作為page cache的內(nèi)存, 文件系統(tǒng)的cache#這個命令行用來調(diào)查誰在加數(shù)據(jù)入page_cache[root@my031045 ~]# stap -e 'probe vfs.add_to_page_cache {printf("dev=%d, devname=%s, ino=%d, index=%d, nrpages=%d/n", dev, devname, ino, index, nrpages )}'...dev=2, devname=N/A, ino=0, index=2975, nrpages=1777 $ free total used free shared buffers cached Mem: 255268 238332 16936 0 85540 126384-/+ buffers/cache: 26408 228860Swap: 265000 0 265000 Mem:表示物理內(nèi)存統(tǒng)計 -/+ buffers/cached:表示物理內(nèi)存的緩存統(tǒng)計 Swap:表示硬盤上交換分區(qū)的使用情況,這里我們不去關(guān)心。 系統(tǒng)的總物理內(nèi)存:255268Kb(256M),但系統(tǒng)當前真正可用的內(nèi)存b并不是第一行free 標記的 16936Kb,它僅代表未被分配的內(nèi)存?! ∥覀兪褂胻otal1、used1、free1、used2、free2 等名稱來代表上面統(tǒng)計數(shù)據(jù)的各值,1、2 分別代表第一行和第二行的數(shù)據(jù)?! otal1:表示物理內(nèi)存總量?! sed1:表示總計分配給緩存(包含buffers 與cache )使用的數(shù)量,但其中可能部分緩存并未實際使用?! ree1:未被分配的內(nèi)存。 shared1:共享內(nèi)存,一般系統(tǒng)不會用到,這里也不討論。 buffers1:系統(tǒng)分配但未被使用的buffers 數(shù)量。 cached1:系統(tǒng)分配但未被使用的cache 數(shù)量。buffer 與cache 的區(qū)別見后面?! sed2:實際使用的buffers 與cache 總量,也是實際使用的內(nèi)存總量?! ree2:未被使用的buffers 與cache 和未被分配的內(nèi)存之和,這就是系統(tǒng)當前實際可用內(nèi)存?! 】梢哉沓鋈缦碌仁剑骸 otal1 = used1 + free1 total1 = used2 + free2 used1 = buffers1 + cached1 + used2 free2 = buffers1 + cached1 + free1可見,used2 是真正使用的, 比used1 小, used1 包含分配但未使用內(nèi)存。 free2 是真正可使用的。比free1 大,free1 未包含分配但未使用內(nèi)存實驗:讀程序 看cache 會越來越大寫程序 看buffer 會越來越大頂 0 踩 0 上一篇vimgdb 環(huán)境建立和使用。下一篇簡單的選股指標公式


新聞熱點
疑難解答
圖片精選