allot
当从外部请求一个 CBQ 发包的时候,它就会按照“priority”参数指定的顺序轮流尝试其内部的每一个类的队列规定。当轮到一个类发数据时,它只能发送一定量的数据。“allot”参数就是这个量的基值。更多细节请参照“weight”参数。
prio
CBQ可以象 PRIO设备那样工作。其中“prio”值较低的类只要有数据就
必须先服务,其他类要延后处理。
weight
“weight”参数控制 WRR 过程。每个类都轮流取得发包的机会。如果其
中一个类要求的带宽显著地高于其他的类,就应该让它每次比其他的类发
送更多的数据。
CBQ 会把一个类下面所有的 weight 值加起来后归一化,所以数值可以任
意定,只要保持比例合适就可以。人们常把“速率/10”作为参数的值来
使用,实际工作得很好。归一化值后的值乘以“allot”参数后,决定了每
次传输多少数据。
bandwidth
网卡的物理带宽,用来计算闲置时间。
cell
一个数据包被发送出去的时间可以是基于包长度而阶梯增长的。一个800
字节的包和一个806字节的包可以认为耗费相同的时间。也就是说它设置
时间粒度。通常设置为8,必须是2的整数次幂。
maxburst
这个参数的值决定了计算 maxidle 所使用的数据包的个数。在 avgidle 跌
落到0之前,这么多的数据包可以突发传输出去。这个值越高,越能够容
纳突发传输。你无法直接设置 maxidle 的值,必须通过这个参数来控制
minburst
如前所述,发生越限时 CBQ 会禁止发包。实现这个的理想方案是根据事
先计算出的闲置时间进行延迟之后,发一个数据包。然而,UNIX的内核
一般来说都有一个固定的调度周期(一般不大于10ms),所以最好是这样:
禁止发包的时间稍长一些,然后突发性地传输 minburst 个数据包,而不是
一个一个地传输。等待的时间叫做offtime。
从大的时间尺度上说,minburst 值越大,整形越精确。但是,从毫秒级的时
间尺度上说,就会有越多的突发传输。
minidle
如果 avgidle 值降到0,也就是发生了越限,就需要等待,直到avgidle 的
值足够大才发送数据包。为避免因关闭链路太久而引起的以外突发传输,
在avgidle 的值太低的时候会被强制设置为minidle 的值。
参数 minidle 的值是以负微秒记的。所以 10 代表 avgidle 被限制在-10us
上。
mpu
最小包尺寸!a因为即使是 0长度的数据包,在以太网上也要生成封装成
64 字节的帧,而需要一定时间去传输。为了精确计算闲置时间,CBQ 需
要知道这个值。
rate
期望中的传输速率。也就是“油门”!