本文将着重介绍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