自從引入 POWER5 技術以來,虛擬化提供了許多出色的特性。它是服務器整合的基礎;有助於減少計劃內停機時間,對於綠色計算領域很重要。更快更大的服務器不但有更多的可用內存,而且包含 Virtual I/O (VIO) 服務器、Virtual Ethernet、shared Ethernet adapter (SEA)、Virtual SCSI 和 Micro-Partitioning 等功能。另外,Simultaneous multi-threading (SMT) 可以顯著提高大多數工作負載的性能。但是,使用這些特性的關鍵是至少要安裝 AIX V5.3(或 Linux),這是使用這些新特性所需的 OS 版本。基於 POWER6 處理器的服務器上的 AIX V6 提供更高級的虛擬化特性。
POWER5 和 POWER6 服務器的另一個好處是,它們可以在同一台服務器上的不同 LPAR 中同時運行多個不同的 OS。一台服務器可以同時運行 AIX V5.3、AIX V6.1、SUSE Linux Enterprise Server 和 Red Hat Enterprise Linux,它們都在自己的 LPAR 中運行。另外,可以使用 VIO 服務器功能支持它們。hardware management console (HMC) 或 integrated virtualization-manager (IVM) 軟件管理服務器。
選項和術語
與虛擬化有關的術語比較混亂。術語分為三個領域:CPU、內存和 I/O(網絡和磁盤)。但糟糕的是,一些命令使用略有不同的縮寫詞表示相同的東西。在 POWER6 處理器上,通過稱為 PowerVM 的特性提供虛擬化。這個特性在 POWER5 系統上稱為 Advanced Power Virtualization。POWER6 系列包含三個服務器版本:Express、Standard 和 Enterprise。Express 版只能在入門級系統(Power 520 和 Power 550)上使用,它的功能有限,比如只支持 IVM 和在 VIO 服務器中包含三個 LPAR。Standard 版提供所有虛擬化特性,但是不包括兩個為 Enterprise 版保留的功能。Enterprise 版在 Standard 版的基礎上增加了 live partition mobility 和 Active Memory Sharing 功能。
對於 POWER5 和 POWER6 服務器,總是運行 POWER Hypervisor,它提供把物理實體(CPU、內存和 I/O 設備等)與實際軟件或 LPAR 隔離開的功能。通過運行 VIO 服務器支持客戶機 LPAR 可以進一步增強虛擬化功能。VIO 服務器是定制的 LPAR,提供 SEA 和 Virtual SCSI 功能以及 live partition mobility 和 Active Memory Sharing。以前,即使 LPAR 很少使用 I/O 卡,也必須把整個槽分配給 LPAR;通過使用 VIO 服務器,可以在 LPAR 之間共享 PCI 槽中的卡。這可以顯著減少 I/O 抽屜、I/O 卡和相關成本。
設置
一定要了解內存和 CPU 資源的三個設置。最小值是引導 LPAR 所需的最低量;在 LPAR 正常引導時,如果資源可用,它會使用期望值;最大值是正在運行的 LPAR 可以使用動態 LPAR 操作把資源提高到的上限。
Virtual Ethernet 和 SEA
Virtual Ethernet 是從 AIX V5.3 開始引入的,它並不需要 PowerVM。它讓兩個 LPAR 可以通過 Hypervisor 和 Vrtual Ethernet 通道通信。Virtual Ethernet 傳輸網絡通信流需要一些 CPU 和內存。它還支持 Virtual LAN 和其他安全機制。
SEA 利用 Virtual Ethernet。SEA 並不把以太網適配器分配給 VIO 服務器上的每個 LPAR,而是把實際適配器(或聚合在一起的適配器組)分配給 VIO 服務器。LPAR 使用 Virtual Ethernet 與 VIO 服務器通信,必須傳輸到機器外的通信流都通過 VIO 服務器中的 SEA 發送出去。為了提供冗余,通常用兩個 VIO 服務器作為 SEA,一個設置為主 SEA,另一個在執行故障轉移時運行。SEA 可以減少系統上以太網卡的數量並提供故障轉移和冗余。
Virtual SCSI
以前,如果希望為 LPAR 提供引導磁盤,就必須為連接磁盤的卡提供一個槽,這個槽是這個 LPAR 專用的。隨著服務器越來越大、越來越快,需要在其中整合更多的 LPAR,這會顯著增加引導 LPAR 所需占用的磁盤和槽數量,更何況還有實際數據磁盤。Virtual SCSI 讓 VIO 服務器擁有適配器和磁盤,VIO 服務器可以分割磁盤並把部分磁盤(或整個磁盤)提供給 LPAR,讓客戶機 LPAR 認為自己擁有完整的引導磁盤。例如,根據 rootvg 的干淨程度,大多數 LPAR rootvg 的大小在 30 到 45 GB 之間。目前最小的磁盤大約為 146 GB。通過使用 VIO 服務器,這個 146 GB 的磁盤可以輕松地分割為三個邏輯卷,每個邏輯卷可以作為一個 LPAR 的引導卷。即使為了提供冗余使用兩個 VIO 服務器,這仍然可以顯著減少磁盤、PCI 卡和 I/O 抽屜。
內存
直到不久之前,內存的情況還非常簡單:內存是 LPAR 專用的。一定要記住,用來跟蹤真實內存到虛擬內存映射的 Hypervisor 頁面表條目的大小是根據 LPAR 的最大內存計算的,而不是根據期望內存。用戶根據經驗設置 LPAR 的最大內存,讓 Hypervisor 的開銷不會超過必要量太多。例如,如果服務器有 128 GB 內存,而 LPAR 的期望內存為 4 GB,那麼把最大內存設置為 8 GB 左右而不是 128 GB。
這些頁面表條目的 Hypervisor 開銷的計算方法通常是,最大內存設置除以 64,然後向上取整到最接近的邏輯內存塊大小。對於上面的示例,如果把最大內存設置為 128 GB,Hypervisor 就會為這個 LPAR 的頁面表條目保留至少 2 GB 內存,盡管期望值只是 4 GB。如果最大內存設置為 8 GB,那麼只保留 128 MB(根據邏輯內存塊大小,也可能保留 256 MB)。
4 月,IBM 發布了 Active Memory Sharing 特性。這個工具提供可以由分區共享的內存池,允許在某些情況下過量使用內存,這樣就不必購買很多內存。Active Memory Sharing 需要 AIX V6.1(或 IBM i 或 Linux)、POWER6 硬件和一些特定的固件版本。它還需要 PowerVM Enterprise 版,要求 LPAR 中的所有資源都是虛擬化的,LPAR 必須在共享處理器池中(使用 Micro-partitioning)。
Active Memory Sharing 是為內存需求變化大的 LPAR 設計的。VIO 服務器有一組特殊的 Active Memory Sharing 分頁設備,在另一個 LPAR 需要內存時,可以根據設置時選擇的選項交換出 LPAR 的內存。Active Memory Sharing 並不適用於內存使用量非常穩定或需要可預測的高性能的工作負載。它非常適合大多數測試和開發環境。關於 Active Memory Sharing 如何工作的更多信息,請參見 “Upping the Ante” (www.ibmsystemsmag.com/aix/junejuly09/coverstory/25427p1.aspx)。
CPU
討論 CPU 時使用的術語也很混亂。在 IBM Power Systems 環境中,CPU 表示單一處理器或單一處理器核。對於其他廠商,不一定是這種含義,所以最好使用 “核” 這個詞,尤其是在討論許可證時。
核要麼分配給 LPAR,要麼放在共享處理器池中。有一個特性稱為 dedicated donating,但是它的行為基本上與共享處理器池相似。對於專用的核,在引導時把物理核分配給 LPAR,同一個核一直由這個 LPAR 使用。因為一個時鐘周期提供 10 毫秒 (ms) 的分派窗口,所以核的分派窗口是 10 ms。當前沒有分配給專用 LPAR 的所有核通常都放在共享處理器池中。
在 POWER6 技術出現之前,只有一個共享處理器池。POWER6 服務器支持最多 64 個池,默認的池是 pool 0。如果把 LPAR 定義為使用共享處理器池,它們就可以使用 Micro-partitioning 功能。這意味著可以給 LPAR 分配一個核的十分之一,如果設置正確,LPAR 可以動態地收縮和增長。
基於 POWER5 處理器的 Power Systems 服務器支持 SMT。在基於 POWER5 和 POWER6 處理器的服務器上,許多寄存器是雙重的,所以可以在同一個分派窗口中給同一個核分派兩個線程,讓它們同時運行,這樣就可以利用流水線寄存器復制提供的優勢。
虛擬 CPU、處理單元和邏輯 CPU 這三個概念會給理解處理能力設置造成困擾。首先,處理能力基本上是衡量可以使用的資源的指標。就像一品脫的瓶子有固定的容量,在給 LPAR 分配 CPU 和內存等資源時,也是指定可以使用的資源量。
專用的 CPU
在專用環境中,有一個核的服務器會顯示一個處理器(可能在 lsdev –Ccprocessor 的輸出中表示為 proc0)。如果關閉 SMT,vmstat 中的 lcpu 會顯示有一個邏輯 CPU,lparstat 顯示一個在線的虛擬 CPU。在這種情況下,這兩個概念不會造成混淆。在關閉 SMT 時,vmstat 中的 lcpu=1 意味著一個真實的核分配給這個 LPAR。在分派線程時,它被分派給 proc0,proc0 代表真實的核。
如果打開 SMT 並運行 vmstat 和 lparstat,會在 vmstat 中看到 lcpu=2,而 lparstat 顯示一個在線的虛擬 CPU。在專用環境中,沒有虛擬 CPU 這樣的概念,但是命令術語不變。lparstat 中的虛擬 CPU 實際上就是真實的 CPU。但是,如果打開 SMT,就會出現邏輯 CPU 的概念。每個邏輯 CPU 代表可以在同一個核上同時運行的線程之一。現在可以使用 mpstat –s 查看分派線程的情況。在打開 SMT 時,vmstat 中的 lcpu=2 意味著有一個核。在分派線程時,它被分派給邏輯 CPU,而邏輯 CPU 映射到 proc0,proc0 代表真實的核。
在專用環境中,有 5 個關鍵的設置:最小處理器數量、期望處理器數量、最大處理器數量、dedicated donating 以及一個決定在 LPAR 不運行時是否把核返回給池的選項。期望處理器數量是這個 LPAR 在引導時盡可能嘗試使用的數量。專用 LPAR 的所有處理器設置都是表示核數的整數。
共享的 CPU
在共享 CPU 的環境中,虛擬處理器或 CPU 的概念是有意義的。核放在處理器池中,然後通過特定的設置給 LPAR 分配這個池。在核分配方面,現在有 6 個設置:最小、期望和最大處理器單元,最小、期望和最大虛擬處理器數量。因為可以把核的一部分分配給 LPAR,所以使用 “處理器單元 (PU)” 這個詞,而不使用核。
例如,我們為一個 LPAR 設置最小值 0.1 PU、期望值 0.8 PU 和最大值 6 PU。還為它設置最小值 1 個虛擬處理器、期望值 2 個虛擬處理器和最大值 6 個虛擬處理器,而且它是不封頂的。打開 SMT。LPAR 按照期望設置(0.8 PU 和 2 個虛擬處理器)引導。
vmstat 命令顯示 LCPU 為 4,lparstat 顯示 2 個在線的虛擬 CPU。vmstat 和 lparstat 都顯示標稱處理能力為 0.8,vmstat 還顯示 %entc 和 pc 字段。
PU 的期望設置(這裡是 0.8)也稱為標稱處理能力。在 vmstat 中,%entc 是標稱處理能力中正在使用的百分比,pc 是當前使用的處理器單元數量。在 LPAR 引導並獲得期望的 PU 時,就會保證它隨時可以使用期望的 PU。如果 LPAR 不使用這些 PU,Hypervisor 可以把它們分配給另一個 LPAR。如果 LPAR 是不封頂的,它可以超過它的標稱處理能力,使用其他 LPAR 不使用的處理器資源。
虛擬處理器數量在共享的環境中有幾個用途。首先,虛擬處理器數量決定 LPAR 認為它有多少個核。如果 VP=2,那麼 LPAR 有 proc0 和 proc2,它認為自己有 2 個物理核。對於期望設置為 0.8 PU 的情況,這相當於有 2 個虛擬處理器,每個的初始分派窗口為 4 ms(對於完整的核應該為 10 ms)。在分派這兩個虛擬處理器時,它們可以分派給相同或不同的核。系統會嘗試把它們分派到以前運行它們的核上,但是不保證這一點。必須特別注意虛擬處理器設置,因為它們還告訴 LPAR 可以增長到多大,而且一些軟件廠商使用它們計算許可證費用。
在前面的示例中,LPAR 是不封頂的,共享處理器池中有 6 個核,標稱處理能力為 0.8,虛擬處理器數量設置為 2;打開了 SMT。在這種情況下,LCPU 顯示為 4:因為有兩個虛擬處理器,然後由於打開 SMT 而加倍。另外,盡管這個 LPAR 是不封頂的,但是它在增長時不能超過 2 PU,因為虛擬處理器數量實際上起到上限的作用。要想使用池中的所有 6 個核,必須把虛擬處理器數量設置為 6。不封頂的 LPAR 可以超過它的標稱處理能力(期望的 PU),但是不能超過期望的虛擬處理器數量或池大小(以其中比較小的值為准)。
關於 Micro-partitioning 技術還要注意幾點:
對於不封頂的 LPAR,每個虛擬處理器可以增加它使用的處理能力,但是不超過一個完整的核(即 10 ms)。因此,即使一個 LPAR 的標稱處理能力只有 0.8,但是如果它有兩個虛擬處理器而且不封頂,在有資源可用的情況下,它可以增長到 2 個完整的核。但是,如果虛擬處理器數量設置為 1,它就不能超過一個核。如果 LPAR 設置為封頂的,規則就不一樣了;封頂的 LPAR 不能超過它的標稱處理能力。因此,如果這個 LPAR 是封頂的,它就不能超過 0.8 PU(見表 1)。
>表 1.共享 CPU虛擬化的好處和困難
顯然,明智地實現虛擬化可以顯著地節省資源。但是,要想理解虛擬化背後的概念,一定要掌握相關術語。標稱處理能力、處理器單元、虛擬處理器、處理能力和池尤其重要。