ここでは,Xenのネットワーク性能について調べたい*1。最初にXenで構築できるネットワーク構成について説明しよう。Xenでは柔軟性が高い仮想ネットワーク構成を自在に設定できる。
Xen上で複数のドメインを利用する場合,「ブリッジ・モード」,「NATモード」,「ルーティング・モード」という3種類のネットワーク・モードを利用できる。これらは,1台の物理マシン(ホストOSに相当)を経由して,他の物理マシン(ゲストOSに相当)を外部のネットワークに接続する場合と共通のネットワーク・モードである。
ブリッジ・モードは,ドメイン0とドメインUをブリッジ接続するモードだ。Xenではブリッジ・モードがデフォルト(初期設定)になっている。ブリッジ・モードでは,外部からドメイン0とドメインUがそれぞれ独立したサーバーに見える。ドメイン0とドメインUにそれぞれIPアドレスを与えなければならないほか,ドメイン0内に仮想的なブリッジ・インタフェース(xenbr)を用意することも必要になる。
NATモードでは,ブリッジは用いない。ドメインUから外部のネットワークにIPパケットが転送される際,ネットワーク・アドレス変換(Network Address Translator,NAT)が施される。
最後のルーティング・モードでは,ブリッジもNATも利用しない。
ブリッジ・モードでテストを実施
今回のテストでは,すべてブリッジ・モードを使用している。
CentOS 5でドメイン0の環境を構築し,ifconfigコマンドを実行しよう(図1)。この時点ではドメインUは起動していない。
eth0 Link encap:Ethernet HWaddr 00:17:08:57:4C:6A
inet addr:10.2.52.1 Bcast:10.2.52.255
Mask:255.255.255.0
… 中略 …
eth1 Link encap:Ethernet HWaddr 00:17:08:57:4C:68
inet addr:172.16.52.1 Bcast:172.16.255.255 Mask:255.255.
0.0
… 中略 …
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
… 中略 …
peth0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
… 中略 …
vif0.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
… 中略 …
xenbr0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
… 省略 …
Xenカーネルを使わず,通常のカーネルをインストールした場合はeth0,eth1,loという三つのインタフェースの情報だけが表示されるはずである*2。
しかし,Xenをインストールした状態ではこれら三つ以外に,「peth0」,「vif0.0」,「xenbr0」というインタフェースの情報が表示される。これらはXenのドメインがNICを介して通信するために必要な仮想インタフェースである*3。
まず,xenbr0はブリッジ・インタフェースである(図2)。次にpeth0は,ブリッジ・インタフェースと物理ネットワーク・インタフェースを結ぶための論理ネットワーク・インタフェースだ。最後にvif0.0は,ドメイン0の論理ネットワーク・インタフェース(eth0)とブリッジ・インタフェースを結ぶための仮想ネットワーク・インタフェースの役割を果たす。
ドメインUを起動する
ドメイン0から新たにドメインUを起動すると,ドメイン0とドメインUを接続する仮想ネットワーク・インタフェース(vif)が1対作成される(図3)。ちょうど仮想的なクロス・ケーブルで,ドメイン0とドメインUが直接接続されているイメージだ。ドメインUのイーサネット・デバイス名には,通常のLinuxの場合と同様に,eth0,eth1,…という「eth」+「通し番号」という規則で名前が付けられる。
これに対してドメイン0側には,vif1.0,vif2.0,といった「vif」+「n.m」というデバイス名が作成される。nは「xm list」コマンドで確認できるドメインUのID番号,mはそのドメインU内にあるインタフェースの通し番号を意味する*4。ドメインUがシャットダウンされると,これらのvifで始まる仮想インタフェースも自動的に削除される。
Xenでは図3に示したブリッジ・インタフェース(xenbr0)を経由することで,仮想ネットワーク上にあるドメインUを,物理ネットワーク上にある独立したホストと同じように外部に見せることができる。
ゲストOS(ドメインU)を起動した後,再度ifconfigコマンドを実行してみましょう(図4)。ドメインUのeth0と接続するための仮想インタフェースvif1.0が作成されていることが分かる。ドメインUのeth0と仮想インタフェースvif1.0が内部的につながり,さらにvif1.0がブリッジ・インタフェースxenbr0と接続されることで,ゲストOS(ドメインU)が外部の物理ネットワークと通信可能になる。
# ifconfig
… 省略 …
vif1.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
… 省略 …