記憶體包含物理記憶體和虛擬記憶體,虛擬記憶體把計算機的記憶體空間擴充套件到硬碟,物理記憶體(ram)和硬碟的一部分空間(swap)組合在一起作為虛擬記憶體為計算機提供了乙個連貫的虛擬空間。好處就是我們擁有的記憶體變多了,可以執行更多,更大的程式,壞處就是把部分硬碟當成記憶體用整體效能受到影響,硬碟讀寫速度比記憶體慢了幾個數量級,並且ram和swap之間的交換增加了系統的負擔。
在作業系統中,虛擬記憶體被分成頁,在x86中,每個頁的大小為4kb,linux核心讀寫虛擬記憶體是以頁為單位操作的,把記憶體轉移到硬碟互動空間和從交換空間讀取記憶體的時候都是按頁來讀寫的。記憶體和swap的這種交換過程稱為頁面交換。值得注意的是paging和swaping是兩個完全不同的概念。swaping也翻譯為交換,在作業系統裡是指把某程式完全交換到硬碟以騰出記憶體給新程式用,paging只交換程式的部分頁面是兩個不同的概念。純粹的swaping在現代作業系統中已經很難看到了,因為把整個程式交換到硬碟的辦法既耗時又費力而且沒必要,現在作業系統基本都是paging或者paging/swaping混合。
虛擬記憶體管理是linux核心裡面最複雜的部分,要弄懂這部分內容可能需要一本書的講解,這裡簡要介紹兩個和效能監測有關的兩個核心程序:kswapd和pdflush。
kswapd daemon 用來檢查pages_high 和 pages_low,如果可用記憶體少於pages_low,kswapd就開始掃瞄並試圖釋放32個頁面,並且重複掃瞄釋放的過程直到可用記憶體大於pages_high為止。掃瞄的時候檢查三件事,1 如果頁面沒有修改,把頁放到可用記憶體列表裡,2 如果頁面被檔案系統修改了,把頁面內容寫到磁碟上,3 如果頁面被修改了,但不是被檔案系統修改的,把頁面寫到交換空間。
pdflush daemon 用來同步檔案相關的記憶體頁面,把記憶體頁面及時同步到硬碟上。比如開啟乙個檔案,檔案被匯入到記憶體裡,對檔案做了修改並儲存後,核心並不馬上儲存檔案到硬碟,由pdflush決定什麼時候把相應頁面寫入硬碟,這由乙個核心引數vm.dirty_background_ration來控制,比如下面的引數顯示髒頁面達到所有記憶體頁面的10%的時候開始寫入硬碟。
python@ubuntu:~$ /sbin/sysctl -n vm.dirty_background_ratio
10python@ubuntu:~$
FB DIMM FBD 記憶體解釋
fb dimm fullybuffered dimm,全緩衝記憶體模組 是intel在ddr2 ddr3的基礎上發展出來的一種新型記憶體模組與互聯架構,既可以搭配現在的ddr2記憶體晶元,也可以搭配未來的ddr3記憶體晶元。fb dimm工作原理 相比ddr2記憶體來說,fb dimm技術具有極大的...
記憶體對齊詳細解釋
記憶體對齊詳細解釋 1 分析說明 輸出結果 sizeof structtest t 10 兩個編譯器輸出一致 分析過程 pragmapack 2 structtest t pragmapack 成員總大小 9總體對齊係數 min max int,short,char 2 2 總體大小 size 成員...
記憶體對齊 記憶體對齊規則解釋 記憶體對齊原理
一 記憶體對齊的原因 我們都知道計算機是以位元組 byte 為單位劃分的,理論上來說cpu是可以訪問任一編號的位元組資料的,我們又知道cpu的定址其實是通過位址匯流排來訪問記憶體的,cpu又分為32位和64位,在32位的cpu一次可以處理4個位元組 byte 的資料,那麼cpu實際定址的步長就是4個...