我试图了解多队列调谐器接口是如何工作的。按照在:https://www.kernel.org/doc/Documentation/networking/tuntap.txt中提供的说明,我能够创建多个队列。然而,我不知道如何检查皇后的状态和它们是在哪里创建的。我试过:
$ tc -s class show dev tap0(其中tap0是我的tap接口),我看到大约255个队列,甚至对于一个带有IFF_MULTI_QUEUE标志的ioctl调用也是如此。所以我可能看错地方了。下面是上面命令输出的片段:
class mq :1 root
Sent 4741 bytes 37 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
class mq :2 root
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
.
.
.
class mq :ff root
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
class mq :100 root
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0其次,我不知道如何使用TC或任何其他工具,基于某种过滤器或分类器将数据包引导到这些队列。如果有人能给我解释清楚,我会很感激的。
PS:我不知道哪个是问这些问题的最好的论坛,如果有人能给我指点正确的问题,我会很感激的。我试过了:https://unix.stackexchange.com/questions/496043/multiqueue-tun-tap-interface,但还没有得到令人信服的答案。谢谢!
发布于 2019-01-31 19:44:01
对于第二个问题,通过几次试验和错误,我可以将数据包引导到特定的类。这更多是一种探索性的努力,所以不确定这是否是“最好的”方式。下面是我想要实现的一个简单的背景:假设我们有一个多队列的tap接口,其中包含两个队列和相应的fds、fd1和fd2,那么我想在fd1上接收特殊的流,其余的都指向fd2。我能够在应用层创建两个队列,再次使用这个链接。但是数据包被随机分配到这些队列中,很可能是基于它们的散列。
为了引导数据包到达特定的流,并最终到达相应的fds,我使用了tc。如果在多队列抽头接口上使用tc multiq创建类,则会得到与tap接口支持的类相同的类;在上面的示例中,我得到了两个类。然后,您可以利用tc筛选器和操作(滑车洞)进行队列映射。
应采取以下步骤:
首先创建tap接口(这里使用我自己的程序和脚本)。
$ ./createTap.sh tap0
检查队列的数量。我仍然不知道为什么我们在这里看到255节课(问题1,我原来的帖子)。
$ tc -s class show dev tap0 class mq :1 root Sent 4741 bytes 37 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 class mq :2 root Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 . . . class mq :ff root Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 class mq :100 root Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0
让我们在tap0上创建multiq:
$ tc qdisc add dev tap0 root handle 1: multiq
看看我们现在有多少堂课。请注意,我们现在只有两个类,而不是255个:
$ tc -s class show dev class multiq 1:1 parent 1: Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 class multiq 1:2 parent 1: Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 `
最后,使用tc滤波器来指导您想要的数据包。
希望这对其他人有帮助!
https://serverfault.com/questions/951385
复制相似问题