日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux buffer/cache异同

發(fā)布時(shí)間:2025/3/20 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux buffer/cache异同 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

buffers與cached
  1)、異同點(diǎn)
  在Linux 操作系統(tǒng)中,當(dāng)應(yīng)用程序需要讀取文件中的數(shù)據(jù)時(shí),操作系統(tǒng)先分配一些內(nèi)存,將數(shù)據(jù)從磁盤讀入到這些內(nèi)存中,然后再將數(shù)據(jù)分發(fā)給應(yīng)用程序;當(dāng)需要往文件中寫 數(shù)據(jù)時(shí),操作系統(tǒng)先分配內(nèi)存接收用戶數(shù)據(jù),然后再將數(shù)據(jù)從內(nèi)存寫到磁盤上。然而,如果有大量數(shù)據(jù)需要從磁盤讀取到內(nèi)存或者由內(nèi)存寫入磁盤時(shí),系統(tǒng)的讀寫性 能就變得非常低下,因?yàn)闊o論是從磁盤讀數(shù)據(jù),還是寫數(shù)據(jù)到磁盤,都是一個(gè)很消耗時(shí)間和資源的過程,在這種情況下,Linux引入了buffers和 cached機(jī)制。

  buffers與cached都是內(nèi)存操作,用來保存系統(tǒng)曾經(jīng)打開過的文件以及文件屬性信息,這樣當(dāng)操作系統(tǒng)需要讀取某些文件時(shí),會(huì)首先在buffers 與cached內(nèi)存區(qū)查找,如果找到,直接讀出傳送給應(yīng)用程序,如果沒有找到需要數(shù)據(jù),才從磁盤讀取,這就是操作系統(tǒng)的緩存機(jī)制,通過緩存,大大提高了操 作系統(tǒng)的性能。但buffers與cached緩沖的內(nèi)容卻是不同的。

  buffers是用來緩沖塊設(shè)備做的,它只記錄文件系統(tǒng)的元數(shù)據(jù)(metadata)以及 tracking in-flight pages,而cached是用來給文件做緩沖。更通俗一點(diǎn)說:buffers主要用來存放目錄里面有什么內(nèi)容,文件的屬性以及權(quán)限等等。而cached直接用來記憶我們打開過的文件和程序。buffer理解為find,ll,ls 時(shí)的緩存,cache理解為vi,vim的緩存

  為了驗(yàn)證我們的結(jié)論是否正確,可以通過vi打開一個(gè)非常大的文件,看看cached的變化,然后再次vi這個(gè)文件,感覺一下兩次打開的速度有何異同,是不 是第二次打開的速度明顯快于第一次呢?這里提供一個(gè)小腳本打印首次及第二次打開一個(gè)大文件(catalina.logaa? 約2G)耗時(shí)及cached/buffers的變化:

#!/bin/bash sync sync echo 3 > /proc/sys/vm/drop_caches echo -e "----------------------緩存釋放后,內(nèi)存使用情況(KB):----------------------" free cached1=`free |grep Mem:|awk '{print $7}'` buffers1=`free |grep Mem:|awk '{print $6}'` date1=`date +"%Y%m%d%H%M%S"` cat catalina.logaa >1 date2=`date +"%Y%m%d%H%M%S"` echo -e "----------------------首次讀取大文件后,內(nèi)存使用情況(KB):----------------------" free cached2=`free |grep Mem:|awk '{print $7}'` buffers2=`free |grep Mem:|awk '{print $6}'` #echo $date1 #echo $date2 interval_1=`expr ${date2} - ${date1}` cached_increment1=`expr ${cached2} - ${cached1}` buffers_increment1=`expr ${buffers2} - ${buffers1}` date3=`date +"%Y%m%d%H%M%S"` cat catalina.logaa >1 date4=`date +"%Y%m%d%H%M%S"` echo -e "----------------------再次讀取大文件后,內(nèi)存使用情況(KB):----------------------" free cached3=`free |grep Mem:|awk '{print $7}'` buffers3=`free |grep Mem:|awk '{print $6}'` #echo $date3 #echo $date4 interval_2=`expr ${date4} - ${date3}` cached_increment2=`expr ${cached3} - ${cached2}` buffers_increment2=`expr ${buffers3} - ${buffers2}` echo -e "----------------------統(tǒng)計(jì)匯總數(shù)據(jù)如下:----------------------" echo -e "首次讀取大文件,cached增量:${cached_increment1},單位:KB" echo -e "首次讀取大文件,buffers增量:${buffers_increment1},單位:KB" echo -e "首次讀取大文件,耗時(shí):${interval_1},單位:s \n" echo -e "再次讀取大文件,cached增量:${cached_increment2},單位:KB" echo -e "再次讀取大文件,buffers增量:${buffers_increment2},單位:KB" echo -e "再次讀取大文件,耗時(shí):${interval_2},單位:s"

  執(zhí)行結(jié)果如下(由于打印出來的free結(jié)果跟參數(shù)賦值時(shí)用的free命令之間有時(shí)間間隔,計(jì)算起來可能會(huì)略有不同):


接著執(zhí)行下面的命令:find /* -name? *.conf ,看 看buffers的值是否變化,然后重復(fù)執(zhí)行find命令,看看兩次顯示速度有何不同。如下腳本(需要注意使用bc計(jì)算浮點(diǎn)型數(shù)據(jù)時(shí)需要安裝相應(yīng)軟件,我 的系統(tǒng)是centos7.0,內(nèi)核4.3.3的版本,安裝的是bc-1.06.95-13.el7.x86_64服務(wù)):

#!/bin/bash sync sync echo 3 > /proc/sys/vm/drop_caches echo -e "----------------------緩存釋放后,內(nèi)存使用情況(KB):----------------------" free cached1=`free |grep Mem:|awk '{print $7}'` buffers1=`free |grep Mem:|awk '{print $6}'` date1=`date +%s.%N` find /* -name *.conf >2 date2=`date +%s.%N` echo -e "----------------------首次查詢后,內(nèi)存使用情況(KB):----------------------" free cached2=`free |grep Mem:|awk '{print $7}'` buffers2=`free |grep Mem:|awk '{print $6}'` #echo $date1 #echo $date2 interval_1=`echo "scale=3; ${date2} - ${date1}" | bc` cached_increment1=`expr ${cached2} - ${cached1}` buffers_increment1=`expr ${buffers2} - ${buffers1}` date3=`date +%s.%N` find /* -name *.conf >2 date4=`date +%s.%N` echo -e "----------------------再次查詢后,內(nèi)存使用情況(KB):----------------------" free cached3=`free |grep Mem:|awk '{print $7}'` buffers3=`free |grep Mem:|awk '{print $6}'` #echo $date3 #echo $date4 interval_2=`echo "scale=3; ${date4} - ${date3}" | bc` cached_increment2=`expr ${cached3} - ${cached2}` buffers_increment2=`expr ${buffers3} - ${buffers2}` echo -e "----------------------統(tǒng)計(jì)匯總數(shù)據(jù)如下:----------------------" echo -e "首次查詢,cached增量:${cached_increment1},單位:KB" echo -e "首次查詢,buffers增量:${buffers_increment1},單位:KB" echo -e "首次查詢,耗時(shí):${interval_1},單位:s \n" echo -e "再次查詢,cached增量:${cached_increment2},單位:KB" echo -e "再次查詢,buffers增量:${buffers_increment2},單位:KB" echo -e "再次查詢,耗時(shí):${interval_2},單位:s"

結(jié)果如下(最后那個(gè)應(yīng)該是0.470702440,使用bc計(jì)算的時(shí)候那個(gè)0被去掉了):

2、內(nèi)存釋放
??? linux系統(tǒng)中/proc是一個(gè)虛擬文件系統(tǒng),我們可以通過對(duì)它的讀寫操作做為與kernel實(shí)體間進(jìn)行通信的一種手段。也就是說可以通過修改 /proc中的文件,來對(duì)當(dāng)前kernel的行為做出調(diào)整。那么我們可以通過調(diào)整/proc/sys/vm/drop_caches來釋放內(nèi)存。關(guān)于drop_caches,官方給出的說法是:

   Writing to this will cause thekernel to drop clean caches, dentries and inodes from memory, causing thatmemory to become free. To free pagecache: echo 1 > /proc/sys/vm/drop_caches To free dentries and inodes: echo 2 > /proc/sys/vm/drop_caches To free pagecache, dentries andinodes: echo 3 > /proc/sys/vm/drop_caches As this is a non-destructiveoperation and dirty objects are not freeable, the user should run `sync' first. http://www.kernel.org/doc/Documentation/sysctl/vm.txt

# cat /proc/sys/vm/drop_caches
0
默認(rèn)是0,1表示清空頁緩存,2表示清空inode和目錄樹緩存,3清空所有的緩存

[root@hps103 ~]# sync [root@hps103 ~]# free -mtotal used free shared buffers cached Mem: 499 323 175 0 52 188 -/+ buffers/cache: 82 416 Swap: 2047 0 2047[root@hps103 ~]# echo 3 > /proc/sys/vm/drop_caches [root@hps103 ~]# free -m //發(fā)現(xiàn)緩存明顯減少了total used free shared buffers cached Mem: 499 83 415 0 1 17 -/+ buffers/cache: 64 434 Swap: 2047 0 2047

轉(zhuǎn)載于:https://www.cnblogs.com/AmilyWilly/p/9285048.html

總結(jié)

以上是生活随笔為你收集整理的Linux buffer/cache异同的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。