特集
» 2011年05月23日 10時50分 UPDATE

組み込みマルチコア進化論【特別編】:マルチコア環境におけるタスクの最適なコア配置を考える (1/2)

連載「組み込みマルチコア進化論」の特別編として、マルチコア環境における“タスクの最適なコア配置”と動作ログから最適なコア配置を解析する手法について紹介します。

[塚田 雄一 キャッツ,@IT MONOist]

 近年、シングルプロセッサの処理性能の限界から、組み込みシステムにおいても複数コアを搭載するマルチコアプロセッサを採用するケースが増えてきています。

 マルチコアプロセッサでソフトウェアを動かすためには、マルチコアプロセッサで動かすことを想定してソフトウェアを構築する必要がありますが、組み込みシステムでは、一から作り直すことはまれで、既存のシステムに対して変更を加えながら、新しいシステムを開発するのが一般的です。そのため、シングルコアで開発したシステムを、マルチコアでどのようにコア配分するかがカギとなります。

 本稿では、マルチコア環境における“タスクの最適なコア配置”動作ログから最適なコア配置を解析する手法について紹介します。


組み込みシステムの特徴

 マルチコアプロセッサに切り替えるようなシステムは、ある程度のソフトウェア規模であることがほとんどだと思います。そのため、リアルタイムOSを使用したシステムであることが一般的だといえます。

 リアルタイムOSを利用したシステムでは、実行単位がプロセスやスレッド、タスクとなります(以降、実行単位は“タスク”として説明します)。従って、マルチコア環境においては、“タスクをどのコアで動かすかを決めること”が必要になります。

 また、組み込みソフトウェアの各タスクは“時間的制約”があり、常に発生する入力に対して、各タスクが同期通信を行いながら動作しています。よって、時間的制約も大きく、各タスクが密接に関連しているため、タスクのコア配置はWindowsアプリケーションなどのそれと比べて困難なものとなります。

リアルタイムOSアプリケーション 図1 リアルタイムOSアプリケーション

マルチコア環境対応リアルタイムOSの種類と課題

 リアルタイムOSを使った場合のマルチコアへの対応は、大きく2つのアプローチがあります。

 1つは「SMP(Symmetrical Multi Processing)」環境と呼ばれるもので、LinuxやWindowsのように、タスク(プログラム)を複数のCPUコアに動的に配置して実行し、全体の平均スループットを最大限にする方法です。SMP環境は、OSが自動的にタスクのコア配置を行うため、開発者はコア配置を意識せずに開発を行うことができますが、タスクがどのコアで動作するかは未定となります。そのため、同じシーケンスであっても、そのときの状況でコアの配置が異なることがあり、リアルタイム性の保証や不具合の解析が困難になるという課題があります。

 もう1つは、「AMP(Asymmetrical Multi Processing)」環境と呼ばれるもので、あらかじめタスクごとに実行するコアを決めておく方法です。AMP環境のタスク(プログラム)は、それぞれのタスクを固定化したコア上で動作させるため、リアルタイム性の保証は確保できますが、コアを固定化するため、開発者自身がコア配置を決定する必要があります。

SMP環境 AMP環境
優位性   OSが自動的にコア配置する
※開発者はコア配置を意識しなくてよい
固定したコア配置で動作するため、SMPの課題は解決される
・リアルタイム性を保証することが可能
・不具合解析が比較的容易
課題    コア配置が固定されないため、下記のような課題がある
・リアルタイム性を保証することが困難
・不具合解析が困難
開発者がコア配置を決定する必要がある
表1 SMP環境とAMP環境の優位性と課題

タスクの最適なコア配置とは?

 それでは、“タスクの最適なコア配置”について考えてみましょう。本稿では、下記3つの項目について評価を行い、最適なタスクのコア配置を考えてみたいと思います。

  1. タスクのスループット
  2. コアの負荷バランス
  3. コア間通信

 本稿でいう“最適なコア配置”とは、これら3つの項目について総合的に良い評価のものを指します。

コア配置評価項目 図2 コア配置評価項目

タスクのスループット

 まずは、タスクのスループットについて考えてみましょう。

 スループットは、単位時間当たりの処理量で、“スループットが高いほど適したコア割り当てである”といえます。シングルコアでは、常に動作しているタスクは1つであるため、優先度の高いタスクが動作している限り、優先度の低いタスクは動作できません。

 しかし、マルチコアでは、複数のタスクが同時に実行可能となり、優先度の低いタスクでも、同一コア内に優先度の高いタスクがない場合は、動作可能となります。例えば、図3のように、優先度の高い「タスク1」「タスク2」がある場合、シングルコアの際には、優先度の低い「タスク3」「タスク4」「タスク5」は、動作できない状態となります。

シングルコア環境におけるタスクのスループット例 図3 シングルコア環境におけるタスクのスループット例

 しかし、マルチコアの際には、「タスク3」「タスク4」「タスク5」を別のコアに割り当てることにより、「タスク3」「タスク4」「タスク5」が動作可能となり、システム全体のスループットを向上させることが可能となります。

 以下の図4のように、「タスク1」「タスク2」を“コア1”に割り当て、「タスク3」「タスク4」「タスク5」を“コア2”に割り当てた場合、タスクの処理に必要な時間は、8mSECとなります。

マルチコア環境におけるタスクのスループット例(1) 図4 マルチコア環境におけるタスクのスループット例(1)

 また、図5のように、「タスク1」「タスク2」「タスク3」を“コア1”に割り当て、「タスク4」「タスク5」を“コア2”に割り当てた場合、タスクの処理に必要な時間は6mSECとなり、さらにスループットが向上します。

マルチコア環境におけるタスクのスループット例(2) 図5 マルチコア環境におけるタスクのスループット例(2)

 以上のことから、今回のタスクのスループットの評価としては、タスクのRUNNING時間の合計と、タスクのREADY時間の合計を比較して評価することにします。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.