libvirt ゲストネットワークの応答時間を増やす方法はありますか?

libvirt ゲストネットワークの応答時間を増やす方法はありますか?

私たちは、Ubuntu Servers 12.04.4 / Libvirt 0.9.8-2ubuntu17.17 上で多数の Debian Wheezy VM を実行しています。

ホストはトランクを介してネットワークに接続されます。次に、次の設定を使用して VLAN を分割し、それぞれにブリッジを作成します。

auto eth4.2 kvmbrtrunk.2
iface eth4.2 inet manual
    up ifconfig eth4.2 up
    down ifconfig eth4.2 down

iface kvmbrtrunk.2 inet manual
    bridge-ports eth4.2
    bridge-stp no
    bridge-fd 0
    bridge-maxwait 0

VM は次のように構成されています。

 <interface type='bridge'>
   <mac address='54:52:00:02:10:70'/>
   <source bridge='kvmbrtrunk.2'/>
   <model type='virtio'/>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
 </interface>

そして彼らはVirtIOを使用している

00:09.0 Ethernet controller: Red Hat, Inc Virtio network device

主人公(すべて同じ VLAN 上):

A: 1st Ubuntu 12.04 desktop
B: 2nd Ubuntu 12.04 desktop
C: 1st VM, 1st host
D: 2nd VM, 1st host
E: 3rd VM, 2nd host

60 回の ping を連続して実行すると、「rtt min/avg/max/mdev」は次のようになります。

A -> B = 0.093/0.132/0.158/0.015 ms
A -> C = 0.272/0.434/1.074/0.113 ms
A -> D = 0.294/0.460/0.832/0.091 ms
A -> E = 0.324/0.505/0.831/0.069 ms
C -> D = 0.348/0.607/0.863/0.124 ms
C -> E = 0.541/0.792/0.972/0.101 ms

これらの結果は、libvirtの仮想スイッチ/フィルタリング予想通り、レイテンシが増加するだけでなく、レイテンシが3倍になります(0.132対0.460)。

質問

 Is there anything that can be done to attenuate this extra latency?

何かヒントがあれば、よろしくお願いします。

答え1

レイテンシを短縮するために、どのような機能を犠牲にしても構わないと思いますか?

まず、ブリッジ インターフェイスで iptables/ebtables を無効にしてみてください。/proc/sys/net/bridge/bridge-nf-call-iptablesこれを実現するには、0 に変更します。ここでの欠点は、ゲスト トラフィックに対していかなる種類のフィルタリングも実行できなくなることです。

ここでの「より良い」オプションは、SR-IOV を使用して仮想ネットワーク カードに切り替えることです。これには、マザーボードとネットワーク コントローラーがこれをサポートしている必要があります。また、ネットワーク カードごとに 7 ゲストに制限されます (ギガビット イーサネットの場合は、10 ギガビット以上だと思います)。これは、各ゲストにネットワーク ハードウェアへの直接アクセスを与えることで機能します。ホスト OS はパケット フローに関与せず、VM は NIC と直接通信するだけです。

SR-IOV を使用すると、最高のパフォーマンス (高レベルのネットワーク トラフィックで CPU 使用率がテストで約 10% 低下) と最低のレイテンシ (パケットとやり取りするソフトウェアの層がはるかに少ないため) が得られます。これを使用して VLAN タグ付けを構成できると思いますが、セットアップはおそらく少し難しいでしょう (SR-IOV は基本的に文書化されていない魔法であり、設定をいろいろいじる必要があります)。

関連情報