Featured image of post VMware虚拟机添加万兆网卡

VMware虚拟机添加万兆网卡

在VMware WorkStation中添加网卡后没有选择网卡速度等级的选项,按照VMware的默认设定:当新建虚拟机选择32位操作系统时,将分配百兆网卡;当新建虚拟机选择64位操作系统时,将分配千兆网卡。若需要为虚拟机添加万兆网卡,只能通过修改配置文件的方式进行设置

创建虚拟机时添加默认网卡

查看Ubuntu虚拟机中的网卡类型,Intel 82545EM Gigabit Ethernet NIC即为E1000,是Intel的经典千兆以太网卡,支持标准的以太网协议

1
lspci | grep -i net 

PixPin_2025-04-20_20-04-34

通过以下命令可以观察到E1000网卡为单队列网卡,所有的网络数据都通过这个单一的队列传输。在多核CPU的系统中,这种设计无法充分利用多个CPU核心进行并行处理,导致CPU的某个核心可能会变成瓶颈,无法充分发挥硬件性能。

1
cat /proc/interrupts | grep ens34

PixPin_2025-04-20_20-05-34

修改网卡为万兆网卡

VMware网卡修改目前没有修改界面,只能在配置文件中修改,在修改配置文件前需要将虚拟机关闭。配置文件为虚拟机目录中的“虚拟机名.vmx”文件(例如:UbuntuDPDK.vmx),可使用文本编辑器编辑,将其中ethernet*.virtualDev字段的e1000修改为vmxnet3,vmxnet3是由VMware开发的、专为虚拟化环境设计的虚拟网络接口卡,它是VMXNET系列的第三个版本,也是目前最先进的版本,提供了极高的网络性能和低延迟

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 修改前的配置
ethernet1.addressType = "generated"
ethernet1.virtualDev = "e1000"
ethernet0.connectionType = "nat"
ethernet0.addressType = "generated"
ethernet0.virtualDev = "e1000"
# 修改后的配置
ethernet1.addressType = "generated"
ethernet1.virtualDev = "vmxnet3"
ethernet0.connectionType = "nat"
ethernet0.addressType = "generated"
ethernet0.virtualDev = "vmxnet3"

随后再次启动虚拟机即可验证网卡,已变为万兆网卡

1
lspci | grep -i net 

PixPin_2025-04-20_20-25-41

通过以下命令可以观察到vmxnet3网卡为多队列网卡,现代的网卡通常支持多个接收队列和多个发送队列。每个队列对应一个CPU核心,从而实现数据处理的负载均衡。在这种设计下,数据可以被分配到多个队列中,由多个核心并行处理。

1
cat /proc/interrupts | grep ens192

PixPin_2025-04-20_20-27-21

每一行代表网络接口ens192的一个中断源:

  1. 中断号(如66、67):每一行的第一个数字代表了该中断源的中断号
  2. CPU核心统计:每列之后的数字代表该中断在各个CPU核心上的触发次数,例如:ens192-rxtx-0在CPU核心4上触发了276次中断,而在其他核心上没有触发;ens192-rxtx-1则在CPU核心0上触发了2次中断
  3. 中断类型:中断是通过消息信号中断(Message Signaled Interrupt)发送的,通常这种中断方式比传统的线路中断更高效
  4. 中断源:如ens192-rxtx-0的表示网络接口ens192中的接收和发送队列,rxtx代表接收(RX)和发送(TX)流量,中断ens192-rxtx-0的源是第0个接收/发送队列
  5. 中断事件:如ens192-event-8的表示与事件驱动的中断相关,通常用于表示接口的状态变更或者特殊的网络事件
Licensed under CC BY-NC-SA 4.0
皖ICP备2025083746号-1


使用 Hugo 构建
主题 StackJimmy 设计