KVM仮想マシンのネットワークパフォーマンスが悪い。

KVM仮想マシンのネットワークパフォーマンスが悪い。

KVMで32ビットLinux仮想マシンを実行しています。ホストは、LANに接続された64ビットLinuxコンピュータです。 scpを使用してKVMシステムからLAN上のサーバーにファイルを転送しようとすると、ギガビットイーサネットで約500kB / sのパフォーマンスが低下します。約1%程度予想されます。どんな提案がありますか?

答え1

使用を検討してください仮想デバイス。 (低速)ハードウェアをエミュレートすることなく、仮想マシンとホストを直接接続できます。これを使用して、ネットワークのパフォーマンスが大幅に向上することを測定しました。

たとえば、virtioネットワークデバイスは、kvmコマンドラインパラメータ "-net nic,model = virtio"を介して有効にできます。

Virtioブロックデバイスを使用している場合、新しいデバイス名は「vda1」などですが、現在のLinuxディストリビューションはUUIDに基づいてパーティションを検出するため、これは問題ではありません。

答え2

これは、クライアントの内部ディスクI / Oパフォーマンスの問題かもしれません。ディスクイメージを使用している場合は、パフォーマンスを向上させるために次の手順を実行します。

cacheまず、ゲストのディスク構成オプションを試してください。

デフォルトでは、Write-Through キャッシュはすべてのブロックデバイスで使用されます。つまり、ホストページキャッシュはデータの読み書きに使用されますが、書き込み通知はストレージサブシステムからデータが書き込まれたことを報告した場合にのみクライアントに送信されます。

データがホストページキャッシュに表示されると、後書きキャッシュはデータ書き込みが完了したことを報告します。ホストを信頼する限り安全です。ホストがクラッシュしたり電源が切れたりすると、ゲストのデータが破損する可能性があります。 -snapshotオプションを使用すると、デフォルトで後書きキャッシュが使用されます。

ページホスティングを完全に防ぐには、キャッシュ=なしを使用してください。これにより、ゲストメモリに直接ディスクIOが試行されます。 QEMUはまだデータの内部コピーを実行できます。

一部のブロックドライバは、キャッシュ=連続書き込みを使用すると正しく動作しません。特にqcow2がそうです。精度よりもパフォーマンスが重要な場合は、qcow2と一緒にキャッシュ書き書きを使用する必要があります。デフォルトでは、qcow2ディスクイメージに明示的なキャッシュが指定されていない場合、キャッシュ=書き込みストレージが使用されます。他のすべてのディスクタイプの場合、キャッシュ= writethroughはデフォルトです。

その後、カーネルのエレベーターオプションも使用する必要があります。elevator=noopgrub linux コマンドラインに次の内容を追加する必要があります。

# Edit your /etc/default/grub.conf (on Debian-based distribution)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

これについてのより良い説明は以下にあります。http://lonesysadmin.net/2008/02/21/elevatornoop/;しかし、簡単に言えば、ホストLinuxカーネルとゲストLinuxカーネルの両方がI / Oを最適化しようとしますが、ゲストの場合、これは何よりも悪いことがよくあります(ゲストはこのタスクをホストに委ねる必要があります)。

関連情報