我正在使用具有igb驱动程序的千兆四端口intel i350 NIC。 NIC已安装在具有32个cpu内核的Dell计算机上,并运行Ubuntu 18.04。我正在使用的接口名称为“ eno2
”
接口(即eno2)具有8 rx
和8 tx
队列。这是ethool -l eno2
的结果:
Channel parameters for eno2:
Pre-set maximums:
RX: 0
TX: 0
Other: 1
Combined: 8
Current hardware settings:
RX: 0
TX: 0
Other: 1
Combined: 8
这是ls /sys/class/net/eno2/queues/
的结果:
drwxr-xr-x 2 root root 0 Sep 25 19:09 rx-0
drwxr-xr-x 2 root root 0 Sep 25 19:09 rx-1
drwxr-xr-x 2 root root 0 Sep 25 19:09 rx-2
drwxr-xr-x 2 root root 0 Sep 25 19:09 rx-3
drwxr-xr-x 2 root root 0 Sep 25 19:09 rx-4
drwxr-xr-x 2 root root 0 Sep 25 19:09 rx-5
drwxr-xr-x 2 root root 0 Sep 25 19:09 rx-6
drwxr-xr-x 2 root root 0 Sep 25 19:09 rx-7
drwxr-xr-x 3 root root 0 Sep 25 19:09 tx-0
drwxr-xr-x 3 root root 0 Sep 25 19:09 tx-1
drwxr-xr-x 3 root root 0 Sep 25 19:09 tx-2
drwxr-xr-x 3 root root 0 Sep 25 19:09 tx-3
drwxr-xr-x 3 root root 0 Sep 25 19:09 tx-4
drwxr-xr-x 3 root root 0 Sep 25 19:09 tx-5
drwxr-xr-x 3 root root 0 Sep 25 19:09 tx-6
drwxr-xr-x 3 root root 0 Sep 25 19:09 tx-7
我用ethtool -X eno2 weight 1 1 1 1 1 1 1 1
来给所有的人同等的分量。
当我将流量转发到eno2
时,它的一个rx队列一次只能工作。这是时间ethool -X eno2 | grep rx_queue_'[0-7]'*_packets
的结果,假设t1:
rx_queue_0_packets: 0
rx_queue_1_packets: 1
rx_queue_2_packets: 40251934
rx_queue_3_packets: 0
rx_queue_4_packets: 6
rx_queue_5_packets: 3
rx_queue_6_packets: 0
rx_queue_7_packets: 1
如果我做另一个实验(让我们在时间t2说)并运行相同的命令,结果将类似于:
rx_queue_0_packets: 0
rx_queue_1_packets: 1
rx_queue_2_packets: 40251934
rx_queue_3_packets: 0
rx_queue_4_packets: 6
rx_queue_5_packets: 76334041
rx_queue_6_packets: 0
rx_queue_7_packets: 1
如您所见,每次只有一个rx队列处于活动状态。我想知道如何在所有rx队列之间分配负载?
顺便说一句,我还尝试了echo ffffffff > /sys/class/net/neo2/queues/rx-0/rps_cpus
在所有32个cpu内核上分配负载(使用所有rx队列),但是没有用。
我还尝试使用ethrtool
来操纵rx和tx的数量,但它也不起作用。
我们将不胜感激任何帮助。