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の設定は適切に済ませておく。
現時点(11/09/08)で最新のカーネルソースをダウンロードしているが、実はここで少しハマった。これより少し古いカーネルを使ったら、ksoftirqd のCPU usageが常に100%となって使い物にならなかったからだ。
Device Drivers -> Stagging Drivers と進み、Microsoft Hyper-V Client Drivers をモジュール組み込み <M> にして、コンフィグを保存して終了する。
で hv_vmbus が読み込まれていることを確認したら、シャットダウンする。
レガシネットワークアダプタを削除し、そのレガシネットワークアダプタと同一のMACアドレスに設定したネットワークアダプタを追加して、仮想マシンを起動する。
で、インターフェースがちゃんと表示されれば、組み込み成功である。
なお、統合サービスインストールについて色々調べた際に、eth0がseth0になるという記述もあってちょっと混乱したが、上のやり方ではeth0のまま変化しないので、ネットワーク設定ファイル等はそのまま使える。
また、カーネルをアップデートすると起動時に「Error: Driver 'pcspkr' is already registered, aborting...」というエラーメッセージが表示されることがあるが、/etc/modprobe.d/blacklist.conf に以下の行を追加すれば消すことができる。
---
さて、統合サービスのインストールによってどれだけパフォーマンスが変化したのかを確認するため、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への接続と全く変わらないパフォーマンスが確保できたことがわかる。
そこでメイン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
# 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
# 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
# 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への接続と全く変わらないパフォーマンスが確保できたことがわかる。
2011-09-08 17:05
nice!(1)
コメント(0)
トラックバック(0)
コメント 0