我将数据包中的帧从客户端发送到要调整流量的服务器上的服务器。我使用这个脚本来控制流量。先降到 80 kbit,10 秒后降到 40 kbit。(我知道这太低了,我通常使用更大的值)
#!/bin/bash
datenrate=80
datenrate2=40
echo "setting datarate to ${datenrate}"
touch started.info
sudo tc qdisc del dev ens3 root
sudo tc qdisc add dev ens3 handle 1: root htb default 11
sudo tc class add dev ens3 parent 1: classid 1:1 htb rate ${datenrate}kbit
sudo tc class add dev ens3 parent 1:1 classid 1:11 htb rate ${datenrate}kbit
echo "worked"
MSECONDS=$(($(date +%s%N)/1000000))
STOPTIME=0
while :
do
STOPTIME=$((($(date +%s%N)/1000000) - $MSECONDS))
if [ $STOPTIME -ge 10000 ]
then
sudo tc qdisc del dev ens3 root
sudo tc qdisc add dev ens3 handle 1: root htb default 11
sudo tc class add dev ens3 parent 1: classid 1:1 htb rate ${datenrate2}kbit
sudo tc class add dev ens3 parent 1:1 classid 1:11 htb rate ${datenrate2}kbit
touch calledthrottle.info
break
fi
done
echo "10 sec over - setting up a datarate drop to ${datenrate2} kbit"
while :
do
STOPTIME=$((($(date +%s%N)/1000000) - $MSECONDS))
if [ $STOPTIME -ge 20000 ]
then
sudo tc qdisc del dev ens3 root
echo "set to normal"
break
fi
done
touch ended.info
在我的客户端上,我生成了一个使用 GNUPlot 绘制的日志文件,并且我都计算了服务器和客户端上的平均上传速度。在这种情况下为 2740 kbit/s。我没有正确使用 tc 工具吗?
使用 GNUPlot 生成的结果图片: 上传速度
tc qdisc show dev ens3
给我
qdisc pfifo_fast 0:根 refcnt 2 个波段 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
我无法删除
sudo tc qdisc del dev ens3 root
如果有人能指出我正确的方向并能解释为什么会有如此高的上传速率,为什么会有帧以更高的吞吐量通过然后成形,那就太好了。谢谢你。
按照建议更新
好的 tc 中的上传速率 80 kbit 给我大约 80*8 = 640 KiloBit/s。依然无法解释小包收入的波动