ubuntu 仅使用 8 个 cpu 用于带有 vmxnet3 的 RX 和 TX 队列

Beh*_*far 7 linux-networking vmware-esxi ubuntu-16.04

我在 vmware esxi 6.7 上安装了 Ubuntu 16.04,这台机器有 32 核 cpu。Linux 只为 tx 和 rx 运行 8 个队列,并且不能在重负载下使用所有 CPU。

# ethtool -S ens192 | grep Queue
 Tx Queue#: 0
 Tx Queue#: 1
 Tx Queue#: 2
 Tx Queue#: 3
 Tx Queue#: 4
 Tx Queue#: 5
 Tx Queue#: 6
 Tx Queue#: 7
 Rx Queue#: 0
 Rx Queue#: 1
 Rx Queue#: 2
 Rx Queue#: 3
 Rx Queue#: 4
 Rx Queue#: 5
 Rx Queue#: 6
 Rx Queue#: 7
Run Code Online (Sandbox Code Playgroud)

我配置 modprob

options vmxnet3 num_rqs=32 num_tqs=32
Run Code Online (Sandbox Code Playgroud)

但是内核在启动时拒绝选项

# dmesg  | grep num_
[    2.626483] vmxnet3: unknown parameter 'num_rqs' ignored
[    2.627238] vmxnet3: unknown parameter 'num_tqs' ignored
Run Code Online (Sandbox Code Playgroud)

这是 lspci 输出

lspci -k
03:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
    DeviceName: Ethernet0
    Subsystem: VMware VMXNET3 Ethernet Controller
    Kernel driver in use: vmxnet3
    Kernel modules: vmxnet3
0b:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
    DeviceName: Ethernet1
    Subsystem: VMware VMXNET3 Ethernet Controller
    Kernel driver in use: vmxnet3
    Kernel modules: vmxnet3
Run Code Online (Sandbox Code Playgroud)

和司机

# lspci -n | grep "03:00\|0b:00.0"
03:00.0 0200: 15ad:07b0 (rev 01)
0b:00.0 0200: 15ad:07b0 (rev 01)
Run Code Online (Sandbox Code Playgroud)

我怎样才能增加这些队列?

Ant*_*lov 7

您可以在运行时更改队列数。因此,使用 来检查队列的限制ethtool --show-channels ens192,然后使用 更改数量ethtool --set-channels ens192 rx N tx N注意:由于缺乏此功能支持,上述方法不适用于 vmxnet3 驱动程序。

更新:在检查我发现的 vmxnet3_driver 的源代码后,最大队列数为 8 ( https://elixir.bootlin.com/linux/latest/source/drivers/net/vmxnet3/vmxnet3_int.h#L306 ) . 队列数取决于 cpu 计数 ( https://elixir.bootlin.com/linux/latest/source/drivers/net/vmxnet3/vmxnet3_drv.c#L3398 )。但显然它不能超过硬编码值。

UPDATE2:我检查了 vmware-tools 的来源。它的驱动程序还有其他限制:最多 32 个队列(https://github.com/vmware/open-vm-tools/blob/master/open-vm-tools/modules/shared/vmxnet/vmxnet3_defs.h#L636)。所以你可以尝试使用它。