Vmware-Esxi
ubuntu 僅將 8 個 cpu 用於帶有 vmxnet3 的 RX 和 TX 隊列
我在 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)。所以你可以嘗試使用它。