假设我已完成以下设置:
主机,它运行两个KVM VM( VM1 和 VM2 ),一个虚拟网桥 virbr ,以及两个桥接器 vTAP1 和 vTAP2 。 VM分别附加到vTAPS。
我在主机上运行了一个应用程序,用于衡量网桥上的不同负载指标。为实现这一目标,需要获取vTAPS,以便通过桥接器在vTAP之间传输数据包进行测量。
问题是我无法获取vTAPS,因为 ioctl TUNSETIFF 系统调用失败, EBUSY 错误号。
我想这是因为应用程序(在主机上运行)不是分接头的所有者(由VM拥有)。添加用于测量的新临时桥vTAPS可能并不总是一种解决方案,因为有时我会想直接在VM vTAPS之间测量流量。
尝试解决方案: Multiqueue tuntap界面:
Linux支持多队列tuntap,可以使用多个 用于并行化发送或接收数据包的文件描述符(队列)。该 设备分配与之前相同,如果用户想要创建多个 具有相同设备名称的队列,TUNSETIFF必须多次调用 IFF_MULTI_QUEUE标志。
使用 IFF_MULTI_QUEUE 阻止了 ioctl 失败并使用 EBUSY 错误,但它开始在写系统调用失败带有 EINVAL 错误的vTAP。所以它并没有真正解决任何问题。
感谢您的帮助,谢谢。