分类: 系统运维
2008-05-22 09:39:31
3550交换机QoS时序及队列讨论(二)
队列的权值可以通过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 queue-id threshold-percentage1 threshold-percentage2
下面的配置示例定义了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