このページの本文へ

SP1までわかる!Windows Server 2008 R2入門 第2回

Windows Server 2008 R2の大きな変化は中核から

R2の新カーネルは256コアもの大規模サーバーに対応

2011年05月25日 09時00分更新

文● 横山哲也/グローバルナレッジネットワーク

  • この記事をはてなブックマークに追加
  • 本文印刷

Windows Server 2008 R2の変更点でまず大きいのが、OSの中核であるカーネルだ。まずは、マルチプロセッサーサポートの強化について見てみよう。

対応コア数は最大256コアに

 Windows Server 2008では、サポートできるCPUコア数が64まで(32ビット版は32)だった。しかし、インテルおよびAMDはマルチコアCPU化を進めており、この先を考えると64コアのサポートでは十分とはいえない。たとえば、AMDの「Opteron 8400シリーズ」は6コアCPUで、8基(8スロット)の構成に対応する。この場合の実行総コア数は48(6×8)であり、32ビット版の限界を超えている。さらに、同様の構成でハイパースレッディングが使えるCPUであれば合計96コアとなり、64ビット版の限界を超えてしまう。

 こうした事態に対応するため、Windows Server 2008 R2の対応コア数は最大256コアに強化された。これにより、当面の拡張性を確保したといえるだろう。ただし、コア数とは別に、エディションごとのプロセッサ数(ソケット数)の制限は存在する。

表1 Windows Server 2008 R2 SP1のシステム要件
エディション最大プロセッサ数最大メモリ容量
Standard432GB
Enterprise82TB
Datacenter64
Itanium-Based Systems

 また、256コアがすべて対等に扱われるわけではない。ここで混乱を避けるため、「コア」の意味を整理しておこう。ハイパースレッディングにより生成される仮想的なCPU単位を含め、プログラムから認識されるCPUコアを、「論理プロセッサー(LP)」または「論理コア」と呼ぶ。一方、パッケージ内に実装されたCPU単位は「物理コア」である。また、単に「コア」と呼んだ場合は、物理コアを示すことが多い。そしてパッケージとして構成されたCPUは、利用形態から「ソケット」と呼ぶ。

 過去のWindowsでは、論理コアの割り当てをネイティブワードの各ビットで管理していた。ネイティブワードとは「そのCPUが使えるもっとも自然な単位」で、x86では32ビット、x64では64ビットである。そのため利用可能なCPUコアはx86で32、x64で64だった。

 Windows Server 2008 R2では「プロセッサーグループ」が導入され、64を超える論理コアを管理できるようになった。プロセッサーグループの上限はいまのところ4だ。1つのプロセッサーグループで64の論理コアを管理できるため、論理コアの総数は256(64×4)となる。64論理コア以下のシステムでは、単一のプロセッサーグループのみだ。

 一方、64論理コアを超えるシステムでは複数のプロセッサグループを扱うが、この場合、NUMAノードが考慮される(図1)。NUMAは「Non-UniformMemory Access」の略で、システムを構成するCPUによってメモリアクセスの速度が異なる(一様でない=Non-Uniform)アーキテクチャのことである

図1 NUMAとプロセッサーグループの利用(LPは論理プロセッサー)

メニーコア環境で力を発揮するNUMAに対応

 現在の一般的なコンピューターシステムは、すべてのCPUが同じメモリバス(またはメモリスイッチ)を共有するため、同一システム内のどのCPUを使ってもメモリアクセスの速度が変わることはない。これをUMA(UniformMemory Access)と呼ぶ。UMAではメモリバスがボトルネックになるため、CPU数の増大にともないメモリアクセスの競合が発生しやすい。だが、競合を避けるためにメモリアクセスを高速化するとハードウェアコストがかさむうえ、物理的な速度の上限はどのみち避けられない。コストの割に性能がでないのだ。

 そこでNUMAでは、少数のCPUソケットと物理メモリのセット(NUMAノード)を複数用意し、NUMAノード間を別のバスまたはスイッチで接続した。NUMAノード内のメモリアクセスはUMAとして構成され、高速で均一なメモリアクセスができる。一方、NUMAノード間のメモリアクセスは、比較的低速ではあるが、独立して動作するため競合が起きにくい。

 NUMAは、独立したプログラムが多数動作するサーバーに有効である。ただし、最大の性能を発揮するには、同じ論理コアで動作させたいデータとプログラムを、同じNUMAノード内に配置する必要がある

 実は、NUMAはWindows Server2003 からサポートされている。しかし、NUMAシステムの総論理コア数は100を超える場合が多い。そのため、Windows Server 2008 R2ではじめてNUMAの真価を発揮できるようになったといえる。

 なお、Windows Server 2008 R2でもアフィニティ(論理コアとスレッドの関連づけ)は単一のネイティブワードで管理するため、同一プロセッサーグループでのみ構成される。また、既定では同一プロセス内の全スレッドは同じプロセッサーグループで動作する。

ディスパッチャーロックの廃止

 さて、サポートする論理コアが増加すると、同時実行可能なスレッドも増加する。このとき問題になるのが、「ディスパッチャーロック」だ。ディスパッチャーロックは、スレッドの状態を管理するデータ構造を保護するための仕組みである。以前のWindowsでは、スレッドの状態が変化する場合、スレッド管理情報全体をロックして排他制御を行なっていたため、スケーラビリティに限界があった。

 そこで、Windows Server 2008 R2では、ディスパッチャーロックを廃止し、管理情報全体ではなく必要に応じて個々のデータ領域をロックすることで、ボトルネックを排除した。また、多くの処理をロックなしで実行できるようにアルゴリズムを変更している。マイクロソフトの調査では、論理コアが128から256に増加した場合、1.7倍のパフォーマンス向上が見られたという。一般に、論理コアを増やした場合の性能向上率はコア数が増えるほど鈍る。

 Windows 2000のころ、シングルプロセッサーからデュアルプロセッサーにすることによる性能向上は1.5倍から1.7倍といわれていた。このことを考えると、128コアから256コアで1.7倍というのは、驚くべき性能向上率である。

筆者紹介:横山哲也

グローバルナレッジネットワーク株式会社
マイクロソフト認定トレーナ/マイクロソフトMVP
1994年からSEおよびプログラマー向けにWindowsのサーバーの教育を担当。1996年、グローバルナレッジネットワーク設立とともに同社に移籍。2003年より「マイクロソフトMVP(Directory Services)」


 本記事は、月刊アスキードットテクノロジーズ2009年12月号の特集2「Windows Server 2008 R2の強化点」を再編集し、Service Pack 1に関する情報を追加したものです。

カテゴリートップへ

この連載の記事
ピックアップ