UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Cisco - Catalyst ( 2960 / 3560 / 3750 ) QoS



QoSを導入したネットワークではフレームやパケットを判別し重要度に応じた取り扱いをしてくれます。全ての通信を平等に扱うのをとりやめ一定の規則に基づいた不公平を導入します。たとえば重要度が高く遅延に敏感ですぐに送信しなければならないアプリケーションのフレームやパケットは送信待ちのほかの種類のものより先に送ります。

また同じアプリケーションを使っていてもユーザの種類や場所によって優先度を変えることもあります。逆に重要度が低くかつ今すぐ送信しなくてもよいフレームやパケットがあれば後回しにします。さらに必要に応じ重要度の低いフレームやパケットを廃棄し他の重要度の高い通信を守ります。


QoSを導入することでネットワークの帯域が増大するわけではありません。もし全てのアプリケーションの優先度が同じであれば不公平な取り扱いはできませんからQoSを適用できません。しかし現実のネットワークでは重要度や遅延と廃棄に対する敏感さはアプリケーションやユーザの種類によって大きく異なっています。この性質を利用して故意に不公平な取り扱いをしてネットワークの限られた帯域をやりくりすることがQoSの役割です。


■Catalyst QoSの実装


CatalystのQoSの実装、アーキテクチャは機種ごとに異なり大きくわけて以下の3つに分類されます。


  • Catalyst6500
  • Catalyst4500
  • Catalyst2960/3560/3750

また、Catalyst QoSの特徴として以下が挙げられます。

  • ハードウェア処理される (CPU負荷などには影響はない)
  • ルータの輻輳制御のように必要時のみ発動するのではなく設定をいれた時点で動作が変わる
  • トラフィックが混雑していない環境で導入しても意味はない

ここではCatalyst2960/3560/3750を前提にQoSを紹介します。


■Catalyst QoSのフロー


図で表しますと以下のようになります。


一般的かどうかわかりませんが、Catalystで帯域制限を行うことはできなくはないですが、あまり実務でやったことがありません。Catalyst側では優先制御、ルータ側では帯域制御というようにルータ・スイッチで役割分担をしながら導入することが多いです。


■クラス分け / マーキング


フレームまたはパケットをクラス分けする際に基準とするのが以下のものです。

  • CoS ( Layer2 3bit )
  • IP Precedence ( Layer3 3bit )
  • DSCP ( Layer3 6bit )
  • ACL ( Access Control List )

CoSについてはLayer2のフレームに付加されるのでパケットでは伝えることができません。なおかつタグ付きのフレーム(Trunk)に限定されます。また、上記の値をフレーム(パケット)が到達した時点のものを使用するか上書きするか選択することができます。既に値付けされたものを信用する(Trust)設定と上書きをするACLを用いたPolicy-Mapの両方を行うことが可能です。

デフォルトでは全てのポートはUntrustであり、いずれかの値がセットされていたとしても0にリセットされますので必ずTrust設定またはPolicy-Mapによる値のセットが必要となります。


4つの選択基準がありますが、基本的にはどれを使用してもOKです。要件次第という部分もあるかと思いますが、Layer2レベルでの優先制御でTrunk接続しているのであればCoSでやればいいですしLayer3レベルであればIP PrecedenceかDSCPのどちらでも構いません。混在させることも可能ですがあまり意味はなく、policy-mapが設定されていればTrustなどが設定されていても上書きされます。


■クラス分け/マーキングの設定例


実際の設定例です。


(config)# mls qos


この1行でCatalystのQoSは有効になります。


(config)# interface GigabitEthernet1/0/1
(config-if)# switchport access vlan 100
(config-if)# switchport mode access
(config-if)# mls qos cos 5
(config-if)# mls qos overrride


物理ポート単位でcos値を5にセットしています。ちなみにDSCPやIP Precedenseに関してはLayer3ですのでこのコマンドはサポートされません。


(config)# interface GigabitEthernet1/0/1
(config-if)# switchport access vlan 100
(config-if)# switchport mode access
(config-if)# mls qos trust dscp


既にマーキングされたDSCPの値を信用するには上記の設定を行います。DSCPの他にIP PrecedenseやCoSを指定することも可能です。


(config)# access-list 100 permit ip any any

(config)# class-map match-all QoS
(config-cmap)# match access-group 100

(config)# policy-map QoS
(config-pmap)# class QoS
(config-pmap-c)# set ip precedence 5

(config)# interface GigabitEthernet1/0/1
(config-if)# switchport access vlan 100
(config-if)# switchport mode access
(config-if)# service-policy input QoS


policy-mapを使った設定例です。インターフェイスGi1/0/1に着信するパケットはすべてIP Precedenceを5にセットしています。P PrecedenceのみならずDSCPをセットすることも可能です。実際にセットできる値は以下です。


(config-pmap-c)# set dscp ?
  <0-63>   Differentiated services codepoint value
  af11     Match packets with AF11 dscp (001010)
  af12     Match packets with AF12 dscp (001100)
  af13     Match packets with AF13 dscp (001110)
  af21     Match packets with AF21 dscp (010010)
  af22     Match packets with AF22 dscp (010100)
  af23     Match packets with AF23 dscp (010110)
  af31     Match packets with AF31 dscp (011010)
  af32     Match packets with AF32 dscp (011100)
  af33     Match packets with AF33 dscp (011110)
  af41     Match packets with AF41 dscp (100010)
  af42     Match packets with AF42 dscp (100100)
  af43     Match packets with AF43 dscp (100110)
  cs1      Match packets with CS1(precedence 1) dscp (001000)
  cs2      Match packets with CS2(precedence 2) dscp (010000)
  cs3      Match packets with CS3(precedence 3) dscp (011000)
  cs4      Match packets with CS4(precedence 4) dscp (100000)
  cs5      Match packets with CS5(precedence 5) dscp (101000)
  cs6      Match packets with CS6(precedence 6) dscp (110000)
  cs7      Match packets with CS7(precedence 7) dscp (111000)
  default  Match packets with default dscp (000000)
  ef       Match packets with EF dscp (101110)
(config-pmap-c)# set ip precedence ?
  <0-7>           Precedence value
  critical        Match packets with critical precedence (5)
  flash           Match packets with flash precedence (3)
  flash-override  Match packets with flash override precedence (4)
  immediate       Match packets with immediate precedence (2)
  internet        Match packets with internetwork control precedence (6)
  network         Match Packets with network control precedence (7)
  priority        Match packets with priority precedence (1)
  routine         Match packets with routine precedence (0)





■キューイング


mls qosを有効にした時点で2960/3560/3750の出力キューは4つに分割されています。前述のCoS / IP Precedense / DSCPの値を元に4つの配置が決定します。これをキューイングと呼びます。以下はそれを図にしたものです。



キューイングに関しては上の図を見ていただければどのように配置されるのかおわかり頂けると思います。デフォルトでCoS / Precedense / DSCPは各々の値が関連ずけられており( outmap queue mapping )以下のコマンドで確認いただけます。


# show mls qos maps cos-dscp
   Cos-dscp map:
        cos:   0  1  2  3  4  5  6  7
     --------------------------------
       dscp:   0  8 16 24 32 40 48 56


# show mls qos maps ip-prec-dscp
   IpPrecedence-dscp map:
     ipprec:   0  1  2  3  4  5  6  7
     --------------------------------
       dscp:   0  8 16 24 32 40 48 56


# show mls qos maps dscp-cos
   Dscp-cos map:
     d1 :  d2 0  1  2  3  4  5  6  7  8  9
     ---------------------------------------
      0 :    00 00 00 00 00 00 00 00 01 01
      1 :    01 01 01 01 01 01 02 02 02 02
      2 :    02 02 02 02 03 03 03 03 03 03
      3 :    03 03 04 04 04 04 04 04 04 04
      4 :    05 05 05 05 05 05 05 05 06 06
      5 :    06 06 06 06 06 06 07 07 07 07
      6 :    07 07 07 07


これらを任意のmappingに変更することは可能ですが、この状態で最適化されているため変更の必要はありません。






■スケジューリング


Catalyst QoSではこのあたりが味噌となります。


2960/3560/3750のスケジューリングはSRR ( Shaped Round Robin ) 方式といいます。このSRRはSharedモードShapedモードに細分化されます。デフォルトでキュー1がshaped、それ以外がsharedです。 ( 上図参照 )

shapedモードはその名の通りトラフィックがshaping ( 帯域制限 ) されるモードであり、デフォルトで25という数字が設定されています。これは速度が100Mのインターフェイスであれば100÷25という計算で4Mに制限される、ということになります。1Gであれば1000÷25で40Mです。分母である25という数字は任意に変更可能であり0を設定するとsharedモードということになります。


sharedモードではshapedモードで使用した残りの帯域をウェイトに基づいて皆で仲良くわけあって使用する方式です。 下記の例ではキュー1にshapeのウェイト10を割り振っていますので帯域は1Gbps÷10=100Mbpsに制限されます。0と設定したキュー2~4にはsharedモードで動作します。shapedで使用される帯域が100Mbpsですので残った帯域は900Mです。これがsharedで使用されます。sharedに設定された3つのキューのうち、キュー2では900M×(20÷(20+30+50))で約180Mbpsが割り当てられることになります。但し、キュー2のキャパシティが一杯の際に他のキューに余力があればそれを使うことが可能です。


(config)# interface GigabitEthernet1/0/1
(config-if)# speed 1000
(config-if)# srr-queue bandwidth shape 10 0 0 0
(config-if)# srr-queue bandwidth share 0 20 30 50


Catalyst QoSで帯域を制限することも可能です。以下のコマンドで簡単に制限を行うことが可能です。ただし、物理インターフェイスにのみ適用可能でそのトラフィックの中で特定のIPのみといったことは不可です。さらに下記は出力トラフィックに適用され、下記の例では物理インターフェイスの帯域幅の50%に制限されます。ただし、正確に50%というわけではありません。機種によっては正確に制限されるものもあるようですが、厳密ではないと思ったほうが良さそうです。


(config)# interface GigabitEthernet1/0/1
(config-if)# srr-queue bandwidth limit 50


また、音声ネットワークが混合しているような環境で必ず行うのが以下の緊急出力キューの設定です。 下記設定でキュー1が緊急出力キューとなり、キュー1が完全に空になるまで他のキューの出力は行いません。音声パケットなどをキュー1に配置して下記設定を有効にするというのが一般的な手法です。この場合、sharedで割り振った値やshapedの値に関してキュー1は完全に無視され、残りの3つの値で計算がおこなわれます。


(config)# interface GigabitEthernet1/0/1
(config-if)# priority-queue out


注意が必要なのはクラス分けで特定パケットをキュー1に配置した場合、デフォルトではそのパケットはshapedモードで動作することになり上記のpriority-queue outを設定しないと特定閾値にシェーピングされますので場合によっては必要な通信ができなくなるケースがあります。帯域制限をかけたくない場合はpriority-queue outかsrr-queue bandwidth shaped 0 0 0 0 のどちらかを設定することが必要です。

これらを踏まえて下記では特定Gi1/0/24から入ってくる特定パケット ( 送信元が192.168.0.0/24 ) をキュー1に配置しGi1/0/1から出力する際に優先制御させる設定例となります。また、Gi1/0/2は192.168.0.0/24からのパケットを出力しますが、こちらは優先制御はかけずにshapedを解除する設定です。

(config)# mls qos

(config)# class-map match-all vlan192
(config-class)# match access-group name vlan192

(config)# policy-map vlan192-priority
(config-pmap)# class vlan192
(config-pmap-c)# set dscp ef

(config)# interface GigabitEthernet1/0/1
(config-if)# priority-queue out

(config)# interface GigabitEthernet1/0/2
(config-if)# srr-queue bandwidth shape 0 0 0 0
 
(config)# interface GigabitEthernet1/0/24
(config-if)# service-policy input vlan192-priority

(config)# ip access-list extended vlan192
(config-ext-nacl)# permit ip 192.168.0.0 0.0.255.255 any



■帯域制御 ( ポリシング )

Catalyst2960 / 3560 / 3750で帯域制御を実施するには以下の3つの方法があります。

・Policing
・SRR bandwidth limit
・SRR output queueのshaped mode

このうち、後者の2つは上記で述べた通りです。これらに加えてCatalystではポリシングという手法を用いて帯域を制御することが可能です。この手法だと物理インターフェイス単位ではなくVLAN単位で帯域が指定可能であったり、送信元送信先のアドレスを限定して設定することが可能です。以下は送信元が192.168.0.0/16に限定して帯域を10Mに指定する設定例です。police 10000000 1000の部分が帯域を指定している部分であり、1000はバーストサイズを意味します。

(config)# mls qos

(config)# class-map match-all vlan192
(config-class)# match access-group name vlan192

(config)# policy-map vlan192-police
(config-pmap)# class vlan192
(config-pmap-c)# police 10000000 1000 exceed-action drop

(config)# interface GigabitEthernet1/0/1
(config-if)# service-policy input vlan192-police

(config)# ip access-list extended vlan192
(config-ext-nacl)# permit ip 192.168.0.0 0.0.255.255 any


上記は物理ポートに適用し物理ポート単位で帯域が制御されますがVLAN単位で制御することも可能です。 ( 2960は未サポート ) 以下がその設定例です。該当の物理インターフェイスには" mls qos vlan-based "を設定します。物理ポートはSVIに設定されたQoSを使用することになります。

(config)# mls qos

(config)# class-map match-all vlan192
(config-class)# match access-group name vlan192

(config)# policy-map vlan192-police
(config-pmap)# class vlan192
(config-pmap-c)# police 10000000 1000 exceed-action drop

(config)# interface GigabitEthernet1/0/1
(config-if)# mls qos vlan-based

(config)# interface Vlan10
(config-if)# ip address 192.168.0.1 255.255.0.0
(config-if)# service-policy input vlan192-police

(config)# ip access-list extended vlan192
(config-ext-nacl)# permit ip 192.168.0.0 0.0.255.255 any




QoSではチューニング作業は必須となってきます。

もともと1つのキューでFIFO処理されていたものが4つのキューに分割されることにより、QoS有効後は有効前の状態と比較してパケットドロップが多発することがあります。パケットドロップが確認された場合は以下の2つの処理を実施しドロップがなくなるまでチューニング作業を繰り返します。

もともと1つだったキューを4つに分割することになるのでQoSは有効化しないほうがスループットは上と思われるかもしれませんが、スループット検証にてQoS無効時よりも有効時のチューニング実施時のほうがスループットが高いことが確認できていますので是非参考にしてください。


■バッファチューニング設定

パケットドロップが確認された場合はまずバッファのチューニングを行います。ただし、この変更を実施しても劇的に改善されることはあまりなく、後述するWTDを調整することによる効果のほうが期待できます。

QoSを有効にし物理ポートのキューが4つに分割された際に、各キューに対して均等にバッファが割り当てられています。全体が100なので各キューは25づつ割り当てられている状態です。この割当ての割合を任意に変更することが可能です。

現場のトラフィックに依存する部分がありますが、大抵の場合はトラフィックが均等に4つのキューに分散されることはまずなく、特定キューに偏ります。偏りがあるのでそれに合わせてバッファの割合も変更したほうがキュー溢れが発生しにくくなります。

# デフォルトは全てのキューで25づつ割り当てられている
(config)# mls qos queue-set output 1 buffers 25 25 25 25

# キュー0の割合を少なめに、キュー1の割合を多めに変更する
(config)# mls qos queue-set output 1 buffers 5 85 5 5


上記ではqueue-set 1の割合を変更していますが、queue-set 2というの別途定義可能です。各物理ポートはデフォルトでqueue-set 1が割り当てられているのでqueue-set 2を割り当てるよう設定が必要です。


# queue-set 2のバッファ割り当てを変更
(config)# mls qos queue-set output 2 buffers 5 85 5 5

# queue-set 2を割り当てる
(config)# interface GigabitEthernet1/0/1
(config-if)# queue-set 2


キュー0を緊急出力キュー ( priority-queue out ) を設定している場合はキュー0にはさほどのバッファを割り当てなくても大丈夫です。また、バッファの値を0と設定するとそのキューからはパケットの送出ができなくなりますので、累計のカウンタの値が0になっているといえど多少の値は割り当てておいたほうが無難です。


■WTD ( Weighted Tail-Drop ) のチューニング

各キューではパケットが溢れた際には当然のドロップが発生します。WTDはこのときにユーザが設定可能な閾値を元にパケットドロップを決定することができる輻輳回避メカニズムです。デフォルトでは以下のように設定されています。

(config)# mls qos queue-set output 1 threshold 1 100 100 50 400
(config)# mls qos queue-set output 1 threshold 2 200 200 50 400
(config)# mls qos queue-set output 1 threshold 3 100 100 50 400
(config)# mls qos queue-set output 1 threshold 4 100 100 50 400


上をわかりやすく表にまとめると以下のようになります。

  Drop閾値1  Drop閾値2 専用閾値 最大閾値
キュー1 100% 100% 50% 400%
キュー2 200% 200% 50%  400% 
キュー3 100% 100%  50%  400% 
キュー4 100% 100%  50%  400% 


Drop閾値1と2はキューの割り当てメモリの割合として表される2つのWTD閾値です。専用閾値はキューに保証されるメモリサイズです。デフォルトでは50%に設定されており、割り当てられたメモリの50%は専用サイズであり、残りの50%は他のキューと共通して利用する共通プールとして利用されます。最大閾値は各キューに対して割り当てられたサイズに対して400%までバッファ可能となります。これは各キューの専用プールが50%であり、残りは共有プールとして利用されるため100%を超える値が利用可能となります。

以下はキュー2の閾値を調整する設定例です。Drop閾値を2000に設定し専用閾値を100に設定しています。Drop閾値は最大で3200まで設定可能です。

(config)# mls qos queue-set output 2 threshold 2 2000 2000 100 2000

(config)# interface GigabitEthernet1/0/1
(config-if)# queue-set 2


前述したバッファのチューニングよりもこのWTDのほうがパケットドロップの回避には効果的です。



ちなみに実案件で経験したのですがCatalyst2960Gから2960Sにリプレイスした際にドロップが多発してしまうようになってしまいました。調査した結果、2960Sは2960Gと比較してASICの数が減っておりショートパケットなどが多い環境などではその影響でドロップが発生することがあるようです。ですので、ASICが複数搭載されているCatalystにおいてはなるべくそれらを分散させて使用するほうが吉と思われます。どのポートがどのASICなのかは以下のコマンドで確認可能です。


# show platform pm if-numbers

interface gid  gpn  lpn  port slot unit slun port-type lpn-idb gpn-idb
----------------------------------------------------------------------
Gi1/0/1   1    1    25   0/1  1    1    1    local     Yes     Yes
Gi1/0/2   2    2    26   0/0  1    2    2    local     Yes     Yes
Fa1/0/1   3    3    1    0/2  1    1    3    local     Yes     Yes
Fa1/0/2   4    4    2    0/3  1    2    4    local     Yes     Yes
Fa1/0/3   5    5    3    0/4  1    3    5    local     Yes     Yes
Fa1/0/4   6    6    4    0/5  1    4    6    local     Yes     Yes
Fa1/0/5   7    7    5    0/6  1    5    7    local     Yes     Yes
Fa1/0/6   8    8    6    0/7  1    6    8    local     Yes     Yes
Fa1/0/7   9    9    7    0/8  1    7    9    local     Yes     Yes
Fa1/0/8   10   10   8    0/9  1    8    10   local     Yes     Yes
Fa1/0/9   11   11   9    0/10 1    9    11   local     Yes     Yes
Fa1/0/10  12   12   10   0/11 1    10   12   local     Yes     Yes
Fa1/0/11  13   13   11   0/12 1    11   13   local     Yes     Yes
Fa1/0/12  14   14   12   0/13 1    12   14   local     Yes     Yes
Fa1/0/13  15   15   13   0/14 1    13   15   local     Yes     Yes
Fa1/0/14  16   16   14   0/15 1    14   16   local     Yes     Yes
Fa1/0/15  17   17   15   0/16 1    15   17   local     Yes     Yes
Fa1/0/16  18   18   16   0/17 1    16   18   local     Yes     Yes
Fa1/0/17  19   19   17   0/18 1    17   19   local     Yes     Yes
Fa1/0/18  20   20   18   0/19 1    18   20   local     Yes     Yes
Fa1/0/19  21   21   19   0/20 1    19   21   local     Yes     Yes
Fa1/0/20  22   22   20   0/21 1    20   22   local     Yes     Yes
Fa1/0/21  23   23   21   0/22 1    21   23   local     Yes     Yes
Fa1/0/22  24   24   22   0/23 1    22   24   local     Yes     Yes
Fa1/0/23  25   25   23   0/24 1    23   25   local     Yes     Yes
Fa1/0/24  26   26   24   0/25 1    24   26   local     Yes     Yes


上記の太文字にしているのがASIC番号です。上記では全て0ですのでASICは一個のみということがわかります。QoSを有効にしておらず、上記のようにASICが一個しかない場合などはどうしようもありませんが・・・・・




■QoSのshowコマンド


[ 参考 ] ※下記の出力はmls qosを有効にしていない状態です。


# show mls qos queue-set
Queueset: 1
Queue     :       1       2       3       4
----------------------------------------------
buffers   :      25      25      25      25
threshold1:     100     200     100     100
threshold2:     100     200     100     100
reserved  :      50      50      50      50
maximum   :     400     400     400     400
Queueset: 2
Queue     :       1       2       3       4
----------------------------------------------
buffers   :      25      25      25      25
threshold1:     100     200     100     100
threshold2:     100     200     100     100
reserved  :      50      50      50      50
maximum   :     400     400     400     400
# show mls qos interface fa1/0/1 buffers
FastEthernet1/0/1
QoS is disabled. When QoS is enabled, following settings will be applied
The port is mapped to qset : 1
The allocations between the queues are : 25 25 25 25
# show mls qos interface fa1/0/1 queueing
FastEthernet1/0/1
QoS is disabled. When QoS is enabled, following settings will be applied
Egress Priority Queue : disabled
Shaped queue weights (absolute) :  25 0 0 0
Shared queue weights  :  25 25 25 25
The port bandwidth limit : 100  (Operational Bandwidth:100.0)
The port is mapped to qset : 1
# show mls qos interface fa1/0/1 statistics
FastEthernet1/0/1 (All statistics are in packets)

  dscp: incoming
-------------------------------

  0 -  4 :   179728822       122963     32509063       570266      3862628
  5 -  9 :         616       366987       471981      2056495        20050
 10 - 14 :     7958191           16      3385124        12419      4364310
 15 - 19 :          18      2389747          244      3974840            0
 20 - 24 :      620332         7651      3200761       135745       514702
 25 - 29 :         420      2686603            6      2945277            1
 30 - 34 :      315922            1       787499          248       208789
 35 - 39 :          11         7817        22076        64853            1
 40 - 44 :      626784         1858        16009            0          105
 45 - 49 :         569       163176            9      4970263            0
 50 - 54 :         268           19            6           11           11
 55 - 59 :          39       198991            2       115113            0
 60 - 64 :         911            0        17501       390216
  dscp: outgoing
-------------------------------

  0 -  4 :  1042859367            0     47278369            0      9727667
  5 -  9 :           0       443008            0            0            0
 10 - 14 :          27            0           33            0            0
 15 - 19 :           0           38            0            0            0
 20 - 24 :          10            0           31            0          745
 25 - 29 :           0          102            0          126            0
 30 - 34 :           0            0        36149            0            0
 35 - 39 :           0            0            0          115            0
 40 - 44 :       18851            0            0            0            0
 45 - 49 :           0            0            0      7172227            0
 50 - 54 :          87            0            0            0            0
 55 - 59 :           1            0            0            0            0
 60 - 64 :           0            0            0            0
  cos: incoming
-------------------------------

  0 -  4 :   266158977            1            0            1            0
  5 -  7 :      292560         1303      4944637
  cos: outgoing
-------------------------------

  0 -  4 :  1105074715            0            0           94            0
  5 -  7 :           0      5105879       127677
  output queues enqueued:
queue: threshold1 threshold2 threshold3
-----------------------------------------
 queue 0:           2           0           0
 queue 1:     9549615     1577573    28089848
 queue 2:           0           0           0
 queue 3:           0           0  1104515590

  output queues dropped:
queue: threshold1 threshold2 threshold3
-----------------------------------------
 queue 0:            0            0            0
 queue 1:            0            0            0
 queue 2:            0            0            0
 queue 3:            0            0          192

Policer: Inprofile:            0 OutofProfile:            0


 関連記事
 Catalyst 2960 / 3560 / 3750 QoSの設定
 Catalyst 4500 QoSの設定
 Catalyst 6500 QoSの設定
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.