性能分析基礎知識(2):內存

上篇文章介紹了CPU相關的知識,本章介紹內存相關的知識。

本文的主要內容:

  1. 操作系統中的內存管理是怎樣的
  2. 物理內存的性能指標的影響因素

從free說起

以centos7爲例,free命令結果如下:

[root@lh ~]# free -w
              total        used        free      shared     buffers       cache   available
Mem:       24473612      482400    23777212       17532        2108      211892    23665672
Swap:      12320764           0    12320764

從結果中,我們可以看出:
total = used + free + buffers + cache
其中
shared:多進程共享內存數
buffers/cache:緩存內存數,物理內存不足時,系統會釋放一部分緩存
free:空餘內存數
available:可用內存數
swap: 交換分區,將不常用的數據置換到磁盤
爲了進一步理解這幾個概念,就從內存的空間模型說起。

操作系統中的內存

內存的空間模型

在這裏插入圖片描述
在內存中運行的每個進程都需要使用到內存,但是不是每個進行都需要每時每刻都使用系統分配的內存空間。

當系統所需內存超過實際的物理內存時,內核會釋放某些進程所"佔用但未使用"的物理內存,把這些資料存儲在磁盤上,並將釋放出來的內存提供給有需要的進程使用。直到下一次調用該進程時,重新分配空閒內存,將磁盤中的數據再次加載到物理內存中。

進程的空間模型展示的是進程所使用的邏輯內存。換句話說,如果你的程序每sleep一段時間後打印一次內存的地址空間,就會發現,進程的地址空間並未改變,但對應的物理內存內存地址可能已經改變很多次了。

虛擬內存管理與周邊系統關係

在這裏插入圖片描述

  • 內存管理系統負責文件 Cache 的分配和回收,同時虛擬內存管理系統(VMM)則允許應用程序和文件 Cache 之間通過 memory map的方式交換數據
  • 虛擬文件系統VFS負責在應用程序和文件 Cache 之間通過 read/write 等接口交換數據
    具體文件系統,如 ext2/ext3、jfs、ntfs 等,負責在文件 Cache和存儲設備之間交換數據

Cache、文件及磁盤間關係

在這裏插入圖片描述

  • 文件Cache分爲兩個層面,Page Cache和Buffer Cache,每一個 Page Cache 包含若干 Buffer Cache。
  • 內存管理系統和 VFS 只與 Page Cache 交互,內存管理系統負責維護每項 Page Cache 的分配和回收,同時在使用 memory map 方式訪問時負責建立映射;VFS 負責 Page Cache 與用戶空間的數據交換。
  • 具體文件系統一般只與 Buffer Cache 交互,它們負責在外圍存儲設備和 Buffer Cache 之間交換數據。

交換分區

爲了滿足物理內存不足而利用磁盤空間虛擬出一塊邏輯內存,用作虛擬內存的空間。

交換機制如下:

  • Linux系統會不時的進行頁面交換操作,以保持儘可能多的空閒物理內存,即使並沒有什麼需要內存,Linux也會交換出暫時不用的內存頁面,這樣的可以避免等待交換所需的時間。
  • Linux內存管理中,通過調頁paging和交換swapping來完成上述的內存調度。調頁算法是把內存中最近不常使用的頁面換到磁盤中,把活動頁面保留在內存中供進程使用。
  • 分頁寫入磁盤的過程爲:page-out,分頁從硬盤重新回到內存的過程被稱爲page-in,內核需要一個分頁的時候,發現此分頁不再內存中,,就會發生page fault。

內存性能指標

在這裏插入圖片描述

內存容量

容量越大,性能越好。但也需要和主板、操作系統等配套。
在Windows中我們可以通過命令行查看出當前系統支持的最大內存是多少:

C:\Users\SOMEONE>wmic memphysical get maxcapacity
MaxCapacity
16777216

命令結果的單位爲KB,因此,此電腦支持的最大內存爲16GB

內存等待時間

在這裏插入圖片描述
內存等待時間,表示系統進入數據存取操作就緒狀態前等待內存響應的時間。
目前業界優化的方式有:

  • 多級緩存和預取技術
  • 多線程及亂序執行技術
  • 集成式內存控制器
  • 內存集成到處理器中

內存帶寬

內存帶寬=(傳輸倍率×總線位寬×工作頻率)÷8
內存總線位寬:受內存引腳數量的限制,可將內存集成到處理器中,擺脫限制
內存工作頻率:受芯片發熱和工藝限制
內存傳輸倍率:DDR是SDRAM的2倍
在這裏插入圖片描述

總結

從開發角度看

在性能要求高的情況下編程,我們應該注意:

  1. 儘量使用內存池,避免頻繁地申請和釋放內存;
  2. 熱度比較高的內容應緩存在內存中,避免頻繁地從磁盤中讀取。

從測試的角度看

磁盤的性能測試過程中,進程讀取的數據有可能在磁盤,也有可能在內存,導致測試結果時好時壞,所以在測試過程中應該注意:

  1. 在不要求精確的情況下,儘量讓讀寫的數據大小遠大於內存容量;
  2. 在要求精確的情況下,應使用特定的工具如iozone、fio等,開啓從磁盤直接讀取的模式進行測試;
  3. 在進行分佈式系統的性能測試的時候,應該注意分析清楚服務端和客戶端雙方的內存緩存帶來的影響,然後再設置相應的測試方案。

關注麻辣軟硬件,獲取更多有料的軟硬件知識

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章