3550交换机QoS时序及队列讨论

更新时间:2024-06-23 20:21:01 阅读量: 综合文库 文档下载

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

3550交换机QoS时序及队列讨论(一)

3550交换机QoS时序及队列讨论(一) 作者:lion_dong 发文时间:2004.07.13 简介

输出时序被用来确保重要的业务不会在端口流量在某些严重超出预定流量时的状况下导致数据丢包。本文档讨论了Catalyst 3550 交换机有关输出时序的所有技术和算法。本文档着重于介绍如何配置及验证Catalyst 3550 交换机上的输出时序。

用到的组件

本文档的运行环境为 Catalyst 3550交换机,软件版本 12.1(12c)EA1.

本文档所表述的信息均是通过在特殊的实验室环境下的设备所创建的。文档中所用到的所有设备都是采用明确的(缺省的)配置命令。若你是在一个现实的网络环境下工作,在使用一些简写命令时应确保你已经完全理解了该命令的含义。

Cisco Catalyst 3550 交换机QoS 时序及队列

交换机

3550 交换机有两种不同类型的端口:千兆端口和非千兆端口(10/100M端口)

两种端口具有不同的性能,这些性能下面会作简单描述,而且相关的描述会贯穿整篇文档。

两种端口均支持的性能

每个3550的端口上都有4个不同的输出队列。这些队列中的一个可以被配置为优先级队列。余下的几个端口被配置为非绝对的优先级队列,并使用Weighted Round Robin (WRR)。所有的端口上,数据包根据各自的服务类别(CoS)被分配为四中可能的类别之一。

千兆端口支持的特性

千兆端口还能支持每个队列的管理机制。每个队列可以使用Weighted Random Early Discard (WRED)或者双线程的tail drop 。队列大小可调(每个队列均分配相应的缓冲区)。

非千兆端口支持的特性

非千兆端口不支持任何队列管理机制,例如WRED或者双线程tail drop

10/100M端口支持FIFO 队列。每个端口队列的大小都不可改变。但是你可以为每个队列分配最小的保留带宽。

CoS 到队列映射

本节讨论3550如何决定将每个数据包放置到队列中去。数据包队列取决于服务类别(CoS )。通过使用CoS 到队列的接口映射命令,每个八种可能的Cos数值将被映射到相应的四个队列。下面是该命令的示例:

(config-if)# wrr-queue cos-map queue-id cos1... cos8

下面是一个例子:

3550(config-if)# wrr-queue cos-map 1 0 1

3550(config-if)# wrr-queue cos-map 2 2 3

3550(config-if)# wrr-queue cos-map 3 4 5

3550(config-if)# wrr-queue cos-map 4 6 7

该示例将 CoS 0 和1映射到 Q1, CoS 2 和3 映射到 Q2, CoS 4和5 映射到 Q3, CoS 6 和7映射到Q4。

每个端口的CoS到队列的映射情况可以通过使用下面的命令来进行验证:

cat3550# sh mls qos int gig 0/1 queueing

GigabitEthernet0/1

...Cos-queue map:

cos-qid

0 - 1

1 - 1

2 - 2

3 - 2

4 - 3

5 - 3

6 - 4

7 - 4...

绝对的优先级队列

绝对的优先级队列在初始状态下通常是空的。这就意味着一旦有数据包进入队列,该包将马上被转发。当WRR 队列中所有的数据包都被转发后,优先级队列根据需要关闭并清空。

绝对的优先级队列被特别设计来处理对延迟/抖动比较敏感的数据流,例如语音。绝对的优先级队列将导致其他队列严重滞后。在其他三个WRR中的数据包在绝对的优先级队列中数据传输完成之前,将不会被转发。

注意

要避免其他队列的严重滞后,要特别注意放到优先级队列中的流量。

该队列通常用于语音数据流,而此类型应用并不占用很高的带宽。但是若有人将一些占用带宽较多的应用(例如数据转移或备份)放到绝对的优先级队列,这将引起其他流量的严重滞后。要避免该问题,特殊的数据流应被放置在分类/准入,并在网络中标记该数据流。例如,你可能需要采取一下预防措施:

l 在非可信的源端口使用非可信的端口QoS状态;

l 在使用Cisco IP电话端口可靠的边界特性时,确信IP电话配置于其它应用是可信的

l 修正进入绝对优先级队列的数据流。在千兆端口上修正数据流的流量限制为100M。

在3550上,可以配置一个队列为优先队列,(总是Q4),在端口模式下使用如下命令:

3550(config-if)# priority-queue out

如果某个端口没有配置优先队列,则Q4被当做标准的WRR 队列(下节将详细描述)。你可以通过输入和下面一样的IOS命令来验证某端口是否被配置为绝对优先级队列,命令如下:

NifNif#sh mls qos interface gig 0/1 queueing

GigabitEthernet0/1

Egress expedite queue: ena

Catalyst 3550上的WRR(Weighted Round Robin)

在3550上,WRR是一个对输出时间序列进行管理的机制。WRR在三个或四个队列(如果没有绝对优先级队列)之间工作。使用WRR模式的队列在循环方式下是置空的,可以为每个队列配置相应的权值。

例如,配置了不同的权值,不同的队列将提供不同的服务,如下所示:

Serving WRR Q1 : 10% of time

Serving WRR Q2 : 20% of time

Serving WRR Q3 : 60% of time

Serving WRR Q4 : 10% of time

对每个队列,你可以在端口模式使用以下命令来配置四个权值(各自相对于一个队列):

(config-f)#wrr-queue bandwidth weight1 weight2 weight3 weight4

示例如下:

3550(config)# interface gigabitethernet0/1

3550(config-if)# wrr-queue bandwidth 1 2 3 4

注意:权值是相对的,下面是计算方式

Q1 = weight 1 /(weight1 + weight2 + weight3 + weight4) = 1/(1+2+3+4) = 1/10

Q2 = 2/10

Q3 = 3/10

Q4 = 4/10

WRR可通过以下两种方式执行:

1. WRR per bandwidth: 每个权值描述了可以用于发送的特别带宽。权Q1允许使用大约 10%的带宽, Q2 将获得大约20%的带宽,以此类推。 改方案目前仅在Catalyst 6000 系列交换机上实现。

2. WRR per packet: 该算法在 3550 交换机上实现。这表示每个权值表示了某个数量的数据包将被发送,而不管包的大小如何。

3550上实现WRR per packet表现为如下形式:

l Q1 传输 1/10 的数据包

l Q2 传输 2/10 的数据包

l Q3 传输 3/10 的数据包

l Q4 传输 4/10 的数据包

如果被传送的包是同样大小则是最理想的情况。在4个队列中你依然能够获得理想的共享带宽。然而,如果队列间的平均包大小有差异,则会在拥塞事件发生时对传输产生巨大的影响。

例如,假设当前交换机只有两个数据流,同时假设处于以下的情形:

一个千兆口的队列2(Q2)以Cos 3类别方式每秒传输少量的交互应用数据流(80字节/帧)

一个千兆口的队列1(Q1)以Cos 0类别方式每秒传输大型文件数据流(1518字节/帧)

两个队列都将以传输1 Gbps 的速率传输数据。

两个数据流需要共享同一个输出的千兆口。假设我们已经为Q1 和 Q2 设置了同样的权值, WRR 应用到每个数据包,并且每个队列内传输的数据量不同于两个队列之间的数据量。每个队列都转发了同样数量的数据包,然而交换机实际上发送了下面数量的数据:

77700 包/秒由Q2输出 = (77700 x 8 x 64) bits/sec (大约 52 Mbps)

77700 包/秒由Q1输出= (77700 x 8 x 1500) bits/sec (大约 948 Mbps)

注意:

如果你想要每个队列都公平的接入网络,需要考虑每个数据包的平均值。每个数据包都被假设放置在同一个队列,因而权值得到改善。

例如:如果你想要为四个队列赋予相同的接入(每个队列各自分配到1/4的带宽),流量表现为如下形式:

‥ Q1: 最佳的互联网数据流量。假定数据流的平均包大小为256字节。

‥ Q2 : 文件备份形成的文件传输,主要由1500字节构成的数据包。

‥ Q3 : 视频流,每个包被分成192字节。

‥ Q4 : 交互应用,主要由64字节构成的数据包。

这就产生了以下的情形:

‥ Q 1消耗 4 倍于Q 4的带宽

‥ Q 2消耗 24 倍于Q 4的带宽

‥ Q 3消耗 3 倍于Q 4的带宽

. 若要以同样的带宽接入网络,采用如下的配置:

‥ Q1 权值设为6

‥ Q2 权值设为1

‥ Q3 权值设为8

‥ Q4 权值设为24

.如果分配了以上的权值,则在拥塞事件发生时,四个队列将分享到同样的带宽。

.如果设置了绝对优先级队列,WR权值将在其余三个队列中重新分配。下面是一个设置了绝对优先级,而Q4没有进行配置的情况下,队列1, 2, 3, 和

‥ Q1 = 1 / (1+2+3) = 1/6数据包输出

‥ Q2 = 2/6数据包输出

‥ Q3 = 3/6数据包输出

3550交换机QoS时序及队列讨论(二)

3550交换机QoS时序及队列讨论(二) 作者:lion_dong 发文时间:2004.07.13

队列的权值可以通过IOS show 命令进行验证:

NifNif#sh mls qos interface gig 0/1 queueing

GigabitEthernet0/1

QoS is disabled. Only one queue is used

When QoS is enabled, following settings will be applied

Egress expedite queue: dis

wrr bandwidth weights:

qid-weights

1 - 25

2 - 25

3 - 25

4 - 25

如果启用了快速优先级队列,Q4的权值仅在快速队列失效时使用。

看下面的示例:

NifNif#sh mls qos interface gig 0/1 queueing

GigabitEthernet0/1

Egress expedite queue: ena

wrr bandwidth weights:

qid-weights

1 - 25

2 - 25

3 - 25

4 - 25

!--- The expedite 队列 is disabled.

Catalyst 3550 交换机的WRED

3550 家族交换机中,只有千兆端口支持WRED。 WRED是RED的修正

版本,用来避免拥塞的发生。RED定义了如下的参数:

min-threshold(最小限度): 描述了一个队列内的限制,无包被归于低于该限度

max-threshold(最大限度): 描述了队列的另一个限制。所有包被归于高于最大限度。

slope(斜率): 介于最大和最小值之间的丢包概率。随队列大小的变化,丢包率将按照一定的斜率增加。

下图表示了在RED队列中的丢包率。注意,所有的Catalyst 交换机都允许采用可调的斜率来执行RED。

在WRED中,不同的服务是通过加权方式工作的。你可以定义一个标准的服务和一个高级的服务。每个服务被分配不同的极限。当达到最小极限1时,只有被标示为标准服务的包会被丢弃。当达到最小极限2时,仅高级服务的数据包将会被丢弃。如果最小极限值2高于1,被丢弃的包中,普通服务的数量高于高级服务。下图显示了WRED 中每个应用服务的可能的丢包率。

3550交换机不允许调节最小限度,仅允许调节最大限度。最小限度被固定为0。下图给出了一个3550交换机上普遍实现的丢包率。

3550交换机上的任何激活的队列通常有一个非零的丢包率,而总是有部分数据包被丢弃。这是因为最小极限值总是为0。若要避免丢包率达到最大值,最好采用加权尾部数据丢弃的方式,下一节将进行描述。

注意: 关于配置最小极限值的一些增强性需求,参考下面文档:Bug ID CSCdz73556.

要了解关于该BUG的更多信息,需要使用到Bug Toolkit。

3550交换机上,WRED可以被配置成两种不同的最大极限值,以提供两种不同的服务。

不同类型的数据流根据各自的内部服务代码要点区分(Differentiated Services Code Points DSCPs)被标识为各自的极限值。这有别于根据数据包的服务类别(CoS)来划分的队列标识。DSCP与极限列表的映射关系决定64个DSCPs 中各自对应的极限值。

使用下面的命令,可以显示及更改该列表:

(config-if)# wrr-queue dscp-map threshold_number DSCP_1 DSCP_2 DSCP_8

例如,下面的命令表示了DSCP 23 对应于极限值 2:

NifNif(config-if)#wrr-queue dscp-map 2 26

NifNif#sh mls qos int gig 0/1 queue

GigabitEthernet0/1

Dscp-threshold map:

d1 : d2 0 1 2 3 4 5 6 7 8 9

---------------------------------------

0 : 01 01 01 01 01 01 01 01 01 01

1 : 01 01 01 01 01 01 02 01 01 01

2 : 01 01 01 01 02 01 02 01 01 01

3 : 01 01 01 01 01 01 01 01 01 01

4 : 02 01 01 01 01 01 02 01 01 01

5 : 01 01 01 01 01 01 01 01 01 01

6 : 01 01 01 01

一旦定义了DSCP与极限值的映射关系, 你所选择的队列的WRED 将会被激活。

使用下面的命令:

(config-if)# wrr-队列 random-detect max-thresold 队列_id Threshold_1 Threshold_

下例显示了Q1队列分别被配置为极限值1 = 50% 及极限值 2 = 100%, 以及极限值 1 = 70% 和极限值 2 = 100%的情况。

3550(config)# interface gigabitethernet0/1

3550(config-if)# wrr-queue random-detect max-threshold 1 50 100

3550(config-if)# wrr-queue random-detect max-threshold 2 70 100

3550(config-if)# wrr-queue random-detect max-threshold 3 50 100

3550(config-if)# wrr-queue random-detect max-threshold 4 70 100

可以通过下面的命令来验证每个队列的类型(WRED或其他):

nifnif#sh mls qos int gi 0/1 buffers

GigabitEthernet0/1 ..

qid WRED thresh1 thresh2

1 dis 10 100

2 dis 10 100

3 ena 10 100

4 dis 100 100

ena 表示enable,队列使用WRED方式。 dis 表示 disable,Tail Drop(tail drop)方式 。

使用下面命令可以监视在每个极限值下丢弃的包的数量。

sh mls qos int gig x/x stat

WRED drop counts:

qid thresh1 thresh2 FreeQ

1 : 327186552 8 1024

2 : 0 0 1024

3 : 37896030 0 1024

4 : 0 0 1024

队列使用

Catalyst 3550 交换机的Tail Drop

Tail Drop是3550交换机的千兆端口上的缺省的管理机制。每个千兆端口可以有两个尾部极限值。每个Tail Drop极限值所标识的整套的DSCP 使用同样的DSCP极限值映射表,本文档的WRED章节已经定义。当达到极限值,所有的数据包都将被丢弃的极限值。使用下面命令配置尾部丢弃极限值:

(config-if)# wrr-queue threshold-percentage2

threshold

queue-id

threshold-percentage1

下面的配置示例定义了Q1的尾部丢弃极限值1 = 50%,极限值2 = 100%,以及极限值1 = 70% 和极限值2 = 100%

Switch(config-if)# wrr-queue threshold 1 50 100

Switch(config-if)# wrr-queue threshold 2 70 100

Switch(config-if)# wrr-queue threshold 3 60 100

Switch(config-if)# wrr-queue threshold 4 80 100

配置千兆端口上的队列大小

3550 交换机使用中央缓存。这意味着每个端口上没有固定的缓存大小。

但是,千兆端口上的固定数量的数据包可以被排列。这些数量固定为4096。缺省的,千兆端口上的每个队列可以达到1024个数据包,而不管包的大小。可以使用下面的命令更改这4096个数据包在四个队列中的分配:

wrr-queue queue-limit Q_size1 Q_size2 Q_size3 Q_size4

如下例所示:

3550(config)# interface gigabitethernet0/1

3550(config-if)# wrr-queue queue-limit 4 3 2 1

这些队列的大小参数是相关的,上例表示队列Q1的数据包大小是Q4的4倍,Q2是Q4的3倍,Q3是Q4的2倍。4096个数据包被重新分配如下:

. Q1 = [4 /(1+2+3+4) ] * 4096 = 1639 packets

. Q2 = 0.3 * 4096 = 1229 packets

. Q3 = 0.2 * 4096 = 819 packets

. Q1 = 0.1 * 4096 = 409 packets

下面的命令可以显示四个队列中分割的缓冲区之间相关的权值:

cat3550# sh mls qos int buffers

GigabitEthernet0/1

Notify Q depth:

qid-size 1 - 4 2 - 3 3 - 2 4 - 1

...

你也可以使用下面的命令来察看每个队列中还保持了多少空闲的数据包:

(config-if)# sh mls qos int gig x/x stat

WRED drop counts:

qid thresh1 thresh2 FreeQ

1 : 0 0 1639

2 : 0 0 1229

3 : 0 0 819

4 : 0 0 409

3550交换机QoS时序及队列讨论(三)

3550交换机QoS时序及队列讨论(三) 作者:lion_dong 发文时间:2004.07.13

空闲队列的计数参数是动态的。空闲计数根据最大的队列大小减去当前队列中数据包的数量得出。例如,当前有39个数据包在Q1中,则有1600个空闲的数据包,如下所示:

(config-if)# sh mls qos int gig x/x stat

WRED drop counts:

qid thresh1 thresh2 FreeQ

1 : 0 0 1600

2 : 0 0 1229

3 : 0 0 819

4 : 0 0 409

非千兆端口的队列管理和队列大小

10/100M端口上没有提供队列管理机制(WRED或者具有两个极限值得Tail Drop)。所有的队列都采用先进先出(FIFO)的方式。也不像千兆端口那样最大可预留4096个数据包。10/100M端口在每个队列中存储数据包,直到由于资源本身匮乏为止。可以为每个队列保留一个最小数量的数据包。缺省情况下,最小值设定为每个队列100个数据包。你可以通过定义一个不同的最小预留值并且将值分配到每个队列来更改队列中的最小预留值。

需要执行以下的步骤:

1. 为每个全局性的最小预留值分配缓冲区大小;

通过下面的命令可以配置8个不同的最小预留值中的一个最大值:

(Config)# mls qos min-reserve min-reserve-level min-reserve-buffersize

这些最小预留值是交换机的全局属性。缺省时,所有的预留值设定为100个数据包。

例如,要配置1级最小预留值为150个数据包以及2级最小预留值为50个数据包,使用下面的命令:

nifnif(config)#mls qos min-reserve ?

<1-8> Configure min-reserve level

nifnif(config)#mls qos min-reserve 1 ?

<10-170> Configure min-reserve buffers

nifnif(config)#mls qos min-reserve 1 150

nifnif(config)#mls qos min-reserve 2 50

2. 为每个队列分配一个最小预留值。

每个队列都需要被分配一个最小预留值,以明确该队列的缓冲区使用情况。缺省时,表现为以下情形:

‥ Q1 被分配最小预留值级别1.

‥ Q2 被分配最小预留值级别2.

‥ Q3 被分配最小预留值级别3.

‥ Q4 被分配最小预留值级别4.

缺省情况下,所有的最小预留值设定为100。

可以使用端口命令为每个队列分配不同的最小预留值:

(config-if)# wrr-queue min-reserve queue-id min-reserve-level

例如,为Q1分配最小预留值2,为Q2分配最小预留值1,可以使用下面的命令:

nifnif(config)#int fas 0/1

nifnif(config-if)#wrr-queue min-reserve ?

<1-4> queue id

nifnif(config-if)#wrr-queue min-reserve 1 ?

<1-8> min-reserve level

nifnif(config-if)#wrr-queue min-reserve 1 2

nifnif(config-if)#wrr-queue min-reserve 2 1

最小预留值的使用情况可使用下面命令进行验证:

nifnif#sh mls qos int fas 0/1 buffers

FastEthernet0/1

Minimum reserve buffer size:

150 50 100 100 100 100 100 100

!--- Showing the value of all eight min-reserve level.

Minimum reserve buffer level select:

2 1 3 4

!--- Showing the min-reserve level assigned to

!--- each 队列 (from Q1 to Q4). 结束语

在3550交换机上配置队列及时序需要采用下列步骤:

1. 为每个队列分配相应的服务类别(CoS)

2. 根据需要,启用绝对优先级队列

3. 分配WRR权值,重点考虑队列中期望的数据包大小。

4. 更改队列大小(仅限于千兆端口)

5.启用队列管理机制(Tail Drop或者WRED,仅限于千兆端口)

适当的队列及时序安排可以减少语音/视频数据流的延迟及偏移,避免重要的数据丢失。确信坚持以下的指导以获得最大的时序性能。

. 使用可信的或者特殊的标记对网络中的流量进行分类;

. 修正超标的数据流。

有关参考文档

. Understanding QoS Policing and Marking on the Catalyst 3550

. Configuring QoS - Product Documentation

. Technical Support - Cisco Systems

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

Top