第1回 最新モデルを意識したCPUとメモリのサイジングWindows Server 2012 R2時代のHyper-Vサーバ設計術(2/3 ページ)

» 2013年08月22日 17時03分 公開
[小川大地(Microsoft MVP for Virtual Machine)日本ヒューレット・パッカード]

Hyper-Vのプロセッサ要件

 まずはHyper-Vサーバのためのプロセッサ*2の要件から説明しよう。Hyper-Vでは、プロセッサの機能要件がいくつか定められている。煩わしいことに、マイクロソフトが表記する名称とIntelプロセッサ/AMDプロセッサでの実装名がそれぞれ異なっている。まとめると次の表のようになる。

*2 「プロセッサ」と「CPU」という用語について:
この2つの用語はほぼ同義だが、本稿では、製品そのものを指す場合はベンダの表記に従ってプロセッサとし(例:Intel Xeonプロセッサ、AMD Opteronプロセッサなど)、その中に含まれる機能を指す場合はCPUとする。


要件 機能 Intelプロセッサ AMDプロセッサ
必須要件 x64命令セット Intel 64 AMD64
データ実行防止(DEP) XD bit(Execute Disable bit) NX bit(No Execute bit)
仮想化支援機構(第1世代) Intel VT-x(Intel Virtualization Technology) AMD-V(AMD Virtualization)
推奨要件 仮想化支援機構(第2世代:SLAT) Intel EPT(Extended Page Table) AMD RVI(Rapid Virtualization Indexing)
表1「Windows Server 2012のHyper-Vのプロセッサ要件」
ここ数年以内に発売された企業用サーバであれば、これらの推奨要件を含めてすべて満たしているだろう。なお、これらの要件はWindows Server 2008 R2のHyper-Vの頃から変わっていない。

 Windows 8のクライアントHyper-Vと違い、Windows Server 2012のHyper-VはSLAT(Second Level Address Translation)非対応のプロセッサでも利用できるが、メモリ周りの性能向上や、RemoteFX、SR-IOVといった上級機能についてはSLAT対応が必要となる。

 ただし、実際はここで悩むことはないだろう。Windows Server 2012のHyper-Vに対応する標準的な商用サーバであれば、SLATを含めてすべてのプロセッサ要件を満たしているためだ。

メニー・コア化によるプロセッサ性能の向上

 サーバ仮想化は仮想マシンを複数並列に動かすことから「クロック周波数よりプロセッサ・コアの数が重要」と言われている。これを踏まえるかのように、現行のプロセッサでは本当に多くのコアが内蔵されるようになった(表2)。

時期 2006 2007 2008 2009 2010 2011 2012 2013
Intel シリーズ名 Xeon
5300
Xeon
5400
Xeon
5500
Xeon
5600
Xeon
E5-2600
Xeon
E5-2600v2
アーキテクチャ(開発コード名) Clovertown Harpertown Nehalem-EP Westmere-EP Sandy Bridge-EP Ivy Bridge-EP
最大コア数 4コア 4コア 4コア/
8スレッド
6コア/12スレッド 8コア/
16スレッド
12コア/
24スレッド
SLAT対応 × ○(Intel EPT)
AMD シリーズ名 Opteron
2200
Opteron
2300
Opteron
2400
Opteron
6100
Opteron
6200
Opteron
6300
アーキテクチャ(開発コード名) Santa Rosa Barcelona, Shanghai Istanbul Magny-Cours Interlagos Abu Dhabi
最大コア数 2コア 4コア 6コア 12コア 16コア 16コア
SLAT対応 × ○(AMD RVI)
表2「x86サーバ用のメインストリーム・プロセッサの変遷」
企業ユースの仮想化で広く利用される2ソケット・サーバ向けプロセッサの変遷をまとめた。クライアントPC向けでは最新のHaswellアーキテクチャに対応した製品がリリース済みだが、サーバ向けプロセッサは1世代遅れており、Ivy Bridgeアーキテクチャの「Intel Xeon E5-2600 v2シリーズ」が2013年秋にリリースされる予定だ。

 これからサーバを新規調達する場合、仮想化用に広く利用されている2ソケット・サーバで考えると、Intelが2013年秋に発表予定のXeon E5-2600 v2シリーズで最大24個、AMDが2012年末より販売しているOpteron 6300シリーズで最大32個の物理コアが1台のサーバに搭載できることになる。クワッド・コア(4コア)が中心で、2ソケット・サーバでは8コア程度だった5〜6年前を考えると、コア数だけで300〜400%もの性能向上だ。さらに、コアの数だけでなく、コア自身の単体性能も向上しているため、既存サーバとの性能差は想像以上のものになるだろう。

「1コア=1仮想マシン」ルールは健在?

 「集約率」というキーワードを用いたが、サーバ仮想化には黎明期から広く知られているガイドラインがある。「1コア=1仮想マシン」というルールだ。これに準拠すれば、先ほどの24コアや32コアの最新サーバにはそれぞれ24台や32台もの仮想マシンをホストできることになってしまうが、このガイドラインは現在でも通用するだろうか?

 結論から述べると、このガイドラインは最近ではあまり適合しない。昨今の仮想化システムの集約率は、最新モデルを調達したとしても、2ソケット・サーバであれば10仮想マシン前後といったところである。

 「1コア=1仮想マシン」と広く言われていたのは主に2010年以前だ。その頃のサーバ仮想化はWindows NT 4.0やWindows 2000などを使ったシステムの“延命”目的が多かった。もちろん、延命以外の目的にも利用されていたが、Windows Server 2003やWindows Server 2008のような32bit OSが中心であり、シングル・コアでも十分動くものであった。

 これに比べて、今後のサーバ仮想化で利用されるOSはWindows Server 2008 R2やWindows Server 2012といった64bit OSが中心である。これらのOSは最小要件としてはシングル・コアでも動作するものの、実際にシングル・コアのマシンにインストールすると極めてレスポンスが悪くなる。昨今のメニー・コア化を踏まえてOS自体がマルチ・コア環境に最適化されているためだと思われる。さらに、その上で動作するアプリケーションについても、同様に最近のものはマルチ・コアに最適化されていることが多い。

 「1コア=1仮想マシン」が通用しないとなると、それに代わる新しいガイドラインが欲しいところだ。仮想化が当たり前になった現在、仮想マシンの用途も多様化しているためにガイドラインにするのは難しいが、あえて定義するなら次のようにするとよいだろう。

サーバに搭載されたプロセッサ・コア数 ≧ 仮想マシンに設定するVP*3の総数

*3 VP:仮想プロセッサ。ゲストに設定するCPUのことで、vCPUとも呼ばれる。


 例えば、12コアのプロセッサを2つ搭載した、計24コアのサーバであれば、2VPの仮想マシンを12台集約できる計算になる。もちろん、2VPを8台、4VPを2台という組み合わせでもよい。各仮想マシンのVP数は利用するアプリの負荷やライセンスの課金方式(VP単位や物理ソケット単位、物理ホスト単位など)で考えよう。ただし、無意味にVPを増やすと性能低下を招きやすくなるので注意が必要だ。

 なお、仮想マシン上にインストールするゲストOSによって、利用可能なVP数には制限があることに注意していただきたい。例えばWindows Server 2012以降では仮想マシンの最大VP数は64個までと、大きく改善されているが、それ以前のWindows Server 2003やWindows Server 2008、Windows Server 2008 R2、デスクトップOSなどでは2VPや4VPなどの上限が設けられている。詳細は以下のページの「ソフトウェア要件 (サポート対象のゲスト オペレーティング システム用)」の項を参照していただきたい。

 なお、このガイドラインはかなり単純化した場合の話であり、実際の設計ではホスト・クラスタリング(HA)によってフェイル・オーバしてくる仮想マシンのためのバッファも必要である(クラスタを加味した設計については最終回で解説する)。

Hyper-Threadingはどう考える?

 先ほどのガイドラインでは「プロセッサ・コア数」という言葉を使用した。これはプロセッサの「物理コア数」のことであり、「Hyper-Threading(HT)」技術によって2倍に認識される「論理プロセッサ(LP)数」のことではない。

 LPではなく物理コアということで、Hyper-VではHTを無効にすべきなのかというと、そういうことではない。Intel Xeon 5500シリーズで復活したHTは以前より優れており、仮想化ホストでも有効化することをお勧めする。具体的には、集約率のサイジングに限って、HTを無視するだけだ。

 具体的には、HTを有効化すると、OSにはプロセッサ・コア数が2倍となって認識される。しかし、HTは処理を流すラインを2倍にするだけで、処理量まで2倍になるわけではない。これは図4のような高速道路の料金所をイメージすると理解しやすいだろう。

図4「Hyper-Threadingの動作イメージ」 図4「Hyper-Threadingの動作イメージ」
Hyper-Threading (HT)の動作を理解する場合、高速道路における料金所をイメージするとよい。料金所の反対側にも窓を作ると、中にいる収受員が身体を回して対応することで1つの料金所で2つのゲートに対応できる。しかし、収受員は一度に片側の窓しか対応できないため、2倍の処理をこなせるわけではない。実際は20〜30%効率化される程度だ。HTは当初NetBurstマイクロアーキテクチャの時代に導入されたが、次のCoreマイクロアーキテクチャの世代(Intel Xeon 5300/5400シリーズ)ではサポートされていなかった。だがその後のNehalem世代(Intel Xeon 5500シリーズ)から再びサポートされるようになった。

 HTはこの料金所と同じであり、全体的な処理が20〜30%効率化される程度だ。したがって、HTによってLPが2倍に認識されたからといって、2倍の性能向上と見積ってしまうのは非常に危険である。このような理由から、仮想マシン集約率のサイジングの際にHTは無いものとして考えるべきだ(実際の物理コア数ベースで計算する、ということ)。HTによる効率化は、仮想マシンを動かすためのオーバーヘッドと、万一のためのバッファで相殺されると考えるとよいだろう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。