後藤弘茂のWeekly海外ニュース

ハードウェア仮想化とマルチコアCPUの関係




●マルチコアの問題点の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の推定図
PDF版はこちら

 こうした構成を取るようになると、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は占有できる。

 こうやって眺めると、仮想化とマルチコアは密接な関係があることがわかる。おそらく、マルチコアへ舵を切った時に、仮想化も込みで構想が始まっていたものと思われる。

□関連記事
【9月12日】【海外】CPUのハードウェア仮想化技術でOSが変わる
http://pc.watch.impress.co.jp/docs/2005/0912/kaigai211.htm
【8月26日】【海外】マルチコアCPUが怒濤のように押し寄せるIntelの新ロードマップ
http://pc.watch.impress.co.jp/docs/2005/0826/kaigai207.htm

バックナンバー

(2005年9月20日)

[Reported by 後藤 弘茂(Hiroshige Goto)]


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp ご質問に対して、個別にご回答はいたしません

Copyright (c) 2005 Impress Corporation, an Impress Group company. All rights reserved.