マルチコア環境におけるタスクの最適なコア配置を考える:組み込みマルチコア進化論【特別編】(2/2 ページ)
連載「組み込みマルチコア進化論」の特別編として、マルチコア環境における“タスクの最適なコア配置”と動作ログから最適なコア配置を解析する手法について紹介します。
コアの負荷バランス
ここでは、コアの負荷バランスについて考えてみましょう。
コアの負荷バランスは、同一性能のマルチコア環境の場合、片方のコアに多くの負荷が掛かるよりも、両方のコアに平均的に負荷が掛かる方が、発熱量/消費電力の負荷などが少なくなります。よって、“コアの負荷が平均的であるほど、適したコア割り当てである”といえます。
以下の図6のように、「タスク1」「タスク2」を“コア1”に割り当て、「タスク3」「タスク4」「タスク5」を“コア2”に割り当てた場合、コアごとの負荷比率は、50%:50%となります。
また、図7のように、「タスク1」「タスク2」「タスク3」を“コア1”に割り当て、「タスク4」「タスク5」を“コア2”に割り当てた場合、コアごとの負荷比率は、69.5%:30.5%となります。よって、図7の割り当てよりも図6の割り当ての方が、コアごとの負荷バランスは良くなります。
コア間通信
次は、コア間通信について考えてみましょう。
タスク間通信が発生するタスクを、別々のコアに割り当てした場合、同一コアに割り当てた場合と比べてコア間で通信が行われるため、オーバーヘッドが発生し、通信時間が増えてしまいます。従って、タスク間通信の発生するタスクは、できる限り同一コアに割り当てを行う方がオーバーヘッドは少なくなります。そのため、“コア間通信が少ないほど、適したコア割り当てである”といえます。
例えば、「タスク1」「タスク2」を“コア1”に割り当て、「タスク3」「タスク4」「タスク5」を“コア2”に割り当てた場合、図8の通り、コア間通信の総数は2つとなります。
また、「タスク1」「タスク2」「タスク3」を“コア1”に割り当て、「タスク4」「タスク5」を“コア2”に割り当てた場合、コア間通信の総数は1つとなります。よって、コア間通信の総数を評価した場合、図8の割り当てよりも図9の割り当ての方が、システム全体のオーバーヘッドは少なくなります。
動作ログを解析しコア配置を行う手法
先にも説明しましたが、最適なコア配置は「タスクのスループット」「コアの負荷バランス」「コア間通信」の3つの項目について、総合的に評価が高いものが最適なコア配置であるといえます。
まずは、リアルタイムOSが自動的にコア配置を行うSMP環境について考えてみましょう。リアルタイムOSは、タスクの起動時にコア負荷の低いコアに割り当てを行い動作させます。つまり、コアの負荷バランスを考慮してコア配置を決定しています。しかしながら、タスクのスループットやコア間通信は、タイミングを考慮する必要があり、動作してからでないと明確にはならないため、リアルタイムOSがそれらを考慮してコア配置を行うことは困難です。
そこで、今回は“動作ログからコア配置を行う手法”を紹介します。
まずは、シングルコア環境を構築し、タスクを動作させることによりログ情報を取得します。そして、取得したログ情報より「タスクのスループット」「コアの負荷バランス」「コア間通信」の3つの項目を考慮し、コア配置を決定します。コア配置が決定した後は、固定したコア配置で動作するAMP型などのマルチコア環境を構築します。
性能評価方法
それでは、実際の組み込みシステムにおける「OSがコア配置を行うSMP環境」と「動作ログよりコア配置を特定した環境」を、シングルコア環境と比較して、その性能の違いを見てみましょう。
今回、筆者が評価したシステムの詳細については公開できませんが、ターゲット環境については下記の通りとなります。
OS | リアルタイムOS |
---|---|
プロセッサ | DualCore(コアを2個搭載) |
タスク数 | 24個 |
計測時間 | 8.5SEC |
表2 ターゲット環境 |
プロセッサは、コアを2つ搭載したDual Core(デュアルコア)プロセッサを使用しました。今回使用したリアルタイムOSは、OSが自動的にタスクをコア配置するSMP環境の構築も可能ですが、その他に、タスク起動の際にコア配置を特定して動作させることも可能なものを選択しました。この機能を利用することにより、シングルコア環境を想定して全てのタスクを1つのコアに配置して動作させることや、AMP環境を想定して、全てのタスクについてコア配置を特定して動作させることが可能です。
今回は、下記の環境で評価を行いました。
性能評価環境
・シングルコアを想定し1つのコアで動作した環境
・OSがコア配置を行うSMP環境
・動作ログを解析しコア配置を特定した環境
性能評価は、「タスクの処理時間」「コアの負荷」の2つの項目について評価を行いました。タスクの処理時間については実行状態である「RUNNING時間」と、実行可能状態である「READY時間」について評価を行いました。また、コアの負荷については、各コアの動作負荷を計測し、動作の負荷割合を評価しました。
性能評価項目
・タスクの実行時間(RUNNING時間)
・タスクの実行待ち時間(READY時間)
・コアの負荷
性能評価結果
「OSがコア配置を行うSMP環境」と「動作ログを解析しコア配置を特定した環境」をシングルコアの環境と比較した結果を図11に記します。
今回紹介した評価結果(注)を参照すると、OSがコア配置行うSMP環境については、ほぼ30%以上性能が向上しています。また、動作ログを解析しコア配置を特定した環境は、ほぼ40%以上性能が向上しています。2つのコアで動作した場合、50%以上の性能は現実的に見込めず、コア分割によるオーバーヘッドも少なからず発生するため、今回紹介した動作ログを解析しコア配置を行う手法が有効であるといえます。
SMP環境は、動作するアプリケーションが特定できないシステムには非常に有効です。例えば、さまざまなアプリケーションがインストールされて使用される携帯端末などがそれに当たります。しかし、より高い性能が求められるシステムには、コア配置を特定する必要があります。コア配置を特定するための手法の1つに、今回紹介した動作ログを解析しコア配置を特定する手法があります。この手法は、動作ログから解析するため、動作範囲が特定できるシステムに有効です。例えば、プリンタなどのように印刷開始から印刷終了までの動作範囲で、最適な性能が求められるシステムには非常に有効です。
今回、動作ログを解析しコア配置を特定する手法を紹介しましたが、この手法を人手で解析することは現実的ではありません。なぜなら、タスク30個を2コアに配置するパターン数は、10億7374万1824パターンも存在するからです。やはり、ツールなどをうまく活用して最適なコア配置を自動化・半自動化することが望ましいでしょう。
ちなみに、筆者が所属するキャッツでは、動作ログより最適なコア配置を解析する「CoreRA(コアラ)」というツールを、経済産業省「平成21年度戦略的基盤技術高度化支援事業」に採択されて開発しました。シングルコアで開発した組み込みシステムをマルチコアに置き換える際は、こうしたツールを利用するのも1つの手段といえるでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.