如果某个低优先级的数据stream能够达到X Mbps的带宽,但是只有当这个接口上的所有stream/类的总带宽不超过X时,我该怎么做QoS设置? 同时,其他数据stream/类别不能限制为X.
用例是ISP通过计算5分钟间隔内的带宽平均值并logging最大值来loggingstream量。 我希望将最大使用量保持在最低限度(即在接口繁忙时间中终止批量传输),但是在闲置/低通信量时间内获取数据。
看看经常使用的有类调度程序CBQ,HTB和HSFC,我看不出一个简单的方法来实现这一点。
我得到这个在hfsc工作。 我假设你的例子中的“X”是100mbit,但这可以是任何当然的事情。
这里的技巧是创build一个树类,如下所示:
+--------------------------------------------------------------+ +---------------------+ | | | 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的需求。
注意事项:
我testing了两个相互竞争的应用程序通过2个服务尽可能快地向邻居主机发送数据。 其中一个服务是在课堂上1:11。 他们都发送了超过100mbit(所以60MB的数据stream)5秒的stream量。 在运行无类别时,如预期的那样在10秒内完成(所有时间均分共享链接)。
有了这个QoS设置,优先级服务在5秒内完成,而低优先级服务在10秒内完成(好像低优先级正在等待高优先级先完成),我认为是你想要的。
我不确定这是否可行,但你可以试试HTB:
rate设置为零(或者几乎为零),并且将单元设置为实际的最大值X.这导致具有保证速度为零的低优先级stream和借用最大X兆比特/来自其他stream。 根据HTB文件 ,这应该工作。 但是,我没有自己尝试。
编辑 :这将不会限制低priostream量,而链接有X MBit / s空闲带宽。 但这可能是一个开始…
这是很尴尬的,但是如果你可以手动改变极限,你可以在一个更精细的网格上进行守护进程的平均(例如,每隔1分钟logging一次最后的5-10次)。 然后,您只需要一个相当简单的控制循环,您可以调整stream量限制,使5分钟平均值保持在您的限制范围内。 更复杂的stream量预测scheme是可选的。