aix記憶體最佳化(轉)

lsl031發表於2011-08-17

最佳化 AIX 7 記憶體效能: 第 1 部分,記憶體概述和記憶體引數的調優
Ken Milberg, 作家/網站專家, Future Tech
Ken Milberg 是 PMP,同時也是 techtarget.com 的撰稿人/站點專家,他還為 searchopensource.com 提供 Linux 技術資訊和支援。Ken 是 IBM Systems Magazine,Open Edition 的撰稿人和技術編輯。Ken 擁有 University of Maryland University College 的計算機與資訊科學學士學位和技術管理科學碩士學位。他是 Long Island POWER-AIX 使用者組的創始人和負責人。這些年以來,他在各種規模的企業工作過,並且擔任過各種職位,包括 CIO 和高階 AIX 工程師。他現在在 Future Tech 工作,這是一家總部設在長島的 IBM 業務合作伙伴。Ken 不僅是已透過 PMI 認證的專案管理專業人員(PMP),還是透過 IBM 認證的高階技術專家(CATE,IBM System p5 2006)。

簡介: AIX® 7 利用 POWER7 CPU 改進 LPAR 的記憶體使用情況。儘管記憶體調優可能比處理器或磁碟調優更難實現,但它同樣是非常重要的。在 AIX 7 伺服器中,與任何其他子系統相比,可以對記憶體進行更多的調優工作。更改系統中的某些記憶體引數可以極大地提高效能,特別是在這些引數尚未針對執行環境最佳化的情況下。這個分為三部分的記憶體調優系列深入討論調優引數,主要關注最佳化記憶體效能的許多難題和各種最佳實踐,還要討論 AIX 6 和 AIX 7 中的一些改進。第 1 部分概述 AIX 中的記憶體,包括討論虛擬記憶體和虛擬記憶體管理器(VMM)。

檢視本系列更多內容


標記本文!
釋出日期: 2011 年 1 月 10 日
級別: 中級
原創語言: 英文
訪問情況 1686 次瀏覽
建議: 0 (新增評論)

  平均分 (共 1 個評分 )
簡介

作為系統管理員,您應該已經對記憶體的基本知識非常熟悉了,如實體記憶體和虛擬記憶體之間的區別。您可能還不很清楚 AIX® 7 中的虛擬記憶體管理器(VMM)是如何工作的,以及它與效能調優之間的關係如何。在 AIX 7 中,還有必要考慮虛擬記憶體的影響以及在工作負載分割槽(WPAR)中如何使用和應用它。本文將介紹一些可以用來最佳化系統的監視工具,概述一些比較重要的 AIX 7 記憶體管理功能,包括虛擬記憶體管理器是如何工作的以及動態可變的頁面大小的影響。透過將這些增強功能的實現應用於系統環境,可以在系統中最佳化記憶體效能。

儘管您可能會發現,與其他子系統相比,記憶體的調優更為困難,但是收到的效果往往更加顯著。根據所執行的系統的型別,可能還有一些應該在系統中採用的特定的調優建議。為了幫助說明這些內容,我將使用一個特定的示例並討論設定這些引數的一些最佳實踐。在某些情況下,動態地調整一兩個引數可能會使系統的總體效能產生顯著的變化。

無論要對哪個子系統進行調優,有一個方面是相同的,即始終應該將系統調優看作一個正在進行的過程。開始對系統進行監視的最佳時間是在首次將系統應用到生產環境中並正常執行時(而不是等到使用者抱怨系統效能非常糟糕的時候)。必須在系統正常執行的時候建立系統執行狀態的基準,這樣在系統可能不正常時才能確認是否真的有問題。另外,應該一次僅進行一項更改,應該在更改之後儘快捕捉並分析資料,以便判斷更改的影響(如果有影響的話)。

記憶體概述

本節概述與 AIX 7 有關的記憶體知識。我們將介紹 AIX 7 如何使用虛擬記憶體來定址比系統實體記憶體更大的記憶體。還將解釋 VMM 的工作方式以及它如何處理各種請求。

任何有關記憶體和 AIX 7 的討論都必須先介紹 VMM。有時候,令 AIX 新手感到吃驚的是 VMM 處理系統的所有記憶體請求,而不僅僅是虛擬記憶體本身。在訪問 RAM 時,VMM 需要分配空間,即使是在系統中有足夠的實體記憶體的情況下。它實現分頁空間的預分配過程。透過使用這種方法,VMM 在幫助管理實際記憶體方面扮演了重要的角色,而不僅是在虛擬記憶體方面。

下面說明它的工作原理。在 AIX 7 中,將所有的虛擬記憶體段劃分為若干個頁面。在 AIX 7 中,每個頁面的預設大小為 4KB,但是可以根據使用的處理器環境在不同的範圍內調整。POWER5+ 或更高版本的處理器也可以使用 64KB、16MB 和 16GB 的頁面大小。POWER4 架構也可以支援 16MB 的頁面大小。16MB 的頁面稱為大頁面,16GB 稱為超大頁面,它們用於記憶體需求非常大的應用程式。

在 POWER6 中,引入了可變頁面大小支援(VPSS),這意味著當應用程式需要更大的記憶體塊時,系統將使用更大的頁面。可以在 OS 中同時使用不同的頁面大小,不同的應用程式使用不同的頁面大小。另外,可以動態地改變頁面大小,這會收集 4KB 頁面以形成 64KB 的頁面。這讓應用程式能夠訪問更大的記憶體塊,而不是許多小記憶體塊,從而提高效能。頁面大小可以動態地從 4KB 改為 64KB。可以使用 vmo 調優工具管理 VPSS 的調優。

所分配的頁面可以位於 RAM 或者分頁空間(儲存在磁碟上的虛擬記憶體)。VMM 還維護一個稱為空閒列表 的物件,此物件定義為未分配的頁幀。它們用於處理缺頁的情況。通常存在非常少的未分配頁面(可以自行配置),VMM 使用這些頁面來騰出空間併為其重新分配頁幀。使用 VMM 的頁面置換演算法來選擇要重新分配頁幀的虛擬記憶體頁面。這種分頁演算法決定對當前位於 RAM 中的哪些虛擬記憶體頁面的頁幀進行回收,並放回到空閒列表中。AIX 7 使用所有可用的記憶體,除了那些配置為未分配並用作空閒列表的記憶體之外。

要重申的是,VMM 的目的是管理 RAM 和虛擬頁面的分配。由此可以看出,它的目標是幫助最大限度地縮短缺頁響應時間,並在可能的情況下減少虛擬記憶體的使用。由於要在 RAM 和分頁空間之間進行選擇,在 RAM 可用的情況下,大多數人顯然都更希望使用實體記憶體。VMM 還將虛擬記憶體段劃分為兩個不同的類別。它們是使用計算記憶體的工作段和使用檔案記憶體的持久段。瞭解這兩個類別之間的區別是非常重要的,因為這有助於實現系統的最最佳化。

計算記憶體

當程式對計算資訊進行實際處理時,將使用計算記憶體。這些工作段是臨時的(暫時的),當程式終止或者頁面被偷取時,這些工作段將不復存在。它們沒有對應的持久磁碟儲存位置。在許多情況下,當一個程式終止時,會釋放其實體記憶體和分頁空間。在監視系統的過程中,當可用頁面數量出現較大的峰值時,可以發現這種情況。當空閒的實體記憶體較少時,可以將最近沒有使用過的程式從 RAM 轉移到分頁空間,以幫助釋放實體記憶體,從而完成更多的實際工作。

檔案記憶體

與計算記憶體不同,檔案記憶體使用持久段並在磁碟上有持久儲存位置。資料檔案或者可執行程式通常都對映到持久段,而不是工作段。資料檔案可以與檔案系統相關,如 JFS、JFS2 或 NFS。它們一直都位於記憶體中,直到檔案被解除安裝、頁面被偷取或者取消到檔案的連結。在將資料檔案複製到 RAM 中之後,VMM 控制何時對這些頁面進行覆蓋或者使用它們儲存其他資料。在可以選擇的情況下,大多數人更希望將檔案記憶體換出到磁碟,而不是換出計算記憶體。

當程式引用磁碟上的某個頁面時,必須將其換入,這可能會導致將其他頁面換出。VMM 一直在後臺執行,嘗試使用前面介紹的頁面置換演算法偷取最近沒有引用過的頁幀。它還幫助檢測系統顛簸,當記憶體量非常低並且不斷地換入和換出頁面以支援處理時,可能會出現系統顛簸。VMM 實際上採用一種記憶體負載控制演算法,它可以檢測系統是否出現顛簸並嘗試解決這種情況。如果不加以處理,系統顛簸可能會導致系統停滯,因為核心過分地關注於為頁面騰出空間,而不是完成任何有實際意義的工作。

活動記憶體擴充套件

除了核心記憶體設定和環境之外,AIX 7 還可以利用 POWER7 CPU 提供活動記憶體擴充套件(AME)。

AME 壓縮記憶體中的資料,這樣就可以在記憶體中儲存更多的資料,還可以減少在裝載資料時換出到磁碟的頁面數量。AME 的配置針對各個 LPAR,因此可以為資料庫分割槽啟用它,以便在記憶體中儲存更多從磁碟讀取的資料,同時對 web 伺服器禁用它(對於 web 伺服器,儲存在記憶體中的資訊經常要換出)。

為了避免壓縮所有資訊,記憶體劃分為兩個池,一個壓縮的池和一個不壓縮的池。AIX 7 會根據邏輯分割槽的工作負載和配置自動地調整這兩個池的大小。用壓縮率定義壓縮量,例如如果分配給 LPAR 的記憶體量是 2048MB,可以指定壓縮率為 2.0,那麼有效的記憶體容量就是 4096MB。

因為不同的應用程式和環境能夠採用不同的壓縮率(例如,使用大量文字的應用程式可以受益於比較高的壓縮率),可以使用 amepat 命令進行監視,判斷對於給定的工作負載可能實現的壓縮率。

在執行正常應用程式的同時,在後臺以一定的時間間隔(以分鐘為單位)執行 amepat 一定的次數。這會提供在 LPAR 中使用的壓縮率的建議。在 清單 1 中可以看到一個示例。


清單 1. 獲取活動記憶體擴充套件統計資料
    
Command Invoked                : amepat 1 1

Date/Time of invocation        : Fri Aug 13 11:43:45 CDT 2010
Total Monitored time           : 1 mins 5 secs
Total Samples Collected        : 1

System Configuration:
---------------------
Partition Name                 : l488pp065_pub
Processor Implementation Mode  : POWER7
Number Of Logical CPUs         : 4
Processor Entitled Capacity    : 0.25
Processor Max. Capacity        : 1.00
True Memory                    : 2.00 GB
SMT Threads                    : 4
Shared Processor Mode          : Enabled-Uncapped
Active Memory Sharing          : Disabled
Active Memory Expansion        : Disabled

System Resource Statistics:               Current
---------------------------          ----------------
CPU Util (Phys. Processors)               0.04 [  4%]
Virtual Memory Size (MB)                  1628 [ 79%]
True Memory In-Use (MB)                   1895 [ 93%]
Pinned Memory (MB)                        1285 [ 63%]
File Cache Size (MB)                       243 [ 12%]
Available Memory (MB)                      337 [ 16%]

Active Memory Expansion Modeled Statistics         :
-------------------------------------------
Modeled Expanded Memory Size :   2.00 GB
Achievable Compression ratio   :2.10

Expansion    Modeled True      Modeled              CPU Usage 
Factor       Memory Size       Memory Gain          Estimate    
---------    -------------     ------------------   -----------    
     1.00          2.00 GB         0.00 KB [  0%]   0.00 [  0%]
     1.14          1.75 GB       256.00 MB [ 14%]   0.00 [  0%]

Active Memory Expansion Recommendation:
---------------------------------------
The recommended AME configuration for this workload is to configure the LPAR
with a memory size of 1.75 GB and to configure a memory expansion factor
of 1.14.  This will result in a memory gain of 14%. With this
configuration, the estimated CPU usage due to AME is approximately 0.00
physical processors, and the estimated overall peak CPU resource required for
the LPAR is 0.04 physical processors.

NOTE: amepat's recommendations are based on the workload's utilization level
during the monitored period. If there is a change in the workload's utilization
level or a change in workload itself, amepat should be run again.
 


amepat 報告的活動記憶體擴充套件 CPU 使用量只是估計值。根據工作負載不同,AME 實際的 CPU 使用量可能更低或更高。

可以使用 svmon 工具監視 LPAR 中當前的壓縮情況,見 清單 2。


清單 2. 使用 svmon 獲取壓縮統計資料
    
# svmon -G -O summary=longame,unit=MB
Unit: MB
Active Memory Expansion
--------------------------------------------------------------------
Size     Inuse   Free  DXMSz UCMInuse CMInuse TMSz    TMFr
1024.00 607.91 142.82 274.96 388.56   219.35   512.00 17.4
CPSz CPFr txf cxf CR
106.07 18.7 2.00 1.46 2.50
 


在這裡,DXMSz 欄非常重要,它表示擴充套件記憶體的赤字。當無法達到指定的壓縮率,系統開始使用無法透過壓縮節省出的記憶體時,就會出現赤字。因此,應該注意不要指定過高的壓縮率。

AME 的另一個重要問題是,vmstat 等大多數工具顯示的記憶體大小通常是擴充套件記憶體的大小(即配置的記憶體乘以壓縮率),而不是實際記憶體大小。要想查明在不壓縮的情況下可用的實際記憶體,應該在不同工具的輸出中尋找真實記憶體大小。


--------------------------------------------------------------------------------
回頁首
調優

我們來研究一些可以用來調優 VMM 以最佳化系統效能的工具。下面是一個環境示例,我們要在其中使用某種方法進行引數調優。我要介紹一些需要注意的關鍵引數。

在 AIX 7 中,由 vmo 工具負責 VMM 系統的可調引數的所有配置。它替代 AIX 5 中的 vmtune 工具。

更改頁面大小可以最直接地提高效能,這是因為 Translation Lookaside Buffer (TLB) 現在可以對映到更大的虛擬記憶體範圍,從而提高 TLB 的命中率。例如,對於高效能運算(HPC)或 Oracle ® 資料庫,無論是線上事務處理(OLTP)還是資料倉儲應用程式,都可以受益於大頁面的使用。這是因為 Oracle 使用大量的虛擬記憶體,特別是對於其系統全域性區域(SGA),這個區域用於快取表資料和其他東西。

清單 3 中的命令分配 16777216 位元組以提供 128 個大頁面。


清單 3. 分配位元組
    
# vmo -r -o lgpg_size=16777216 lgpg_regions=128
 


如果希望與 HPC 和資料庫應用程式中常用的共享記憶體結合使用大頁面,還需要設定 v_pnshm 值:# vmo -p -o v_pinshm=1。

最重要的 vmo 設定是 minperm 和 maxperm。將這些引數設定為適合自己系統的值,以確保針對計算記憶體或者檔案記憶體進行最佳化。在大多數情況下,並不希望換出工作段,因為這樣做會導致系統進行不必要的頁面換出,會降低效能。以前,它的工作方式非常簡單:如果檔案頁面數量(numperm%)大於 maxperm%,那麼頁面置換過程僅偷取檔案頁面。當它小於 minperm 時,可以偷取檔案頁面和計算頁面。如果它的值介於兩者之間,那麼僅偷取檔案頁面,除非重新分頁的檔案頁面的數量大於計算頁面。還有另一種考慮方法,如果 numperm 大於 maxperm,就開始偷取持久的儲存。基於這種原理,以前調整 minperm 和 maxperm 引數的方法是,將 maxperm 設定為小於 20,將 minperm 設定為小於等於 10。通常使用這種方法來最佳化資料庫伺服器。

現在調優方法完全不一樣了。新的方法將 maxperm 設定為一個比較高的值(例如,大於 80),並確保將 lru_file_repage 引數設定為 0。lru_file_repage 是在帶 ML4 的 AIX Version 5.2 和 AIX Version 5.3 的 ML1 中首次引入的。這個參數列示是否應該考慮 VMM 重分頁計數,以及它應該偷取什麼型別的記憶體。預設設定為 1,所以需要更改它。當將這個引數設定為 0 時,它告訴 VMM 希望僅偷取檔案頁面,而不是計算頁面。如果 numperm 小於 minperm 或者大於 maxperm,那麼情況會發生變化,這正是希望將 maxperm 設定得較高而將 minperm 設定得較低的原因。我們不要忘記一個事實:對這些值進行調優的主要原因是希望保護計算記憶體。回到前面的示例,Oracle 使用它自己的快取,同時使用 AIX 7 檔案快取只會產生混亂,所以希望停止它。在這個場景中,如果降低 maxperm,那麼會錯誤地停止正在執行的應用程式快取程式。

清單 4 設定這些關鍵的調優引數。


清單 4. 設定調優引數
    
vmo -p -o minperm%=5
vmo -p -o maxperm%=90
vmo -p -o maxclient%=90
 


儘管您已經習慣於更改這些引數,但是現在只需保持 strict_maxperm 和 strict_maxclient 的預設值即可。如果將 strict_maxperm 改為 1,那麼它將對可用於持久檔案快取的記憶體量設定硬限制。透過將 maxperm 值作為快取的上限實現這一點。現在,沒有必要這樣做,因為並不希望使用 AIX 7 檔案快取,所以更改 lru_file_repage 引數是更有效的調優方法。

還有兩個重要的引數需要注意,它們是 minfree 和 maxfree。如果空閒列表中的頁面數降低到低於 minfree 引數,那麼 VMM 開始偷取頁面(僅僅是為了把頁面新增到空閒列表中),這樣做並不好。它將繼續進行這種操作,直到空閒列表至少包含 maxfree 引數中指定的頁面數。

在較早版本的 AIX 中,當 minfree 設定為預設值 120 時,常常會看到空閒列表為 120 或者更低,這會導致進行不必要的分頁;更糟糕的是,這會阻塞那些需要空閒幀的執行緒,因為這個值設定得過低了。為了解決這個問題,在 AIX Version 5.3 中,將 minfree 和 maxfree 的預設值分別提高到了 960 和 1088。如果正在執行 AIX Version 5.2 或者更低的版本,建議採用下面的設定,可以使用 清單 5 中的命令手動更改。


清單 5. 手動設定 minfree 和 maxfree 引數
    
vmo -p -o minfree=960
vmo -p -o maxfree=1088
 


配置可變頁面大小支援

VPSS 透過使用預設的 4KB 頁面大小起作用。假設給應用程式分配了 16 個 4KB 的塊,當前所有的塊都在使用,那麼它們被提升為一個 64KB 的塊。重複執行這個過程,處理應用程式正在使用的連續 16 個 4KB 塊的所有序列。

兩個可配置引數控制 VPSS 的執行方式。第一個引數啟用多種頁面大小支援。透過 vmo 配置的 vmm_support 可調項設定 VPSS 的執行方式。0 值表示只支援 4KB 和 16MB 的頁面大小。1 值允許 VMM 使用處理器支援的所有頁面大小。2 值允許 VMM 對每個段使用多種頁面大小,這是所有全新安裝的預設設定。

在啟用多種頁面大小支援的情況下,vmm_default_pspa 引數控制提升為 64KB 頁面需要多少個連續的 4KB 頁面。一些應用程式(尤其是使用大量記憶體的應用程式)使用 64KB 頁面大小可能效能更好,即使它們不使用完整的 64KB 頁面。

在這種情況下,可以使用 vmm_default_pspa 引數指定提升需要的 4KB 頁面數小於 16 個,表示為百分數形式。預設值 0 表示需要 16 個頁面。50 表示只需要 8 個頁面。0 值表示把所有 4KB 頁面提升為 64KB 頁面。


--------------------------------------------------------------------------------
回頁首
結束語

如前所述,在對 AIX 7 進行最佳化或監視之前,必須建立一個基準。在進行調優之後,必須捕捉資料並分析更改的結果。如果沒有這類資訊,就無法真正瞭解調優工作的實際效果。在本系列的第 1 部分中,我們討論了使用 VMM 提升系統記憶體容量的效果。還對一個 Oracle 系統進行了調優以最佳化記憶體子系統的使用。研究了一些重要的核心引數、它們的作用以及如何對它們進行調優,包括如何最適當地使用可變頁面大小支援。

第 2 部分重點關注系統監視的細節,以確定記憶體瓶頸並分析趨勢和結果。第 3 部分重點關注分頁空間和對 VMM 進行調優以儘可能提高效能的其他方法。

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

相關文章