有人知道 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 带宽应该是百分比。以下是一些文档:(1,2,3)
您可以尝试以下代码:
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