2

假设我有以下设置:

运行两个 KVM 虚拟机(VM1VM2)、一个虚拟网桥virbr和两个网桥分接头vTAP1vTAP2主机。VM 分别连接到 vTAPS。

我在主机上运行了一个应用程序,它测量网桥上的不同负载指标。为了实现这一点,它需要获取 vTAPS,以便通过网桥在 vTAP 之间传输数据包以进行测量。问题是我无法获取 vTAPS,因为
ioctl TUNSETIFF系统调用失败并显示EBUSY errno。 我猜这是因为应用程序(在主机上运行)不是水龙头的所有者(由 VM 拥有)。添加新的临时桥接 vTAPS 进行测量可能并不总是一种解决方案,因为有时我想直接测量 VM vTAPS 之间的流量。尝试的解决方案:有一个

多队列 tuntap 接口

Linux 支持多队列 tuntap,它可以使用多个文件描述符(队列)来并行发送或接收数据包。设备分配和以前一样,如果用户要创建多个队列,必须多次调用具有相同设备名称的 TUNSETIFF 并带有 IFF_MULTI_QUEUE 标志。

使用IFF_MULTI_QUEUE阻止了ioctlEBUSY errno 失败,但它在使用EINVAL errno向 vTAP写入系统调用时开始失败。所以它并没有真正解决任何问题。

我会很感激任何帮助,谢谢。

4

0 回答 0