SSブログ

Debian 6.0 SqueezeへHyper-V統合サービスをインストールする [Linuxメモ]

 今までLinux(Debian)をインストールした AthlonXP 1700+ マシンをルータ兼ファイルサーバとして使っていたが、Sambaの性能にちょっと不満を感じていた。また、近いうちにauひかりギガ得プランに加入する予定なので、ギガビットのスピードが生かせるようにサーバ機の性能の底上げも図りたい。
 そこでメインPCを一新して、それまでメインPCで使っていたパーツにWindows Server 2008 R2をインストールしてサーバ機とし、Hyper-VでLinux(Debian)をインストールすることで、ルータはLinux、ファイルサーバはWindows Serverということを1台のPCで実現しようとした。
 Hyper-VでDebian Squeezeをインストールすること自体は簡単に終わったが、ちょっと苦労したのがHyper-V統合サービスのインストールである。

 Hyper-Vにおいて統合サービスをインストールしないといくつかの制限を受けるが、今回の場合で特に困るのがNICの性能が出ないという点である。統合サービスがない場合レガシネットワーク アダプターを利用することになるが、これはDECのtulipをエミュレートしているため、オーバヘッドが大きく本来のNICの性能が出ない。
 ルータにおいてこれは致命的なので、統合サービスのインストールを試みた。

 前置きが長かったが、やっていることは http://www.yusufozturk.info/linux-server/building-your-own-kernel-packages-for-hyper-v-support.html をほぼそのままなぞっている。
 最近のLinuxカーネルソースには、Hyper-V統合サービスのドライバがすでに組み込まれているため、それを有効にしてカーネルを再構築すればよい。

 事前にAPTの設定は適切に済ませておく。

# apt-get install build-essential
# apt-get install ncurses-dev kernel-package fakeroot
# apt-get install linux-headers-`uname -r`
# apt-get install linux-source-`uname -r | awk -F"-" '{print $1}'`
# cd /usr/src
# wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.4.tar.gz

 現時点(11/09/08)で最新のカーネルソースをダウンロードしているが、実はここで少しハマった。これより少し古いカーネルを使ったら、ksoftirqd のCPU usageが常に100%となって使い物にならなかったからだ。

# tar xzvf linux-2.6.39.4.tar.gz
# cd linux-2.6.39.4
# cp /boot/config* ./.config
# make menuconfig

 Device Drivers -> Stagging Drivers と進み、Microsoft Hyper-V Client Drivers をモジュール組み込み <M> にして、コンフィグを保存して終了する。

# make-kpkg clean
# fakeroot make-kpkg --initrd --append-to-version=-hyperv kernel_image kernel_headers
# cd ..
# dpkg -i linux-image-2.6.39.4-hyperv_2.6.39.4-hyperv-10.00.Custom_i386.deb linux-headers-2.6.39.4-hyperv_2.6.39.4-hyperv-10.00.Custom_i386.deb
# reboot

# lsmod | grep hv_vmbus

で hv_vmbus が読み込まれていることを確認したら、シャットダウンする。

# shutdown -h now

 レガシネットワークアダプタを削除し、そのレガシネットワークアダプタと同一のMACアドレスに設定したネットワークアダプタを追加して、仮想マシンを起動する。

# ifconfig

で、インターフェースがちゃんと表示されれば、組み込み成功である。

 なお、統合サービスインストールについて色々調べた際に、eth0がseth0になるという記述もあってちょっと混乱したが、上のやり方ではeth0のまま変化しないので、ネットワーク設定ファイル等はそのまま使える。

 また、カーネルをアップデートすると起動時に「Error: Driver 'pcspkr' is already registered, aborting...」というエラーメッセージが表示されることがあるが、/etc/modprobe.d/blacklist.conf に以下の行を追加すれば消すことができる。

blacklist pcspkr

---
 さて、統合サービスのインストールによってどれだけパフォーマンスが変化したのかを確認するため、iperf を用いてベンチマークを行った。

クライアント:Windows7 SP1 (Realtek RTL8111DL)
サーバ:Windows Server 2008 R2 SP1 + Debian 6.0 Squeeze (Intel 82567LM-3)

Windows7 -> Debian 統合サービスインストール前

>iperf.exe -c 192.168.1.1 -w 256k
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 256 KByte
------------------------------------------------------------
[156] local 192.168.1.4 port 59008 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[156] 0.0-10.0 sec 692 MBytes 579 Mbits/sec


Windows7 -> Debian 統合サービスインストール後

>iperf.exe -c 192.168.1.1 -w 256k
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 256 KByte
------------------------------------------------------------
[156] local 192.168.1.4 port 59111 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[156] 0.0-10.0 sec 1.10 GBytes 941 Mbits/sec


 ちなみに、Windows7 -> Windows Server 2008 R2(Hyper-V 管理OS)では以下の結果となった。

>iperf.exe -c 192.168.1.2 -w 256k
------------------------------------------------------------
Client connecting to 192.168.1.2, TCP port 5001
TCP window size: 256 KByte
------------------------------------------------------------
[156] local 192.168.1.4 port 58966 connected with 192.168.1.2 port 5001
[ ID] Interval Transfer Bandwidth
[156] 0.0-10.0 sec 1.10 GBytes 940 Mbits/sec

 統合サービスのインストールにより、管理OSへの接続と全く変わらないパフォーマンスが確保できたことがわかる。
nice!(1)  コメント(0)  トラックバック(0) 

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。