首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多队列tun/tap接口

多队列tun/tap接口
EN

Server Fault用户
提问于 2019-01-29 21:50:42
回答 1查看 2.4K关注 0票数 3

我试图了解多队列调谐器接口是如何工作的。按照在:https://www.kernel.org/doc/Documentation/networking/tuntap.txt中提供的说明,我能够创建多个队列。然而,我不知道如何检查皇后的状态和它们是在哪里创建的。我试过:

代码语言:javascript
复制
$ tc -s class show dev tap0

(其中tap0是我的tap接口),我看到大约255个队列,甚至对于一个带有IFF_MULTI_QUEUE标志的ioctl调用也是如此。所以我可能看错地方了。下面是上面命令输出的片段:

代码语言:javascript
复制
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,但还没有得到令人信服的答案。谢谢!

EN

回答 1

Server Fault用户

回答已采纳

发布于 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滤波器来指导您想要的数据包。

希望这对其他人有帮助!

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/951385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档