為新部署的微軟Hyper-V環(huán)境中的主機(jī)和網(wǎng)絡(luò)挑選合適的硬件并非易事,更不用說(shuō)在生產(chǎn)環(huán)境中衡量和監(jiān)控性能這項(xiàng)任務(wù)了。在本文中,我將剖析組成Hyper-V底層硬件架構(gòu)的不同部件,先從處理器的配置開始說(shuō)起,之后會(huì)介紹內(nèi)存、存儲(chǔ)和網(wǎng)絡(luò)等子系統(tǒng)。
然后我們會(huì)深入介紹提升性能的方法和技巧、如何選擇合適的Hyper-V版本、配置方面的常見問(wèn)題,最后介紹虛擬機(jī)的性能監(jiān)控以及這與物理環(huán)境監(jiān)控有何不同之處。
注意:所有建議都適用于Windows Server 2008 R2(含服務(wù)包1)中的Hyper-V。就可擴(kuò)展性方面的局限而言,即將推出的Windows Server 8中新的Hyper-V版本有了很大的改進(jìn),但是這不是本文探討的話題。這里給出的建議只適用于最新的Windows版本。
虛擬處理器和邏輯處理器
我接觸的IT管理員對(duì)于虛擬處理器和邏輯處理器是什么,它們對(duì)于某一個(gè)物理主機(jī)上虛擬機(jī)的最大數(shù)量有何影響經(jīng)常存在一種誤解。這不僅與分配給虛擬機(jī)的處理器數(shù)量有關(guān),還與每個(gè)主機(jī)的物理內(nèi)存數(shù)量直接有關(guān)(下一回會(huì)介紹)。
邏輯處理器是多核處理器的一個(gè)核心,所以一個(gè)四核處理器有四個(gè)邏輯處理器。如果該四核處理器有超線程(Hyper Threading)技術(shù),它會(huì)顯示為八個(gè)核心;這意味著,你的系統(tǒng)有八個(gè)邏輯處理器。盡管微軟的說(shuō)明文檔這么介紹邏輯處理器,但是要注意:超線程并不會(huì)神奇地讓處理器容量翻番。為了穩(wěn)妥起見,就看核心算作邏輯處理器——如果你啟用了超線程技術(shù),其數(shù)量也不會(huì)翻番。
虛擬處理器是你分配給一個(gè)個(gè)虛擬機(jī)的資源;你能分配多少個(gè)虛擬處理器,取決于訪客/虛擬機(jī)操作系統(tǒng)。在這里,操作系統(tǒng)版本越新,功能就越強(qiáng);所以Windows 2008/2008 R2能與四個(gè)虛擬處理器協(xié)同運(yùn)行,而Windows Server 2003只能被分配一兩個(gè)虛擬處理器。SuSE Linux企業(yè)版、CentOS和紅帽企業(yè)版Linux(它們都是得到支持的操作系統(tǒng)版本)最多可以被分配四個(gè)虛擬處理器。如果你在虛擬桌面基礎(chǔ)架構(gòu)(VDI)環(huán)境中運(yùn)行客戶機(jī)操作系統(tǒng),Windows 7最多可以與四個(gè)虛擬處理器協(xié)同運(yùn)行,Vista能看到兩個(gè)虛擬處理器,Windows XP SP3能看到兩個(gè)虛擬處理器。這里有更詳細(xì)的信息:http://technet.microsoft.com/en-us/library/cc794868(WS.10).aspx。
就因?yàn)槟銥槟骋粋€(gè)虛擬機(jī)分配了兩個(gè)或四個(gè)虛擬處理器,并不是說(shuō)你應(yīng)該這么做。首先,由于跨處理器的通信,在任何多處理器系統(tǒng)中存在一定的開銷——無(wú)論是物理處理器還是虛擬處理器。但是在較新的操作系統(tǒng)中開銷比較低,所以Windows 2008 R2虛擬機(jī)使用四個(gè)虛擬處理器沒(méi)什么問(wèn)題,而Windows Server 2003可能需要進(jìn)行測(cè)試,看看在你的特定環(huán)境下使用兩個(gè)虛擬處理器有沒(méi)有好處。其次,這完全取決于工作負(fù)載——有些應(yīng)用程序是密集的多線程(想一想SQL Server等類似應(yīng)用),使用幾個(gè)虛擬處理器比較好;而單線程應(yīng)用程序或者只有幾個(gè)線程的應(yīng)用程序得到的好處并不大。
另一個(gè)常見的誤解是,為虛擬機(jī)分配一個(gè)或多個(gè)虛擬處理器與物理核心有關(guān)系。為虛擬機(jī)分配虛擬處理器其實(shí)更像為虛擬機(jī)分配一段預(yù)定的處理器時(shí)間,而虛擬機(jī)管理程序?qū)嶋H上把運(yùn)行虛擬機(jī)的負(fù)擔(dān)分?jǐn)偟剿锌捎玫奶幚砥骱诵纳稀?/p>
分配給某一個(gè)主機(jī)上多個(gè)虛擬機(jī)的虛擬處理器數(shù)量與微軟的這個(gè)建議密切相關(guān):一個(gè)系統(tǒng)中每個(gè)邏輯處理器的虛擬處理器至少是4個(gè),每個(gè)邏輯處理器的虛擬處理器最多是8個(gè)。例外情況是:如果你在VDI環(huán)境下是清一色的Windows 7虛擬機(jī),支持的最大比率是12;也就是說(shuō)每個(gè)邏輯處理器的虛擬處理器最多可以是12個(gè)。
如果你有配備2個(gè)四核處理器(即八個(gè)邏輯處理器)的Hyper-V主機(jī),那么運(yùn)行8個(gè)虛擬機(jī)完全沒(méi)問(wèn)題,每個(gè)虛擬機(jī)有4個(gè)虛擬處理器(共32個(gè)虛擬處理器)和最多16個(gè)虛擬機(jī)(共64個(gè)虛擬處理器)。如果你為每個(gè)虛擬機(jī)只分配了兩個(gè)虛擬處理器,那么在每個(gè)虛擬機(jī)一模一樣的這個(gè)例子中把那些數(shù)量提高一倍。當(dāng)然,在實(shí)際情況下,不同虛擬機(jī)中虛擬處理器的數(shù)量會(huì)有所不同,具體看里面運(yùn)行的工作負(fù)載。
想查看你主機(jī)上虛擬處理器與邏輯處理器的比率,你可以手動(dòng)查看每一個(gè)運(yùn)行的虛擬機(jī),然后累計(jì)被分配的虛擬處理器的總數(shù),這個(gè)方法不是很方便。更好的辦法就是運(yùn)行這個(gè)簡(jiǎn)單的PowerShell cmdlet命令,它會(huì)給出答案:
write-host (@(gwmi -ns rootvirtualization MSVM_Processor).count / (@(gwmi
Win32_Processor) | measure -p NumberOfLogicalProcessors -sum).Sum) "virtual
processor(s) per logical processor" -f yellow
多謝微軟的虛擬化項(xiàng)目經(jīng)理Ben Armstrong給出了這個(gè)方法。
圖1表明了我啟用了超線程技術(shù)的四核筆記本電腦上的數(shù)值(共8個(gè)邏輯處理器),有4個(gè)虛擬機(jī)在運(yùn)行,每個(gè)虛擬機(jī)有4個(gè)虛擬處理器。
圖1:使用這個(gè)簡(jiǎn)單的cmdlet命令,很容易搞清楚Hyper-V主機(jī)上虛擬處理器與邏輯處理器的比率。
了解你在每個(gè)虛擬機(jī)上要運(yùn)行的工作負(fù)載和應(yīng)用程序,這點(diǎn)也很重要:它們是不是受處理器的限制還是受內(nèi)存的限制?它們是否得益于多線程,因而是否得益于額外的虛擬處理器?
確保你購(gòu)買的處理器支持二級(jí)地址轉(zhuǎn)換(SLAT),英特爾稱之為擴(kuò)展頁(yè)表(EPT),AMD則稱之為快速虛擬化索引(RVI),AMD早期的說(shuō)明文檔稱之為嵌套頁(yè)表(NPT)。比較舊的處理器不支持SLAT,這意味著每個(gè)虛擬機(jī)將多占用10MB至30MB的內(nèi)存,處理器占用率將增加10%或更多。
SLAT可以帶來(lái)顯著的效益,具體視工作負(fù)載而定。如果你對(duì)遠(yuǎn)程桌面服務(wù)(Remote Desktop Services)進(jìn)行虛擬化處理,可能會(huì)看到SLAT處理器支持的會(huì)話數(shù)量最多增加40%。搭載大容量二級(jí)緩存和三級(jí)緩存的處理器也有助于處理要求大量?jī)?nèi)存的工作負(fù)載。
圖2:為虛擬機(jī)分配虛擬處理器很容易;只要從列表中進(jìn)行選擇即可。
最后,如果你有一個(gè)主機(jī),但處理器資源有限,那么你只要使用虛擬機(jī)預(yù)留設(shè)置和虛擬機(jī)限額設(shè)置,就可以改變諸虛擬機(jī)之間的平衡關(guān)系;虛擬機(jī)預(yù)留設(shè)置確保了虛擬機(jī)總是可以使用這個(gè)數(shù)量的處理器資源(但限制了可以在主機(jī)上運(yùn)行的虛擬機(jī)總數(shù)),虛擬機(jī)限額設(shè)置控制著虛擬機(jī)可以使用多少被分配的處理器容量,Relative weight(相對(duì)權(quán)重)將該虛擬機(jī)與其他運(yùn)行的虛擬機(jī)作一平衡;如果這個(gè)值比較低,意味著它在競(jìng)爭(zhēng)時(shí)間段獲得的資源會(huì)比較少。微軟的建議是,除非你有充足的理由要改動(dòng),否則別去改動(dòng)這些設(shè)置。
還有處理器兼容性設(shè)置,讓你可以在擁有不同年代處理器的主機(jī)之間遷移虛擬機(jī),還讓你可以運(yùn)行版本很老的操作系統(tǒng),比如Windows NT。