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 ルータを使っている人は仮想化も検討してはいかがでしょうか。非常に相性がよいです。