マルチコアでセーフティクリティカルなシステムを構築する際の課題

航空機器向けのセーフティクリティカルなシステムにおいて、その計算能力のスループットを上げながらサイズ、重量、消費電力を小さくできるという利点から、マルチコアプロセッサの採用が徐々に進んでいます。

マルチコアならば多数の機能を統合型航空電子機器(IMA)に組み込めるようになります。IMAの目標はソフトウェアの更新・改善・追加を通じて、効率的かつ信頼性の高いシステム機能を、手頃なコストで保守・増強できるようにすることですが、この目標を達成するのは非常に難しい場合があります。

その原因は、複数のプロセッサコアが同じ共有リソースに同時にアクセスしようとすることで、変動性が大きくなるからです。セーフティクリティカルなアプリケーションで第一に懸念されるのは、そのような共有リソースの競合によって、あるコアで実行中のアプリケーションが別のコアで実行中のアプリケーションに競合し、確定性、サービス品質、そして究極的には安全性にマイナスの影響を及ぼしてしまうことです。マルチコア競合を軽減する汎用的な方法がなければ、ソフトウェアを変更または追加するごとに大がかりな再テストとシステム全体の分析が必要になってしまうため、IMAの目標に反することになります。

シングルコアでの解決方法

シングルコアのプロセッサでは、複数個のセーフティクリティカルなアプリケーションが同じプロセッサ上で実行され、メモリ空間とプロセッサ時間はアプリケーション間で厳密にパーティショニングされます。

メモリ空間のパーティショニングはプロセッサのメモリ管理ユニット(MMU)の監視下で、メモリの重複しない部分を、特定時間内に実行されるアプリケーション専用として割り当てます。タイムパーティショニングはメジャーフレームと呼ばれる一定の時間枠を、パーティション時間窓という一続きの小時間枠に分割します。アプリケーションはそれぞれ1個以上のパーティション時間窓を割り当てられ、その窓の長さと個数はアプリケーションの最悪実行時間(WCET)と必要な繰り返し回数によって決まります。オペレーティングシステムはその割り当て時間中、アプリケーションがプロセッサコアにアクセスできることを保証します。

マルチコア競合の原因

マルチコアプロセッサでは、アプリケーションはコアごとにタイムパーティショニングされますが、他のコアにあるアプリケーションと同時に実行することができます。問題は、同時に動作するアプリケーションがプロセッサ上で共有されているリソースにアクセスしなければならない点です。

マルチコアプロセッサのアーキテクチャにはメモリコントローラ、DDRメモリ、I/O、共有キャッシュ、そしてそれらをつなぐ内部ファブリックなどの共有リソースが必ずあります(図1)。あるプロセッサコアが使用中の共有リソースに別のプロセッサコアがアクセスしようとすると、共有リソースの競合となります。その結果発生する遅延による影響で、重要度の高いアプリケーションは所定の機能を時間制限内に実行することができなくなるかもしれません。DMAエンジンはコアごとに並列で実行できるため、これも競合の発生源となりえます。

  • Green Hills Software

    図1:プロセッサコア(グレー)が共有しているリソース(緑色)はインターコネクトからメモリ、I/Oまで多岐にわたる

マルチコア競合の問題に直接対応するため、FAA、EASA、TCCAその他の航空当局が支援するCertification Authority Software Team(CAST)はマルチコアシステムの指針を「CAST-32A」というポジションペーパーの形で公表しました。

CAST-32Aはマルチコアプロセッサを使用する場合の懸念を解消するために必要な目標10個を規定しています。その中でマルチコア競合に直接関係する目標の1つを達成するには、1つのプロセッサコア上で実行されるソフトウェアアプリケーションに影響を与えうる競合経路をすべて特定し、選択した緩和手法の効果を検証しなければなりません。

本当の意味でマルチコア競合源をすべて特定するには、マルチコアプロセッサのサブシステムについて、どう動くか、どうやり取りするかなど深い知識が必要です。そういった知識にはDDRの構造、メモリコントローラのスケジューリング優先度、キャッシュ置き換えポリシー、マルチコア・インターコネクトのアービトレーションの仕組み、ハードウェア初期化と設定オプションなど、ハードウェアについての詳細な知識が含まれます。

マルチコア競合とその緩和方法について理解を深めることは、安全性だけでなく、セキュリティに関連することでもあります。あるアプリケーションの可用性が他のアプリケーションの影響を受けうる場合は、安全でもセキュアでもありません。もう少し深く掘り下げると、色々なセキュリティ攻撃が実行されるのに必要とされる隠れたタイミングは、多くの場合マルチコア競合の原因と同じです。マルチコア競合はしっかりと押さえ込むことが肝心です。