我正在开发一个基于RSS多队列(接收侧缩放)的应用程序,并在vmware工作站上对其进行测试,但发现vmxnet3网卡存在RSS问题。
我的linux虚拟机有4个vCPU,vmxnet3有4个rx队列,但数据包总是到达queue0,queue1-queue3总是空闲的。我尝试过不同版本的linux/workstation,但得到了相同的结果。我尝试过的是:wind River linux 4.3+workstation 10、centos6+workstation10和ceotos7+workstation11,并尝试了多个版本的vmxnet3驱动程序:vmtools-8.8.4、vmtools-9.6.0、vmtools-9.9.0和centos7 vmxnet3 驱动程序。
多队列(接收端扩展)是否可以在 vmware 工作站上运行?
以下是我修改后的 vmxnet3 驱动程序中的一些消息(探测设备时打印 rss 配置,并在接收数据包时打印 rx desc):
vmxnet3 0000:13:00.0 eth2: intr 类型 3,模式 0,已分配 5 个向量
---------- eth2 rss 配置:hashType=0xf rx_queues=4
vmxnet3 0000:13:00.0 eth2:NIC 链路已启动 10000 Mbps
vmxnet3 0000:03:00.0 eth0: intr 类型 3,模式 0,已分配 5 个向量
---------- eth0 rss 配置:hashType=0xf rx_queues=4
vmxnet3 0000:03:00.0 eth0:NIC 链路已启动 10000 Mbps
vmxnet3 0000:0b:00.0 eth1: intr 类型 3,模式 0,已分配 5 个向量
---------- eth1 rss 配置:hashType=0xf rx_queues=4
vmxnet3 0000:0b:00.0 eth1:NIC 链路已启动 10000 Mbps
eth0-rxtx-0: rssType=0 rqID=0 rssHash=0x0(0) v4=1 v6=0 tcp=0 udp=1 tuc=1 cnc=0 ipc=1
eth0-rxtx-0: rssType=0 rqID=0 rssHash=0x0(0) v4=1 v6=0 tcp=0 udp=1 tuc=1 cnc=0 ipc=1
......相同的消息,数据包总是到达 eth0-rxtx-0,即使我更改了 IP 地址。
谢谢!
答案1
有一篇关于这个主题的知识库文章——http://kb.vmware.com/kb/2020567(我猜它是 VMware 应您的请求而编写的)。要点是:
VMXNET3 Linux 设备驱动程序中包含接收端扩展 (RSS) 和多队列支持。 VMXNET3 设备始终支持多个队列,但 Linux 驱动程序之前使用 1 个 Rx 和 1 个 Tx 队列。
- 对于 VMware Tools 附带的 VMXNET3 驱动程序,vSphere 5.0 中引入了多队列支持。
- 对于 Linux 操作系统附带的 VMXNET3 驱动程序,在 Linux 内核版本 2.6.37 之后引入了多队列支持。
最新版本的 VMware Tools 默认启用多队列。但是,在早期版本中,您必须手动启用多队列。这可以通过使用 modprobe 设置每个适配器的传输和接收队列的数量来完成。