CPUの負荷に応じて、仮想化された2つのコアを
高速で切り替える「big.LITTLE Task Migration」
さて、2つのコアを切り替えるbig.LITTLE Task Migrationだが、Cortex-A15/Cortex-A7では、ぞれぞれのブロックで2次キャッシュを共有し、この2次キャッシュ間をCCI-400(Cache Coherent Interconnect)で接続して、「同一性」(コヒーレンシ)を保つようにしてある。
また、仮想化支援機能では、仮想マシンとして動作しているプロセッサーの内部状態を完全にメインメモリへ保存することができる。big.LITTLE Processingは、この機能を利用する。
たとえばCortex-A15からCortex-A7に切り替える場合、動作中のCortex-A15がCortex-A7を起動させる。Cortex-A7が起動すると、Cortex-A15はプロセッサー状態を完全に保存する。これをCortex-A7が読み込んで状態を復帰させ、Cortex-A15が実行中だった処理を継続する。
このとき両方の2次キャッシュは、同一性が保たれるようにコピーが行なわれる。双方のキャッシュの同一性が保たれたあと、Cortex-A15は、キャッシュをクリアし、自身の電源を切る。逆に、CPU負荷があがり、Cortex-A7では手に負えなくなりそうになると、Cortex-A7が休み、Cortex-A15が動きはじめる。
この切り替えは、仮想化システムでの「マイグレーション」(動作中の仮想マシンを他のマシンで動かすこと)に似ている。仮想化システムのマイグレーションは、通常システム障害などで行なわれるものだが、big.LITTLE Processingでは、これを負荷状態を条件に切り替え、システムの電力効率を高めるために使っている。
切り替え(ブラックアウトタイム)は20μs以下とされているがデバイスの状態などにより、一定の値ということではなく、最悪値として20μs程度ということであると推測される。
このbig.LITTLE Task Migrationでは、仮想化機能でいう「ハイパーバイザー」に相当するものはARM社から供給され、OSやアプリケーション側は、特に対応は必要ないとされている。またbig.LITTLE MPについては、Linuxのスケジューラーに手を入れたものを提供する予定だという。