1、快取機制
為了提高檔案系統效能,核心利用一部分物理記憶體分配出緩衝區,用於快取系統操作和資料檔案,當核心收到讀寫的請求時,核心先去快取區找是否有請求的資料,有就直接返回,如果沒有則通過驅動程式直接操作磁碟。
快取機制優點:減少系統呼叫次數,降低cpu上下文切換和磁碟訪問頻率。
cpu上下文切換:cpu給每個程序一定的服務時間,當時間片用完後,核心從正在執行的程序中收回處理器,同時把程序當前執行狀態儲存下來,然後載入下乙個任務,這個過程叫做上下文切換。實質上就是被終止執行程序與待執行程序的程序切換。
2、檢視快取區及記憶體使用情況
[root@localhost ~]# free -m
total used free shared buffers cached
mem: 7866 7725 141 19 74 6897
-/+ buffers/cache: 752 7113
swap: 16382 32 16350
可以看到記憶體總共8g,已使用7725m,剩餘141m,不少的人都是這麼看的,這樣並不能作為實際的使用率。因為有了快取機制,具體該怎麼算呢?
空閒記憶體=free(141)+buffers(74)+cached(6897)
已用記憶體=total(7866)-空閒記憶體
由此算出空閒記憶體是7112m,已用記憶體754m,這才是真正的使用率,也可參考-/+ buffers/cache這行資訊也是記憶體正確使用率。
3、可見快取區分為buffers和cached,他們有什麼區別呢?
核心在保證系統能正常使用物理記憶體和資料量讀寫情況下來分配緩衝區大小。buffers用來快取metadata及pages,可以理解為系統快取,例如,vi開啟乙個檔案。cached是用來給檔案做快取,可以理解為資料塊快取,例如,dd if=/dev/zero of=/tmp/test count=1 bs=1g 測試寫入乙個檔案,就會被快取到緩衝區中,當下一次再執行這個測試命令時,寫入速度會明顯很快。
4、隨便說下swap做什麼用的?
swap意思是交換分割槽,通常我們說的虛擬記憶體,是從硬碟中劃分出的乙個分割槽。當物理記憶體不夠用的時候,核心就會釋放快取區(buffers/cache)裡一些長時間不用的程式,然後將這些程式臨時放到swap中,也就是說如果物理記憶體和快取區記憶體不夠用的時候,才會用到swap。
5、怎樣釋放快取區記憶體呢?
5.1 直接改變核心執行引數
#釋放pagecache
echo 1 >/proc/sys/vm/drop_caches
#釋放dentries和inodes
echo 2 >/proc/sys/vm/drop_caches
#釋放pagecache、dentries和inodes
echo 3 >/proc/sys/vm/drop_caches
5.2 也可以使用sysctl重置核心執行引數
sysctl -w vm.drop_caches=3
注意:這兩個方式都是臨時生效,永久生效需新增sysctl.conf檔案中,一般寫成指令碼手動清理,建議不要清理。
Linux 系統快取機制學習
前言 本文為參考他人的文章,是一篇學習記錄型部落格。理解linux的系統快取機制有助於理解elasticsearch實時更新的原理。為了提高檔案系統效能,核心利用一部分物理記憶體分配出緩衝區,用於快取系統操作和資料檔案,當核心收到讀寫的請求時,核心先去快取區找是否有請求的資料,有就直接返回,如果沒有...
作業系統快取機制
在每個指令週期中,cpu至少會訪問記憶體一次,來抓取下一條執行的指令,而且經常會附帶著更多次的訪問,來獲取運算元,以及儲存結果。而cpu執行指令的速度就因此大大受限於對記憶體的訪問速度,而且隨著cpu的速度提高大大快於記憶體的訪問速度提高,這個問題會越來越嚴重。理論上來說,我們可以製造一種訪問速度與...
IOS 開發快取機制 記憶體快取機制
使用快取的目的是為了使用的應用程式能更快速的響應使用者輸入,是程式高效的執行。有時候我們需要將遠端 web伺服器獲取的資料快取起來,減少對同乙個 url多次請求。記憶體快取我們可以使用 sdk中的 nsurlcache類。nsurlrequest需要乙個快取引數來說明它請求的 url何如快取資料的,...