web-dev-qa-db-ja.com

KVM(virtioドライバー)でのネットワークパフォーマンスの低下-更新:vhost_netで

私は以前にいくつかのKVM=ベースのネットワークをセットアップしましたが、この問題に遭遇したことがないので、私がこれまでに異なってセットアップしたものとは思えません。

セットアップ

基本的に、Iveは完全にDell Stackを取得しました:

  • 2台のDell N2024(スタック型ギガビットスイッチ)
  • KVM Hypervisors用のいくつかのDell R720
  • ゲートウェイ/ファイアウォール用の2x Dell R320

すべてのマシンは、ハイパーバイザーであるCentOS6.5を実行します。基本的には、いくつかのsysctl調整を伴う標準インストールです。

現時点では、マスターに似たセットアップでいくつかのテストVMのセットアップを用意しています(CentOS 6.X、基本的なパペット駆動構成のベースインストール)。すべてのVMは次のとおりです。

  • 2つの物理的に分離されたネットワークの1つにブリッジ(つまり、各ハイパーバイザーには2つのイーサネット接続があり、1つはパブリック/ DMZブリッジLAN用、もう1つはプライベートネットワーク)
  • すべてのVMはネットワークにvirtioを使用し、デバイスをブロックします(基本的にはvirt-installコマンドを実行した場合の標準の結果が沼地です)-例(libvirt configの例)

    <interface type='bridge'>
          <mac address='52:54:00:11:a7:f0'/>
          <source bridge='dmzbr0'/>
          <model type='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    
  • すべてのVMは2〜8 VCPUと8〜64 GB RAMにアクセスでき、それらのドライブはホストマシン上のLVMボリュームです。

VM内のいくつかの単純なファイルコピー、およびddテストは完全に許容可能な結果を​​生成します(これらの小規模な模擬テストでは300MB/s〜800MB/s)。

物理マシン間のネットワークパフォーマンス

私は今のところジャンボフレーム/ MTU構成を残しており、サーバーからサーバーへの転送はギガビット接続(またはそれについて)を非常に幸福に最大にします(100MB/s-> 118MB/sフラット各マシンとの間の複数の大規模ファイルテスト)

物理マシンとVM(およびVM to VM)の間のネットワークパフォーマンス

Rsync/SSH転送は常に変化(不安定)しますが、常に24MB/sと最大約38MB/sの間

私は他のいくつかのテストを実行しました:-VM(別のブリッジ)上の1つのブリッジ上の物理マシンIP間-VM(同じブリッジ上)-virtioの代わりにe10デバイスドライバーを使用してVMを起動しようとしました

何も機能していないようですが、これほどパフォーマンスの低下に遭遇した人はいますか?古いネットワーク(別のDCでホストされている)を確認したところ、別のスイッチ(非常に安価な古いPowerConnect 2824)を使用しているという事実は別として、VMネットワークパフォーマンスは生のネットワークパフォーマンスの80〜90%に近い(半分以上)

セットアップ/構成または追加情報を提供できれば、私はとても幸せです!

更新(2014/08/14)

いくつかのことを試しました:

  • ホストブリッジとアダプターおよびVMでジャンボフレーム/ MTU 9000を有効にしました(パフォーマンスがわずかに向上しました(平均30MB /秒以上)
  • ホストでのGSO、LRO、TSOのオフ/オンのテスト(顕著な影響なし)
  • さらにsysctl最適化をテストしました(rmem/wmemを調整し、持続的に1〜2%のパフォーマンス向上)
  • テストされたvhost_netドライバー(パフォーマンスのわずかな向上)
  • 同じsysctl最適化で(上記のように)有効にされたvhost_netドライバー(以前は少なくとも10-20%のパフォーマンスの向上)
  • redhatのパフォーマンス最適化ガイドに従って、マルチキューを有効にすると効果があると述べましたが、違いはありませんでした。

ホストは125%のCPU(ホストプロセスの場合)に位置しているようですが、これはゲストまたはCPU/Numaのアフィニティに割り当てるVCPUが多すぎることに関係があるのでしょうか?

しかし、結局のところ、平均持続速度を25〜30MB /秒から40〜45MB /秒に増やしたようです。それはまともな改善ですが、ベアメタルパフォーマンスに近づくことができると確信しています(現時点ではまだ半分以下です)。

他のアイデアはありますか?

5
kwiksand

KVMインスタンスは、ホストのネットワーク接続を問題なく飽和させることができるはずです。

ここでの最初の推奨は、ホストとゲストの両方のカーネルをアップグレードすることです。標準のCentOS 6.5カーネルは、KVMに対して優れたパフォーマンスを発揮しません。 ELRepoのkernel-lt(勇気がある場合はkernel-ml)をお勧めします。これにより、すぐにパフォーマンスがかなり向上します。

次に、iperf3(または古いiperf)でテストしてみます。これにより、できるだけ純粋なネットワーク接続に近づ​​くことができます。 rsync/sshテストはディスクに確実に影響を与えるため、実際には有効ではありません。 RSyncは特にddテストのように順次IO(代わりにfioを使用してみてください)を実行していない可能性があります。

ここで興味深いのは、VM to VMトラフィックは実際にはネットワークコントローラーにヒットしないということです。これは純粋にホスト上で行われるため、残りはここでは、ネットワーク(およびさまざまなオフロード設定)の意味はまったくありません。

確認すべきもう1つのこと:サーバーがCPUをスロットルダウンしていますか?多くのDellマシンがアイドル状態であると考え、CPUの実行を本来の速度よりも大幅に遅くしました。省電力機能は、サーバーのワークロードを常に適切に認識するとは限りません。

ここでは必ずvirtioが必要です。エミュレートされたオプションのいずれかをテストする時間を無駄にしないでください。

言及していませんが、サーバーにi350ベースのNICが搭載されている場合は、SR-IOVを調べることができます(マシンあたり7個以下のVMのみが必要であると想定)。これは、VM物理への直接アクセスを提供しますNIC(nwfilterのサポートがないなど、機能が失われる代わりに))、より効率的です。完全なギガビット速度を得るためにこれは必要ありません。

1
devicenull