歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 如何讓Hyper-V發揮最佳性能?

如何讓Hyper-V發揮最佳性能?

日期:2017/2/28 16:00:11   编辑:Linux教程

為新部署的微軟Hyper-V環境中的主機和網絡挑選合適的硬件並非易事,更不用說在生產環境中衡量和監控性能這項任務了。在本文中,我將剖析組成Hyper-V底層硬件架構的不同部件,先從處理器的配置開始說起,之後會介紹內存、存儲和網絡等子系統。

然後我們會深入介紹提升性能的方法和技巧、如何選擇合適的Hyper-V版本、配置方面的常見問題,最後介紹虛擬機的性能監控以及這與物理環境監控有何不同之處。

注意:所有建議都適用於Windows Server 2008 R2(含服務包1)中的Hyper-V。就可擴展性方面的局限而言,即將推出的Windows Server 8中新的Hyper-V版本有了很大的改進,但是這不是本文探討的話題。這裡給出的建議只適用於最新的Windows版本。

虛擬處理器和邏輯處理器

我接觸的IT管理員對於虛擬處理器和邏輯處理器是什麼,它們對於某一個物理主機上虛擬機的最大數量有何影響經常存在一種誤解。這不僅與分配給虛擬機的處理器數量有關,還與每個主機的物理內存數量直接有關(下一回會介紹)。

邏輯處理器是多核處理器的一個核心,所以一個四核處理器有四個邏輯處理器。如果該四核處理器有超線程(Hyper Threading)技術,它會顯示為八個核心;這意味著,你的系統有八個邏輯處理器。盡管微軟的說明文檔這麼介紹邏輯處理器,但是要注意:超線程並不會神奇地讓處理器容量翻番。為了穩妥起見,就看核心算作邏輯處理器——如果你啟用了超線程技術,其數量也不會翻番。

虛擬處理器是你分配給一個個虛擬機的資源;你能分配多少個虛擬處理器,取決於訪客/虛擬機操作系統。在這裡,操作系統版本越新,功能就越強;所以Windows 2008/2008 R2能與四個虛擬處理器協同運行,而Windows Server 2003只能被分配一兩個虛擬處理器。SUSE Linux企業版、CentOS和紅帽企業版Linux(它們都是得到支持的操作系統版本)最多可以被分配四個虛擬處理器。如果你在虛擬桌面基礎架構(VDI)環境中運行客戶機操作系統,Windows 7最多可以與四個虛擬處理器協同運行,Vista能看到兩個虛擬處理器,Windows XP SP3能看到兩個虛擬處理器。這裡有更詳細的信息:http://technet.microsoft.com/en-us/library/cc794868(WS.10).aspx。

就因為你為某一個虛擬機分配了兩個或四個虛擬處理器,並不是說你應該這麼做。首先,由於跨處理器的通信,在任何多處理器系統中存在一定的開銷——無論是物理處理器還是虛擬處理器。但是在較新的操作系統中開銷比較低,所以Windows 2008 R2虛擬機使用四個虛擬處理器沒什麼問題,而Windows Server 2003可能需要進行測試,看看在你的特定環境下使用兩個虛擬處理器有沒有好處。其次,這完全取決於工作負載——有些應用程序是密集的多線程(想一想SQL Server等類似應用),使用幾個虛擬處理器比較好;而單線程應用程序或者只有幾個線程的應用程序得到的好處並不大。

另一個常見的誤解是,為虛擬機分配一個或多個虛擬處理器與物理核心有關系。為虛擬機分配虛擬處理器其實更像為虛擬機分配一段預定的處理器時間,而虛擬機管理程序實際上把運行虛擬機的負擔分攤到所有可用的處理器核心上。

分配給某一個主機上多個虛擬機的虛擬處理器數量與微軟的這個建議密切相關:一個系統中每個邏輯處理器的虛擬處理器至少是4個,每個邏輯處理器的虛擬處理器最多是8個。例外情況是:如果你在VDI環境下是清一色的Windows 7虛擬機,支持的最大比率是12;也就是說每個邏輯處理器的虛擬處理器最多可以是12個。

如果你有配備2個四核處理器(即八個邏輯處理器)的Hyper-V主機,那麼運行8個虛擬機完全沒問題,每個虛擬機有4個虛擬處理器(共32個虛擬處理器)和最多16個虛擬機(共64個虛擬處理器)。如果你為每個虛擬機只分配了兩個虛擬處理器,那麼在每個虛擬機一模一樣的這個例子中把那些數量提高一倍。當然,在實際情況下,不同虛擬機中虛擬處理器的數量會有所不同,具體看裡面運行的工作負載。

想查看你主機上虛擬處理器與邏輯處理器的比率,你可以手動查看每一個運行的虛擬機,然後累計被分配的虛擬處理器的總數,這個方法不是很方便。更好的辦法就是運行這個簡單的PowerShell cmdlet命令,它會給出答案:

write-host (@(gwmi -ns root\virtualization MSVM_Processor).count / (@(gwmi

Win32_Processor) | measure -p NumberOfLogicalProcessors -sum).Sum) "virtual

processor(s) per logical processor" -f yellow

Copyright © Linux教程網 All Rights Reserved