CQ

Admin in 百科 2024-04-09 15:50:40



CQ 即Customized Queue 用户定制队列。CQ可以说是对PQ的一种改进,解决了PQ“饿死”的重大缺点,能够确保使所有的队列都得到服务。CQ可以把报文分类,然后按照类别将报文分配到CQ的一个队列中去,而对于每个队列,也可以规定队列中报文所占接口的带宽比例,这样,可以让不同业务的报文获得合理的带宽,从而既保证关键业务能获得较多的带宽,又不至于使非关键业务得不到带宽。

CQ有0-16个队列,其中0队列是优先级队列,只有0队列的报文处理完才会去处理1-16队列,所以0队列一般用做系统队列。用户可根据协议类型、报文大小、协议端口号,以及相应的Access List规则,配置各种队列以及分配相应带宽,各个队列按照预先设定的带宽调度发送。CQ的优点是能保证各种应用能分配到一定的带宽,适用于应用相对简单的场合(如金融等专网),并且调度算法相对简单,路由器转发效率较高;缺点是配置相对复杂,并且网络管理员必须事先知道该网络的详细应用,对于管理员要求较高,对于复杂应用网络,16个优先级似乎不够。

CQ采用Round Robin(轮询)调度方式,从队列1开始,从每个队列取出指定数目的报文,直到报文数目满足或者超出设置的范围,当从该队列取出了足够的报文或者队列中没有报文的话,开始对下一个队列进行类似的操作。CQ不会配置确切的链路带宽比例,而是配置字节数目,可以根据配置的每个队列应取得的字节数目计算出每个队列占用的链路带宽,公式为:该队列应取得的字节数目/所有队列应取得的字节数目=该队列占用的链路带宽。如果一段时间内某个队列为空,剩余的队列按照比例分配该空队列所占用的带宽。举个例子来说:现在配置了5个队列,每次取的字节数分别为5000、5000、10000、10000、20000,如果5个队列都有充足的报文需要发送,那么每个队列分配的带宽比例为10%、10%、20%、20%、40%;假设队列4有一段时间内没有报文发送,即队列为空,那么剩余的4个队列把这20%的带宽按照1:1:2:4的比例进行分配,所以在这段时间内这四个队列实际分配的带宽为12.5%、12.5%、25%、50%。

CQ不能将报文进行分片,例如要从队列1拿出1500字节的报文,可能会出现如下情况:

前面拿了1499bytes,还需要拿1byte,但是紧接着的一个报文大小是1500bytes,那么实际上从该队列拿出了1499+1500=2999bytes了,所以从局部来看的话,调度的比例和预期设置的结果有出入。假如有3个队列,每个队列中的数据包大小分别为500字节,300字节和200字节,如果想让这3个队列平均的占用带宽,为这3个队列定义的字节数分别为200字节,200字节和200字节,但是实际上生效的带宽占用比为5/3/2.因此如果把队列中数据包的字节数定义的过小的话,将导致带宽分配的不尽如人意。但是如果把队列中数据包的字节数定义的过大,那么将导致下一个队列中的数据包被转发的等待时间过长。
特点
(1) Tail drop是唯一的丢弃机制;

(2)最大16个队列(因为0队列用做系统队列,这里不计算在内);

(3)队列内部使用FIFO逻辑;

(4)在对各队列进行调度时,使用Round-Robin对各队列按字节数调度。

CQ可以应用在对抖动要求不严格同时能够根据需要对不同分类的流量保留指定链路带宽的情况。
限制
1.由于CQ是静态配置的,因此它不能适应网络结构的改变。

2.由于数据包要经过处理器卡的分类,因此CQ对数据包转发的速度要比FIFO慢。

免责声明:本站文字信息和图片素材来源于互联网,仅用于学习参考,如内容侵权与违规,请联系我们进行删除,我们将在三个工作日内处理。联系邮箱:chuangshanghai#qq.com(把#换成@)

cq
-- End --