【Juniper Networks】MX204, MX150におけるQoSの設定例

今回からはJuniper機器の設定をいくつか解説していく予定です。

まずは、MXシリーズのMX204, MX150にてQoSの設定を作成する機会がありましたので、その際に行った設計例の紹介と、それぞれの設定行について解説します。

QoSの設定例

実際に行った設定例の紹介と、各行についてどのような意味合いがあるのかを解説していこうと思います。

※ QoSの設定方法は1つに限られるわけではないので、今回紹介する設定例以外にも設定方法はあります。

queueの使用設定

まずは対象機器におけるqueueを使用するための設定行です。

set chassis fpc 0 pic 0 max-queues-per-interface 8

設定例では、各インターフェースにて8個のqueueを使用することを設定しています。

各queueの名前設定

続いて、使用する8個のqueueにそれぞれ名前を設定します。

set class-of-service forwarding-classes queue 0 Q1
set class-of-service forwarding-classes queue 1 Q2
set class-of-service forwarding-classes queue 2 Q3
set class-of-service forwarding-classes queue 3 Q4
set class-of-service forwarding-classes queue 4 Q5
set class-of-service forwarding-classes queue 5 Q6
set class-of-service forwarding-classes queue 6 Q7
set class-of-service forwarding-classes queue 7 Q8

設定例では、8個のqueueについて「人が見る場合には0番からよりも1番から番号がついていた方が感覚的に分かりやすい」といったよくある理由から、Q1~Q8を設定しています。

なお、以降の設定例では8個用意したqueueを全て使ってはいません。前項目のqueueの使用設定は機器全体に影響する設定であることから、必要になってからqueueの数を増やすのではく、初期の構築時点でqueueの数は確保しておくことで設定変更時の影響を避ける、といった理由があります。

scheduler-mapの設定

QoSを実施したいインターフェースにscheduler-mapを設定し、QoS全体の上限帯域を設定します。

set class-of-service interfaces xe-0/0/X unit 0 scheduler-map "scheduler-map名"
set class-of-service interfaces xe-0/0/X unit 0 shaping-rate "全体の帯域"

また、インターフェースに設定したscheduler-mapに、その実体として各queueにどのような帯域制御を行うかという設定をすることになるschedulerを設定します。

set class-of-service scheduler-maps "scheduler-map名" forwarding-class Q1 scheduler "scheduler名_1"
set class-of-service scheduler-maps "scheduler-map名" forwarding-class Q3 scheduler "scheduler名_3"
set class-of-service scheduler-maps "scheduler-map名" forwarding-class Q4 scheduler "scheduler名_4"
set class-of-service scheduler-maps "scheduler-map名" forwarding-class Q5 scheduler "scheduler名_5"

このschedulerについての解説は次の項目で行います。

schedulerの設定

各schedulerについて、それぞれどのような帯域制御を行うかの設定です。

set class-of-service schedulers "scheduler名_1" priority strict-high
set class-of-service schedulers "scheduler名_3" transmit-rate "Q3に割り当てる保証帯域"
set class-of-service schedulers "scheduler名_3" priority low
set class-of-service schedulers "scheduler名_4" transmit-rate "Q4に割り当てる保証帯域"
set class-of-service schedulers "scheduler名_4" priority low
set class-of-service schedulers "scheduler名_5" priority low

設定例においては、Q1に設定した"scheduler名_1"はstrict-highでの設定です。最優先の定義ですので、他のqueueよりも優先して全体帯域の中から帯域を利用できます。

Q3、Q4に設定した"scheduler名_3"、"scheduler名_4"はpriority lowでtransmit-rateでの設定です。全体帯域の中で少なくともこの保証帯域分はQ3、Q4がそれぞれ利用できます。

Q5に設定した"scheduler名_5"はpriority lowだけの設定です。保証帯域の設定もありませんので、全体帯域の中で余っている分の帯域だけが利用できます。

以上の設定ですが、これらの設定だけだとstrict-highとして設定されたQ1に流れる通信量が多い場合、Q3、Q4は保証帯域として設定したにも関わらずその分の帯域を利用することができません。

この状況に対する対応は、次の設定項目での各queueに割り振る設定の中で行います。

FirewallFilterの設定

まず、各queueに割り振る通信の設定を行います。

set firewall family inet filter "FirewallFilter名" term 1 from dscp ef
set firewall family inet filter "FirewallFilter名" term 1 then policer "policer名"
set firewall family inet filter "FirewallFilter名" term 1 then forwarding-class Q1
set firewall family inet filter "FirewallFilter名" term 3 from dscp cs3
set firewall family inet filter "FirewallFilter名" term 3 then forwarding-class Q3
set firewall family inet filter "FirewallFilter名" term 4 from dscp cs4
set firewall family inet filter "FirewallFilter名" term 4 then forwarding-class Q4
set firewall family inet filter "FirewallFilter名" term 5 then forwarding-class Q5

続いて、Q1にて割り振る通信に対して優先帯域の上限としてpolicerを使用するため、そのpolicerの設定を行います。

set firewall policer "policer名" if-exceeding bandwidth-limit "Q1に割り当てる優先帯域"
set firewall policer "policer名" if-exceeding burst-size-limit "許容するバースト帯域"
set firewall policer "policer名" then discard

最後に、各queueに割り振る通信の設定であるFirewallFilterを、インターフェースで使用する設定を行います。

set interfaces xe-0/0/X unit 0 family inet filter output "FirewallFilter名"

設定例ではDSCP値で割り振りを行っており、EFがQ1、CS3がQ3、CS4がQ4、それ以外をQ5に割り振っています。

設定例についてのまとめ

ここまで紹介した設定例について、一見では分かりにくい設定かと思いますが処理的にはこれまでの設定項目の「FirewallFilterの設定」、「schedulerの設定」、「scheduler-mapの設定」といった逆順に追っていくことで理解しやすいのではないかと思います。

  1. インターフェースから出ていく通信に対し、FirewallFilterの設定にて各queueに通信が割り振られます。
  2. 各queueに割り振られた通信に対し、どの程度帯域を利用できるのかが設定されているのがschedulerです。
  3. 各schedulerをまとめ、最終的にインターフェースに適用するQoS設定がscheduler-mapとなります。

今回紹介したように、QoSは複数の設定項目を組み合わせて作ることになるので、一度全体を通して理解できるまでは個別の設定を読むことが中々に難しいと思います。

しかし、階層的な構造になっていることや、上記に紹介したように通信に対する処理の順番を追って読んでみてもらうことで早期に理解が進めば、私が記事として書いた意味もあるのではないかと思います。

執筆担当者プロフィール
廣瀬 翔也

廣瀬 翔也(日本ビジネスシステムズ株式会社)

クラウドソリューション事業本部 セキュリティ&ネットワークインテグレーション2部 所属 主な業務経験範囲はネットワーク分野。 備忘録も兼ねて”ユーザ要望を実現するためのコンフィグ設計例”を掲載していく予定です。

担当記事一覧