PQ(Priority queuing优先级队列)

简介:

PQ是一种具备严格的,分等级执行调度的队列,它可以最多创建4个不同等级的队列,分别是高、中、普通、低;然后根据对不同的数据流量分类,将不同的分类数据送入到4个不同等级的队列。如图X所示,然后以100%的使用带宽的方式,首先服务于处于“高”队列中的数据,直到“高”队列中的数据全部发送完成,再服务于“中”队列中的数据,以此类推,再服务于“普通”队列,最后才是“低”队列。按照这样的逻辑,PQ队列的最大特点是高优先级的队列总是被服务,那么这可能会导致低优先级队列中的数据被“饿死”,为什么呢?如果高优先级队列一直持续发送数据,那么PQ的调度器,将保证高优先级的队列数据发送完成后,才能轮到较低优先级的队列发送,换而言之,处于“低”等级队列中的数据,必须要等待“高”、“中”、“普通”这三个队列的数据全部被发送完成后,“低”等级队列中的数据才能发送。所以说处于“低”等级队例的数据很容易被“饿死”,导致该队列中的数据一直得不到服务,最终的结果将是应用服务暂停或者终止。

wKiom1SAE47jIzhkAAF2ZMgT594298.jpg


关于优先级队列PQ的注意事项:

第一、PQ的队列被充满时,它将采取尾弃;第二、PQ的队列长度可以被设置为0,如果把PQ的队列长度设置为0,这是意味着队列的长度不受限制,直到用完路由器的内存为止,当内存被用完后,那么数据将不能被送入队例,换而言之,内存没被用完之前,数据包都能被送入队列排队,并且不会丢弃数据包,所认值0并不是说该队列没长度,但是请记住:别那么干,因为当路由器的内存被用完的后果,比数据包不能进入队例更严重;第三、PQ4个队列默认的长度分别是:高20 40 普通60 80;第四、四个不同优先级的队列中的数据调度时,从整体队列这个角度讲是从高到低,但是如果一串数据都属于同一个级别的队列,比如都属于High队列,那么在这个high队列中的数据将采取FIFO逻辑完成调度。第五、PQ使用三层的ACL或者接入接口、包大小、TCPUDP的端口号来分类,没有被明确申明的数据流量将被分类到“默认”类。

 

注意:如果没有发生拥塞,从技术角度讲就是硬件TX队列没有被充满时,那么数据将直接送入TX队列,将不会使用PQ,请记住,只有在硬件队列被充满时才会启动软件排队PQ 是一种很早、很传统的队列方式,当时产生PQ时还没有后面所描述的CBWFQLLQ的产生,所以在在那一定年代中使用PQ来确保一些重要的服务被高质量的保障,但是现今使用PQ的机率已经很少了,因为它被本书后面将要描述的LLQ(低延迟队列)所代替,这样做的目标就是能保证重要数据首先被发送的同时,也不至于“饿死”其它队列的数据。

 

 

取证演示:配置PQ队列及影响数据传输的效果

 

演示目标:

1模拟一个可能产生拥塞的低速链路,并在该链路中持续的发送高压流量。

2取证先进先出(FIFO)队列对该环境假定的重要数据(ICMP)传输的不良影响。

配置PQ队列将重要数据分类到“高”优先队列。

再次观察重要数据的传输延迟,确定PQ对数据传输的影响

使用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


wKioL1SAFMTSq_KNAALl3n9y4xA855.jpg



本文转自 kingsir827 51CTO博客,原文链接:http://blog.51cto.com/7658423/1586336,如需转载请自行联系原作者

相关文章
|
5月前
|
Python
双端优先级队列(Double-Ended Priority Queue
双端优先级队列(Double-Ended Priority Queue)是一种支持在两端进行插入和删除操作的优先级队列。它可以在 O(log n) 的时间复杂度内完成插入、删除、查询操作。双端优先级队列可以使用二叉堆或线段树等数据结构实现。
116 6
|
8月前
|
存储 算法 C++
C++ STL priority_queue
优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。
|
3月前
|
测试技术 C++
c++优先队列priority_queue(自定义比较函数)
c++优先队列priority_queue(自定义比较函数)
73 0
|
4月前
|
存储 算法 C++
C++优先级队列priority_queue详解及其模拟实现
C++优先级队列priority_queue详解及其模拟实现
48 0
|
5月前
|
存储 算法 C++
C++ priority_queue
C++ priority_queue
|
6月前
|
存储 算法 C++
『C++ - STL』之优先级队列( priority_queue )
『C++ - STL』之优先级队列( priority_queue )
|
6月前
|
算法 Serverless C++
【C++】STL使用仿函数控制优先级队列priority_queue
【C++】STL使用仿函数控制优先级队列priority_queue
|
11月前
|
算法 容器
stack_queue | priority_queue | 仿函数
stack_queue | priority_queue | 仿函数
80 0
|
存储 C++ 容器
C++初阶 priority_queue(优先级队列)的使用和模拟实现
C++初阶 priority_queue(优先级队列)的使用和模拟实现
162 0
C++初阶 priority_queue(优先级队列)的使用和模拟实现
|
算法 C++ 容器
【C++】优先级队列 priority_queue的使用&模拟实现 | 仿函数
【C++】优先级队列 priority_queue的使用&模拟实现 | 仿函数
140 0
【C++】优先级队列 priority_queue的使用&模拟实现 | 仿函数