华为VRPQoS技术白皮书(2)
3.定制队列(Custom Queueing, CQ)
图6 定制队列示意图
如图6所示,定制队列(以后简称CQ)对报文进行分类,将所有报文分成最多至17类,分别属于CQ的17个队列中的一个,然后,按报文的类别将报文送入相应的队列。CQ的17个队列中,0号队列是优先队列,路由器总是先把0号队列中的报文发送完,然后才处理1到16号队列中的报文,所以0号队列一般作为系统队列,把实时性要求高的交互式协议报文放到0号队列。1到16号队列可以按用户的定义分配它们能占用接口带宽的比例,在报文出队的时候,CQ按定义的带宽比例分别从1到16号队列中取一定量的报文在接口上发送出去。
现在我们将CQ和PQ做个比较。PQ赋予较高优先级的报文绝对的优先权,这样虽然可以保证关键业务的优先,但在较高优先级的报文的速度总是大于接口的速度时,将会使较低优先级的报文始终得不到发送的机会。采用CQ,则可以避免这种情况的发生。CQ可以把报文分类,然后按类别将报文分配到CQ的一个队列中去,而对每个队列,又可以规定队列中的报文所占接口带宽的比例,这样,就可以让不同业务的报文获得合理的带宽,从而既保证关键业务能获得较多的带宽,又不至于使非关键业务得不到带宽。
在如图3所示的网络图中,假设局域网1的服务器向局域网2的服务器发送关键业务的数据,局域网1的PC向局域网2的PC发送非关键业务的数据,如果对路由器1的串口1配置CQ进行拥塞管理,同时配置服务器间的数据流的进入队列1,队列1中的报文占有60%的带宽,例如每次出队6000个字节的报文,PC间的数据流进入队列2,队列2 中的报文占有20%的带宽,例如每次出队2000个字节的报文,则CQ对这两种不同业务的报文将做区别对待。报文的发送采用轮询调度的方式,首先让队列1中的报文出队并发送,直到此队列中的报文被发送的字节数不少于6000字节,然后才开始发送队列2中的报文, 直到此队列中的报文被发送的字节数不少于2000字节,然后是其他队列。路由器1的串口1的物理带宽是2M,则局域网1的服务器向局域网2的服务器发送关键业务的数据所能占的带宽将至少为1.2M(2 * 0.6),局域网1的PC向局域网2的PC发送非关键业务的数据所能占的带宽将至少为0.4M(2 * 0.2)。并且,不同于时分复用(Time Division Multiplexing, TDM)的系统,当路由器1的串口1中除了上述两个数据流外没有其他数据要发送时,这两种数据流将按比例分享接口的剩余空闲带宽,即局域网1的服务器向局域网2的服务器发送关键业务的数据所能占的带宽将为1.5M(2 * 0.6 / (0.2 + 0.6) ),局域网1的PC向局域网2的PC发送非关键业务的数据所能占的带宽为0.5M(2 * 0.2 / (0.2 + 0.6))。当局域网1的服务器向局域网2的服务器不发送关键业务的数据时,并且,除了局域网1的PC向局域网2的PC发送非关键业务的数据外,没有其他的数据流,则局域网1的PC向局域网2的PC发送非关键业务的数据所能占的带宽将可以为2M。
加权公平队列(Weighted Fair Queueing, WFQ)
图7 加权公平队列示意图
如图7所示,加权公平队列(以后简称WFQ)对报文按流进行分类(相同源IP地址,目的IP地址,源端口号,目的端口号,协议号,TOS的报文属于同一个流),每一个流被分配到一个队列,该过程称为散列,采用HASH算法来自动完成,尽量将不同的流分入不同的队列。WFQ的队列数目N可以配置。在出队的时候,WFQ按流的优先级(precedence)来分配每个流应占有出口的带宽。优先级的数值越小,所得的带宽越少。 优先级的数值越大,所得的带宽越多。这样就保证了相同优先级业务之间的公平,体现了不同优先级业务之间的权值。
例如:接口中当前有8个流,它们的优先级分别为0、1、2、3、4、5、6、7。则带宽的总配额将是所有(流的优先级 + 1) 之和,即:1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36
每个流所占带宽比例为:(自己的优先级数 + 1)/(所有 (流的优先级 + 1)之和)。即,每个流可得的带宽比例分别为:1/36、2/36、3/36、4/36、5/36、6/36、7 /36、8/36。
又如:当前共4个流,3个流的优先级为4,1个流的优先级为5,则带宽的总配额将是:
(4 + 1) * 3 + (5 + 1) = 21
那么,3个优先级为4的流获得的带宽比例均为5/21,优先级为5的流获得的带宽比例为6/21。
由此可见,WFQ在保证公平的基础上对不同优先级的业务体现权值,而权值依赖于IP报文头中所携带的IP优先级。
基于类的加权公平队列(Class Based Weighted Fair Queueing, CBWFQ)
图8 基于类的加权公平队列示意图
如图8所示,基于类的加权公平队列(以后简称CBWFQ)首先根据报文进入网络设备的接口、报文的协议,报文是否匹配访问控制列表(Access Control List,ACL)来对报文进行分类。然后让不同类别的报文进入不同的队列。对于不匹配任何类别的报文,报文被送入默认队列,按WFQ进行处理,即按照流的方式进行处理。
图中所示0号队列是优先队列(一个或多个类的报文可以被设定进入优先队列),不同类别的报文可设定占用不同的带宽。 在调度出队的时候,若优先队列中有报文,则调度器总是优先发送优先队列中的报文,直到优先队列中没有报文时,才调度发送其他队列中的报文。 每个队列被分配了一定的带宽,调度器会按照每个队列分配到的带宽进行报文出队发送。
进入优先队列的报文在接口没有发生拥塞的时候(此时所有队列中都没有报文),所有属于优先队列的报文都可以被发送。在接口发生拥塞的时候(队列中有报文时),进入优先队列的报文被限速,超出规定流量的报文将被丢弃。这样,在接口不发生拥塞的情况下,可以使属于优先队列的报文能获得空闲的带宽,在接口拥塞的情况下,又可以保证属于优先队列的报文不会占用超出规定的带宽,保护了其他报文的应得带宽。另外,由于只要优先队列中有报文,调度器就会发送优先队列中的报文,所以优先队列中的报文被发送的延迟最多是接口发送一个最大长度报文的时间,无论是延迟还是延迟抖动,优先队列都可以将之降低为最低限度。这为对延迟敏感的应用如VoIP业务提供了良好的服务质量保证。
图8中1到N1的队列为各类报文的队列。每类报文占一个队列。在调度器调度报文出队的时候,按用户为各类报文设定的带宽将报文出队发送。属于1到N1号队列的报文可以被确保得到用户设定的带宽。当接口中某些类别的报文没有时,属于1到N1号队列的报文还可以公平地得到空闲的带宽,和时分复用系统相比,大大提高了线路的利用率。同时,在接口拥塞的时候,仍然能保证各类报文得到用户设定的最小带宽。
当报文不匹配用户设定的所有类别时,报文被送入默认队列。默认队列在逻辑上可看作是一个队列,但实际上是个WFQ队列,所有进入默认队列的报文再按流进行分类。
CBWFQ最多允许将报文分为64类(其中包括默认类)。所以N1的最大值为63。默认队列的个数N2可以由用户设定。
对于默认队列和1到N1的队列,用户可以设定队列的最大长度。当队列的长度达到队列的最大长度时,默认采用尾丢弃的策略。但用户还可以选择用加权随机早期检测(Weighted Random Early Detection, WRED)的丢弃策略。加权随机早期检测的丢弃策略请参见后面加权随机早期检测WRED的描述。
对于优先队列,由于在接口拥塞的时候流量限制开始起作用,所以用户不必设置队列的长度(也就没有了尾丢弃)。另外,由于优先队列中的报文一般是语音报文(Voice over IP, VoIP),采用的是UDP报文,所以WRED的丢弃策略也不需要。
2.2.3拥塞管理技术的对比
华为的VRP提供了以上拥塞管理技术。突破了传统IP设备的单一FIFO拥塞管理策略,提供了强大的QoS能力,使得IP设备可以满足不同业务所要求的不同服务质量的要求。为了更好的利用华为的拥塞管理技术,现对各种队列技术做一比较。
表1 拥塞管理技术对比
队列数
优 点
缺 点
FIFO
1
1、不需要配置,易于使用。
2、处理简单,处理延迟小。
1、所有报文同等对待,报文到来的次序决定了报文可占用的带宽、报文的延迟、报文的丢失。
2、对不配合的数据源(如UDP报文发送)无约束力,不配合的数据源会造成配合的数据源(如TCP报文发送)带宽受损失。
3、对时间敏感的实时应用(如VoIP)的延迟得不到保证。
PQ
4
可对不同业务数据提供绝对的优先,对时间敏感的实时应用(如VoIP)的延迟可以得到保证。对优先业务的报文的带宽占用可以绝对优先。
1、需配置,处理速度慢。
2、如果不对高优先级的报文的带宽加限制,会造成低优先级的报文得不到带宽。
CQ
17
1、可对不同业务的报文按带宽比例分配带宽。
2、当没有某些类别的报文时,能自动增加现存类别的报文可占的带宽。
需配置,处理速度慢。
WFQ
用户决定
1、配置容易。
2、可以保护配合(交互)的数据源(如TCP报文发送)的带宽。
3、可以使延迟的抖动减小。
4、可以减小数据量小的交互式应用的延迟。
5、可以为不同优先级的流分配不同的带宽。
6、当流的数目减少时,能自动增加现存流可占的带宽。
处理速度比FIFO要慢。但比PQ、CQ要快