●マルチコアの問題点の1つはキャッシュコヒーレンシ CPUベンダーはマルチコアへ向かってまっしぐらに進んでいる。しかし、マルチコアCPUにはさまざまな課題がある。その1つは、メモリコヒーレンシの保持だ。これは、非常に重要な問題で、マルチコア化の最大の障壁になると言われている。 各CPUコアがキャッシュメモリを備えていると、CPUコアが互いのキャッシュ内容をスヌープする必要がある。すると、スヌープとキャッシュ内容の転送のトラフィックが発生する。CPUコア数が2個程度なら、デュアルプロセッサ構成と同じことで、コヒーレンシの維持もそれほど大変ではない。しかし、CPUコアが10個以上になると、コヒーレンシは大変な重荷になってしまう。下手すると、コヒーレンシ保持のためのトラフィックが増えて、パフォーマンスが上がらなくなりかねない。 2月に行なわれた、マルチコアCPU「Cell」の発表会でも、真っ先に出たのはその質問だった。Cellでは、この問題を解決するため、各SPE(Synergistic Processor Element)はキャッシュを持たない。それぞれのSPEが独自のメモリ空間をあてた、専用のメモリ「Local Store」を持つ。Local Storeはメインメモリのキャッシュではないため、コヒーレンシを保持する必要がない。 ●Intelにとって仮想化はメニイコア構想の一部 では、キャッシュが欠かせないPC&サーバー向けプロセッサベンダー、特に、メニイコア(10個以上のCPUコアを載せた)CPUへ邁進するIntelはこの問題をどうやって解決するつもりなのか。 Intelの研究部門を統括するJustin R. Rattner(ジャスティン・R・ラトナー)氏(Intel Senior Fellow, Director, Corporate Technology Group)は、仮想化(Virtualization)技術がコヒーレンシ問題を解決するカギになると言う。 「Vanderpool(Intelの仮想化技術=Virtualization Technology)は、メニイコア構想の一部だ。メニイコアの課題のひとつは、キャッシュコヒーレンシだ。コヒーレンシを保持しなければならないCPUコア数が多くなると、トラフィックが増えてしまう。そのため、キャッシュコヒーレンシのトラフィックを全てのCPUコアには行かせたくない。ここで、仮想化が重要になると考えている。 今の仮想環境では、それ(コヒーレンシの制限)はできない。なぜなら、下層のハードウェアは、仮想マシンについて何も知らないからだ。しかし、将来は、仮想パーティションと物理パーティショニングの間で、ある種の連携が必要になると考えている。CPUコアをネットワーク化し、仮想パーティションに対応して、特定のCPUコア群を物理的にバウンドする。仮想パーティションの外側とはコヒーレンシを保つ必要がない。コヒーレンシの保持は、CPUコアネットワークの中で、バウンドされたコア群の中だけに止めることができる。 現在、そうした技術を展望している。すでに、サーバー側では、パーティショニングを使った素晴らしい研究が多数登場している。クライアント側でも、そうした技術を見ることができるようになるだろう。ただし、これは将来の“*T”(IntelによるCPUの拡張技術の総称)になるだろうが」 ●仮想化を使ったメニイコアのコントロール 仮想化とメニイコア。Intelの構想の中では、この2つの技術は、将来は連携するようになる。現在のPCの仮想マシン技術は、1~2個のCPUコアの上で複数の仮想マシンを実現する。物理CPU側は、自分の上で動作する論理上の仮想マシンについて知らない。 しかし、将来は、1個の仮想マシンを、1個あるいは複数個のCPUコア群に割り当てるようになる。特定の仮想マシンのコードは、特定のCPUコア群で実行されるようになる。論理上の仮想マシンは物理的なCPUコアと密接に結びつくようになる。 各仮想マシンは、独自の分離された仮想メモリ空間を持つ。そのため、異なる仮想マシン間では、CPUコアがキャッシュコヒーレンシを保つ必要がない。CPUコア数を増やしても、全てのCPUコア間でのコヒーレンシ保持の必要がないので、バストラフィックは軽減され効率的になる。 仮想化技術とCPUコア制御を連携されるようになると、CPUの姿も変わる。Rattner氏の説明の通りのCPUが実現すると、メニイコアでは、各CPUコア間をネットワークで結んだ構造になる。ネットワークは、複数のCPUコアを柔軟に連結してパーティショニングできるようになっている。同じ仮想マシンに割り当てられたCPUコア同士はコヒーレントネットワークで結ばれるが、他の仮想マシンのCPUコア群とはパーティションで区切られる。 下が、仮想化と連携したメニイコアCPUの推定図だ。CPUコアパーティション0は仮想マシン0を走らせ、CPUコアパーティション1は仮想マシン1を走らせる。それぞれのCPUパーティション=仮想マシンは、独立した仮想メモリ空間を持ち、物理メモリ上に分離されたメモリ空間が割り当てられる。
こうした構成を取るようになると、CPUコアの1つが、CPUコア群の制御を行なうための管理用CPUコアに割り当てられるかもしれない。Hypervisor(仮想マシンの管理を行なう下層ソフトウェア)が、その管理CPUコアで走る。管理CPUコアのHypervisorが、各仮想マシンにCPUコア群を割り当て、仮想マシン上でOSあるいはソフトウェアモジュールが起動するといった形だ。 ●CPUコアを仮想マシンに動的に割り当て 仮想マシンとマルチコア制御の連動は、タスクに対するCPUコアの動的な割り当てにも広げられる。仮想マシンに対して動的にCPUコアを割り当てればいいからだ。各仮想マシンの負荷に応じて、各パーティションのCPUコア数を動的に変動させれば、最適なパフォーマンスを維持できる。CPUコアを仮想マシンへ動的に割り当てると、空いたCPUコアを完全にOFFして電力を消費しないようにできる。 仮想マシンに対する動的なハードウェア資源の割り当ては、サーバーの仮想化では当たり前の機能だ。というか、それこそが現在のサーバー仮想化の売り物となっている。ユーザーが必要なだけのリソースを、必要な時に使えるようになるからだ。そのため、PCも、CPUがマルチコア化するにつれて、CPU内のプロセッシングリソースについては、仮想化による動的割り当てが一般的になって行くと推定される。複数台のサーバーにまたがる仮想化で行なっていることを、複数個のCPUコアを持つCPU上に持ってくるだけだからだ。 実際、すでにCellは、仮想化を使ったCPUコアの動的な割り当て制御を採用している。Cellの場合は、Hypervisorが仮想マシンを管理している。CellのHypervisorは、各OSに対して、データ処理用のCPUコア「SPE」 8個(PS3の場合は7個)をそれぞれのOSに動的に割り当てる。原理的には、16個のSPEを載せた2PE構成のCellなら、ゲームを走らせているCell OSにはSPEを7個、LinuxにはSPEは3個といった具合に分けることができる。各OS&仮想マシンは、制御用CPUコア「PPE(Power Processor Element)」は共有するが、割り当てられたSPEは占有できる。 こうやって眺めると、仮想化とマルチコアは密接な関係があることがわかる。おそらく、マルチコアへ舵を切った時に、仮想化も込みで構想が始まっていたものと思われる。 □関連記事 (2005年9月20日) [Reported by 後藤 弘茂(Hiroshige Goto)]
【PC Watchホームページ】
|
|