【江楓】AIX虛擬記憶體管理機制

idba發表於2008-06-07

AIX採用了基於分頁的虛擬記憶體機制。頁面一般都是統一大小的(預設頁面大小4k,當然也可以啟用大頁面記憶體支援,POWER5 晶片支援四種虛擬記憶體頁面的大小:4KB64KB16MB 16GB),這樣可以簡化整個的管理演算法。頁面是基於整個虛擬記憶體地址空間分割的,一個頁面最終可能對映到實體記憶體,也可能對映到磁碟的交換區(paging space)上。很明顯,記憶體中的頁面訪問速度要快得多,但是記憶體大小有限,某些頁面將不得不被擠出記憶體。淘汰頁面的演算法一般都是基於LRU演算法的,通過ps -k可以看到AIX有一個lrud的核心守護程式,就是AIX分頁替換守護程式。

AIX將所有的記憶體頁面分成兩大型別:

  • 工作儲存分頁(Working storage pages)
  • 永久儲存分頁(Permanent storage pages)

工作儲存分頁的內容都是易失性的,在磁碟上沒有對應的永久儲存檔案資料,諸如程式資料/堆疊/共享記憶體/核心資料等,都是這一類的。而永久儲存分頁其實就是檔案資料。分成這兩種型別,是因為從記憶體中淘汰頁面時,需要做不同的處理。對於工作儲存分頁,只要釋放掉對應的記憶體頁面(其實就是修改某些標誌位)就可以了。而永久儲存分頁,則需要判斷是否有資料修改,沒有修改的話,和工作儲存分頁的處理一樣,直接標誌回收即可,如果有修改,則需要將相應的修改資料寫回磁碟。

而根據快取的檔案的不同,永久儲存分頁又分成兩種,一種就是新的jfs2檔案系統和NFS檔案系統的檔案快取,叫做客戶端分頁(Client pages)。而原來老的jfs檔案系統的檔案快取頁面,就是非客戶端頁面(Non-client pages)

上面對於分頁的分類法,是根據快取的資料型別,需要在淘汰時選擇不同的處理方式。而AIX在選擇哪些頁面需要淘汰的時候,卻是按照另外一種標準的。根據這個標準,可以將所有分頁分成另外兩種型別:

  • 計算型分頁(Computational pages)
  • 非計算型分頁(Non-computational pages)

首先,所有的工作儲存分頁都是計算型分頁,也就是說,Oracle的PGA/SGA等都是屬於計算型分頁的。而永久儲存分頁,則根據快取的檔案的型別,如果是可執行檔案,則對應的分頁是計算型的,如果是資料檔案,則是非計算型的,同一個檔案對應的頁面,要麼全部是計算型,要麼全部是非計算型的。顯然的,為了提供Oracle等應用的效能,假如需要淘汰頁面,優先應當交換非計算型頁面。

可以通過設定一些核心引數,來影響AIX對於頁面的淘汰演算法。這些引數都可以通過vmo命令進行調節(AIX5.2 TL6版本以上)。

minperm%(minperm) maxperm%(maxperm) 是最基本的兩個引數,分別表示用於快取非計算型頁面的最小和最大記憶體比例(頁數),但maxperm不是嚴格限制引數,在系統還有空閒記憶體的時候,非計算型記憶體的使用是可以突破maxperm的設定的。另外有個引數strict_maxperm可以指定是否嚴格限制(預設0表示不是嚴格限制),但是最好不要使用嚴格限制,在我們的測試中,可能導致os掛起。minperm和maxperm主要是影響淘汰演算法:

  • 當非計算性分頁的數目大於或者等於 maxperm 的時候,AIX 分頁替換守護程式嚴格地選擇非計算性分頁進行操作。
  • 當非計算性分頁的數目小於或者等於 minperm 的時候,AIX 分頁替換守護程式將選擇計算性分頁和非計算性分頁進行操作。在這種情況下,AIX 將掃描兩類分頁,並且回收近來較少使用的分頁。
  • 當非計算性分頁的數目在 minperm 和 maxperm 之間的時候,這種情況比較複雜,其行為還受兩外一個引數的影響:lru_file_repage。如果 lru_file_repage=1,那麼 AIX 分頁替換守護程式將根據其內部重新分頁表來確定選擇何種型別的分頁進行操作。AIX 核心通過內部重新分頁表來確定哪一類分頁的重新分頁工作更加頻繁,將優先替換使用不太頻繁的頁面型別的頁面。可能只是非計算型的,也可能是計算型和非計算型的。如果lru_file_repage=0,則只替換非計算型頁面。

minfreemaxfree則是控制在空閒列表中的頁面數在少於minfree開始主動執行頁面淘汰演算法,直到超過maxfree的數目,也就是通過預先執行頁面替換,來保證系統中維持一定數量的可用頁面。通常可以設定minfree=120 * CPU數,maxfree= 128 * CPU數。

maxclient%(maxclient)引數指定客戶端頁面可以使用的最大記憶體比例(頁數),因為客戶端頁面其實是永久儲存頁面的一種,所以maxclient不能設定超過maxperm。值得注意的是,maxclient是嚴格限制的,因為strict_maxclient預設等於1。

上述各種型別的頁面資訊,可以通過一些os工具檢視:

#vmstat -v
 ...
    9.9 numperm percentage          --非計算型頁面佔比
 387427 file pages                  --非計算型頁面數
 ...
    9.9 numclient percentage        --客戶端頁面佔比
   10.0 maxclient percentage
 387427 client pages                --客戶端頁面數
 ...
svmon -G
               size      inuse       free        pin    virtual
memory      4104192    1694342    2409850    1096659    1290215
pg space    4194304       3733

               work       pers       clnt
pin         1096659          0          0
in use      1290215          0     404127

注意到pin住的都是工作儲存頁面(work),這是正確的,因為我們設定了oracle的SGA pin在記憶體當中,要在AIX上將SGA pin在記憶體中,需要設定兩個核心引數:v_pinshm = 1表示允許pin共享記憶體段;maxpin%表示允許pin的最大記憶體比例,然後還需要設定Oracle的初始化引數lock_sga=TRUE。永久儲存頁面(pers)為0,因為沒有使用jfs檔案系統,而jfs2使用的是客戶端頁面(clnt)。這裡svmon統計的資料和vmstat有點出入。這是因為vmstat統計是按照計算型和非計算型的,而svmon則是按照工作儲存頁面和永久儲存頁面的。對比兩個命令的結果,可以推算客戶端頁面中有404127-387427=16700個計算型頁面。

另外,在topas中,也可以看到一些各種型別頁面和交換的大概資訊:

PAGING           MEMORY
Faults    27230    Real,MB  107008
Steals        0  % Comp     95.6
PgspIn        2  % Noncomp   5.1
PgspOut       0  % Client    5.1
PageIn        2

這篇算是學習筆記,寫一下加深印象,想了解更多更細緻的關於AIX虛擬記憶體管理方面的內容,請參考:

http://www.ibm.com/developerworks/cn/aix/library/au-vmm/index.html?ca=drs-cn-0303
http://www.ibm.com/developerworks/cn/aix/library/au-aixoptimization-memtun1/index.html?ca=drs-cn
http://www.ibm.com/developerworks/cn/aix/library/au-aixoptimization-memtun2/index.html?ca=drs-cn
http://www.ibm.com/developerworks/cn/aix/library/au-aixoptimization-memtun3/index.html?ca=drs-cn

<!--

--EOF--

Trackback:http://rdc.taobao.com/blog/dba/html/151_aix_virtual_memory_management_mechanism.html/trackback

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-342875/,如需轉載,請註明出處,否則將追究法律責任。

相關文章