我正在尝试 TUN 接口 multi_queue 功能。它运行良好,流量被分配到不同的队列,为我的应用程序提供了更好的性能。
但是,我还注意到,与使用未设置 multi_queue 的 tuptap 命令创建接口的情况相比,仅使用带有 multi_queue 的 tuntap 命令创建 TUN 接口会使内核消耗更多 GB 的内存。
我在 Ubuntu 20 上进行了测试,运行内核 5.4.0-94-generic,对于大约 1200 个 TUN 接口,系统消耗了高达 30GB 的内存,而当 1200 个 TUN 接口没有 multi_queue 时,系统消耗了 0.3GB 内存。
我的测试很简单,运行 vmstat 来监视可用内存,并使用 tuptap 和 multi_queue 通过脚本创建 1200 TUN 接口。
我的问题是是什么导致了内存消耗之间的这种差异。谢谢。
答案1
我想我现在明白了。今天,当我们创建 multi_queue tun 接口时,内核会无条件创建 256 个队列。当我们不设置 multi_queue 标志时,只会创建一个 tx 队列。