日本仮想化技術の宮原です。 ネットワーク、ストレージとベンチマークを行ってきたので、今回はCPUのベンチマークを行ってみたいと思います。
CPUの性能は、仮想化されて動作しているクラウド環境でも、比較的オーバーヘッドが少なく、サイジングが容易な要素といえます。
それでも、ニフティクラウドではサーバーの種別によって仮想vCPU数が異なっていますし、コストパフォーマンスの高いType-eとType-hがあるので、どのサーバーを選択すれば良いか分からない人も多いのではないでしょうか。
そこで、実際の物理サーバーのCPUベンチマークの結果と比較しながら、CPU性能のサイジング方法について解説していきます。
CPU性能の考え方
まずCPU性能ついて記述していきます。CPU性能を決定づけるものは、おおむね以下の点になります。
- CPUの種類、世代
- クロック数
- コア数
- スレッド数
CPUの種類、世代
サーバーで使用されるCPUにはIntelのXeonやAMDのOpteronなどがありますが、そのCPUがリリースされた時期などによって性能が異なっています。
たとえば、IPC(Instructions Per Clock cycle)と呼ばれるクロックあたりに実行できる命令数などがCPUの種類、世代によって異なるため、同じクロック数でも処理性能が異なる場合があります。
その他にも、CPUに内蔵されているキャッシュ容量やNUMA(Non-Uniform Memory Access)構成など、CPU性能を左右する要素は多々あります。
ただし、少々乱暴な言い方ですが、性能が2倍も3倍も異なるものではありません。
また、新しいCPUの方が性能が良くなっていることがほとんどなので、古いCPUから新しいCPUに載せ替えていくのであれば、CPUサイジングの際にあまり厳密に考える必要はないでしょう。
クロック数
CPUクロック数は、CPUサイジングにおいて最も分かりやすい指標となります。
ただし、最近のCPUはクロック数の上限が頭打ちになっていることもあり、消費電力や発熱を抑えるためにクロック数は抑え目で、プロセッサーあたりのコア数を増やす傾向にあるようです。
コア数
以前は、1つのCPUパッケージには1つのCPUコアが搭載されているのが普通でしたが、現在では、1つのCPUパッケージに複数のCPUコアが搭載されているのが当たり前となりました。
OS上でマルチプロセスにプログラムを実行する場合、あるいはプログラムが内部でマルチスレッドを利用して並列処理を行う場合、CPUコアが多い方が性能的に有利になります。
逆の言い方をすれば、同時並行で動作するプロセスの数が多くなかったり、プログラムがマルチスレッドに対応していなければ、いくらCPUコア数を増やしても遊んでいる(Idle状態)になるだけなので、性能は向上しません。
マルチコアが有効に働いているかどうかは、OS上の性能モニタリングツールを使って各CPUコアの使用状況を見れば判断できるでしょう。
また、プロセスモニターを使えば、動作しているプロセス数やスレッド数を確認できます。
スレッド数
CPUにおけるスレッド数は、Intel Xeonなどに搭載されている「Hyper Threading」のような技術を指します。
これはCPUコアの内部的な処理において発生する、何もしていない時間に別の処理を行わせるための技術(SMT:Simultaneous Multithreading)です。
見かけ上、CPUコア数が2倍になるように見えますが、実際の性能向上は良くて30%程度の向上に留まります。
どの程度の性能向上があるかは実際に動かしてみないと分かりません(場合によってはまったく性能向上しない)ので、CPUサイジングの際には「ボーナス」の性能向上分として計算に含めないでおくことも多々あります。
これらを踏まえて、実際にCPUのベンチマークテストを行い、性能の傾向を探ってみましょう。 先に結果の表とグラフを出しておきますが、テストの順を追って説明していきます。
CPU種別/サーバータイプ | Single(Score/MHz) | Multi(Score/MHz) | CPU詳細 |
---|---|---|---|
E5500 | 0.32 | 0.30 | E5506 2.13GHz(4core) |
E5 | 0.35 | 0.34 | E5 2630 2.3GHz(6core/12Thread) |
e-small4 | 0.36 | 0.19 | E5 2690 v2 3GHz(1vCPU,Type-e) |
small4 | 0.47 | 0.44 | E5 2690 v2 3GHz(1vCPU,Type-h) |
medium4 | 0.48 | 0.42 | E5 2690 v2 3GHz(2vCPU,Type-h) |
物理サーバーのベンチマーク
まず、物理サーバーのベンチマークを行います。 OSには、Windows Server 2012 R2、ベンチマークには、CPU-Zを使用しました。
CPU-Zのベンチマークは、かなりシンプルなベンチマークとなっているので、CPUの単純な性能を測定していると考えてください。
実際のCPU処理には、CPUとしての演算処理だけでなく、メモリアクセス、ディスクやネットワークなどのI/Oなどが影響するため、データベースなどのアプリケーションを動作させて負荷の高い処理を行わせる場合には、実際の処理を行って比較する必要があります。
CPU-Zのベンチマーク結果は、CPUコアの単体性能とマルチスレッドで並列処理を行わせた場合の性能の2つをスコア化して表示してくれます。
今回は用意できたマシンのCPUが2種類ありましたが、CPUクロック数やコア数、スレッド数が異なるので、それぞれの結果に対してCPUクロック1MHzあたりのスコアを算出して相対的な比較をしています。
用意したCPUは、Intel Xeon 5500番台の世代とXeon E5の一番最初の世代(v1)になります。 この間に、Xeon 5600番台の世代が入るので、2世代離れていることになります。
大体、10%程度クロックあたりの性能が向上しているのが分かります。 Xeon E5にはHyper Threadingが搭載されていますが、大体30%程度の性能向上があるとして計算しています。
CPU種別 | Single(Score/MHz) | Multi(Score/MHz) | CPU詳細 |
---|---|---|---|
E5500 | 0.32 | 0.30 | E5506 2.13GHz(4core) |
E5 | 0.35 | 0.34 | E5 2630 2.3GHz(6core/12Thread) |
Type-eとType-hを比較
次に、ニフティクラウド上にもWindows Server 2012 R2のサーバーを用意し、同じくCPU-Zでベンチマークを行います。 最初に、仮想vCPUが1つメモリが4GBのe-small4とsmall4のサーバーで比較してみます。
結果を見ると、Type-eのサーバーはCPU性能に制限がかかっており、CPUコアの単体性能も抑え目であること、さらにマルチスレッドの処理を行うと1つの仮想vCPUで複数の処理を切り替えて行っているため性能の上限に突き当たり、見かけ上の性能が低下している(スコアが低くなる)と思われる結果になりました。
一方、Type-hの方はCPU性能に特別な制限がかかっていないためか、単体性能、マルチスレッド性能に大きな差違は認められません。
また、CPUもXeon E5 v3とさらに世代が新しくなっているため、クロックあたりの性能が向上しているのが分かります。
Intel Xeon 5500番台の世代と比べると、約45%ほど性能が向上しています。
サーバータイプ | Single(Score/MHz) | Multi(Score/MHz) | CPU詳細 |
---|---|---|---|
e-small4 | 0.36 | 0.19 | E5 2690 v2 3GHz (1vCPU,Type-e) |
small4 | 0.47 | 0.44 | E5 2690 v2 3GHz (1vCPU,Type-h) |
複数vCPUの性能向上
では、サーバーに複数仮想vCPUを割り当てると性能はどう変化するでしょうか。
メモリ容量は変更せず、仮想vCPUを2つ割り当てたmedium4のサーバーでテストを行います。
すると、CPUコアの単体性能はそれほど変わりませんが、マルチスレッド処理の結果はおよそ1.9倍となりました。
CPU数を増やせば正比例で性能が向上するわけではありませんが、かなり良好な性能向上結果が得られています。
複数のプロセスが同時並行で動作したり、マルチスレッドなプログラムを動作させる上で性能が不足するような場合には、サーバーへの仮想vCPUの割当数を増やすことで性能向上を見込むことができるので、システムの負荷状況に応じてサーバーの種類を変更することも考えてみる価値はありそうです。
サーバータイプ | Single(Score/MHz) | Multi(Score/MHz) | CPU詳細 |
---|---|---|---|
small4 | 0.47 | 0.44 | E5 2690 v2 3GHz (1vCPU,Type-h) |
medium4 | 0.48 | 0.42 | E5 2690 v2 3GHz (2vCPU,Type-h) |
どのようにCPUサイジングを行うか
結果から見て分かる通り、ニフティクラウドでは新しい世代のCPUを使用しているので、古い物理サーバーから移行するのであれば単純にクロック数だけで比較してもお釣りがくる計算になります。
また、今回はCPUの全力性能を測定するベンチマークでしたが、実際のアプリケーションでは驚くほどCPUの使用率は低いものです。
統計的には20%から30%程度と言われますが、安全率を多めに見込みたいのであれば50%程度でも良いでしょう。
現在使用している物理サーバーのCPUの性能を、以下の数式で導き出します。
クロック数(MHz)×コア数×0.5=必要CPU性能(MHz)
ニフティクラウドは、3GHzのCPUを使っているので、必要CPU性能を3GHz(3000MHz)で割ることで、仮想vCPUがいくつ必要になるか割り出すことができます。
もし、必要な仮想vCPU数が、0.5以下になるようであれば、Type-eのサーバーを選択できるでしょう。
いずれにしろ、CPUのサイジングは実際にアプリケーションを動かしてみないと分からない事も多々ありますので、本格的な移行を行う前に上記のような指標をベースに仮のクラウド設計を行い、テスト的にニフティクラウド上で主要なアプリケーションを動かしてみて、性能的に問題がないかを検証するのが、失敗せずにクラウド移行を実現する近道といえるでしょう。
注:ニフティクラウドでは、CPU型番などの情報を公開していませんので、計測したゾーンやサーバーよって異なる場合があります。
注:本計測は、あくまで筆者の環境を使った計測時点での値であり、計測環境・計測時間によって異なる場合あります。参考程度に留めておいてください。