2023-11-30 Catalyst3850 9000 スイッチ QoS 設計

提供: hkatou_Lab
ナビゲーションに移動 検索に移動

目的

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

注意点

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

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

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

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

UADP ASIC QoS の全体像

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

UADP ASIC QoS Overview
UADP ASIC QoS Overview

入力機能

信頼

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

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

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 !!!
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
!
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_NET_MARKING
  set precedence 0
 class CM_MGMT_MARKING
  set precedence 6
 class CM_VoIP_MARKING
  set dscp 46
!
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
  queue-buffers ratio 1
  shape average percent 1
  bandwidth remaining percent 1
 class CM_NET_QUEUEING
  queue-buffers ratio 92
  shape average percent 92
  bandwidth remaining percent 92
 class class-default
  queue-buffers ratio 5
  shape average percent 5
  bandwidth remaining percent 5
!
interface GigabitEthernet1/0/24
 service-policy output PM_QUEUEING
!
end

トラフィック生成

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

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

IXIA

  • IxNetwork だと尚良し、4 ポートはほしい
    • 例) DSCP=0 でワイヤレートを通常キューに双方向印加中に、DSCP=46 で PQ に双方向印加した時、DSCP=46 でドロップ無し・DSCP=0 でドロップが発生するか

Cisco Trex

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

iperf

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

ping 系

Cisco IOS / IOS-XE

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

TIPS

rate 値の算出間隔を変更

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

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

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

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

LAG のメンバーを 2 -> 1 にするなど、帯域幅を減らしてトラフィックを印加しましょう。

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

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

  • IP アドレスを変更しても QoS 用 ACL のメンテナンスが必要ない
  • Catalyst3850 から対応し、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 って使える ?

筆者が使う限り、意図した通り動きませんでした。筆者は非推奨としています。

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% までに制限されます。

出力 QoS を未設定のデフォルト キュー設定

キューは 2 つに設定されています。DSCP とキューの割当は以下になります。

Catalyst 9000 Default queue traffic mapping
Catalyst 9000 Default queue traffic mapping

バッファチューニング

今後加筆予定

参考 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 マイクロ秒未満になります。