タグ別アーカイブ: SMP

【後藤弘茂のWeekly海外ニュース】海外のオクタコア版GALAXY S4の「big.LITTLE」ソフトウェアアーキテクチャ

CPUマイグレーションモデルの利点は、OS側からはCPUコアは対称型のSMP(Symmetric Multi-Processor)構成に見えているのに、ハードウェア的には非対称なAMP(Asymmetric Multiple Processor)構成である点。Samsungの例で言えば、AndroidのLinuxカーネルからは、ハードウェアはクアッドコアのSMP構成に見えている。ところが、実際にはCortex-A15のクアッドとCortex-A7のクアッドの、2種類8コアが混在するAMP構成だ。

引用元: 【後藤弘茂のWeekly海外ニュース】海外のオクタコア版GALAXY S4の「big.LITTLE」ソフトウェアアーキテクチャ.

そして、CPUマイグレーションモデルでは、Linuxカーネルのスケジューラ自体には手を加えない。これは重要なポイントで、開発期間を短くできた理由でもある。

 「Linuxカーネルのスケジューラのソースコードは1万行程あるが、それには一切タッチしない。その下にアドオンで単純な2,000行くらいのコードを足して、CPUコアのスイッチを行なわせている。OSのスケジューラからは仮想的にCPUコアは4つにしか見えない。しかし、その下でCortex-A7とA15を勝手に切り替えている。切り替えるスイッチャがカーネルの中に入っているのでインカーネルスイッチャ(In-Kernel Switcher:IKS)と呼んでいる」(塚本氏)。
インカーネルスイッチャ(IKS)とMP(PDF版はこちら)
IKSソリューション
MPソリューション

 In-Kernel Switcher(IKS)がOSのスケジューラをだますことで、SMPと見せかけながら、AMP構成を有効に使う仕組みとなっている。アドオンのIKSを使うことでOSの根本機能であるスケジューラのコードには変更を加えずに済ませている。Linuxの歴史でも、スケジューラの変更は2回程度しか行なわれておらず、それを改変しようとすると大変な作業になってしまうため、IKSという抜け道を使った。

 LinaroのIKSは、CPU負荷に応じて2つのコアを切り替える。切り替えの遷移ポイントの決定には、負荷に応じてCPUコアの電圧と動作周波数を切り替える「DVFS(Dynamic Voltage and Frequency Scaling)」の仕組みを使ってる。Linuxの場合は、CPUFreq Governorと呼ばれるサブシステムがあり、CPU使用率をモニタしてCPUの動作周波数を遷移させる。IKSは、Governorからの情報で、DVFSが一定のポイントに達した時にCPUコアをスイッチさせる。

 そのため、OS側はDVFSで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となる。
CPU使用率をモニタしてCortex-A15に切り替える
Cortex-A7/A15を切り替えるバーチャルOPP

 LinaroのIKSで立ち上がった非対称型のAMP構成のbig.LITTLEアーキテクチャ。次のステップは、big.LITTLE MPモデルの実現となる。MPモデルでは、タスクのCPU負荷に応じて、混在する全てのコアに適切にタスクが割り当てられるようにするとARMは説明していた。しかし、これにはさまざまなチャレンジがある。それは、OS側がタスクのCPU負荷を知る術が極めて限られているからだ。