2つのノードで構成されるHeartbeat/DRBD/Pacemaker/KVM/Qemu/libvirtクラスターがあります。各ノードは、次のパッケージ/バージョンでUbuntu 12.0464ビットを実行します。
仮想ゲストは、Ubuntu 10.0464ビットとUbuntu12.0464ビットを実行しています。最高のCPUパフォーマンスを実現するために、libvirt機能を使用してホストCPUの機能を仮想ゲストに渡します。
このクラスターでの一般的な設定は次のとおりです。
最近、いくつかの簡単なテストを実行しました。私は彼らが専門家ではなく、高い基準に達していないことを知っていますが、彼らはすでに強い傾向を示しています:
ノードAが実行中VM "bla" Node Bが実行中VM "monitoring"
ファイルをVM "bla"からVM "monitoring"にrsyncすると、12 MB/sしか達成できません。単純なddif = /を実行すると、 VM "monitoring"内のdev/null of =/tmp/blubbは、約30 MB/sを達成します。
次に、さらに4つのvCPUをVM "monitoring"に追加し、再起動します。VM "monitoring"には8つのvCPUがあります。テストを再実行しました。次の結果が得られます。ファイルをVM "bla"からVM "monitoring"にrsyncすると、36 MB/sになります。 VM "monitoring"内の単純なddif =/dev/null of =/tmp/blubbは、約61 MB/sを達成します。
私にとって、この効果は非常に驚くべきものです。この仮想ゲストに仮想CPUを追加すると、VM内のディスクパフォーマンスが自動的に向上するのはなぜですか?
これについての説明はありませんので、ご意見をいただければ幸いです。この動作を100%再現できるので、このパフォーマンスの向上の原因を理解したいと思います。
非常に大まかなアイデア/説明をします。
OPの状況では、VM内での測定に加えて、ホストも確認する必要があります。
この場合、次のことが正しいと見なすことができます
"monitoring"
)I/Oが増加するとより多くのCPUが割り当てられています。ホストI/Oがすでに最大になっている場合、I/Oパフォーマンスの向上はありません。"bla"
は制限要因ではありません"monitoring"
として、"bla"
を変更せずにI/Oパフォーマンスが向上しました追加要素
より多くのCPUが"monitoring"
に割り当てられるとどうなりますか?
"monitoring"
に割り当てられるCPUが増えると、処理能力が向上しますが、I/Oの処理時間時間も増加します。
これはシングルスレッドプログラムであるため、rsync
とは何の関係もありません。
これは、増加したCPUパワー、より正確には増加した処理時間を利用するI/O層です。
テスト中に"monitoring"
でCPU監視プログラム(例:top)を使用すると、1つではなく、すべてのCPU使用率が上がり、%waも表示されます。 %waは、I/Oに費やされる待機時間です。
このパフォーマンスの向上は、ホストI/Oが最大でない場合にのみ発生します。でる。
KVMサイトでCPUスケジューリングが見つかりませんが、これがあります ブログ 言及KVMはCFSとcgroupsを使用しています、以下は見積もり
KVM内で、各vcpuはLinuxプロセスにマップされ、Linuxプロセスはハードウェア支援を利用して、仮想化に必要な「煙とミラー」を作成します。そのため、vcpuはCFSにとって、また重要なことにcgroupsにとっても重要な別のプロセスであり、リソースマネージャーとして、Linuxがリソースの割り当てを管理できるようにします。通常は制約の割り当てを設定するために比例します。 cgroupsは、メモリ、ネットワーク、およびI/Oにも適用されます。プロセスのグループをスケジューリンググループの一部にして、リソース割り当て要件をプロセスの階層グループに適用できます。
一言で言えば、より多くのCPU =より多くのCPU時間=特定の期間におけるより多くのI/Oタイムスロット。