簡介
  
    由于各種各樣的原因,大多數(shù)現(xiàn)代操作系統(tǒng)都是在虛擬地址空間中運行程序的。虛擬地址有很多優(yōu)點,包括靈活性、獨立性、可移植性以及比物理內(nèi)存更多的尋址空間,此外在一定程度上還允許底層硬件配置的獨立性。
  
    然而,在虛擬地址空間中運行程序也會帶來相應的成本。程序(包括 DB2)引用的內(nèi)存地址是虛擬地址。每次為程序指令或數(shù)據(jù)處理內(nèi)存位置時,都需要將虛擬地址轉(zhuǎn)換成物理(或?qū)嶋H)內(nèi)存地址。這種轉(zhuǎn)換是由一個頁表來維護的,這個過程增加了程序的執(zhí)行時間。頁表的大小與頁面大小成反比,這意味著頁面大小越小,頁表就越大,開銷也就越大。
  
    多年來,4 KB 一直都是大多數(shù)操作系統(tǒng),包括 AIX 5L 操作環(huán)境的標準頁面大小。最近,隨著數(shù)據(jù)量和處理器可尋址內(nèi)存的增加,4 KB 的頁面大小的效率變得有些低下了。為了提高處理大量數(shù)據(jù)的應用程序的性能,基于 IBM POWER5+ 處理器且運行 AIX 5L V5.3 TL04(或更高版本)的系統(tǒng)引入了多頁面大小支持。從 AIX 5L V5.1 開始,POWER™ 處理器和 AIX 5L 操作系統(tǒng)支持兩種頁面大小(4 KB 和 16 MB)。除了這兩種頁面大小外,最新可用的頁面大小有 64 KB 和 16 GB。64 KB 的頁面與 4 KB 在行為上是相同的。(也就是說,這些頁面內(nèi)存不是固定的,可以對它們進行分頁。)
  
    為了利用最新可用的頁面大小,DB2 9 自動檢測系統(tǒng)中可用的頁面大小。如果 64KB 頁面大小可用,那么 DB2 會將一些進程和所有共享內(nèi)存區(qū)域的默認大小設置為 64 KB。從 IBM DB2 Universal Database ™ (UDB) V8.2.5 開始,DB2 還增加了對 16 GB 頁面的支持。
  
背景知識
  
    讓我們看看進程運行時環(huán)境,了解清楚為什么大型頁面對諸如 DB2 之類的企業(yè)應用程序有如此高的價值。
  
   進程運行時環(huán)境
  
   在運行任何程序之前,操作系統(tǒng)裝載器必須將它裝載到實際內(nèi)存中。在 AIX 5L 環(huán)境中,用于運行進程的內(nèi)存被分成各種不同的內(nèi)存區(qū)域。用于進程的私有區(qū)域有:text、stack 和 data/heap,每個區(qū)域?qū)S糜谀硞€特定的用途: 
   text 區(qū)域存儲進程的指令。
  data/heap 區(qū)域包含動態(tài)分配的內(nèi)存和可全局訪問的程序數(shù)據(jù)(例如 DB2 代理私有內(nèi)存)。
  stack 區(qū)域用于子程序返回地址,也用于存儲自動數(shù)據(jù)。


   另外還有一個非私有區(qū)域,稱為共享內(nèi)存,這是 DB2 和其他多進程應用程序廣泛采用的進程間通信機制。DB2 使用共享的內(nèi)存區(qū)域來有效地在相互協(xié)作的 DB2 進程(如 DB2 代理)之間處理和共享數(shù)據(jù)(主要用于緩沖池)。DB2 還將共享內(nèi)存用于各種其他的堆。
  
   如前所述,進程所引用的內(nèi)存地址是虛擬地址,需要將其轉(zhuǎn)換成物理地址。對于每個正在運行的進程,虛擬地址與物理地址之間的映射是在一個稱作頁表的數(shù)據(jù)結(jié)構中維護的。頁表的數(shù)量與虛擬地址空間的大小成比例。因此,頁表的大小就很重要。為了加快地址轉(zhuǎn)換,架構中有一個 processor-on-a-chip (PoC) 緩存和相關的轉(zhuǎn)換后備緩沖器 (TLB) 邏輯。TLB 是一個較小的緩存區(qū)域,用于存儲最近的地址轉(zhuǎn)換,以便再次使用。
  
  大型頁面的優(yōu)點
  
    除了處理器時鐘速度外,另一個重要的處理器性能度量是每條指令的時鐘周期(CPI)。實際上,CPI 是對運行一條指令需要多少時間的度量。通常意義下的 CPI 是指平均或規(guī)格化的 CPI。CPI 越低,則執(zhí)行越快,性能也就越好。
  
    TLB 緩存條目重用(緩存命中)意味著更快的地址轉(zhuǎn)換,還意味著對物理內(nèi)存的更快的訪問。如果 TLB 沒有命中,那么就需要訪問存儲在主存中的頁表,而這樣做需要消耗相當多的處理器周期。增加進程的地址空間(也就是說,從 32 位地址空間增大到 64 位地址空間)這種做法已經(jīng)變得越來越普遍了,但是這樣會增加頁表的大小,從而降低地址轉(zhuǎn)換的速度。
  
    為解決這個問題,有兩種選擇。一種選擇是增加 TLB 大小。然而,由于芯片空間的限制,TLB 的大小不能成比例地增加。另一種選擇是通過減少頁表中的條目來減少頁表的大小。前面已經(jīng)指出,頁表的大小與頁面大小是成反比的,這意味著增加頁面大小可以使頁表變得更小,而且,每個 TLB 條目可以滿足更多的地址轉(zhuǎn)換。(也就是說,頁面越寬,每個頁面存儲的信息也就越多。)
  
    POWER5+ 處理器架構(運行 AIX 5L 操作系統(tǒng))通過引入多頁面大小來解決頁表問題。一個應用程序可以選擇與其工作負載的大小和特性相符的頁面大小。在本文的后面您將看到,這種思想可以產(chǎn)生相當大的性能優(yōu)勢。
  
  AIX 5L 多頁面大小支持
  
    這一節(jié)對 AIX 5L 的多頁面大小支持作一個簡要的概述。在簡介部分已提到,POWER5+ 處理器和 AIX 5L V5.3(具有 5300-04 建議的技術級別)引入了對兩種新的虛擬內(nèi)存頁面大小的支持:64 KB 和 16 GB。16 GB 的頁面僅用于性能非常高的環(huán)境,而 64 KB 的頁面則是為通用目的而設計的。實際上,對于大多數(shù)工作負載,使用 64 KB 的頁面比使用 4 KB 的頁面更好。我們將在本文的后面討論對 DB2 使用 64 KB 的頁面所帶來的性能優(yōu)點。分配 16 GB 的頁面則需要 IBM Hardware Management Console (HMC) Version 5 Release 2 機器代碼。
  
    當在基于 POWER5+ 處理器的系統(tǒng)上運行 5300-04 技術級別的 64 位 AIX 5L 內(nèi)核時,對 64 KB 頁面大小的支持是自動啟用的,不需要進行系統(tǒng)配置或調(diào)優(yōu)。
  
    注意,64 KB 頁面完全可以進行分頁,并且 64 KB 頁幀的池的大小是動態(tài)的。AIX 5L 操作系統(tǒng)管理池的大小,并根據(jù)不同頁面大小的需要改變 4 KB 和 64 KB 頁幀的數(shù)量。然而,16 MB 頁面大小需要使用 vmo 命令對 AIX 5L 進行配置。請參閱本文 參考資料 部分,以獲得關于 AIX 對多頁面大小支持的更多信息。
  
    可以使用 AIX 5L svmon 和 vmstat 命令來監(jiān)視系統(tǒng)上 4 KB 和 64 KB 頁幀的數(shù)量。例如,要顯示關于每種頁面大小的 DB2 進程統(tǒng)計信息,可以使用 -P 標志、 DB2 進程 ID (PID) 和 svmon 命令:




# svmon ?CP 852128
——————————————————————————-
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB
852128 db2sysc 372534 65669 0 371671 Y N N

PageSize Inuse Pin Pgsp Virtual
s 4 KB 4521 0 0 3657
m 64 KB 302477 133 0 302478

Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
0 0 work kernel (lgpg_vsid=0) L 65536 65536 0 65536
Addr Range: 0..65535
2e845f 78000048 work default shmat/mmap m 4096 0 0 4096
Addr Range: 0..4095
1987b1 78000021 work default shmat/mmap m 4096 0 0 4096

… output snipped …



  DB2 多頁面大小支持的啟用
  
    從 DB2 9 開始,DB2 自動為選擇的內(nèi)存區(qū)域檢測和使用 64 KB 頁面大小。在此版本之前,DB2 默認情況下都是使用 4 KB 的頁面大小,同時在支持 16 MB 頁面的系統(tǒng)上提供了自定義配置 16 MB 頁面的能力。POWER5+ 架構和 DB2 UDB V8.2.5 還引入了 16 GB 大型頁面的自定義配置。
  
    對于 DB2,系統(tǒng)主存的最大消耗者是它的緩沖池,這個緩沖池基本上是一個單獨的、較大的共享內(nèi)存區(qū)域。DB2 支持緩沖池共享內(nèi)存區(qū)域使用底層系統(tǒng)上可用的所有頁面大?。? KB、64 KB、16 MB 和 16 GB)。DB2 9 自動檢測 AIX 5L 操作系統(tǒng)和 POWER5 硬件是否支持 64 KB 頁面,如果支持,則允許所有 DB2 共享內(nèi)存區(qū)域(包括緩沖池、鎖列表、日志緩沖區(qū)、實用程序堆、包緩存、監(jiān)視器堆和共享排序堆)使用 64 KB 的頁面大小。本文的 性能 一節(jié)將詳細論述使用受支持的不同 AIX 頁面大小為 DB2 事務性工作負載帶來的性能提升。
  
    除了共享內(nèi)存外,DB2 還允許為代理私有內(nèi)存自定義配置 16 MB 的頁面。代理私有內(nèi)存的常見消費者是排序堆內(nèi)存,代理在查詢執(zhí)行期間使用這部分內(nèi)存來對記錄行進行排序。然而,DB2 目前不會自動為代理私有內(nèi)存啟用 64 KB 的頁面大小,也不允許為代理私有內(nèi)存自定義配置 16 GB 的頁面大小。
  
    雖然 AIX 5L 操作系統(tǒng)和 DB2 支持這些不同的頁面大小,但是配置 16 MB 或 16 GB 頁面時需要定制的硬件、AIX 5L 和 DB2 配置。要讓 DB2 選擇預先配置的 16 MB 或 16 GB 頁面,可以使用 DB2_LARGE_PAGE_MEM=DB 或 DB2_LARGE_PAGE_MEM=DB:16GB 注冊表變量。請參考當前的 DB2 和 AIX 5L 文檔,了解關于通過配置硬件和 AIX 5L 操作系統(tǒng)來使之支持 16 MB 或 16 GB 頁面的說明。
  
    16 MB 和 16 GB 頁面大小都要求小心地調(diào)整分配給這些不同頁面大小的 AIX 內(nèi)存池的內(nèi)存大小。這時要特別小心,因為如果配置不當,則可能導致 4 KB 或 64 KB 頁面大小的池過度分頁。當分配 16 MB 和 16 GB 的頁面時,它們就在內(nèi)存中扎下根來,AIX 5L 操作系統(tǒng)不能動態(tài)地移動較大頁面大?。?6 MB 或 16 GB)的池與較小頁面大?。? KB 或 64 KB)的池之間的頁面。然而,如果為 16 GB 或 16 MB 的池分配了足夠的內(nèi)存,那么工作負載就可以在性能方面受益。
  
    隨著 64 KB 頁面的引入,運行在基于 POWER5+ 處理器硬件和 5300-04 技術級別上的 AIX 5L 操作系統(tǒng)上的 DB2 應用程序可以自動利用更大的頁面大小所帶來的性能優(yōu)點,而不會導致任何用戶或管理開銷。這里完全沒有必要將 64 KB 頁面固定在內(nèi)存中,AIX 5L 操作系統(tǒng)可以動態(tài)地移動 4 KB 和 64 KB 頁面大小的池之間的頁面。
  
    除了所有 DB2 共享內(nèi)存區(qū)域外,DB2 9 還為它的進程棧自動使用 64 KB 頁面,從而進一步提高性能,同時又不帶來任何資源開銷。
  
  性能
  
    本文之前的幾個小節(jié)主要討論較大頁面大小在性能方面的關鍵優(yōu)點,以及它們在 DB2 中的使用。在這一節(jié)中,您將了解到使用內(nèi)部在線事務處理(OLTP)工作負載時的性能結(jié)果(用 DB2 9 進行評測)。
  
    我們所描述的性能結(jié)果是從兩組系統(tǒng)上收集的:
  
    一個是 IBM System p5? 570 Model 9117-570,使用頻率為 2.2 GHz 的 16 POWER5+ 處理器和 512 GB RAM
    其中創(chuàng)建了 8 TB 的數(shù)據(jù)庫。
    為 DB2 緩沖池分配了 473 GB 內(nèi)存(從 512 GB 的 RAM 中分配)。
    一個是 IBM System p5 520 Express Model 9131-52A,使用頻率為 1.9 GHz 的兩個 POWER5+ 處理器和 32 GB RAM
    其中創(chuàng)建了一個 25 GB 的數(shù)據(jù)庫。
    為 DB2 緩沖池分配了 18 GB 內(nèi)存(從 32 GB 的 RAM 中分配)。
    圖 1 展示了相對的性能提高,它們是在 4 KB 頁面大小與 DB2 和 the AIX 5L 操作系統(tǒng)所支持的不同頁面大小之間進行規(guī)格化之后得到的。這些度量是在一個 16 路 p5-570 上測得的。當使用 64 KB 頁面大小時,與使用 4 KB 頁面大小相比,在性能上提高了 13%。此外,當從 64 KB 變?yōu)?16 MB 的頁面時,性能提高了 8%。最后,當從 16 MB 的頁面變?yōu)?16 GB 的頁面時,性能又提高了 3%。DB2 吞吐率性能是以每分鐘的事務數(shù)量來度量的。
  
  圖 1. 4 KB 頁面與其他受支持的頁面大小之間的性能提升



  
    圖 2 將圖 1 看到的性能提升與減少的 CPI 和相應減少的 TLB 失誤率關聯(lián)起來。CPI 值越高,則運行指令所需的周期就越多,這意味著程序的運行性能未達到最優(yōu)。TLB 失誤的開銷是整個 CPI 度量中的一個重要部分。提高 TLB 命中率可以提高 CPI 度量,從而也提高程序的性能。
  
    如圖 2 所示,使用 64 KB 頁面時,DB2 工作負載的 CPI 度量提高了 11%。與使用 4 KB 的頁面相比,TLB 失誤率減少了 13%,導致工作負載的整體性能提高 13%。當使用 16 MB 和 16 GB 頁面時,TLB 命中率進一步提高,導致 CPI 成比例增長,從而取得了更高的總體吞吐率。
  
  
  圖 2. 4 KB 與其他受支持的頁面大小之間的 CPI 與 TLB 性能比較



  
    過圖 1 和圖 2 很容易推斷,使用 64 KB 的頁面大小可以明顯提高 DB2 應用程序的性能。然而用戶需要認識到,工作負載在性能上的提高是不確定的,它取決于數(shù)據(jù)庫的大小、可用的系統(tǒng) RAM 以及為 DB2 緩沖池分配的內(nèi)存。為了演示使用 64 kB 頁面大小在性能上提高的百分比,我們在采用 32 GB RAM 的 p5-520 上為相同的工作負載執(zhí)行另外一組測試。在這組測試中,在可用的 32 GB RAM 中,只有 18 GB 被分配給 DB2 緩沖池。
  
    圖 3 展示了與在 p5-570(為 DB2 緩沖池使用 473 GB 內(nèi)存)上的測試相比,在 p5-520 上獲得的吞吐率所增加的百分比。與使用 4 KB 的頁面相比,使用 64 KB 的頁面可以使性能提高 5%。
  
  
    圖 3. 使用 32 GB RAM 與使用 512 GB RAM 的系統(tǒng)上在采用 64 KB 頁面時在性能方面的提高


  


    這兩組測試得到的性能結(jié)果的不同是可以預測的,因為隨著數(shù)據(jù)庫和分配給 DB2 緩沖池的內(nèi)存的增加,TLB 緩存上的壓力也隨之增加。
  
  結(jié)束語
  
    當在支持 64 KB 頁面大小且采用最新的 AIX 5L V5.3 TL04 操作系統(tǒng)的系統(tǒng)上運行時,DB2 9 會自動檢測和使用 64 KB 頁面大小。這種較大的頁面大小可以立桿見影地提高性能。但是性能上的提高量卻是變化不定的(取決于工作負載,范圍在 5% 與 13% 之間)?,F(xiàn)在,在采用較大內(nèi)存的系統(tǒng)上,通過有效地利用 TLB 緩存限制將虛擬地址轉(zhuǎn)換為物理地址時所帶來的開銷,可以從硬件投資中獲得更高的收益。此外,DB2 還允許自定義配置 16 MB 大型頁面和 16 GB 巨型頁面,如果需要更高的性能,還可以利用這一點。
  


作者簡介


作者照片:Sunil Kamath


Sunil Kamath 是 DB2 在線事務處理(OLTP)基準和解決方案開發(fā)部的技術經(jīng)理。他從事 DB2 性能方面的工作已經(jīng)有六年多的時間了,曾領導過很多成功的擁有世界記錄的 TPC-C 和 SAP 基準。他的興趣和職責還包括探索和利用有助于提高 DB2 性能的關鍵硬件、操作系統(tǒng)和編譯器技術。您可以通過 sunil.kamath@ca.ibm.com 與他聯(lián)系。


 


作者照片:Punit Shah


Punit Shah 的主要職責是使 IBM 中間件軟件能夠使用最新的 System p 技術。他一直從事企業(yè)應用開發(fā)和性能方面的工作,編寫或者與他人合作編寫了關于這個領域的一些文章。您可以通過 punit@us.ibm.com 與他聯(lián)系。



  

分享到

多易

相關推薦