AIX 5L 記憶體效能優化,第 1 部分: AIX Version 5.3 中記憶體的概述以及記憶體引數的優化

victorymoshui發表於2011-07-27
本系列的三篇文章深入研究記憶體優化中的引數優化,重點關注於記憶體效能優化方面的各種挑戰和各種最佳實踐,並且還介紹了 AIX® Version 5.3 中的一些改進。儘管與中央處理單元 (CPU) 優化相比,實現記憶體優化可能更加困難,但它同樣是非常重要的。在 AIX 伺服器中,與任何其他子系統相比,您可以對記憶體進行更多的優化工作。更改系統中的某些記憶體引數,可以極大地提高效能,特別是在尚未對這些引數進行優化的執行環境中。本系列文章的第 1 部分提供了 AIX 中記憶體的概述,包括對虛擬記憶體和虛擬記憶體管理器 (VMM) 的介紹。

引言

作為一名系統管理員,您應該已經對有關記憶體的基本知識非常熟悉,如物理和虛擬記憶體之間的區別。您可能還不是很清楚 AIX® 中的虛擬記憶體管理器 (VMM) 是如何工作的、以及它與效能優化之間的關係如何。而且,在最近幾年中,有一些優化命令和引數發生了變化,如果您較長時間沒有使用 AIX 了,那麼您可能會發現,您從前所熟悉的一些命令,現在甚至根本無法繼續使用了。本文詳細地介紹了 AIX VMM,以及優化 VMM 所需使用的各種優化命令。我將介紹一些監視工具,您可以使用這些工具來優化您的系統,本文還對一些比較重要的 AIX Version 5.3 記憶體管理增強功能進行概述。實現這些增強功能,即將其應用到您的系統環境,可以在您的系統中優化記憶體效能。

儘管您可能會發現,與其他的子系統相比,記憶體的優化更為困難一些,但是收到的效果往往更加顯著。可能還有一些應該在您的系統中進行設定的特定的優化建議,這取決於您所執行的系統的型別。為了幫助證實這些內容,我使用了一個特定的示例,並介紹了進行這些引數設定的一些最佳實踐。在某些情況下,動態地優化一個或兩個引數,可能會使得您的系統的整體效能完全不同。

無論您需要對哪個子系統進行優化,有一個方面是相同的,即優化系統—您始終應該將其看作一個正在進行的程式。開始對系統進行監視的最佳時間是當您首次將系統應用到產品環境中並且正常執行時,而不是等到使用者抱怨系統的效能非常糟糕的時候。如果您不瞭解系統正常執行時的情況,並以此作為基準,那麼您可能永遠也無法真正地確定是否出現了問題。而且,一次只應該進行一項更改,並且在進行了更改之後,應該儘快地捕獲相關的資料並對其進行分析,以確定這項更改究竟帶來了什麼不同(如果存在的話)。

記憶體概述

這部分內容提供了與 AIX 有關的記憶體方面的概述。我將介紹 AIX 如何使用虛擬記憶體來定址比系統中實體記憶體更大的記憶體。我還將說明 VMM 的工作方式以及它如何處理各種請求。

任何有關記憶體和 AIX 的介紹都必須以對 VMM 的描述作為開始。有時候,令 AIX 新手感到困惑的是,VMM 服務如何處理系統中所有的記憶體請求,而不僅僅是虛擬記憶體本身。在訪問 RAM 時,VMM 需要分配空間,即使是在系統中有足夠的實體記憶體的情況下。它實現了分頁空間的預分配過程。使用這種方法,VMM 在幫助管理實際記憶體方面扮演了重要的角色,而不僅是在虛擬記憶體方面。下面來說明它的工作原理。在 AIX 中,將所有的虛擬記憶體段劃分為若干個頁面。在 AIX 中,每個頁面的預設大小為 4KB。所分配的頁面可以位於 RAM 或者分頁空間(虛擬記憶體儲存於磁碟上)。VMM 還維護一個稱為空閒列表 的物件,該物件定義為未分配的頁幀。它們用於處理缺頁的情況。通常存在少量未分配頁面(您可以自行配置),VMM 可以使用這些頁面來騰出空間併為其重新分配頁幀。可以使用 VMM 的頁面置換演算法來選擇要重新分配頁幀的虛擬記憶體頁面。這種分頁演算法可以確定對當前位於 RAM 中的哪些虛擬記憶體頁面的頁幀進行回收,並放回到空閒列表中。AIX 可以使用所有可用的記憶體,除了那些配置為未分配並用做空閒列表的記憶體之外。

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

計算記憶體

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

檔案記憶體

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

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

優化

讓我們研究一些相關的工具,它們允許您對 VMM 進行優化,從而實現系統效能的優化。我提供了一個環境示例,其中使用了某種方法對相關的引數進行優化。我還介紹了一些需要注意的關鍵引數。

在 AIX 5L™ 之前,您可能曾經使用過 vmtune 命令對您的 VMM 系統進行優化。儘管在 AIX Version 5.2 中提供了 vmo 命令,但 vmtune 命令也可以使用,直到 AIX Version 5.3。在 AIX Version 5.3 中,您不能夠再使用 vmtune 這一命令了。儘管有一些根本的變化您需要了解,但是大多數實際引數都是相同的。

讓我們來介紹一下 AIX 5L 中頁幀方面一項重要的變化。從 POWER4 處理器開始,AIX 可以支援最大 16MB 的頁面大小。實際上,POWER5 晶片支援四種虛擬記憶體頁面的大小:4KB、64KB、16MB 和 16GB。通過下面一項簡單的 vmo 更改,您就可以對系統進行優化以提供大型的頁面,從而對於消耗大量記憶體的應用程式極大地提高系統效能。效能之所以得到了改進,是因為提高了 Translation Lookaside Buffer (TLB) 的命中率,這是因為 TLB 可以對映到更大的虛擬記憶體範圍。例如 Oracle 資料庫,無論是聯機事務處理 (OLTP) 或者資料倉儲應用程式,都可以從大型頁面的使用中獲益。這是因為 Oracle 使用了大量的虛擬記憶體,特別是對於其系統全域性區 (SGA)。這裡使用的示例是一個執行 AIX Version 5.3 的 p550 LPAR 上的 Oracle 資料庫伺服器。該系統可用於 OLTP 和資料倉儲。

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


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

最重要的 vmo 設定是 minpermmaxperm。將這些引數設定為適合您的系統的值,以確保對計算記憶體或者檔案記憶體進行優化。在大多數情況下,您並不希望調出工作段,因為這樣做會導致系統進行沒有必要的頁面調出,並且會降低效能。以前,它的工作方式非常簡單:如果您的檔案頁面 (numperm%) 大於 maxperm%,那麼頁面置換演算法將僅替換檔案頁面。當它小於 minperm 時,可以替換檔案頁面和計算頁面。如果它的值位於兩者之間,那麼將僅替換檔案頁面,除非重分頁的檔案頁面的數目大於計算頁面。還有另一種方法,如果您的 numperm 大於 maxperm,您可以開始替換持久的儲存。基於這種方法學,早期的方法是調整您的 minpermmaxperm 引數,將 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 檔案快取,但是卻產生了混淆,所以您希望停止它。在這個場景中,如果您打算降低 maxperm,那麼您將會停止正在執行的應用程式快取程式。

清單 2 設定了這些關鍵的優化引數。


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

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

還有兩個其他的重要引數需要說明,它們是 minfreemaxfree。如果空閒列表中的頁面數降低到低於 minfree 引數,那麼 VMM 開始替換頁面(只需新增到空閒列表),這樣做並不是很合適。它將繼續進行這項操作,直到空閒列表至少包含 maxfree 引數中指定的頁面數。

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


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

AIX Version 5.3 記憶體方面的變化和改進

讓我們先研究一下 AIX Version 5.3 中與記憶體有關的一些最新的變化。適當地使用 AIX Version 5.3 中的記憶體管理增強功能,可以幫助您高效地對系統進行優化。有關其他的方面,讓我們介紹一下頁面空間清理、動態的 xmalloc、記憶體關聯和 Watson malloc。

  • 頁面空間清理:在某些情況下,這種特性允許系統釋放分頁空間磁碟塊,這樣一來,您就不需要為給定的工作負載配置相應的分頁空間。僅在使用延遲頁面空間分配策略時,才能使用這種特性。
  • 動態的 xmalloc 除錯 (xmdbg):這種特性通過改進記憶體分配的整體診斷功能,提高了系統的可靠性。。它允許客戶改變收集的診斷記憶體量,而無需重新啟動。
  • Watson malloc:與記憶體碎片的預設實現相比,這種新的 malloc 子系統能夠快速處理一些小的請求。與預設實現 Yorktown 相比,它所消耗的記憶體非常少。為了方便除錯,還新增了一些新的特性,以幫助您修復各種記憶體分配問題。
  • 改進的多種頁面大小支援:正如前面在優化部分中所介紹的,現在有四種不同的頁面大小可供使用。這些大小分別為:
    • 4KB
    • 64KB
    • 16MB
    • 16GB
  • VMM 監視工具:一些監視工具,如 vmstat 和 svmon,都經過了優化,以便支援 POWER5 體系結構的虛擬化功能。現在,它們還支援這部分內容中所介紹的一些改進功能。在本系列文章的第 2 部分中,我將會詳細地介紹這些變化,使您能夠深入地瞭解 AIX 的各種記憶體監視工具,以確定瓶頸、以及分析歷史趨勢和資料。
  • 記憶體關聯:對於 AIX Version 5.3,您無法禁用記憶體關聯,在 AIX Version 5.2 中也同樣如此。這樣做的目的是,在記憶體模組中為處理器上產生缺頁的程式提供記憶體分配的功能。在完成了記憶體分配之後,處理器可以首先訪問附加到其自身模組的記憶體,然後查詢其他的模組,這樣可以提高效能。要禁用 AIX Version 5.2 上的記憶體關聯支援,您可以使用下面的 vmo 命令: vmo -o memory_affinity=0

您還應該注意,不再需要在 rc.tune 中儲存任何可調整的設定。現在,新的方法使用 /etc/tunables,這無疑是一項改進。儘管這個特性是在 AIX Version 5.2 而不是 Version 5.3 中引入的,但是仍然值得在這裡進行說明。

總結

如前所述,在您對 AIX 進行優化或監視之前,您必須設定一個基準。在進行優化之後,您必須捕獲資料並分析更改所帶來的結果。如果沒有這類資訊,您將無法瞭解優化工作的實際效果。在本系列文章的第 1 部分中,您瞭解了所有關於 AIX 的 VMM 的內容及其工作方式。您還對一個 Oracle 系統進行了調整,以優化記憶體子系統的使用。您研究了一些重要的核心引數、它們的用途以及如何對它們進行優化。在學習的過程中,您研究了近年來 AIX Version 5.3 中與記憶體有關的一些根本變化,包括某些引數和改進。

第 2 部分重點關注於系統監視的細節,以確定記憶體瓶頸,分析趨勢和結果。第 3 部分重點關注於交換空間和對 VMM 進行優化以實現效能最大化的其他方法。


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

相關文章