为什么微软虚拟化技术多网卡不采用绑定而是使用DCB桥接技术,与VMware等虚拟化厂商大不相同

这是一个非常有意思的问题,背后实际上反映了微软与VMware两家厂商在数据中心网络架构理念上的根本差异。

简单来说:

  • VMware的思路:把多块网卡聚合成一条更粗的管道(NIC Teaming/LACP)
  • 微软的思路:把多块网卡作为独立链路,通过SDN、SMB Multichannel、RDMA、DCB实现流量调度

所以你会发现:

  • VMware大量使用vSwitch Teaming、LACP、Load Balance
  • 微软从Windows Server 2016开始,尤其是S2D和Azure Stack HCI(现Azure Local)后,逐步弱化传统Teaming,转向:
    • SET(Switch Embedded Teaming)
    • DCB(Data Center Bridging)
    • SMB Multichannel
    • RDMA
    • QoS Policy

一、传统网卡绑定(Teaming)的问题

在物理服务器时代:

复制代码
NIC1 -----+
          +----- Team ---- OS
NIC2 -----+

优点:

  • 链路冗余
  • 带宽叠加

例如:

复制代码
2 × 25Gb
=
50Gb Logical Link

看起来很好。

但对于超融合场景:

复制代码
Storage
Live Migration
VM Traffic
Management
Backup

全部跑在同一个Team上。

微软发现几个问题:


1 单流无法真正叠加带宽

例如:

复制代码
2 × 25Gb Team

理论:

复制代码
50Gb

实际上:

复制代码
单TCP连接
≈25Gb

因为:

复制代码
Hash算法

决定一个流只能走一块网卡。

这也是VMware NIC Teaming长期存在的问题。


2 Teaming与RDMA冲突

微软超融合的核心是:

复制代码
SMB Direct

即:

复制代码
SMB + RDMA

RDMA要求:

复制代码
NIC → NIC

直接通信。

而传统Team:

复制代码
RDMA
 ↓
Teaming Driver
 ↓
Physical NIC

中间增加了一层抽象。

很多RDMA特性无法正常工作。

尤其:

  • RoCE
  • iWARP

都不喜欢传统Team。


3 Teaming增加CPU开销

数据路径变成:

复制代码
VM
 ↓
vSwitch
 ↓
Team Driver
 ↓
NIC

增加:

复制代码
Packet Rehash
Load Balance
Failover

处理。

CPU消耗增加。

微软认为:

既然已经有:

复制代码
RDMA
SMB Multichannel

为什么还要再来一层Team?


二、微软的解决方案:SET

从Windows Server 2016开始:

Switch Embedded Teaming

SET取代LBFO Team。

架构:

复制代码
VM
 ↓
Hyper-V vSwitch
 ↓
SET
 ↓
NIC1
NIC2

SET直接集成进vSwitch。

没有额外Team Driver。

因此:

  • 延迟更低
  • 支持RDMA
  • 支持VMMQ
  • 支持SR-IOV

而传统LBFO不支持。


三、为什么又引入DCB?

因为微软的目标不是:

复制代码
聚合带宽

而是:

复制代码
流量分类

例如:

复制代码
25Gb × 2

同时跑:

复制代码
SMB Storage
Live Migration
VM Traffic
Management

微软更关心:

复制代码
谁优先

而不是:

复制代码
怎么聚合

DCB工作方式:

复制代码
Storage = 50%
Migration = 30%
VM = 15%
Mgmt = 5%

通过:

复制代码
ETS
Enhanced Transmission Selection

保证带宽。

例如:

复制代码
Storage永远不会被VM流量抢占

四、Azure Local为什么特别依赖DCB

以2节点S2D集群为例:

复制代码
Node1 ================= Node2
      2×25Gb RoCE

同时传输:

复制代码
Storage Replica
CSV
Live Migration
Backup

如果没有DCB:

复制代码
VM流量暴涨

可能导致:

复制代码
RDMA丢包

继而:

复制代码
Storage延迟飙升

甚至:

复制代码
Cluster失联

所以微软官方最佳实践:

复制代码
RoCE
=
DCB 必须启用

包括:

  • PFC
  • ETS

五、VMware为什么还能大量使用Teaming

VMware的历史包袱不同。

ESXi最早设计于:

复制代码
1Gb
10Gb

时代。

当时:

复制代码
vMotion
Storage
VM

主要依赖:

复制代码
TCP/IP

而不是RDMA。

所以形成了:

复制代码
vSwitch Teaming
LACP
Port Channel

体系。

后来即使引入:

  • NSX
  • NVDS
  • Geneve

其底层仍然保留这种网络哲学。


六、现在两家其实正在趋同

最新趋势是:

VMware

正在引入:

  • NVMe/TCP
  • RDMA
  • SmartNIC
  • DPU

减少对传统Teaming的依赖。


微软

在Azure Local中:

  • SET
  • RDMA
  • SMB Multichannel
  • DCB
  • EVPN/VXLAN

已经成为标准方案。

尤其在微软内部Azure数据中心,基本不再依赖传统LBFO Team。


本质区别

可以用一句话概括:

VMware传统思路 微软Azure Local思路
多网卡先聚合成一个逻辑接口 多网卡保持独立
依靠LACP/Teaming负载均衡 依靠SMB Multichannel负载均衡
QoS是辅助功能 QoS/DCB是核心功能
TCP为中心 RDMA为中心
网络聚合优先 流量分类优先
单逻辑链路 多路径并行链路

因此你看到微软在S2D、Azure Stack HCI、Azure Local中大量强调:

"不要再用传统NIC Teaming,而是使用SET + SMB Multichannel + RDMA + DCB。"

因为在微软看来,超融合时代最重要的已经不是把两块25Gb网卡变成一块50Gb网卡,而是让存储、迁移和虚拟机流量能够在多条RDMA链路上并行、无损、可控地运行。