简介
输出时序被用来确保重要的业务不会在端口流量在某些严重超出预定流量时的状况下导致数据丢包。本文档讨论了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数据包输出
队列的权值可以通过IOS show 命令进行验证:
NifNif#sh mls qos interface gi