KVM / Qemu、Ubuntu:より多くのゲストCPUがディスクI / Oを急速に拡張するのはなぜですか?


9

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%再現できるので、パフォーマンスが向上する原因を知りたいのですが。


2
iozonebonnie ++などの専用のベンチマークツールを使用して、他の変数を排除します。
ewwhite 2012

実際のCPU負荷がどのように見えるかは興味深いでしょう...隠された場所に導入されたCPUバウンドです(rsyncプラスおそらくsshは確かにある程度の範囲であるため、ネットワークドライバーもそのように導入され、ddは予期しないCPUバウンドを行う可能性があります...)、または実際には、使用可能な実行スレッドが少ないために、互いを最適に待機していないものですか?
rackandboneman 2012

3
実行kvm_traceしてIO_Exits、CPU番号を変更したときの数の変化を確認します。それは、ゲストCPUでスケジュールされるIDEを使用しているためだと思います。virtioを使用すると、パフォーマンスは一定になるはずです。データプレーンがqemuにある場合は、大幅に向上します。別の推測として、バグのある仮想化スタックで知られているディストリビューションを使用している可能性があります。
dyasny

@ ewwhite:はい、専門のテストを実行することをお勧めします。ただし、このI / O動作が発生する理由を最初に理解したいと思います。@ rachandboneman:最後に調べたとき、4つのCPUの待機値は非常に高かった(約70〜80%)。@dyasny:よろしくお願いします。データプレーンがアクティブ化/現在使用されていることを確認するにはどうすればよいですか?
Valentin

data-planeは今のところ実験的なものであり、最初に取り上げたディストリビューションはFedoraになると確信しています。pl.digipedia.org/usenet/thread/11769/28329
dyasny

回答:


9

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

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

この場合、以下が正しいと仮定できます

  1. すべてのテストで、ホストI / O(ディスク)帯域幅は最大になりません。VM("monitoring")のI / Oは、CPUの割り当てが増えると増加します。ホストI / Oがすでに最大になっている場合、I / Oパフォーマンスは向上しません。
  2. "bla"制限要因ではない"monitoring"I / O性能がに変更を加えることなく改善"bla"
  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とcgroupを使用していることについて言及しているこのブログがあります。

KVM内では、各vcpuがLinuxプロセスにマッピングされ、Linuxプロセスはハードウェア支援を利用して、仮想化に必要な「煙とミラー」を作成します。そのため、vcpuはCFSの別のプロセスであり、重要なのはcgroupにとっても重要です。これは、リソースマネージャーとして、Linuxがリソースの割り当てを管理できるようにします。通常、制約の割り当てを設定するために比例します。cgroupは、メモリ、ネットワーク、I / Oにも適用されます。プロセスのグループをスケジューリンググループの一部にして、リソース割り当て要件をプロセスの階層グループに適用できます。

一言で言えば、より多くのCPU =より多くのCPU時間=一定期間内のより多くのI / Oタイムスロット。


この答えを書いてくれてありがとう。「vCPUが増えると、I / Oの処理時間が長くなる」というのが、私が探していた説明です。賞金に値する!
Valentin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.