如何在某个低优先级数据流达到X Mbps带宽的情况下进行QoS设置,但前提是此接口上的当前总带宽(所有流/类)不超过X?同时,其他数据流/类不得限于X.
用例是ISP通过计算5分钟间隔的平均带宽并计费最大值来计费流量.我希望将最大使用量保持在最低限度(即在接口忙碌时间内解除批量传输),但在空闲/低流量时间内获取数据.
查看经常使用的有类调度程序CBQ,HTB和HSFC,我看不到一种直接的方法来实现这一点.
解决方法
我让它在hfsc中工作.我假设你的例子中的“X”是100mbit,但那当然可以是任何东西.
这里的技巧是创建一个像这样的树类:
+--------------------------------------------------------------+ +---------------------+ | | | 1:1 | | root | |---------------------| | + | | Rate: 100mbit | | | | | Upper Rate: 100mbit | | | | | | | | | | | | | | | | | +----v------+ | +---------------------+ | | 1:1 | | | | | | +---------------------+ | +--+---+----+ | | 1:10 | | | | | |---------------------| | | | | | Rate: 100mbit | | | | | | Upper Rate: 100mbit | | | | | | | | +----------+------+ +--------+----------+ | | | | | 1:10 | | 1:11 | | | | | | | | | | +---------------------+ | +----------+ +----------+ | | | +---------------------+ | | | 1:11 | | | |---------------------| | | | Rate: 10kbit | +--------------------------------------------------------------+ | Upper Rate: 100mbit | | | | | | | +---------------------+
神奇之所以发生,因为类1:10(默认类)设置为始终获得100mbit的保证带宽,而“慢”类1:11提供的保证带宽仅为10kbit,突发为100mbit.
这迫使根类(1:1)总是在1:11之前满足1:10的需要.
注意事项:
>不要使用iptables CLASSIFY目标将流量放入1:11.它的
做分类真的很慢.请改用流量控制过滤器.或者如果您有许多应用程序可以进入这里
端口可以变化为过滤,使用cgroup.
>将hfsc上的默认目标设置为1:10.
>您可能应将“慢”链接设置为至少为主机的tcp最大段大小.通过这种方式,您可以尝试让您的发送应用程序停留在慢速队列中以长时间阻塞,而内核不必重新协商窗口大小等等.
我测试了这个有两个竞争应用程序尽可能快地将数据发送到2个服务的相邻主机.其中一项服务是在班级1:11.他们都传输了超过100mbit的5秒流量(因此流传输了60MB的数据).当运行无类别时,正如预期的那样都在10秒内完成(两者共享链接,因此时间平均分配).
使用此QoS设置,优先服务在5秒内完成,而低优先级服务在10中完成(好像低优先级等待高优先级首先完成),我认为这是您想要的.