2024-03-13 Catalyst3850 9000 スイッチ QoS 設定・検証

提供:hkatou_Lab

目的

Catalyst3850 / 9000 の QoS を設定・検証する際に、注意するべき点をまとめます。

対象

対象機器

UADP ASIC を搭載した Cisco Catalyst スイッチが、このドキュメントの対象です。

  • Catalyst 3650 / 3850
  • Catalyst 9200 / 9300 / 9400 Sup-1,2 / 9500 / 9500 High Performance / 9600 Sup-1

9500X , 9600X は Silicon One ASIC 搭載のため、非対象です。

有線 LAN の QoS を対象とし、無線 LAN QoS は扱いません。

  • Catalyst 3850 では無線 LAN の AP をコントロールする機能があり、無線 LAN QoS の設定も存在する

対象機能

信頼・分類・マーキング・入力キュー・出力キューをメインに扱います。

まずは上記を扱えれば、他の機能は応用で扱えるようになるでしょう。

注意点

QoS は動作検証で意図した結果を得られたものが正しいコンフィグです。

検証で確認されていないコンフィグは、すべてゴミです。

  • 思ったとおりには動作しません 設定したとおりに動作します
  • 設定内容が正しいことを証明できる、テストケース作成の重要度が高いです

トラブル時のエスカレーションも、検証結果を元に行います。

UADP ASIC QoS の全体像

QoS は非常に機能が多く、どの機能を設定しているのか分からなくなるケースがあります。

以下の全体像を頭に入れて、自分がどの部分を設計・コンフィグ・検証しているのか、把握しながら進めましょう。

 
UADP ASIC QoS Overview

デフォルト 出力キュー設定

QoS を設定していないポートの場合、入力されたパケットの CoS / ToS / DSCP が信頼され、出力ポートのキューは以下で動作します。

 
3850 9000 QoS default traffic mapping

2P6Q3T 出力キュー設定

3850 / 9000 スイッチはキューの数を可変で設定できます。

キューの数を最大限設定した場合、入力されたパケットに対し、以下の通り出力キューへ割り当てられます。

  • 信頼するか手動で分類するかは設定が可能なため、下記は信頼した場合の割当になります
 
3850 9000 QoS 2P6Q3T

QoS の設計

お客様のネットワークで使用されるプロトコル・Vlan・IP セグメントを分類し、ビジネス要件を満たす適切なポリシーを策定します。

一般的に以下のような方針でポリシーを定義しますが、お客様で使用されているトラフィックを調査してアレンジします。

  • 音声 : IP 電話の遅延をなくすため、絶対優先を行う 帯域幅を埋め尽くさないようにポリシングを行う
  • 映像 : 音声の次に優先する 帯域幅を埋め尽くさないようにポリシングを行う
  • 管理 : ルーティング プロトコルなど、ネットワークの維持に使用する
  • その他 : インターネット アクセスなど、OA 系のトラフィックを割り当てる バッファリングを多く割り当ててドロップが起きにくくする

トラフィックの種類に対して CoS / ToS / DSCP を割当

RFC で定義されているため、好き勝手に割り当てるのは非推奨です。

だめな例としては、「優先度が高いからと考えてしまい、音声に ToS=6 や 7 を割り当ててしまう」といった例があります。

これはデフォルトで割り当てられている優先度を無視してしまい、一貫性がなくなってしまいます。

  • ToS=6 はインターネット、ToS=7 はネットワーク用の用途向けとなっており、絶対優先されません
  • デフォルト設定でルーティング プロトコルである OSPF Hello は、ToS=6 を使用して送信している

以下を参考に割り当てましょう。

入力機能

信頼

Catalyst 3850 / 9000 では trust dscp がデフォルト設定になっており、IP ヘッダの Differentiated Services フィールドの値をパケットの差別化に使用します。

ポートの設定がレイヤ 2 や 3 か、着信したパケットの種類によって、信頼するフィールドが CoS / ToS / DSCP なのか異なります。

詳細は 有線ポートの信頼動作 を参照してください。

クラシフィケーション (分類)

IP ACL や MAC ACL などを用いて、パケットを識別する機能です。

ポリシング

入力機能で帯域幅を制限するには、ポリシングを使用します。

バッファを使用しないため、以下のトラフィックに向いています。

  • VoIP
  • PQ

ブラウジングなど、バースト トラフィックがあったり、TCP 再送でレートが落ちるトラフィックに設定するべきではありません。

マーキング

CoS / ToS / DSCP / MPLS EXP フィールドに値をセットしたり、テーブル マップを使用して CoS の値を ToS に反映したりする機能です。

出力機能

スケジューリング

スケジューリング自体は、WRR によって優先度に応じて自動的に行われます。

基本的に CoS / ToS / MPLS EXP の値が高いものが (基本的には) 高優先度となり送信され、低優先度のフレーム・パケットはドロップされやすいです。

ユーザはキューの種類や内容を設定し、意図するキューへトラフィックの割り当てを行います。

  • PQ : 優先キュー
  • Q : 通常キュー
  • T : Threshold の略で、しきい値

class を設定した数が、合計のキューの数になります。

プライオリティ キュー (PQ)

Catalyst 3850 / 9000 では、2 つのキューをプライオリティ (優先) キューとして設定できます。

優先キューは他のパケットを無視して絶対優先で送信するため、遅延が小さいことが求められる音声やビデオのパケットに使用されます。

絶対優先が帯域幅を埋め尽くさないように、ポリシングやキュー制限とセットで設定するのが推奨されます。

クラシフィケーション (分類)

入力側と同じように、出力側でもパケットを識別します。入力側と異なり、ACL は使用できません。

通常出力側では入力側で信頼 or セットした、CoS / ToS / DSCP / MPLS EXP フィールドを使って分類します。

ポリシング

出力側でも使用可能です。

シェーピング

設定したレートに収まるように、指定した帯域幅にキュー全体の帯域幅を制限します。

ポリシングと異なる点は、バッファリングするために若干の遅延があるものの、TCP 再送が起きにくくなるため、バースト トラフィックをドロップしにくくなる利点があります。

詳細は 表 4. ポリシングとシェーピングの機能の比較 を参照してください。

CoS / ToS / DSCP / MPLS EXP フィールドの値を元にドロップが判定されるため、通常トラフィックで使用される 0 は非常にドロップしやすい点に注意が必要です。

キュー制限

ウェイテッド テール ドロップ (WTD) を使用して、指定した帯域幅にキュー内の帯域幅を制限できます。

CoS / ToS / DSCP / MPLS EXP の値に応じてドロップされる量が、しきい値ごとに異なるよう に制御します。

ここまで細分化して制御する要件は少ないため、あまり使われていません。

構成

Cat3850-1
Gi1/0/1
   |
   |
   |
Gi1/0/24
Cat3850-2 (DUT)
Gi1/0/1
   |
   |
   |
Gi1/0/24
Cat3850-3

サンプル要件

QoS を設計・検証・設定するには、設定対象のネットワークの使用状況を元にした要件定義が必要です。

ここでは QoS で差別化するトラフィックを 4 種類に分類し、以下の通り定義します。

通常ユーザ : NET

  • 帯域幅を最大に確保
  • 優先度は最低とする
  • TCP 再送が起きにくくする
    • バッファリングを行う
    • バッファ割当量を増やす
  • IP セグメントは 10.0.0.0/8 を持つ

管理トラフィック : MGMT

  • ルーティング プロトコルや、プロビジョニング用プロトコルの DHCP と ARP を優先する
  • Internetwork Control として、NET よりも優先して転送させる
  • NET でパケットが埋まっていても、優先して処理されパケットドロップが起きないこと

音声トラフィック : VoIP

  • 音声を 150ms - 400ms 以内の遅延で転送するため、絶対優先させる
    • プライマリ電話 [1] : 150ms
    • セカンダリ電話 [2] : 400ms
  • 他の ToS / DSCP で帯域幅が埋まっていても、パケットドロップが起きないこと
  • IP セグメントは 192.168.0.0/16 を持つ

その他 : class-default

  • その他の ToS / DSCP を転送する
  • アプリケーションのデフォルトで ToS=1-4 などが付与されている場合に使用する

サンプル コンフィグ

入力マーキング

!!! Cat3850-2 Ingress Marking !!!
configure terminal
!
ip access-list extended ACL_NET
 permit ip 10.0.0.0 0.255.255.255 any
!
ip access-list extended ACL_MGMT
 10 permit udp any eq bootpc any
 20 permit udp any eq bootps any
 30 permit udp any any eq bootpc
 40 permit udp any any eq bootps
 50 permit ospf any any
 60 permit ip 172.16.0.0 0.0.0.255 any
!
mac access-list extended ACL_L2MGMT
 permit any any 0x806 0x0
!
ip access-list extended ACL_VoIP
 permit ip 192.168.0.0 0.0.255.255 any
!
class-map match-any CM_NET_MARKING
 match access-group name ACL_NET
!
class-map match-any CM_MGMT_MARKING
 match access-group name ACL_MGMT
 match access-group name ACL_L2MGMT
!
class-map match-any CM_VoIP_MARKING
 match access-group name ACL_VoIP
!
policy-map PM_MARKING
 class CM_VoIP_MARKING
  set dscp 46
 class CM_MGMT_MARKING
  set precedence 6
 class CM_NET_MARKING
  set precedence 0
!
interface GigabitEthernet1/0/1
 service-policy input PM_MARKING
!
end

ARP

ARP は L2 フレームで IP ヘッダが存在しないため、MAC ACL で定義する必要があります。

OSPF

Cisco IOS ではデフォルトで OSPF に ToS がついているため、trust ポートであれば上記のように手動でマーキングする必要はありません。

出力キューイング

入力側でパケットにマーキングしたので、出力側で match させて優先度や帯域幅をコントロールします。

!!! Cat3850-2 !!!
configure terminal
!
class-map match-any CM_NET_QUEUEING
 match precedence 0
!
class-map match-any CM_MGMT_QUEUEING
 match precedence 6
!
class-map match-any CM_VoIP_QUEUEING
 match dscp 46
!
policy-map PM_QUEUEING
 class CM_VoIP_QUEUEING
  priority level 1
  queue-buffers ratio 2
 class CM_MGMT_QUEUEING
  shape average percent 1
  queue-buffers ratio 1
 class CM_NET_QUEUEING
  shape average percent 9
  queue-buffers ratio 92
 class class-default
  shape average percent 5
  queue-buffers ratio 5
!
interface GigabitEthernet1/0/19
 service-policy output PM_QUEUEING
!
end

確認コマンド (IOS-XE 16.x-)

IOS-XE 15.x など古い Version の場合、fed switch や active の指定が要らない場合があります。

show platform hardware fed switch <active|standby|switch_num> qos queue config interface <int_num>

バッファ量や優先度などが確認できるコマンド。

qos queue-softmax-multiplier や queue-buffers ratio を変更した際に、差分を確認すると良いです。

show platform hardware fed switch active qos queue config interface Gi1/0/1

Asic:0 Core:0 DATA Port:5 GPN:1 LinkSpeed:0x1
AFD:Disabled FlatAFD:Disabled QoSMap:0 HW Queues: 40 - 47
  DrainFast:Disabled PortSoftStart:2 - 1080
   DTS  Hardmax  Softmax   PortSMin  GlblSMin  PortStEnd
  ----- --------  --------  --------  --------  ---------
 0   1  6   120   3   480   7   320   0     0   3  1440
 1   1  5     0   7   720   4   480   2   180   3  1440
 2   1  5     0   6     0   6     0   0     0   3  1440
 3   1  5     0   6     0   6     0   0     0   3  1440
 4   1  5     0   6     0   6     0   0     0   3  1440
 5   1  5     0   6     0   6     0   0     0   3  1440
 6   1  5     0   6     0   6     0   0     0   3  1440
 7   1  5     0   6     0   6     0   0     0   3  1440
 Priority   Shaped/shared   weight  shaping_step  sharpedWeight
 --------   -------------   ------  ------------   -------------
 0      0     Shared            50           0           0
 1      0     Shared            75           0           0
 2      0     Shared         10000           0           0
 3      0     Shared         10000           0           0
 4      0     Shared         10000           0           0
 5      0     Shared         10000           0           0
 6      0     Shared         10000           0           0
 7      0     Shared         10000           0           0
 Port       Port            Port    Port
 Priority   Shaped/shared   weight  shaping_step
 --------   -------------   ------  ------------
        2     Shaped           254         255

   Weight0 Max_Th0 Min_Th0 Weigth1 Max_Th1 Min_Th1  Weight2 Max_Th2 Min_Th2
   ------- ------- ------- ------- ------- -------  ------- ------- ------
 0       0     478       0       0     534       0       0     600       0
 1       0     573       0       0     641       0       0     720       0
 2       0       0       0       0       0       0       0       0       0
 3       0       0       0       0       0       0       0       0       0
 4       0       0       0       0       0       0       0       0       0
 5       0       0       0       0       0       0       0       0       0
 6       0       0       0       0       0       0       0       0       0
 7       0       0       0       0       0       0       0       0       0

show platform hardware fed switch <active|standby|switch_num> qos queue stats interface <int_num>

キューレベルでパケットを送信した数とドロップ数を確認できるコマンド。

この出力例では、qos queue-stats-frame-count でバイト数からフレーム数へ変更してあります。

#show platform hardware fed switch active qos queue stats interface Gi1/0/1

----------------------------------------------------------------------------------------------
AQM Global counters
GlobalHardLimit:  5773   |   GlobalHardBufCount: 0
GlobalSoftLimit:  7539   |   GlobalSoftBufCount: 0

----------------------------------------------------------------------------------------------
Asic:0 Core:0  Port:5 Hardware Enqueue Counters
----------------------------------------------------------------------------------------------
 Q Buffers          Enqueue-TH0          Enqueue-TH1          Enqueue-TH2             Qpolicer
   (Count)             (Frames)             (Frames)             (Frames)             (Frames)
-- ------- -------------------- -------------------- -------------------- --------------------
 0       0                    0                    0                    0                    0
 1       0                    0                    0                    0                    0
 2       0                    0                    0                    0                    0
 3       0                    0                    0                    0                    0
 4       0                    0                    0                    0                    0
 5       0                    0                    0                    0                    0
 6       0                    0                    0                    0                    0
 7       0                    0                    0                    0                    0
Asic:0 Core:0  Port:5 Hardware Drop Counters
--------------------------------------------------------------------------------------------------------------------------------
 Q             Drop-TH0             Drop-TH1             Drop-TH2             SBufDrop              QebDrop         QpolicerDrop
               (Frames)             (Frames)             (Frames)             (Frames)             (Frames)             (Frames)
-- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
 0                    0                    0                    0                    0                    0                    0
 1                    0                    0                    0                    0                    0                    0
 2                    0                    0                    0                    0                    0                    0
 3                    0                    0                    0                    0                    0                    0
 4                    0                    0                    0                    0                    0                    0
 5                    0                    0                    0                    0                    0                    0
 6                    0                    0                    0                    0                    0                    0
 7                    0                    0                    0                    0                    0                    0

show platform hardware fed switch active qos queue dscp-cos interface <int_num>

インターフェースの DSCP-CoS ごとのカウンタを表示できるコマンド。

# show platform hardware fed switch active qos dscp-cos counters interface Gi1/0/1

Ingress DSCP0 0             0
Ingress DSCP1 0             0
Ingress DSCP2 0             0
Ingress DSCP3 0             0
Ingress DSCP4 0             0
Ingress DSCP5 0             0
Ingress DSCP6 0             0
Ingress DSCP7 0             0
Ingress DSCP8 0             0
Ingress DSCP9 0             0
Ingress DSCP10 0             0
Ingress DSCP11 0             0
Ingress DSCP12 0             0
Ingress DSCP13 0             0
Ingress DSCP14 0             0
Ingress DSCP15 0             0
Ingress DSCP16 0             0
Ingress DSCP17 0             0
Ingress DSCP18 0             0
Ingress DSCP19 0             0
Ingress DSCP20 0             0
Ingress DSCP21 0             0
Ingress DSCP22 0             0
Ingress DSCP23 0             0
Ingress DSCP24 0             0
Ingress DSCP25 0             0
Ingress DSCP26 0             0
Ingress DSCP27 0             0
Ingress DSCP28 0             0
Ingress DSCP29 0             0
Ingress DSCP30 0             0
Ingress DSCP31 0             0
Ingress DSCP32 0             0
Ingress DSCP33 0             0
Ingress DSCP34 0             0
Ingress DSCP35 0             0
Ingress DSCP36 0             0
Ingress DSCP37 0             0
Ingress DSCP38 0             0
Ingress DSCP39 0             0
Ingress DSCP40 0             0
Ingress DSCP41 0             0
Ingress DSCP42 0             0
Ingress DSCP43 0             0
Ingress DSCP44 0             0
Ingress DSCP45 0             0
Ingress DSCP46 0             0
Ingress DSCP47 0             0
Ingress DSCP48 0             0
Ingress DSCP49 0             0
Ingress DSCP50 0             0
Ingress DSCP51 0             0
Ingress DSCP52 0             0
Ingress DSCP53 0             0
Ingress DSCP54 0             0
Ingress DSCP55 0             0
Ingress DSCP56 0             0
Ingress DSCP57 0             0
Ingress DSCP58 0             0
Ingress DSCP59 0             0
Ingress DSCP60 0             0
Ingress DSCP61 0             0
Ingress DSCP62 0             0
Ingress DSCP63 0             0
Ingress COS0 0             0
Ingress COS1 0             0
Ingress COS2 0             0
Ingress COS3 0             0
Ingress COS4 0             0
Ingress COS5 0             0
Ingress COS6 0             0
Ingress COS7 0             0
Egress DSCP0 0             0
Egress DSCP1 0             0
Egress DSCP2 0             0
Egress DSCP3 0             0
Egress DSCP4 0             0
Egress DSCP5 0             0
Egress DSCP6 0             0
Egress DSCP7 0             0
Egress DSCP8 0             0
Egress DSCP9 0             0
Egress DSCP10 0             0
Egress DSCP11 0             0
Egress DSCP12 0             0
Egress DSCP13 0             0
Egress DSCP14 0             0
Egress DSCP15 0             0
Egress DSCP16 0             0
Egress DSCP17 0             0
Egress DSCP18 0             0
Egress DSCP19 0             0
Egress DSCP20 0             0
Egress DSCP21 0             0
Egress DSCP22 0             0
Egress DSCP23 0             0
Egress DSCP24 0             0
Egress DSCP25 0             0
Egress DSCP26 0             0
Egress DSCP27 0             0
Egress DSCP28 0             0
Egress DSCP29 0             0
Egress DSCP30 0             0
Egress DSCP31 0             0
Egress DSCP32 0             0
Egress DSCP33 0             0
Egress DSCP34 0             0
Egress DSCP35 0             0
Egress DSCP36 0             0
Egress DSCP37 0             0
Egress DSCP38 0             0
Egress DSCP39 0             0
Egress DSCP40 0             0
Egress DSCP41 0             0
Egress DSCP42 0             0
Egress DSCP43 0             0
Egress DSCP44 0             0
Egress DSCP45 0             0
Egress DSCP46 0             0
Egress DSCP47 0             0
Egress DSCP48 0             0
Egress DSCP49 0             0
Egress DSCP50 0             0
Egress DSCP51 0             0
Egress DSCP52 0             0
Egress DSCP53 0             0
Egress DSCP54 0             0
Egress DSCP55 0             0
Egress DSCP56 0             0
Egress DSCP57 0             0
Egress DSCP58 0             0
Egress DSCP59 0             0
Egress DSCP60 0             0
Egress DSCP61 0             0
Egress DSCP62 0             0
Egress DSCP63 0             0
Egress COS0 0                         0
Egress COS1 0                         0
Egress COS2 0                         0
Egress COS3 0                         0
Egress COS4 0                         0
Egress COS5 0                         0
Egress COS6 0                         0
Egress COS7 0                         0

show policy-map interface <int_num>

キューの設定とカウンターが確認できます。ただし、カウンターは一部動作しません。

#show policy-map int Gi1/0/19

 GigabitEthernet1/0/19

  Service-policy output: PM_QUEUEING

    queue stats for all priority classes:
      Queueing
      priority level 1

      (total drops) 0
      (pkts output) 0

    Class-map: CM_VoIP_QUEUEING (match-any)
      0 packets
      Match:  dscp ef (46)
      Priority: Strict,

      Priority Level: 1
      queue-buffers ratio 2

    Class-map: CM_MGMT_QUEUEING (match-any)
      0 packets
      Match:  precedence 6
      Queueing

      (total drops) 0
      (pkts output) 0
      shape (average) cir 10000000, bc 100000, be 100000
      target shape rate 10000000
      queue-buffers ratio 1

    Class-map: CM_NET_QUEUEING (match-any)
      0 packets
      Match:  precedence 0
      Queueing

      (total drops) 0
      (pkts output) 0
      shape (average) cir 920000000, bc 9200000, be 9200000
      target shape rate 920000000
      queue-buffers ratio 92

    Class-map: class-default (match-any)
      0 packets
      Match: any
      Queueing

      (total drops) 0
      (pkts output) 0
      shape (average) cir 50000000, bc 500000, be 500000
      target shape rate 50000000
      queue-buffers ratio 5

カウンタのクリア

Gi1/0/1 を例にしたコマンドです。

clear platform hardware fed switch active qos statistics interface Gi1/0/1

show platform で取得できる、QoS のカウンタをクリアする。

clear platform hardware fed switch active qos dscp-cos counters interface Gi1/0/1

show platform で取得できる、QoS の DSCP-CoS のカウンタをクリアする。

clear counters Gi1/0/1

show interfaces で取得できる、インターフェースのカウンタをクリアする。

キューの動作確認例

トラフィックの印加前後で、キューのフレーム カウンタの差分を取りましょう。

以下の例では、4 つのキューの内 1 つのキューを確認します。

構成

l3sw91
  |Gi1/0/19 Vlan10 10.0.0.91
  |
  |Gi1/0/19
l3sw92      Vlan10 10.0.0.92
  |Gi1/0/1
  |
  |Gi1/0/23 Vlan10 10.0.0.93
l3sw93

トラフィック

l3sw93 から l3sw91 へ ping 100 発を送信し、l3sw92 で QoS の動作確認を行う。

ping 10.0.0.91 repeat 100

Modular QoS CLI とは ?

3850 / 9000 では、MQC (Modular QoS CLI) を使用して設定します。2960 / 3750 / 6500 の MLS QoS は使用できません。

クラスマップ・ポリシーマップ・インターフェースに適用、という順に構造化して設定する仕組みのこと。

複数のインターフェースに対して共通化したクラスマップ・ポリシーマップを設定することで、コンフィグが簡素化できるメリットがあります。

設定

基本設定 入力 QoS 設定 (NET のみ) 出力 QoS 設定 (NET のみ)
l3sw91 l3sw91#show run | s net1/0/19$|Vlan10|vlan 10

vlan 10

name NET


interface GigabitEthernet1/0/19

description tky-l3sw92_Gi1/0/19

switchport trunk allowed vlan 10,20,30

switchport mode trunk

switchport nonegotiate

load-interval 30

no cdp enable

no keepalive

no lldp transmit

no lldp receive


interface Vlan10

description NET

ip address 10.0.0.91 255.255.255.0

l3sw91 が持つ 10.0.0.91 を ping 宛先とする
l3sw92

(DUT)

l3sw92#show run | s qos|vlan 10|Vlan10|net1/0/1$|net1/0/19$

qos queue-stats-frame-count


vlan 10

name NET


interface GigabitEthernet1/0/1

description tky-l3sw93_Gi1/0/23

switchport trunk allowed vlan 10,20,30

switchport mode trunk

switchport nonegotiate

load-interval 30

no cdp enable

no keepalive

no lldp transmit

no lldp receive

service-policy input PM_MARKING


interface GigabitEthernet1/0/19

description tky-l3sw91_Gi1/0/19

switchport trunk allowed vlan 10,20,30

switchport mode trunk

switchport nonegotiate

load-interval 30

no cdp enable

no keepalive

no lldp transmit

no lldp receive

service-policy output PM_QUEUEING


interface Vlan10

description NET

ip address 10.0.0.92 255.255.255.0

ip access-list extended ACL_NET

10 permit ip 10.0.0.0 0.255.255.255 any


class-map match-any CM_NET_MARKING

match access-group name ACL_NET


policy-map PM_MARKING

class CM_NET_MARKING

  set precedence 0

class CM_MGMT_MARKING

  set precedence 6

class CM_VoIP_MARKING

  set dscp ef


interface GigabitEthernet1/0/1

description tky-l3sw93_Gi1/0/23

switchport trunk allowed vlan 10,20,30

switchport mode trunk

switchport nonegotiate

load-interval 30

no cdp enable

no keepalive

no lldp transmit

no lldp receive

service-policy input PM_MARKING

class-map match-any CM_NET_QUEUEING

match precedence 0


policy-map PM_QUEUEING

class CM_VoIP_QUEUEING

  priority level 1

  queue-buffers ratio 2

class CM_MGMT_QUEUEING

  shape average percent 1

  queue-buffers ratio 1

class CM_NET_QUEUEING

  shape average percent 92

  queue-buffers ratio 92

class class-default

  shape average percent 5

  queue-buffers ratio 5


interface GigabitEthernet1/0/19

description tky-l3sw91_Gi1/0/19

switchport trunk allowed vlan 10,20,30

switchport mode trunk

switchport nonegotiate

load-interval 30

no cdp enable

no keepalive

no lldp transmit

no lldp receive

service-policy output PM_QUEUEING

QoS 設定を行う機器

この例では

  • 入力 QoS : Gi1/0/1 で受信し ToS=0 へマーキング
    • フレームを受信する Gi1/0/1 に適用した、入力ポリシーマップが呼び出される
    • ポリシーマップからクラスマップを呼び出し
    • クラスマップから ACL を呼び出し
    • クラスマップの ACL_NET にマッチ
    • ACL_NET の 10.0.0.0/24 に該当
    • ポリシーマップで DSCP0 にマーキング
  • 出力 QoS : ToS=0 を Gi1/0/19 のキュー 2 から送信
    • フレームを送信する Gi1/0/19 に適用した、出力ポリシーマップが呼び出される
    • ポリシーマップからクラスマップを呼び出し
    • クラスマップの DSCP=0 にマッチ
    • ポリシーマップで以下のキューイングを行う
      • 92% シェーピング
      • ポートの 92% バッファを割り当て

する設定にしている


3850 / 9000 では、class-map を設定した順に、

キュー 0-7 までが可変で割り当てられる


この例では VoIP , MGMT , NET , class-default で 4 つのキューを設定している

l3sw93 l3sw93#show run | s net1/0/23$|Vlan10|vlan 10

vlan 10

name NET


interface GigabitEthernet1/0/23

description tky-l3sw92_Gi1/0/1

switchport trunk allowed vlan 10,20,30

switchport mode trunk

switchport nonegotiate

load-interval 30

no cdp enable

no keepalive

no lldp transmit

no lldp receive


interface Vlan10

description NET

ip address 10.0.0.93 255.255.255.0

l3sw93 から l3sw91 の 10.0.0.91 へ ping する

キューカウンター確認

ping を 100 発打った後、NET に割り当てたキュー 2 でカウントが 100 増加していることがわかります。

事前 ping・事後
l3sw93 - l3sw93#ping 10.0.0.91 repeat 100

Type escape sequence to abort.

Sending 100, 100-byte ICMP Echos to 10.0.0.91, timeout is 2 seconds:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Success rate is 100 percent (100/100), round-trip min/avg/max = 2/2/3 ms

l3sw92 l3sw92#show platform hardware fed switch active qos queue stats interface Gi1/0/19

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

AQM Global counters

GlobalHardLimit:  5773   |   GlobalHardBufCount: 0

GlobalSoftLimit:  7539   |   GlobalSoftBufCount: 0

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

Asic:0 Core:0  Port:23 Hardware Enqueue Counters

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

Q Buffers          Enqueue-TH0          Enqueue-TH1          Enqueue-TH2             Qpolicer

   (Count)             (Frames)             (Frames)             (Frames)             (Frames)

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

0       0                    0                    0                    0                    0

1       0                    0                    0                    0                    0

2       0                    0                    0                    0                    0

3       0                    0                    0                    0                    0

4       0                    0                    0                    0                    0

5       0                    0                    0                    0                    0

6       0                    0                    0                    0                    0

7       0                    0                    0                    0                    0

Asic:0 Core:0  Port:23 Hardware Drop Counters

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

Q             Drop-TH0             Drop-TH1             Drop-TH2             SBufDrop              QebDrop         QpolicerDrop

               (Frames)             (Frames)             (Frames)             (Frames)             (Frames)             (Frames)

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

0                    0                    0                    0                    0                    0                    0

1                    0                    0                    0                    0                    0                    0

2                    0                    0                    0                    0                    0                    0

3                    0                    0                    0                    0                    0                    0

4                    0                    0                    0                    0                    0                    0

5                    0                    0                    0                    0                    0                    0

6                    0                    0                    0                    0                    0                    0

7                    0                    0                    0                    0                    0                    0


l3sw92#show policy-map int Gi1/0/19

GigabitEthernet1/0/19

  Service-policy output: PM_QUEUEING

    queue stats for all priority classes:

      Queueing

      priority level 1

      (total drops) 0

      (pkts output) 0

    Class-map: CM_VoIP_QUEUEING (match-any)

      0 packets

      Match:  dscp ef (46)

      Priority: Strict,

      Priority Level: 1

      queue-buffers ratio 2

    Class-map: CM_MGMT_QUEUEING (match-any)

      0 packets

      Match:  precedence 6

      Queueing

      (total drops) 0

      (pkts output) 1

      shape (average) cir 10000000, bc 100000, be 100000

      target shape rate 10000000

      queue-buffers ratio 1

    Class-map: CM_NET_QUEUEING (match-any)

      0 packets

      Match:  precedence 0

      Queueing

      (total drops) 0

      (pkts output) 0

      shape (average) cir 920000000, bc 9200000, be 9200000

      target shape rate 920000000

      queue-buffers ratio 92

    Class-map: class-default (match-any)

      0 packets

      Match: any

      Queueing

      (total drops) 0

      (pkts output) 0

      shape (average) cir 50000000, bc 500000, be 500000

      target shape rate 50000000

      queue-buffers ratio 5


l3sw92#show platform hardware fed switch active qos dscp-cos counters interface Gi1/0/1 | in DSCP0

Ingress DSCP0 0             0

Egress DSCP0 0             0


l3sw92#show platform hardware fed switch active qos dscp-cos counters interface Gi1/0/19 | in DSCP0

Ingress DSCP0 0             0

Egress DSCP0 0             0

l3sw92#show platform hardware fed switch active qos queue stats interface Gi1/0/19

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

AQM Global counters

GlobalHardLimit:  5773   |   GlobalHardBufCount: 0

GlobalSoftLimit:  7539   |   GlobalSoftBufCount: 0

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

Asic:0 Core:0  Port:23 Hardware Enqueue Counters

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

Q Buffers          Enqueue-TH0          Enqueue-TH1          Enqueue-TH2             Qpolicer

   (Count)             (Frames)             (Frames)             (Frames)             (Frames)

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

0       0                    0                    0                    0                    0

1       0                    0                    0                    0                    0

2       0                    0                    0                  100                    0

3       0                    0                    0                    0                    0

4       0                    0                    0                    0                    0

5       0                    0                    0                    0                    0

6       0                    0                    0                    0                    0

7       0                    0                    0                    0                    0

Asic:0 Core:0  Port:23 Hardware Drop Counters

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

Q             Drop-TH0             Drop-TH1             Drop-TH2             SBufDrop              QebDrop         QpolicerDrop

               (Frames)             (Frames)             (Frames)             (Frames)             (Frames)             (Frames)

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

0                    0                    0                    0                    0                    0                    0

1                    0                    0                    0                    0                    0                    0

2                    0                    0                    0                    0                    0                    0

3                    0                    0                    0                    0                    0                    0

4                    0                    0                    0                    0                    0                    0

5                    0                    0                    0                    0                    0                    0

6                    0                    0                    0                    0                    0                    0

7                    0                    0                    0                    0                    0                    0


l3sw92#show policy-map int Gi1/0/19

GigabitEthernet1/0/19

  Service-policy output: PM_QUEUEING

    queue stats for all priority classes:

      Queueing

      priority level 1

      (total drops) 0

      (pkts output) 0

    Class-map: CM_VoIP_QUEUEING (match-any)

      0 packets

      Match:  dscp ef (46)

      Priority: Strict,

      Priority Level: 1

      queue-buffers ratio 2

    Class-map: CM_MGMT_QUEUEING (match-any)

      0 packets

      Match:  precedence 6

      Queueing

      (total drops) 0

      (pkts output) 1

      shape (average) cir 10000000, bc 100000, be 100000

      target shape rate 10000000

      queue-buffers ratio 1

    Class-map: CM_NET_QUEUEING (match-any)

      0 packets

      Match:  precedence 0

      Queueing

      (total drops) 0

      (pkts output) 100

      shape (average) cir 920000000, bc 9200000, be 9200000

      target shape rate 920000000

      queue-buffers ratio 92

    Class-map: class-default (match-any)

      0 packets

      Match: any

      Queueing

      (total drops) 0

      (pkts output) 0

      shape (average) cir 50000000, bc 500000, be 500000

      target shape rate 50000000

      queue-buffers ratio 5


l3sw92#show platform hardware fed switch active qos dscp-cos counters interface Gi1/0/1 | in DSCP0

Ingress DSCP0 100           0

Egress DSCP0 100           0


l3sw92#show platform hardware fed switch active qos dscp-cos counters interface Gi1/0/19 | in DSCP0

Ingress DSCP0 100           0

Egress DSCP0 100           0

トラフィック生成

色々な機器やアプリケーションが存在しますが、おすすめは以下です。

トラフィックジェネレータ

IXIA

  • IxNetwork だと尚良し、4 ポートはほしい
    • 例) DSCP=0 でワイヤレートを通常キューに双方向印加中に、DSCP=46 で PQ に双方向印加した時、DSCP=46 でドロップ無し・DSCP=0 でドロップが発生するか
  • 保守で校正を行っている場合は精度が高く、ドロップ数を厳密に確認できる
  • メーカーにエスカレーションする場合、IXIA じゃないと受け付けてくれません

Cisco Trex

  • 負荷を印加する分には困らない
  • 安定性やショートパケット時の送信間隔の精度などはいまいちと考えられる

iperf

  • PC が 2 台あればとりあえず動かせる気軽さが良き

ping 系

Cisco IOS / IOS-XE

  • ping でもそれなりの pps が出る
  • ToS を指定して連続実施できるのが良い

TIPS

不要なフレーム・プロトコルを止める

カウンタを取得する際、余計なプロトコルが動いていると、QoS の計測用に印加したトラフィックと混ざってカウントされてしまいます。

以下のプロトコルは止めて試験したほうが良いケースがあります。

  • Loopback フレーム : no keepalive
  • DTP フレーム : switchport nonegotiate
  • CDP フレーム : no cdp enable
  • VTP フレーム : vtp mode transparent
  • LLDP フレーム : no lldp transmit , no lldp receive
  • STP BPDU フレーム : no spanning-tree vlan <Vlan-ID>

印加するトラフィックについて

以下のように実施すると、レートやドロップの割合が計算しやすくなるため、推奨します。

  1. カウンタをクリア
  2. カウンタの事前ログを取得
  3. トラフィックを 100 フレームなどキリが良い数字で印加
  4. カウンタの事後ログを取得

例えば 1000 バイト 1000 フレームを印加すると 1M バイトになります。

ビットで揃えたければ、125 バイト 1000 フレームを印加すれば 1M ビットになります。

1000 フレーム中 50 フレームがドロップした場合、

  • 50 ドロップ フレーム / 1000 送信フレーム * 100 = 5% のドロップ率

ということになり、ドロップ割合を計算しなくても見て判別が可能となります。

rate 値の算出間隔を変更

デフォルトでは 5 分あたりのトラフィック量が show interface の rate 値に反映されます。

load-interval を 300 秒 -> 30 秒に変更することで、リアルタイムに近い値を得られるようになります。

configure terminal
interface GigabitEthernet1/0/1
 load-interval 30
end

オーバーサブ (帯域超過) させるには

QoS を動作確認する場合、帯域超過させないと優先されるか確認できないケースが多いです。

この場合は帯域幅を減らして、トラフィックを印加しましょう。

  • LAG のメンバーを 2 -> 1 にする
  • 1000Mbps のポートにトラフィックを印加 -> 100Mbps のポートから出力させる

ラクなマーキング方法ってある ?

IP ACL よりも Vlan で match させるとラクな場合が多いです。

  • IP アドレスを変更しても QoS 用 ACL のメンテナンスが必要ない
  • Catalyst3850 から対応し、2960 / 3750 / 4500 / 6500 系は対応しません

拠点ごとに Vlan が共通化されている場合は、特に効果が高いです。

dot1q タグが付いていないフレームでも、マーキングの対象になります。

  • access ポートでも設定した Vlan に match できる

絶対優先キューはポリシングとセットで設定する

PQ は絶対優先されるため、L2 ループでトラフィックが溢れる、意図せず大量にパケットが流れる、といった事象が発生するとネットワークが完全に停止してしまいます。

使用する VoIP プロトコルの 1 ユーザあたりの帯域幅 x ユーザ数などからサイジングして、適切な帯域幅でポリシングを設定することを推奨します。

qos の統計情報がバイト単位で値がデカい + 他のプロダクトのフレーム/パケット単位と違っていて使いにくいんだけど・・・

IOS-XE 16.6.3 以降では、qos queue-stats-frame-count でフレーム単位に変更可能 [3] です。

すでに監視システムから値を取得している Catalyst に設定すると、今までと異なる挙動になり過去のグラフが読み取りづらくなったり、単位を書き換え忘れたりする可能性があることに注意が必要です。

ハマりポイント

QoS を商用環境に設定したら、ToS=0 のパケットドロップが多くなったんだけど ?

正常な動作です。QoS そのものはパケット ドロップを減らす機能ではありません。

むしろ優先度の低いパケットは積極的にドロップさせて、高いパケットをドロップさせないようにする、パケットを差別化する + 帯域幅を制御する技術です。

  • ToS=0 のパケットは、重みが低いため他の ToS を持つパケットの犠牲になります
  • ポートあたりのキューの数がデフォルトの 2 つよりも増えるため、キューあたりのパケットバッファも割当量が減少します

qos queue-softmax-multiplier や buffers-ratio コマンドでバッファ割り当てを増やすことで、ドロップを減らすことも可能です。

ただし、パケットがドロップしにくくなるため、WRED や WFQ などの Early Drop も発生しにくくなり、パケット差別化がしにくくなるトレードオフがあります。

  • CoS / ToS / DSCP の値が低いほど、ドロップ率が上昇するため、高優先度のトラフィックを保護しやすくなる

Catalyst3850 / 9000 に ToS=5 のトラフィックを転送しても、絶対優先されないぞ ? 3750 の頃はできたのに・・・

正常な動作です。3750 は ToS ベースなため ToS=5 = DSCP=40 が PQ に入りますが、3850 は DSCP ベースのため PQ に入りません

DSCP で音声として定義されているのは、DSCP = 46 の Expedited Forwarding です。

  • Catalyst3850 以降の UADP ASIC 搭載機では DSCP ベースで動作するため、DSCP=46(EF) が絶対優先されます。
    • EF = Expedited Forwarding

Windows の ping で ToS を指定しても反映されないんだけど・・・

仕様です。-v オプションは廃止されています。

  • Cisco IOS は指定できるので、ルータかスイッチを用意して ToS 指定 ping を打つのがおすすめです ただし hex で指定する必要があります

Windows ping

C:\Windows\System32>ping /?
<snip>
Options:
    -v TOS         Type Of Service (IPv4-only. This setting has been deprecated
                   and has no effect on the type of service field in the IP
                   Header).

deprecated とあり、廃止されています。

Cisco IOS ping

ping 1.1.1.1 tos ?
  <1-255>  Type of

ToS は Hex で指定する必要があります。例えば DSCP=46 なら 184 を指定します。

参考サイト : Howto:Calculate Values for Type of Service (ToS) from DiffServ or DSCP Values

優先キューのレベル 2 って使える ?

筆者は非推奨としています。検証した限りでは意図した通りに動きませんでした。

  • PQ1 ToS=5 と Q ToS=0 にワイヤレート、PQ2 にシェーピングレート以下で印加した場合、PQ2 でドロップが発生した
  • 期待する動作としては、PQ2 はドロップなし、Q ToS=0 でドロップが増加だった

CS4,5 / AF41-43 を PQ レベル 2 へ割り当てれば、まともに動くかもしれません。

VoIP ToS=5 を絶対優先キューに流しているときに、StackWise Virtual Link (SVL) を通るように Failover すると、絶対優先されません

仕様です。SVL のキュー設定は変更できないため、ToS=5 を優先キューに流せません。

StackWise Virtual を使用する場合は、通常ポートで DSCP=46 を PQ level 1 に流すことで、SVL と同様の設定になるようにします。

以下は Catalyst9000 シリーズの SVL キュー割当です。

参考資料

 
Catalyst 9000 SVL Queue

class-map で意図したとおりに match しないんだけど・・・

match-all を使用していませんか ? match-all は and 条件を意味するため、すべての条件に当てはまったときのみ、そのクラスが割り当てられます。

通常は match-any で or 条件とする場合が多いです。

PQ を設定したらラインレートが出なくなったんだけど・・・

仕様です。[4] 99.6% までに制限されます。

その他

Catalyst_9000_トラブルシューティング#QoS にもあります

バッファチューニング

今後加筆予定

バッファ チューニングの測定方法と増加量確認

オーバーサブスクリプション (帯域幅超過) されるトラフィックフローを作成・印加し、設定変更による追加でバッファリングされる量を測定しましょう。

Gi1/0/1       Gi1/0/24
->->->-> 3850 ->->->->
1000Mbps      100Mbps

例えば 1,000 バイト 1,000,000 フレームの合計 1GB をワイヤレートで印加し、ドロップされたフレーム数を確認します。

  • 1K バイト x 100 万フレーム = 1GB

バッファ チューニング前のドロップ数を基準値として、チューニング後に何フレームがドロップしなくなったか確認します。

1,000 フレーム ドロップ数が減少した場合、1K バイト x 1,000 フレーム = 1M バイトのバッファが追加されたことになります。

参考 URL

Cisco IOS XE Gibraltar 16.12.x(Catalyst 3850 スイッチ)Quality of Service(QoS)コンフィギュレーション ガイド

Cisco IOS XE Everest 16.8.x(Catalyst 3850 スイッチ)コマンド リファレンス

QoSの3750 MLSから3850 MQCへの変換の設定

Catalyst 9000 QoS 概要

Understand Queue Buffer Allocation on Catalyst 9000 Switches

Catalyst 9000スイッチのQoSハードウェアリソースについて

引用

  1. プライマリ電話 端末設備等相互間の平均遅延 ・150ミリ秒未満
  2. セカンダリ電話 ・400ミリ秒未満
  3. Catalyst 3650 / Catalyst 3850 / Catalyst 9000 :「qos queue-stats-frame-count」コマンドについて
  4. プライオリティ キュー プライオリティキューが設定されている場合は、100% のラインレートトラフィックを送信できません。プライオリティキューが設定されている場合、ラインレートトラフィックは 99.6% にしかならないため、遅延は 20 マイクロ秒未満になります。