Vmware-Esxi

ubuntu 僅將 8 個 cpu 用於帶有 vmxnet3 的 RX 和 TX 隊列

  • October 7, 2020

我在 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

我配置 modprob

options vmxnet3 num_rqs=32 num_tqs=32

但核心拒絕啟動選項

# dmesg  | grep num_
[    2.626483] vmxnet3: unknown parameter 'num_rqs' ignored
[    2.627238] vmxnet3: unknown parameter 'num_tqs' ignored

這是 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

和司機

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

我怎樣才能增加這些隊列?

您可以在執行時更改隊列數。所以,用 來檢查隊列的限制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)。所以你可以嘗試使用它。

引用自:https://serverfault.com/questions/1036138