在尝试了解多队列排队规则(mq qdisc)时,我偶然发现了以下配置:
在我的笔记本电脑上,我的 WiFi 接口实现了具有 1 rx 和 4 tx 的 mq qdisc :
$ sudo tc qdisc list dev wlp2s0
qdisc mq 0: root
qdisc pfifo_fast 0: parent :4 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: parent :3 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: parent :2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: parent :1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
$ sudo ll /sys/class/net/wlp2s0/queues/
total 0
33458 0 drwxr-xr-x 2 root root 0 août 18 05:54 rx-0/
33461 0 drwxr-xr-x 3 root root 0 août 18 05:54 tx-0/
33472 0 drwxr-xr-x 3 root root 0 août 18 05:54 tx-1/
33483 0 drwxr-xr-x 3 root root 0 août 18 05:54 tx-2/
33494 0 drwxr-xr-x 3 root root 0 août 18 05:54 tx-3/
另一方面,在 HP ProLiant 服务器上,每个 NIC 都实现一个具有 4 个 rx 和 1 个 tx 的 mq qdisc:
$ sudo tc qdisc show dev eno3
qdisc mq 0: root
qdisc pfifo_fast 0: parent :1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
$ sudo ll /sys/class/net/eno3/queues/
total 0
41241 0 drwxr-xr-x 2 root root 0 août 12 23:17 rx-0/
41244 0 drwxr-xr-x 2 root root 0 août 12 23:17 rx-1/
41247 0 drwxr-xr-x 2 root root 0 août 12 23:17 rx-2/
41250 0 drwxr-xr-x 2 root root 0 août 12 23:17 rx-3/
41256 0 drwxr-xr-x 3 root root 0 août 12 23:17 tx-0/
我猜多队列的重点是性能,那么这背后的原因是什么?为什么 WiFi 卡实现“tx 多队列”,而 NIC 实现“rx 多队列”?
答案1
我不知道我能否果断地回答你的问题。为此,我需要了解硬件工程师和 NIC 驱动程序编写者的设计决策。您已经正确地注意到多队列中使用的队列数量的差异,但是,它们的应用方式与您所描述的不同。
提供的输出tc
仅显示 Tx 队列。 mq
是一个逻辑 qdisc,它允许关联下面的其他队列规则。我不知道这mq
对它自己有什么影响。如果您的无线 NICmq
在根级别设置为具有 4 个 Tx 队列,则使用pfifo_fast
:Linux 默认值。
您会注意到 ProLiant 服务器的输出完全不同。
$ sudo tc qdisc show dev eno3
qdisc mq 0: root
qdisc pfifo_fast 0: parent :1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
$ sudo ll /sys/class/net/eno3/queues/
total 0
41241 0 drwxr-xr-x 2 root root 0 août 12 23:17 rx-0/
41244 0 drwxr-xr-x 2 root root 0 août 12 23:17 rx-1/
41247 0 drwxr-xr-x 2 root root 0 août 12 23:17 rx-2/
41250 0 drwxr-xr-x 2 root root 0 août 12 23:17 rx-3/
41256 0 drwxr-xr-x 3 root root 0 août 12 23:17 tx-0/
它确实显示了在根级别的使用mq
,但它实际上是单个队列。这是因为只有一个实例与pfifo_fast
的输出中显示的单个 Tx 队列关联sysfs
。
为什么?尊重服务器,这确实有一定道理。根据所提供的服务,接收的数据可能比发送的数据多得多。至于WiFi……我真的不知道。人们会期望笔记本电脑接收的数据会多于发送的数据。
无论如何,如果您使用支持多个队列的硬件(您就是这样),您可以通过以下方式调整 NIC 驱动程序使用的队列数量:ethtool
。读ethtool 的手册页为了更好的理解。