web-dev-qa-db-ja.com

KVM / Qemu、Ubuntu:なぜより多くのゲストCPUがDisk-I / Oを急速に強化するのですか?

2つのノードで構成されるHeartbeat/DRBD/Pacemaker/KVM/Qemu/libvirtクラスターがあります。各ノードは、次のパッケージ/バージョンでUbuntu 12.0464ビットを実行します。

  • カーネル3.2.0-32-ジェネリック#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.0464ビットとUbuntu12.0464ビットを実行しています。最高のCPUパフォーマンスを実現するために、libvirt機能を使用してホストCPUの機能を仮想ゲストに渡します。

このクラスターでの一般的な設定は次のとおりです。

  • VMの「監視」には4つのvCPUがあります
  • VMの「監視」はディスクインターフェイスとしてideを使用します(明らかな理由で現在VirtIOに切り替えています)

最近、いくつかの簡単なテストを実行しました。私は彼らが専門家ではなく、高い基準に達していないことを知っていますが、彼らはすでに強い傾向を示しています:

ノード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%再現できるので、このパフォーマンスの向上の原因を理解したいと思います。

9
Valentin

非常に大まかなアイデア/説明をします。

OPの状況では、VM内での測定に加えて、ホストも確認する必要があります。

この場合、次のことが正しいと見なすことができます

  1. すべてのテストで、ホストI/O(ディスク)帯域幅が最大になりません。VM("monitoring")I/Oが増加するとより多くのCPUが割り当てられています。ホストI/Oがすでに最大になっている場合、I/Oパフォーマンスの向上はありません。
  2. "bla"は制限要因ではありません"monitoring"として、"bla"を変更せずにI/Oパフォーマンスが向上しました
  3. CPUはパフォーマンス向上の主要な工場です(OPの場合)I/Oはボトルネックではなく、OPはメモリサイズの変更について言及していません。しかし、なぜ?またはどのように?

追加要素

  1. 書き込みは読み取りよりも時間がかかりますこれはVMとホストの場合も同じです。非常に簡単に言えば: VMホストが読み取りと書き込みを終了するのを待ちます。

より多くの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タイムスロット。

9
John Siu