2つのノードで構成されるハートビート/ DRBD / Pacemaker / KVM / Qemu / libvirtクラスターがあります。各ノードは次のパッケージ/バージョンでUbuntu 12.04 64ビットを実行します。
- カーネル3.2.0-32-generic#51-Ubuntu SMP
- DRBD 8.3.11
- qemu-kvm 1.0 + noroms-0ubuntu14.3
- libvirt 0.9.13
- ペースメーカー1.1.7
- ハートビート3.0.5
仮想ゲストはUbuntu 10.04 64ビットおよびUbuntu 12.04 64ビットを実行しています。最高のCPUパフォーマンスを実現するために、libvirt機能を使用してホストCPUの機能を仮想ゲストに渡します。
これがこのクラスターの一般的なセットアップです。
- VMの「監視」には4つのvCPUがあります
- VMの「監視」はideをディスクインターフェイスとして使用します(現在、明らかな理由によりVirtIOに切り替えています)
最近、いくつかの簡単なテストを実行しました。私は彼らが専門家ではなく、高い基準に達していないことを知っていますが、すでに強い傾向を示しています:
ノードAはVM「bla」を実行していますノードBはVM「監視」を実行しています
VM "bla"からVM "monitoring"にファイルをrsyncすると、12 MB /秒しか達成されません。VMの「監視」内で単純なdd if = / dev / null of = / tmp / blubbを実行すると、約30 MB /秒を達成します。
次に、VMの「監視」にさらに4つのvCPUを追加して再起動しました。VMの「監視」に8個のvCPUが追加されました。テストを再実行して、次の結果を得ました。VM "bla"からVM "monitoring"にファイルをrsyncすると、36 MB /秒に達します。VMの "監視"内で単純なdd if = / dev / null of = / tmp / blubbを実行すると、約61 MB /秒に達します。
私にとって、この効果は驚くべきことです。この仮想ゲストに仮想CPUを追加すると、どうして自動的にVM内部のディスクパフォーマンスが向上するのでしょうか。
私にはこれについての説明はありません。あなたの意見を本当に感謝します。この動作を100%再現できるので、パフォーマンスが向上する原因を知りたいのですが。
kvm_trace
してIO_Exits
、CPU番号を変更したときの数の変化を確認します。それは、ゲストCPUでスケジュールされるIDEを使用しているためだと思います。virtioを使用すると、パフォーマンスは一定になるはずです。データプレーンがqemuにある場合は、大幅に向上します。別の推測として、バグのある仮想化スタックで知られているディストリビューションを使用している可能性があります。