参考 tuntap
我为每个tuntap队列创建了多线程。每个线程使用自己的libev循环。而当使用 ping
来创建低速流,每个队列都会被唤醒。但是当使用 iperf3
创建高速流,所有的数据包将被分配到一个线程。
以下是 ping
日志 140213476759296
和 140213468366592
将收到数据包交。
(140213476759296) tapsw.c +171 tap_recv_cb()
(140213468366592) tapsw.c +171 tap_recv_cb()
(140213476759296) tapsw.c +171 tap_recv_cb()
(140213468366592) tapsw.c +171 tap_recv_cb()
但随着 iperf3
:
(140213468366592) tapsw.c +171 tap_recv_cb()
(140213468366592) tapsw.c +171 tap_recv_cb()
(140213468366592) tapsw.c +171 tap_recv_cb()
(140213468366592) tapsw.c +171 tap_recv_cb()
为什么tuntap多队列之间不能平衡?
内核tun将使用四个元组哈希键来识别一个流。所以iperf3将只在一个队列中。