同时实施HTB,NetEM和TBFstream量控制

我正在使用一个bash实用程序,它将使用tc Linux命令行实用程序的几个方面来模拟各种networking条件。 我已经成功地构build了几个qdisc层次结构,分别用于HTB带宽控制,NetEM延迟和数据包操作,TBF速率控制,以及HTB-NetEM的组合处理程序,TBF-NetEM。一个单一的结构,在这种情况下,我需要在一个连接上控制所有这些因素。 这是我迄今为止:

sudo tc qdisc add dev $interface root handle 1:0 htb sudo tc class add dev $interface parent 1:0 classid 1:1 htb #htb args sudo tc qdisc add dev $interface parent 1:1 handle 10:0 tbf #tbf args sudo tc qdisc add dev $interface parent 10:1 handle 101:0 netem #netem args 

由于我的范围较小,我知道问题不在于我的input语法,而是可能在我的tc qdisc和classes的结构中。 当我尝试在我的网桥的两个以太网端口上同时运行这些命令以及速率和带宽整形参数(分别为10和15 Mbit / s)时,不显示TCP或UDP中iperftesting的带宽变化。 任何意见,将不胜感激。

这里是我的其他工作复合结构,以防他们可能帮助:

HTB和NetEM:

  sudo tc qdisc add dev $interface root handle 1: htb sudo tc class add dev $interface parent 1:0 classid 1:1 htb #htb args sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem #netem args 

TBF和NetEM:

  sudo tc qdisc add dev $interface root handle 1:0 tbf #tbf args sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem #netem args 

你想要的不是HTB / TBF而是HFSC。

http://man7.org/linux/man-pages/man7/tc-hfsc.7.html

您可以将netem附加到叶类。

这里是一个示例脚本,让你开始

 #!/bin/bash tc qdisc add dev veth1 parent root handle 1: hfsc default 11 tc class add dev veth1 parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit tc class add dev veth1 parent 1:1 classid 1:11 hfsc sc rate 50mbit tc class add dev veth1 parent 1:1 classid 1:12 hfsc sc umax 1500 dmax 50ms rate 10mbit ul rate 10mbit tc qdisc add dev veth1 parent 1:12 handle 12 netem delay 150ms tc filter add dev veth1 parent 1: protocol ip u32 match ip sport 22 0xffff flowid 1:12 

这创build了一个100mbit的类,其中50mbit是默认类(但可以突发到100mbit),而另一个类允许实时需求,使得1500字节的包必须在50ms内离开队列,这个类的最大速率是10mbit每时每刻。

最后,我们在这个类上增加了一个叶子qdisc,这个类实际上是延迟了离开队列的数据包150ms。

进入实时类的stream量是基于它具有源端口22属性(因此所有的sshstream量)而被select的。