XenでLINC-Switchの動作確認
今回は先日Xen(ハイパーバイザ型の仮想化ソフトウェア)で、LINC-Switchを動作させてみた。
また、今回は先日リリースされたばかりのXen 4.4で動作確認を行う。
Xenのパッケージからインストールもできるのだが、ソースコードからコンパイルしインストールを行った。その手順から。ちなみにDom0にするOSはUbuntu 12.10 amd64 server
ソースコードのダウンロード
git clone git://xenbits.xen.org/xen.git
git checkout -b 4.4 refs/tags/RELEASE-4.4.0
依存関係のインストール
# apt-get install build-essential
apt-get install bcc bin86 gawk bridge-utils iproute libcurl3 libcurl4-openssl-dev bzip2 module-init-tools transfig tgif
# apt-get install texinfo texlive-latex-base texlive-latex-recommended texlive-fonts-extra texlive-fonts-recommended pciutils-dev mercurial
# apt-get install make gcc libc6-dev zlib1g-dev python python-dev python-twisted libncurses5-dev patch libvncserver-dev libsdl-dev libjpeg62-dev
# apt-get install iasl libbz2-dev e2fslibs-dev git-core uuid-dev ocaml ocaml-findlib libx11-dev bison flex xz-utils libyajl-dev
# apt-get install gettext
NOTE:
ビルド時に以下のエラーが出るので、xorg-serverの依存関係もインストールしておく。
(pixmanのdevelパッケージをインストールする方法として簡単だった)
ERROR: pixman not present. Your options:
(1) Prefered: Install the pixman devel package (any recent
distro should have packages as Xorg needs pixman too).
(2) Fetch the pixman submodule, using:
git submodule update --init pixman
# apt-get build-dep xorg-server
Configure
$ ./configure
$ vi ./.config
#
PYTHON_PREFIX_ARG=--install-layout=deb
#
ビルドとインストール
ロケール設定を日本にしている場合はmakeする前に以下
# export LC_ALL=en_US.UTF-8
# make world
# make install
インストール後
インストール後に自動的にXenに関係するサービスを起動する為に以下
# update-rc.d xencommons defaults 19 18
# update-rc.d xendomains defaults 21 20
# update-rc.d xen-watchdog defaults 22 23
Dom0のネットワーク設定
外部との接続を行う為に以下の設定を行う。
XenのDom0は仮想ブリッジを介して物理ネットワークインターフェースへパケットを送る。また外部からのパケットも然り。
まず、bridge-utilsパッケージをインストールする。
# aptitude install bridge-utils
/etc/network/interfacesを以下に書き換える
#
auto lo
iface lo inet loopback
iface eth0 inet manual
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
#
今回はDHCPによりIPアドレスを割り当てることとする。
Xen版カーネルでブートする
ブートメニューの優先順位を変えることによりXen版カーネルでブートする
# dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen
# update-grub
そして、reboot
Xenの起動確認
基本的なコマンドは以下の通り
# xl info
# xl list
# xm top
ゲストドメインの作成
Xenのゲストドメインの作成にはxen-toolsを使うのが簡単である。
xen-toolsのインストールを行う。
# aptitude install xen-tools
ゲストドメインを作成する。
xen-create-image --hostname=vm1 \
--memory=512mb \
--vcpus=2 \
--lvm=vg0 \
--dhcp \
--pygrub \
--dist=wheezy
※xen-toolsとDom0のバージョンが異なるためワーニングが出るが問題なくゲストドメインを作成できた。
ゲストドメインの作成が完了すると以下のようなサマリーが出力される。
Hostname : vm1
Distribution : precise
MAC Address : 00:16:3E:7F:63:4B
IP Address(es) : dynamic
RSA Fingerprint : 5b:ae:1d:f3:29:7a:31:e0:01:3f:e2:56:d6:f8:08:5b
Root Password : vdWbyuyB
同じようにゲストドメインをもう一つ作成し計2つ作成する。
ゲストドメインの起動は以下のコマンドで行う。
# xl create /etc/xen/vm1.cfg
# xl create /etc/xen/vm2.cfg
ゲストドメインの起動確認
# xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 831 2 r----- 32.2
vm1 1 512 2 -b---- 0.6
vm2 2 512 2 -b---- 0.6
Xenのネットワーク
Xenのネットワークはデフォルトでは以下の通りになる。
ゲストドメインのネットワークインターフェースはそれぞれvif1.0、vif2.0としてDom0に現れる。
vif1.0とvif2.0はxenbr0に接続されている。つまり仮想ブリッジを介して外部ネットワーク、ゲストドメイン同士が接続されていることとなる。
LINC-Switchへ接続
LINC-SwitchのインストールはLINC-SwitchのREADMEを参照
dom0でLINC-Switchを動作させる。
tun/tapでLINC-Switchへ接続する
まず、xenbr0に接続されているvifを切り離す
# brctl delif xenbr0 vif1.0
# brctl delif xenbr0 vif2.0
それぞれLINC-Switchへ接続するtapを作成し、vifを接続する。
# tunctl -t tap1
# ifconfig tap1 0.0.0.0 promisc up
# brctl addbr br1
# brctl addif br1 tap1
# brctl addif br1 vif1.0
# ifconfig br1 promisc up
# tunctl -t tap2
# ifconfig tap2 0.0.0.0 promisc up
# brctl addbr br2
# brctl addif br2 tap2
# brctl addif br2 vif2.0
# ifconfig br2 promisc up
xenbr0にもLINC-Switchを接続するtapを作成する
# tunctl -t tap3
# ifconfig tap3 0.0.0.0 promisc up
# brctl addif xenbr0 tap3
設定が完了すると以下のようになっている
LINC-Switchの設定
LINC-Switchの設定は/rel/linc/releases/1.0/sys.configを編集することで行う。
[
{linc,
[
{of_config, enabled},
{capable_switch_ports,
[
{port, 1, [{interface, "tap1"}]},
{port, 2, [{interface, "tap2"}]},
{port, 3, [{interface, "tap3"}]}
]},
{capable_switch_queues,
[
{queue, 1, [{min_rate, 100}, {max_rate, 100}]},
{queue, 2, [{min_rate, 100}, {max_rate, 100}]}
]},
{logical_switches,
[
{switch, 0,
[
{backend, linc_us4},
{controllers,
[
{"Switch0-DefaultController", "localhost", 6633, tcp}
]},
{queues_status, enabled},
{ports, [
{port, 1, {queues, [1,2]}},
{port, 2, {queues, [1,2]}},
{port, 3, {queues, [1,2]}}
]}
]}
]}
]},
{enetconf,
[
{capabilities, [{base, {1, 1}},
{startup, {1, 0}},
{'writable-running', {1, 0}}]},
{callback_module, linc_ofconfig},
{sshd_ip, any},
{sshd_port, 1830},
{sshd_user_passwords,
[
{"linc", "linc"}
]}
]},
{lager,
[
{handlers,
[
{lager_console_backend, info},
{lager_file_backend,
[
{"log/error.log", error, 10485760, "$D0", 5},
{"log/console.log", info, 10485760, "$D0", 5}
]}
]}
]},
{sasl,
[
{sasl_error_logger, {file, "log/sasl-error.log"}},
{errlog_type, error},
{error_logger_mf_dir, "log/sasl"}, % Log directory
{error_logger_mf_maxbytes, 10485760}, % 10 MB max file size
{error_logger_mf_maxfiles, 5} % 5 files max
]},
{sync,
[
{excluded_modules, [procket]}
]}
].
LINC-Switchの起動とコントローラの起動
LINC-Switchの起動
# cd LINC-Switch
# rel/linc/bin/linc console
コントローラはRyuのsimple_switch_13.pyを動作させた。
※RyuのインストールはRyuを参照
ゲストドメイン同士の通信確認
それぞれのゲストドメインへssh接続を行い、iperfで確認した。
root@vm1:~# iperf -s &
root@vm2:~# iperf -c 192.168.88.248 -i 1 -t 5
------------------------------------------------------------
Client connecting to 192.168.88.248, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.88.247 port 40510 connected with 192.168.88.248 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 6.50 MBytes 54.5 Mbits/sec
[ 3] 1.0- 2.0 sec 6.25 MBytes 52.4 Mbits/sec
[ 3] 2.0- 3.0 sec 6.00 MBytes 50.3 Mbits/sec
[ 3] 3.0- 4.0 sec 6.12 MBytes 51.4 Mbits/sec
[ 3] 4.0- 5.0 sec 5.75 MBytes 48.2 Mbits/sec
[ 3] 0.0- 5.0 sec 30.8 MBytes 51.2 Mbits/sec
スループットはまあこんなもんです。
※動作環境:
プロセッサー AMD Turion™ II NEO N54L(2.2GHz、25W、2MB)
メモリ PC3-10600E DDR3 UB ECC 4GB(1×4GB)
このようにLINC-Switchを使ってXenのゲストドメイン同士を接続することができる。
パフォーマンスにやや難があるが、色々試してみたい。
Comments
Add Comment