JP5776813B2 - マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム - Google Patents

マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム Download PDF

Info

Publication number
JP5776813B2
JP5776813B2 JP2014077378A JP2014077378A JP5776813B2 JP 5776813 B2 JP5776813 B2 JP 5776813B2 JP 2014077378 A JP2014077378 A JP 2014077378A JP 2014077378 A JP2014077378 A JP 2014077378A JP 5776813 B2 JP5776813 B2 JP 5776813B2
Authority
JP
Japan
Prior art keywords
task
cache
data
scheduler
priority
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2014077378A
Other languages
English (en)
Other versions
JP2014146366A (ja
Inventor
宏真 山内
宏真 山内
浩一郎 山下
浩一郎 山下
鈴木 貴久
貴久 鈴木
康志 栗原
康志 栗原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014077378A priority Critical patent/JP5776813B2/ja
Publication of JP2014146366A publication Critical patent/JP2014146366A/ja
Application granted granted Critical
Publication of JP5776813B2 publication Critical patent/JP5776813B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Description

この発明は、複数のコアによる並列処理によってマルチタスク処理を行う際のマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラムに関する。
従来より、プロセッサが処理実行時に利用するデータを格納するメモリ領域として、キャッシュメモリ、メインメモリ、ファイルシステムという階層的なメモリ構成が採用されている。階層的なメモリ構成は、データへのアクセス速度を向上させるため、システムの高速化が期待される。階層的なメモリ構成の場合、他のメモリと比較して高速に動作するキャッシュメモリは、限られたメモリ容量であるため、キャッシュメモリに格納されたデータは、LRU(Least Recently Used)などのアルゴリズムを用いて入れ替えが行われる(例えば、下記特許文献1参照。)。
また、近年では複数のプロセッサを備えたマルチコアプロセッサシステムが広く採用されている。マルチコアプロセッサシステムは、各プロセッサによってタスクを並列に実行させるため、処理性能を大幅に向上させることができる(例えば、下記特許文献1参照。)。一方で、マルチコアプロセッサシステムは、タスクを並列に実行させた場合、各プロセッサのキャッシュメモリ上のデータが書き換えられた際に、他のプロセッサのキャッシュメモリ上のデータを同期させる処理が必要となる。
データの同期の手法として、具体的には、プロセッサ間でのキャッシュコヒーレンシを取るための機構であるスヌープキャッシュ機構が挙げられる。スヌープキャッシュ機構は、キャッシュメモリ上の、あるプロセッサが他のプロセッサと共有するデータが書き換えられた際に動作する。キャッシュメモリ上のデータの書き換えは、他のプロセッサのキャッシュメモリに搭載されているスヌープコントローラによって検知される。そして、スヌープコントローラは、キャッシュメモリ間のバスを介して、書き換えられた新しい値を他のプロセッサのキャッシュメモリにも反映させる(例えば、下記特許文献2参照。)。
また、組み込みシステムにおいても、複数のアプリケーションの並列実行が要求されており、並列実行を実現するための技術が提供されている。具体的には、1つのプロセッサ上で実行するタスクを時分割などで切り替えるマルチタスク処理や、複数のプロセッサで複数のタスクを実行する分散処理や、これらの処理を組み合わせた処理が開示されている(例えば、下記特許文献3参照。)。
特開平6−175923号公報 特開平10−240698号公報 特開平11−212869号公報
しかしながら、マルチコアプロセッサシステムの場合、複数のプロセッサによって並列タスクを実行する際に必要な、キャッシュメモリ間の同期処理や、マルチタスク処理の実行によって発生する頻繁なキャッシュメモリの書き換えが、性能低下の原因となることもあった。
図20は、マルチコアの並列処理におけるスヌープの動作例を示す説明図である。マルチコアプロセッサシステム2000の場合、マルチコア(例えば、図20のようなCPU#0,CPU#1)では、各CPUが同時に処理を実行する並列処理が行われる。そして並列処理の中でも、特に共通のデータを用いるタスクを各CPU上で同時に実行する場合、一方のキャッシュメモリ(例えば、キャシュL1$0とキャッシュL1$1とのいずれか)上のデータが書き換えられると、スヌープ120によって同期処理が行われる。具体的には、スヌープ120は、CPU#0によってキャッシュL1$0に配置されているデータの中の変数aの値が書き換えられると、バスを介して、キャッシュL1$1の変数aのデータを書き換える。
スヌープ120によるデータの書き換えが頻繁に発生すると、キャシュL1$0とキャッシュL1$1とを接続するバスが混雑し、結果として性能劣化を起こしてしまう。さらに、頻繁な書き換え処理の発生によって、バストランザクションが増加してしまう。また、頻繁な書き換え処理の発生は、スヌープ120のバスを占有してしまうことになる。このような状態に、リアルタイム制約のある他のプロセスの実行要求が発生した場合、リアルタイム制約のある他のプロセスのキャッシュメモリへのアクセスを阻害してしまうため、重大な性能問題となる恐れがあった。
図21は、マルチタスク処理におけるキャッシュ書き換え例を示す説明図である。マルチコアプロセッサシステム2000がマルチタスク処理を行う場合、タスクの実行状況に応じて、実行対象となるタスクを切り替えるタスクスイッチが行われる。例えば、図21において、マルチコアプロセッサシステム2000は、タスク#0〜タスク#2を対象にしてマルチタスク処理を行う。
そして、図21の左側のように、CPU#0によってタスク#0が実行され、CPU#1によってタスク#2が実行されている状態で、タスクスイッチが発生したとする。タスクスイッチの発生によって、図21の右側のように、CPU#0によって実行されるタスクは、タスク#0からタスク#1に切り替えられる。実行対象となるタスクが切り替えられると、キャッシュL1$0に配置されるデータの内容も、タスク#0が利用するデータからタスク#1が利用するデータへ書き換えられる。
キャッシュL1$0に配置されるデータが書き換えられた後、書き換え以前に実行されていた処理の実行に戻った場合、CPU#0は、タスク#0が利用するデータをメモリ140から再度読み出す必要がある。たとえ、タスクスイッチの発生によって、対象となるキャッシュメモリに配置されたデータが書き換えられても、その後CPUによってキャッシュメモリに配置されたデータが利用されないことも多かった。このように再利用性がないデータの書き換え処理は、キャシュメモリを利用するCPUにとって性能劣化の原因となってしまうという問題があった。
本開示技術は、上述した従来技術による問題点を解消するため、並列処理およびマルチタスク処理が実行される場合であっても、キャッシュの利用効率を高めてマルチコアプロセッサシステムの処理能力を向上させることのできるマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、本開示技術は、タスクをそれぞれ処理する複数のコアと、前記複数のコアがタスクを処理する場合にアクセスするデータをそれぞれ記憶する複数のキャッシュとを有するマルチコアプロセッサシステムであって、前記複数のコアのうちの第1のコアは、前記複数のコアのいずれかに割り当てられる前記タスクの優先度が既定の値以上である場合に、前記タスクの処理を実行する前に前記タスクを割り当てたコアに対応するキャッシュに前記データを格納する。
本マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラムによれば、並列処理およびマルチタスク処理が実行される場合であっても、キャッシュの利用効率を高めてマルチコアプロセッサシステムの処理能力を向上させることができるという効果を奏する。
本実施の形態にかかるスケジューリング処理の一例を示す説明図である。 階層的なメモリ構成の一例を示す説明図である。 マルチタスク処理の一例を示す説明図である。 通常のキャッシュコヒーレンシの手順(その1)を示す説明図である。 通常のキャッシュコヒーレンシの手順(その2)を示す説明図である。 通常のキャッシュコヒーレンシの手順(その3)を示す説明図である。 通常のキャッシュコヒーレンシの手順(その4)を示す説明図である。 低優先度並列タスクにおけるキャッシュコヒーレンシの手順を示す説明図である。 スケジューラの機能的構成を示すブロック図である。 共有データの配置処理の手順を示すフローチャートである。 タスクテーブル作成処理の手順を示すフローチャートである。 タスクテーブルのデータ構造例を示すデータテーブルである。 タスクテーブルの設定例を示すデータテーブルである。 タスク実行処理の手順(その1)を示すフローチャートである。 タスク実行処理の手順(その2)を示すフローチャートである。 タスク実行処理の手順(その3)を示すフローチャートである。 タスク実行処理の手順(その4)を示すフローチャートである。 同一優先度の並列タスクの実行例を示す説明図である。 優先度の異なる並列タスクの実行例を示す説明図である。 マルチコアの並列処理におけるスヌープの動作例を示す説明図である。 マルチタスク処理におけるキャッシュ書き換え例を示す説明図である。
以下に添付図面を参照して、この発明にかかるマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラムの好適な実施の形態を詳細に説明する。
図1は、本実施の形態にかかるスケジューリング処理の一例を示す説明図である。本実施の形態では、マルチコアプロセッサシステム100に備えられた複数のプロセッサによって、複数の処理を並列に実行することができる。したがって、マルチコアプロセッサシステム100では、アプリケーションの中から並列に実行可能な処理群(例えば、並列タスク)を抽出して、効率的な並列処理を行うことができる。
また、本実施の形態では、実行対象となる処理に実行順序に関する優先度を、高優先度と低優先度とに設定することによって、再利用性の高いデータを選別してキャッシュメモリに配置することができる。優先度は、処理を実行させた際に一旦キャッシュメモリに格納したデータへアクセスする頻度や、デッドライン時間に基づいて設定されている。各タスクの優先度の設定内容はタスクテーブル111に記憶されている。なお、図1以降、高優先度のタスクを表すブロックを、低優先度のタスクを表すブロックよりも大きく表示する。
したがって、マルチコアプロセッサシステム100のスケジューラ110は、並列実行させる処理に設定されている優先度を参照して、各処理を実行する際にアクセスされるデータ(以下、「共有データ」と呼ぶ)をそれぞれ、最適なメモリ領域に配置する。また、スケジューラ110は、複数のキャッシュメモリに同一の共有データが配置されている場合に、優先度に応じて共有データを同期させるキャッシュコヒーレンシとして、どのような手法を用いるかを選択する。
具体的には、左側のマルチコアプロセッサシステム100のように、同一優先度が設定された並列に実行可能な処理を各CPUによって同時に実行する場合、スケジューラ110は、高優先度の処理の共有データをアクセス速度の速いメモリ領域から優先的に配置する。例えば、高優先度に設定されている並列可能なタスク#0,1およびタスク#3,4の共有データは、キャッシュL1$から順に、アクセス速度の速いメモリ領域に配置される。そして、低優先度に設定されたタスク#2およびタスク#5の共有データについては、高優先度の処理の共有データが配置された後に、残りのメモリに配置される。
一方、右側のマルチコアプロセッサシステム100のように、優先度の異なる並列に実行可能な処理を各CPUによって同時に実行する場合も、スケジューラ110は、左側のマルチコアプロセッサシステム100と同様に、高優先度に設定された処理の共有データをキャッシュL1$へ配置する。その後、スケジューラ110は、残りのメモリに、低優先度に設定されたタスク#2およびタスク#3の共有データを配置する。
また、左側のマルチコアプロセッサシステム100の場合、スケジューラ110は、通常のキャッシュメモリに新たな値が書き込まれたタイミングでキャッシュコヒーレンシを行う。一方、右側のマルチコアプロセッサシステム100の場合、スケジューラ110は、あるキャッシュメモリ(例えば、キャッシュL1$0)に、新たな値が書き込まれた後、CPUから新たな値の書き込みが反映されていないキャッシュメモリ(キャッシュL1$1)への読み込みが発生したタイミングでキャッシュコヒーレンシを行う。
このように、本実施の形態にかかるマルチコアプロセッサシステム100は、利用頻度の高い共有データを、アクセス速度の速いキャッシュメモリに優先的に配置するため、処理速度を向上させることができる。また、低優先度に設定された処理の共有データは、CPUからのアクセス要求が発生するまで、キャッシュコヒーレンシによる同期処理が延期される。したがって、再利用性のない共有データをキャッシュメモリに書き込むなど、処理性能の低下の原因となる動作を回避することができる。以下には、本実施の形態にかかるマルチコアプロセッサシステム100の詳細な構成と処理手順について説明する。
(階層的なメモリ構成)
図2は、階層的なメモリ構成の一例を示す説明図である。図2に例示したように、本実施の形態にかかるマルチコアプロセッサシステム100は、複数種類のメモリ領域を備えている。各メモリ領域は、それぞれプロセッサからのアクセス速度やメモリ容量が異なるため、それぞれ用途に応じたデータが格納される。
図2のように、マルチコアプロセッサシステム100の各プロセッサ(CPU#0,CPU#1)には、キャッシュL1$(各プロセッサに搭載されたキャッシュメモリ)、キャッシュL2$(スヌープ120に搭載されたキャッシュメモリ)、メモリ140およびファイルシステム150という4種類のメモリ領域が用意されている。
各プロセッサと接続関係が近い上位のメモリ領域ほど、アクセス速度が速く、メモリ容量が小さい。反対に、各プロセッサとの接続関係が遠い下位のメモリ領域ほど、アクセス速度が遅く、メモリ容量が大きい。したがって、マルチコアプロセッサシステム100では、図1にて説明したように、優先的に処理したいタスクが利用する共有データや、利用頻度の高い共有データを上位のメモリに配置する。
(マルチタスク処理)
図3は、マルチタスク処理の一例を示す説明図である。本実施の形態にかかるマルチコアプロセッサシステム100におけるマルチタスク処理とは、複数のタスクが複数のプロセッサによって並列に実行される処理を意味する。
例えば、図3では、マルチコアプロセッサシステム100の実行対象となるタスクとしてタスク#0〜タスク#5が用意されている。そして、スケジューラ110の制御によって、CPU#0とCPU#1とは、それぞれ、ディスパッチされたタスクを実行する。スケジューラ110は、複数のタスクの中から実行対象となるタスクをタイムスライシングなどで適宜切り替えながら各タスクを並列に実行させる。
(キャッシュコヒーレンシ)
次に、本実施の形態にかかるマルチコアプロセッサシステム100のスヌープ120によって実行されるキャッシュコヒーレンシの手順について説明する。図1にて説明したように、スヌープ120は、スケジューラ110からの指示に応じて、通常のキャッシュコヒーレンシと、低優先度並列タスクにおけるキャッシュコヒーレンシのいずれかのコヒーレンス方式が設定される。
<通常のキャッシュコヒーレンシ(write時更新)>
図4〜7は、通常のキャッシュコヒーレンシの手順を示す説明図である。図4に例示したマルチコアプロセッサシステム100では、並列タスクを実行するCPU#0およびCPU#1のキャッシュメモリ(キャッシュL1$0およびキャッシュL1$1)に、実行対象のタスクの記述400に基づいて、最新データが格納される。
その後、図5のように、マルチコアプロセッサシステム100の1つのCPUが、記述400の変数aの中身を書き換えたとする。例えば、図5では、CPU#0によって、キャシュL1$0の変数aの値が書き換えられている。すると、同じデータが格納されているキャッシュL1$1の変数aは古いデータとなり、同じ変数aであっても異なる値となってしまう。
そこで、通常のキャッシュコヒーレンシの場合、古いデータが格納されているキャッシュL1$1の変数aの値は、まず、図6のように、記述400に基づいて、パージされる。
その後、図7のように、スヌープ120のバスを介して、キャッシュL1$0の変数aの値は、キャッシュL1$1の変数aの値として格納される。以上説明したように、通常のキャッシュコヒーレンシの場合、図4〜7に例示した処理を施すことによって、キャッシュL1$0とキャッシュL1$1との一貫性が保たれる。
<低優先度並列タスクにおけるキャッシュコヒーレンシ(read時更新)>
図8は、低優先度並列タスクにおけるキャッシュコヒーレンシの手順を示す説明図である。図8は、低優先度に設定された並列タスクをマルチコアプロセッサシステム100によって実行させる場合のコヒーレンシの手順を表している。
まず、マルチコアプロセッサシステム100において、CPU#0とCPU#1とは並列タスクを実行しており、キャッシュL1$0とキャッシュL1$1には同じデータが配置されている(ステップS801)。
その後、マルチコアプロセッサシステム100のCPU#0が変数aの中身を書き換えると(ステップS802)、キャッシュL1$1の変数aは、パージされる(ステップS803)。このように、低優先度並列タスクにおけるキャッシュコヒーレンシの場合も、キャシュメモリに格納されている変数aの書き換えを検出して、古いデータがパージされるまでは、通常のキャッシュコヒーレンシと同じ手順が行われる。
その後、マルチコアプロセッサシステム100のCPU#1によって、変数aへアクセスする処理が実行された場合、スヌープ120は、バスを介して、キャッシュL1$0に格納されている最新の変数aの値を、キャッシュL1$1に格納する(ステップS804)。
以上説明したように、低優先度並列タスクにおけるキャッシュコヒーレンシでは、CPU#1によって最新の書き換え内容が反映されていないキャッシュL1$1の変数aへのアクセス要求が発生した際に、スヌープ120が制御され、コヒーレンスがとられる。したがって、通常のキャッシュコヒーレンシのような冗長なバストランザクションを回避することができる。
上述したように、通常のキャッシュコヒーレンシでは、変数aが更新されたタイミングで動作を開始する。それに対して、低優先度並列タスクにおけるキャッシュコヒーレンシでは、CPU#0によって、キャッシュL1$0の変数aが更新された後、CPU#1によって変数aへの読み込み要求が発生すると、はじめて動作を開始する。具体的には、スヌープ120が、最新の変数aが配置されているキャッシュL1$0の変数aの値を読み込み、読み込んだ値を、キャッシュL1$1の変数aとして配置する。
また、図8に例示したステップS804では、キャッシュL1$0にCPU#0のアクセス対象となるデータが配置されていたが、キャッシュL1$0によって実行されるタスクによっては、他のメモリ領域に格納されているデータがアクセス対象となる場合もある。例えば、CPU#0が、キャッシュL2$やメモリ140やファイルシステム150に配置されているデータへアクセスする場合も想定される。そのような場合には、スヌープ120は、各データ領域から対象となるデータを読み出してキャシュメモリL1$に配置することができる。
以下には、図1に示した本実施の形態にかかるスケジューリング処理を実現するマルチコアプロセッサシステム100のスケジューラ110の機能的構成と、動作内容について説明する。
(スケジューラの機能的構成)
図9は、スケジューラの機能的構成を示すブロック図である。図9において、マルチコア901は、n個のCPU(Central Processing Unit)を備え、マルチコアプロセッサシステム100の全体の制御を司る。マルチコア901とは、コアが複数搭載されたプロセッサまたはプロセッサ群である。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
そして、スケジューラ110は、判断部1001と、第1配置部1002と、第2配置部1003と、第3配置部1004と、特定部1005と、抽出部1006と、割当部1007と、を含む構成である。判断部1001〜割当部1007は、具体的には、例えば、マルチコアプロセッサシステム100の他のメモリ1008(CPUに搭載されたキャッシュメモリ以外のメモリ)に記憶されたプログラムをマルチコア901の中の特定のCPUに実行させることにより、その機能を実現する。
判断部1001は、マルチコアプロセッサシステム100において、実行対象となる処理(以下、「実行対象処理」と呼ぶ)に設定されている優先度がしきい値以上か否かを判断する機能を有する。具体的には、判断部1001は、マルチコアプロセッサシステム100の各プロセッサ(CPU#0〜CPU#n)に割り当てて実行させる処理群のうち各プロセッサに割り当てられる実行対象処理の優先度が、しきい値以上か否かを判断する。判断部1001による判断結果は、一旦、他のメモリ1008などの記憶領域に記憶される。
優先度は、実行対象処理のシミュレーションによって得られる動作結果に基づいて設定される。例えば、各実行対象処理のデッドラインを比較して、デッドラインまでの時間が短い実行対象処理ほど、優先度が高くなるように設定してもよい。本実施の形態にかかるスケジューラ110は、優先度が高く設定されている実行対象処理の共有データを、一旦、アクセス速度の速いメモリ(キャッシュL1$や、キャッシュL2$)に配置すると、処理が終了するまでロック状態に保つ。したがって、優先度が高く設定されている実行対象処理は、他の実行対象処理よりも優先的に実行される。
また、他にも、動作結果を参照して、キャッシュメモリに配置した共有データの更新回数が多い実行対象処理ほど優先度が高くなるように設定してもよい。本実施の形態にかかるスケジューラ110は、再利用性の高い共有データを優先的に各プロセッサのキャッシュメモリ(キャッシュL1$)に配置するため、キャッシュメモリの利用効率を高い値に維持することができる。
また、判断部1001において判断基準となるしきい値は、調整可能である。そして、判断部1001は、各実行対象処理について、設定されている優先度がしきい値以上であれば、高優先度の実行対象処理とし、設定されている優先度がしきい値に満たなければ、低優先度の実行対象処理とする。したがって、実行対象となるアプリケーションに応じて最適な値を設定することができる。また、実行対象処理の単位としては、タスク、プロセス、スレッドなど、任意の単位を選択することができる。本実施の形態では、一例として、タスクを実行対象処理の単位として説明を行う。
第1配置部1002は、判断部1001の判断結果に応じて、各CPUに搭載されたキャッシュメモリへデータを配置する機能を有する。具体的には、第1配置部1002は、判断部1001によって、実行対象処理のうち、しきい値以上の優先度であると判断された高優先度の実行対象処理が実行時にアクセスする共有データを、対象となるCPUのキャッシュメモリに配置する。
例えば、高優先度の実行対象処理であるタスクAが、マルチコア901の中のCPU#1によって実行される場合、タスクAが実行時にアクセスする共有データは、第1配置部1002によって、キャッシュメモリ1に配置される。同様に、高優先度の実行対象処理であるタスクBが、マルチコア901の中のCPU#0によって実行される場合、タスクBが実行時にアクセスする共有データは、第1配置部1002によって、キャッシュメモリ0に配置される。
また、アプリケーション1000によっては、実行対象処理の中に、判断部1001によって、高優先度の実行対象処理が存在しないと判断されることがある。このような場合にキャッシュメモリを空の状態で放置すると、キャッシュメモリの利用効率が低下してしまう。そこで、第1配置部1002は、高優先度の実行対象処理以外の処理(例えば、後述する低優先度の実行対象処理)であっても、各CPUに搭載されたキャッシュメモリへ共有データを配置する。その後、高優先度の実行対象処理が現れた場合、第1配置部1002は、優先的に高優先度の処理の共有データを対象となるCPUのキャッシュメモリに配置する。
また、第1配置部1002は、上述したように、高優先度の実行対象処理の共有データを、対象となるプロセッサのキャッシュメモリに配置する際に、高優先度の実行対象処理の実行が終了するまで、共有データの上書きを禁止(ロック状態)にすることもできる。したがって、第1配置部1002は、高優先度の実行対象処理の共有データに対する、再利用性のないデータによる上書きを防ぐことができる。
第2配置部1003は、判断部1001の判断結果に応じて、各プロセッサのキャッシュメモリよりもアクセス速度の遅い他のメモリ1008に、データを配置する機能を有する。具体的には、第2配置部1003は、判断部1001によって、しきい値以上の優先度でないと判断された低優先度の実行対象処理が実行時にアクセスする共有データを、他のメモリ1008に配置する。
なお、図2にて説明したように、キャッシュメモリ以外の他のメモリ1008は、アクセス速度と、メモリ容量に応じて階層的に複数種類のメモリが用意されている。したがって、第2配置部1003は、アクセス速度の高いメモリの順に配置可能な容量分のデータを順次格納する。例えば、図9の場合、キャッシュL2$→メモリ140→ファイルシステム150の順序でデータが配置される。また、データも、事前のシミュレーションから特定した更新頻度が高いデータが優先的にアクセス速度の速いメモリに配置される。
第3配置部1004は、マルチコア901からアクセス要求のあった共有データを、要求元のCPUに搭載されているキャッシュメモリに配置する機能を有する。具体的には、第3配置部1004は、マルチコア901の中のいずれかのCPU(例えば、CPU#1)においてメモリ1008に配置された共有データへのアクセス要求が発生した場合に、メモリ1008に配置された共有データを、CPU#1のキャッシュメモリ1に配置する。
特定部1005は、判断部1001によって実行対象処理の優先度が、しきい値以上か否かの判断が行われると、マルチコア901の各CPUのキャッシュメモリの中の書き換え可能な領域の容量を特定する機能を有する。書き換え可能な領域とは、すなわち、上書き可能な領域を意味する。
したがって、実行済の処理の共有データが配置されている領域や、低優先度の処理の共有データが配置されている領域は、上書き可能なため、書き換え可能な領域として特定される。特定部1005による特定結果は、一旦、他のメモリ1008などの記憶領域に記憶される。
また、第1配置部1002は、特定部1005によって特定された書き換え可能な領域の容量に応じて、配置処理を調整することもできる。例えば、書き換え可能な領域の容量が高優先度の実行対象処理が実行時にアクセスする共有データの容量よりも小さい場合、第1配置部1002は、共有データをすべてキャッシュメモリに配置することはできない。そこで、第1配置部1002は、共有データのうち、更新頻度が高いデータの順にキャッシュメモリに配置可能な容量分配置する。そして、第2配置部1003は、キャッシュメモリに配置できなかった共有データを他のメモリ1008領域に配置する。
また、反対に、書き換え可能な領域の容量が、高優先度の実行対象処理が実行時にアクセスする共有データの容量よりも大きくなる可能性もある。このような場合、第1配置部1002は、まず、通常通り高優先度の実行対象処理が実行時にアクセスする共有データをキャッシュメモリに配置する。その後、第1配置部1002は、低優先度の実行対象処理が実行時にアクセスする共有データのうち、更新頻度が高いデータの順にキャッシュメモリの中の空き容量に配置する。
抽出部1006は、アプリケーション1000に含まれる実行対象処理のうち、特定の条件を満たす処理を抽出する機能を有する。具体的には、抽出部1006は、実行対象処理のうち、実行時にアクセスするデータが共通する処理(例えば並列タスク)を抽出する。実行時にアクセスするデータが共通するか否かは、各実行対象処理に設定されている共有データの識別子を参照する(例えば、後述する図13にて説明する共有データID)。抽出部1006による抽出結果は、一旦、メモリ1008などの記憶領域に記憶される。
割当部1007は、実行対象処理をマルチコア901の各CPUに割り当てる機能を有する。割当部1007は、スケジューラ110からの指示がなければ、各実行対象処理を、事前に設定されている依存関係および実行順序と、現在の各CPUの処理負荷とに基づいて、最適なCPUに割り当てる。
また、割当部1007は、抽出部1006によって抽出された処理が存在する場合には、共有データが共通する処理同士として抽出された各処理をマルチコア901の中の同一のCPUに割り当てる。さらに、割当部1007は、抽出部1006によって抽出された処理のうち、同一の優先度が設定されている処理を、マルチコア901の中の同一のCPU(例えば、CPU#1など)に割り当てることもできる。
以下には、マルチコアプロセッサシステム100が、実行対象処理の一例として、アプリケーション100を構成する並列タスクを各CPUによって並列に実行する場合について説明する。
(共有データの配置処理)
図10は、共有データの配置処理の手順を示すフローチャートである。図10のフローチャートは、共有データをいずれのキャッシュメモリ(キャッシュL1$やキャッシュL2$)に配置するかを決定する手順を表している。図10の各処理を実行することによって、各タスクを実行する際に利用する共有データをキャッシュコヒーレンシ処理の内容に対応した適切なキャッシュメモリに配置することができる。
図10において、スケジューラ110には、実行対象となるタスクが順次入力される。したがって、スケジューラ110は、まず、実行対象となるタスクが高優先度タスクか否かを判断する(ステップS1001)。ステップS1001において、実行対象となるタスクが高優先度タスクであると判断された場合(ステップS1001:Yes)、スケジューラ110は、実行対象となるタスクの全共有データサイズが、キャッシュL1$サイズよりも小さいか否かを判断する(ステップS1002)。
ステップS1002において、全共有データサイズが、キャッシュL1$サイズよりも小さいと判断された場合(ステップS1002:Yes)、スケジューラ110は、全共有データをL1$に配置して(ステップS1003)、一連の処理を終了する。すなわち、スケジューラ110は、ステップS1003によって、実行対象となるタスクが高優先度タスクであり、かつ、実行対象のタスクの全共有データがCPUのキャッシュメモリに格納可能であれば、全共有データをアクセス速度の速いキャッシュL1$に配置する。
ステップS1002において、全共有データサイズが、キャッシュL1$サイズよりも小さくないと判断された場合(ステップS1002:No)、スケジューラ110は、全共有データをキャッシュL1$に配置することはできない。したがって、スケジューラ110は、実行対象のタスクの共有データのうち、更新頻度の高い順番にキャッシュL1$,L2$に配置する(ステップS1004)。すなわち、スケジューラ110は、ステップS1004によって、共有データのうち更新頻度の高いデータから順番にキャッシュL1$に配置し、キャッシュL1$の容量がなくなると、続いて、残りの共有データのうち更新頻度の高いデータから順番にキャッシュL2$に配置する。
以上説明したステップS1002〜S1004の処理は、高優先度タスクの共有データを配置する場合の手順を表している。一方、高優先度タスク以外のタスク(低優先度のタスク)の共有データは、更新頻度大となるデータを対象に、キャシュL1$の空領域に配置される。
ステップS1001において、実行対象となるタスクが高優先度タスクではないと判断された場合(ステップS1001:No)、スケジューラ110は、共有データのうち、更新頻度の高いデータを対象として配置処理を行う。まず、スケジューラ110は、実行対象のタスクの共有データのうち、更新頻度大の全共有データサイズが未ロックのキャッシュL1$サイズよりも小さいか否かを判断する(ステップS1005)。未ロックのキャッシュL1$サイズとは、キャッシュL1$の全領域のうち、既に他の実行対象のタスクの共有データが配置されているロック領域以外の領域の容量を意味する。
ステップS1005において、更新頻度大の全共有データサイズが未ロックのキャッシュL1$サイズよりも小さいと判断された場合(ステップS1005:Yes)、スケジューラ110は、更新頻度大の全共有データをキャッシュL1$に配置できると判断する。したがって、スケジューラ110は、更新頻度大の共有データをキャッシュL1$に配置して(ステップS1006)、一連の処理を終了する。
一方、更新頻度大の全共有データサイズが未ロックのキャッシュL1$サイズよりも小さくはないと判断された場合(ステップS1005:No)、スケジューラ110は、更新頻度大の全共有データをキャッシュL1$に配置できない。したがって、スケジューラ110は、実行対象のタスクの共有データのうち、更新頻度の高いデータを順番に、キャッシュL1$,L2$へ配置する(ステップS1007)。すなわち、スケジューラ110は、ステップS1004と同様に、共有データのうち、更新頻度の高いデータから順番にキャッシュL1$へ配置する。そして、キャッシュL1$の容量がなくなると、スケジューラ110は、続いて、残りの共有データのうち更新頻度の高いデータから順番にキャッシュL2$へ配置する。
以上説明したように、低優先度タスクの共有データの場合、スケジューラ110は、高優先度タスクの共有データが配置されていないメモリ領域に、低優先度タスクの共有データを効率的に配置することができる。たとえ、アクセス速度の速いメモリ領域(例えば、キャッシュL1$)に配置されても、高優先度タスクの共有データを配置する場合と異なり、低優先度タスクの共有データはロックされていないため、高優先度タスクの処理を邪魔するような事態を防ぐことができる。
(タスクテーブル作成処理)
図11は、タスクテーブル作成処理の手順を示すフローチャートである。図11のフローチャートは、マルチコアプロセッサシステム100によって実行させるアプリケーションを構成するタスクのシミュレーションを行い、シミュレーション結果に基づいて、タスクの優先度を表すタスクテーブル111を作成する手順を表している。図11の各処理を実行することによって、スケジューラ110が、各タスクの共有データを適切に配置するために必要な、タスクテーブル111を作成することができる。
図11において、スケジューラ110は、まず、実行対象の各タスク中の各データサイズの解析を行う(ステップS1101)。続いて、スケジューラ110は、各タスクのデッドライン解析を行う(ステップS1102)。さらに、スケジューラ110は、タスク間のデータ依存解析を行う(ステップS1103)。以上説明したステップS1101〜S1103によって、スケジューラ110は、各タスクの構成を特定するために必要なデータを取得できる。ステップS1101〜S1103によって取得されたデータは、タスクテーブル111に格納され、後述する優先度を設定するためのシミュレーションに利用される。
続いて、スケジューラ110は、各タスクの中に未シミュレーションの並列タスクが存在するか否かを判断する(ステップS1104)。ステップS1104において、未シミュレーションの並列タスクが存在すると判断された場合(ステップS1104:Yes)、スケジューラ110は、未シミュレーションの並列タスクのいずれか1組の並列タスクのシミュレーションを実行する(ステップS1105)。
その後、スケジューラ110は、依存解析のあるデータの更新頻度を測定し(ステップS1106)、依存関係のあるデータの更新頻度がしきい値よりも大きいか否かを判断する(ステップS1107)。ステップS1107は、優先度の設定が必要か否かを判断するための処理である。
ステップS1107において、依存関係のあるデータの更新頻度がしきい値よりも大きい場合(ステップS1107:Yes)、スケジューラ110は、タスクテーブル111に格納されているデッドラインを基に優先度を設定する(ステップS1108)。一方、依存関係のあるデータの更新頻度がしきい値よりも大きくはない場合(ステップS1107:No)、一旦キャッシュに格納されても更新頻度が低いため、スケジューラ110は、優先度を決定せずに、ステップS1109の処理に移行する。
次に、スケジューラ110は、処理中の並列タスクをシミュレーション済タスクに設定し(ステップS1109)、ステップS1104の処理に戻り、未シミュレーションの並列タスクが存在するか否かを判断する。
ステップS1104において、未シミュレーションの並列タスクが存在すると判断される限り、スケジューラ110は、ステップS1105〜S1109の処理によってシミュレーションを繰り返して、並列タスクの優先度を設定する。ステップS1104において、未シミュレーションの並列タスクが存在しないと判断されると(ステップS1104:No)、スケジューラ110は、すべての並列タスクのシミュレーションが終了したため、一連の処理を終了する。
以上説明したように、スケジューラ110は、図11の各処理を実行することによって、タスクテーブル111を作成することができる。なお、上述したタスクテーブル作成処理は、スケジューラ110が実行主体となっているが、他のコンパイラやシミュレータが実行主体となって事前に実行しておいてもよい。
例えば、ステップS1101〜S1103による解析は、一般的なコンパイラによって実行することができる。また、ステップS1101〜S1103による解析結果を利用したステップS1105におけるシミュレーションも、各タスクを実行した場合の実行時間や更新回数を見積もる公知のシミュレータによって実行することができる(例えば、特開2000−276381参照。)。
図12は、タスクテーブルのデータ構造例を示すデータテーブルである。また、図13は、タスクテーブルの設定例を示すデータテーブルである。図12のデータテーブル1200は、図11にて説明したタスクテーブル作成処理によって作成されたタスクテーブル111のデータ構造例を表している。
タスクテーブル111は、図12のデータテーブル1200のように、タスク情報を表す下記の情報群のフィールドと、共有データ情報を表す下記の情報群のフィールドとから構成されている。なお、タスクテーブル111のうち、タスク名、タスクID、デッドラインなど、値が空白のフィードは、タスク毎に異なる値が入力される。また、優先度やコヒーレンスモードなど、値が○/×のように二値となっているフィールドは、二値のいずれかの値が入力される。
<タスク情報>
・タスク名 :(タスクの名称)
・タスクID :(タスクの識別子)
・デッドライン :(ステップS1102の解析結果)
・優先度 :高/低(ステップS1108の設定内容)
・コヒーレンスモード :Write時更新/read時更新
・他のCPUへのfork:許可/不許可
<共有データ情報>
・共有データ名 :(データの名称)
・共有データID :(データのID)
・更新回数 :(ステップS1106の測定結果)
・配置されるキャッシュレベル:L1(キャッシュL1$)/L2(キャッシュL2$)
・データサイズ :(ステップS1101の解析結果)
上記のタスク情報のうち、コヒーレンスモード、他のCPUへのforkおよび配置されるキャッシュレベルは、タスク実行時に決定される。具体的には、コヒーレンスモード、他のCPUへのforkは、後述する図14〜17によって説明されるタスク実行処理によって決定される。また、配置されるキャッシュレベルは、上述の図10によって説明した共有データの配置処理によって決定される。なお、タスクテーブル111の具体的な数値が設定された、データテーブル1200を図13に例示している。
(タスク実行処理)
図14〜17は、タスク実行処理の手順を示すフローチャートである。図14〜17のフローチャートは、スケジューラ110が、実行対象となる並列タスクを各プロセッサに実行させる際の手順を表している。図14〜17の各処理を実行することによって、実行対象となる並列タスクは、タスクテーブル111に設定されている優先度や、実行中の他の並列タスクの優先度に応じたコヒーレンス手法に基づいて実行される。
図14において、スケジューラ110は、まず、実行対象のタスクにおいて状態遷移が発生したか否かを判断する(ステップS1401)。ステップS1401における状態遷移とは、「タスク生成」、「タスク終了」および「タスクスイッチ」を意味する。したがって、ステップS1401において、状態遷移が発生したと判断された場合、スケジューラ110は、さらに、上記の3種類の中のいずれの状態になったかを判断する。
ステップS1401において、スケジューラ110は、状態遷移が発生するまで待機状態となる(ステップS1401:Noのループ)。ステップS1401において、状態遷移のうち、タスク生成が発生したと判断された場合(ステップS1401:Yesタスク生成)、スケジューラ110は、実行対象のタスクが並列タスクか否かを判断する(ステップS1402)。
ステップS1402において、実行対象のタスクが並列タスクであると判断された場合(ステップS1402:Yes)、スケジューラ110は、新たに生成された並列タスクが、Masterスレッドか否かを判断する(ステップS1403)。Masterスレッドとは、優先的に実行されるスレッドである。
ステップS1403において、新たに生成された並列タスクが、Masterスレッドであると判断された場合(ステップS1403:Yes)、スケジューラ110は、さらに、新たに生成された並列タスクが、高優先度タスクか否かを判断する(ステップS1404)。ステップS1404において、高優先度タスクか否かは、タスクテーブル111を参照して判断することができる。
ステップS1404において、新たに生成された並列タスクが、高優先度タスクであると判断された場合(ステップS1404:Yes)、スケジューラ110は、さらに、CPUにおいて高優先度タスクを実行中か否かを判断する(ステップS1405)。
ステップS1405において、高優先度タスクを実行中であると判断された場合(ステップS1405:Yes)、スケジューラ110は、実行対象のタスクを実行に移すための準備処理を行う。すなわち、スケジューラ110は、実行中の並列タスクを、並列スレッドを実行中のCPUの中で負荷最小のCPUにmigration(データ移行)し、実行中に新たなスレッドの他のCPUへのfork(新たなスレッドのコピー生成)を禁止する(ステップS1406)。
さらに、スケジューラ110は、ステップS1406において、migrationしたタスクの共有データを配置したキャッシュ領域を、ロックする(ステップS1407)。そして、スケジューラ110は、migrationしたタスクを逐次実行し(ステップS1408)、新たに生成された並列タスクにおいてスレッドの他のCPUへのforkを禁止し、負荷最小のCPUに割り当てる(ステップS1409)。
その後、スケジューラ110は、新たに生成された並列タスクの共有データを配置したキャッシュ領域をロックし、タスクの実行を開始する(ステップS1410)。ステップS1410の処理が終了すると、スケジューラ110は、ステップS1401の処理に戻り、新たに状態遷移が発生するまで待機状態となる。
また、ステップS1403において、新たに生成された並列タスクがMasterスレッドではないと判断された場合(ステップS1403:No)、スケジューラ110は、スレッドのforkが禁止されているか否かを判断する(ステップS1411)。ステップS1403において、判断基準となっているスレッドとは、新たに生成されたタスクを構成するスレッドである。
ステップS1403において、新たに生成されたタスクのスレッドのforkが禁止されていると判断された場合(ステップS1411:Yes)、スケジューラ110は、新たに生成されたタスクをMasterスレッドが実行されるCPUと同じCPUにキューイングする(ステップS1412)。ステップS1412の処理によってキューイングされたタスクは、キューイング先のCPUによって、現在実行中のタスクの終了後に実行される。スケジューラ110は、ステップS1412の処理が終了すると、ステップS1401の処理に戻り、新たに状態遷移が発生するまで待機状態となる。
また、スケジューラ110は、新たに生成されたタスクが並列タスクではないと判断された場合(ステップS1402:No)、または、スレッドのforkが禁止されていないと判断された場合(ステップS1411:No)、タスクを負荷最小のCPUにキューイングする(ステップS1413)。ステップS1413によってキューイングされるタスクは、ステップS1401によって新たに生成されたと判断されたタスクである。スケジューラ110は、ステップS1413の処理が終了すると、ステップS1401の処理に戻り、新たに状態遷移が発生するまで待機状態となる。
図15のフローチャートは、ステップS1401において、タスク終了が発生したと判断された場合(1401:Yesタスク終了)と、タスクスイッチが発生したと判断された場合(ステップS1401:Yesタスクスイッチ)とにおけるスケジューラ110の処理を表している。
図15において、スケジューラ110は、まず、ステップS1401において、タスク終了が発生したと判断された場合(1401:Yesタスク終了)、ロックしていた並列タスクの共有データを配置したキャッシュ領域を、開放する(ステップS1501)。
その後、スケジューラ110は、実行待ちのタスクがあるか否かを判断する(ステップS1502)。ステップS1502において、実行待ちのタスクがあると判断された場合(ステップS1502:Yes)、スケジューラ110は、ステップS1503に移行して、実行待ちのタスクを実行するための処理を行う。一方、ステップS1502において、実行待ちのタスクがないと判断された場合(ステップS1502:No)、スケジューラ110は、図14のステップS1401の処理に戻り、次の状態遷移が発生するまで待機状態となる。
一方、ステップS1401において、タスクスイッチが発生したと判断された場合(1401:Yesタスクスイッチ)、スケジューラ110は、タスクの実行権を渡すのが低優先度の並列タスクか否かを判断する(ステップS1503)。なお、ステップS1502において、実行待ちのタスクがあると判断された場合(ステップS1502:Yes)も、スケジューラ110は、ステップS1503の判断処理を行う。
ステップS1503において、タスクの実行権を渡すのが低優先度の並列タスクであると判断された場合(ステップS1503:Yes)、スケジューラ110は、低優先度の並列タスクを実行する際のキャッシュコヒーレンス方式を採用する。すなわち、スケジューラ110は、CPUのキャシュコヒーレンス方式を、他のCPUがデータにアクセスしたときにスヌープ機構が動作するモードに設定する(ステップS1504)。
ステップS1503において、タスクの実行権を渡すのが低優先度の並列タスクではないと判断された場合(ステップS1503:No)、または、ステップS1504の処理が終了すると、スケジューラ110は、実行対象となるタスクの実行を開始する(ステップS1505)。ステップS1505によってタスクが実行されると、スケジューラ110は、ステップS1401の処理に戻り、次のタスクの状態遷移が発生するまで待機状態となる。
図16のフローチャートは、ステップS1404において、新たに生成された並列タスクが、高優先度タスクではないと判断された場合(ステップS1404:No)のスケジューラ110の処理を表している。
図16において、スケジューラ110は、まず、ステップS1404にて新たに生成された並列タスクが、高優先度タスクではないと判断された場合(ステップS1404:No)、高優先度タスクを実行中か否かを判断する(ステップS1601)。なお、ステップS1601では、新たに生成されたタスクを実行させるCPUにおいて、現在、高優先度タスクが実行されているか否かを判断する。
ステップS1601において、高優先度タスクを実行中であると判断された場合(ステップS1601:Yes)、スケジューラ110は、低優先度の並列タスクを実行する際のキャッシュコヒーレンス方式を採用する。すなわち、スケジューラ110は、実行中の並列タスクのキャシュコヒーレンス方式を、他のCPUがデータにアクセスするときにスヌープ120のスヌープ機構が動作するモードに設定する(ステップS1602)。
その後、スケジューラ110は、実行対象となるタスクを負荷最小のCPUにキューイングして(ステップS1603)、ステップS1401の処理に移行する。ステップS1603において、キューイングされたタスクは、現在実行中のタスクが終了した後、実行される。負荷最小のCPUとは、キューイング済のタスクの処理量が最小のCPUを意味する。なお、ステップS1401に移行したスケジューラ110は、次に遷移状態が発生するまで待機状態となる。
ステップS1601において、高優先度タスクを実行中ではないと判断された場合(ステップS1601:No)、スケジューラ110は、高優先度の並列タスクを実行する際のキャッシュコヒーレンス方式を採用する。すなわち、スケジューラ110は、実行中の並列タスクを、並列タスクに含まれる並列スレッドを実行中の他のCPUの中で負荷最小のCPUにmigrationし、実行中に並列タスクに含まれる新たなスレッドの他のCPUへのforkを禁止する(ステップS1604)。
さらに、スケジューラ110は、ステップS1604において、migrationしたタスクを逐次実行させる(ステップS1605)。そして、スケジューラ110は、新たに生成された並列タスクにおいて、並列タスクに含まれるスレッドの他のCPUへのforkを禁止し、負荷最小のCPUにキューイングする(ステップS1606)。
ステップS1606によって、キューイングされたタスクは、現在実行中のタスクが終了した後、実行される。また、ステップS1606が終了すると、スケジューラ110は、ステップS1401の処理に移行して、新たな状態遷移が発生するまで待機状態となる。
図17のフローチャートは、ステップS1405において、新たに生成された並列タスクが、高優先度タスクを実行中ではないと判断された場合(ステップS1405:No)のスケジューラ110の処理を表している。
図17において、スケジューラ110は、まず、ステップS1405にて対象となるCPUが高優先度タスクを実行中ではないと判断された場合(ステップS1405:No)、新たに生成されたタスクを負荷最小のCPUに割り当てる(ステップS1701)。
そして、スケジューラ110は、新たに生成された並列タスクが逐次実行ではデッドライン制約を満たさないか否かを判断する(ステップS1702)。ステップS1702において、スケジューラ110は、タスクテーブル111に設定されているデッドライン制約に基づいてデットライン制約を満たさないか否かの判断を行う。
ステップS1702において、デッドライン制約を満たさないと判断された場合(ステップS1702:Yes)、スケジューラ110は、さらに、現在低優先度の並列タスクを実行中か否かを判断する(ステップS1703)。
ステップS1703において、低優先度の並列タスクが実行中と判断された場合(ステップS1703:Yes)、スケジューラ110は、低優先度の並列タスクを実行する際のキャッシュコヒーレンス方式を採用する。すなわち、スケジューラ110は、実行中の並列タスクのコヒーレンス方式を、他のCPUがデータにアクセスした時にスヌープ機構が動作するモードに設定する(ステップS1704)。
ステップS1704の処理が終了すると、スケジューラ110は、新たに生成された並列タスクの共有データを配置したキャシュ領域をロックする(ステップS1705)。また、ステップS1703において、低優先度の並列タスクを実行中ではないと判断された場合(ステップS1703:No)、スケジューラ110は、通常のコヒーレンス方式を採用するため、ステップS1704の処理を行わずに、ステップS1705の処理に移行する。
ステップS1705の処理が終了すると、スケジューラ110は、新たに生成された並列タスクの実行を開始させ(ステップS1706)、ステップS1401の処理に戻り、次のタスクの状態遷移が発生するまで待機状態となる。
一方、ステップS1702において、デッドライン制約を満たすと判断された場合(ステップS1702:No)、スケジューラ110は、新たに生成された並列タスクの共有データを配置したキャッシュ領域を、ロックする(ステップS1707)。
そして、スケジューラ110は、新たに生成された並列タスクの逐次実行を開始させる(ステップS1708)。その後、スケジューラ110は、ステップS1401の処理に戻り、次のタスクの状態遷移が発生するまで待機状態となる。
以上説明したように、スケジューラ110は、並列タスクとして特定された各タスクにそれぞれ、どのような優先度(高優先度/低優先度)が設定されているか、さらに、並列タスク同士が同一の優先度であるかに応じて、最適なCPUに実行されるようにスケジューリングすることができる。また、スケジューラ110は、各タスクの優先度に応じて共有データのキャッシュコヒーレンス方式を設定するため、キャッシュメモリ(キャッシュL1$)の利用効率の低下を防ぐことができる。
(適用例)
次に、本実施の形態にかかるスケジューリング処理を通信機器に適用させた場合の動作例について説明する。具体的には、スマートフォンなどの携帯型の通信機器と、サーバなどの固定型の通信機器とによってそれぞれ実行される並列タスクについて説明する。
<同一優先度の並列タスクの場合>
図18は、同一優先度の並列タスクの実行例を示す説明図である。図18では、スマートフォン1801は、他のスマートフォン1802とWLAN(Wireless LAN)の規格に準拠した通信を行っている。さらに、スマートフォン1801は、サーバ1803ともLTE(Long Term Evolution)の規格に準拠した通信を行っている。
WLANの規格に沿ったタスク(WLAN#0,1)と、LTEの規格に沿ったタスク(LTE#0,1)は、共にリアルタイム制約があるため高優先度タスクとなる。したがって、スマートフォン1801は、WLAN#0,1およびLTE#0,1を、同一優先度の並列タスクとして実行する。スマートフォン1801のスヌープ120では、同一優先度の並列タスクが実行されるため、通常のキャッシュコヒーレンシを行うスヌープ方式が採用される。
<優先度の異なる並列タスクの場合>
図19は、優先度の異なる並列タスクの実行例を示す説明図である。図19では、スマートフォン1801が、サーバ1803とLTEの規格に準拠した通信を行っている。また、スマートフォン1801では、通信を必要としないドライバのアプリケーションについてのタスク(driver#0,1)が実行されている。
スマートフォン1801によって実行されているドライバのアプリケーションは、リアルタイム制約が設けられていないため、低優先度タスクとなる。したがって、スマートフォン1801は、LTE#0,1を、高優先度の並列タスクとして実行し、driver#0,1を、低優先度の並列タスクとして実行する。優先度の異なる並列タスクが実行されるため、スマートフォン1801のスヌープ120では、LTE#0,1に対して低優先度並列タスクにおけるキャッシュコヒーレンシを行うスヌープ方式が採用される。
以上説明したように、マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラムによれば、利用頻度の高い共有データを、アクセス速度の速いキャッシュメモリに優先的に配置するため、処理速度を向上させることができる。
また、低優先度に設定された処理の共有データの場合、CPUからのアクセス要求が発生するまで、キャッシュコヒーレンシによる同期処理を延期する。すなわち、再利用性のない共有データをキャッシュメモリに書き込むといった、マルチコアプロセッサシステムの処理性能の低下の原因となる処理を回避することができる。したがって、並列処理およびマルチタスク処理が実行される場合であっても、キャッシュの利用効率を高めてマルチコアプロセッサシステムの処理能力を向上させることができる。
また、高優先度タスクがなく、キャッシュメモリに空き領域がある場合には、低優先度タスクの共有データを、各CPUのキャッシュメモリに配置してもよい。したがって、高優先後タスクが存在しない場合であっても、キャッシュメモリを効率的に利用させることができる。
さらに、キャッシュメモリに配置した高優先度タスクの実行時にアクセスされる共有データは、高優先度タスクが終了するまでロックされるように設定してもよい。共有データをロックすることによって、タスクスイッチが発生しても、他のタスクの共有データによって高優先度タスクの共有データが書き換えられてしまうような事態を防ぎ、高優先度タスクを効率的に実行させることができる。
また、高優先度タスクが実行時にアクセスする共有データが、キャッシュメモリの容量よりも大きく、キャッシュメモリに配置しきれない場合には、キャッシュメモリ以外のメモリ領域のうち、アクセス速度の速いメモリ領域に共有データを配置してもよい。また、共有メモリを配置する際に、複数のメモリ領域が存在する場合には、アクセス速度の早いメモリから順番に共有データを配置する。したがって、高優先度タスクの共有データを優先的にアクセス速度の速いメモリ領域に配置するため、効率的な処理を期待することができる。
さらに、高優先度タスクが実行時にアクセスする共有データが、キャッシュメモリの容量よりも小さく、キャッシュメモリに余裕がある場合には、余った領域に低優先度タスクの共有データを配置してもよい。余った領域に低優先度タスクの共有データを配置することによって、キャッシュメモリの空き容量を防ぎ、高い利用効率を維持することができる。
また、各CPUのキャシュメモリの他のメモリ領域として、複数のメモリ領域が用意されている場合には、アクセス速度の速いメモリ領域から順番に共有データを配置してもよい。優先度にかかわらず、各タスクの共有データをアクセス速度の速いメモリ領域に優先的に配置することによって、各タスクを効率的に実行させることができる。
さらに、実行対象となるタスクの中から並列タスクを抽出して、同一のプロセッサに割り当ててもよい。さらに、並列タスクのうち優先度も同一の並列タスクを抽出して同一のプロセッサに割り当ててもよい。優先度が同一の並列タスクが同一のプロセッサに割り当てられることによって、一旦キャシュメモリに配置した共有データを効率的に利用することができる。
なお、本実施の形態で説明したマルチコアプロセッサシステムの制御方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本マルチコアプロセッサシステムの制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本マルチコアプロセッサシステムの制御プログラムは、インターネットなどのネットワークを介して配布してもよい。
100 マルチコアプロセッサシステム
110 スケジューラ
120 スヌープ
130 メモリコントローラ
140 メモリ
150 ファイルシステム
1000 アプリケーション
1001 判断部
1002 第1配置部
1003 第2配置部
1004 第3配置部
1005 特定部
1006 抽出部
1007 割当部

Claims (6)

  1. タスクをそれぞれ処理する複数のコアと、
    前記複数のコアがタスクを処理する場合にアクセスするデータをそれぞれ記憶する複数のキャッシュと
    を有するマルチコアプロセッサシステムであって、前記複数のコアのうちの第1のコアは、
    前記複数のコアのいずれかに割り当てられる前記タスクの優先度が既定の値以上である場合に、前記タスクの処理を実行する前に前記タスクを割り当てた第2のコアに対応する第2のキャッシュに、前記第2のコアが前記タスクを処理する場合にアクセスする前記データを格納する
    マルチコアプロセッサシステム。
  2. 前記第1のコアは、
    前記タスクのうち、実行時にアクセスするデータが共通するタスクを抽出し、抽出されたタスクを前記複数のコアの中の同一のコアに割り当てることを特徴とする請求項1に記載のマルチコアプロセッサシステム。
  3. タスクをそれぞれ処理する複数のコアと、前記複数のコアがタスクを処理する場合にアクセスするデータをそれぞれ記憶する複数のキャッシュとを有するマルチコアプロセッサシステムの制御方法であって、前記複数のコアのうちの第1のコアが、
    前記複数のコアのいずれかに割り当てられる前記タスクの優先度が既定の値以上であるか判定し、
    前記タスクの優先度が前記既定の値以上である場合に、前記タスクの処理を実行する前に前記タスクを割り当てた第2のコアに対応する第2のキャッシュに、前記第2のコアが前記タスクを処理する場合にアクセスする前記データを格納する
    処理を実行する、マルチコアプロセッサシステムの制御方法。
  4. 前記第1のコアは、
    前記タスクのうち、実行時にアクセスするデータが共通するタスクを抽出し、抽出されたタスクを前記複数のコアの中の同一のコアに割り当てることを特徴とする請求項3に記載のマルチコアプロセッサシステムの制御方法。
  5. タスクをそれぞれ処理する複数のコアと、前記複数のコアがタスクを処理する場合にアクセスするデータをそれぞれ記憶する複数のキャッシュとを有するマルチコアプロセッサシステムの制御プログラムであって、前記複数のコアのうちの第1のコアに、
    前記複数のコアのいずれかに割り当てられる前記タスクの優先度が既定の値以上であるか判定し、
    前記タスクの優先度が前記既定の値以上である場合に、前記タスクの処理を実行する前に前記タスクを割り当てた第2のコアに対応する第2のキャッシュに、前記第2のコアが前記タスクを処理する場合にアクセスする前記データを格納する
    処理を実行させる、マルチコアプロセッサシステムの制御プログラム。
  6. 前記第1のコアは、
    前記タスクのうち、実行時にアクセスするデータが共通するタスクを抽出し、抽出されたタスクを前記複数のコアの中の同一のコアに割り当てることを特徴とする請求項5に記載のマルチコアプロセッサシステムの制御プログラム。
JP2014077378A 2014-04-03 2014-04-03 マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム Expired - Fee Related JP5776813B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014077378A JP5776813B2 (ja) 2014-04-03 2014-04-03 マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014077378A JP5776813B2 (ja) 2014-04-03 2014-04-03 マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2012530494A Division JP5516744B2 (ja) 2010-08-27 2010-08-27 スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法

Publications (2)

Publication Number Publication Date
JP2014146366A JP2014146366A (ja) 2014-08-14
JP5776813B2 true JP5776813B2 (ja) 2015-09-09

Family

ID=51426493

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014077378A Expired - Fee Related JP5776813B2 (ja) 2014-04-03 2014-04-03 マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム

Country Status (1)

Country Link
JP (1) JP5776813B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6705443B2 (ja) * 2015-03-30 2020-06-03 日本電気株式会社 データ配置先決定装置、方法およびプログラム
KR101924466B1 (ko) * 2017-08-17 2018-12-04 고려대학교 산학협력단 하둡 기반 시스템을 위한 캐시 인지 작업 스케줄링 장치 및 방법
JP7476638B2 (ja) 2020-04-15 2024-05-01 株式会社デンソー マルチプロセッサシステム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09282226A (ja) * 1996-04-12 1997-10-31 Nec Corp 登録資格フラグ付きキャッシュメモリ
JP3964821B2 (ja) * 2003-04-21 2007-08-22 株式会社東芝 プロセッサ、キャッシュシステム及びキャッシュメモリ
JP4374221B2 (ja) * 2003-08-29 2009-12-02 パナソニック株式会社 コンピュータシステムおよび記録媒体

Also Published As

Publication number Publication date
JP2014146366A (ja) 2014-08-14

Similar Documents

Publication Publication Date Title
JP5516744B2 (ja) スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法
US10554577B2 (en) Adaptive resource scheduling for data stream processing
JP6314355B2 (ja) メモリ管理方法およびデバイス
US8418181B1 (en) Managing program execution based on data storage location
US8499010B2 (en) Garbage collection in a multiple virtual machine environment
CN102981929B (zh) 磁盘镜像的管理方法和系统
US9378069B2 (en) Lock spin wait operation for multi-threaded applications in a multi-core computing environment
US20130254776A1 (en) Method to reduce queue synchronization of multiple work items in a system with high memory latency between processing nodes
US20130339956A1 (en) Computer system and optimal arrangement method of virtual machine in computer system
WO2014022402A1 (en) Coherence management using a coherent domain table
JP5861706B2 (ja) スケジューリング方法およびシステム
US20170123975A1 (en) Centralized distributed systems and methods for managing operations
US20190286582A1 (en) Method for processing client requests in a cluster system, a method and an apparatus for processing i/o according to the client requests
JP2005338985A (ja) 記憶領域管理方法及びシステム
US8954969B2 (en) File system object node management
CN108733585B (zh) 缓存系统及相关方法
JP5776813B2 (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム
US9934147B1 (en) Content-aware storage tiering techniques within a job scheduling system
JP5158576B2 (ja) 入出力制御システム、入出力制御方法、及び、入出力制御プログラム
KR20140037749A (ko) 실행 제어 방법 및 멀티프로세서 시스템
AU2011229395B2 (en) Dual mode reader writer lock
Chen et al. Data prefetching and eviction mechanisms of in-memory storage systems based on scheduling for big data processing
US9858204B2 (en) Cache device, cache system, and cache method
US20090320036A1 (en) File System Object Node Management
JP2020035243A (ja) ストレージシステム及び記憶制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140507

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150203

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150403

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150609

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150622

R150 Certificate of patent or registration of utility model

Ref document number: 5776813

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees