~nabeken/diary/

Gentoo Linux(6年くらい)とFreeBSD(1年くらい)とOpenBSD(新参者)を使う日々。


IHANet BGP peering overview

KVM + Debian で快適 Linux ルータ

Posted on Sun Apr 12 21:52:33 +0900 2009 by nabeken

日記カテゴリに記事を書くのも久々です。久々のネタは KVM ネタです。

OCN IPv6 で手元に IPv6 を引っぱる関係で市販のルータがまったく使えないため、Linux でルーティングする必要がありました。以前は専用に1台用意していたのですが、電気代と場所ももったいないため、これを仮想化することにしました。

家庭で使う程度のトラフィック、経路であればCPUはほとんど使わず、どちらかというと物理バスの速度が重要です。今回はストレージサーバとして以前購入し、セットアップした PowerEdge T105 上で KVM を使い仮想化した Debian でルーティングすることにしました。

すでにオンボードで NIC が1つありますが、これは従来通りのストレージ用のトラフィックを流すことにし、PCI-Express x1 のカードを1枚追加することにしました。

 $ dmesg | grep eth.
eth0: Tigon3 [partno(BCM95722) rev a200 PHY(5722/5756)] (PCI Express) 10/100/1000Base-T Ethernet 00:22:19:XXXXXXXX
eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] WireSpeed[1] TSOcap[1]
eth0: dma_rwctrl[76180000] dma_mask[64-bit]
sky2 eth1: addr 00:50:43:XXXXXXXX

eth1 は今後のことを考え、ブリッジインターフェースを通すことにしました。

 # brctl show
bridge name	bridge id		STP enabled	interfaces
kvm0		8000.00504300359e	no		eth1
							tap0

kvm0 という bridge に eth1、そして kvm (qemu) が作る tap インターフェイスを入れることで、今後インスタンスが増えてもトラフィックを1本に纏めることができます。

問題はここからで、この状態だとスループットが上ると KVM 上のインターフェースの挙動が不安定になってしまうことが判明しました。通常の Web ブラウジングでは帯域を使い果すことはほとんどないため、問題にはならない場合が多いのですが、ダウンロードするとすぐにパケットが詰まるようです。

で、解決方法ですが kvm で -net nic,model=virtio として、準仮想化インターフェースを使うようにすると高トラフィック下でも安定し、かつ、全体のスループットも上ります。

ただし、Debian etch のカーネルではまだ virtio のドライバがないため、backports.org からカーネル 2.6.26 を持ってくる必要があります。

Linux ルータを使っている人は仮想化も検討してはいかがでしょうか。非常に相性がよいです。