qos规则有两个重要属性,分别是type和queues。
“tc”中,队列(queue)分为无类队列,有类队列。
无类队列只有一条队列,只有一种队列规则(qdisc);而有类队列分为很多类(class),数据包到达时,根据不同的数据包类型,源目的ip,端口等等属性,被筛选器(filter)划分进不同的类中,不同的类可能有不同的队列规则,不同的类也可以继续划分,嵌套下去。
type就相当于不同的队列,具有不同的队列规则;queues就相当于有类队列的不同类。这里的type值设置为”linux-htb”。
linux-htb使用了”tc”的htb队列(hieratchical token bucket),分层次的令牌桶队列,属于有类队列。
在无类队列中,最简单的是pfifo_fast队列,采取先入先出的算法,只能延迟数据包发送或丢弃数据包,不能对数据包进行调度,即改变数据包发送顺序。
还有一种tbf队列(token bucket filter),采取上面提到的令牌桶的算法,而htb就是在tbf的基础上修改为了有类队列,其核心算法还是令牌桶算法。
Open vSwitch的qos规则除了提供linux-htb类型,还提供了linux-hfsc类型,对应了”tc”中的hsfc队列(hieratchical fair service curve),分层次的公平服务曲线队列,它同时除了针对带宽,还针对延迟对数据包进行调度,其原理参考http://linux-ip.net/articles/hfsc.en 。Open vSwitch和qos功能相关的命令和属性并不多,所以如果无法满足需求,只能直接使用linux的”tc”功能。