0 linux network-programming trafficshaping ipfw
我正在使用tc内核2.6.38.8进行流量整形.限制带宽工作,增加延迟工作,但是当使用延迟整形两个带宽时,如果限制大于1.5 Mbps左右,实现的带宽总是远低于限制.
例:
tc qdisc del dev usb0 root
tc qdisc add dev usb0 root handle 1: tbf rate 2Mbit burst 100kb latency 300ms
tc qdisc add dev usb0 parent 1:1 handle 10: netem limit 2000 delay 200ms
Run Code Online (Sandbox Code Playgroud)
产生201 ms的延迟(从ping开始),但容量仅为1.66 Mbps(来自iperf).如果我消除延迟,带宽恰好是2 Mbps.如果我指定1 Mbps和200 ms RTT的带宽,一切正常.我也尝试过ipfw + dummynet,它会产生类似的结果.
我尝试HZ=1000在Kconfig中使用重建内核- 这并没有解决问题.其他想法?
小智 6
它实际上不是一个问题,它的行为就像它应该的那样.由于您已经添加了200毫秒的延迟,因此完全没有使用完整的2Mbps管道.我建议您更详细地研究TCP/IP协议,但这里是对iperf发生的事情的简短总结:您的默认窗口大小可能是3个数据包(可能每个1500个字节).你用3个数据包填充你的管道,但现在必须等到你收到确认(这是拥塞控制机制的一部分).由于您将发送延迟200毫秒,这将需要一段时间.现在你的窗口大小将增加一倍,然后你可以发送6个数据包,但是还需要等待200ms.然后窗口大小再次翻倍,但是当窗口完全打开时,