2012年2月26日星期日

tc-sfq

Stochastic Fairness Queueing (SFQ) 是公平队列算法的一个简单实现,它准确度不高,但计算开销也比较小,也能够保证公平。

SFQ为每一个会话(TCP或UDP)提供一个FIFO的队列(这里的会话通常是[source address, destination address, source port ]),然后每个队列采用round robin的方式去发送数据。实际的实现并不会为每个会话提供一个队列,而是采用hash算法将流量分配到有限的几个队列中,这时,多个会话可能会分到同一个queue中,降低各种发包的机会(减少了速率),为了避免这种情况,SFQ会动态的调整hash算法,减少出现这种冲突的时间,在调整过程中,可能会出现包乱序的情况。

SFQ只进行调度,并不进行流量整形。并且需要保证拥塞的队列是在当前配置策略的机器上,即如果拥塞地方在其他的链路则没有效果。SFQ通常和其他的classful的qdisc如HTB一起使用。

参数:

perturb - hash算法重新调整的时间间隔,建议值10秒。

quantum - round robin每一轮可以发送的字节数,不能比MTU小。

limit - SFQ队列缓存的包个数,超过了就开始丢弃,默认128个包。

例子:


# tc qdisc add dev ppp0 root sfq perturb 10
# tc -s -d qdisc ls
qdisc sfq 800c: dev ppp0 quantum 1514b limit 128p flows 128/1024 perturb 10sec 
 Sent 4812 bytes 62 pkts (dropped 0, overlimits 0) 

800c是自动指定的handle id,队列长度限制为128个包

没有评论:

发表评论