後藤弘茂のWeekly海外ニュース
2014年にはメジャーになるARMの省電力技術「big.LITTLE」
(2013/12/18 06:00)
採用メーカーが急増しつつあるbig.LITTLE
ARMの省電力技術「big.LITTLE」が、新たな段階に入る。新しいソフトウェアモデル「Global Task Scheduling(GTS)」によって、ヘテロジニアス(Heterogeneous:異種混合)構成のCPUコアをより有効に使い、省電力とパフォーマンスアップを効率的に実現できるようになる。そのため、来年(2014年)にはbig.LITTLE対応製品が急激に増える見込みだ。実装するチップベンダーも、1番手のSamsungだけでなく、ルネサス、Mediatek、Allwinnerなど急激に増えている。big.LITTLEは、いよいよARM SoCのメインストリームになりつつある。
big.LITTLEには、いくつかの重要な側面がある。1つは、同技術によってプロセス技術や回路設計技術で不利な企業が、効率の高い省電力技術を手に入れることができる点。そのため、big.LITTLEに代表されるヘテロジニアス型コンピューティング技術は、Intel以外の企業にとって非常に重要な技術になりつつある。
もう1つは、big.LITTLEが契機となり、省電力OS(厳密にはパワーアウェアなタスクスケジューリング「Power-Aware Scheduling」の開発)が本格化する流れになったこと。これは、今年(2013年)5月以降、Linuxカーネル開発で起きていることだ。ハードウェア側はヘテロジニアス化しなければ、電力効率の向上とダークシリコンの有効利用は難しい。しかし、ヘテロジニアス化したハードを有効に使うためにはOSやソフトウェア層の最適化が必須となる。big.LITTLEは、そうしたソフト側の動きを引き出すきっかけの1つとなった。
複雑なbig.LITTLEの各ソフトウェアの位置づけ
こうした動きの中で、big.LITTLEに絡むソフトウェア開発の動きも複雑になっている。big.LITTLEをサポートするソフトウェアとしては、従来はLinaro(ARMベースのLinuxコアテクノロジの共同開発のための非営利エンジニアリング組織)が開発した「In-Kernel Switcher(IKS:インカーネルスイッチャ)」があった。IKSは当初はLinaroの内部開発パッチという位置づけで、オープンにされていなかった。しかし、現在では、IKSはLinuxのアップストリーム(Linuxのオープンソースコミュニティのコードと、そのコードに還流させること)に統合(v3.13rc1)された。正式にLinuxの一部となった。
そして、次のステップとしてARMが中心となり開発した「big.LITTLE MP」が提供され始めた。ここで用語を整理しておくと、Linaroの「big.LITTLE In-Kernel Switcher(IKS)」とARMの「big.LITTLE CPU Migration」は全く同じものだ。それに対して、big.LITTLEのCPUコアをOSスケジューラで効率的に使う技術自体のARMでの名称が「Global Task Scheduling(GTS)」。そして、GTSのARMでの実装が「big.LITTLE MP」パッチセットとなっている。また、big.LITTLE MPは、Linaroでは一時「Heterogeneous MP(HMP)」と呼ばれていた。さらに、現在Linuxコミュニティで議論されている、big.LITTLE対応も含む電力対応タスクスケジューラは「Power-Aware Scheduler」などと呼ばれている。
In-Kernel Switcher(IKS)はアップストリームされた。しかし、big.LITTLE MPとして実装されたGlobal Task SchedulingはLinuxにアップストリームされず、ベンダーのカーネルパッチセットとしてのみ提供される。つまり、IKSとbig.LITTLE MP(またはHMP/GTS)は、アップストリームでは大きく位置づけが異なる。
big.LITTLE MPのパッチはすでに提供されている。Linaroが提供するカーネル「Linaro Stable Kernel (LSK)」(Linaroはディストリビュータではなく、ARM版カーネルとドライバなどの開発・配布を行なう)の現在のバージョンに、In-Kernel Switcher(IKS)とともにbig.LITTLE MP、ARMv8 AArch64(64-bit命令セット)サポートが加わっている。位置づけ的には、big.LITTLE MPは、中間解的な実装であるためLinuxアップストリームには統合されないという。現在の実装であるbig.LITTLE MPをアップストリームしないだけでなく、GTS技術自体が、そのままではアップストリームしない。
Linuxはパワーアウエアスケジューラへ
その上で、ARMとLinaroは、Linuxコミュニティ内での統合的なパワーアウエアスケジューラ(Power-Aware Scheduler)開発に協力して行くと説明している。これは、より大きな構想のスケジューラ改革となる見込みだ。
つまり、来年市場に出るbig.LITTLE MPソリューションは、big.LITTLEに対応したソフトウェア改革の次のステップに過ぎない。その先に、より進化した手法で電力消費を認識して最適化できるLinuxカーネルが登場する計画になっている。2段階に分かれているが、そこには製品を早く出したいハードウェアベンダー側の思惑と、電力アウエアなOSを完全なものにしたいOSコミュニティの理念との違いがある。
完成形のPower-Aware Schedulerは、おそらく、big.LITTLE対応だけでなく、多くの省電力化テクニックを統合したものになるだろう。IntelもLinuxでパワーアウエアパッチを提案しており、この議論に入ってくると見られる。
こうして見ると、big.LITTLEから始まった議論は、OSを省電力技術に最適化し、ハードウェア側の省電力技術をソフトウェアで最大に活かそうという議論に発展していることがわかる。ハードウェア層だけでなく、ソフトウェア層を巻き込んだ改革の波に広がりつつある。
もちろん、この話は、ARMとLinuxカーネルの上に乗っているAndroid(部分的にはx86もあるが)にも大きく影響する。また、電力効率時代にOSをどう作るべきかという、より大局の話につながる。この議論は、Linuxだけでなく、今後全てのOSにとって重要なポイントになって行くだろう。さらに言えば、ハードウェアを均質なものとして抽象化するこれまでのOSのあり方から、ハードウェアのヘテロジニアス性をハンドルし、場合によってはアプリにもヘテロジニアス性を可視化するという新しいOSのあり方への変化も意味するかも知れない。
もっとも、厳密には、big.LITTLEはLinuxのタスクスケジューラの議論のきっかけの1つで、Power-Aware Scheduler自体の構想は、以前からLinuxコミュニティ内部にあった。また、ARMがbig.LITTLE MPを提案する前から、Linuxコミュニティではbig.LITTLE向けのタスクスケジューラの議論が一部で盛り上がっていたという。しかし、big.LITTLE MPの実装を巡ってコミュニティ内に湧き上がった激しい議論が、Power-Aware Scheduler開発の波を後押しする要素の1つとなったことも確かだ。
bigなCortex-A15とLITTLEなCortex-A7の組み合わせ
AMDのbig.LITTLEでは、大型でパフォーマンスの高いCPUコア(big)と、小型で低消費電力のCPUコア(LITTLE)を組み合わせる。CPUの性能を必要とするタスクはbigコアで走らせ、CPU性能が必要ないアプリはLITTLEコアで走らせる。負荷が小さい時の消費電力を最低限に抑えながら、負荷が高い時にも十分なパフォーマンスを提供する。
big.LITTLEは、ハードウェアとソフトウェアの両方の実装が必要となる。現在は、bigコアに「Cortex-A15」、LITTLEコアに「Cortex-A7」を使った組み合わせが提供されている。下は今年4月に開催されたプロセッサカンファレンス「Linley Tech Mobile Conference」でも主催のThe Linley Groupの主席アナリストのLinley Gwennap氏(Principal Analyst, The Linley Group)が示したスライドだ。Cortex-A7はCortex-A15より3.5倍もパフォーマンス/電力の効率が高く、2倍以上パフォーマンス/ダイ面積の効率がいい。A7はコア自体が極端に小さいため、big.LITTLE構成でA7コアを加えても、それほどコストは増えない。スライドのダイ写真はSamsungの実装例だ。
big.LITTLEのソフトウェアでは、Linaroが開発した「In-Kernel Switcher(IKS:インカーネルスイッチャ)」がパブリックに提供されている。In-Kernel Switcherは、big.LITTLEの「CPUマイグレーション」モデルを実現する。
CPUマイグレーションモデルでは、bigコアとLITTLEコアを1コアずつペアにする。そして、タスクのCPU負荷に応じて、タスクが走るCPUコアをbigコアとLITTLEコアの間で切り替える。そのため、ペアになったCPUコアは、タスクの移行期間以外はどちらか片方のCPUコアしか動作しない。例えば、Samsungの「Galaxy S4」の一部のバージョンが搭載するモバイルSoC(System on a Chip)「Exynos 5 Octa」は4コアのCortex-A15と4コアのCortex-A7を搭載した8 CPUコア構成だが、同時に動作するCPUコアは4コアになる。
それに対して、ARMがGlobal Task Scheduling(GTS)または「Heterogeneous Multi-Processing(HMP)」と呼ぶモデルでは、bigとLITTLEの両CPUコアが同時に動作できる。Exynos 5 Octaの場合は、IKS(In-Kernel Switcher)では4コア動作だったのが、GTS(Global Task Scheduling)なら最大8コアが動作できる。GTSのモデルでは、OSのタスクスケジューラが、タスクの負荷に応じてbigとLITTLEのCPUコアを自由に割り当てる。従来より柔軟な制御によって、より効率的なbig.LITTLEの活用が可能になる。
Intelに対抗できる省電力技術
big.LITTLEの利点は、単一のCPUアーキテクチャの場合よりも、CPUのパフォーマンスと電力のレンジを広げることができる点だ。高パフォーマンスのCPUコアは低負荷時も電力消費が高く、低消費電力のCPUコアは高クロック時でもパフォーマンスが低い。しかし、その2つを組み合わせることで、単一のCPUアーキテクチャよりも高いパフォーマンスと低い消費電力を同時にカバーできる。
つまり、一定の電力の枠内でパフォーマンスを上に伸ばし、駆動できる電圧の範囲で動作電力をさらに引き下げる。Intelは、パフォーマンス&電力レンジの拡大を、自社独自のプロセス技術と回路設計技術により、1つのCPUコアで実現しようとしている。それに対して、ARMは特別な技術を持たなくても実装できるシステムアーキテクチャでのソリューションを提供している。
半導体の巨人Intelの技術リードは明白で、1世代以上進んだFinFET 3Dトランジスタのプロセス技術と、省電力を追求した回路設計技術によって、高速でトランジスタ数の多いチップでもある程度低い消費電力で動作させることができる。他のファウンダリやファブレス企業は、現状ではそうした部分でIntelに追いつくことができない。Intelと同様のことを実現しようとすると、Intelと同様に膨大な投資が必要になるためだ。それでは、低コストにチップを製造するというファウンダリ型のビジネスモデルが成り立たなくなる。他社がFinFETで追いついた後も、Intelとのギャップを完全に埋めることは難しい。
しかし、big.LITTLEによって、チップベンダーは、CPUの高パフォーマンス化と低消費電力化の両方へとレンジを広げることが可能になる。それによって、ファウンダリやファブレスベンダーは、省電力の基礎技術に優れるIntelに対抗することができる。Intelのライバル達にとって、big.LITTLEは低いハードルで電力効率を高めるうってつけの技術となっている。
3方式となったbig.LITTLEのソフトウェアモデル
big.LITTLEを発表した2011年時点では、ARMはバーチャライゼーションを使ってCPUコアを仮想化して、HypervisorがOSごとCPUコア間を移行させてしまうソフトウェア実装を想定していた。これは、当初「big.LITTLEタスクマイグレーションモデル(Task Migration Use Model)」と呼ばれ、後に「クラスタマイグレーションモデル(Cluster Migration モデル)」に名称変更された。このモデルでは、Cortex-A15のクラスタと、Cortex-A7のクラスタのどちらか一方が動作する。A15とA7が混在することはできない。制約が大きい一方、OSは一切コードを変更する必要がなく、HypervisorがCPUコアの切り替えを制御する。
しかし、このモデルはパフォーマンス面で利点が少なかった。そこで、ARMはbigとLITTLEのCPUコアにスケジューラが負荷に応じてタスクを割り振るbig.LITTLE MPモデル(MP Use Model)で立ち上げることを検討した。だが、big.LITTLE MPでは、OSのタスクスケジューラに変更を加える必要があり、開発に時間がかかる。
そのため、Linaroのコアメンバーとクラブメンバーだけで、早期に導入できる実践的なモデルを開発することになった。これが、In-Kernel Switcher(IKS)を使うbig.LITTLE CPUマイグレーションモデル(CPU Migration Use Model)」だ。LinaroのコアメンバーのSamsungは、Galaxy S4ではIn-Kernel Switcher(IKS)を使ってbig.LITTLEを有効にした。
このように、IKSとbig.LITTLE MP(またはHeterogeneous MP)は完全に平行したプロジェクトだった。しかし、両者の実装には共通点も多い。CPUコアを切り替えるアルゴリズム自体は似ており、電力制御の「Multi Cluster Power Management(MCPM)API」を使う点も共通している。そのため、IKSの仕組みがわからないと、big.LITTLE MPもわかりにくい。ちなみに、Linaro Stable Kernel (LSK)では、In-Kernel Switcher(IKS)とHeterogenous Multi Processing (HMP)をオンザフライで切り替えることができる。
OSから見るとバーチャルCPUのSMPに見えるIKS
IKSの利点は、OSのスケジューラに変更を加えず、スケジューラの下で動作する2,000行くらいのコードで実現していることだ。IKSでは、OSのスケジューラからはCPUコアは通常の対称型のSMP(Symmetric Multi-Processor)構成に見えているが、ハードウェア的には非対称なAMP(Asymmetric Multiple Processor)構成となる。
そして、IKSでは、bigコアとLITTLEコアを1個ずつペアにしてバーチャルCPUとしている。OSカーネル側は、バーチャルCPUコアにタスクを割り当てる。IKS側が、バーチャルCPUのペアのどちらのCPUコアにタスクを実際に割り当てるかを決定する。
LinaroのIn-Kernel Switcher(IKS)は、CPUコアを切り替える際に、CPU負荷に応じる。切り替えの遷移ポイントの決定には、CPUコアの電圧と動作周波数を切り替える「DVFS(Dynamic Voltage and Frequency Scaling)」の仕組みを使ってる。LinuxのCPUFreq Governorサブシステムが、CPU使用率をモニタしてCPUの動作周波数を遷移させる。IKSは、DVFSが一定のポイントに達した時にCPUコアをスイッチさせる。
バーチャルOPPにbigとLITTLEの両CPUコアの周波数をマップ
そのため、OS側はDVFSで1種類のCPUの周波数を遷移させているつもりでいるが、実際にはその下で、IKSが一定のDVFSポイントから下はCortex-A7、上はCortex-A15という具合に振り分ける。もっとも、実際にはCortex-A7とCortex-A15では周波数レンジが異なり、Cortex-A7の最高周波数から、Cortex-A15の最低周波数へと遷移する。そのため、IKSでは、バーチャルOPP(Operating Performance Point)を設定して、Cortex-A7とCortex-A15それぞれの実際のDVFSポイントにマップしている。OSから見えるのは、バーチャルOPPとなる。バーチャルOPPのマッピングはコンフィギュレーションによって変わる。LinaroやARMの資料を見ても、異なっている。共通しているのは、Cortex-A7とCortex-A15が連続した周波数ポイントに見えるようにマップしている点だけだ。
CPUコア間でのマイグレーションでは、まず、移行する先のCPUコア(インバウンド)を起動し、動作しているCPUコア(アウトバウンド)の割り込みを停止しコンテクストをキャッシュに書き出す。移行するCPUコア(インバウンド)はコンテクストをリストアし、割り込みをイネーブルにしてタスクの実行を受け継ぐ。ステイトはキャッシュ経由でセーブ/リストアされるため、CPUコアの切り替えが速い。下の図はARMが最初に説明したクラスタ単位のマイグレーションのパイプラインだが、基本は変わっていない。
こうした仕組みを取っているため、IKSではGovernorサブシステムの味付けで、ある程度振るまいを変えることができる。パフォーマンス優先のGovernorなら、より多くbigコアに割り振られることが多くなる。逆に省電力優先のGovernorをベンダーが選択すると、よりLITTLEコアの比率が高くなる。
big.LITTLE MP(Heterogeneous MP)になると、この仕組みは、周波数の遷移をトリガにする点は共通ながら、大きく変わる。