Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP6007516B2 - リソース配分システム、リソース配分方法、及びリソース配分プログラム - Google Patents
[go: Go Back, main page]

JP6007516B2 - リソース配分システム、リソース配分方法、及びリソース配分プログラム - Google Patents

リソース配分システム、リソース配分方法、及びリソース配分プログラム Download PDF

Info

Publication number
JP6007516B2
JP6007516B2 JP2012046963A JP2012046963A JP6007516B2 JP 6007516 B2 JP6007516 B2 JP 6007516B2 JP 2012046963 A JP2012046963 A JP 2012046963A JP 2012046963 A JP2012046963 A JP 2012046963A JP 6007516 B2 JP6007516 B2 JP 6007516B2
Authority
JP
Japan
Prior art keywords
resource
amount
task
performance
thread
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.)
Active
Application number
JP2012046963A
Other languages
English (en)
Other versions
JP2013182502A (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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2012046963A priority Critical patent/JP6007516B2/ja
Publication of JP2013182502A publication Critical patent/JP2013182502A/ja
Application granted granted Critical
Publication of JP6007516B2 publication Critical patent/JP6007516B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、リソース配分システム、リソース配分方法、及びリソース配分プログラムに関し、特にタスクの所定区間における性能保証が可能なリソース配分システム、リソース配分方法、及びリソース配分プログラムに関する。
複数のタスクを処理するコンピュータシステムでは、各タスクの処理順序や優先度を制御する、いわゆる、「タスクスケジューリング」が行われることがある。
タスクスケジューリングを行うリソース制御システムの一例が、特許文献1に記載されている。特許文献1のリソース制御システムは、複数のCPU(Central Processing Unit)コアを有するコンピュータシステム上で複数のメディア処理が行われる際の、タスクスケジューリングを行う技術である。このシステムは、グローバルスケジューラと呼ばれる機能ブロックがタスクの処理順序や優先度を制御し、最終的なメディア処理性能を高めることを目指している。
特許文献1には、タスクの実行を優先させる選択基準として、4つのポリシーが例示されている。第1のポリシーは、データの作成時刻を見て、処理のレイテンシの最小化を図るポリシーである。第2のポリシーは、当該タスクの出力に依存している別タスクの数が多いものを優先するポリシーである。第3のポリシーは、当該タスクの入力として必要なデータが揃っていないものを低優先とするポリシーである。第4のポリシーは、キャッシュミスを減らすために、同一のプロセッサによって実行されるスレッドを優先するポリシーである。
特許文献2、3には、プロセスやジョブを処理するための、プロセッサやサーバ等のリソースを予約するシステムが開示されている。
特表2010−508574号公報(第14−15頁) 特開2005−157955号公報(第10−11頁) 特開2005−234637号公報(第7頁)
特許文献1の技術の問題点は、メディア処理のように時間当たりの処理性能を一定以上に保つ必要があるシステムにおいても、入力負荷が一時的に増加すると処理性能が低下することである。処理性能が低下すると、システムで求められる最低処理性能を満たせなくなる可能性がある。
なぜなら、一時的な高負荷状態に対し、負荷の増大分に見合う追加演算リソースが配分されないため、高負荷状態における処理に通常より長い時間を要するからである。
特許文献2、3の技術では、処理が完了すべき時刻や必要な計算量、必要なリソースの量を考慮してリソースの予約を行うことができる。しかし、特許文献2、3の技術にも、入力負荷が一時的に増加した場合に対応できないという、特許文献1の技術と同様の課題がある。
(発明の目的)
本発明の目的は、入力負荷の変動が生じても、タスクの所定区間の処理性能の最低値を保証できるような、リソース配分システム、リソース配分方法及びリソース配分プログラムを提供することにある。
本発明のリソース配分システムは、タスクにおいて一定以上の処理性能の保証が要求される性能保証区間の処理のためにタスクへ割り当てられたと仮定されたリソースの量である第1のリソース量と、タスクに第1のリソース量のリソースが割り当てられたときの性能保証区間における処理性能との対応関係を表すリソース−性能対応情報を保持する性能情報保持部と、性能保証区間を有する性能保証型タスクから、性能保証区間の実行開始前に、性能保証区間の処理が完了されるべき時間を表す処理完了時間要求値及び性能保証区間で予定される処理負荷量を表す予定処理負荷量を受信し、処理完了時間要求値、予定処理負荷量及びリソース−性能対応情報に基づいて性能保証区間の処理に用いるリソースの要求量である第2のリソース量を決定し、性能保証区間に対して第2のリソース量のリソースが割り当てられたことを示す割当通知を性能保証型タスクに送信するリソース要求量決定部と、性能保証型タスクに現在割り当てられているリソースの量を表す第3のリソース量を保持するタスク状態保持部と、割当対象となりうるリソースの総量である第4のリソース量、第2のリソース量及び第3のリソース量に基づいて、性能保証区間に対する第2のリソース量のリソースの割当の可否を決定するリソース配分決定部と、を備えることを特徴とする。
本発明のリソース配分方法は、タスクにおいて一定以上の処理性能の保証が要求される性能保証区間の処理のためにタスクへ割り当てられたと仮定されたリソースの量である第1のリソース量と、タスクに第1のリソース量のリソースが割り当てられたときの性能保証区間における処理性能との対応関係を表すリソース−性能対応情報、及び性能保証区間を有する性能保証型タスクに現在割り当てられているリソースの量を表す第3のリソース量を保持し、性能保証型タスクから、性能保証区間の実行開始前に、性能保証区間の処理が完了されるべき時間を表す処理完了時間要求値及び性能保証区間で予定される処理負荷量を表す予定処理負荷量を受信し、処理完了時間要求値、予定処理負荷量及びリソース−性能対応情報に基づいて性能保証区間の処理に用いるリソースの要求量である第2のリソース量を決定し、割当対象となりうるリソースの総量である第4のリソース量、第2のリソース量及び第3のリソース量に基づいて、性能保証区間に対する第2のリソース量のリソースの割当の可否を決定し、性能保証区間に対して第2のリソース量のリソースが割り当てられたことを示す割当通知を性能保証型タスクに送信することを特徴とする。
本発明のリソース配分プログラムは、リソース配分システムが備えるコンピュータを、タスクにおいて一定以上の処理性能の保証が要求される性能保証区間の処理のためにタスクへ割り当てられたと仮定されたリソースの量である第1のリソース量と、タスクに第1のリソース量のリソースが割り当てられたときの性能保証区間における処理性能との対応関係を表すリソース−性能対応情報、及び性能保証区間を有する性能保証型タスクに現在割り当てられているリソースの量を表す第3のリソース量を保持する保持手段と、性能保証型タスクから、性能保証区間の実行開始前に、性能保証区間の処理が完了されるべき時間を表す処理完了時間要求値及び性能保証区間で予定される処理負荷量を表す予定処理負荷量を受信する受信手段と、処理完了時間要求値、予定処理負荷量及びリソース−性能対応情報に基づいて性能保証区間の処理に用いるリソースの要求量である第2のリソース量を決定する要求量決定手段と、割当対象となりうるリソースの総量である第4のリソース量、第2のリソース量及び第3のリソース量に基づいて、性能保証区間に対する第2のリソース量のリソースの割当の可否を決定する割当決定手段と、性能保証区間に対して第2のリソース量のリソースが割り当てられたことを示す割当通知を性能保証型タスクに送信する通知手段として機能させることを特徴とする。
本発明のリソース配分システム、リソース配分方法及びリソース配分プログラムによると、入力負荷が変動しても、タスクの所定区間については最低限の処理性能を維持することができる。なぜなら、処理すべき負荷の量に対応して、性能を維持するために必要なリソース量を動的に算出し、それに沿ってリソース配分量を動的に変化させるからである。
本発明の第1の実施形態のリソース配分システムの全体構成を示すブロック図である。 本発明の第1の実施形態のスレッド制御部の内部構造を示すブロック図である。 本発明の第1の実施形態のスレッド−性能対応表の一例である。 本発明の第1の実施形態のタスク状態表の一例である。 本発明の第1の実施形態のリソース配分システムの、性能保証区間の処理が開始するときの動作を示す図である。 本発明の第1の実施形態のリソース配分システムの、性能保証区間の処理が終了するときの動作を示す図である。 本発明の第1の実施形態のリソース配分システムの最小構成を示すブロック図である。 本発明の第1の実施形態のリソース配分システムの、性能保証区間終了時のスレッド配分決定部の動作を示すフローチャートである。 本発明の第4の実施形態のスレッド−性能対応表の一例である。 本発明の第4の実施形態のリソース配分システムにおける予定処理負荷量の時間変化を示すグラフである。 本発明の第4の実施形態のリソース配分システムにおける、時間経過に伴って変化するタスク状態表の一例である。 本発明の第4の実施形態のリソース配分システムにおける、各タスクの性能保証区間の目標処理時間と実際の処理時間を表す図である。 本発明の第4の実施形態のリソース配分システムにおける、各タスクの性能保証区間の目標処理時間と実際の処理時間を表す図である。 本発明の第4の実施形態のリソース配分システムにおける、各タスクの性能保証区間の目標処理時間と実際の処理時間を表す図である。 本発明の第4の実施形態のリソース配分システムにおける、各タスクの性能保証区間の目標処理時間と実際の処理時間を表す図である。 本発明の第4の実施形態のリソース配分システムにおける、各タスクの性能保証区間の目標処理時間と実際の処理時間を表す図である。 本発明の第4の実施形態のリソース配分システムにおける、各タスクの性能保証区間の目標処理時間と実際の処理時間を表す図である。 本発明の第4の実施形態のリソース配分システムにおける、各タスクの性能保証区間の目標処理時間と実際の処理時間を表す図である。 本発明の第4の実施形態のリソース配分システムにおける、各タスクの性能保証区間の目標処理時間と実際の処理時間を表す図である。 本発明の第4の実施形態のリソース配分システムにおける、期間ごとの目標処理時間と実際の処理時間の例を表す図である。
(第1の実施形態)
発明を実施するための形態について図面を参照して詳細に説明する。図1に、本発明の第1の実施形態のリソース配分システムの全体構成のブロック図を示す。
第1の実施形態のリソース配分システムは、ソフトウェアとして、1つ以上のタスク30−1、30−2と、唯一のリソース制御部10と、一般的なOS(Operating System。オペレーティングシステム)35と、を備える。
タスク30−1、30−2は、アプリケーションプログラムの実行インスタンスである。リソース制御部10は、各タスクに配分するリソース量を制御する。
タスクには、その動作性能が保証されるべき「性能保証型タスク」と、動作性能が必ずしも保証されない「ベストエフォート型タスク」の2種類がある。図1では、タスク30−1が性能保証型タスク、タスク30−2がベストエフォート型タスクである。性能保証型タスク30−1にはスレッド制御部20が連結されている。なお、本実施形態においては、全タスクの中に、性能保証型タスク30−1は最低1個含まれている必要があるが、ベストエフォート型タスク30−2は必ずしも含まれている必要はない。
リソース制御部10は、スレッド要求量決定部11、スレッド−性能対応表12、スレッド配分決定部13、タスク状態表14、を有する。スレッド要求量決定部11は、タスクからの要請でスレッド要求数を決定する。スレッド−性能対応表12は、スレッド要求量決定部11が要求数を決める際に参照される。スレッド配分決定部13は、各タスクのスレッド要求数を鑑みて、各タスクへの適切なスレッド配分量を決定する。タスク状態表14は、現在の各タスクへのスレッド配分状態を記録する。
図2は、スレッド制御部20の内部構造を示す。スレッド制御部20は、タスクインタフェース部21(図2では「タスクI/F部」と記載)と、リソース制御インタフェース部22(図2で「RM I/F部」と記載)と、スレッドプール24と、スレッドプール制御部23と、スレッド開始パラメータ25と、スレッド状態表26と、を有する。
タスクインタフェース部21は、性能保証型タスク30−1との通信を行う。リソース制御インタフェース部22は、リソース制御部10との通信を行う。スレッドプール24は、あらかじめ生成しておいたOS上のスレッドの集合を保管する。スレッドプール制御部23は、スレッドプール24内の各スレッドの実行や停止を制御する。スレッド開始パラメータ25は、各スレッドの実行開始時のパラメータを保持する。スレッド状態表26は、各スレッドの現在の状態を記録する。
性能保証型タスク30−1は、その内部に性能保証区間31と呼ばれる部分を有する。「性能保証区間」とは、一つの開始点と一つの終了点を持つ、プログラムコードの一部であって、その開始点から終了点までのタスク実行時間が別途指定される値以下となることが、システム要件から要請されているものである。
例えば、毎秒30フレームの動画像に対して、フレームごとの画像処理をリアルタイムで実行するタスクの場合、性能保証区間は1フレームに対する当該画像処理を行うサブルーチンである。この場合、性能保証区間の処理時間の上限値は、33ミリ秒(30フレーム/秒の逆数)、となる。
図3は、スレッド−性能対応表12の一例である。スレッド−性能対応表12は、各々の性能保証区間に対するスレッド−性能対応表エントリ121〜123を有する。
スレッド−性能対応表エントリ121〜123には、区間名(図3では“SEC1”, “SEC2”等)で識別された性能保証区間ごとに、いくつかのスレッド数とその処理時間の対応が記載されている。ここでの「処理時間」とは、当該性能保証区間をそのスレッド数のスレッドで実行した場合に要する処理時間である。処理時間の測定に用いる、当該性能保証区間での処理対象とされるデータの量は、当該性能保証区間に対して基準となる(ベースとなる)量とする。
ここで、指定スレッド数で実行した場合の処理時間に関して補足する。ある決まった処理を、あるスレッド数で実行した場合の処理時間は、システム内にトータルでいくつの有効スレッドが存在するかによって変化する。
本実施形態の技術を利用する際には、まず、システム内の有効スレッド数の合計値Nall(Nallは1以上の整数)を一意に定める。Nallはシステム内のプロセッサコア数に合わせることもできるが、コア数以上の値を選ぶこともできる。次に、OS上でNall個のスレッドを生成し、うちR個(Rは、1以上、Nall以下の整数)のスレッドを当該処理に、(Nall−R)個のスレッドを他のダミー処理にそれぞれ割り当る。そして、当該処理に対し基準量となる処理対象データを与えて、当該処理の実行時間tを測定する。Rを1、2、・・・と変化させながらtの値を測定し、スレッド−性能対応表12を作成する。
図4は、タスク状態表14の一例である。タスク状態表14は、システム内の性能保証型タスク30−1の各々に対して一つのエントリを持つ表である。各エントリは、タスクを一意に識別するためのタスクID、当該タスクが要求しているスレッド数、当該タスクの状態、の各欄を有する。タスク状態表14の各エントリはまた、当該タスクの動作性能を測定した値を保持する性能測定値欄を有してもよい。
次に、本実施の形態の全体の動作について、図1から図6を参照して、タスクの開始、タスク内の性能保証区間の開始と終了、そしてタスクの終了、の順で詳細に説明する。
性能保証型タスク30の実行が開始されると、性能保証型タスク30はタスクインタフェース部21に対し、”初期化通知”を送信する。典型的な実装形態では、スレッド制御部20は性能保証型タスク30のプログラムにリンクされて実行されているから、上記の初期化通知はタスクインタフェース部の当該機能の関数エントリを呼び出すことで行われる。
タスクインタフェース部21は、”初期化通知”を受信すると、リソース制御インタフェース部22を初期化して、リソース制御部10とスレッド制御部20とが正しく通信できるようにする。さらに、タスクインタフェース部21は、スレッドプール制御部23に対してスレッドプールの初期化を指示する”初期化指示”を送信する。
スレッドプール制御部23は、”初期化指示”を受信すると、OS35上で、ある個数のスレッドを作成し、それらの属性を高優先度に設定する。そして、スレッドプール制御部23は、スレッドの実行を同期命令により起こされるまでブロックし、スレッドプール24内で待機させる。ここで作成するスレッドの数は、性能保証区間31で必要とされるスレッドの数を想定して、アプリケーション又はシステム設計時にあらかじめ決めておればよい。あるいは、リソース制御インタフェース部22を通じてリソース制御部10に問い合わせて、適切な初期スレッド数を得てもよい。
なお、初期化時にスレッドを生成しておく理由は、性能保証区間の実行開始時にスレッドを生成するための時間的オーバヘッドをできるだけ回避するためである。タスク実行の進行に際してスレッドが不足すれば、後述のように動的にスレッドを追加生成する。
性能保証区間を実行するためのスレッドは、その属性が高優先度に設定された「高優先なスレッド」である。「高優先なスレッド」とは、「次に実行すべきスレッドを選択しようとしているプロセッサコアがあるとき、実行可能な高優先スレッドが一つでも存在すれば、いかなる通常スレッドよりも先に、実行可能な高優先スレッドが選択され実行される。」というルールを満たすものである。
図5を参照して、性能保証区間の処理が開始するときの動作について、送受信される情報を具体例に示して説明する。性能保証区間の開始点において、性能保証型タスク30はタスクインタフェース部21に対し、”性能保証区間開始通知”を送信する(S201)。性能保証区間開始通知には、性能保証区間を識別する区間名、当該性能保証区間でその後処理される負荷の多寡を示す予定処理負荷量、及び当該性能保証区間での処理完了時間の要求値が、パラメータとして含まれる。
予定処理負荷量は、当該性能保証区間における基準量(ベースとなる量)に対する比の値で指定される。例えば、画素単位に単純な演算を施す画像処理(演算量が画素数に比例する処理)では、予定処理負荷量は次のようになる。QVGA(Quarter Video Graphics Array)サイズ(320×240画素)の入力画像が基準となる入力データサイズである場合、VGA(Video Graphics Array)サイズ(640×480画素)の画像を与えるときの予定処理負荷量は4となる。すなわち、VGAサイズの入力画像を与えると、基準値の4倍の負荷量が予定される。
タスクインタフェース部21はリソース制御部インタフェース部22を通じ、”性能保証区間開始通知”をリソース制御部10に送信する。典型的な実装形態では、リソース制御部10はOS35上の一つのタスクとして実現され、この送信はOS35上でのタスク間通信を用いて行われる。送信される性能保証区間開始通知には、前述した内容と同じく、性能保証区間の区間名、予定処理負荷量、ならびに処理完了時間要求値が、パラメータとして含まれる(図5 S202)。
リソース制御部10内にあるスレッド要求量決定部11は、送信されてきた”性能保証区間開始通知”を受信する。そして、スレッド要求量決定部11は、スレッド−性能対応表12を参照して、次のようにして当該タスクが必要としているスレッド数を決定する(図5 S203)。
ステップ1: スレッド−性能対応表12の中の、当該性能保証区間に対するエントリを見つける。
ステップ2: 当該エントリ中の、スレッド数−処理時間の対応列を参照し、処理時間に予定処理負荷量を乗じた値が処理完了時間要求値を下回る対応列の中で、最もスレッド数が小さいものを見つける。
上記ステップ2で見つけた最小のスレッド数を、スレッド要求量決定部11で決定した「要求スレッド数Ninc(Nincは1以上の整数)」とする。スレッド要求量決定部11は、タスクIDと決定した要求スレッド数の情報を組にして、スレッド配分決定部13に”スレッド要求通知”を送信する(図5 S204)。
スレッド配分決定部13は、スレッド要求量決定部11から新たな”スレッド要求通知”を受信すると、タスク状態表14に新たなエントリを設ける。そして、そのタスクID欄及び要求スレッド数欄に、前記スレッド要求通知に記載されていたタスクID及び要求スレッド数Nincを転記するとともに、その状態欄にWAIT(待機中)と記入する(図5 S205)。
次にスレッド配分決定部13は、タスク状態表14の中で、状態欄の値がPRIO-RUN(高優先実行中)であるエントリすべてを探し、それらのエントリの要求スレッド数の欄の値の総和Nold(Noldは1以上の整数))を求める。PRIO-RUN状態のタスクの要求スレッド数の欄には、そのタスクに現在割り当てられているスレッド数が登録されている。従って、Noldは、その時点で、PRIO-RUN状態の全タスクに割り当てられているスレッド数の合計値を意味する。
もし Nold+Ninc<Nall であれば、割当済みのスレッド数と新たに要求されたスレッド数の合計が、システム内の有効スレッド数の合計値、すなわち、割当可能なスレッド数の上限値よりも少ないことを意味する。従って、今回の新たなスレッド要求は承諾される。このとき、スレッド配分決定部13は、当該タスクに連結されたスレッド制御部20に対し、Ninc数の高優先スレッドが割り当てられた旨の”スレッド割当通知”を送信する(図5 S206)。そして、スレッド配分決定部13は、新たに作成したタスク状態表エントリの状態欄の内容をPRIO-RUNに変更する。
もし Nold+Ninc≧Nall であれば、割当済みのスレッド数と新たに要求されたスレッド数の合計が、割当可能なスレッド数の上限値以上であることを意味する。従って、今回の新たなスレッド要求は拒否される。このとき、スレッド配分決定部13は、当該タスクに連結されたスレッド制御部20に対し、Ninc数の通常スレッドが割り当てられた旨の”スレッド割当通知”を送信する。そして、スレッド配分決定部13は、新たに作成したタスク状態表エントリの状態欄の内容をSTD-RUNに変更する。
スレッド制御部20内のリソース制御インタフェース部22は、リソース制御部10内のスレッド配分決定部13から”スレッド割当通知”を受信する。前述のように、スレッド割当通知は、性能保証型タスク30とリソース制御部10の間のタスク間通信で行われる。
スレッド割当通知の内容がN個の高優先スレッド割当の場合、リソース制御インタフェース部22は、スレッドプール制御部23に指示してスレッドプール24からN個のスレッドを取り出して性能保証区間31の実行に用いる(図5 S207)。すなわち、次のステップS10からS13が順に実行される。
ステップS10: スレッドプール制御部23は、性能保証区間31の開始点アドレスと、性能保証区間31の実行に必要なその他のパラメータをスレッド開始パラメータ25に記入する。
ステップS11: スレッドプール制御部23は、スレッド状態表26を参照して、現在実行中ではないスレッド数を調べる。現在実行中ではないスレッドがN個未満であれば、スレッドプール制御部23は、OS35を呼び出して新規に高優先スレッドを生成し、現在実行中ではないスレッドが延べN個以上になるようにする。
ステップS12: スレッドプール制御部23は、スレッド状態表26を参照して、現在実行中ではないN個のスレッドを選び、それら選ばれたNスレッドの実行を再開させる。これにより、各スレッドは、スレッド開始パラメータ25に記入されたパラメータを用い、同様にスレッド開始パラメータ25の中に記入された開始点アドレスから、その実行が再開される。
他方、リソース制御インタフェース部22が受信したスレッド割当通知の内容がN個の通常スレッド割当であった場合、次のステップS15からS16が順に実行される。
ステップS15: リソース制御インタフェース部22は、スレッドプール制御部23に指示して、OSの通常スレッドN個を用いて性能保証区間31を実行させる。すなわち、スレッドプール制御部23は、性能保証区間31の開始点アドレスと、性能保証区間31の実行に必要なその他のパラメータをスレッド開始パラメータ25に記入し、OS上で生成したN個のスレッドに前記開始点アドレスからの実行を開始させる。
ステップS16: スレッドプール制御部23は、さらに、上記で生成したN個のスレッドを識別するスレッドID(のべN個)をスレッド状態表26に記録する。
このようにして、タスク側で性能保証区間の実行開始時点でリソース制御部10が必要なスレッド割当数を決定する。そして、その決定数に基づいて、当該タスクは、高優先スレッド又は通常スレッドが割り当てられ、実行される(図5 S208)。
次に、図6を参照して、性能保証区間の処理が終了するときの動作、すなわち、ある性能保証型タスク30−1aがその性能保証区間の実行から抜け出す際の動作を説明する。
性能保証区間の終了点において、性能保証区間の実行に割り当てられたスレッドがそのうちの一つを除きすべて終了すると、性能保証型タスク30−1aはタスクインタフェース部21−1aに対し、”性能保証区間終了通知”を送信する(図6のS221)。性能保証区間終了通知には、性能保証区間を識別するための区間名がパラメータとして含まれる。タスクインタフェース部21aはリソース制御部インタフェース22aを通じ、”性能保証区間終了通知”をリソース制御部10に送信する(図6 S222)。
リソース制御部10では、スレッド要求量決定部11ではなく、スレッド配分決定部13が前記で送信されてきた”性能保証区間終了通知”を受信し、タスク状態表14を参照して関係タスクのスレッド配分を変更する(図6 S223)。図8を参照しながらこのスレッド配分決定部13の動作を説明する。
ステップS301、S302: 当該性能保証区間に対するタスクを得、タスク状態表14の中で前記タスクのIDに合致するエントリLを探す。通常、ただ一つのエントリが合致するはずであるが、複数合致あるいは合致しない場合は無効な通知として無視するか適切なエラーを出力する。
ステップS303: 上記で見つかったエントリL中のスレッド要求量欄の値をNdecとする。Ndecは当該タスクに割り当てられていたスレッド数である。
ステップS304: ステップS301で見つかったエントリL中の状態欄の値を調べる。値がPRIO-RUNである場合、高優先スレッドの再割当探索を行う。(以下のステップS305〜ステップS312)状態欄の値がPRIO-RUNであるエントリにおけるスレッド要求量の値Ndecは、性能保証区間の実行から抜け出したために性能保証型タスク30−1aにとっては不要となり、リソース制御部10へ返却される高優先スレッドの数を意味する。そして、返却されたスレッドは、他の性能保証型タスクから要求があったときに、リソース制御部10によって、再割当のために使用される。
ステップS305: ステップS301で見つかったエントリLの状態欄にWAITと記入する。
ステップS306、S307: タスク状態表14の中で、エントリの状態欄の値がPRIO-RUN(高優先実行中)であるエントリすべてを探し、それらのエントリの要求スレッド数欄の値の総和Noldを求める。これを用いて、システム内の空き高優先スレッド数 Nfree=Nall−Nold+Ndec を計算する。
ステップS308、S310: タスク状態表14の中で、状態欄の値がSTD-RUNであり、スレッド要求数欄の値がNfree未満のエントリすべてを探し、そのうちスレッド要求数欄の値が最大であるエントリNを特定する。そのエントリNのタスクを以後性能保証型タスク30−1bと呼ぶ。またこのエントリNのスレッド数要求数欄の値をNincとする。
ステップS311: ステップS310で見つかったエントリNのタスクID欄に記載された性能保証型タスク30−1bに対し、”高優先スレッド再割当通知”を送信する。すなわち、当該性能保証型タスク30−1bに連結されたスレッド制御部20bに対し、Ninc個の高優先スレッドが再割当された旨の”スレッド割当通知”を送信する(図6 S224)とともに、前記エントリNの状態欄の内容をPRIO-RUNに変更する。
ステップS312: Nfreeの値をNincだけ減じる。新たなエントリが見つからなくなるまで、ステップS308〜ステップS312を繰り返す。
ステップS320、S321: ステップS301で見つかったエントリL中の状態欄の値がSTD-RUNである場合は、その状態欄にWAITと記入するのみで、高優先スレッド再割当は行わない。状態欄の値がSTD-RUNであるエントリは、当該タスクには通常スレッドが割り当てられていたことを意味する。従って、優先スレッドの再割当は行わない。
上記ステップS311で高優先スレッド再割当が行われた場合、性能保証型タスク30−1bのスレッド制御部20b内のリソース制御インタフェース部22bが”スレッド割当通知”を受信し、ただちにその内容をスレッドプール制御部23bに伝える(図6 S225)。その通知内容には、再割当高優先スレッド数Nincが含まれている。
スレッドプール制御部23bは、スレッド状態表26bを参照し、性能保証型タスク30−1bの性能保証区間31bの実行のために通常スレッドが割り当てられており、そのスレッド数がNincに等しいことを確認する。それが確認できれば、スレッドプール制御部23bは、前記Ninc個の通常スレッドの実行属性を高優先に変更する(図6 S226)。この変更は通常、OS35に対してスレッドのスケジューリングパラメータや優先度パラメータを再設定することで行うことができる。その際に必要となるスレッドIDはスレッド状態表26bに記録されているものを使用する。
性能保証型タスク30が終了する際、性能保証型タスク30はタスクインタフェース部21に対し”タスク終了通知”を送信する。タスクインタフェース部21は、”タスク終了通知”を受信すると、スレッドプール制御部23に対し全スレッドの終了を指示する”スレッド割当通知”を送信するとともに、リソース制御インタフェース部22に対して性能保証型タスク30の終了を通知するために”タスク終了通知”を送信する。
スレッドプール制御部23は”スレッド終了指示”を受信すると、スレッド状態表26とスレッドプール24を参照し、スレッド制御部で生成したすべてのスレッドを終了させる。
リソース制御部10は、リソース制御インタフェース部22から性能保証型タスク30の”タスク終了通知”を受信すると、スレッド配分決定部13に指示して、タスク状態表14から性能保証型タスク30に対応するエントリを抹消させる。
以上のように、本実施形態のタスク配分システムは、性能保証型タスクから必要な処理性能や予定されている負荷量についての情報を受け取る。そして、本実施形態のタスク配分システムは、スレッドの割当数とそのときの処理性能との対比情報及び現在のスレッド割当状況を基に、性能保証型タスクへのスレッドの割当量を決定する。
ところで、本実施形態において割り当てられるスレッドは、タスクの処理に用いられる「リソース」の一種であって、割り当てられるリソースはスレッドには限定されない。すなわち、本実施形態は、タスクに割当可能で、割当量に依存してタスクの処理性能が変化するような有限リソース一般に適用可能である。このようなリソースには、プロセッサ関連としては、スレッドの他に、プロセッサコアの個数がある。メモリ関連では、単純なメモリ使用量や、キャッシュメモリ割当量も、上記のようなリソースである。あるいは、タスクがネットワークを使用する場合にはネットワークの帯域幅も、割当可能であり、タスクの処理性能に影響を与えるリソースである。
また、本実施形態のリソース配分システムは、タスクへのリソース割当とタスクからの不要リソース回収の機能を備えればよく、タスク自体は、本実施形態のリソース配分システム内に備えられている必要はない。また、スレッド制御部20やOS35も、リソース配分システム内に備えられている必要はない。従って、図1のリソース配分システムは、図7のリソース配分システム100のように簡略化できる。図7は、第1の実施形態のリソース配分システムの最小構成を示すブロック図である。リソース配分システム100は、図1におけるリソース制御部10において、スレッドをリソースに一般化したものに相当する。
リソース配分システム100は、リソース要求量決定部11、リソース−性能対応情報12、タスク状態表14、リソース配分決定部13を備える。
性能情報保持部102は、スレッド−性能対応表12に相当する。性能情報保持部102は、割当仮定量と、性能保証型タスクにその割当仮定量のリソースが割り当てられたときの性能保証区間における処理性能との対応関係を表すリソース−性能対応情報を保持する。割当仮定量とは、性能保証区間の処理のために、当該性能保証型タスクへ割り当てられたと仮定されたリソースの量である。実際に割り当てられるリソースの量は、後述のように、リソース配分決定部103が決定する。なお、性能情報保持部102が保持するリソース−性能対応情報は、表形式に配置された情報には限定されない。すなわち、リソース−性能対応情報は、割当仮定量とその量のリソースが割り当てられたときの処理性能との関係を規定する情報であればよい。従って、リソース−性能対応情報は、例えば、割当仮定量と処理性能との関係を規定する関数であってもよい。
リソース要求量決定部101は、スレッド要求量決定部11に相当する。リソース要求量決定部101は、外部の性能保証型タスクから、性能保証区間の実行開始前に、処理完了時間要求値及び予定処理負荷量を受信する。そして、リソース要求量決定部101は、処理完了時間要求値、予定処理負荷量及びリソース−性能対応情報に基づいて性能保証区間の処理に用いるリソースの要求量である要求リソース量を決定する。また、リソース要求量決定部101は、性能保証区間に対して実際に割り当てられることが決定したリソースの量である割当リソース量を性能保証型タスクに通知する。
タスク状態保持部104は、タスク状態表14に相当する。タスク状態保持部104は、ある性能保証型タスクに現在割り当てられているリソースの量を表す割当済リソース量を保持する。
リソース配分決定部103は、割当対象となりうるリソースの総量である全リソース量、割当要求リソース量及び割当済リソース量に基づいて割当リソース量を決定する。全リソース量は、Nallに相当する量であり、割当対象として取り扱うことができるリソースの全体量である。従って、全リソース量は、ある時点において、常にその量が割当可能であるとは限らない。そこで、リソース配分決定部103は、全リソース量と割当済リソース量とから割当可能なリソースの量を判断し、割当要求リソース量のリソースを割当可能か否かを判定する。そして、リソース配分決定部103は、実際に割り当てるリソース量、すなわち、割当リソース量を決定する。そのため、割当リソース量が0であることもありうる。
リソース配分システム100は、スレッドのみでなく、タスクに割当可能で、割当量に依存してタスクの処理性能が変化するようなリソースを、性能保証型タスクに配分する。リソース配分システム100の処理は、スレッドの割当を例として説明した、図1のリソース配分システムと同じなので、詳細な説明は省略する。
なお、リソース配分システム100は、ハードウェアによって実現されても、ソフトウェアによって実現されてもよい。ソフトウェアによってリソース配分システム100が実現される場合は、本システムを適用するコンピュータシステムが備える所定のCPU(図示なし)によって、リソース配分プログラムが実行される。プログラムの処理手順は、図8に示した通りである。
リソース配分プログラムは、ROM(Read Only Memory)、RAM(Random Access Memory)等の半導体記憶装置、光ディスク、磁気ディスク、光磁気ディスク等、非一時的な媒体に格納されてもよい。
次に、本実施形態の効果について説明する。
本実施形態では、タスクがリソース制御部に対し予定処理負荷量と処理完了時間の要求値を伝える。リソース制御部はその性能要件を満たすのに必要な最小限のスレッド数を決定する。タスクのスレッド制御部は、その決定に沿ってスレッドを開始し、並列処理を行う。そのため、タスクに要求される処理性能を達成することができる。さらに、あるタスクに過剰なスレッドを割り当てることによる他タスクの性能低下を招く可能性が抑えられる。
また、本実施形態では、性能保証が必要な部分の実行を終えたときには、割り当てられていたスレッドがリソース制御部に返却され、必要としている他のタスクへのスレッド再割当をただちに行う。そのため、スレッドリソースは必要なタスクに速やかに配分される。従って、タスクへの要求性能が実際に達成される可能性を高めることができる。
(第2の実施形態)
本発明を実施するための第2の実施形態について説明する。
第1の実施形態では、スレッド制御部20は、高優先スレッドはスレッドプール24で管理し、通常スレッドはそのたびにOSに依頼して生成する。これは、本発明では、システム内に存在する実行中の高優先スレッドの数とそれらの割り当て方を正確に管理するためである。他方、スレッドプールは、スレッドを生成するときのオーバヘッドを減らすという長所を持つ。
そこで、第2の実施の形態として、高優先スレッドに加え、通常スレッドもスレッドプールで管理する方式を示す。すなわち、初期化時には一定数の高優先スレッド及び一定数の通常スレッドを生成して、両者ともスレッドプール24の管理下に置く。スレッドプール制御部23は、スレッド配分決定部13からのスレッド割当通知が高優先スレッド割当か通常スレッド割当かによって、スレッドプール24の管理下にある高優先スレッドあるいは通常スレッドを選択する。選択されたスレッドは、性能保証区間31の実行に使用される。
このような実施形態をとることにより、高優先スレッドの割当に成功するか否かにかかわらず、ほぼ一定コストで並列処理を開始できる。
第2の実施形態を採用する際に留意すべき点は、第1の実施形態に比べ、OS上で生成される総スレッド数が多くなるため、OSにおけるスレッド管理オーバヘッドが増える可能性がある点である。そのため、スレッド制御部20内のスレッドプールのオーバヘッドとOSによるシステム内の全スレッドの管理オーバヘッドのトレードオフを鑑みて、第1の実施形態と第2の実施形態のうち、適切な方を選ぶのがよい。
(第3の実施形態)
本発明を実施するための第3の実施形態について詳細に説明する。
本実施形態は、第1の実施形態の変形であるが、第2の実施形態と組みあわて実施されることも可能である。
第1の実施形態では、スレッド配分決定部13は、新たなスレッド要求が承諾されない場合、要求元タスクに対して、高優先スレッドではなく通常スレッドを割り当てる。この割当は、必ずしも要求元タスクの性能が満たされる保証はないが、ベストエフォートで処理を進めておくことが望ましいとの考え方に基づくものである。
別の方式として、要求された個数の高優先スレッドが割り当てられない場合は割当を一時保留し、のちに割当可能になった時点で要求された個数の高優先スレッドを割り当てる、という方式もある。この場合、新たな”スレッド要求通知”を受信した際のスレッド配分決定部13の動作は次のようになる。
スレッド要求量決定部11から新たな”スレッド要求通知”を受信すると、スレッド配分決定部13は、タスク状態表14に新たなエントリを設ける。そして、スレッド配分決定部13は、そのタスクID欄及び要求スレッド数欄に、スレッド要求通知に記載されていたタスクID及びスレッド数(その値をNincとする)を転記するとともに、その状態欄にWAITと記入する。
次に、スレッド配分決定部13は、タスク状態表14の中で、状態欄の値がPRIO-RUNであるすべてのエントリを探し、それらのエントリの要求スレッド数欄の値の総和(その値をNoldとする)を求める。
もし Nold+Ninc<Nall であれば、今回の新たなスレッド要求は承諾される。すなわち、スレッド配分決定部13は、当該タスクに連結されたスレッド制御部20に対し、Ninc数の高優先スレッドが割り当てられた旨の”スレッド割当通知”を送信する。さらに、スレッド配分決定部13は、新たに作成したタスク状態表エントリの状態欄の内容をPRIO-RUNに変更する。
もし Nold+Ninc≧Nall であれば、今回の新たなスレッド要求は一時保留される。このとき、スレッド配分決定部13は、新たに作成したタスク状態表エントリの状態欄の内容をREADY(実行可能)に変更する。この場合、スレッド制御部20へは何も通知されない。
スレッド制御部から”性能保証区間終了通知”を受信すると、スレッド配分決定部13は以下の手順S331からS336を実行する。
ステップS331: 当該性能保証区間が設定されたタスクを特定し、タスク状態表14の中でそのタスクのIDに合致するエントリLを探す。このとき、唯一のエントリが合致するのが正常である。複数のエントリが合致する場合、あるいは合致するエントリがない場合は、当該性能保証区間終了通知が無効な通知として無視されるか、適切なエラーが出力される。
ステップS332: ステップS331で発見されたエントリL中のスレッド要求量欄の値をNdecとする。この値は当該タスクに割り当てられているスレッド数である。
ステップS333: ステップS331で発見されたエントリLの状態欄にWAITと記入する。
ステップS334: タスク状態表14の中で、状態欄の値がREADYであり、スレッド要求数欄の値がNdecを越えないエントリすべてを探し、そのうちスレッド要求数欄の値が最大であるエントリNを特定する。そのエントリNのスレッド数要求数欄の値をNincとする。
ステップS335: 上記で見つかったエントリNのタスクID欄に記載されたタスクに対し、高優先スレッドが割り当てられた旨の”スレッド割当通知”を送信するとともに、前記エントリNの状態欄の内容をPRIO-RUNに変更する。
ステップS336: Ndecの値をNincだけ減じる。新たなエントリが見つからなくなるまで、ステップS334〜ステップS336を繰り返す。
なお、第3の実施形態におけるスレッド制御部20の動作は、第1の実施形態に記載した内容と同じである。
第3の実施形態では、タスクが性能保証区間の実行に必要とする分のリソースが確保できないときは、当該区間の実行が延期され、のちにリソース確保された段階で当該区間に対し必要分のリソースが割り当てられたうえで実行開始される。そのため、性能保証区間の開始から終了までの実行性能は要求通りであることが保証される、という新たな効果が得られる。
(第4の実施形態)
次に、具体例を用いて、本発明を実施するための実施形態の動作を説明する。
第4の実施形態のタスク配分システムでは、OSとしてLinux(登録商標)が使用され、各タスクはLinux上のスレッドあるいはプロセスとして実現される。リソース制御部10はLinux上の一つのプロセスであるリソース制御プロセスとして、スレッド制御部20はLinuxプロセスにリンクするスレッド制御ライブラリとして実現される。
スレッド制御ライブラリは次の関数エントリをタスク向けに公開する。
(1) スレッド制御部初期化関数: パラメータなし
(1)−1: リソース制御プロセスとの間のプロセス間通信を確立し、リソース制御プロセスからのメッセージを処理する受信スレッド(後述)を生成し開始する。
(1)−2: リソース制御プロセスから指示された個数、Linux環境変数から取得した値、又はスレッド制御ライブラリの設計時のデフォルト値を基に、一定個数の、高優先スレッド及び通常スレッドを生成する。
ここでのスレッドにはpthread (POSIXスレッド) を使用し、高優先スレッドは、pthreadのスレッド属性で、スケジューリングポリシーとして”リアルタイムスケジューリング”を指定することで実現する。
(2) 性能保証区間開始: パラメータ=区間名, 予定処理負荷量, 完了時間要求値
以下の情報の組をリソース制御プロセスに送信する。
(区間開始, 自プロセスID, 区間名, 予定処理負荷量, 完了時間要求値)
ここで一つめの情報である「区間開始」とは、リソース制御プロセスに送信されるコマンドの一つである。
また、「区間名」は、性能保証区間の各々に対して当該プログラムの開発者又は言語処理系が付与した整数値であり、一つのプロセス内でユニークであれば任意の値でよい。
(3) 性能保証区間終了: パラメータ=区間名
以下の情報の組をリソース制御プロセスに送信する。
(区間終了, 自プロセスID, 区間名)
(4) スレッド制御部終了処理関数: パラメータなし
(4)−1: 上記(1)−2で生成した全スレッドの終了を確認し、未終了のものは強制終了させる。
(4)−2: リソース制御プロセスに対し以下の情報の組を送信する。
(プロセス終了, 自プロセスID)
スレッド制御ライブラリは、リソース制御プロセスからのプロセス間通信メッセージを処理する受信スレッドを生成し、実行する。スレッド制御ライブラリの動作はおおむね次の通りである。
(1) リソース制御プロセスからのメッセージ到着を待つ。メッセージ内のコマンド種別により、次の(2)〜(4)に分岐する。
(2) 「高優先スレッド割当」の場合: パラメータ=スレッド数N
スレッドプールにある待機中の高優先スレッドからN個を選び、性能保証区間の開始点からスレッドの実行を再開させる。もし高優先スレッドがN個に満たない場合は、新たに高優先スレッドを生成して上記再開処理を行う。
実行を再開させた各スレッドのスレッドIDをスレッド状態表に記録する。
(3) 「通常スレッド割当」の場合: パラメータ=スレッド数N
スレッドプールにある待機中の通常スレッドからN個を選び、性能保証区間の開始点からスレッドの実行を再開させる。
もし通常スレッドがN個に満たない場合は、新たに通常スレッドを生成して上記再開処理を行う。
実行を再開させた各スレッドのスレッドIDをスレッド状態表に記録する。
(4) 「高優先スレッド再割当」の場合: パラメータ=スレッド数N
スレッド状態表を参照し、実行中の通常スレッドがN個あることを確認したうえで、それらの各スレッドに対しpthreadのスレッド属性変更関数を適用し、スケジューリングポリシーを”リアルタイムスケジューリング”に変更する。
リソース制御プロセス、すなわち、リソース制御部10は、Linux上の常駐型プロセスとして実装され、他のプロセスにリンクされたスレッド制御ライブラリからプロセス間通信で送信されてくるコマンドの内容に応じた処理を行う。スレッド−性能対応表は、リソース制御プロセス開始時にLinux上のファイルから読み込まれ、リソース制御プロセス内のメモリ上データとして保持される。
ここで本実施形態の理解の一助とするために、本実施形態に基づいた動作事例を、時間の流れに沿って具体的に説明する。
システムは次のような構成であるとする。
12個のプロセッサコア
有効スレッド数 Nall=12
3つの性能保証型タスクA、B、C
他に、ベストエフォート型タスクX1、X2、・・・、Xn
性能保証型のタスクA、B、Cは、各々次の性能保証区間を有し、それらの目標処理時間が次のように指定されている。
タスクA 性能保証区間SEC-A: 目標処理時間75ms
タスクB 性能保証区間SEC-B: 目標処理時間80ms
タスクC 性能保証区間SEC-C: 目標処理時間75ms
各性能保証区間に対するスレッド−性能対応表は図9に示す通りである。
処理負荷については、初期状態では、タスクA、B、Cともに、通常の処理負荷量を持つが、その後、図10に示すような処理負荷の変動が発生する動作事例を考える。図10では、横軸は時刻、縦軸は予定処理負荷量である。
図11は、タスクA、B、Cのそれぞれの予定処理負荷量が図10のように変化したときの、タスク状態表の内容の変化を示す。図12乃至図20は、タスクA、B、Cのそれぞれの性能保証区間SEC-A、SEC-B、SEC-Cにおける、目標処理時間と実際の処理時間を示す。
以下、図10のタイミングT0からT5のそれぞれにおける動作を順に説明する。
1)時刻T0
時刻T0において、タスクAは自らの負荷が通常通りであることを把握し、タスクA内の性能保証区間SEC-Aの実行を開始する。実行の開始に先立ちタスクAは、次のパラメータを伴って、タスクAにリンクされたスレッド制御ライブラリの性能保証区間開始エントリを呼び出す。
区間名=SEC-A, 予定処理負荷量=1, 完了時間要求値=75ms
すると、タスクAにリンクされたスレッド制御ライブラリは、次のメッセージM1をリソース制御プロセスに送信する。
(コマンド=区間開始, プロセスID=TID-A, 区間名=SEC-A, 予定処理負荷量=1, 完了時間要求値=75ms)・・・M1
リソース制御プロセスは、メッセージM1を受信し、まず、リソース制御プロセス内のスレッド要求量決定部11が要求スレッド数を求める。その際、スレッド要求量決定部11は、図9に示すスレッド−性能対応表内のSEC-Aの対応表を参照し、処理時間に予定処理負荷量である1を乗じた値が、処理完了時間要求値である75を下回るものとして、スレッド数=2を見つける。これにより、スレッド要求量決定部は要求スレッド数をNinc=2と決定する。
次に、リソース制御プロセス(リソース制御部10)内のスレッド配分決定部13が、タスクAへのスレッド割当を決定する。メッセージM1の到着直前のタスク状態表(図11(a))では、タスクIDは登録されていない。従って、
高優先実行中(PRIO-RUN)のタスクへのスレッド配分数Nold=0
であり、
有効スレッド数Nall=12
であるから、
Nold+Ninc<Nall
となり、タスクAには要求通り高優先スレッドが2個割り当てられる。これによりタスク状態表は図11(b)のようになる。
また、スレッド配分決定部はタスクAのスレッド制御ライブラリに対し次のメッセージM2を送信する。
(高優先スレッド割当 スレッド数=2)・・・M2
メッセージM2を受信し、タスクAのスレッド制御ライブラリはスレッドプールから2個の待機中高優先スレッドを選び、それらのスレッドに性能保証区間SEC-Aの実行を開始させる。
このように、タスクA側で、性能保証区間SEC-Aの開始時にリソース制御プロセスにスレッド割当数を問い合わせる。そして、リソース制御プロセスによる2個の高優先スレッドの割当の決定を受けて、タスクAでは性能保証区間SEC-Aを2スレッドでの並列実行を開始する。この状態を図12(a)に示す。ここで点線は目標処理時間、実線は実際の処理時間を表す。すなわち、SEC-Aでは、目標処理時間75msに対し、2スレッドでの実行により50msで処理が終了している。
システム内には合計24個のスレッドが生成され、SEC-A以外の期間及び表示された以外のスレッドでは、ベストエフォート型タスクX1〜XnからOSによって選択されたタスクがベストエフォートで実行される。
図10の例では、時刻T0では、タスクAに加え、タスクB及びタスクCもそれぞれの性能保証区間の実行が開始される。そこで、上記と同様に、タスクB及びタスクCのスレッド制御ライブラリはリソース制御プロセスに対し次のメッセージM3、M4を送信する。
(コマンド=区間開始, プロセスID=TID-B, 区間名=SEC-B, 予定処理負荷量=1, 完了時間要求値=80ms)・・・M3
(コマンド=区間開始, プロセスID=TID-C, 区間名=SEC-C, 予定処理負荷量=1, 完了時間要求値=75ms)・・・M4
リソース制御プロセスは、まずSEC-Bに関するメッセージM3を処理する。
図9のスレッド−性能対応表より、SEC-B実行に必要なスレッド数は1であり、要求スレッド数Ninc=1となる。
図11(b)のタスク状態表より、高優先実行中タスクへのスレッド配分数Nold=2であるから、スレッド配分決定部は、タスクBに対し、要求通り高優先スレッドを1個だけ割り当てる判断を下す。そして、スレッド配分決定部は、タスクBのスレッド制御ライブラリに対して、
(高優先スレッド割当 スレッド数=1)・・・M5
とのメッセージM5を送信し、タスクBにてSEC-Bが1スレッドで実行が開始される。
リソース制御プロセスは引き続きSEC-Cに関するメッセージM4を処理する。図9のスレッド−性能対応表より、SEC-C実行に必要なスレッド数は2であるから、Ninc=2となる。高優先実行中タスクへのスレッド配分数Nold=3であるから、スレッド配分決定部はタスクCに対し要求通り高優先スレッドを2個だけ割り当てる判断を下す。そして、スレッド配分決定部は、タスクCのスレッド制御ライブラリに対して、
(高優先スレッド割当 スレッド数=2)・・・M6
とのメッセージM6を送信し、タスクCにてSEC-Cが2スレッドで実行が開始される。
ここまでで、タスク状態表は図11(c)のように更新される。図12(b)は、このときの性能保証区間各々の実行の様子を示す。SEC-A, SEC-B, SEC-Cには各々2スレッド, 1スレッド, 2スレッドが割り当てられ、いずれも目標処理時間以下で処理が行われている。
2)時刻T1
時刻T1でタスクAがSEC-Aを実行しようとするとき、タスクAは自らの負荷が通常の2倍であることを認知し、タスクAのスレッド制御ライブラリはリソース制御プロセスに次のメッセージM7を送信する。
(コマンド=区間開始, プロセスID=TID-A, 区間名=SEC-A, 予定処理負荷量=2, 完了時間要求値=75ms)・・・M7
リソース制御プロセスは、予定処理負荷量=2であることから、SEC-A実行にはスレッド数3が必要と認識する。このときタスクB、Cは性能保証区間SEC-B, SEC-Cの前回実行を終えているから、この時点での高優先実行中タスクへのスレッド配分数Nold=0である。従って、リソース制御プロセスはSEC-Aに要求通り3スレッドを割当することを決定する。
続いて、時刻T1でタスクB、Cもそれぞれ性能保証区間SEC-B, SEC-Cの実行を新たに開始しようとする。これらの予定処理負荷量はいずれも1である。上記でSEC-Aに3スレッド割り当ててNold=3であるから、SEC-B, SEC-Cには要求どおり1, 2スレッドを割当可能と判断する。これによりタスク状態表は図11(d)のように更新される。
図13は、このときの性能保証区間各々の実行の様子を示す。タスクAでは負荷が2倍になったが、割当スレッド数が3に増加したことによって目標処理時間以内に処理を終了している。
3)時刻T2
時刻T2では、タスクAの負荷が2倍のままであることに加え、タスクBの負荷が5倍となる。リソース制御プロセスはタスクBの要求スレッド数を6と認識し、要求スレッド数の総和が有効スレッド数Nall未満に収まることを確認したうえで、タスクBに対し要求通り6つの高優先スレッドを割り当てる。またタスクCに対しては直近と同じく、要求どおり2スレッドを割当可能と判断する。このときのタスク状態表は図11(e)に、実行の様子は図14に示されている。
4)時刻T3
時刻T3では、タスクAの負荷が通常レベルに戻るが、タスクBの負荷は若干低下するも依然通常の4倍あり、タスクCの負荷は通常の2倍に増加する。このとき、リソース制御プロセスはタスクA、タスクB、タスクCの要求スレッド数を各々2、5、4と算出するが、これらの総和がNall未満に収まることから、各タスクに対し要求数どおりの高優先スレッドを割り当てる決定を下す。このときのタスク状態表は図11(f)に、実行の様子は図14に示されている。
5)時刻T4
時刻T4では、タスクAの負荷が再び2倍に増加する。リソース制御プロセスはタスクAからの要求スレッド数は3スレッドと認識する(すなわちNinc=3)。ところが、直前のSEC-B, SEC-C開始により既にSEC-B, SEC-Cに合計9個の高優先スレッドを割り当てているため(すなわちNold=9)、Nold+Ninc≧Nall となる。そのため、リソース制御プロセスは、タスクAへの高優先スレッド割当はできず、通常スレッドの割当を決定する。このとき、タスク状態表は図11(g)のように更新される。そして、リソース制御プロセスからタスクAのスレッド制御ライブラリへは次のメッセージM8が送信される。
(通常スレッド割当 スレッド数=3)・・・M8
これにより、タスクAの性能保証区間SEC-Aは、通常の優先度しか持たない3つのスレッドにより実行される。これらのスレッドはベストエフォート型タスクX1、X2、・・・、Xnを実行するスレッドとCPUリソースを共有するため、SEC-Aの実行性能は必ずしも保証されない。しかし、これは、既に実行中の性能保証区間SEC-B及びSEC-Cの実行性能を引き続き保証するためにやむを得ない措置と判断される。そこで、リソース制御プロセスは、SEC-Aに対して性能保証できなくなった旨のメッセージをログに記録する、あるいは制御コンソールに出力する等の、異常発生時の所定の処理を行う。
時刻T4の直後、タスクCの性能保証区間SEC-Cが一旦終了すると、タスクCからリソース制御プロセスへ次のメッセージM9が送信される。
(コマンド=区間終了, プロセスID=TID-C, 区間名=SEC-C)・・・M9
リソース制御プロセス内のスレッド配分決定部は、タスク状態表(図11(g)の状態にある)を参照し、SEC-Cに割り当てられていた高優先スレッドが2個であったことを知る(Ndec=2)。SEC-C以外の高優先スレッド数の合計Nold=5であり、Nfree=12−5+2=9であるから、タスク状態表内のタスクAに対するエントリ(TID-Aの行)が高優先スレッドの再割当先となる。すなわち、スレッド配分決定部は、通常スレッド3つが割り当てられていたタスクAに対し高優先スレッド3個を再割当することを決定し、タスク状態表を図11(h)のように更新するとともに、タスクAのスレッド制御ライブラリに対し
(高優先スレッド再割当 スレッド数=3)・・・M10
なるメッセージM10を送信する。
メッセージM10を受信し、タスクAのスレッド制御ライブラリはSEC-Aを実行している各スレッドのスレッド属性を”リアルタイムスケジューリングポリシー”に変更する。すなわち、タスクAの性能保証区間SEC-Aには本来必要な数の高優先スレッドが割り当てられ、以後性能保証された形で実行される。このときの実行の様子を図15に示す。
6)時刻T5
時刻T5にて、タスクCが再び通常負荷で性能保証区間SEC-Cを開始すると、リソース制御プロセスは前記手順に沿って、SEC-Cに対し高優先スレッド2個を割り当てることを決定する。このときのタスク状態表を図11(i)に示す。
このように、本実施形態によれば、処理負荷の変動に応じてスレッド割当を動的に変化させ、各処理に常に適切なCPUリソースを配分する。従って、指定された箇所の処理時間が所定の時間内に収まるようにできるとともに、空いたCPUリソースは他のベストエフォート型処理に最大限振り向けることができる。
以上、スレッドと処理時間との対応が図9の通りで、予定処理負荷量が図10のように変化したときの、タスク状態表の内容の変化及び各期間における目標処理時間と実際の処理時間について説明した。
ここで比較の対象として、適切なスレッド配分を行わなかった場合の動作例を示してみる。
第4の実施形態として先の動作事例にあげたものと同じシステム及びタスク構成を想定するが、今回は、性能保証型タスクA、B、Cに対して最初から十分な数のスレッドを割り当てておいた場合をとりあげる。図9のスレッド−性能対応表に示すように、タスクA、B、Cの各性能保証区間は最大6スレッドによる並列処理が可能であるから、各タスクには6スレッドずつ固定的に割り当てておく。
この場合、システム内には性能保証型タスク向けだけで計18個のスレッドがあり、ベストエフォート型タスク向けも含めれば、18個以上のスレッドが存在する。これらのスレッドには物理的なCPUコアリソースがOSによって平均化されて割り当てられる。先の動作事例ではNall=12すなわちシステム内には12個のスレッドのみが存在するとしたが、今回は18個以上のスレッドが存在するため、各スレッドに割り当てられるCPUコアリソースは平均的に12÷18すなわち3分の2以下となる。そのため、各性能保証区間の実行時間も図9に示す値の1.5倍(3分の2の逆数)以上になる。
時刻T0での各性能保証区間の実行の様子を図17に示す。本発明技術の適用時の時刻T0での実行の様子(図13)に比べ、各処理は短時間に完了しており、低負荷状態では低レイテンシで処理が行われている。
同様に時刻T1での実行の様子を図18に示す。時刻T2での実行の様子を図19に示す。高負荷になったタスクBは、所定の時間内に処理が終えられなくなっている。
また時刻T3での実行の様子を図19に示す。ここでも高負荷状態のタスクB及びタスクCは所定の時間内に処理が終えられなくなっている。これは、各タスクに対し必要以上のスレッドを割り当てた結果、タスクの並列処理効率が低下してCPUコアリソースが無駄に消費されてしまい、真に急ぐべきタスクの処理が間に合わなくなっていることを意味する。
このように、単純に潤沢な数のスレッドを割り当てておくだけでは、負荷変動が生じた際に性能保証できなくなる場面が出てくる。
本実施形態のリソース配分システムは、最適なスレッド配分を通じて最適なCPUコアリソースの配分を行うことで、負荷変動が生じても性能保証できる可能性を高め、万一性能保証できない場合もその旨を警告する機能を提供するものである。
なお、以上の実施形態は、各々の全体又は一部を、他の実施形態と組み合わせることができる。
12 スレッド−性能対応表
121、122、123 スレッド−性能対応表エントリ
14 タスク状態表

Claims (6)

  1. タスクにおいて一定以上の処理性能の保証が要求される性能保証区間の処理のために前記タスクへ割り当てられたと仮定されたリソースの量である割当仮定量と、前記タスクに前記割当仮定量のリソースが割り当てられたときの前記性能保証区間における処理性能との対応関係を表すリソース−性能対応情報を保持する性能情報保持部と、
    前記性能保証区間を有する性能保証型タスクから、前記性能保証区間の実行開始前に、前記性能保証区間の処理が完了されるべき時間を表す処理完了時間要求値及び前記性能保証区間で予定される処理負荷量を表す予定処理負荷量を受信し、前記処理完了時間要求値、前記予定処理負荷量及び前記リソース−性能対応情報に基づいて前記性能保証区間の処理に用いるリソースの要求量である要求リソース量を決定し、前記性能保証区間に対して前記要求リソース量のリソースが割り当てられたことを示す割当通知を前記性能保証型タスクに送信するリソース要求量決定部と、
    前記性能保証型タスクに現在割り当てられているリソースの量を表す割当済リソース量を保持するタスク状態保持部と、
    割当対象となりうるリソースの総量である全リソース量、前記要求リソース量及び前記割当済リソース量に基づいて、前記性能保証区間に対する前記要求リソース量のリソースの割当の可否を決定するリソース配分決定部と、
    を備え、
    前記処理性能は処理時間である
    ことを特徴とするリソース配分システム。
  2. 前記リソース配分決定部は、前記割当済リソース量と前記要求リソース量との合計と、全リソース量との比較結果に基づいて前記割当の可否を決定する
    ことを特徴とする請求項1記載のリソース配分システム。
  3. 前記リソース配分決定部によって割当が決定されたリソースは、通常のスレッドより高い優先度を与えられた高優先スレッドであり、
    前記性能保証区間の実行開始に先立って生成された所定の数の前記高優先スレッドを待機させるスレッドプールを含み、前記性能保証型タスクからの指示により、前記スレッドプール内の前記高優先スレッドに対する前記性能保証区間の実行の開始を指示する機能、又は前記性能保証区間を実行中のスレッドの優先度若しくはスケジューリング属性を変更する機能を有し、前記リソース要求量決定部に前記予定処理負荷量及び前記処理完了時間要求値とを通知し、前記割当通知に基づき、前記高優先スレッドを用いて前記性能保証区間の実行制御を行うスレッド制御部を備え、
    前記リソース要求量決定部は、前記予定処理負荷量と前記処理完了時間要求値から前記要求リソース量として、前記スレッドプール内の前記高優先スレッドの数を決定する
    ことを特徴とする、請求項1又は2に記載のリソース配分システム。
  4. タスクにおいて一定以上の処理性能の保証が要求される性能保証区間の処理のために前記タスクへ割り当てられたと仮定されたリソースの量である割当仮定量と、前記タスクに前記割当仮定量のリソースが割り当てられたときの前記性能保証区間における処理性能との対応関係を表すリソース−性能対応情報、及び前記性能保証区間を有する性能保証型タスクに現在割り当てられているリソースの量を表す割当済リソース量を保持し、
    前記性能保証型タスクから、前記性能保証区間の実行開始前に、前記性能保証区間の処理が完了されるべき時間を表す処理完了時間要求値及び前記性能保証区間で予定される処理負荷量を表す予定処理負荷量を受信し、
    前記処理完了時間要求値、前記予定処理負荷量及び前記リソース−性能対応情報に基づいて前記性能保証区間の処理に用いるリソースの要求量である要求リソース量を決定し、
    割当対象となりうるリソースの総量である全リソース量、前記要求リソース量及び前記割当済リソース量に基づいて、前記性能保証区間に対する前記要求リソース量のリソースの割当の可否を決定し、
    前記性能保証区間に対して前記要求リソース量のリソースが割り当てられたことを示す割当通知を前記性能保証型タスクに送信し、
    前記処理性能は処理時間である
    ことを特徴とするリソース配分方法。
  5. リソース配分システムが備えるコンピュータを、
    タスクにおいて一定以上の処理性能の保証が要求される性能保証区間の処理のために前記タスクへ割り当てられたと仮定されたリソースの量である割当仮定量と、前記タスクに前記割当仮定量のリソースが割り当てられたときの前記性能保証区間における処理性能との対応関係を表すリソース−性能対応情報、及び前記性能保証区間を有する性能保証型タスクに現在割り当てられているリソースの量を表す割当済リソース量を保持する保持手段と、
    前記性能保証型タスクから、前記性能保証区間の実行開始前に、前記性能保証区間の処理が完了されるべき時間を表す処理完了時間要求値及び前記性能保証区間で予定される処理負荷量を表す予定処理負荷量を受信する受信手段と、
    前記処理完了時間要求値、前記予定処理負荷量及び前記リソース−性能対応情報に基づいて前記性能保証区間の処理に用いるリソースの要求量である要求リソース量を決定する要求量決定手段と、
    割当対象となりうるリソースの総量である全リソース量、前記要求リソース量及び前記割当済リソース量に基づいて、前記性能保証区間に対する前記要求リソース量のリソースの割当の可否を決定する割当決定手段と、
    前記性能保証区間に対して前記要求リソース量のリソースが割り当てられたことを示す割当通知を前記性能保証型タスクに送信する通知手段
    として機能させ、
    前記処理性能は処理時間である
    ことを特徴とするリソース配分プログラム。
  6. 請求項記載のリソース配分プログラムを記憶した、非一時的なコンピュータ読み取り可能な記憶媒体。
JP2012046963A 2012-03-02 2012-03-02 リソース配分システム、リソース配分方法、及びリソース配分プログラム Active JP6007516B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012046963A JP6007516B2 (ja) 2012-03-02 2012-03-02 リソース配分システム、リソース配分方法、及びリソース配分プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012046963A JP6007516B2 (ja) 2012-03-02 2012-03-02 リソース配分システム、リソース配分方法、及びリソース配分プログラム

Publications (2)

Publication Number Publication Date
JP2013182502A JP2013182502A (ja) 2013-09-12
JP6007516B2 true JP6007516B2 (ja) 2016-10-12

Family

ID=49273093

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012046963A Active JP6007516B2 (ja) 2012-03-02 2012-03-02 リソース配分システム、リソース配分方法、及びリソース配分プログラム

Country Status (1)

Country Link
JP (1) JP6007516B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6580505B2 (ja) * 2016-03-28 2019-09-25 株式会社日立産機システム コントローラ装置およびコントローラ装置のタスク実行管理方法
US11204805B2 (en) 2017-04-27 2021-12-21 Nec Corporation Computational resource management apparatus which optimizes computational resources to be allocated to tasks having a dependency relationship, computational resource management method and computer readable recording medium
CN113032113B (zh) * 2019-12-25 2024-06-18 中科寒武纪科技股份有限公司 任务调度方法及相关产品
CN111309468B (zh) * 2020-02-27 2024-09-13 腾讯云计算(北京)有限责任公司 资源调度方法、装置及存储介质
JP7191906B2 (ja) * 2020-09-09 2022-12-19 株式会社日立製作所 リソース割当制御装置、計算機システム、及びリソース割当制御方法
CN112416584B (zh) * 2020-11-18 2023-12-19 捷开通讯(深圳)有限公司 一种进程通信方法、装置、存储介质及移动终端
CN113641517B (zh) * 2021-08-10 2023-08-29 平安科技(深圳)有限公司 业务数据的发送方法、装置、计算机设备和存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0628323A (ja) * 1992-07-06 1994-02-04 Nippon Telegr & Teleph Corp <Ntt> プロセス実行制御方法
JPH11213143A (ja) * 1998-01-23 1999-08-06 Fuji Xerox Co Ltd 画像処理装置および画像処理時間予測方法
JP2000322394A (ja) * 1999-05-13 2000-11-24 Canon Inc 画像形成装置、描画割振方法、及び記憶媒体
JP5257077B2 (ja) * 2009-01-06 2013-08-07 日本電気株式会社 リソース配分装置、その方法及びプログラム
JP5521644B2 (ja) * 2010-02-26 2014-06-18 日本電気株式会社 ハイブリッド並列処理システム、方法、及びプログラム
JP5494021B2 (ja) * 2010-03-04 2014-05-14 日本電気株式会社 サーバ装置、情報処理方法、及び、プログラム
JP2011197846A (ja) * 2010-03-18 2011-10-06 Fujitsu Ltd 情報処理装置、並列計算制御方法、プログラム及び並列計算システム

Also Published As

Publication number Publication date
JP2013182502A (ja) 2013-09-12

Similar Documents

Publication Publication Date Title
JP6007516B2 (ja) リソース配分システム、リソース配分方法、及びリソース配分プログラム
KR101626378B1 (ko) 병렬도를 고려한 병렬 처리 장치 및 방법
US9483319B2 (en) Job scheduling apparatus and method therefor
RU2538920C2 (ru) Способ распределения задач сервером вычислительной системы, машиночитаемый носитель информации и система для реализации способа
CN113821311A (zh) 任务执行方法及存储设备
EP2309388B1 (en) Network distributed system including an allocation control server and one or more clients carrying out parallel task processing by means of multicore processors.
US9875139B2 (en) Graphics processing unit controller, host system, and methods
CN112783659A (zh) 一种资源分配方法、装置、计算机设备及存储介质
EP2921957A1 (en) Method and apparatus for allocating core resource, and many-core system
KR20110075295A (ko) 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치
CN112925616A (zh) 任务分配方法、装置、存储介质及电子设备
US8627325B2 (en) Scheduling memory usage of a workload
CN109840149B (zh) 任务调度方法、装置、设备及存储介质
CN110187958B (zh) 一种任务处理方法、装置、系统、设备及存储介质
CN109936604A (zh) 一种资源调度方法、装置和系统
CN111625339A (zh) 集群资源调度方法、装置、介质和计算设备
US20250272157A1 (en) Programmatic Work Assignment For Dynamically Load-Balanced Persistent Execution
US9740530B2 (en) Decreasing the priority of a user based on an allocation ratio
CN111352735A (zh) 数据加速方法、装置、存储介质及设备
CN114546587A (zh) 一种在线图像识别服务的扩缩容方法及相关装置
CN117149440B (zh) 一种任务调度方法、装置、电子设备及存储介质
CN112114877B (zh) 一种动态补偿线程束warp的方法、处理器及计算机存储介质
JP7478918B2 (ja) 分散型異機種混在システムに基づくタスクインテリジェント処理方法
US20150212859A1 (en) Graphics processing unit controller, host system, and methods
KR20130104958A (ko) 다중 운영체제들을 실행하는 장치 및 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150216

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150825

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151006

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151207

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160510

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160711

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: 20160816

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160829

R150 Certificate of patent or registration of utility model

Ref document number: 6007516

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150