在主机上,1 个物理适配器插入我们的网络,在主机本身上我有 Hyper-V 角色。我创建了一个外部交换机并将其绑定到物理 Broadcom NetXtreme 千兆以太网,选中“允许管理操作系统共享此网络适配器”复选框。
我在此主机上创建了一些虚拟机,并将它们配置为使用我新创建的交换机,一切运行正常。虚拟交换机和物理交换机会随机停止接收数据包,所有网络活动都会停止运行(我有时会看到数据包被发送,但没有返回任何内容)。此时,我无法使用 IP ping 服务器,也无法从主机与外界通信。我发现最不合适的解决方法是禁用/启用物理 NIC 和虚拟交换机,此时网络连接恢复,我开始接收数据包。
经过一番研究,我发现我的 NIC 固件已经过时了,这是我找到的版本 Network_Firmware_P32M4_WN64_7.6.15.EXE。使用 Dell SUU (SUU_730_64bit) 安装固件,并在服务器上执行了重新启动。此时我觉得我找到了根本原因,但就像我的硬件被困扰一样,问题再次发生。物理/虚拟适配器都停止接收数据包,网络连接再次丢失。
> Driver details for Broadcom NetXtreme Gigabit Ethernet
> Driver Date:01/28/2013 Driver Version: 15.6.0.10
我尝试过的其他方法是手动将双工速度设置为全速,但问题依然存在。我没有尝试过 TCP 卸载,因为很多人告诉我这不相关(如果有正当理由我可以尝试一下?)
操作系统:Windows Server 2012 Datacenter
可能是什么问题?
更新 物理和虚拟交换机的高级属性
NIC1 802.3az EEE Disable *EEE {0}
NIC1 Flow Control Rx & Tx Enabled *FlowControl {3}
NIC1 Interrupt Moderation Enabled *InterruptMo... {1}
NIC1 Jumbo Mtu 1500 *JumboPacket {1500}
NIC1 Large Send Offload V2 (IPv4) Enabled *LsoV2IPv4 {1}
NIC1 Large Send Offload V2 (IPv6) Enabled *LsoV2IPv6 {1}
NIC1 Maximum Number of RSS Queues RSS 1 Queue *NumRssQueues {1}
NIC1 ARP Offload Enabled *PMARPOffload {1}
NIC1 NS Offload Enabled *PMNSOffload {1}
NIC1 Priority & VLAN Priority & VLAN Enabled *PriorityVLA... {3}
NIC1 Receive Buffers Default *ReceiveBuffers {200}
NIC1 Receive Side Scaling Enabled *RSS {1}
NIC1 Speed & Duplex Auto Negotiation *SpeedDuplex {0}
NIC1 TCP/UDP Checksum Offload (I... Rx & Tx Enabled *TCPUDPCheck... {3}
NIC1 TCP/UDP Checksum Offload (I... Rx & Tx Enabled *TCPUDPCheck... {3}
NIC1 Transmit Buffers 500 *TransmitBuf... {500}
NIC1 Virtual Machine Queues Enabled *VMQ {1}
NIC1 VMQ VLAN Filtering Disable *VMQVlanFilt... {0}
NIC1 Wake on Magic Packet Enabled *WakeOnMagic... {1}
NIC1 Wake on Pattern Match Enabled *WakeOnPattern {1}
NIC1 EEE Control Policies Optimal Power and Performance EeeCtrlMode {1}
NIC1 Network Address -- NetworkAddress {--}
NIC1 VLAN ID 0 VlanID {0}
NIC1 Ethernet@WireSpeed Enable WireSpeed {1}
NIC1 WOL Speed Lowest Speed Advertised WolSpeed {256}
vEthernet (extSwitch) IPv4 Checksum Offload Rx & Tx Enabled *IPChecksumO... {3}
vEthernet (extSwitch) IPSec Offload Auth Header and ESP Enabled *IPsecOffloadV2 {3}
vEthernet (extSwitch) Jumbo Packet Disabled *JumboPacket {1514}
vEthernet (extSwitch) Large Send Offload Version ... Enabled *LsoV2IPv4 {1}
vEthernet (extSwitch) Large Send Offload Version ... Enabled *LsoV2IPv6 {1}
vEthernet (extSwitch) TCP Checksum Offload (IPv4) Rx & Tx Enabled *TCPChecksum... {3}
vEthernet (extSwitch) TCP Checksum Offload (IPv6) Rx & Tx Enabled *TCPChecksum... {3}
vEthernet (extSwitch) UDP Checksum Offload (IPv4) Rx Enabled *UDPChecksum... {2}
vEthernet (extSwitch) UDP Checksum Offload (IPv6) Rx Enabled *UDPChecksum... {2}
vEthernet (extSwitch) Network Address -- NetworkAddress {--}
答案1
根本原因是虚拟机队列,可以在网络适配器的高级属性下找到。禁用它,所有问题都会消失。我注意到这个问题主要出现在 Broadcom 适配器上,但其他适配器也可能受到影响。稍后会详细说明。
答案2
只是想向微软官方知识库指出这一点: 使用 Broadcom NetXtreme 1 千兆位网络适配器时虚拟机丢失网络连接
据我所知,廉价 NIC 中未正确实施此 VMQ 功能,并且供应商倾向于提供针对整个 NIC 产品系列而非特定 NIC 产品系列(即包含略有不同的芯片和卡的产品系列)的驱动程序,因此他们倾向于默认启用 VMQ。
解决方案是禁用 VMQ,如上述 KB 中所示,但在驱动程序更新后将此设置恢复为 ON 仍会给您带来问题。要解决此问题,您应该实施某种配置管理。例如,您可以在 SCCM 中创建配置基线,其中包括 VMQ=OFF 标准,并监控/自动解决驱动程序更新导致的配置偏离基线的问题。
如果您想了解有关 VMQ 技术本身的更多信息,TechNet 上还有一系列非常详细的博客文章:
VMQ 深度探究,1/3