我在 Linux 下有一个路由器/网关,我想添加一些 QoS 来为特定流预留带宽。这可以通过 iptables/netfilter 和 tc 来完成,但所有示例都是从您事先知道可用的总带宽这一事实开始的。
问题是,我的 WAN 是移动的 3G 连接,性能参差不齐。第 1 天,我可以有 5 Mbps,下雨天 2 下降到 2 Mbps。我如何保证我的流 1 将始终具有 100Kbps 的低延迟可用?
我想到了一个复杂的解决方案,使用每天或每小时的脚本来检查带宽并动态创建和应用 QoS 脚本,但这对我来说不是一个好的解决方案。
您应该能够使用 hfsc 调度程序实现您的目标。您将有能力保留一部分带宽并通过“实时”提供低延迟保证,其他类将按比例使用“链接共享”填充其余带宽。
这里重要的是使用实时而不是链接共享,因为实时,为了确保能够在最后几毫秒发送数据包,能够阻止其他类发送数据包。
为了完成你想要的,你需要在根类上设置一个上限(可能是 10MB),但在叶子类上没有 ul 。由于 hfsc linkshare 在所有“ls”类之间共享带宽的方式,它们将共享可用带宽,如果有更多,则超过 m2 值。
例如,您可以使用这种设置:
值可能需要根据您的需要进行更改,尤其是在 100 类中,尽管我尝试编写这些数字以适应您的 3G。
您应该阅读有关 man tc-hfsc、这篇文章和这篇文章的更多信息,以了解有关 hfsc 及其工作原理的更多信息。