Atom Login Admin

Above the clouds

XenでLINC-Switchの動作確認

written on Sunday,March 16,2014

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のネットワークはデフォルトでは以下の通りになる。
Xen Network default
ゲストドメインのネットワークインターフェースはそれぞれ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

設定が完了すると以下のようになっている
Xen Network LINC-Switch

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

Login
This entry was tagged #Xen #OpenFlow #LINC-Switch