Pocket

仮想化基盤におけるCPUリソースに関する簡易整理

  • add this entry to hatena bookmark

VMware vSphere などの仮想化基盤において、ゲストOSが利用できるCPUスペックや、ゲストOS上のMySQLを使ったバッチ処理プログラムが利用できるCPUリソースについて、あらためて考える機会がありました。

基本的な部分の理解不足もあり、少し頭を整理したくなりましたので、CPUの基本的なところから知りたくなった点について簡単にまとめてみました。

CPUクロック、コア数、ハイパースレッドについて

まず、基本的なところの整理として、CPUのクロック、マルチコア、ハイパースレッドについて整理してみました。

  • クロック
    • クロックの向上 = スケールアップ型の進化
    • 同じ処理をシーケンシャルに実行する場合、クロックが良いほど速度向上につながる。
  • マルチコア
    • コア数 = スケールアウト型の進化(ハイパースレッドも同様)
    • 同じ処理を同時並行的に処理する事によって性能速度を向上させるやり方(ハイパースレッドも同様)
  • Intel ハイパースレッド(マルチスレッド)
    • 仮想的にCPUコアを2つに見せるアーキテクチャ
    • 1コアで2つの命令を同時に受け付ける事が出来る。性能は倍増しないが、1.2倍ぐらいの性能向上が見込めるらしい。
    • サーバー仮想化の観点では、スレッド合計数まで仮想CPUを増やしてもCPUの競合は起こらないとのこと。

仮想化とCPUについて

仮想マシンへ割り当てる仮想CPU(vCPU)と物理CPUの関係についてですが、取っ掛かりの分かりやすい言葉がありました。以下1行です。

「仮想マシンへは物理CPUコアを丸ごと割り当てているわけではない。」

以下が、上の1行に関する説明文です。

  • ハイパーバイザは、CPUマルチコアやハイパースレッド(CPUが対応している場合)など論理的にCPUとして扱えるものを「論理プロセッサ(LP)」として管理する。
  • 仮想マシンのプロセッサは「仮想プロセッサ(VP)」である。VPはLP上で実行されるプロセスみたいなもの。ハイパーバイザは、LPの時間を細切れにしてVPに割り当てる。
    • よって、仮想マシンの仮想プロセッサでは、CPUのオーバーコミットが可能となる。
    • VPに割り当て上限を設ける事が出来る(仮想マシンに対して、1GHzまで等のCPUリソース割り当ての制限を行う事ができる事)

以下は、別の角度からの説明文です。仮想マシンと物理ハードウェアの関係性が分かります。

  • 各仮想マシンには仮想ハードウェアがあります。これは、インストールされているゲスト OS やそのアプリケーションからは物理ハードウェアとして認識されます。 仮想マシン上で実行されているゲストOSは、仮想マシン上で動いているとは意識していないわけです。それぞれのゲストOS は、通常のハードウェア デバイスとしてデバイスを認識します。
  • 仮想マシンは、同一のハードウェアで構成されます(少数ながら、システム管理者が制御できるオプションはある)。 同一のハードウェアを持つため、仮想マシンは ハイパーバイザー間で移動できるようになります。
  • CPUなどのリソース割り当てのスケジューリングはハイパーバイザの重要な役割である。

以下は、VMware vSphere における、また別の角度からの説明文です。vCPUから物理CPUへの処理の渡され方について説明されています。

  • 仮想マシンは、1個以上の仮想CPU(vCPU)で構成される。仮想CPUを実行する場合、ハイパーバイザ(VMkernel)は仮想CPUを利用可能なハードウェア実行コンテキストにマッピングする。ハードウェア実行コンテキストは、1 つの実行スレッドをスケジューリングするプロセッサの機能で、CPUコアまたはハイパースレッド (CPU がサポートしている場合) に対応します。 ハイパースレッドまたはマルチコアCPU により、仮想CPU の実行をスケジューリングできるハードウェア実行コンテキストの数が 2 つ以上に増加します。
  • vSphereでは、仮想SMP機能により、仮想マシンに64個までのvCPUを構成できる。例えば、1 個の VCPU を持つ仮想マシンは、一度に 1 つのハードウェア実行コンテキストでスケジューリングされ、 2 個の VCPU を持つ仮想マシンは、同時に 2 つのハードウェア実行コンテキストでスケジュールされます。 仮想マシンに割り当てることができる VCPU の最大数は、サーバ ハードウェアで利用できるハードウェア実行コンテキストの最大数と同じです。

MySQLバッチプログラムとvCPUの関係

MySQL自体は、マルチスレッドに対応したアプリケーションです。よって、vCPUが複数割り当てられた仮想マシン(ゲストOS)上で Webアプリなどで使う場合は、複数割り当てられたvCPUを使って処理させる事が可能です。沢山のvCPUを割り当てていれば、それだけ使えるCPUが増えますので処理性能は上がる事になります。

MySQLからデータを取得する場合、1つのクエリを処理する単位は1スレッドとなります。Webアプリなどでは多くのクエリが発行される事になるので、割り当てられたvCPUをそれぞれ使いまわす事が出来るという事になります。

ただし、バッチプログラムなどで、発行する1つのクエリが非常に重い処理である場合、1つのクエリは1スレッドになりますので、その1つのクエリが扱えるvCPUは1つになります。複数のvCPUがゲストOSに割り当てられていた場合も、非常に重い1つのクエリが使えるvCPUは1つになるわけです。この場合は、vCPUのクロック数が問われる事になります。

ただし、CPUのクロック数よりも先に、ディスクI/O性能がボトルネックになる可能性のほうが高いと思います。このあたりは状況や要件に合わせながら考慮する必要があります。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。