Hyper-V深度評測一:網絡方面的改進
譯文本文將著重介紹Hyper-V在虛擬機網絡方面的改進,具體來說指單根輸入/輸出虛擬化(SR-IOV)、接收端擴展和服務質量(QoS)。
單根輸入/輸出虛擬化
SR-IOV可能是為Windows Server 2012中網絡方面的種種改進所添加的最值得關注的功能之一,它有特定的應用和局限性,你在規劃部署新的Hyper-V集群時需要注意。
在虛擬機管理程序虛擬化的早期,英特爾和AMD認識到:如果它們把某些功能從軟件卸載到處理器本身上面,就有助于提供更好的性能。這項機制現在分別被稱為Intel-VT和AMD-V,也是大多數現代虛擬機管理程序的一項要求。SR-IOV同樣將網絡功能從軟件轉移到硬件上,以提高性能和靈活性。如果你有一臺BIOS里面支持SR-IOV的服務器,又有能夠支持SR-IOV的網卡,該服務器就能向虛擬機提供虛擬功能(Virtual Functions)——實際上這些就是服務器本身的虛擬副本。如果你想廣泛使用SR-IOV,就要明白如今支持它的網卡在它們所提供的虛擬功能數量方面很有限;有些網卡每塊只支持4項虛擬功能,有些支持32項,有些最多支持64項。
并不是因帶寬而需要SR-IOV,因為只有萬兆以太網連接才能被Hyper-V虛擬機總線塞滿,但是它占用大約一個處理器核心用于計算。所以,如果你要求處理器的使用率很低,那么SR-IOV是最穩妥的選擇。如果延遲時間極其重要,SR-IOV為你提供了近似本地裸機的網絡性能,所以那是SR-IOV大放異彩的另一個場景。
你在享用SR-IOV好處的同時要付出一些代價,尤其是在靈活性方面。如果你使用Hyper-V可擴展交換機,又配置了端口的訪問控制列表(ACL),可能還配置了一個或多個擴展,這些都會因SR-IOV而被繞過,因為交換機從來看不到SR-IOV流量。你也無法聚合主機上多塊支持SR-IOV的網卡;不過,你可以在主機上有兩塊(或更塊)物理SR-IOV網卡,把這些網卡提供給虛擬機;而且可以在虛擬機里面,利用虛擬網卡組建一個網卡群,以提升性能和故障切換機制。
SR-IOV的確可與實時遷移(Live Migration)協同使用,這是VMware的vSphere 5.1所做不到的。在每項虛擬功能的后臺,Hyper-V利用平常的虛擬機總線網卡組建“輕型”網卡群;如果你把虛擬機實時遷移到沒有SR-IOV網卡的主機,它只是切換到軟件網卡。
如果想更深入地了解中Hyper-V的SR-IOV,請參閱Hyper-V開發小組的John Howard所寫的這個博客系列(http://blogs.technet.com/b/jhoward/archive/2012/03/12/everything-you-wanted-to-know-about-sr-iov-in-hyper-v-part-1.aspx),然后點擊此處(http://blogs.technet.com/b/jhoward/archive/2012/03/21/everything-you-wanted-to-know-about-sr-iov-in-hyper-v-part-8.aspx),即可了解故障排查方面的技巧。
注意:當你為SR-IOV網卡創建虛擬交換機時,就得在當時啟用SR-IOV;之后你無法轉變非SR-IOV交換機。

圖1:如果你的系統滿足要求,啟用SR-IOV是很簡單的事情。
動態擴展
在物理服務器上,接收端擴展(RSS)負責處理入站網絡流量,那樣流量速度不會因單個處理器核心而減慢。這通過把計算任務分配到多個處理器核心上來實現。對有多個虛擬機,入站流量又很大的Hyper-V主機而言,動態虛擬機隊列(dVMQ)執行的操作就好比RSS為物理服務器執行的操作。目的MAC地址進行了散列處理;傳送到某個虛擬機的流量被送入到特定隊列,處理器核心的中斷操作經過了分布式處理。這一切通過把這些功能卸載到網卡上來處理。
VMQ出現在Windows 2008 R2中的Hyper-V里面,但是你不得不管理中斷結合(Interrupt Coalescing),這可能需要好一番手動調優。在Windows Server 2012中的Hyper-V里面——dVMQ功能在默認情況下已被啟用,這項功能可以為你處理調優和跨節點均衡負載等任務。要是該功能由于某種原因而被禁用,你可以在GUI中或通過PowerShell cmdlet Enable-NetAdapterVmq來啟用它。
監控和捕獲
服務器虛擬化和虛擬網絡方面的一個問題是,許多傳統的故障排查方法根本不管用,或者必須經過改動,才能適應虛擬化環境。Hyper-V中新的可擴展交換機讓你可以將端口定義為監控端口(端口鏡像),就像你在物理交換機上定義端口那樣,好讓諸如Wireshark和Network Monitor之類的工具可以捕獲通過交換機傳送的流量。與這項功能緊密配合的是統一跟蹤(Unified Tracing),這個新的參數(capturetype)用于netsh跟蹤命令。它讓你可以定義是捕獲通過虛擬交換機(=vmswitch)傳送的流量,還是通過物理網絡(=physical)傳送的流量,還是說這兩種流量都捕獲。想了解Windows Server 2012中netsh跟蹤方面的更多信息,請訪問此處(http://technet.microsoft.com/en-us/library/dd878517.aspx)。
使用端口ACL還讓你可以計量某個虛擬機與指定的IP地址范圍之間的網絡流量(入站流量或出站流量)。雖然用PowerShell(Add-VMNetworkAdapterAcl –VMName name –RemoteIPAddress x.y.z.v/w –Direction Outbound –Action Meter)來計量蠻有意思,但我還是希望這項功能可以集成到SCVMM 2012等綜合日志和監控解決方案中。
服務質量
服務質量(QoS)在Windows Server 2012和Hyper-V中都得到了改進。它提供了帶寬管理、分類與標記、流量控制及基于策略的QoS。雖然之前版本的Windows Server有最大帶寬這個概念,但是版本2012還提供了最小帶寬概念。這意味著,沒有出現流量擁塞時,工作負載可以使用分配給它的最大帶寬;但是出現流量擁塞時,工作負載只能使用最小保障帶寬。你可以使用最大帶寬或最小帶寬,也可以同時使用,這取決于一個虛擬機或一組虛擬機所在的環境。
注意:如果你使用服務器消息塊直通(SMB Direct),Windows Server 2012的這項新功能在兼容網卡上實現了遠程直接內容訪問(RDMA)技術,以便網絡流量的延遲時間比較短,處理器開銷比較小,那么QoS就被繞過了。在這種情況下,你可以實施支持數據中心橋接(DCB)以控制流量的網卡,這類似QoS。DCB允許對八類不同的流量進行定義,并且在擁塞期間為它們分配最小帶寬。
在之前版本中,你不得不自行對流量進行分類;Windows Server 2012在PowerShell中隨帶內置過濾器,可以針對iSCSI、NFS、SMB和實時遷移等常見流量進行分類。除了目前基于IP報頭的標記外——這項功能立足于差異化服務代碼點(DSCP),Windows Server 2012還添加了在第2層以太網幀進行的802.1p標記;因而,它可以適用于非IP數據包。
基于策略的QoS使用組策略(Group Policy),為你的物理網絡和主機制定和實施QoS策略,并簡化部署和管理工作,因為你已經用組策略來實施其他策略。參閱本文(http://technet.microsoft.com/en-us/library/jj159288.aspx),即可深入了解如何面向QoS的組策略。
不過就Hyper-V而言,微軟把QoS部分與可擴展虛擬交換機結合起來,通過按照交換機端口號,使用PowerShell或WMI,控制最小帶寬和最大帶寬,從而確保穩定的網絡性能,進而讓主機能夠遵守服務級別協議(SLA)。當然,這些功能在私有云基礎設施中同樣很有用,可使用SCVMM 2012 SP1加以管理。有了這種細粒度的QoS控制,還有可能拿來一塊或多塊萬兆以太網網卡,把它們“切分”,用于分管存儲流量、實時遷移流量和虛擬機流量,就像如今的許多服務器有多塊專用的千兆網卡用于分管不同類型的流量那樣。

圖2:如果是小環境,很容易針對每個虛擬機配置最小帶寬和最大帶寬。
再來說說網卡聚合(NIC teaming),我們會在下一篇當中有所介紹。網卡聚合本身內置在Windows Server中;我們會集中到目前為止介紹的所有功能,看看它們會如何影響你在將來如何設計集群和數據中心。
http://virtualizationreview.com/articles/2013/03/06/hyper-v-dive-3-network.aspx