メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. MPLS記事一覧/

MPLSのQoSの帯域制御とキューイング(policer / shaper / priority)

目次

MPLSのQoSの帯域制御とキューイング(policer / shaper / priority)

MPLS網で流量を抑える方法は2つあります。policerは超えた分をその場で捨て、shaperはいったん貯めて送り出す時間を延ばします。捨てるか遅らせるかの違いは、実際にパケットを流すと損失と遅延の差になって出ます。さらに、クラスごとにキューを分ければ、優先するトラフィックだけ遅延を小さく保てます。この記事ではIOS XRでの書き方を解説し、XRv9000のラボで損失と遅延を測ります。

ラベルのTCと出口PEの3モードはMPLSのQoS(TCとuniform / pipe / short-pipe)で解説しています。

policerとshaper

項目 policer shaper
超えた分 捨てる(またはマークを下げる) キューに貯めて後で送る
効き方 損失として出る 遅延として出る
IOS XRの書き方 police rate <値> shape average <値>
使える方向 入力・出力とも 出力のみ

policerはconform(範囲内)とexceed(超過)でカウンタが分かれ、超えた分は既定で捨てられます。shaperは超えた分をキューに入れるため、キューの深さを超えない限り捨てません。

クラスごとにキューを分ける

親でshapeして全体の上限を決め、子でクラスを分けると、限られた帯域の中での優先度を決められます。

コマンド 動作
priority level 1 他のクラスより先に送る(優先キュー)
police rate <値>(priorityと併用) 優先キューが帯域を占有しないよう上限を付ける
bandwidth remaining percent <割合> 優先キューが使った残りの配分

コア側の出力ではパケットにラベルが付いているので、クラス分けはmatch dscpではなくmatch mpls experimental topmostで行います。IPヘッダーはラベルの内側にあるためで、実際にコア側の出力でmatch dscpのクラスを作ったときは一致が0件でした。

検証構成

CE1 - PE1 - P1 - PE2 - CE2の5台で、コアはOSPF + LDP、PE間はiBGP vpnv4です。PE1 / P1 / PE2はXRv9000、CE1 / CE2はXRdを使います。

検証構成

負荷はCE1からCE2へのpingで、1パケット1400バイト、10ミリ秒間隔です。XRdを挟む区間では1500バイトを超えるパケットが通らないため、この大きさにしています。

検証の全体像

STEP 操作 確かめること
7 入口PEの入力にpolice rate 100 kbps 超過分が捨てられ、損失として出ること
8 コア側の出力に2段構成のshape average 200 kbps 捨てずに遅延が伸びること
9 shape + 子priority / bandwidth remaining 優先クラスだけ遅延が小さいこと
10 QoSの設定をすべて外す 元に戻ること

policerで捨てる(STEP 7)

PE1の顧客側の入力にpolice rate 100 kbpsを当て、1400バイトを500発流しました。334発が通り、166発が捨てられました

STEP 7 PE1 show policy-map interface GigabitEthernet0/0/0/0 input(抜粋)
Class class-default
  Classification statistics          (packets/bytes)     (rate - kbps)
    Matched             :                 500/709000               30
    Transmitted         : N/A 
    Total Dropped       :                 166/235388               10
    Policed(conform)    :                 334/473612               20
    Policed(exceed)     :                 166/235388               10

Matchedが500でconformが334、exceedが166です。pingの結果も334/500(66パーセント)で一致します。RTTは7/14/47ミリ秒で、通った分の遅延は増えていません。

shaperで遅らせる(STEP 8)

policerを外し、コア側の出力に2段構成のshape average 200 kbpsを当てました(親のclass-defaultで整形し、子はclass-defaultbandwidth remaining percent 100を置いた形です)。同じ負荷で500発すべてが通り、RTTの平均は56ミリ秒(設定前は13ミリ秒程度)です。

STEP 8 PE1 show policy-map interface GigabitEthernet0/0/0/1 output(抜粋)
Class class-default
  Classification statistics          (packets/bytes)     (rate - kbps)
    Matched             :                 500/713000               114
    Transmitted         :                 500/713000               114
    Total Dropped       :                   0/0                    0
  Policy PE1-CORE-SHAPE-CHILD Class class-default
    Classification statistics          (packets/bytes)     (rate - kbps)
      Matched             :                 500/713000               114
      Queue(conform)      :                 500/713000               114

Total Droppedは0で、Taildroppedも0でした。捨てずに送り切っています。policerが損失として現れるのに対し、shaperは遅延として現れます

クラスごとにキューを分ける(STEP 9)

コア側の出力を、親shape average 300 kbpsと子policyの組に替えました。子はTC 5をpriority level 1police rate 100 kbps、TC 4をbandwidth remaining percent 20、残りをclass-defaultにしています。CE1からDSCP 46(TC 5)、DSCP 34(TC 4)、DSCP 0の3種類を4秒ずらして各1000発流しました。

負荷 DSCP TC クラス 結果 RTT min/avg/max
ToS 184 46(EF) 5 priority 667/1000 6/9/75 ミリ秒
ToS 136 34(AF41) 4 bandwidth remaining 20% 1000/1000 7/70/167 ミリ秒
ToS 0 0 0 class-default 1000/1000 8/70/132 ミリ秒
STEP 9 PE1 show policy-map interface GigabitEthernet0/0/0/1 output(抜粋)
Class class-default
  Classification statistics          (packets/bytes)     (rate - kbps)
    Matched             :                3000/4278000              31
    Transmitted         :                2667/3803142              21
    Total Dropped       :                 333/474858               10
  Policy PE1-CORE-QUEUE-CHILD Class TC5
    Classification statistics          (packets/bytes)     (rate - kbps)
      Matched             :                1000/1426000              31
      Transmitted         :                 667/951142               21
      Policed(exceed)     :                 333/474858               10
  Policy PE1-CORE-QUEUE-CHILD Class TC4
    Classification statistics          (packets/bytes)     (rate - kbps)
      Matched             :                1000/1426000              0
      Transmitted         :                1000/1426000              0

優先キューに入れたクラスだけ、遅延が設定前と同じ水準に収まります。他の2クラスは親のshaperのキューで待たされ、平均70ミリ秒になりました。優先キューに付けたpolice rate 100 kbpsが超過分333発を捨てているため、EFは667/1000です。上限を付けないと、優先キューが帯域を占有して他のクラスが流れなくなります。

設計上の注意

  • コア側の出力でmatch dscpのクラスを作っても一致しませんでした(ラベルが付いているため)。TCで分けるか、入力でqos-groupに写して出力で使います
  • priorityのクラスには上限(police)を付けます。付けないと他のクラスが送れなくなります
  • policerは損失、shaperは遅延として出ます。遅延に敏感なトラフィックをshaperの後ろに置くと、損失が無くても品質が落ちます

検証Configおよびshow結果

各STEPで5台から、次の種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。カウンタはクリアしてからpingを流し、その後にshowを取っているので、各STEPの数値はそのSTEPだけの結果です。

ファイル 内容
..._clear.txt そのSTEPの採取前にクリアしたカウンタ(QoS、インタフェース、MPLS転送)
..._ping.txt クリアの後に流したping / traceroute
..._load_tos<値>.txt 負荷(1400バイト、10ミリ秒間隔)の結果
..._pmap-after.txt 負荷の後に取ったshow policy-map interface
..._show.txt show version / show interface / show policy-map interface / show mpls forwarding など
..._log.txt そのSTEPの範囲だけに絞ったshow logging。クリアの記録もSTEP<N>-CLEAR:として残っています
..._run.txt そのSTEP時点のshow running-config
..._commit.cfg そのSTEPで実際にcommitされた設定(変更したルータのみ)

STEP 7:入口PEの入力にpolicerを当てる

負荷はload、負荷後のカウンタはpmapです。

ルータ クリア ping show出力 syslog running-config 投入した設定
CE1 clear ping show log run
PE1 clear ping show log run commit
P1 clear show log run
PE2 clear ping show log run commit
CE2 clear ping show log run

STEP 8:コア側の出力に2段構成のshaperを当てる

負荷はload、負荷後のカウンタはpmapです。

ルータ クリア ping show出力 syslog running-config 投入した設定
CE1 clear ping show log run
PE1 clear ping show log run commit
P1 clear show log run
PE2 clear ping show log run
CE2 clear ping show log run

STEP 9:親shaperと子policyでクラスを分ける

負荷はEF / AF41 / ToS 0、負荷後のカウンタはpmapです。

ルータ クリア ping show出力 syslog running-config 投入した設定
CE1 clear ping show log run
PE1 clear ping show log run commit
P1 clear show log run
PE2 clear ping show log run
CE2 clear ping show log run

STEP 10:QoSの設定をすべて外す(最終状態)

ルータ クリア ping show出力 syslog running-config 投入した設定
CE1 clear ping show log run
PE1 clear ping show log run commit
P1 clear show log run
PE2 clear ping show log run
CE2 clear ping show log run

パケットキャプチャーはSTEPごとに4リンクで取得しています。

STEP CE1-PE1間 PE1-P1間 P1-PE2間 PE2-CE2間
7 pcap pcap pcap pcap
8 pcap pcap pcap pcap
9 pcap pcap pcap pcap
10 pcap pcap pcap pcap

参考

参考 内容
RFC 3270 MPLS Support of Differentiated Services。TCとPHBの対応付け
検証環境 XRv9000 26.1.1(PE1 / P1 / PE2)、XRd 26.1.1(CE1 / CE2)、Cisco Modeling Labs

関連記事