Linux Buffer/Cache 的區別

Federico發表於2018-09-09

  以前經常使用free -h命令來檢視當前作業系統的記憶體使用情況,同時也注意過返回資訊中有一列是buff/cache,來公司之前,面試官還問過我這兩個的區別,當時沒有回答出來,現在特意回顧記錄下:
free -h

              total        used        free      shared  buff/cache   available
Mem:           3.7G        2.0G        318M         41M        1.4G        1.3G
Swap:          2.0G         87M        1.9G

區別

  • A buffer is someting that has yet to be 'written' to disk.
  • A cache is someting that has been 'read' from the disk and stored for later use.

  buffer用於存放輸入到磁碟上的資料,而cache是從磁碟中讀出資料儲存在記憶體中待以後進行使用。

測試

  1. 生成一個測試檔案。

Linux Buffer/Cache 的區別

  1. 清空快取

Linux Buffer/Cache 的區別

三種清空方式:

  • echo 1 > /proc/sys/vm/drop_caches:僅清除頁面快取
  • echo 2 > /proc/sys/vm/drop_caches:清除目錄項和inode
  • echo 3 > /proc/sys/vm/drop_caches:清除頁面快取、目錄項以及inode
  1. 讀取測試檔案,檢視讀取時長

Linux Buffer/Cache 的區別

  我們可以看到,讀取時長在52s,第一次讀取檔案後,已經寫入cache。

  1. 測試第二次讀取檔案時長

Linux Buffer/Cache 的區別

  當我們清除cache後讀取此測試檔案時長為52s,當第一次讀取完成後寫入cache再次讀取時,時長為0.24s,效能可謂極大提升。

  測試時可能遇到的關於time命令的坑,我們系統中是自帶time命令的,不過並不常用,我們用於測試使用的time是需要單獨安裝的:yum -y install time。可以使用以下方法進行區分:
which time

/usr/bin/which: no time in (/usr/lib64/qt-3.3/bin:/root/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

  給我們上述返回值時,表示我們的time命令還沒有安裝。

type time

time is a shell keyword

  返回time是一個shell關鍵字同樣不是我們想要的time命令。

time --version

zsh: command not found: --version
--version  0.00s user 0.00s system 60% cpu 0.001 total

  檢視time版本提示命令未安裝,表示我們需要使用的time命令還沒有被安裝。

yum -y install time
which time

/usr/bin/time

/usr/bin/time --version

GNU time 1.7

  有上述資訊,我們就可以開始使用啦。

相關文章