首页 > 代码库 > PQ(Priority queuing优先级队列)
PQ(Priority queuing优先级队列)
PQ(Priority queuing优先级队列)
一种很传统,但不能不谈的队列
PQ是一种具备严格的,分等级执行调度的队列,它可以最多创建4个不同等级的队列,分别是高、中、普通、低;然后根据对不同的数据流量分类,将不同的分类数据送入到4个不同等级的队列。如图X所示,然后以100%的使用带宽的方式,首先服务于处于“高”队列中的数据,直到“高”队列中的数据全部发送完成,再服务于“中”队列中的数据,以此类推,再服务于“普通”队列,最后才是“低”队列。按照这样的逻辑,PQ队列的最大特点是高优先级的队列总是被服务,那么这可能会导致低优先级队列中的数据被“饿死”,为什么呢?如果高优先级队列一直持续发送数据,那么PQ的调度器,将保证高优先级的队列数据发送完成后,才能轮到较低优先级的队列发送,换而言之,处于“低”等级队列中的数据,必须要等待“高”、“中”、“普通”这三个队列的数据全部被发送完成后,“低”等级队列中的数据才能发送。所以说处于“低”等级队例的数据很容易被“饿死”,导致该队列中的数据一直得不到服务,最终的结果将是应用服务暂停或者终止。
关于优先级队列PQ的注意事项:
第一、PQ的队列被充满时,它将采取尾弃;第二、PQ的队列长度可以被设置为0,如果把PQ的队列长度设置为0,这是意味着队列的长度不受限制,直到用完路由器的内存为止,当内存被用完后,那么数据将不能被送入队例,换而言之,内存没被用完之前,数据包都能被送入队列排队,并且不会丢弃数据包,所认值0并不是说该队列没长度,但是请记住:别那么干,因为当路由器的内存被用完的后果,比数据包不能进入队例更严重;第三、PQ中4个队列默认的长度分别是:高20 中40 普通60 低80;第四、四个不同优先级的队列中的数据调度时,从整体队列这个角度讲是从高到低,但是如果一串数据都属于同一个级别的队列,比如都属于High队列,那么在这个high队列中的数据将采取FIFO逻辑完成调度。第五、PQ使用三层的ACL或者接入接口、包大小、TCP和UDP的端口号来分类,没有被明确申明的数据流量将被分类到“默认”类。
注意:如果没有发生拥塞,从技术角度讲就是硬件TX队列没有被充满时,那么数据将直接送入TX队列,将不会使用PQ,请记住,只有在硬件队列被充满时才会启动软件排队。PQ 是一种很早、很传统的队列方式,当时产生PQ时还没有后面所描述的CBWFQ和LLQ的产生,所以在在那一定年代中使用PQ来确保一些重要的服务被高质量的保障,但是现今使用PQ的机率已经很少了,因为它被本书后面将要描述的LLQ(低延迟队列)所代替,这样做的目标就是能保证重要数据首先被发送的同时,也不至于“饿死”其它队列的数据。
取证演示:配置PQ队列及影响数据传输的效果
演示目标:
1模拟一个可能产生拥塞的低速链路,并在该链路中持续的发送高压流量。
2取证先进先出(FIFO)队列对该环境假定的重要数据(ICMP)传输的不良影响。
3 配置PQ队列将重要数据分类到“高”优先队列。
4 再次观察重要数据的传输延迟,确定PQ对数据传输的影响
5 使用debug工具取证不同的实时数据分类被送到了不同等级的队列。
演示环境:仍然使用“取证演示:FIFO队列影响数据传输的效果”相同的实验环境。
演示步骤:
R1(config)#access-list 101 permit icmp host192.168.2.100 host 192.168.4.2
R1(config)#access-list 101 permit udp anyany eq rip
R1(config)#priority-list 1 protocol ip highlist 101
R1(config)#priority-list 1 protocol httpmedium
R1(config)#priority-list1 protocol pppoe normal
R1(config)#priority-list 1 default low
R1(config)#intes1/0
R1(config-if)#priority-group 1
R1(config-if)#exit
本文出自 “无名的基督” 博客,谢绝转载!
PQ(Priority queuing优先级队列)