web-dev-qa-db-ja.com

仮想化されたCPUコアとスレッド

KVMハイパースレッディングを備えた新しいクアッドコアXeon CPUを搭載したUbuntu 9.10のホストシステム。 Intelの製品ページ で詳しく説明されているように、プロセッサには4つのコアがあります。ただし、8スレッドです。/proc/cpuinfoとhtopはどちらも8プロセッサをリストしますが、それぞれがcpuinfoで4コアを示します。KVM/ QEMUは、ゲストに割り当てることができる8 VCPUも報告します。

私の質問は、VCPUをVMゲストに割り当てるとき、コアごとまたはスレッドごとに割り当てる必要がありますか?KVM/QEMUはサーバーに8つのVCPUを割り当てる必要があると報告しているため、先に進む必要があります以前は2を使用するように設定していたのに、4つのCPUを使用するようにゲストを設定します(合計で4つのVCPUが使用可能であると想定)?割り当てすぎずにホストハードウェアを最大限に活用したいと思います。

更新:Chopper3の答えは間違いなく正しいアプローチです。ただし、スレッド対コアのパフォーマンスの側面を解明できるハードウェアの専門家からの連絡をお待ちしています...誰か?

8
nedm

サーバーが機能を実行するために必要なvCPUの最小数を設定します。それらを過剰に割り当てないでください。簡単にできますスローダウン VM。

8
Chopper3

通常、HTはより重いワークロードで適切に機能しますIO-最初の仮想CPUがIOで待機している間、CPUは他の仮想CPUのキューからより多くの処理タスクをスケジュールできます。すべてのHTサブシステムは、ハードウェアアクセラレーションによるコンテキストスイッチングを実現します。これは、VMを切り替えるときにも使用されるワークロードパターンです。したがって、HTは(通常)コアよりもVMが多い場合、スローダウンを少し減らしますVMは1つの仮想コアを取得します。

VMに複数のvCPUを割り当てると、VM内のアプリがスレッド用に記述されている場合、パフォーマンスが向上しますが、ハイパーバイザーの動作が難しくなります。 2つまたは4つのCPUに同時に時間を割り当てるには-クアッドコアCPUとクアッドvCPU VMがある場合、そのタイムスライス中にスケジュールできるのは1つのVMだけですが、 4つの異なるシングルvCPU VMを同時に実行します)。

5
techieb0y

これはかなりトリッキーです。負荷に応じて、HTはパフォーマンスを約30%向上または低下させる可能性があります。通常、物理コアよりも多くのvCPUを単一のVMに割り当てないことをお勧めしますが、VMがかなりアイドルの場合(もちろん、そのようなVMは実際には必要ありません) CPUが多すぎる場合)、スレッドの数と同じ数のvCPUを割り当てることができます。単一のVMより多くのvCPUを実際に与えたくないスケジュール可能なコアは、私が得ているものです。そして、いずれにせよ、@ Chopper3のアドバイスは正しいです。絶対に必要な数より多くのv-CPUをVMに与えないでください。

そのため、VMの負荷と重要度に応じて、全割り当てを行わないか、物理コア数に固執するか、またはVMあたりのスレッド数と同じくらい高くなります。

さて、HTの問題に入ると、特に物理コアやスレッドよりも多くのvCPUをVMにコミットする場合、LinuxスケジューラがそれらのvCPUを簡単にスケジュールできるようになるため、これは一般的に良いことです。

最後に、kvmにVMに割り当てられたvCPUは、Linuxスケジューラーによってスケジュールされたホスト上のプロセスにすぎないため、ここで実行できるすべての通常の最適化を簡単に適用できます。さらに、cores/sockets設定は、このプロセスがVMのゲストOSに対して表示される方法であり、ホスト上では、VMがどのように認識するかに関係なく、それは単なるプロセスです。

5
dyasny

Chopper3の答えについて詳しく説明すると思います。システムが主にcpu-idleの場合は、大量のvcpuを割り当てないでください。それらがcpu-intenseの場合は、割り当てすぎないように十分注意してください。競合することなく合計8個のvCPUを割り当てることができるはずです。割り当て超過は可能ですが、行う場合は、単一のゲスト、特にCPUを集中的に使用するゲストに8つのvcpuがないことを確認してください。そうしないと、競合が発生します。 KVMスケジューラメカニズムがそれより具体的であることを知りません。

上記は、vCPUと固定されたCPUの以下の理解に基づいていますが、KVMを使用すると、1つのゲスト(または複数のゲスト)が実際のCPUをすべて割り当て、 it(/ them)十分なスレッド。vCPU〜ホストスレッド、ゲストCPU CPU =ホストコア、ゲストCPU(ハイパースレッディングがないため、同じゲスト上でvCPUと固定CPUを混在させてプレイしたことはありません。)

2
Nakarti