KVM:どのCPU機能がVMの実行を改善しますか?


21

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 [...] 

このゲストのパフォーマンスは少し低いことが判明しました。ベンチマークはまだ実行していませんが、CPUモデルを「-cpu qemu32」から「-cpu Nehalem」に切り替えると、VM内の1つのディレクトリから別のディレクトリへの大量のデータ(ファイル)のコピーがはるかに速くなるとしましょう「。コピーに約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サイトを閲覧しました。私の質問に答える何かを見つけることができませんでした。


なぜ-cpuスイッチを使用する必要があるのですか?そのままにしておきます。
-psusi

1
なぜそれを気にしないのですか?Afaikそれはパフォーマンスの改善をもたらす可能性があります。
バレンティン

介入して物事をエミュレートする必要がある場合、パフォーマンスが低下します。試してみてください。
-psusi

2
libvirtは設定しないため、パラメーター「-host qemu32」を自動的に追加することがわかりました。
バレンティン

3
@psusi:今日それをテストしました... -cpuスイッチを離れると、最高のCPUモデルを選択するのと同じくらいパフォーマンスが良くなります。
バレンティン

回答:


13

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

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

パフォーマンスに戻りますが、どこにでもvirtioが必要です。それでもパフォーマンスのボトルネックが発生する場合は、発生する場所に応じて、通常、ケースごとに対処できます。

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


dyasnyに感謝します。あなたが返事をして、ある種の「黄金律」を私に提供してくれることを願っていました!
バレンティン

11

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

微調整で時間を無駄にしないでください。
virtIOドライバーをインストールして戻ってください。違いは非常に大きいため、現在見つかっている拡張機能はvirtIOでは意味を持ちません。

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


ヒントをありがとう。はい、VirtIOは完全に有効にする必要がありますが、最初に解決する必要があるWindows 2003ゲストでいくつかの問題が発生しています。それに加えて、CPUモデルのトピックについて明確にしたいと思います。
バレンティン

これがHyper-Vを使用する理由の1つです。2008年以来、これはインストールなしを意味し、Windows Updateで維持されるHyper-Vのすべてのドライバーを意味します。互換性の問題は致命的です。
トムトム

@TomTom Hyper-Vは、Windowsの実行が認定されている唯一のハイパーバイザーではありません。そして、この文脈での認定はSVVP / WHQLを意味します。
dyasny

1
いいえ、それはドライバーがすでにインストールされているので、箱から出して動作する唯一のものです;)さらに、Hyper-VドライバーにピギーバックするXENと思います。外部で更新された別の要素を維持する必要がないことは、本当に素晴らしいことです。それらが署名されているかどうかは気にしない-ポイントは、すべてがWindowsの更新を通じて来るので、別のプロバイダーを見る必要がないことです。私は、MSがサードパーティのソフトウェアのWindows Updateを開くことを望んでいます;)
TomTom

1
スリップストリームとVMテンプレートについて聞いたことがあると確信しているため、(ほとんど)それらについては言及しません。
dyasny

8

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

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

リンクの1つから引用(KVMのチューニング):

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

 qemu -cpu host

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

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

したがって、問題を作成するのに十分に物事を移動する可能性があると感じた場合、現在のプロセッサまたは将来サポートする可能性のあるすべてのサポートされている命令セットを見つけることができます。

ほとんどの場合、しかし、あなたはに固執したいです-cpu host。使用可能なフラグが少ないCPUを指定すると、アプリケーションはそれらをより高速にする機能の使用を避けます。


4
彼はKVMを使用しています。KVMはこれらの仮想化拡張機能を必要とし、エミュレーションを実行しません。qemuに基づいている場合でも
ハビエル

1
それでも、-cpu hostを使用する努力と推奨事項について、私から+1票を投じます!
バレンティン

3

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

-cpu host
は良いオプションですが、最も効率的ではありません。これは、cpuがサポートしていないエミュレート可能なオプションを有効にする可能性があるため、ゲストシステムはエミュレートする必要があるこれらの機能のいずれかを使用しようとすると、少し遅くなる可能性があります。

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


1
当初、この回答は、エミュレートできるSSEサポートなどの指示サポートに関連すると考えていました。ただし、KVMモードまたはTCGのいずれかで実行し、両方を組み合わせて実行するわけではないので、当然のことです。したがって、ここで言及されるエミュレーションは、ハードウェアサポートはないが、カーネルはそれを偽造できるx2apicのようなものかもしれないと思います。最初は混乱していたので、上記のことを明確にするためにこれに言及しただけです。
ニールマクギル

-2

CentOS 6.7では、Dell R910で適切なKVM + Spiceパフォーマンスが得られます。一度試してみると、他には何も(真剣に)戻れないと思います!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.