Windows Server “8 (2012)” Beta:Hyper-V 和垂直擴充 VM 虛擬主機器 Part 1

Microsoft 最吸引我的地方在於對使用者們的需求極度重視。在加入 Microsoft 之前,我大部分的職業生涯都投入在 Microsoft 競爭對手工作當中。Microsoft 針對某個市場發佈新產品時,有時候會立即搶佔市場有時則不會。我們則故意無視於他們新產品的優勢,以能夠挑出他們產品的缺陷而感到高興,為我們在某些方面超越他們也感到歡欣鼓舞。就在 Microsoft 尚未推出 Hyper-V 3.0 之前,我們仍舊訂定出售股票權值的時程。但是我低估了 Microsoft 對於使用者們的關心程度,以及他們不遺餘力的滿足使用者一切需求的勇氣,正是這些品質吸引我加入這個團隊。Hyper-V 一直是一項出色的虛擬化技術,十分受到使用者們歡迎,但是我們仍然有些後續工作要做。我們一直堅持聆聽使用者的聲音不斷進行改良。Windows Server“8 (2012)”採用的虛擬化技術是 Hyper-V 3.0,我相信您一定會喜歡它。

Hyper-V 3.0 有一個龐大而全面的功能列表,我們將會發佈一系列部落格文章專門來進行探討。今天我們先將一篇分為二個部分的部落格文章開始,重點探討 Hyper-V 功能的其中一個方面,也就是它對於「垂直擴充 (Scale-Up) 」VM 虛擬主機的支援。單純從支援程度來看的確引人注意(支援 32顆邏輯處理器、1TB RAM、64 TB 虛擬硬碟),但是正如 Jeff Woolsey 將在本篇部落格文章中所展示的那樣,提高運作效能並非只是增大這些支援程度數字而以。Jeff 將會介紹 Hyper-V 3.0 中所支援的 Guest NUMA(Non-Uniform Memory Access)機制。過去,NUMA 機制作為一種新潮的技術但是僅用於高檔伺服器主機上,但是現在幾乎所有伺服器都已經採用這種技術,因此提供相對應的支援也變得十分重要。今天看來似乎很新潮和進階的技術到了明天就變成了常見和必備的技術了。許多工作負載(例如 SQL Server)都利用 NUMA 機制來提高可擴充性和效能。

在看到我們的 Hyper-V 3.0 垂直擴充數字和支援 Guest NUMA 機制時,您可能會認為這些功能特色遠超過您目前所需。但是最重要的是有了 Hyper-V 3.0,您就再也不用擔心有哪些工作負載是可以虛擬化的而哪些不能。Hyper-V 3.0 將使您能夠輕鬆虛擬化所有類型的工作負載,還能夠滿足未來可能出現新的資源要求。建議您下載 Beta 版本親自體驗它的強大功能。

本部落格文章由 Windows Server 團隊的首席專案經理 Jeff Woolsey 所撰寫。

虛擬化粉絲們,大家好!

首先,Windows Server 團隊成員對你們表示衷心的 感謝

自從幾周前發佈 Windows Server“8 (2012)”Beta 以來,來自世界各地的意見反應如潮水般湧來,Windows Server 中的所有技術以壓倒性的優勢贏得全球使用者的一致好評。對此,我們感到激動萬分,同時以謙卑的態度接受這些讚賞。

再次感謝您。

我們來談談垂直擴充 (Scale-Up)
在 Windows Server“8 (2012)”的開發過程當中,其中一個核心目標便是建立最優秀的雲端平台。無論是部署在小型、中型、企業級還是超大代管雲端基礎架構中,我們都希望能幫助您對營運進行雲端優化。建立最好雲端平台其中一個方面便是採用 Windows Server Hyper-V 去代管大部分的工作負載。今天,籍由 Windows Server 2008 (2012) R2 Hyper-V,我們可以輕鬆幫助您虛擬化大部分的工作負載,但是同時我們也意識到您希望虛擬化更大型的工作負載,這些工作負載可能需要數十顆核心和數百 GB 的記憶體,並且很可能連接 SAN 且具備極高的網路 I/O 要求。

Windows Server“8 (2012)”Hyper-V 正是針對這類工作負載而設計的!!

擴充並非只是增加虛擬處理器數量而以
我經常聽到有關詢問 Hyper-V 的問題是:“Hyper-V 何時能支援 4 顆以上的虛擬處理器? 我需要此功能來處理 VM 虛擬主機垂直擴充工作負載。”儘管可以了解客戶們為何會有此疑問,但是這仍然只是個表面問題,沒有全面的看待這個問題的根本。讓我們回到虛擬化層面,討論一下使用實體伺服器的應用情境。

假設您部署一台具有 8 顆 CPU 的全新實體伺服器,每顆 CPU共有 10 個採用對稱式多執行緒 (SMT) 技術的核心,因此共有 160 個邏輯處理器 (8 x 10 x 2),但是該台伺服器所配備的記憶體僅為 1 GB。在 1 GB 記憶體的限制下,邏輯處理器的運算能力就變得無關緊要,因為在記憶體不足的情況下根本無法充分利用運算資源。因此,您必須要增加 512 GB 記憶體來解決記憶體瓶頸問題。

但是,如果伺服器只配備了 2 Port 速度為 1 Gb/E 網路卡時,您仍然會受到網路 I/O 的限制。因此,您必須又新增了 4 片單 Port 的 10 Gb/E 網路介面卡來解決網路 I/O 瓶頸。然而,您的系統只配備了少數幾顆硬碟,因此又出現了另一個效能瓶頸…

因此問題的根本顯而易見!!

提高效能和達成擴充的關鍵在於「 平衡」 。您需要以整體的角度來看待整個系統。您需要兼顧 運算能力、記憶體、網路和儲存 I/O…等,並且一次解決所有問題。增加虛擬處理器並不一定能夠提升整體效能或達成擴充的目的。

在研究建立大型 VM 虛擬主機時,我們著重於整體要求,希望提供效能卓越的垂直擴充VM 虛擬主機。目前,我們將重點放在 CPU 與記憶體之間的重要關係。這就表示我們需要探討一下NUMA (Non-Uniform Memory Access)機制。在討論 Hyper-V 和垂直擴充VM 虛擬主機之前,我們先來看一下實體伺服器上的 NUMA 機制。

NUMA (Non-Uniform Memory Access
什麼是 NUMA? NUMA 在設計上已經突破了傳統對稱式多處理程序 (SMP,Symmetric MultiProcessing) 結構的可擴充性限制。傳統的 SMP 機制中所有記憶體的存取動作都會傳遞到同一個共用記憶體匯流排,每顆處理器對於記憶體及 I/O 都具有相同的存取權限。(順道一提,在大約 10 年前時 NUMA 機制並不常見,但是隨著多 CPU 多核心系統的興起,NUMA 機制目前也已經得到了廣泛的應用。)在 CPU 數量相對較少時,傳統 SMP 可以滿足需求,但是當多個運算資源爭奪而對共用記憶體匯流排進行存取時,便很快會出現問題。當執行緒多達幾十個甚至數百個時,情況將會變得更糟…

NUMA 設計為透過將運算資源和記憶體分組到不同的節點來解決此一瓶頸。然後透過記憶體一致的匯流排連接到每個節點。與目前運作的 CPU Processors 位於同一個 NUMA 節點的記憶體稱為本地端記憶體,而任何不屬於目前正在運作的Processors所在節點其記憶體則被視為遠端記憶體。之所以稱之為 Non-Uniform,是因為處理器存取本地端記憶體時會比存取遠端節點記憶體來得更快。下圖為一個包含四個 NUMA 節點的系統簡單範例。圖中展示了一個最佳 NUMA 組態設定。之所以為最佳的原因包括:  
     1. 系統達成平衡。每個 NUMA 節點都配有相同大小的記憶體空間。   
     2. CPU 和記憶體分配在同一個 NUMA 節點中運作。

clip_image001[5]

最佳 NUMA 組態設定

接著我們用一個並非最佳的 NUMA 組態設定來進行比較。下圖中展示了一個非最佳的 NUMA 組態設定,而它不是最佳的組態設定其原因在於:  
     1. 系統不平衡。每個 NUMA 節點的記憶體數量及空間並不相同。   
     2. NUMA 節點 2 的記憶體數量為奇數,這表示即使系統有能力使用記憶體交錯,也很可能無法達成,因為記憶體並非成對進行安裝。(另外還取決於主機板的特色要求:成對、三個一組…等。)   
     3. NUMA 節點 2 和 3 的本地端記憶體空間不足,對於節點來說一部分記憶體存取是本地端,而另一部分則是遠端。這將會導致不一致、非線性的效能。   
     4. NUMA 節點 4 並沒有本地端記憶體,因此所有記憶體存取均是遠端。這是最糟糕的情況。

clip_image002[5]

非最佳 NUMA 組態設定

SQL Server 如何使用 NUMA
正如您在上述範例中所看到的一樣,運算和記憶體資源的不斷增加是一把二面刃。一方面,工作負載有了更多可用資源,但是另外一方面,作業系統和應用程式必須管理額外的複雜性來達成一致的擴充和更高的效能。根據這些獨特要求,垂直擴充工作負載都逐漸發展為“ NUMA 感知機制 (NUMA aware)”。Microsoft SQL Server 就是一個很好的範例。從 SQL Server 2005 開始,SQL Server 就能夠辨識 NUMA 機制,並充分利用 NUMA 機制的優勢。此篇 MSDN 文章 提供了深入的介紹。

SQL Server 對於排程器程式進行分組,以根據 Windows 所顯示的硬體 NUMA 邊界將這些排程器程式對應到 CPU 的分組上。例如 16 個邏輯運算單元有 4 個 NUMA 節點,每個節點有 4 個 CPU。這使得在節點上處理運算任務時,該組排程器程式具有更多的本地端記憶體。使用 SQL Server,您將可以進一步與硬體 NUMA 節點關聯的 CPU 細分為多個 CPU 節點。這稱之為 Soft NUMA。通常,您將會細分 CPU 以跨 CPU 節點對工作進行分區。有關軟體 NUMA 的詳細資訊,請參考 MSDN – 了解NUMA (Non-Uniform Memory Access)

當特定硬體 NUMA 節點上運作的執行緒分配記憶體時,SQL Server 的記憶體管理器將會嘗試從與 NUMA 節點關聯的記憶體中分配記憶體空間以進行本地端使用。同樣的,緩衝區將會跨硬體 NUMA 節點進行分佈。執行緒從分配到本地端記憶體的緩衝區存取記憶體,會比從外部記憶體進行存取的效率來得更高。有關詳細資訊,請參考 使用 NUMA 放大和縮小緩衝集區

每個 NUMA 節點(硬體 NUMA 或軟體 NUMA)都有一個用於處理網路 I/O 的相關 I/O 完成埠。這有助於跨多個埠分佈網路 I/O 處理。當某個用戶端連接到 SQL Server 時,將會繫結到其中一個節點。此用戶端的所有批次處理請求都將會在該節點上處理。每次在 NUMA 環境中啟動 SQL Server Instance 時,SQL 錯誤日誌都會包含說明 NUMA 組態設定的相關資訊。

周遊 NUMA 節點和遠端記憶體
您也許想知道:“周遊 NUMA 節點會對效能產生多大影響?”對此並沒有確定的答案,因為這是由許多不同因素來決定的。其中包括:   
     1. 系統是否平衡? 如果從一開始系統就組態設定不佳而且是不平衡的狀態,那麼任何軟體都沒有辦法來力挽狂瀾。(我將此項目列為第一條原因…)   
     2. 工作負載能否正確感知 NUMA 機制? 例如 SQL Server 可以正確感知 NUMA 機制,也就是說它能夠辨識 NUMA 技術,並且盡可能嘗試在實體伺服器本地端執行 CPU 和記憶體分配。   
     3. 實體伺服器是在處理器中整合記憶體控制器的新型伺服器,還是具有前端匯流排 (FSB) 的舊式實體伺服器? 如果是後者,而您又需要周遊前端匯流排中的 NUMA Hops,那麼就會嚴重影響效能…

需要記住重要的一點就是建立最佳的垂直擴充系統,您希望盡可能在實體伺服器本地端進行 CPU 和記憶體分配。而達成此一目標的最佳做法就是建置一個平衡的系統。這是對實體伺服器上 NUMA 機制的大致說明。現在我們將 NUMA 感知機制加入至 Hyper-V 技術中。首先,我們來簡單討論一下早期的 Hyper-V 版本。

Windows Server 2008 R2 SP1 Hyper-V 及早期版本的 NUMA 機制
在 Windows Server“8 (2012)”之前的版本中,Hyper-V 的 NUMA 感知能力是「 從主機角度」 來看的。也就是說 VM 虛擬主機監控程序會盡可能在實體伺服器本地端分配記憶體和 CPU 資源。預設情況下,Hyper-V 資源設定為此模式,也就是通常用戶端的工作負載會受到記憶體效能限制,而不是原始運算能力。將一個VM 虛擬主機完全部署在一個 NUMA 節點上,可以使該VM 虛擬主機的記憶體全部為本地端記憶體(假設可以按這種方式分配),進而達到最佳的整體記憶體效能。

下圖為一個簡單範例。在該範例中,假設我們有一台具備 4 顆虛擬處理器的VM 虛擬主機,其平均 CPU 使用率在 75% 以上。在 Windows Server 2008 R2 或 Windows Server 2008 R2 SP1 中,如果我們建立了一個具有 4 顆虛擬處理器的VM 虛擬主機,Hyper-V 將執行以下操作:

clip_image003[5]

Windows Server 2008 /2008 R2 中具有 4 顆虛擬處理器的VM 虛擬主機

如上圖所示,Hyper-V 建立一台 VM 虛擬主機,並在一個 NUMA 節點中以最佳方式分配資源。所有 CPU 和記憶體分配動作都在本地端完成。下面的範例則與上圖的配置形成強烈的對比:

clip_image004[5]

非最佳排程調度範例(與 Hyper-V 所執行的操作不同…)

上圖所示的組態設定需要執行大量周遊 NUMA 節點的動作。

VM 虛擬主機 的角度來說,Hyper-V 並不會在VM 虛擬主機內部提供 NUMA 拓撲。VM 虛擬主機中的拓撲看起來是一個全部記憶體均為本地端記憶體的 NUMA 節點,而不考慮實體拓撲是何種情況。在實際應用中,缺少 NUMA 拓撲對於 Windows Server 2008 R2 SP1 Hyper-V 及早期版本來說並不會是個問題,因為在單台VM 虛擬主機中可以建立的最大虛擬處理器數量為 4 顆,最大可以分配記憶體為 64 GB。這兩方面都適合現有的實體 NUMA 節點,因此為VM 虛擬主機提供合理的 NUMA 分配到目前為止都不是問題。

可擴充性的宗旨
在我們深入探討此版本 Hyper-V 帶來了哪些變化之前,先來看看有關可擴充性的主要宗旨:

>> 增加核心數量應該可以提高效能。<<

我相信這聽起來是顯而易見的事,您也一定是充滿這樣的期望才購買了多核心伺服器;然而,在某些情況下,增加核心數量可能會限制甚至降低效能,因為同步記憶體所需的代價超出額外核心所帶來的優點。下列我將透過二個範例來說明我的觀點:

假設您在 32 顆 CPU 伺服器主機 (應該所費不貲 $$$$) 上部署了工作負載,結果發現:  
     • 在範例 A 當中: 工作負載效能等同於 8 顆 CPU 的水準?   
     • 在範例 B 當中: 工作負載效能在 8 顆 CPU 時達到最高值,但更多 CPU 時卻反而下降?

clip_image005[5]

您是否對大型垂直擴充系統的投資回報率感到失望? 我也有同感!!

我想您心中 「真正期望」 的情況應該是盡可能達成接近線性的擴充,如下所示:

clip_image006[5]

我們期望籍由此版本的 Hyper-V 擴充VM 虛擬主機支援程度,並且建立具有 12、16、24、32 顆虛擬處理器的VM 虛擬主機,我們知道情況必須得到改善。由於每台 VM 虛擬主機的虛擬處理器數量超出了 NUMA 節點中的實體處理器數量,單獨的主機端 NUMA 無法使我們將硬體使用率提升到最高。最重要的是,我們希望確保 Guest OS工作負載能夠得到最佳資訊,進而以最高效率的方式運作,並且與 Hyper-V 協同運作以提供最佳的可擴充性。因此,我們需要在VM 虛擬主機中啟用 NUMA 感知機制。

Windows 8 (2012) Hyper-V :VM 虛擬主機 NUMA 感知機制
透過此版本的 Hyper-V 虛擬化技術,我們為VM 虛擬主機導入了 NUMA 感知機制。使虛擬處理器和虛擬記憶體能自動分組到各個虛擬 NUMA 節點當中,而 VM 虛擬主機則根據運算和記憶體資源的基礎實體拓撲情況,為 Guest OS 提供虛擬拓撲。Hyper-V 採用 ACPI SRAT (Static Resource Affinity Table) 機制,向所有處理器和記憶體的實體位置提供拓撲資訊。(使用 ACPI SRAT 機制提供 NUMA 拓撲是一種業界標準,這表示 Linux 和其他可以感知 NUMA 機制的作業系統,也可以利用 Hyper-V Guest NUMA 機制。)

籍由 Guest NUMA 感知機制,Guest OS 工作負載便可以使用 NUMA 資訊並且根據該資料進行自我優化行為。這表示 Hyper-V 將與 Guest OS協同運作,在虛擬資源和實體資源之間建立最好、最佳的對映,進而使應用程式能夠以最高效率的方式執行、最佳的運作效能和符合線性的擴充。此外,Hyper-V 還必須為不同實體 NUMA 拓撲一起在系統之間,進行遷移的 Guest NUMA 拓撲提供精細的組態設定控制。而要提供跨越各種不同 NUMA 拓撲的可攜性,則管理者必須要確保虛擬拓撲可以對映到VM 虛擬主機,並且即將遷移到所有目的地 VM 虛擬主機的實體拓撲。

以整體角度來看,具備兩個中高負載(使用率 75% 以上)的VM 虛擬主機時情況如下:

clip_image007[5]

正如您所看到的:  
     • VM 虛擬主機 1 其 vNUMA 節點 A 和 B 對應實體 NUMA 節點 1 和 2   
     • VM 虛擬主機 2 其 vNUMA 節點 A 和 B 對應實體 NUMA 節點 3 和 4

Guest NUMA 感知機制設定範例
在本範例中 實體 系統組態為: 1 顆 CPU並含有 8 個核心及 16 GB 記憶體。當我建立新的VM 虛擬主機時,Hyper-V 會存取基礎拓撲並且建立一個如以下方式組態設定 NUMA 的VM 虛擬主機:   
     • 每個 NUMA 節點的最大處理器數量 = 8   
     • 每個 NUMA 節點的最大記憶體 = 13,730 (此數值為總記憶體減去 Root 保留的記憶體後得出)   
     • 每顆CPU上允許的最大 NUMA 節點數 = 1

組態設定的資訊如下:

clip_image008[5]

這是對此實體系統而言最佳的 Guest NUMA 拓撲設定。此時您應該會感到疑惑,這不是表示我們把系統複雜化了嗎?我是不是需要開始計算所有伺服器中的 核心、記憶體插槽數量?

答案是否定的。這裡有一點非常重要:

>> 預設情況下,Hyper-V 會自動執行正確的操作。<<

建立VM 虛擬主機時,Hyper-V 存取基礎實體拓撲,並且將根據許多不同因素自動組態設定 Guest NUMA 拓撲,這些因素包括:  
     • 每顆實體CPU的邏輯處理器數量(每個邏輯處理器指的是一個 Core 或 Thread)   
     • 每個節點的記憶體大小

此外,我們還提供了適用於不太常見情況的進階組態設定選項。這些進階設定可以幫助您在具有不同 NUMA 拓撲的硬體之間移動VM 虛擬主機。儘管這種情況並不常見,但是我們希望透過提供這些進階功能,能夠為使用者們提供他們所需的最大靈活度。在下一篇部落格文章當中,我們將介紹根據使用者意見反應,將 Windows Server 8 Developer Preview 推進為 Windows Server“8”Beta 所進行的改善。