BCM56330 QoS分析报告

更新时间:2023-10-07 20:52:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

QoS简介

概述

QoS(Quality of Service)即服务质量。对于网络业务,服务质量包括传输的带宽、传送的时延、数据的丢包率等。在网络中可以通过保证传输的带宽、降低传送的时延、降低数据的丢包率以及时延抖动等措施来提高服务质量。 网络资源总是有限的,只要存在抢夺网络资源的情况,就会出现服务质量的要求。服务质量是相对网络业务而言的,在保证某类业务的服务质量的同时,可能就是在损害其它业务的服务质量。例如,在网络总带宽固定的情况下,如果某类业务占用的带宽越多,那么其他业务能使用的带宽就越少,可能会影响其他业务的使用。因此,网络管理者需要根据各种业务的特点来对网络资源进行合理的规划和分配,从而使网络资源得到高效利用。

下面结合BCM56330的MMU管理,从不同的侧面对QoS服务模型进行描述,接着对目前使用最多、最成熟的一些QoS技术结合本芯片逐一进行描述。有些厂商把MMU部分提到的入口许可控制,出口许可控制,加权随机早期检测,服务识别流控,优先级流控及端到端流控都划分到流控范畴。而MMU当中的队列调度(有厂商定义为排程)以及FP提到的内容识别处理器提到的流分类,带宽限制,流量监管,整型和重写划分到QoS范畴。为了便于讲述,本文档还是结合MMU部分的功能进行概念性讲解,为队列调度做一个基础知识的补充,便于深入理解QoS。

系统资源

报文在设备当中使用两种资源:cell和packet pointer。Cell代表的是一个特定的包使用包缓存的最小增量,BCM56330中一个cell是128字节,总共提供16384个cell即2MB的buffer。一个包至少占用一个cell,当一个用一个cell,报文不可共享cell。Packet pointer就是交换设备当中packet的指针,每一个包都有一个指针,BCM56330当中packet pinter共享一个全局pool,总共有6144个pointer,管理方式和cell一样。

对于系统的ingress许可控制(Ingress Admission Control)和egress许可控制(Egress Admission Control)都要跟踪cell和packet pointer的使用情况,当这两种资源使用到达门限时都要要么触发被压或者丢包。

动态内存门限

BCM56330支持动态门限机制,这种机制通过调整动态门限值从而使所有的端口公平的使用包缓冲资源。当使用动态门限机制是,标量a代表门限值,动态门限和可用的共享内存资源是一个线性的函数关系:门限值=a * 系统可用的cell个数。

举个例子,系统当中剩余的有100个未使用的cell,当前端口1和端口2的PORT_SHARED_LIMIT_CELL寄存器配置为4,即动态门限值为4。那么对于每一个端口来说动态内存门限为400,如果端口1已经使用了420个cell,那么该端口就不会再收到报文,而如果端口2已经使用了20个cell,还没有到400,那么端口2可以继续收包。

入口许可控制

Ingress Admission control实际上就是strataXGS系列提到的IBP(Ingress Back Pressure,入口背压)。入口许可控制包含以下两个目标:

? 支持loss-less behavior;

? 用于管理Ingress端口公平的访问buffer资源;

这种机制把收包缓存分割成3个分离的缓存空间,分别是:

? Minimum Guarantee Space,为每一个优先组(PG_MIN)和每一个端口

(PORT_MIN)提供最小缓存保证;

? 共享空间,当所有的port或者优先组(Priority Group)的最小带宽保

证不够用时使用共享缓存空间。通过TOTAL_SHARED_LIMIT设置总的可用的共享缓存空间大小(分为两种资源,TOTAL_SHARED_LIMIT_CELL和TOTAL_SHARED_LIMIT_PACKET)。PORT_SHARED_LIMIT,指定每一个端口的最大可用共享资源,以上这两种限制可以使动态的或者是静态的,这要取决于PORT_SHARED_LIMIT.PORT_SHARED_DYNAMIC的设置情况; ? Headroom 空间,这段缓存空间提供一种附加的缓存能力,当以上两种资

源都已经使用了才使用这段资源。

我们具体看看入口许可控制的实现原理。实际上,每一个Ingress Port都要一个各自的漏桶(Leaky Bucket)用来为每一个端口进行带宽测量。实际上就是通过Pause Metering这种技术,当流量到达一定门限的时候通过触发背压的方法向对端设备发Pause frame完成特定的带宽限制,实际上就是一种流量整型的能力。在这里我们要严格区分通过背压的限速和通过FP的限度,简单讲:Pause Metering是基于端口的限速;而FP得带宽限速是基于流的,首先要匹配规则,然后根据三色标记决定哪些包要丢弃而达到限速的功能。

漏桶的实现其实很简单:每7.8128ms(T_REFRESH)REFRESHCOUNT个令牌(token)从桶中移走。每一个令牌代表的粒度要取决于METER_GRANULARITY的设置,值的范围是1~8,代表速度分别从8192bps~1048576bps。

? 初始化时,BUCKET_COUNT的值为0,每7.8125ms REFRESHCOUNT个令牌

从桶中移出,当报文来了之后相应个数个令牌增加到漏桶当中,实际上虚线部分的水线往上涨;

? 当BUCKET_COUNT水线涨到PAUSE_THD这个门限时,MMU通知Ingress

端口启动背压,向对端发送pause帧;

? 当BUCKET_COUNT水线涨DISCARD_THD的门限之后,MMU就跟踪进来的应

该丢弃的包,然后通知Ingress端口,DISCARD_THD门限超了,接着Ingress丢包,当水线BUCKET_COUNT到了RESUME_THD这个门限是,丢包位被清除掉。

出口许可控制

出口的许可控制机制和strataXGS系列的防止线头阻塞(HOL preventing)非常相似,该功能提供以下功能:

? Support lossy buffer management;

? Manage buffer resources at an egress port and CoS granularity; 该功能的目标是支持公平的访问缓存资源,同时优化整个系统的吞吐量。和入口的许可控制相比,入口许可控制是在超出系统吞吐的情况狭下尽量少丢包,而出口许可控制是在超出系统的吞吐的情况下尽量丢包。

我们来看一个模型:

Port A Port C Port B Port D

假如A,B,C,D均为千兆端口,从A到C的流量是75%的千兆的流量,A到D是25%千兆的流量,B到D是100%千兆流量。逻辑上,从端口A到C的流量不应该受端口D的影响,但实际上线头阻塞(HOL)的情况下,由于端口D超出了千兆流量(oversubscribed),从而导致在端口A上丢包,这样就影响了A到C的流量。为了防止HOL,每一个Ingress端口只丢弃到出线头组的那个egress端口的队列的流量。

加权随机早期检测

WRED算法和HOL Prevention都是基于队列管理的,但是两者有所区别。WRED算法在网络还没有发生拥塞之前根据队列的状态进行有选择的丢包,它是一种用于早期避免拥塞的算法。

在拥塞发生期间,如果采用队列尾部丢弃的办法,那么对于TCP报文,由于大量的报文被丢弃,而造成TCP超时,从而使TCP引发慢启动和拥塞避免机制。当队列同时丢弃多个TCP连接报文将造成多个TCP连接同时进入慢启动和拥塞避免,这称之为TCP全局同步。因此,采用WRED算法有选择的丢包,这样无论在什么时候,总有TCP连接进行快速发送,这样就提高了带宽的利用率。

实际上加权随机早期检测就是一种早期避免拥塞的方法。

在该算法当中丢包概率和平均队列长度承分段线性单调函数关系。它关系有几个变量,平均队列长度avg_qsize,丢包概率drop_probability

平均队列长度每4us修正一次,

如果 avg_qsize <= DROPSTARTPOINT,那么丢包概率为0%; 如果 avg_qsize >= DROPENDPOINT,那么丢包概率为 100%;

如果 avg_qsize值正好在DROPSTARTPOINT和DROPENDPOINT区间,那么他有一个算法:

drop_probability = MAXDROPRATE×(avg_qsize - DROPSTARTPOINT)÷(DROPENDPOINT - DROPSTARTPOINT)

它是通过显示拥塞指示算法(Explicit Congestion Notification,ECN)提前告知网络中可能产生拥塞,以保证对时延要求严格的业务服务质量,例如:音频等。ECN算法通过在源端数据包中嵌入ECN使能发送比特位,ECN_CONFIG寄存器通过使能ECN标识来完成。如果进来的报文ECN使能,那么WRED标识这个报文为丢弃;如果收来的报文ECN位为11b,那么WRED不应用于这个报文。

流量管理,区分服务的QoS

4个万兆口/HiGig端口每端口提供24个CoS队列,其中有16个用于VLAN整型,而其他的千兆端口每端口支持8个CoS队列。一般意义的QoS主要使用存储管理单元(Memory Management Unit)的队列管理功能,也就叫排程。各种主要交换芯片所支持的队列调度策略如表1所示。一般的厂商QoS驱动需要支持SP和WRR两种调度算法。

表1 主要交换芯片对队列调度策略的支持 调度5690/5665 策略 5695 SP 支持 支持

RR WRR WFQ DRR

支持 支持

支持 支持 支持

5650X 支持 支持 支持

支持

5633x 支持 支持 支持 支持

绝对优先级(SP):高优先级队列具有最高的传输包的优先级,低优先级队列要等到高优先级队列传输完毕之后才开始传输。那么它提供了高优先级队列的高质量服务,对于低优先级队列有可能长期得不得服务。这种调度算法存在很大的缺陷。

加权轮转调度(WRR):WRR调度对各个队列实行轮转发送机制,报文的权重与所在队列的优先级,即重要性相对应。这样就防止了在高优先级队列在传输时低优先级队列被完全忽略的可能。

我们举例来说明一下,如果队列3的权重为2,队列2的权重为1,队列1的权重为1,队列0的权重为2,那么队列2在队列3发送2个报文之后发送1个报文,队列1在队列2发送1个报文之后发送1个报文,队列0在队列1发送1个报文之后发送2个报文。通过这种调度,即使高优先级队列为非空,低优先级队列也有机会发送报文,这样带宽资源可以得到充分的利用。

带赤字的加权轮转调度(WDRR):WRR存在一个很大的缺陷就是以报文的个数作为权重,这样对于报文平均长度明确的网络更加适合,但是网络中往往报文的长度是不可预知的,必然使WRR的应用受到局限。基于以上原因,所以提出了以字节数为权重的调度算法,即Weight Deficit Round-Robin,当为某一个队列分配的权重值低于0时,这时该队列的权重变为赤字,同时也影响下一次调度该队列赋予的权重。即该队列的新的权重会减去前一次产生的赤字,这样可以避免由于报文长度不等而产生的非预期的调度。

有两个变量,

? Quantum Value,补充量; ? Credit Value,可信量;

当报文从某一个Cos队列转发出去,发送报文的长度就从Create计数当中减去,当Credit 计数出现赤字,那么该CoS队列不再会被调度,一旦所有的队列出现赤字,那么Create计数将被重新补充,补充值的大小取决于Quantum补充量的大小。每一个CoS队列的Quantum Value大小可以不同,这取决于配置情况。Create 计数在WDRR算法当中是允许出现赤字的,还有就是WDRR算法的另外一个重要属性是,当CoS队列出现赤字的情况下,Create计数如何补充和更新。

其实,在WDRR算法实现当中每一个CoS队列都使用了一个令牌桶的技术。如果Credit计数出现赤字,根据COSWEIGHTS寄存器的配置给它补充权重,补充量的大小取决于ESCONFIG.SCHEDULING_SELECT的设置情况。在WDRR模式当中COSWEIGHTS的权重值取值范围从1到127,权值1代表128字节。

我们还是举一个简单的例子,上图中四个CoS队列他们权值分别为2,1,2,2。如果ESCONFIG.MTU_Quanta_Select的补充量设置为1,代表每一个令牌桶当中包含的令牌数分别为8KB,4KB,8KB,8KB,也就我们所说的Credit计数。调度过程中CoS队列2在CoS队列3发送256字节之后,发送128字节报文,CoS队列1在CoS队列2发送128字节之后发送256字节,CoS队列0在CoS队列1发送256字节之后发送256字节。

像上面的这种配置实际上就保证了4个CoS队列它们的带宽分配比例为2:1:2:2。通常情况下最大和最小带宽的测量机制通常和WDRR模式联合使用。

基础知识讲到这里,基本上就是按照由一个包从Ingress端口进入到设备然后进过MMU的调度,最后到通过MMU的队列调度从Egress端口转发出去这样一个顺序简单地讲了一下其中的一些关键路径,我们再来重复一下下面几个概念:

QoS:Quality of Service 服务品质保证,提供稳定、可预测的数据传送服务,来满足使用程序的要求,明确一点,QoS不能产生新的带宽,而是根据使用程序的需求以及网络管理的设置来有效的管理网络带宽。

QoS功能域:它是支持QoS的设备组成的一个能够提供服务品质保证的网络拓扑,定义为QoS功能域。

CoS:Class of Service 服务级别,对于802.1Q的帧报文当中携带了分类信息,在帧头的Tag字段中占3bits,称为用户优先级,范围为0~7。对于不带标签的报文,系统当中对于每一个端口都有缺省的可编程的优先级分配策略。缺

省优先级可以通过不同的方式进行修改。你比如,不带标签的报文可以根据DMAC或者SMAC更改它的优先级,在FP当中也可以基于流对优先级进行re-map。

ToS:Type of Service 服务类型,L3 IPv4包头携带的一个字节的字段,标记IP包的服务类型,ToS字段内可以是IP Precedence值,也可以是DSCP值。

IP Precedence:IP 优先级,L3 IP包头携带的分类信息,共占3bits,范围为0~7。

DSCP:Differentiated Services Code Point 差别化业务编码点,L3 IP包头携带的分类信息,共占6bits,范围为0~63,向下兼容IP Precedence。

RFC 791中 IP Precedence划分成了8个优先级,可以应用于流分类,数值越大表示优先级越高。

7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | PRECEDENCE | t3 | t2 | t1 | t0 | m +-----+-----+-----+-----+-----+-----+-----+-----+

111 - Network Control

110 - Internetwork Control 101 - CRITIC/ECP

100 - Flash Override 011 - Flash 010 - Immediate 001 - Priority 000 – Routine

但是在网络中实际部署的时候这8个优先级是远远不够的,于是在RFC 2474中又对TOS进行了重新的定义。把前六位定义成DSCP,后两位保留 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+ | DSCP | CU | +---+---+---+---+---+---+---+---+

QoS大致上经历了这么几个阶段:

分类:QoS的入口动作,根据数据包携带的分类信息和ACLs,将数据包流量进行分类。

监管:QoS的入口动作,制定监管策略,对分类后的数据包进行监管。

重写:QoS的入口动作,根据制定的监管策略,对数据包进行通过、降级、丢包等操作。

整形:QoS的出口动作,根据数据包的CoS值,将其归入相应的出口队列。 排程:QoS的出口动作,配置8条出口队列的WRR(Weighted Round Robin)权重。

由于篇幅有限,我们这里先简单了解QoS应该经历哪几个阶段,将在后续进一步分析QoS所经历的几个阶段,这些概念将涉及交换芯片的内容设别处理的工作体系结构和处理流程。

本文来源:https://www.bwwdw.com/article/zg3d.html

Top