web-dev-qa-db-ja.com

KVM:どのCPU機能がVMの実行を向上させますか?

私たちは以下のパラメータでUbuntu 12.04を使用しています:

  • デルR910
  • カーネル3.2.0-25-generic#40-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
  • kvm 1:84 + dfsg-0ubuntu16 + 1.0 + noroms + 0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • qemu-common 1.0 + noroms-0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • 4 x Intel(R)Xeon(R)CPU E7- 4870 @ 2.40GHz(それぞれ10個の物理コア、HTおよびIntel VT対応)
  • Windowsゲストには現在VirtIOがありませんが、まもなく変更されます

このマシンでいくつかのWindowsゲストを実行しています。1つはWindows 2003 32ビット、もう1つはWindows 2008(64ビット)です。現在、パフォーマンスの問題に取り組んでおり、CPUモデルで遊んでいます。

通常、Windows 32ビットゲストには「qemu-system-x86_64」を使用します。例:

/usr/bin/qemu-system-x86_64 -S -M pc-1.0 -cpu qemu32 -enable-kvm -m 4096 -smp 4,sockets=4,cores=1,threads=1 [...] 

このゲストのパフォーマンスは少し低いことがわかりました。ベンチマークはまだ実行していませんが、VM内の大量のデータ(ファイル)を1つのディレクトリから別のディレクトリにコピーすると、CPUモデルを「 -cpu qemu32 "から" -cpu Nehalem "。コピーに約2時間40分かかったファイルは、40分以内にコピーされるようになりました。もちろん、これは高品質のテストではなく、より専門的な試みを行う余地があります。しかし、これは正しいCPUモデルを選択するとゲストのパフォーマンスに大きな影響を与える可能性があることを示す明確な指標。

今私は好奇心を持って走りました:

qemu-x86_64 -cpu ?
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]

そして:

kvm -cpu ?model
 x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)
 x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)
 x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)
 x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)
 x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)
 x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)
 x86           [n270]  Intel(R) Atom(TM) CPU N270   @ 1.60GHz
 x86         [athlon]  QEMU Virtual CPU version 1.0
 x86       [pentium3]
 x86       [pentium2]
 x86        [pentium]
 x86            [486]
 x86        [coreduo]  Genuine Intel(R) CPU           T2600  @ 2.16GHz
 x86          [kvm32]  Common 32-bit KVM processor
 x86         [qemu32]  QEMU Virtual CPU version 1.0
 x86          [kvm64]  Common KVM processor
 x86       [core2duo]  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
 x86         [phenom]  AMD Phenom(tm) 9550 Quad-Core Processor
 x86         [qemu64]  QEMU Virtual CPU version 1.0

これらすべての異なるバージョンがあるため、推測するのは少し難しいです。 「Nehalem」は、そのリストの中で最もパフォーマンスが高いようです。ここで、どのCPUモデルがゲストに最適であるかをどのように判断するのでしょうか。インターネットを閲覧して、次のリソースを見つけました。

それらのサイトを正しく読んだとき、彼らは「-cpu Host」が最高のパフォーマンスをもたらすかもしれないと主張しています。 KVMホストは同等に(まったく同じハードウェア)装備されているため、移行についての心配はまだありません。

だから、経験豊富なKVM管理者は何を推奨しますか?「このモデルはそのゲストOSに最適です」のようなゴールデンルールまたはマトリックスさえありますか?

この情報を自分で見つけられたとしたら、すみません。さまざまなGoogle検索を実行し、多くのWebサイトを閲覧しました。私の質問に対する答えを見つけることができませんでした。

21
Valentin

とても簡単です。同種のクラスターと単一のホストのセットアップでは、Hostオプションを使用します。混合クラスターの場合、使用可能な最も低いCPUバージョンを使用するため、一方のホストがPenrynで、もう一方のNehalemは、両方でPenrynを使用します。

RHEVまたはoVirtを使用している場合、これはすでに組み込まれています。VMWareには「EVC」と呼ばれるものがあり、これを巨大な機能として位置付けています。

パフォーマンスに戻ると、virtioを配置できるすべての場所に間違いなく必要です。それでもパフォーマンスのボトルネックが発生した場合は、通常、発生場所に応じて、ケースごとに対処できます。

[offtop]ディストリビューションの選択について、別のスレッドですでにコメントしました[/ offtop]

13
dyasny

Windowsゲストには現在VirtIOがありません

何かを調整して時間を無駄にしないでください。
virtIOドライバーをインストールして、戻ってきます。その違いは非常に大きいため、今見つけることができる拡張機能はvirtIOでは意味がありません。

サーバーの1つを使用した例:
-virtIOがない場合、W2k3は約10のターミナルサーバーユーザーを処理できます
-virtIOを使用すると、同じOSを備えた同じマシンが現在120〜125人のユーザーを処理し、ほとんどスローダウンしません。そして、同じ物理コンピューターでSQL Serverを実行する別の仮想マシンを追加しました

11
Gregory MOUSSAT

Qemuは、他の多くのハイパーバイザーと同じようには機能しません。まず、完全なエミュレーションを提供できます。つまり、ARMプロセッサなどでx86コードを実行できます。KVMモードでは、使用しているため、実際にはそれを行う...プロセッサは何に関係なく公開されますが、OSに報告される内容は-cpuフラグによって変更されます。

より高速な速度が必要な場合は、仮想プロセッサの機能を実際のプロセッサにできるだけ一致させることを試みることが出発点です。これにより、最適でないオペコードがタスクを実行するために呼び出されるケースが減り、ハードウェアで実行できないオペコードが最初に何かに変換されることも減ります。 Xeonプロセッサのモデルは2011年の初めにリリースされたため、おそらくCore i7シリーズとほぼインラインでサポートされています。そのため、Nehalemアーキテクチャはあなたの最高のエミュレーションだと思います。

リンクの1つから引用する( Tuning KVM ):

使用可能なすべてのホストプロセッサ機能をゲストに渡すには、コマンドラインスイッチを使用します

 qemu -cpu Host

互換性を維持したい場合は、選択した機能をゲストに公開できます。すべてのホストにこれらの機能がある場合、互換性は維持されます。

 qemu -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic

したがって、問題が発生するほど問題が発生する可能性があると感じた場合は、サポートされているすべての命令セットを見つけることができます。

ただし、ほとんどの場合、-cpu Hostを使用します。使用可能なフラグが少ないCPUを指定すると、アプリケーションは、フラグを高速化できる機能の使用を回避します。

8
Jeff Ferland

「-cpu Host」オプションが混乱しています。このオプションは、ホストシステムに固有のすべてのCPU機能だけを有効にするのではなく、CPUがサポートするすべての機能と、CPUがサポートしていない場合でもエミュレートできるすべての機能を有効にします。

-cpuホスト
は良いオプションですが、最も効率的ではありません。CPUがサポートしていないエミュレート可能なオプションを有効にする可能性があるため、ゲストシステムは、エミュレートされます。

ソース: http://wiki.qemu.org/Features/CPUModels

3
Joe Huss