linux内存懒分配,Linux 性能分析总结之内存缓存与Swap(四)
0x00 前言
在簡單的了解了內存的基本原理和如何查看內存的命令free -h后,還要需要了解內存的一些參數含義。如下所示,基本上所有的參數看名字就知道是啥意思,但是有這幾個看名字可能也不知道具體是干啥的,所以還需要深入了解下。
shared 共享內存
buff/cache 緩存
Swap 交換內存
~ # free -h
total used free shared buff/cache available
Mem: 1.8Gi 177Mi 1.1Gi 8.0Mi 479Mi 1.4Gi
Swap: 4.0Gi 0B 4.0Gi
shared 內存是所有被 tmpfs 文件系統使用的內存和共享內存,用于和其他進程共同使用的內存(進程間通信)和加載的動態鏈接庫和程序的代碼段.我對 shared 內存的也沒有更深入的了解,但我覺得像動態庫和程序的代碼段這些都是”死“的東西,不需要頻繁的分配和回收,所以一般情況下不會造成內存的性能問題,所以這里就不細說了,那么剩下的 buff/cache 和 swap 由于會比較頻繁的分配和回收,所以得詳細說說。
在詳細說之前,首先要弄明白以下兩個問題,那么就很容易理解這篇筆記的思路了。
為什么需要內存?
簡而言之就是計算機各個部件的速度不匹配,可以查看下面這個計算機金字塔圖,而解耦速度不一致的神器就是緩存,上到消息隊列,下到 CPU 寄存器,無一不是這個道理,所以可以知道內存是作為磁盤的緩存。
我們所說的內存性能問題是什么?
緩存是有大小限制的,要是無限大那我們所有東西都放緩存里就得了。自然內存也是有大小限制了,那么我們平時常說的內存性能問題則主要指內存容量的問題和緩存命中率的問題。
當我們弄明白了上面這兩個問題,又可以延伸出這些問題,這也是本篇筆記要講的重點。
內存頁分類
內存容量不足怎么換入換出
好,接下來我們帶著這些問題來深究
0x10 Buffer/Cache
Buffer 和 Cache 分別是干嘛的?
我們可以執行 man free命令查看說明文檔,Buffer 和 Cache 是用作磁盤 I/O 的緩存。磁盤作為一個塊設備,上面會有文件系統,我們可以暫時把文件系統理解為對塊設備的抽象和封裝,而存儲在塊設備上的文件都是由文件系統來組織和管理。而對磁盤的讀寫有兩種,一種是經過文件系統,還有一種是不經過文件系統,也就是直接讀寫塊設備。由此對應,Buffer 是對塊設備讀寫的緩存,而 Cache 則是對文件系統讀寫的緩存。
由于文件系統是在塊設備之上,那么文件系統的緩存是不是在 Cache 和 Buffer 里都有一份?
早期的Linux會的,也就是cache兩次。不過現在不會了,只會經過一層cache。實際上 Buffer 和 Cache 可以比喻成一個數據結構一致的數組,只不過塊設備的緩存放一部分,文件系統的緩存放另一部分。
內存頁中有哪些頁?
文件頁
文件映射頁
文件匿名頁
Buffer 和 Cache 是怎么回收的?
Buffer 和 Cache 都是可以被回收的,而這些被叫做File-backed page(文件頁)。被程序修改過的還沒寫入磁盤的叫做臟頁,所以如果要回收先要把臟頁寫到磁盤里。方式有:
應用程序中調用: fsync
內核線程: pdflush
0x20 Swap
上面說了文件頁的回收,匿名頁是怎么回收的呢?這就是 Linux 的 swap 機制,把不常用的內存里不常用的匿名頁放在 Swap 里面,也是就是磁盤里面,然后空出地方來給別的進程用。所以 Swap 就需要:
換出,把暫時不用的數據存到磁盤里
換入,當進程再次訪問這些內存的時候,把他們從磁盤讀到內存里。
內存回收的方式?
直接內存回收: buffer 和 cache
定期內存回收:kswapd0內核線程
定期回收內存的 watermark
剩余 < 閾值: 只有內核可以分配
page_min < 剩余 < page_low: kswapd0 回收內存
page_low < 剩余 < page_hight: 有壓力
剩余 > page_high: 沒壓力
0x21 NUMA
NUMA 全稱叫(Non-Uniform Memory Access)。就是多核心的處理器劃到不同的 Node,每個 Node 都有自己的內存空間。當要內存回收時,可能是從其他 Node尋找空閑內存,或者從本 Node 回收。有時候發現內存空間很足,但仍然換出了內存到 swap 里面就是這個原因。
0x22 Swappiness
調節回收匿名頁和文件頁的權重
0x30 總結
為什么需要內存:各元件速度不匹配
buff 和 cache:對應塊設備和文件系統
內存頁類型:文件頁和匿名頁分別對應緩存和 swap 內存
回收方式:分別對應直接回收和定期回收
Swap 下的 NUMA 架構和調節 Swappniness
總結
以上是生活随笔為你收集整理的linux内存懒分配,Linux 性能分析总结之内存缓存与Swap(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html怎样把图片做成链接,怎么把图片弄
- 下一篇: 简历撰写要则