在虚拟机里添加万兆网卡,核心思路只有两条:要么把物理万兆网卡通过PCI直通或SR-IOV直接交给虚拟机,要么走虚拟交换机让虚拟机共享物理万兆网卡的带宽,具体选哪条路取决于你的虚拟化平台和性能要求。 下文按ESXi、KVM、Hyper-V三大平台逐一拆解,附上驱动和排查细节,保证你照着操作就能搞定。
添加万兆网卡前,先确认硬件和平台
很多人一上来就买块网卡插进机器,结果虚拟机里死活认不出,问题往往出在第一步没分清“直通”和“共享”的区别,也没确认物理网卡是否支持SR-IOV。
物理网卡直通还是虚拟交换机共享?先选路
- PCI直通(Passthrough):将整块网卡直接分配给某台虚拟机,独占物理网卡的全部队列和中断,性能最接近裸机,缺点是这块网卡就绑定给一台虚拟机用了,其他虚拟机摸不到。
- SR-IOV(单根I/O虚拟化):把物理网卡拆成多个虚拟功能(VF),每台虚拟机拿到独立的VF,既能接近线速,又能多台共享。前提是物理网卡和虚拟化平台都支持SR-IOV,例如Intel X710、X520系列以及Mellanox ConnectX-4以上型号。
- 虚拟交换机共享:虚拟机靠virtio或VMXNET3虚拟网卡接入vSwitch或Linux Bridge,由物理网卡统一出网,这种模式配置最省心,但在高并发小包场景下CPU开销大,性能折损明显。
行业共识认为,如果虚拟机需要跑数据库、分布式存储或视频渲染这类大流量负载,优先选SR-IOV;如果只是日常业务流量,共享模式加多队列功能基本够用。
检查虚拟化平台和网卡固件
动手之前用管理平台确认三件事:物理网卡型号和固件版本、平台是否开启SRIOV支持、BIOS里VT-d/IOMMU是否打开,ESXi可以在“主机→硬件→PCI设备”里看到直通候选设备;KVM主机上运行lspci | grep Ethernet能列出网卡;Hyper-V则需要在PowerShell里跑Get-NetAdapter确认网卡是否支持Enable-SRIOV。
ESXi虚拟机添加万兆网卡步骤:直通与虚拟交换机配置
ESXi是生产环境最常见的宿主机,操作路径非常成熟,如果你正在搜索“esxi虚拟机添加万兆网卡步骤”,下面这段可以直接参考。
ESXi下添加PCI直通设备的完整流程
- 登录vCenter或ESXi Web管理页,进入“主机→配置→PCI设备”,找到你的万兆网卡,点击“编辑直通”并标记为活动。
- 重启ESXi主机,这个步骤不能跳过,因为直通配置需要重新加载IOMMU映射。
- 编辑目标虚拟机,进入“编辑设置→添加新设备→PCI设备”,勾选刚才标为直通的网卡。
-

确认虚拟机内存设置为“预留所有客户机内存”,否则ESXi会拒绝添加直通设备。
- 开机后在虚拟机里安装对应厂商驱动,例如Intel网卡用
i40e(X7系列)或ixgbe(X5系列)驱动。
直通模式下的万兆网卡,在Windows虚拟机里通常显示为物理网卡型号,不再出现VMXNET3之类的虚拟设备,如果设备管理器里有黄色感叹号,多半是驱动版本不匹配,去官网下载对应系统版本即可。
用虚拟交换机共享万兆网卡带宽
不追求独占时,更轻量的做法是把万兆网卡加入虚拟交换机:
- 在vSwitch的“物理适配器”里添加万兆网卡,并让上行链路只保留这块万兆卡。
- 对虚拟机网卡(VMXNET3)设置“启用VLAN”和“负载均衡策略”,推荐“基于IP哈希”,配合物理交换机端口的链路聚合才能发挥双万兆口叠加效果。
- 在虚拟机网卡高级参数里启用
RSS(接收端缩放),Windows系统自动生效,Linux则需要ethtool -L eth0 combined 4之类的命令打开多队列。
这种配置下,虚拟机看到的还是虚拟网卡,但带宽上限已经提升到万兆级别,日常文件共享、数据库备份完全够用。
KVM与Hyper-V环境下的万兆网卡配置
如果你用的是KVM或Hyper-V,场景和命令完全不同,下面分开说清楚。
KVM虚拟机为什么网卡性能下降?virtio与vhost-net
KVM平台下,默认的虚拟网卡是virtio-net,配置简单但默认单队列,压测时常常出现性能上不去的现象,要榨干万兆带宽,按以下顺序调整:
- 创建虚拟机时,在libvirt XML里指定
<model type='virtio'/>,然后添加<driver name='vhost-net' queues='4'/>参数,让virtio网卡走vhost-net内核进程,CPU开销明显下降。 - 虚拟机内设置
ethtool -L eth0 combined 4打开多队列,配合多核CPU才能并行处理收包。 - 宿主机上确认
/dev/vhost-net设备存在,并把当前用户加入kvm组。
如果仍然跑不满万兆,检查是否用了macvtap直连模式,macvtap让虚拟机直接挂到物理网卡上,性能类似直通,但macvtap的桥接不支持虚拟机与宿主机之间的通信,需要额外加一张虚拟网卡来管理。
Hyper-V万兆网卡设置的两个关键开关
Hyper-V平台相对封闭,但设置并不复杂:
- 开启SR-IOV:先在宿主机上运行
Enable-NetAdapterSriov -Name "万兆网卡名称",然后重启宿主机。 - 在虚拟机的“网络适配器”里,选择“硬件加速”页面,勾选“启用SR-IOV”,同时勾选“启用虚拟机队列(VMQ)”。
- Windows虚拟机内部打开网卡属性,确认“SR-IOV”状态为“已启用”。

如果你用的是“外部虚拟交换机”而不是SR-IOV,务必在虚拟交换机属性里勾选“启用单一根I/O虚拟化(SR-IOV)”,并启用“允许jumbo帧”,jumbo帧设成9014能让大包吞吐量提升不少,但要求底层交换机也支持,否则丢包反而更严重。
虚拟机万兆网卡驱动不识别怎么办?从常见错误到排查思路
这部分是踩坑重灾区,我把高频问题直接列出来,照着排查比瞎试强得多。
Windows虚拟机驱动失败的处理
- 设备管理器显示“以太网控制器”但没有具体型号:说明系统自带驱动不够新,去Intel或Mellanox官网下载对应系统的驱动包,别用Windows Update自动搜索,经常识别不到。
- 直通后开机直接蓝屏:常见于Intel X520网卡在Windows Server 2016以下版本直通时,原因是中断重映射(Interrupt Remapping)没开启,BIOS里打开
VT-d,并在ESXi直通配置里启用“MSI中断”。 - 驱动装上但网卡显示“网络电缆被拔出”:检查物理端口是否有光模块,万兆光纤网卡不插光模块就显示断开,这是正常的,插上SFP+模块并连接光缆即可。
Linux虚拟机驱动编译与载入
- 内核版本较旧的系统可能没有自带
i40e或ixgbe驱动,需要从Intel官网下载源码编译,编译前确保内核头文件已安装:yum install kernel-devel或apt install linux-headers-$(uname -r)。 - 网卡能被
lspci看到,但ip link里没有接口,先运行modprobe i40e,如果报错看dmesg尾部信息,多数情况下是固件版本太老,去网卡厂商官网下载最新NVM固件刷一遍。 - 如果虚拟机内显示网卡速率只有1000Mb/s,而不是10000Mb/s,重点检查协商模式:直通模式下检查光模块型号是否兼容,共享模式下检查虚拟交换机的“安全设置”里是否禁用了MAC地址更改。
性能上不去,但不报错
驱动正常、链路也显示万兆,可iperf3打流只有2-3Gbps,这是多队列没开启的典型症状,确认虚拟机CPU核心不少于4个,然后在系统里手动设置RSS队列:
- Windows:在网卡高级属性里把“接收队列数”设为最大值。
- Linux:
ethtool -L eth0 combined 4,并确认ethtool -k eth0显示rx-tcp4: on。
经过上述处理,绝大多数虚拟机万兆网卡性能都能跑到7Gbps以上,如果你的场景需要接近线速(9.8Gbps),还是建议走SR-IOV直通。
万兆网卡成本与选型:什么场景才值得加
不是所有虚拟

机都需要万兆网卡,普通Web服务器、开发测试环境,千兆网卡和虚拟交换机共享就够;但遇到备份系统、视频编辑共享存储、数据库主从同步、大数据节点间通信,万兆几乎是刚需,市面上的万兆网卡价格差距很大,千兆转万兆的“光转电”模块也是成本之一,采购前先算好这笔账。
性能和价格之间的平衡点
| 方案 | 性能表现 | 成本区间(单口) |
|---|---|---|
| 虚拟交换机共享千兆 | 最多约1Gbps,适合轻量业务 | 已有网卡,几乎零成本 |
| 虚拟交换机共享万兆 | 通常3-6Gbps,CPU开销中等 | 二手万兆卡加光模块约几百元 |
| SR-IOV直通万兆 | 可达8-9.5Gbps,CPU占用低 | 服务器级网卡约千元到数千元 |
| PCI直通整卡 | 接近裸机线速,但独占网卡 | 高性能双口卡更贵 |
场景选型时记住一句话:虚拟机数量少、流量大,选直通或SR-IOV;虚拟机数量多、总带宽有限,选虚拟交换机共享更划算。 老款Intel X520二手卡价格便宜,但注意市场上翻新卡很多,买到打磨重新打标的型号会导致虚拟机万兆网卡驱动不识别或频繁断链,建议优先买原厂盒装或找有质保的渠道。
性能验证别被数字误导
配置完成后,用iperf3 -c 对端IP -P 8验证多线程吞吐,再单线程跑一遍,如果单线程只有2Gbps而多线程能上8Gbps,说明单队列瓶颈,调整RSS或多队列解决,还要用ping -M do -s 8900验证jumbo帧是否生效。
常见问题快速解答
虚拟机上万兆网卡驱动不识别,但宿主机一切都正常,是哪里出了问题?
检查是否没有给虚拟机安装对应的半虚拟化驱动,ESXi中如果网卡显示为“Vendor ID: 1AF4”这类设备,需要安装VMware Tools;KVM中确认virtio驱动已装入系统,如果走PCI直通,则要看宿主机BIOS里VT-d是否开启,以及虚拟机内存是否设置为全部预留。
虚拟机万兆网卡性能只有3Gbps左右,如何进一步优化?
先确认物理网卡连接速率是否为10000Mb/s,然后用ethtool -i eth0查看驱动名称,若驱动加载正常,开启多队列和RSS,确保虚拟机CPU至少4核且允许中断均衡,仍不满足需求时切换为SR-IOV直通。
KVM虚拟机用virtio网卡能跑满万兆吗?
多数情况下可以到6-8Gbps,但想稳定跑满9Gbps以上比较困难,主要瓶颈在CPU参与收包处理,改用vhost-user方案或SR-IOV直通能达到接近线速的性能,不过配置复杂度也会相应上升。