第5回 リソース制御でサービスレベルを確保せよ


住商情報システム株式会社 中嶋一樹(著)
VA Linux Systems Japan株式会社 高橋浩和(監修)
2008/3/18


ネットワークリソースの制御

帯域幅閾値

 ゲストOSが送信、受信に利用できるネットワーク帯域幅の上限値です。このネットワークの帯域幅設定はかなり複雑で、単に上限を設定するだけでなく、余剰分の帯域を共有させるように設定したり、キューイングのアルゴリズムを変更できたりと、柔軟に設定できます。このため、その内容すべてはここではカバーし切れません。

 そこで今回は、単純に、ゲストOSごとに帯域の上限値を設定する方法を紹介します。

 Linux OSが提供する帯域幅制限の機能はインターフェイスごとに適用され、そのインターフェイスからのアウトバウンドトラフィックに対して働きます。従って、そのままではインバウンドトラフィックについては制御できません。しかし、Xenを用いた仮想化環境では、その内部ネットワーク構成をうまく利用することで、インバウンドトラフィックについても制限を設けることができます。

 これを理解するためには、第1回で解説したXenの内部ネットワーク構造を思い出す必要があります。図5を参照してください。

図5
図5 Xenの内部ネットワーク構造

 ゲストOSが物理NICとつながるまでには、図5のように、「xenbr」と呼ばれる仮想ブリッジが介在しています。

 ここでは、ゲストOS「vm01」について考えてみましょう。vm01からのアウトバンドトラフィックは、eth0のポイント、またはpeth0のポイントで制御できます。一般的にはゲストOS単位よりもホストOS側で設定する方が、より一元的に管理でき、管理性が高いと思われます。ここでも、peth0で制御を行うものとします。

 一方、インバウンドトラフィックはvif1.0で制御できます。なぜならば、vm01のインバウンドトラフィックは、vif1.0にとってはアウトバウンドトラフィックだからです。このように、xenbrを巧みに利用して、アウトバウンドとインバウンド、両方のトラフィックを制御するわけです。

仮想マシン名 割り当て帯域幅
vm01 500kbit/s
vm02 500kbit/s
vm03 1Mbit/s

 それでは実際の設定方法を見てみましょう。ここでは、要件として各ゲストOSに右のように帯域幅を割り当てたいとします。

 まず、アウトバウンドトラフィックから見ていきます。帯域幅制御はXenが備える機能ではないので、CPUやメモリのように、ゲストOSの設定ファイルやxmコマンドによって設定することはできません。代わりに、tc(traffic control)コマンドを用いて設定していきます。これらの作業はすべてホストOS上で行います。

1. キューイング規則をpeth0に適用すると宣言

# tc qdisc add dev peth0 root handle 1:0 htb
  ※tc qdisc add dev peth0←peth0にこのキューイング規則を適用する
  ※root handle 1:0    ←このインターフェイスのルートノードidを1:0に指定。このインターフェイスに作成されるキューは、このidをparentとして指定することになる
  ※htb          ←キューイングアルゴリズムにHTB(Hierarchical Token Bucket)を指定

2. 各ゲストOS用のキューを作成

# tc class add dev peth0 parent 1:0 classid 1:1 htb rate 500kbit
# tc class add dev peth0 parent 1:0 classid 1:2 htb rate 500kbit
# tc class add dev peth0 parent 1:0 classid 1:3 htb rate 1mbit
  ※parent 1:0  ←このキューをインターフェイス1:0に作成する
  ※classid 1:1 ←このキューのidを1:1に指定
  ※rate     ←帯域幅閾値を指定する

3. 到着したトラフィックをどのキューに振り分けるかのルールを作成

# tc filter add dev peth0 protocol ip parent 1:0 prio 1 u32 match ip src 10.0.0.2 flowid 1:1
# tc filter add dev peth0 protocol ip parent 1:0 prio 1 u32 match ip src 10.0.0.3 flowid 1:2
# tc filter add dev peth0 protocol ip parent 1:0 prio 1 u32 match ip src 10.0.0.4 flowid 1:3
  ※prio 1     ←フィルタのプライオリティを1に指定
  ※u32       ←フィルタの種類をu32に指定
  ※ip src 10.0.0.2 ←送信元IPが10.0.0.2のトラフィックを適合と見なす
  ※flowid 1:1   ←このフィルタに適合したトラフィックをclassid 1:1のキューに振り分ける

 このコマンドのパラメータや各オプションがどのように関係しているのか、文字だけで把握するのはなかなか難しいので、図で解説したいと思います。上記のコマンドと照らし合わせて確認してみてください。

図6A
図6A キューイング規則をpeth0に適用すると宣言
図6B
図6B 各ゲストOS用のキューを作成
図6C
図6C 到着したトラフィックをどのキューに振り分けるかのルールを作成

インバウンドトラフィックの制御

 次に、インバウンドトラフィックを見ていきます。

1.キューイング規則を各vifに適用すると宣言

# tc class add dev vif1.0 parent 1:0 classid 1:1 htb rate 500kbit
# tc class add dev vif2.0 parent 1:0 classid 1:1 htb rate 500kbit
# tc class add dev vif3.0 parent 1:0 classid 1:1 htb rate 1mbit
  ※default 1 ←どのフィルタにも適合しないトラフィックはclassid 1:1のキューに割り振る

2.キューを作成

# tc class add dev vif1.0 parent 1:0 classid 1:1 htb rate 500kbit
# tc class add dev vif2.0 parent 1:0 classid 1:1 htb rate 500kbit
# tc class add dev vif3.0 parent 1:0 classid 1:1 htb rate 1mbit

 インバウンドトラフィックでは、キューイング規則をvifインターフェイスに適用します。vifインターフェイスは各ゲストOS専用のものとなっているため、アウトバウンドについて設定したときとは異なり、トラフィックをどのキューに振り分けるかというルールは必要ありません。

 より正確にいえば、そもそもキューは各インターフェイスに対し、1つしか作成する必要がありません。よってインターフェイスに到着したトラフィックはその枠に自動的に振り分けられます。これも図で確認してみましょう。

図7A
図7A キューイング規則を各vifに適用すると宣言
図7B
図7B キューを作成

 ここで1つ注意しなければならない点があります。vifインターフェイスに割り当てられている番号は、各ゲストOSに静的に割り当てられるものではなく、起動するたびに変動します。

 例えば、最初はvm01に「vif1.0」というインターフェイスが割り当てられていたとしても、ゲストOSを再起動するとvif1.0というインターフェイスは破棄され、新たにvif4.0というインターフェイスが作成されます()。

注: 新しく割り当てられる番号は、未使用の番号の中から最も若い番号が割り当てられます

 従って、コマンドレベルでインターフェイスを指定して帯域幅制御の設定を行っていると、ゲストOSを再起動したタイミングで設定が外れてしまうことになります。これを回避するには、Xenのネットワークインターフェイス初期化スクリプトの中に、上記のtcコマンドを埋め込んでおく必要があります。該当のスクリプトは/etc/xen/scripts/vif-bridgeです。

 具体的には、以下のように修正を加えることで、帯域幅制御の設定を永続化することができます。以下に、簡単なサンプルを掲載しておきますので参考にしてください。

...
case "$command" in
   online)
       setup_bridge_port "$vif"
       add_to_bridge "$bridge" "$vif"

       # 以下2行追加
       tc qdisc add dev "$vif" root handle 1:0 htb default 1
       tc class add dev "$vif" parent 1:0 classid 1:1 htb rate 500kbit
       ;;
   offline)
       do_without_error brctl delif "$bridge" "$vif"
       do_without_error ifconfig "$vif" down
       # 以下2行追加
       tc class del dev "$vif" parent 1:0 classid 1:1 htb
       tc qdisc del dev "$vif" root handle 1:0 htb
       ;;
esac
...

 最後に、ゲストOS側で1つ設定を加える必要があります。

 最近のネットワークカードにはTCP Offload Engineが備わっているものがあります。これはTSO(TCP Segment Offloading)というセグメンテーション処理をCPUではなくネットワークカードに委任することによってネットワークの性能を向上させたり、CPUをセグメンテーション処理から解放してCPU負荷を下げる機能を提供します。

 ただし、今回のように帯域幅制御を行う場合、キューイングの実装(パケットスケジューラ)がこのTSOに対応していない可能性があります。キューイングの実装には今回ご紹介したHTB以外にもCBQやTBFなどさまざまな種類があります。残念ながら、今回取り上げたHTBについては、TSOに対応しているのかどうかを確認するには至りませんでした。

 よって念のため、ゲストOSでこのTSOを無効にしておきます。具体的には、ゲストOS上で以下のようにコマンドを実行します。

# ethtool -K eth0 tso off

 eth0の部分は適宜、手元の環境で使用しているインターフェイス名に置き換えてください。

 このように最後はリファレンス的な内容で、特にネットワークの帯域幅制御については少し濃い内容になってしまいましたが、本連載は今回で最終回となりました。この連載が、Xenによるサーバ仮想化を実践する際の参考となれば幸いです。

3/3
 

Index
実践! Xenで実現するサーバ統合(最終回)
 リソース制御でサービスレベルを確保せよ
  Page 1
 ゲストOSのリソース制御はなぜ必要?
 CPUのリソース制御
  Page 2
 CPUのリソース制御(2)
  コラム Xenでの大量インストール方法は?
 メモリのリソース制御
  Page 3
 ネットワークリソースの制御

Linux Square全記事インデックス


 Linux Squareフォーラム 仮想化技術関連記事
連載:実践! Xenで実現するサーバ統合
有力な仮想化技術として注目を集めるようになった「Xen」。このXenを活用してサーバ統合を実践していく手順を具体的に紹介します
特集:サーバの仮想化技術とビジネス展開の可能性
jailからUML/VMwareまで
1台のマシンで複数のサーバを動かす「仮想化技術」。VMwareやUMLの登場により、WebサイトだけでなくOS自体を仮想化できるようになった
特集:仮想化技術のアプローチと実装
VMwareから要注目技術Xenまで

1台のサーバで複数の仮想マシンを実行する仮想化技術は、空間コストを引き下げる可能性を持つ。最新の仮想化技術を概観してみよう
特集:仮想OS「User Mode Linux」活用法
技術解説からカーネルカスタマイズまで
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
特集:仮想化技術の大本命「Xen」を使ってみよう
インストール & Debian環境構築編

高いパフォーマンスで本命の1つとなった仮想マシンモニタ「Xen」。日本語による情報が少ないXenを、実際に動かしてみよう
特集:仮想化技術の大本命「Xen」を使ってみよう
Xen対応カスタムカーネル構築編

Xen環境およびその上で動作する仮想マシン用カーネルを自分で構築しよう。これにより、自由にカスタマイズしたカーネルを利用できる
特集:IPv6、UML、セキュリティ機能の統合
全貌を現したLinuxカーネル2.6[第4章]

今回は、これまでに紹介し切れなかった機能を一気に紹介する。これを読めば、カーネル2.6の正式リリースが楽しみになるだろう
Linux Squareプロダクトレビュー VMware Workstation 4
PC/AT互換機エミュレータとして不動の地位を築いたVMware。その新バージョンがリリースされた。新機能を早速試してみよう
古くて新しい「サーバ仮想化技術」の行方
サーバ仮想化を実現するための技術がソフトウェア、ハードウェアの両面で出そろってきた。ハイパーバイザーのさらなる高速化に向けた動きを紹介する
Linux Squareフォーラム全記事インデックス

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH