本系列的三篇文章深入研究?jì)却鎯?yōu)化中的參數優(yōu)化,重點(diǎn)關(guān)注于內存性能優(yōu)化方面的各種挑戰和各種最佳實(shí)踐,并且還介紹了 AIX? Version 5.3 中的一些改進(jìn)。盡管與中央處理單元 (CPU) 優(yōu)化相比,實(shí)現內存優(yōu)化可能更加困難,但它同樣是非常重要的。在 AIX 服務(wù)器中,與任何其他子系統相比,您可以對內存進(jìn)行更多的優(yōu)化工作。更改系統中的某些內存參數,可以極大地提高性能,特別是在尚未對這些參數進(jìn)行優(yōu)化的運行環(huán)境中。本系列文章的第 1 部分提供了 AIX 中內存的概述,包括對虛擬內存和虛擬內存管理器 (VMM) 的介紹。
作為一名系統管理員,您應該已經(jīng)對有關(guān)內存的基本知識非常熟悉,如物理和虛擬內存之間的區別。您可能還不是很清楚 AIX? 中的虛擬內存管理器 (VMM) 是如何工作的、以及它與性能優(yōu)化之間的關(guān)系如何。而且,在最近幾年中,有一些優(yōu)化命令和參數發(fā)生了變化,如果您較長(cháng)時(shí)間沒(méi)有使用 AIX 了,那么您可能會(huì )發(fā)現,您從前所熟悉的一些命令,現在甚至根本無(wú)法繼續使用了。本文詳細地介紹了 AIX VMM,以及優(yōu)化 VMM 所需使用的各種優(yōu)化命令。我將介紹一些監視工具,您可以使用這些工具來(lái)優(yōu)化您的系統,本文還對一些比較重要的 AIX Version 5.3 內存管理增強功能進(jìn)行概述。實(shí)現這些增強功能,即將其應用到您的系統環(huán)境,可以在您的系統中優(yōu)化內存性能。
盡管您可能會(huì )發(fā)現,與其他的子系統相比,內存的優(yōu)化更為困難一些,但是收到的效果往往更加顯著(zhù)??赡苓€有一些應該在您的系統中進(jìn)行設置的特定的優(yōu)化建議,這取決于您所運行的系統的類(lèi)型。為了幫助證實(shí)這些內容,我使用了一個(gè)特定的示例,并介紹了進(jìn)行這些參數設置的一些最佳實(shí)踐。在某些情況下,動(dòng)態(tài)地優(yōu)化一個(gè)或兩個(gè)參數,可能會(huì )使得您的系統的整體性能完全不同。
無(wú)論您需要對哪個(gè)子系統進(jìn)行優(yōu)化,有一個(gè)方面是相同的,即優(yōu)化系統—您始終應該將其看作一個(gè)正在進(jìn)行的進(jìn)程。開(kāi)始對系統進(jìn)行監視的最佳時(shí)間是當您首次將系統應用到產(chǎn)品環(huán)境中并且正常運行時(shí),而不是等到用戶(hù)抱怨系統的性能非常糟糕的時(shí)候。如果您不了解系統正常運行時(shí)的情況,并以此作為基準,那么您可能永遠也無(wú)法真正地確定是否出現了問(wèn)題。而且,一次只應該進(jìn)行一項更改,并且在進(jìn)行了更改之后,應該盡快地捕獲相關(guān)的數據并對其進(jìn)行分析,以確定這項更改究竟帶來(lái)了什么不同(如果存在的話(huà))。
這部分內容提供了與 AIX 有關(guān)的內存方面的概述。我將介紹 AIX 如何使用虛擬內存來(lái)尋址比系統中物理內存更大的內存。我還將說(shuō)明 VMM 的工作方式以及它如何處理各種請求。
任何有關(guān)內存和 AIX 的介紹都必須以對 VMM 的描述作為開(kāi)始。有時(shí)候,令 AIX 新手感到困惑的是,VMM 服務(wù)如何處理系統中所有的內存請求,而不僅僅是虛擬內存本身。在訪(fǎng)問(wèn) RAM 時(shí),VMM 需要分配空間,即使是在系統中有足夠的物理內存的情況下。它實(shí)現了分頁(yè)空間的預分配過(guò)程。使用這種方法,VMM 在幫助管理實(shí)際內存方面扮演了重要的角色,而不僅是在虛擬內存方面。下面來(lái)說(shuō)明它的工作原理。在 AIX 中,將所有的虛擬內存段劃分為若干個(gè)頁(yè)面。在 AIX 中,每個(gè)頁(yè)面的缺省大小為 4KB。所分配的頁(yè)面可以位于 RAM 或者分頁(yè)空間(虛擬內存存儲于磁盤(pán)上)。VMM 還維護一個(gè)稱(chēng)為空閑列表 的對象,該對象定義為未分配的頁(yè)幀。它們用于處理缺頁(yè)的情況。通常存在少量未分配頁(yè)面(您可以自行配置),VMM 可以使用這些頁(yè)面來(lái)騰出空間并為其重新分配頁(yè)幀??梢允褂?VMM 的頁(yè)面置換算法來(lái)選擇要重新分配頁(yè)幀的虛擬內存頁(yè)面。這種分頁(yè)算法可以確定對當前位于 RAM 中的哪些虛擬內存頁(yè)面的頁(yè)幀進(jìn)行回收,并放回到空閑列表中。AIX 可以使用所有可用的內存,除了那些配置為未分配并用做空閑列表的內存之外。
需要重申的是,VMM 的目的是管理 RAM 和虛擬頁(yè)面的分配。由此可以看出,它的目標是幫助最大限度地縮短缺頁(yè)響應時(shí)間,并在可能的情況下減少虛擬內存的使用。很顯然,假設要在 RAM 和分頁(yè)空間之間進(jìn)行選擇,在 RAM 可用的情況下,大多數人都更希望使用物理內存。另外,VMM 還將虛擬內存段劃分為兩種不同的類(lèi)別。它們分別是,使用計算內存的工作段和使用文件內存的持久段。了解這兩種類(lèi)別之間的區別是非常重要的,因為這將幫助您實(shí)現系統的最優(yōu)化。
當您的進(jìn)程對計算信息進(jìn)行處理時(shí),將使用到計算內存。這些工作段是臨時(shí)的(暫時(shí)的),并且當進(jìn)程終止或者頁(yè)面被替換時(shí),這些工作段將不復存在。它們沒(méi)有對應的持久磁盤(pán)存儲位置。在許多情況下,當一個(gè)進(jìn)程終止時(shí),將釋放其物理和分頁(yè)空間。當可用頁(yè)面出現較大的峰值時(shí),您可以在監視系統的過(guò)程中發(fā)現這種情況。在 VMM 中,當空閑物理內存較少時(shí),可以將最近沒(méi)有使用的程序從 RAM 移出到分頁(yè)空間,以幫助釋放物理內存,從而完成更多的實(shí)際工作。
與計算內存不同,文件內存使用了持久段,并在磁盤(pán)上具有持久存儲位置。數據文件或者可執行程序通常都映射為持久段,而不是工作段。數據文件可能與文件系統相關(guān),如 JFS、JFS2 或 NFS。它們一直都位于內存中,直到文件被卸載、頁(yè)面被替換、或者取消了到文件的鏈接。在將數據文件復制到 RAM 中之后,VMM 控制何時(shí)對這些頁(yè)面進(jìn)行覆蓋或者將其用于存儲其他數據。在可以選擇的情況下,大多數人更希望將文件內存調出到磁盤(pán),而不是計算內存。
當進(jìn)程引用磁盤(pán)上的某個(gè)頁(yè)面時(shí),必須將其調入,而這可能會(huì )導致再次將其他的頁(yè)面調出。VMM 常駐內存并在后臺運行,嘗試替換最近沒(méi)有使用的頁(yè)幀,其中使用到前面介紹的頁(yè)面置換算法。它還可以幫助檢測系統顛簸,當可用內存量很低并且不斷地調入和調出頁(yè)面以支持任務(wù)的處理時(shí),可能會(huì )出現系統顛簸。實(shí)際上,VMM 中提供了一種內存負載控制算法,它可以檢測系統是否出現顛簸,并嘗試去解決這種情況。如果不加以處理,系統顛簸可能會(huì )導致系統停滯,因為內核此刻過(guò)分地關(guān)注于為頁(yè)面騰出空間,而不是完成任何有實(shí)際意義的工作。
讓我們研究一些相關(guān)的工具,它們允許您對 VMM 進(jìn)行優(yōu)化,從而實(shí)現系統性能的優(yōu)化。我提供了一個(gè)環(huán)境示例,其中使用了某種方法對相關(guān)的參數進(jìn)行優(yōu)化。我還介紹了一些需要注意的關(guān)鍵參數。
在 AIX 5L? 之前,您可能曾經(jīng)使用過(guò) vmtune 命令對您的 VMM 系統進(jìn)行優(yōu)化。盡管在 AIX Version 5.2 中提供了 vmo 命令,但 vmtune 命令也可以使用,直到 AIX Version 5.3。在 AIX Version 5.3 中,您不能夠再使用 vmtune 這一命令了。盡管有一些根本的變化您需要了解,但是大多數實(shí)際參數都是相同的。
讓我們來(lái)介紹一下 AIX 5L 中頁(yè)幀方面一項重要的變化。從 POWER4 處理器開(kāi)始,AIX 可以支持最大 16MB 的頁(yè)面大小。實(shí)際上,POWER5 芯片支持四種虛擬內存頁(yè)面的大?。?KB、64KB、16MB 和 16GB。通過(guò)下面一項簡(jiǎn)單的 vmo 更改,您就可以對系統進(jìn)行優(yōu)化以提供大型的頁(yè)面,從而對于消耗大量?jì)却娴膽贸绦驑O大地提高系統性能。性能之所以得到了改進(jìn),是因為提高了 Translation Lookaside Buffer (TLB) 的命中率,這是因為 TLB 可以映射到更大的虛擬內存范圍。例如 Oracle 數據庫,無(wú)論是聯(lián)機事務(wù)處理 (OLTP) 或者數據倉庫應用程序,都可以從大型頁(yè)面的使用中獲益。這是因為 Oracle 使用了大量的虛擬內存,特別是對于其系統全局區 (SGA)。這里使用的示例是一個(gè)運行 AIX Version 5.3 的 p550 LPAR 上的 Oracle 數據庫服務(wù)器。該系統可用于 OLTP 和數據倉庫。
清單 1 中的命令分配了 16777216 字節以提供 128 個(gè)大型頁(yè)面。
# vmo -r -o lgpg_size=16777216 lgpg_regions=128
最重要的 vmo 設置是 minperm 和 maxperm。將這些參數設置為適合您的系統的值,以確保對計算內存或者文件內存進(jìn)行優(yōu)化。在大多數情況下,您并不希望調出工作段,因為這樣做會(huì )導致系統進(jìn)行沒(méi)有必要的頁(yè)面調出,并且會(huì )降低性能。以前,它的工作方式非常簡(jiǎn)單:如果您的文件頁(yè)面 (numperm%) 大于 maxperm%,那么頁(yè)面置換算法將僅替換文件頁(yè)面。當它小于 minperm 時(shí),可以替換文件頁(yè)面和計算頁(yè)面。如果它的值位于兩者之間,那么將僅替換文件頁(yè)面,除非重分頁(yè)的文件頁(yè)面的數目大于計算頁(yè)面。還有另一種方法,如果您的 numperm 大于 maxperm,您可以開(kāi)始替換持久的存儲?;谶@種方法學(xué),早期的方法是調整您的 minperm 和 maxperm 參數,將 maxperm 設置得比較低(例如,<20),而將 minperm 設置為 <=10。您可以使用這種方法來(lái)優(yōu)化您的數據庫服務(wù)器。
所有的這些方法都發(fā)生了變化。新的方法將 maxperm 設置為一個(gè)比較高的值(例如,>80),并且確保將 lru_file_repage 參數設置為 0。lru_file_repage 是在帶 ML4 的 AIX Version 5.2 和 AIX Version 5.3 的 ML1 中首次引入的。這個(gè)參數說(shuō)明了是否應該考慮 VMM 重分頁(yè)計數,以及它應該替換何種類(lèi)型的內存。其缺省設置為 1,所以您需要對它進(jìn)行更改。當您將這個(gè)參數設置為 0 時(shí),它將告訴 VMM,您希望它僅替換文件頁(yè)面,而不是計算頁(yè)面。如果您的 numperm 小于 minperm 或者大于 maxperm,這種情況會(huì )發(fā)生變化,這正是您希望將 maxperm 設置得較高而將 minperm 設置得較低的原因。我們不應該忘記一個(gè)事實(shí),對這個(gè)值進(jìn)行優(yōu)化的主要原因是因為您希望保護計算內存?;氐角懊娴氖纠?,Oracle 使用它自己的緩存,同時(shí)使用 AIX 文件緩存,但是卻產(chǎn)生了混淆,所以您希望停止它。在這個(gè)場(chǎng)景中,如果您打算降低 maxperm,那么您將會(huì )停止正在運行的應用程序緩存程序。
清單 2 設置了這些關(guān)鍵的優(yōu)化參數。
vmo -p -o minperm%=5 vmo -p -o maxperm%=90 vmo -p -o maxclient%=90
盡管您已經(jīng)習慣于對這些參數進(jìn)行更改,但是現在,您只需保持 strict_maxperm 和 strict_maxclient 的缺省數值即可。如果將 strict_maxperm 更改為 1,那么它將會(huì )對可用于持久文件緩存的內存量設置一個(gè)硬限制。通過(guò)將 maxperm 值作為緩存的上限,可以實(shí)現這一點(diǎn)?,F在,沒(méi)有必要這樣做,因為更改 lru_file_repage 參數是一種更加有效的優(yōu)化方法,而您并不希望使用 AIX 文件緩存。
還有兩個(gè)其他的重要參數需要說(shuō)明,它們是 minfree 和 maxfree。如果空閑列表中的頁(yè)面數降低到低于 minfree 參數,那么 VMM 開(kāi)始替換頁(yè)面(只需添加到空閑列表),這樣做并不是很合適。它將繼續進(jìn)行這項操作,直到空閑列表至少包含 maxfree 參數中指定的頁(yè)面數。
在較早版本的 AIX 中,當缺省 minfree 設置為 120 時(shí),通常您將會(huì )看到空閑列表為 120 或者更低,而這將導致進(jìn)行沒(méi)有必要的分頁(yè),更糟糕的是,會(huì )阻塞那些需要空閑幀的線(xiàn)程,因為這個(gè)值設置得過(guò)低。要解決這個(gè)問(wèn)題,在 AIX Version 5.3 中,將 minfree 和 maxfree 的缺省值分別提高到 960 和 1088。如果您正在運行 AIX Version 5.2 或者更早的版本,我建議進(jìn)行下面的設置,您可以使用
清單 3 中的命令,手動(dòng)地進(jìn)行更改。
vmo -p -o minfree=960 vmo -p -o maxfree=1088
讓我們先研究一下 AIX Version 5.3 中與內存有關(guān)的一些最新的變化。適當地使用 AIX Version 5.3 中的內存管理增強功能,可以幫助您高效地對系統進(jìn)行優(yōu)化。有關(guān)其他的方面,讓我們介紹一下頁(yè)面空間清理、動(dòng)態(tài)的 xmalloc、內存關(guān)聯(lián)和 Watson malloc。
頁(yè)面空間清理:在某些情況下,這種特性允許系統釋放分頁(yè)空間磁盤(pán)塊,這樣一來(lái),您就不需要為給定的工作負載配置相應的分頁(yè)空間。僅在使用延遲頁(yè)面空間分配策略時(shí),才能使用這種特性。
動(dòng)態(tài)的 xmalloc 調試 (xmdbg):這種特性通過(guò)改進(jìn)內存分配的整體診斷功能,提高了系統的可靠性。。它允許客戶(hù)改變收集的診斷內存量,而無(wú)需重新啟動(dòng)。
Watson malloc:與內存碎片的缺省實(shí)現相比,這種新的 malloc 子系統能夠快速處理一些小的請求。與缺省實(shí)現 Yorktown 相比,它所消耗的內存非常少。為了方便調試,還添加了一些新的特性,以幫助您修復各種內存分配問(wèn)題。
改進(jìn)的多種頁(yè)面大小支持:正如前面在
優(yōu)化部分中所介紹的,現在有四種不同的頁(yè)面大小可供使用。這些大小分別為: 4KB
64KB
16MB
16GB
VMM 監視工具:一些監視工具,如 vmstat 和 svmon,都經(jīng)過(guò)了優(yōu)化,以便支持 POWER5 體系結構的虛擬化功能?,F在,它們還支持這部分內容中所介紹的一些改進(jìn)功能。在本系列文章的第 2 部分中,我將會(huì )詳細地介紹這些變化,使您能夠深入地了解 AIX 的各種內存監視工具,以確定瓶頸、以及分析歷史趨勢和數據。
內存關(guān)聯(lián):對于 AIX Version 5.3,您無(wú)法禁用內存關(guān)聯(lián),在 AIX Version 5.2 中也同樣如此。這樣做的目的是,在內存模塊中為處理器上產(chǎn)生缺頁(yè)的進(jìn)程提供內存分配的功能。在完成了內存分配之后,處理器可以首先訪(fǎng)問(wèn)附加到其自身模塊的內存,然后查找其他的模塊,這樣可以提高性能。要禁用 AIX Version 5.2 上的內存關(guān)聯(lián)支持,您可以使用下面的 vmo 命令: vmo -o memory_affinity=0
您還應該注意,不再需要在 rc.tune 中保存任何可調整的設置?,F在,新的方法使用 /etc/tunables,這無(wú)疑是一項改進(jìn)。盡管這個(gè)特性是在 AIX Version 5.2 而不是 Version 5.3 中引入的,但是仍然值得在這里進(jìn)行說(shuō)明。
如前所述,在您對 AIX 進(jìn)行優(yōu)化或監視之前,您必須設置一個(gè)基準。在進(jìn)行優(yōu)化之后,您必須捕獲數據并分析更改所帶來(lái)的結果。如果沒(méi)有這類(lèi)信息,您將無(wú)法了解優(yōu)化工作的實(shí)際效果。在本系列文章的第 1 部分中,您了解了所有關(guān)于 AIX 的 VMM 的內容及其工作方式。您還對一個(gè) Oracle 系統進(jìn)行了調整,以?xún)?yōu)化內存子系統的使用。您研究了一些重要的內核參數、它們的用途以及如何對它們進(jìn)行優(yōu)化。在學(xué)習的過(guò)程中,您研究了近年來(lái) AIX Version 5.3 中與內存有關(guān)的一些根本變化,包括某些參數和改進(jìn)。
第 2 部分重點(diǎn)關(guān)注于系統監視的細節,以確定內存瓶頸,分析趨勢和結果。第 3 部分重點(diǎn)關(guān)注于交換空間和對 VMM 進(jìn)行優(yōu)化以實(shí)現性能最大化的其他方法。