局域网交换 : LAN 服务质量

Catalyst 3550 交换机上的 QoS 调度和队列

2015 年 8 月 28 日 - 机器翻译
其他版本: PDFpdf | 英语 (2014 年 9 月 26 日) | 反馈


目录


简介

输出调度功能可确保订阅严重超载时,接口出口不会出现丢弃重要数据流的情况。本文档讨论 Cisco Catalyst 3550 交换机输出调度功能所涉及的全部技术和算法。本文也着重讨论在 Catalyst 3550 交换机上如何配置和验证输出调度操作。

先决条件

要求

本文档没有任何特定的要求。

使用的组件

运行Cisco IOS�软件版本12.1(12c)EA1的本文档中的信息根据Catalyst 3550。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。

规则

有关文档规则的详细信息,请参阅 Cisco 技术提示规则

Catalyst 3550 交换机上端口的输出排队功能

3550 交换机有两种类型的端口:

  • 千兆位端口

  • 非千兆位端口(10/100 Mbps 端口)

这两种端口具有不同功能。本部分的其余内容将概要介绍这些功能。本文档的其他部分对这些功能进行了更详细的说明。

千兆位和非千兆位端口支持的功能

3550 上的每个端口都有四个不同输出队列。您可以将其中一个队列配置为严格优先队列。其中每一个剩余的队列配置作为不严格优先级队列和服务与使用加权轮回(WRR)。在所有端口上,数据包分配到四个可能的队列之一根据业务类别(CoS)。

仅千兆位端口支持的功能

千兆位端口还支持在每个队列内使用一种队列管理机制。您能配置每个队列以两阈值使用加权随机早期检测(WRED)或尾部丢弃。此外,您还可以调整每个队列的大小(分配给每个队列的缓冲区)。

仅非千兆位端口支持的功能

非千兆位端口没有任何排队机制,例如 WRED 或带有两个阈值的尾部丢弃。它只支持 10/100 Mbps 端口上的 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 放在队列 1 (Q1) 中

  • CoS 2 和 3 放在 Q2 中

  • CoS 4 和 5 放在 Q3 中

  • CoS 6 和 7 放在 Q4 中

您可以发出以下命令验证端口的 CoS 到队列映射:

cat3550#show mls qos interface gigabitethernet0/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 队列中的数据包将永远不会转发。

提示

要避免其他队列出现耗竭,请特别注意放在优先队列中的是什么数据流。该队列通常用于语音数据流,其流量通常不是很高。但是,如果某人能够使用 CoS 优先级向严格优先队列中发送高流量数据流(例如大文件传输或备份),则可能导致其他数据流出现耗竭。要避免此问题,需要在分类/准入中放置特殊数据流并在网络中标记该数据流。例如,可以采取下列预防措施:

  • 为所有不受信任的源端口使用不可信端口 Qos 状态。

  • 为 Cisco IP 电话端口使用可信边界功能以确保没有在为另一项应用的 IP 电话配置的信任状态中使用它。

  • 为进入严格优先队列的数据流制定策略。在千兆位端口上为 CoS 为 5(差分服务代码点 [DSCP] 46)的流量策略设置一个限制 (100 MB)。

有关这些主题的详细信息,请参阅下列文档:

在 3550 上,可以将一个队列配置为优先队列(始终为 Q4)。请在接口模式下使用以下命令:

3550(config-if)#priority-queue out

如果未在接口中配置优先队列,则会将 Q4 视为标准 WRR 队列。本文档的 Catalyst 3550 上的加权轮询部分提供了更多详细信息。通过发出以下 Cisco IOS 命令可以验证接口上是否配置了严格优先队列:

NifNif#show mls qos interface gigabitethernet0/1 queueing 
GigabitEthernet0/1
Egress expedite queue: ena

Catalyst 3550 上的加权轮询

WRR 是在 3550 上的输出调度中使用的一种机制。WRR 可在三个或四个队列之间工作(如果没有严格优先队列)。WRR 中使用的队列将以轮询方式进行清空,您可以为每个队列配置权重。

例如,可以配置权重以便按不同方式为队列提供服务,如下面的列表所示:

  • 服务 WRR Q1:10% 的时间

  • 服务 WRR Q2:20% 的时间

  • 服务 WRR Q3:60% 的时间

  • 服务 WRR Q4:10% 的时间

对于每个队列,可以在接口模式下发出以下命令以配置四个权重(每个队列关联一个权重):

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

示例如下:

3550(config)#interface gigabitethernet 0/1
3550(config-if)#wrr-queue bandwidth 1 2 3 4

注意: 权重是相对的。我们使用下列值:

  • Q1 = 权重 1/(权重 1 + 权重 2 + 权重 3 + 权重 4) = 1/(1+2+3+4) = 1/10

  • Q2 = 2/10

  • Q3 = 3/10

  • Q4 = 4/10

可以按照以下两种方式实现 WRR:

  • 基于带宽的 WRR:每个权重表示允许发送的一个特定带宽。权重 Q1 允许使用大约 10% 的带宽,Q2 获得 20% 的带宽,等等。目前这种方案只能在 Catalyst 6500/6000 系列中实现。

  • 基于数据包的 WRR:这是在 3550 交换机中实现的算法。每个权重表示要发送的一定数量的数据包,而不管其大小如何。

由于 3550 可实现基于数据包的 WRR,因此下列行为将适用于本部分中的配置:

  • Q1 传输 10 个数据包中的 1 个数据包

  • Q2 传输 10 个数据包中的 2 个数据包

  • Q3 传输 10 个数据包中的 3 个数据包

  • Q4 传输 10 个数据包中的 4 个数据包

要传输的数据包的大小可以完全相同。这时四个队列仍然可以获得预期的带宽份额。但是,如果队列间的平均数据包大小不同,则在拥塞情况下,这会对什么应该传输以及什么应该丢弃产生巨大影响。

例如,假设交换机中只有两个流。同时我们假设处于以下情况:

  • CoS 为 3 的 1 Gbps 小型交互式应用数据流(80 字节 [B] 帧)放在 Q2 中。

  • CoS 为 0 的 1 Gbps 大文件传输数据流(1518-B 帧)放在 Q1 中。

交换机中的两个队列将承载 1 Gbps 数据进行传送。

这两个流需要共享相同的输出千兆位端口。假设为 Q1 和 Q2 配置了相等的权重。WRR 是基于数据包应用的,每个队列所传输的数据量并不相同。从每个队列转发出去的数据包的数量是相同的,但交换机实际发送的数据量如下所示:

  • 77700 Packets Per Second (PPS)在外面Q2 = (77700 x 8 x 64)比特/秒(位/秒) (近似52 Mbps)

  • 从 Q1 发出 77700 pps = (77700 x 8 x 1500) bps(大约 948 Mbps)

提示

  • 如果您想在网络中为每个队列提供公平访问,请考虑每个数据包的平均大小。各数据包都期望放在一个队列中,并对权值作相应的修改。例如,如果要为四个队列中的每个队列提供相等的接入能力,以使每个队列获得 1/4 的带宽,则流量将如下所示:

    • 在 Q1 中:尽量为 Internet 流量。假设数据流的平均数据包大小为 256 B。

    • 在 Q2 中:由文件传输组成的备份,数据包主要为 1500 B。

    • 在 Q3 中:视频流,放在 192 B 的数据包中。

    • 在 Q4 中:交互式应用,主要由 64 B 的数据包组成。

    这将导致如下情况:

    • Q1 消耗的带宽是 Q4 的 4 倍。

    • Q2 消耗的带宽是 Q4 的 24 倍。

    • Q3 消耗的带宽是 Q4 的 3 倍。

  • 要以相等的带宽接入网络,可进行如下配置:

    • Q1 的权重为 6

    • Q2 的权重为 1

    • Q3 的权重为 8

    • Q4 的权重为 24

  • 如果这样分配权重,当出现拥塞时四个队列将分享相等的带宽。

  • 如果启用了严格的优先级队列,WRR 加权将在剩余的三个队列中重新分配。如果启用了严格优先队列并且没有配置 Q4,则权重为 1、2、3、4 的第一个示例将变为:

    • Q1 = 1/(1+2+3) = 6 个数据包中的 1 个数据包

    • Q2 = 6 个数据包中的 2 个数据包

    • Q3 = 6 个数据包中的 3 个数据包

    您可以发出以下 Cisco IOS 软件 show 命令以验证队列权重:

    NifNif#show mls qos interface gigabitethernet0/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#show mls qos interface gigabitethernet0/1 queueing 
    GigabitEthernet0/1
    Egress expedite queue: ena
    wrr bandwidth weights:
    qid-weights
     1 - 25
     2 - 25
     3 - 25
     4 - 25    
    
    !--- The expedite queue is disabled.
    
    

Catalyst 3550 交换机上的 WRED

WRED 只在 3550 系列交换机的千兆位端口上可用。WRED是随机早期检测的修改,用于拥塞避免。RED 定义了以下参数:

  • 最小阈值:表示队列中的一个阈值。不会丢弃低于此阈值的数据包。

  • 最大(最大)阈值:表示队列中的另一个阈值。高于最大阈值的所有数据包都将丢弃。

  • 斜率:丢弃介于最小和最大阈值之间的数据包的概率。丢弃概率随数据包大小的增加呈线性(以一定斜率)增长趋势。

下图显示了 RED 队列中的掉包概率:

注意: 所有实现 RED 的 Catalyst 交换机都允许您调整斜率。

/image/gif/paws/24057/187-a.gif

在 WRED 中,会为不同服务设置权重。您可以定义标准服务和高级服务。每个服务将采用一组不同的阈值。当达到最小阈值 1 时,只会丢弃分配给标准服务的数据包。只有在达到最小阈值 2 时才开始丢弃高级服务的数据包。如果最小阈值 2 高于最小阈值 1,则所丢弃的标准服务数据包将多于高级服务的数据包。下图显示的是 WRED 的每项服务的丢弃概率示例:

注意: 3550 交换机不允许调整最小阈值,而只能调整最大阈值。最小阈值始终硬性设置为 0。这就给出了当前 3550 中所实现的丢弃概率。

/image/gif/paws/24057/187-b.gif

在 3550 上启用了 WRED 的任何队列将始终具有一个非零丢弃概率,并且始终会丢弃数据包。这是因为最小阈值始终为 0。如果需要避免在达到最大阈值时丢弃数据包,可使用加权尾部丢弃,如 Catalyst 3550 交换机上的尾部丢弃部分所述。

提示: Cisco Bug ID CSCdz73556仅限注册用户)中记录了一个用于配置最小阈值的增强请求。

有关 RED 和 WRED 的详细信息,请参阅避免拥塞概述

在 3550 上,可以使用两个不同的最大阈值配置 WRED,以提供两种不同的服务。每个阈值将分配不同类型的数据流,并且仅取决于内部 DSCP。这与只取决于数据包的 CoS 的队列分配不同。DSCP 到阈值表的映射将决定每个 64 DSCP 所对应的阈值。您可以发出以下命令查看和修改此表:

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

例如,以下命令将 DSCP 26 分配给阈值 2:

NifNif(config-if)#wrr-queue dscp-map 2 26
NifNif#show mls qos interface gigabitethernet0/1 queueing
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-queue random-detect max-threshold queue_id threshold_1 threshold_2

该示例将进行如下配置:

  • 为 Q1 配置阈值 1 = 50%;阈值 2 = 100%

  • 为 Q2 配置阈值 1 = 70%;阈值 2 = 100%

3550(config)#interface gigabitethernet 0/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#show mls qos interface gigabitethernet0/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 表示启用,即队列使用 WRED。dis 表示禁用,即队列使用尾部丢弃。

您还可以监控每个阈值所丢弃的数据包数。发出以下命令:

show mls qos interface gigabitethernetx/x statistics 
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 交换机上的尾部丢弃

尾部丢弃是 3550 的千兆位端口的默认机制。每个千兆位端口可以有两个尾部丢弃阈值。使用本文档的 Catalyst 3550 交换机上的 WRED 部分所定义的相同 DSCP 阈值映射,为每个尾部丢弃阈值分配一组 DSCP。当达到某个阈值时,将丢弃具有分配给该阈值的 DSCP 的所有数据包。您可以发出以下命令以配置尾部丢弃阈值:

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

该示例将进行如下配置:

  • 为 Q1 配置尾部丢弃阈值 1 = 50%;阈值 2 = 100%

  • 为 Q2 配置阈值 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 gigabitethernet 0/1
3550(config-if)#wrr-queue queue-limit 4 3 2 1

这些队列大小参数是相对的。该示例显示:

  • Q1 是 Q4 的四倍。

  • Q2 是 Q4 的三倍。

  • Q3 是 Q4 的两倍。

4096 个数据包将重新分配如下:

  • Q1 = [4 / (1+2+3+4)] * 4096 = 1639 个数据包

  • Q2 = 0.3 * 4096 = 1229 个数据包

  • Q3 = 0.2 * 4096 = 819 个数据包

  • Q4 = 0.1 * 4096 = 409 个数据包

使用以下命令可以查看拆分缓冲区在四个队列中的相对权重:

cat3550#show mls qos interface buffers
GigabitEthernet0/1
Notify Q depth:
qid-size
1 - 4
2 - 3
3 - 2
4 - 1
...

您还可以发出以下命令以查看每个队列仍然可以保留的自由数据包数:

(config-if)#show mls qos interface gigabitethernetx/x statistics 
 WRED drop counts:
 qid  thresh1    thresh2   FreeQ
 1 : 0          0         1639      
 2 : 0          0         1229      
 3 : 0          0         819       
 4 : 0          0         409 

FreeQ 计数参数是动态的。FreeQ 计数器可给出最大队列大小减去队列中当前数据包数之后的值。例如,如果当前 Q1 中有 39 个数据包,则 FreeQ 计数中有 1600 个自由数据包。示例如下:

(config-if)#show mls qos interface gigabitethernetx/x statistics 
 WRED drop counts:
 qid  thresh1    thresh2   FreeQ
 1 : 0          0         1600    
 2 : 0          0         1229      
 3 : 0          0         819       
 4 : 0          0         409 

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

10/100-Mbps 端口上没有可用的队列管理方案(没有 WRED 或带有两个阈值的尾部丢弃)。四个队列都是 FIFO 队列。也没有为每个千兆位端口预留 4096 个数据包的最大队列大小。10/100-Mbps 端口将在每个队列中存储数据包,直到由于缺乏资源而填满。您可以为每个队列预留一个最小数据包数。默认情况下,每个队列的最小数据包数设置为 100。如果定义了不同的最小预留值并为每个队列分配其中的一个值,则可以修改每个队列的最小预留值。

要进行此项修改,请完成下列步骤:

  1. 为每个全局最小预留值分配一个缓冲区大小。

    最多可以配置八个不同的最小预留值。发出以下命令:

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

    这些最小预留值是交换机的全局参数。默认情况下,所有最小预留值都设置为 100 个数据包。

    例如,要配置 150 个数据包的最小预留级别 1 和 50 个数据包的最小预留级别 2,请发出以下命令:

    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)#interface fastethernet 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#show mls qos interface fastethernet0/1 buffers 
    FastEthernet0/1
    Minimum reserve buffer size:
    150 50 100 100 100 100 100 100 
    
    !--- This shows the value of all eight min reserve levels.
    
    Minimum reserve buffer level select:
    2 1 3 4 
    
    !--- This shows the min reserve level that is assigned to 
    !--- each queue (from Q1 to Q4).
    
    

结论

3550 上的端口的排队和调度涉及以下步骤:

  1. 为每个队列分配一个 CoS。

  2. 需要时启用严格优先队列。

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

  4. 修改队列大小(仅限千兆位端口)。

  5. 启用队列管理机制(尾部丢弃或 WRED,仅限千兆位端口)。

正确的排队和调度可以减少语音/视频数据流的延迟/抖动,并避免关键任务数据流损失。请确保遵循下列指导原则以获得最佳调度性能:

  • 使用信任或特定标记将网络中的数据流划分为不同类别。

  • 监察超额流量。

相关的思科支持社区讨论

思科支持社区是您提问、解答问题、分享建议以及与工作伙伴协作的论坛。


相关信息


Document ID: 24057