使用 tc 进行百分比动态带宽控制

使用 tc 进行百分比动态带宽控制

有人知道 tc (iproute2) 是否可用于按百分比划分当前可用带宽吗?我们使用的是 GPRS 连接,可用带宽经常变化。我想要实现以下目标:

  • 到端口 x 的出口:可用带宽的 60%
  • 出口至端口 y:30% 可用带宽
  • 所有其他出站流量:可用带宽的 10%

使用 tc,我通过使用 htb qdisc 并创建速率为 60 / 30 / 10 kbps 的 3 个类,成功实现了这一目标。通过使用 100kbs 的上限,这些类将使用 100kbs 以下的任何可用带宽(如果可用),但绝不会超过。

然而,这种静态配置的带宽对我们来说不是一种可行的解决方案,因为我们的带宽变化很大,我们不想配置上限。我们的目标是尽可能多地使用可用带宽。理想情况下,我们不想以字节/秒为单位配置速率,而是以百分比为单位。这可能吗?我查看了 prio qdisc,但那里的文档确实很缺乏。

谢谢!

答案1

经过一番研究,并感谢 EEAA 的评论,很明显按百分比划分可用带宽是不可能的。

答案2

您应该能够使用 hfsc 调整您的流量:linkshare m2 带宽应该是百分比。以下是一些文档:(123

您可以尝试以下代码:

iptables -t mangle -A POSTROUTING -p tcp --dport 80 -j CLASSIFY --set-class 1:100
iptables -t mangle -A POSTROUTING -p tcp --dport 80 -j ACCEPT
iptables -t mangle -A POSTROUTING -p tcp --dport 22 -j CLASSIFY --set-class 1:200
iptables -t mangle -A POSTROUTING -p tcp --dport 22 -j ACCEPT
iptables -t mangle -A POSTROUTING -j CLASSIFY --set-class 1:300

tc qdisc del dev enp0s3 root
tc qdisc add dev enp0s3 root handle 1:0 hfsc default 100

tc class add dev enp0s3 parent 1:0 classid 1:10 hfsc ls m2 1000kbit

tc class add dev enp0s3 parent 1:10 classid 1:100 hfsc ls m2 600kbit
tc qdisc add dev enp0s3 parent 1:100 handle 110: fq_codel

tc class add dev enp0s3 parent 1:10 classid 1:200 hfsc ls m2 300kbit
tc qdisc add dev enp0s3 parent 1:200 handle 210: fq_codel

tc class add dev enp0s3 parent 1:10 classid 1:300 hfsc ls m2 100kbit
tc qdisc add dev enp0s3 parent 1:300 handle 310: fq_codel

相关内容