情報処理装置および情報処理方法
【課題】限られたリソースを最大限利用するために、複数のプロセッサが必要な処理を効率的に実行することができるようにする。
【解決手段】システムレベル管理部24がシステム処理を発生させて処理要求をユーザレベル管理部のタスク割り当て部26に行う(S20)。タスク割り当て部26は導入しているユーザレベルスケジューリングの手順に則りシステム処理をスケジューリングする(S22)。システム処理を割り当てられた処理ユニット22dは、アプリケーションのタスクを好適なタイミングで休止するか終了した時点で、システム処理が受け入れ可能である旨の通知を主処理ユニットに送信する(S24)。システムレベル管理部24は、実行期限までにS24の通知を受けた場合、処理ユニット22dにシステム処理を開始させる(S28)。
【解決手段】システムレベル管理部24がシステム処理を発生させて処理要求をユーザレベル管理部のタスク割り当て部26に行う(S20)。タスク割り当て部26は導入しているユーザレベルスケジューリングの手順に則りシステム処理をスケジューリングする(S22)。システム処理を割り当てられた処理ユニット22dは、アプリケーションのタスクを好適なタイミングで休止するか終了した時点で、システム処理が受け入れ可能である旨の通知を主処理ユニットに送信する(S24)。システムレベル管理部24は、実行期限までにS24の通知を受けた場合、処理ユニット22dにシステム処理を開始させる(S28)。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理技術に関し、特に複数の計算資源に処理を分散させてコンピュータプログラムを実行するための技術に関する。
【背景技術】
【0002】
コンピュータゲームやウェブ検索ソフトをはじめとするソフトウェアの高機能化は、ハードウェアに対して大きな処理負荷をかけるようになってきている。このような状況に対処するためには、演算処理自体の高速化が必要であることはもちろんであるが、複数のプロセッサを導入し、タスク処理を効率的に行うことも重要である。このとき、いかに高い稼働率で個々のプロセッサを動作させるかが、処理の高速化に対し重要な鍵となる。
【0003】
複数のプロセッサにタスク処理を並列に実行させるためには、一般的にはOS(オペレーティングシステム)が、処理のタスクへの分割、各プロセッサへのタスクの割り当て、処理の切り替え、各プロセッサからメインメモリや入出力装置へのアクセスの制御などを行う場合が多い。一方で、OS上で動作するユーザレベルのタスクがスケジューリングなどのタスク処理の管理を行うユーザレベルスケジューリングの手法も提案されている。例えば、タスクをメインメモリのキューに格納しておき、タスクを実行するプロセッサが自ら当該キューからタスクを選択して実行する技術が提案されている(例えば特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2007−52511号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上述のように、複数のプロセッサがタスク処理を並列に実行することによってプログラムの処理速度を確保する技術は一般的なものになっている。一方で、高度な処理を高速に行うことに対するユーザのニーズは留まるところを知らず、限られたリソースを最大限利用するために処理を効率化できる技術が望まれている。
【0006】
本発明はこのような課題に鑑みてなされたものであり、その目的は、複数のプロセッサが必要な処理を効率的に実行することのできる技術を提供することにある。
【課題を解決するための手段】
【0007】
本発明のある態様は情報処理装置に関する。この情報処理装置は、プログラムのタスクを処理するタスク処理部と、実行中のプログラムの外部プログラムが呼び出された場合に、当該外部プログラムのタスクに実行条件を付加して処理要求を発行する処理要求部と、処理要求部が処理要求を発行した外部プログラムのタスクをタスク処理部におけるタスク処理のスケジュール制御に組み入れるタスク割り当て部と、タスク処理部における外部プログラムのタスクの処理において、処理要求部が付加した実行条件に対する違反が生じたか否かを判定する実行監視部と、実行監視部が実行条件違反が生じたと判定した際に、タスク処理部の処理を外部プログラムのタスクに切り替える実行制御部と、を備えたことを特徴とする。
【0008】
ここで「外部プログラム」とは、一般的にはOSが提供する機能を実現するためのライブラリ、カーネルなどであるが、呼び出し元のプログラム以外のプログラムであればその種別や処理内容は限定されない。
【0009】
本発明の別の態様は情報処理方法に関する。この情報処理方法は、実行すべきプログラムのタスクをプロセッサにおいて処理するステップと、実行中のプログラム以外のシステムレベルのプログラムが呼び出された場合、実行中のプログラムのタスクについて行っていたユーザレベルのスケジュール制御に、当該システムレベルのプログラムのタスクを組み入れるステップと、スケジュール制御に組み入れられたシステムレベルのプログラムのタスクをプロセッサにおいて処理するステップと、を含むことを特徴とする。
【0010】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0011】
本発明によれば、複数のプロセッサによるタスクの並列処理を容易に効率化することができる。
【図面の簡単な説明】
【0012】
【図1】実施の形態1を適用できる情報処理装置の構成例を示す図である。
【図2】一つの処理ユニットにのみシステム処理を行わせた場合の、処理ユニットにおけるタスク処理の推移を概念的に示す図である。
【図3】実施の形態1における、ユーザレベルスケジューラによってシステム処理をスケジューリングする場合の一態様として実現される、各処理ユニットにおけるタスク処理の推移の例を概念的に示す図である。
【図4】実施の形態1における処理ユニットの構成をより詳細に示す図である。
【図5】実施の形態1におけるシステム処理の発生から開始までの全体的な流れを示すフローチャートである。
【図6】実施の形態1においてシステム処理を実行するための処理手順を模式的に示す図である。
【図7】実施の形態1においてシステム処理要求部がタスク割り当て部にシステム処理要求を行う際に通知する、システム処理に係る情報のデータ構造例を示す図である。
【図8】実施の形態2で適用する自律的なユーザレベルスケジューリングの概要を説明するための図である。
【図9】実施の形態2においてワークロードのそれぞれに設定された割り当て条件の例を示す図である。
【図10】実施の形態2において図9に示した割り当て条件を設定した際、処理ユニットが各ワークロードを選択し、処理する過程の例を模式的に示す図である。
【図11】実施の形態2においてシステム処理を仮想ワークロードとして実行する際の処理手順を模式的に示す図である。
【図12】実施の形態2においてタスク割り当て部が要求されたシステム処理を仮想ワークロードに変換する際に参照する変換テーブルの例を示す図である。
【図13】実施の形態2において自律的なユーザレベルスケジューラを導入した際にシステム処理を実行する処理手順を示すフローチャートである。
【図14】実施の形態2において実現できる、6つの処理ユニットにおける処理の推移の例を示す図である。
【図15】実施の形態2において実現できる、6つの処理ユニットにおける処理の推移の例を示す図である。
【図16】実施の形態2において実現できる、6つの処理ユニットにおける処理の推移の例を示す図である。
【発明を実施するための形態】
【0013】
実施の形態1
図1は、本実施の形態を適用できる情報処理装置の構成例を示している。情報処理装置10は、マイクロプロセッサユニット18、入出力装置(I/O)42、メインメモリ44、補助記憶装置(HDD)46を備え、それぞれがバス48を介して接続される。マイクロプロセッサユニット18は、複数の処理ユニット22a、22b、・・・、22nがそれぞれ内部バス19を介して接続する構成を有する。
【0014】
処理ユニット22a、22b、・・・、22nはいずれも、演算装置、ローカルメモリなどを含む処理ユニットである。処理ユニット22a、22b、・・・、22nは、OSや起動されたアプリケーションプログラム(以後、単に「アプリケーション」と呼ぶ)のタスクを処理する。入出力装置(I/O)42、メインメモリ44、補助記憶装置(HDD)46は、一般的な情報処理装置に設けられる入出力装置、メモリ、補助記憶装置で構成してよい。
【0015】
図1に示したような構成の情報処理装置10においては、処理ユニット22a、22b、・・・、22nの少なくともいずれかが、入出力装置42やメインメモリ44などのデバイスへのアクセスを要する処理など、システムレベルの処理を行う必要がある。以後、このような処理を「システム処理」と呼ぶ。これに対しアプリケーションなどユーザレベルのタスク処理はユーザ処理、と捉えることができる。システム処理を実行しない処理ユニットは、主にアプリケーションなどユーザレベルのタスクを並列に処理する。
【0016】
このような場合、アプリケーションを高速処理するためには、ある処理ユニットにシステム処理のみを行わせるのでなく、処理の空き時間にアプリケーションのタスクも処理させることが望ましい。図2は処理ユニット22aをシステム処理を行う処理ユニットとした場合の、処理ユニット22a、22b、・・・、22nにおけるタスク処理の推移を概念的に示している。図中、横軸が時間であり、矩形で示された、各処理ユニットにおいて処理されるタスクのうち、白い矩形がアプリケーションのタスク、斜線網掛けの矩形がシステム処理のタスクとする。
【0017】
処理ユニット22aではシステム処理のタスク2、3、5が処理され、その空き時間にアプリケーションのタスク4を処理している。一方、その他の処理ユニット22b、・・・、22nでは常時、アプリケーションのタスク6を処理している。図では省略しているが、タスク6は当然、処理ユニットごとに処理が行われ、同じ処理ユニットでも適宜コンテキストスイッチを行っているものとする。
【0018】
一般的にアプリケーションのタスクと比較して、システム処理は高い優先度を必要とする場合が多い。そのため図2に示したような態様において、処理ユニット22aがアプリケーションのタスク4を処理している途中でシステム処理のタスク5が発生すると、ユーザレベルのスケジューリングに関係なく、アプリケーションのタスク4は当該処理ユニット22aをシステム処理のタスク5に明け渡さざるを得なくなる。
【0019】
アプリケーションを作成する段階で、システム処理がどのように発生するかを予測することは困難であるため、並列処理用にアプリケーションを作成したとしても、処理ユニット22aに割り当てるタスク4をどのように切り出すかは難しい問題である。例えば、処理ユニット22aがアプリケーションのタスクを処理できる時間が予測できないため、同じアプリケーションのタスク6を処理している処理ユニット22b、・・・、22nと通信の必要が発生しても、当該通信処理を好適なタイミングで実行できる保障がない。またアプリケーションのタスク4を突然休止せざるを得ないため、保存すべきデータが多くなりコンテキストスイッチに要する時間7が長くなる。
【0020】
本実施の形態では、このような状況を回避しつつ処理の高速化を実現するため、システム処理の処理スケジューリングをユーザレベルスケジューラに行わせることにより、ユーザレベルの処理スケジュールに組み入れる。図3はユーザレベルスケジューラによってシステム処理をスケジューリングする場合の一態様として実現される、処理ユニット22a、22b、・・・、22nにおけるタスク処理の推移の例を概念的に示している。図の示し方は図2と同様である。
【0021】
同図に示すように、全ての処理ユニット22a、22b、・・・、22nは、基本的にアプリケーションのタスク8を実行する。そしてシステム処理のタスク2、3、5が発生したら、導入されているユーザレベルスケジューリングの手順に基づき、いずれかの処理ユニットが当該処理を実行するようにスケジューリングする。例えば優先度の低いアプリケーションのタスクを処理している処理ユニットや、他の処理ユニットが処理中のタスクと関連性の低いタスクを処理している処理ユニットなどを選択してシステム処理を割り当てる。このときシステム処理を割り当てられた処理ユニットは、自らが実行中のアプリケーションのタスクをコンテキストスイッチの観点で好適なタイミングで休止するか処理中のタスクが終了した時点でシステム処理を開始する。
【0022】
このようにすることで、システム処理の負荷を分散させることができるとともに、アプリケーションのタスクが突然、システム処理のタスクによって休止させられるという状況を回避でき、システム処理とアプリケーションのタスクの双方を可能な限り進捗させることができる。このとき、上述した、一つの処理ユニットのみ、アプリケーションに必要な通信を行いづらい、といった状況を回避できるため、全ての処理ユニットを利用して並列に処理を行うプログラムを作成すればよく、プログラム作成が容易である。またコンテキストスイッチに要する時間を削減することができ、全体として処理速度が向上する。
【0023】
図4は処理ユニット22aの構成をより詳細に示している。情報処理装置10は図1に示すように処理ユニット22a以外の処理ユニットを有していてよく、その数は限定しない。
【0024】
処理ユニット22aは、システム処理のタスクを管理するシステムレベル管理部24、アプリケーションのタスクなどユーザレベルのタスクを管理するユーザレベル管理部25を含む。システムレベル管理部24は、処理中のタスクにおいてシステム系のプログラムが呼び出された場合などシステム処理の必要が生じた際、システム処理要求をユーザレベル管理部25に発行するシステム処理要求部27、処理ユニットにおけるシステム処理の実行を監視する実行監視部28、および、システム処理の実行条件に違反した際、処理ユニット22a、22bなどのいずれかにシステム処理を強制的に実行させる実行制御部30を含む。ユーザレベル管理部25は、主としてアプリケーションなどユーザレベルのプログラムをタスクに分割し、各処理ユニットに割り当てるタスク割り当て部26を含む。
【0025】
処理ユニット22aはさらに、割り当てられたタスクをスケジュールに則り処理するタスク処理部32、システム処理が開始できる状態となった際、システムレベル管理部24に通知する通信部34、タスクの処理に必要なデータをメインメモリ44から読み出し格納するローカルメモリ36を含む。なおその他の処理ユニット22b、・・・、22nは処理ユニット22aと同様の構成としてもよいし、例えばタスク処理部32、通信部34、およびローカルメモリ36など、一部の機能ブロックのみ有する構成としてもよい。この場合、システムレベル管理部24およびユーザレベル管理部25を有する処理ユニットは、それらを持たない他の処理ユニットのタスク処理も管理してよい。
【0026】
図4において、さまざまな処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、CPU(Central Processing Unit)、メモリ、その他のLSIで構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。例えばユーザレベル管理部25はタスク処理部32で処理するタスクのひとつであってもよく、この場合、当該機能ブロックはタスク処理部32の一部と考えることもできる。
【0027】
システムレベル管理部24のシステム処理要求部27は、処理ユニット22a、22bなどにおいて処理されているタスクによってOSが提供するライブラリが呼び出された際などに、当該ライブラリに対応するシステム処理を発生させ、当該システム処理に係る情報をユーザレベル管理部25のタスク割り当て部26に通知することによりシステム処理の実行を要求する。
【0028】
ここでタスク割り当て部26に通知する、システム処理に係る情報には、当該システム処理を実行する条件を含ませる。実行条件としては例えば、システム処理が開始されるまでの許容時間である実行期限や、実行する処理ユニットなどが挙げられる。実行条件を違反した場合、例えば実行期限を超過してもシステム処理が実行されない場合は、後述するように、いずれかの処理ユニットにおけるアプリケーションのタスクを強制的に休止させてシステム処理を実行させる。実行条件の情報や処理要求発行タイミングなどの情報はシステムレベル管理部24内で共有される。
【0029】
実行監視部28は、処理ユニット22a、22bなどのいずれかでシステム処理が実行期限内に実行されたかなど、実行条件が守られたか否かを監視する。実行期限が実行条件として指定されている場合、例えば実行監視部28には図示しないタイマを設け、システム処理要求部27がシステム処理の実行要求を発行させてからの経過時間を測定する。そして通信部34からのシステム処理の受け入れ可能の通知が、タイマで測定した実行期限内になされなかった場合は、システム処理の実行条件に違反したと判定する。
【0030】
実行制御部30は、実行監視部28によってシステム処理の実行条件違反が判定された場合に、処理ユニット22a、22bなどのいずれか、または全ての処理ユニット22a、22b、・・・、22nにおいて処理されているタスクを休止させ、当該システム処理を実行させる。この処理は、OSのカーネルなどによる一般的なプリエンプション処理と同様に実現することができる。
【0031】
実行制御部30はさらに、システム処理を割り当てられた処理ユニットが、自らが処理していたアプリケーションのタスクを休止し、レジスタ値などの保存を行ったことを検知すると、当該処理ユニットにシステム処理を実行させる。
【0032】
ユーザレベル管理部25のタスク割り当て部26は、ユーザが起動したアプリケーションのタスクを処理ユニット22a、22bなどに割り当てる。新たなタスクが発生すると、タスク割り当て部26は、メインメモリ44などに設けたタスクキューに、発生したタスクを順次格納していく。この場合、処理ユニット22a、22bなどは、処理中のタスクを休止、終了した際などに、当該タスクキューからタスクを順次取り出して処理する。あるいはタスク割り当て部26は、タスクの優先度や必要な処理ユニットの数、処理時間などに基づき、処理ユニット22a、22bなどで既にスケジューリングされているタスクとの調整を行ったうえで、適当なタイミングで新たなタスクが処理されるように処理ユニット22a、22bなどにタスクを割り振る。このような処理は、マルチタスク対応のOSやユーザレベルOSなどで一般的に用いられている手法を適用することができる。
【0033】
タスク割り当て部26はさらに、システム処理要求部27からシステム処理の実行要求を受けたら、当該システム処理もいずれかの処理ユニットに割り当てる。このとき、上述のタスクキューに、他のタスクとともにシステム処理の情報を格納する。あるいは、システム処理要求部27から受け付けた情報には当該システム処理の実行条件が含まれているため、タスク割り当て部26は、当該実行条件を満たすようにスケジューリングを行う。
【0034】
タスク処理部32は、タスク割り当て部26が割り当てたアプリケーションおよびシステム処理のタスクをスケジュールに則り順次処理する。プログラムなどタスクの処理に必要なデータはメインメモリ44からローカルメモリ36に読み出しておく。またタスクを切り替える際は、それまで処理していたタスクのコンテキストをメインメモリ44に保存し、次のタスクのコンテキストをリストアするコンテキストスイッチを行う。
【0035】
タスク割り当て部26がシステム処理を割り当てた際は、そのスケジュールに従い、タスク処理部32がアプリケーションのタスクのコンテキストを保存したうえで、通信部34が、システムレベル管理部24にその旨を通知する。そしてシステムレベル管理部24の実行制御部30の制御のもと、システム処理を実行する。また上述のように実行条件に違反した場合は、その時点で実行制御部30の制御のもと、タスク処理部32は処理中のアプリケーションのタスクからシステム処理へコンテキストスイッチを行う。
【0036】
次にこれまで述べた構成による本実施の形態の動作について説明する。図5は本実施の形態におけるシステム処理の発生から開始までの全体的な流れを示すフローチャートである。まず前提として、処理ユニット22a、22b、・・・、22nでは、ユーザが起動したアプリケーションのタスクなどがその時点でのスケジュールに則り処理されているとする。このような状況において処理中のタスクが、OSが提供するライブラリを呼び出すなどした際に、システムレベル管理部24のシステム処理要求部27は、当該ライブラリに対応するシステム処理を発生させ、ユーザレベル管理部25のタスク割り当て部26に処理要求を行う(S10)。
【0037】
要求を受けたタスク割り当て部26が、当該システム処理の割り当てをいずれの処理ユニットにも行わなかったり、割り当てたにも関わらず処理ユニットが何らかの理由でアプリケーションのタスクを休止しなかったりした場合などに、実行監視部28は実行条件の違反を判定する(S12のY)。そして実行制御部30は、処理ユニット22a、22b、・・・、22nのいずれかまたは全ての処理を休止させ、システム処理用に使用するためのプリエンプション処理を行う(S14)。このとき全ての処理ユニットを休止させた場合は、そのうち少なくとも一つの処理ユニットを使用してシステム処理を実行すればよい。また、複数の処理ユニット22a、22b、・・・、22nのいずれか少なくとも一つを休止させ、当該処理ユニットによりシステム処理を行う場合、休止させる処理ユニットはあらかじめ設定した優先度などの規則に従って選択してもよいし、任意に選択してもよい。
【0038】
一方、タスク割り当て部26がシステム処理の割り当てを行い、割り当てられた処理ユニットが当該処理のためにコンテキストスイッチを行った場合、実行監視部28は実行条件の違反がないと判定する(S12のN)。そして処理ユニットのタスク処理部32はシステム処理を開始する(S16)。S14でプリエンプション処理を行った場合も同様に、システム処理を開始する(S16)。
【0039】
図6はシステム処理を実行するための処理手順を模式的に示している。このときシステム処理には実行期限が設定されているとする。図2と同様、横方向が時間軸であり、白い矩形はアプリケーションのタスク、斜線網掛けの矩形はシステム処理のタスクである。同図において6つの処理ユニット22a、22b、・・・、22fがそれぞれアプリケーションのタスクを処理している。この状況において、まず図5のS10に示すように、システムレベル管理部24のシステム処理要求部27がシステム処理要求をタスク割り当て部26に行う(S20)。タスク割り当て部26は、処理ユニット22dに当該処理を割り当てる(S22)。この処理ユニットの選択は、上述のように、処理しているタスクの優先度や他の処理ユニットが処理中のタスクとの関連性などに基づいて行う。またはシステム処理の情報をタスクキューに格納する。この場合、処理中のタスクを終了した処理ユニットが当該タスクキューからシステム処理の情報を読み出すことにより、実質的な割り当てが行われる。
【0040】
システム処理を割り当てられた処理ユニット22dは、アプリケーションのタスクを好適なタイミングで休止し、レジスタ値などをメインメモリ44などに保存したうえ、システム処理が受け入れ可能である旨の通知をシステムレベル管理部24に送信する(S24)。システムレベル管理部24の実行監視部28は、S20の処理要求からの経過時間を測定し、実行期限までにS24の通知を受けた場合、実行制御部30は処理ユニット22dにシステム処理を開始させる(S28)。
【0041】
ここで何らかの原因でS22のタスク割り当て処理がなされなかった場合、あるいは、処理ユニット22dでシステム処理の受け入れができない場合など、S24の受け入れ可能通知が実行期限までになされないと、実行監視部28は実行条件違反と判定し、図5のS14におけるプリエンプション処理が実行制御部30により実行される。以上の処理をシステム処理が発生するたびに繰り返すことにより、図3に示したように、全ての処理ユニット22a、22b、・・・、22nをアプリケーションのために使用しつつ、必要なタイミングでシステム処理を実行する態様を実現できる。
【0042】
図7はシステム処理要求部27がタスク割り当て部26にシステム処理要求を行う際に通知する、システム処理に係る情報のデータ構造例を示している。システム処理データ50は、種別識別子52、処理ID54、実行期限56、周期58、実行時間60を含む。種別識別子52は、オーディオデコーダ、エコーキャンセラなど、システム処理の種別を識別するための識別情報であり、種別と識別子の対応はあらかじめ定めてメインメモリ44などに格納しておく。タスク割り当て部26は、要求されたシステム処理の種別識別子52に基づき当該処理の種別を特定し、それぞれの種別に対しあらかじめ定めた優先度を特定したうえ、スケジューリングに反映させる。
【0043】
処理ID54は、要求するシステム処理ごとに一意に設定する識別情報である。処理ユニットがシステム処理を行う際、当該処理IDに基づき、システム処理のプログラムをメインメモリ44から読み出す。また、システム処理を割り当てられた処理ユニットの通信部34が、当該システム処理を実行する準備が整ったことをシステムレベル管理部24に通知する際にも、処理IDを用いて他のシステム処理に係る通知と区別する。実行期限56は例えばシステム処理の依頼発行から実行開始までの許容時間である。上述のとおりこの時間を過ぎても処理ユニットからシステム処理の受け入れ可能通知がなされない場合、実行制御部30によるプリエンプション処理が行われる。複数のシステム処理が発生した場合、タスク割り当て部26は当該実行期限56を利用して、システム処理間での割り当て優先順位を定めてもよい。例えば最初に実行期限が到来するシステム処理を優先して処理ユニットに割り当てる。
【0044】
周期58はシステム処理の動作周期である。複数のシステム処理が発生した場合、タスク割り当て部26は当該周期58に基づき、例えばレートモノトニックスケジューリングなどの手法に則り、処理ユニットへの割り当てを定めてもよい。実行時間60はシステム処理の実行時間である。複数のシステム処理が発生した場合、タスク割り当て部26は当該実行時間60に基づき処理ユニットへの割り当てを定めてもよい。また場合によっては、システム処理の実行が実行時間60を経過したら、処理ユニットにおける当該システム処理を強制的に打ち切るようにしてもよい。
【0045】
これまでの説明では、システムレベル管理部24がシステム処理を発生させると、専らユーザレベル管理部25のタスク割り当て部26に処理要求を行うことにより、ユーザレベルのスケジューリングにシステム処理を組み入れる態様を実現した。一方で、同じ情報処理装置10を用いて、システム処理をユーザレベルのスケジューリングに組み入れる態様と、図2について説明したようにシステム処理がユーザレベルスケジューリングと独立に実行される態様とを、アプリケーションなどのプログラムによって選択できるようにしてもよい。この場合、システムレベル管理部24は、システム処理が発生した時点で、いずれの態様が指定されているかを実行中のアプリケーションのプログラムから判断する。
【0046】
そしてシステム処理をユーザレベルのスケジューリングに組み入れる態様が指定されていれば、システムレベル管理部24は、発生したシステム処理の要求をタスク割り当て部26に対して発行する。システム処理をユーザレベルスケジューリングと独立に実行する態様が指定されていれば、システムレベル管理部24は、タスク割り当て部26に処理を要求せず、処理ユニットがユーザレベルのタスクを処理している場合は処理時間を横取りしてシステム処理を実行させる。このようにすることで、アプリケーションを作成する際に、必要となるシステム処理の種類や実行頻度などに応じて最適な態様を選択することができる。
【0047】
以上述べた本実施の形態によれば、アプリケーションの処理の途中で発生するシステム処理をユーザレベルのスケジューリング処理に組み込む。これにより、ユーザレベルのスケジューリングポリシーに則りシステム処理を実行できる機会が生まれ、アプリケーションなどユーザレベルのタスクが予期しないタイミングで休止させられる可能性が低くなる。また、システム処理の負荷が複数の処理ユニットに分散し易いため、システム管理部によるプリエンプションをせずに実行期限までにシステム処理を実行できる可能性が高くなる。これにより、システム処理を割り当てられた処理ユニットは、自らが処理していたアプリケーションのタスクを、好適なタイミングで休止させることができ、システム処理を開始させるためのコンテキストスイッチによるオーバーヘッドを削減することができる。また、アプリケーションのタスク処理に偏りが発生しにくいため、特定の処理ユニットのみ処理ユニット間通信がしにくい、といった状況が回避でき、プログラムの並列化が容易である。
【0048】
また、処理ユニットによるシステム処理が実行期限を超過するなど実行条件に違反した場合、主処理ユニットは処理ユニットの処理を強制的にシステム処理に切り替える。これにより、システム処理を確実に実行することができ、処理割り当てをユーザレベルのスケジューリングに則り行うことによってシステム処理が遅延するなどの悪影響を排除することができる。結果として、システム処理を確実に実行しながら、アプリケーションのタスクも高速に処理することが可能となる。
【0049】
実施の形態2
実施の形態1は、優先度や実行時間などに基づき、ユーザレベル管理部25のタスク割り当て部26が各タスクを適宜処理ユニットに割り当てていくことによりスケジュールを生成していく態様であった。本実施の形態では、各処理ユニットが自律的にタスクを選択して実行する自律的なユーザレベルスケジューリングの機構において、実施の形態1の如く、システム処理をスケジュールに則った処理ユニットで実行させる。
【0050】
このユーザレベルスケジューリングの例は、例えば特開2007−52511号公報などにおいて示されている。ここではその概要について説明する。図8は自律的なユーザレベルスケジューリングの概要を説明するための図である。なお以後の説明において実施の形態1と同じ機能ブロックを用いることができる場合、当該機能ブロックに実施の形態1で示したのと同じ符号を付す。また実施の形態1と同様の処理手順については適宜その説明を省略する。
【0051】
図8において、処理ユニット22aは、アプリケーションなどユーザレベルのタスクを生成すると、それを情報処理装置10に含まれる処理ユニットのグループのいずれかに割り当てる。具体的には、あらかじめ定めておいた一つまたは複数の処理ユニットのグループに対応するメインメモリ44内の領域(タスクキュー)に、割り当てたタスクを実行するためのデータを格納する。図8の例では、4つの処理ユニット22a、22b、22c、22dが処理ユニットのグループを構成しているとし、当該グループに割り当てたタスク80がメインメモリ44の対応する領域に格納されている。
【0052】
そして、処理ユニット22a、22b、22c、22dの各々のローカルメモリには、ユーザレベルスケジューリングを実行するカーネルのプログラムを格納しておく。処理ユニット22a、22b、22c、22dは、前のアプリケーションのタスクが完了したり休止状態となった場合、あるいは所定の周期が到来すると、カーネルの処理を開始し、メインメモリ44に格納されたタスクから1つ選択して、当該タスクの実行に必要なプログラムなどのデータを自らのローカルメモリにコピーすることによって当該タスクの処理を開始する。
【0053】
ここでメインメモリ44に格納するタスクは、1つの処理ユニットにおいて1回の処理で実行される最小単位のタスクでもよいし、それらを所定の処理単位でまとめたタスクセット、あるいはジョブチェインの状態でもよい。以後、このように最小単位のタスクを1つ以上まとめた単位をワークロードと呼ぶ。1つの巨視的な処理、すなわち目的を達成するためのタスクの集合体をワークロードとして形成すれば、当該ワークロード単位で処理ユニットに割り当てを行うことにより、効率的な処理が可能となる。例えば、ワークロードの実行に複数の処理ユニットが必要な場合は、基本的にはその数の処理ユニットを同時に確保して実行させる。このため各ワークロードには、要求する処理ユニットの数、各処理ユニットにおける優先度、最大の処理ユニット割り当て数などの割り当て条件の情報を付加しておく。
【0054】
処理ユニット22a、22b、22c、22dは、当該ワークロードに係る情報を読み出したうえ、処理ユニットごとの優先度などに基づき一つのワークロードを選択してタスクの処理を行う。図9は、4つのワークロードのそれぞれに設定された割り当て条件、ここでは各処理ユニットにおける優先度および最大の処理ユニット割り当て数を例示している。図9に示した割り当て条件テーブル90の例では、ワークロード欄92に示すように、物理演算のワークロードP、人工知能のワークロードA、グラフィックス処理のワークロードG、およびオーディオ処理のワークロードMを処理対象のワークロードとしている。
【0055】
そして各ワークロードに対し、各処理ユニットにおける4つのワークロードの優先順位、および割り当てることのできる処理ユニットの最大数が、優先度欄94および最大処理ユニット数欄96に記載されている。例えばワークロードPの場合、処理ユニット22a、22b、22c、22dにおける優先順位はそれぞれ「1」、「0」、「2」、「2」と設定されている。また割り当てることのできる処理ユニットの最大数は「2」と設定されている。その他のワークロードも同様である。
【0056】
同図の場合、優先度欄94に記載された数値は、「0」を除き数が少ないほど優先順位が高いとする。例えば処理ユニット22aにおける優先順位はワークロードPが高く次がワークロードGである。数値が「0」の場合は、当該処理ユニットでは処理を行わない設定を意味する。割り当てることのできる処理ユニットの最大数を設定しない場合は最大処理ユニット数欄96を空欄としてよい。このような設定はプログラム作成時にアプリケーションごとに行う。
【0057】
図10は、図9に示した割り当て条件を設定した際、処理ユニット22a、22b、22c、22dが各ワークロードを選択し、処理する過程の例を模式的に示している。同図において縦方向が時間軸であり、各処理ユニットの下に示される矩形がタスクあるいはワークロードの一つ一つの処理である。同図で示した時刻t0付近では、各処理ユニット22a、22b、22c、22dが、それぞれにおいて最も高い優先順位を有するタスクの処理、すなわちワークロードP、ワークロードA、ワークロードG、ワークロードGの処理をそれぞれ行っている。
【0058】
例えば時刻t1で、処理ユニット22c、22dで処理されていたワークロードGのタスクがデバイスアクセスのための待機状態となると、それらの処理ユニット22c、22dは次に優先度の高いタスクであるワークロードPを選択しようとする。ところがワークロードPのタスクを処理できる処理ユニットの最大数は「2」であったため、処理ユニット22cがワークロードPを選択した場合、処理ユニット22dはさらに次の優先度を有するワークロードMを選択する。そしてデイバイスアクセスのための待機が時間Tで解消すると、処理ユニット22c、22dは、それぞれのワークロードP、ワークロードMを休止できるタイミングで、再びワークロードGを選択して実行を開始する(時刻t2)。
【0059】
このように、アプリケーションにおいて指定された優先度および割り当て可能な処理ユニットの最大数、あるいは要求する処理ユニットの数などの割り当て条件に従い、各処理ユニットで動作するカーネルによって自律的にタスクの処理が進捗する。このとき各処理ユニットにおいて優先度の低いタスクは休止に好適なタイミングで優先度の高いタスクに処理時間を譲るため、コンテキストスイッチに要する時間を最小限に、優先度に従った処理の切り替えが可能となる。また処理ユニットごとに優先度を指定可能とすることで、処理ユニットへのタスクの割り振りが容易になる。なお図9、10はあくまで例示であり、割り当て条件は優先度のみとしたり、その他のパラメータを指定してもよい。
【0060】
本実施の形態では、このような自律的なユーザレベルスケジューラを導入した情報処理装置において、システム処理をユーザレベルスケジューリングに組み込む。具体的には、システム処理を仮想ワークロードとして発生させることにより、ユーザレベルスケジューラのスケジューリングにシステム処理を組み込む。この態様は、実施の形態1の図1および図4で示した情報処理装置10と同様の構成によって実現できる。ただし本態様においてタスク割り当て部26は、タスクを直接処理ユニットに割り当てるのでなく、上述のとおり、ワークロードを処理ユニットグループに割り当て、当該処理ユニットグループに対応するメインメモリ44内の領域に処理に必要なデータや割り当て条件を格納する。
【0061】
図11は本実施の形態においてシステム処理を仮想ワークロードとして実行する際の処理手順を模式的に示している。図6と同様、白い矩形はアプリケーションのタスク(ワークロード)、斜線網掛けの矩形はシステム処理のタスク(仮想ワークロード)である。同図において処理ユニット22a、22b、22c、22dの4つの処理ユニットが処理ユニットグループを形成し、それぞれが、割り当てられたアプリケーションのワークロードを構成するタスクを処理している。この状況において、まずシステムレベル管理部24のシステム処理要求部27がシステム処理要求をタスク割り当て部26に行う(S40)。タスク割り当て部26は、当該処理要求をあらかじめ定めた規則により仮想ワークロードに変換し、メインメモリ44の該当領域に格納する(S42)。
【0062】
その後、処理ユニットグループのうち前のタスク処理を完了、または休止させた処理ユニット、図11の例では処理ユニット22dが、メインメモリ44からシステム処理の仮想ワークロードを選択して自らのローカルメモリにロードする(S44)。仮想ワークロードの処理が可能となった時点で処理ユニット22dはその旨の通知をシステムレベル管理部24に送信する(S46)。
【0063】
システムレベル管理部24の実行監視部28は、S40の処理要求からの経過時間を測定し、実行期限までにS46の通知を受けた場合、実行制御部30は処理ユニット22dにシステム処理を開始させる(S50)。実行条件違反があった場合は、実施の形態1と同様、処理ユニット22a、22b、22c、22dのいずれか、または全てのタスク処理を休止させ、システム処理を実行させてよい。
【0064】
次にタスク割り当て部26が、システムレベル管理部24から要求されたシステム処理を仮想ワークロードに変換する手法について説明する。図12はタスク割り当て部26が要求されたシステム処理を仮想ワークロードに変換する際に参照する変換テーブルの例である。変換テーブル100はあらかじめ設定しておきメインメモリ44などに格納しておく。変換テーブル100は、グループ欄102、種別欄104、リソース割り当て単位欄108、およびユーザパラメータ欄110を含む。
【0065】
タスク割り当て部26は、実施の形態1の図7に示したシステム処理に係る情報と同様の情報をシステム処理要求部27から受け取る。この情報のうち、種別識別子52に基づき図12の種別欄104から、要求されたシステム処理の種別を検索する。同図に示すように、各種別はグループ欄102に示したグループにまとめられ、それぞれのグループに対し、ワークロードとして必要なパラメータを設定する。
【0066】
リソース割り当て単位欄108には、各グループを一つの単位として処理ユニットなどのリソースを割り当てるか、種別ごとに割り当てるかを設定する。図12の例で「グループ」と記載されている場合は、1つのグループでリソースを共有する。「種別ごと」と記載されている場合は、種別欄104に記載した種別ごとにリソースを割り当てる。ユーザパラメータ欄110には、アプリケーションごとに設定が可能なパラメータ、例えば当該システム処理を割り当てる処理ユニットや、割り当てることのできる最大の処理ユニット数、あるいは処理ユニットごとの優先順位を定めた優先度テーブルの識別子などを設定する。優先度テーブルは識別子と対応づけてあらかじめ準備しておく。タスク割り当て部26は、当該設定に基づき、図9の優先度欄94、最大処理ユニット数欄96に示すような数値を最終決定する。
【0067】
次にこれまで述べた構成による本実施の形態の動作を説明する。図13は自律的なユーザレベルスケジューラを導入した際にシステム処理を実行する処理手順を示すフローチャートである。まずタスク割り当て部26は、アプリケーションの起動時や、システム処理をユーザレベルスケジューリングに則り行う態様が必要となった際、アプリケーションのワークロードと同様に、初期状態の仮想ワークロードをメインメモリ44に登録しておく(S60)。初期状態の仮想ワークロードでは、要求する処理ユニットの数を初期値0としておく。
【0068】
このときアプリケーションのタスクは自律的なユーザレベルスケジューリングによって各処理ユニットで処理されているとする。このような状況において、OSが提供するライブラリが呼び出されるなどした際に、システムレベル管理部24のシステム処理要求部27は、当該ライブラリに対応するシステム処理を発生させ、タスク割り当て部26に処理要求を行う(S62)。
【0069】
要求を受けたタスク割り当て部26は、要求に含まれる情報に従い、S60において登録しておいた初期状態の仮想ワークロードを修正する(S64)。例えばシステム処理の処理IDに基づき、あらかじめ設定した当該処理に要する処理ユニットの数を特定し、仮想ワークロードにおける初期値0の設定を修正する。上述した優先度なども決定できる。各処理ユニットで動作するカーネルは、仮想ワークロードにおいて、要求する処理ユニットの設定数が1以上に変更されたことを受けて、仮想ワークロードの選択を開始する。これによりにより、実質、仮想ワークロードが要求数の処理ユニットに割り当てられる(S66)。
【0070】
すると仮想ワークロードを選択した処理ユニットは、あらかじめ準備しておいた仮想ワークロード用のプログラムを起動し、処理IDに基づきメインメモリ44からプログラムをロードしたうえ、システム処理を実行する(S68)。
【0071】
図14〜16は本実施の形態で実現できる、6つの処理ユニット22a、22b、22c、22d、22e、22fにおける処理の推移の例を示している。図の横方向が時間軸であり、ある単位処理時間中にどのタスクが処理されたかを処理ユニットごとに矩形で示している。同図において「P」、「A」、「G」が記載されたタスクは、上述の物理演算のワークロードP、人工知能のワークロードA、グラフィックス処理のワークロードGに対応するアプリケーションのタスクである。同図の例は、常に「A」、「P」、「G」の順で処理が進捗するとする。
【0072】
このようにアプリケーションのタスク処理がなされている環境において、時刻T0でノイズ除去、システムBGM、AVチャット、レコーディング、のシステム処理が要求されたとする。図14〜16ではシステム処理を太線の矩形で示し、それぞれの処理を、「ノイズ除去」、「BGM」、「AVチャット」、「レコーディング」と記載して区別している。上述したように、図12に示した変換テーブル100によって、それぞれの処理が属するグループごとに割り当てる処理ユニットなどを設定することができる。
【0073】
図14は各システム処理をどの処理ユニットに割り当ててもよい、との設定がなされている場合の例である。割り当て可能な処理ユニットは、例えばビットマスクを利用して変換テーブルに対しユーザが指定できるようにする。同図の場合、各システム処理は、処理ユニット22c、22d、22e、22fが時刻T0でそれぞれ開始している。その間に、アプリケーションのタスクのうち「A」は、2つの処理ユニット22a、22bで処理されているため、このようにシステム処理が実行されても、アプリケーションの後続のタスクである「P」、「G」は大きく遅延することなく、最大限の数の処理ユニットを利用して処理を進捗させることができる。
【0074】
図15は、システム処理は処理ユニット22aにのみ割り当てるという設定がなされている場合の例である。この例では、時刻T0でアプリケーションのタスクのうち「A」を開始しているが、処理ユニット22aにおいてはコンテキストスイッチに好適なタイミングでシステム処理「ノイズ除去」に処理が切り替わり、その後のシステム処理が処理ユニット22aで優先度などに従い進捗する。この場合、時刻T0からシステム処理へ切り替わるまでの時間、およびシステム処理が終了した後の時間は、全ての処理ユニットをアプリケーションのタスクに割り当てることが可能である。
【0075】
図16は、システム処理をどの処理ユニットに割り当ててもよいが、ユーティリティや高負荷サービスのグループに属するシステム処理の優先度を比較的低くした場合の例である。この場合、優先度が高い「ノイズ除去」、「BGM」の処理は時刻T0で処理ユニット22c、22dによって開始されるが、「レコーディング」、「AVチャット」の処理は、アプリケーションのタスク「G」が終了した後に開始されている。
【0076】
このように、システム処理をワークロードに変換する際に割り当てる処理ユニットなどの指定を可能としておくことにより、アプリケーションごとに最適な態様で処理を進捗させることができる。
【0077】
以上述べた本実施の形態によれば、プログラムを分割して並列処理する際、処理ユニット自らが分割後のタスクを優先度などに基づき選択して実行する自律的なユーザレベルスケジューラを導入した環境において、システム処理を仮想ワークロードに変換する。これにより、本来はユーザレベルスケジューリングの対象外であったシステム処理を、ユーザレベルのタスクと同様に扱うことが可能となる。結果として、優先度ベースで行われている本来のスケジューリングの動作を阻害することなくシステム処理も進捗させることができる。
【0078】
またアプリケーションにおいて、各システム処理の優先度や割り当てる処理ユニットを指定できるようにし、仮想ワークロードへ変換する際に当該指定に従った設定を行う。これによりアプリケーションごとにシステム処理を実行するタイミングや実行する処理ユニットを容易に変化させることができ、最適な処理態様を実現できる。さらに、アプリケーションのタスクと同様にシステム処理を扱えるため、アプリケーションの作成は従来と同様に行える。また実施の形態1と同様、システム処理の負荷を分散させ最大限の処理ユニットを稼働させることによって処理の高速化を実現できる。
【0079】
以上、本発明を実施の形態をもとに説明した。上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【符号の説明】
【0080】
10 情報処理装置、 22a 処理ユニット、 24 システムレベル管理部、 25 ユーザレベル管理部、 26 タスク割り当て部、 27 システム処理要求部、 28 実行監視部、 30 実行制御部、 32 タスク処理部、 34 通信部、 36 ローカルメモリ、 44 メインメモリ。
【技術分野】
【0001】
本発明は情報処理技術に関し、特に複数の計算資源に処理を分散させてコンピュータプログラムを実行するための技術に関する。
【背景技術】
【0002】
コンピュータゲームやウェブ検索ソフトをはじめとするソフトウェアの高機能化は、ハードウェアに対して大きな処理負荷をかけるようになってきている。このような状況に対処するためには、演算処理自体の高速化が必要であることはもちろんであるが、複数のプロセッサを導入し、タスク処理を効率的に行うことも重要である。このとき、いかに高い稼働率で個々のプロセッサを動作させるかが、処理の高速化に対し重要な鍵となる。
【0003】
複数のプロセッサにタスク処理を並列に実行させるためには、一般的にはOS(オペレーティングシステム)が、処理のタスクへの分割、各プロセッサへのタスクの割り当て、処理の切り替え、各プロセッサからメインメモリや入出力装置へのアクセスの制御などを行う場合が多い。一方で、OS上で動作するユーザレベルのタスクがスケジューリングなどのタスク処理の管理を行うユーザレベルスケジューリングの手法も提案されている。例えば、タスクをメインメモリのキューに格納しておき、タスクを実行するプロセッサが自ら当該キューからタスクを選択して実行する技術が提案されている(例えば特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2007−52511号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上述のように、複数のプロセッサがタスク処理を並列に実行することによってプログラムの処理速度を確保する技術は一般的なものになっている。一方で、高度な処理を高速に行うことに対するユーザのニーズは留まるところを知らず、限られたリソースを最大限利用するために処理を効率化できる技術が望まれている。
【0006】
本発明はこのような課題に鑑みてなされたものであり、その目的は、複数のプロセッサが必要な処理を効率的に実行することのできる技術を提供することにある。
【課題を解決するための手段】
【0007】
本発明のある態様は情報処理装置に関する。この情報処理装置は、プログラムのタスクを処理するタスク処理部と、実行中のプログラムの外部プログラムが呼び出された場合に、当該外部プログラムのタスクに実行条件を付加して処理要求を発行する処理要求部と、処理要求部が処理要求を発行した外部プログラムのタスクをタスク処理部におけるタスク処理のスケジュール制御に組み入れるタスク割り当て部と、タスク処理部における外部プログラムのタスクの処理において、処理要求部が付加した実行条件に対する違反が生じたか否かを判定する実行監視部と、実行監視部が実行条件違反が生じたと判定した際に、タスク処理部の処理を外部プログラムのタスクに切り替える実行制御部と、を備えたことを特徴とする。
【0008】
ここで「外部プログラム」とは、一般的にはOSが提供する機能を実現するためのライブラリ、カーネルなどであるが、呼び出し元のプログラム以外のプログラムであればその種別や処理内容は限定されない。
【0009】
本発明の別の態様は情報処理方法に関する。この情報処理方法は、実行すべきプログラムのタスクをプロセッサにおいて処理するステップと、実行中のプログラム以外のシステムレベルのプログラムが呼び出された場合、実行中のプログラムのタスクについて行っていたユーザレベルのスケジュール制御に、当該システムレベルのプログラムのタスクを組み入れるステップと、スケジュール制御に組み入れられたシステムレベルのプログラムのタスクをプロセッサにおいて処理するステップと、を含むことを特徴とする。
【0010】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0011】
本発明によれば、複数のプロセッサによるタスクの並列処理を容易に効率化することができる。
【図面の簡単な説明】
【0012】
【図1】実施の形態1を適用できる情報処理装置の構成例を示す図である。
【図2】一つの処理ユニットにのみシステム処理を行わせた場合の、処理ユニットにおけるタスク処理の推移を概念的に示す図である。
【図3】実施の形態1における、ユーザレベルスケジューラによってシステム処理をスケジューリングする場合の一態様として実現される、各処理ユニットにおけるタスク処理の推移の例を概念的に示す図である。
【図4】実施の形態1における処理ユニットの構成をより詳細に示す図である。
【図5】実施の形態1におけるシステム処理の発生から開始までの全体的な流れを示すフローチャートである。
【図6】実施の形態1においてシステム処理を実行するための処理手順を模式的に示す図である。
【図7】実施の形態1においてシステム処理要求部がタスク割り当て部にシステム処理要求を行う際に通知する、システム処理に係る情報のデータ構造例を示す図である。
【図8】実施の形態2で適用する自律的なユーザレベルスケジューリングの概要を説明するための図である。
【図9】実施の形態2においてワークロードのそれぞれに設定された割り当て条件の例を示す図である。
【図10】実施の形態2において図9に示した割り当て条件を設定した際、処理ユニットが各ワークロードを選択し、処理する過程の例を模式的に示す図である。
【図11】実施の形態2においてシステム処理を仮想ワークロードとして実行する際の処理手順を模式的に示す図である。
【図12】実施の形態2においてタスク割り当て部が要求されたシステム処理を仮想ワークロードに変換する際に参照する変換テーブルの例を示す図である。
【図13】実施の形態2において自律的なユーザレベルスケジューラを導入した際にシステム処理を実行する処理手順を示すフローチャートである。
【図14】実施の形態2において実現できる、6つの処理ユニットにおける処理の推移の例を示す図である。
【図15】実施の形態2において実現できる、6つの処理ユニットにおける処理の推移の例を示す図である。
【図16】実施の形態2において実現できる、6つの処理ユニットにおける処理の推移の例を示す図である。
【発明を実施するための形態】
【0013】
実施の形態1
図1は、本実施の形態を適用できる情報処理装置の構成例を示している。情報処理装置10は、マイクロプロセッサユニット18、入出力装置(I/O)42、メインメモリ44、補助記憶装置(HDD)46を備え、それぞれがバス48を介して接続される。マイクロプロセッサユニット18は、複数の処理ユニット22a、22b、・・・、22nがそれぞれ内部バス19を介して接続する構成を有する。
【0014】
処理ユニット22a、22b、・・・、22nはいずれも、演算装置、ローカルメモリなどを含む処理ユニットである。処理ユニット22a、22b、・・・、22nは、OSや起動されたアプリケーションプログラム(以後、単に「アプリケーション」と呼ぶ)のタスクを処理する。入出力装置(I/O)42、メインメモリ44、補助記憶装置(HDD)46は、一般的な情報処理装置に設けられる入出力装置、メモリ、補助記憶装置で構成してよい。
【0015】
図1に示したような構成の情報処理装置10においては、処理ユニット22a、22b、・・・、22nの少なくともいずれかが、入出力装置42やメインメモリ44などのデバイスへのアクセスを要する処理など、システムレベルの処理を行う必要がある。以後、このような処理を「システム処理」と呼ぶ。これに対しアプリケーションなどユーザレベルのタスク処理はユーザ処理、と捉えることができる。システム処理を実行しない処理ユニットは、主にアプリケーションなどユーザレベルのタスクを並列に処理する。
【0016】
このような場合、アプリケーションを高速処理するためには、ある処理ユニットにシステム処理のみを行わせるのでなく、処理の空き時間にアプリケーションのタスクも処理させることが望ましい。図2は処理ユニット22aをシステム処理を行う処理ユニットとした場合の、処理ユニット22a、22b、・・・、22nにおけるタスク処理の推移を概念的に示している。図中、横軸が時間であり、矩形で示された、各処理ユニットにおいて処理されるタスクのうち、白い矩形がアプリケーションのタスク、斜線網掛けの矩形がシステム処理のタスクとする。
【0017】
処理ユニット22aではシステム処理のタスク2、3、5が処理され、その空き時間にアプリケーションのタスク4を処理している。一方、その他の処理ユニット22b、・・・、22nでは常時、アプリケーションのタスク6を処理している。図では省略しているが、タスク6は当然、処理ユニットごとに処理が行われ、同じ処理ユニットでも適宜コンテキストスイッチを行っているものとする。
【0018】
一般的にアプリケーションのタスクと比較して、システム処理は高い優先度を必要とする場合が多い。そのため図2に示したような態様において、処理ユニット22aがアプリケーションのタスク4を処理している途中でシステム処理のタスク5が発生すると、ユーザレベルのスケジューリングに関係なく、アプリケーションのタスク4は当該処理ユニット22aをシステム処理のタスク5に明け渡さざるを得なくなる。
【0019】
アプリケーションを作成する段階で、システム処理がどのように発生するかを予測することは困難であるため、並列処理用にアプリケーションを作成したとしても、処理ユニット22aに割り当てるタスク4をどのように切り出すかは難しい問題である。例えば、処理ユニット22aがアプリケーションのタスクを処理できる時間が予測できないため、同じアプリケーションのタスク6を処理している処理ユニット22b、・・・、22nと通信の必要が発生しても、当該通信処理を好適なタイミングで実行できる保障がない。またアプリケーションのタスク4を突然休止せざるを得ないため、保存すべきデータが多くなりコンテキストスイッチに要する時間7が長くなる。
【0020】
本実施の形態では、このような状況を回避しつつ処理の高速化を実現するため、システム処理の処理スケジューリングをユーザレベルスケジューラに行わせることにより、ユーザレベルの処理スケジュールに組み入れる。図3はユーザレベルスケジューラによってシステム処理をスケジューリングする場合の一態様として実現される、処理ユニット22a、22b、・・・、22nにおけるタスク処理の推移の例を概念的に示している。図の示し方は図2と同様である。
【0021】
同図に示すように、全ての処理ユニット22a、22b、・・・、22nは、基本的にアプリケーションのタスク8を実行する。そしてシステム処理のタスク2、3、5が発生したら、導入されているユーザレベルスケジューリングの手順に基づき、いずれかの処理ユニットが当該処理を実行するようにスケジューリングする。例えば優先度の低いアプリケーションのタスクを処理している処理ユニットや、他の処理ユニットが処理中のタスクと関連性の低いタスクを処理している処理ユニットなどを選択してシステム処理を割り当てる。このときシステム処理を割り当てられた処理ユニットは、自らが実行中のアプリケーションのタスクをコンテキストスイッチの観点で好適なタイミングで休止するか処理中のタスクが終了した時点でシステム処理を開始する。
【0022】
このようにすることで、システム処理の負荷を分散させることができるとともに、アプリケーションのタスクが突然、システム処理のタスクによって休止させられるという状況を回避でき、システム処理とアプリケーションのタスクの双方を可能な限り進捗させることができる。このとき、上述した、一つの処理ユニットのみ、アプリケーションに必要な通信を行いづらい、といった状況を回避できるため、全ての処理ユニットを利用して並列に処理を行うプログラムを作成すればよく、プログラム作成が容易である。またコンテキストスイッチに要する時間を削減することができ、全体として処理速度が向上する。
【0023】
図4は処理ユニット22aの構成をより詳細に示している。情報処理装置10は図1に示すように処理ユニット22a以外の処理ユニットを有していてよく、その数は限定しない。
【0024】
処理ユニット22aは、システム処理のタスクを管理するシステムレベル管理部24、アプリケーションのタスクなどユーザレベルのタスクを管理するユーザレベル管理部25を含む。システムレベル管理部24は、処理中のタスクにおいてシステム系のプログラムが呼び出された場合などシステム処理の必要が生じた際、システム処理要求をユーザレベル管理部25に発行するシステム処理要求部27、処理ユニットにおけるシステム処理の実行を監視する実行監視部28、および、システム処理の実行条件に違反した際、処理ユニット22a、22bなどのいずれかにシステム処理を強制的に実行させる実行制御部30を含む。ユーザレベル管理部25は、主としてアプリケーションなどユーザレベルのプログラムをタスクに分割し、各処理ユニットに割り当てるタスク割り当て部26を含む。
【0025】
処理ユニット22aはさらに、割り当てられたタスクをスケジュールに則り処理するタスク処理部32、システム処理が開始できる状態となった際、システムレベル管理部24に通知する通信部34、タスクの処理に必要なデータをメインメモリ44から読み出し格納するローカルメモリ36を含む。なおその他の処理ユニット22b、・・・、22nは処理ユニット22aと同様の構成としてもよいし、例えばタスク処理部32、通信部34、およびローカルメモリ36など、一部の機能ブロックのみ有する構成としてもよい。この場合、システムレベル管理部24およびユーザレベル管理部25を有する処理ユニットは、それらを持たない他の処理ユニットのタスク処理も管理してよい。
【0026】
図4において、さまざまな処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、CPU(Central Processing Unit)、メモリ、その他のLSIで構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。例えばユーザレベル管理部25はタスク処理部32で処理するタスクのひとつであってもよく、この場合、当該機能ブロックはタスク処理部32の一部と考えることもできる。
【0027】
システムレベル管理部24のシステム処理要求部27は、処理ユニット22a、22bなどにおいて処理されているタスクによってOSが提供するライブラリが呼び出された際などに、当該ライブラリに対応するシステム処理を発生させ、当該システム処理に係る情報をユーザレベル管理部25のタスク割り当て部26に通知することによりシステム処理の実行を要求する。
【0028】
ここでタスク割り当て部26に通知する、システム処理に係る情報には、当該システム処理を実行する条件を含ませる。実行条件としては例えば、システム処理が開始されるまでの許容時間である実行期限や、実行する処理ユニットなどが挙げられる。実行条件を違反した場合、例えば実行期限を超過してもシステム処理が実行されない場合は、後述するように、いずれかの処理ユニットにおけるアプリケーションのタスクを強制的に休止させてシステム処理を実行させる。実行条件の情報や処理要求発行タイミングなどの情報はシステムレベル管理部24内で共有される。
【0029】
実行監視部28は、処理ユニット22a、22bなどのいずれかでシステム処理が実行期限内に実行されたかなど、実行条件が守られたか否かを監視する。実行期限が実行条件として指定されている場合、例えば実行監視部28には図示しないタイマを設け、システム処理要求部27がシステム処理の実行要求を発行させてからの経過時間を測定する。そして通信部34からのシステム処理の受け入れ可能の通知が、タイマで測定した実行期限内になされなかった場合は、システム処理の実行条件に違反したと判定する。
【0030】
実行制御部30は、実行監視部28によってシステム処理の実行条件違反が判定された場合に、処理ユニット22a、22bなどのいずれか、または全ての処理ユニット22a、22b、・・・、22nにおいて処理されているタスクを休止させ、当該システム処理を実行させる。この処理は、OSのカーネルなどによる一般的なプリエンプション処理と同様に実現することができる。
【0031】
実行制御部30はさらに、システム処理を割り当てられた処理ユニットが、自らが処理していたアプリケーションのタスクを休止し、レジスタ値などの保存を行ったことを検知すると、当該処理ユニットにシステム処理を実行させる。
【0032】
ユーザレベル管理部25のタスク割り当て部26は、ユーザが起動したアプリケーションのタスクを処理ユニット22a、22bなどに割り当てる。新たなタスクが発生すると、タスク割り当て部26は、メインメモリ44などに設けたタスクキューに、発生したタスクを順次格納していく。この場合、処理ユニット22a、22bなどは、処理中のタスクを休止、終了した際などに、当該タスクキューからタスクを順次取り出して処理する。あるいはタスク割り当て部26は、タスクの優先度や必要な処理ユニットの数、処理時間などに基づき、処理ユニット22a、22bなどで既にスケジューリングされているタスクとの調整を行ったうえで、適当なタイミングで新たなタスクが処理されるように処理ユニット22a、22bなどにタスクを割り振る。このような処理は、マルチタスク対応のOSやユーザレベルOSなどで一般的に用いられている手法を適用することができる。
【0033】
タスク割り当て部26はさらに、システム処理要求部27からシステム処理の実行要求を受けたら、当該システム処理もいずれかの処理ユニットに割り当てる。このとき、上述のタスクキューに、他のタスクとともにシステム処理の情報を格納する。あるいは、システム処理要求部27から受け付けた情報には当該システム処理の実行条件が含まれているため、タスク割り当て部26は、当該実行条件を満たすようにスケジューリングを行う。
【0034】
タスク処理部32は、タスク割り当て部26が割り当てたアプリケーションおよびシステム処理のタスクをスケジュールに則り順次処理する。プログラムなどタスクの処理に必要なデータはメインメモリ44からローカルメモリ36に読み出しておく。またタスクを切り替える際は、それまで処理していたタスクのコンテキストをメインメモリ44に保存し、次のタスクのコンテキストをリストアするコンテキストスイッチを行う。
【0035】
タスク割り当て部26がシステム処理を割り当てた際は、そのスケジュールに従い、タスク処理部32がアプリケーションのタスクのコンテキストを保存したうえで、通信部34が、システムレベル管理部24にその旨を通知する。そしてシステムレベル管理部24の実行制御部30の制御のもと、システム処理を実行する。また上述のように実行条件に違反した場合は、その時点で実行制御部30の制御のもと、タスク処理部32は処理中のアプリケーションのタスクからシステム処理へコンテキストスイッチを行う。
【0036】
次にこれまで述べた構成による本実施の形態の動作について説明する。図5は本実施の形態におけるシステム処理の発生から開始までの全体的な流れを示すフローチャートである。まず前提として、処理ユニット22a、22b、・・・、22nでは、ユーザが起動したアプリケーションのタスクなどがその時点でのスケジュールに則り処理されているとする。このような状況において処理中のタスクが、OSが提供するライブラリを呼び出すなどした際に、システムレベル管理部24のシステム処理要求部27は、当該ライブラリに対応するシステム処理を発生させ、ユーザレベル管理部25のタスク割り当て部26に処理要求を行う(S10)。
【0037】
要求を受けたタスク割り当て部26が、当該システム処理の割り当てをいずれの処理ユニットにも行わなかったり、割り当てたにも関わらず処理ユニットが何らかの理由でアプリケーションのタスクを休止しなかったりした場合などに、実行監視部28は実行条件の違反を判定する(S12のY)。そして実行制御部30は、処理ユニット22a、22b、・・・、22nのいずれかまたは全ての処理を休止させ、システム処理用に使用するためのプリエンプション処理を行う(S14)。このとき全ての処理ユニットを休止させた場合は、そのうち少なくとも一つの処理ユニットを使用してシステム処理を実行すればよい。また、複数の処理ユニット22a、22b、・・・、22nのいずれか少なくとも一つを休止させ、当該処理ユニットによりシステム処理を行う場合、休止させる処理ユニットはあらかじめ設定した優先度などの規則に従って選択してもよいし、任意に選択してもよい。
【0038】
一方、タスク割り当て部26がシステム処理の割り当てを行い、割り当てられた処理ユニットが当該処理のためにコンテキストスイッチを行った場合、実行監視部28は実行条件の違反がないと判定する(S12のN)。そして処理ユニットのタスク処理部32はシステム処理を開始する(S16)。S14でプリエンプション処理を行った場合も同様に、システム処理を開始する(S16)。
【0039】
図6はシステム処理を実行するための処理手順を模式的に示している。このときシステム処理には実行期限が設定されているとする。図2と同様、横方向が時間軸であり、白い矩形はアプリケーションのタスク、斜線網掛けの矩形はシステム処理のタスクである。同図において6つの処理ユニット22a、22b、・・・、22fがそれぞれアプリケーションのタスクを処理している。この状況において、まず図5のS10に示すように、システムレベル管理部24のシステム処理要求部27がシステム処理要求をタスク割り当て部26に行う(S20)。タスク割り当て部26は、処理ユニット22dに当該処理を割り当てる(S22)。この処理ユニットの選択は、上述のように、処理しているタスクの優先度や他の処理ユニットが処理中のタスクとの関連性などに基づいて行う。またはシステム処理の情報をタスクキューに格納する。この場合、処理中のタスクを終了した処理ユニットが当該タスクキューからシステム処理の情報を読み出すことにより、実質的な割り当てが行われる。
【0040】
システム処理を割り当てられた処理ユニット22dは、アプリケーションのタスクを好適なタイミングで休止し、レジスタ値などをメインメモリ44などに保存したうえ、システム処理が受け入れ可能である旨の通知をシステムレベル管理部24に送信する(S24)。システムレベル管理部24の実行監視部28は、S20の処理要求からの経過時間を測定し、実行期限までにS24の通知を受けた場合、実行制御部30は処理ユニット22dにシステム処理を開始させる(S28)。
【0041】
ここで何らかの原因でS22のタスク割り当て処理がなされなかった場合、あるいは、処理ユニット22dでシステム処理の受け入れができない場合など、S24の受け入れ可能通知が実行期限までになされないと、実行監視部28は実行条件違反と判定し、図5のS14におけるプリエンプション処理が実行制御部30により実行される。以上の処理をシステム処理が発生するたびに繰り返すことにより、図3に示したように、全ての処理ユニット22a、22b、・・・、22nをアプリケーションのために使用しつつ、必要なタイミングでシステム処理を実行する態様を実現できる。
【0042】
図7はシステム処理要求部27がタスク割り当て部26にシステム処理要求を行う際に通知する、システム処理に係る情報のデータ構造例を示している。システム処理データ50は、種別識別子52、処理ID54、実行期限56、周期58、実行時間60を含む。種別識別子52は、オーディオデコーダ、エコーキャンセラなど、システム処理の種別を識別するための識別情報であり、種別と識別子の対応はあらかじめ定めてメインメモリ44などに格納しておく。タスク割り当て部26は、要求されたシステム処理の種別識別子52に基づき当該処理の種別を特定し、それぞれの種別に対しあらかじめ定めた優先度を特定したうえ、スケジューリングに反映させる。
【0043】
処理ID54は、要求するシステム処理ごとに一意に設定する識別情報である。処理ユニットがシステム処理を行う際、当該処理IDに基づき、システム処理のプログラムをメインメモリ44から読み出す。また、システム処理を割り当てられた処理ユニットの通信部34が、当該システム処理を実行する準備が整ったことをシステムレベル管理部24に通知する際にも、処理IDを用いて他のシステム処理に係る通知と区別する。実行期限56は例えばシステム処理の依頼発行から実行開始までの許容時間である。上述のとおりこの時間を過ぎても処理ユニットからシステム処理の受け入れ可能通知がなされない場合、実行制御部30によるプリエンプション処理が行われる。複数のシステム処理が発生した場合、タスク割り当て部26は当該実行期限56を利用して、システム処理間での割り当て優先順位を定めてもよい。例えば最初に実行期限が到来するシステム処理を優先して処理ユニットに割り当てる。
【0044】
周期58はシステム処理の動作周期である。複数のシステム処理が発生した場合、タスク割り当て部26は当該周期58に基づき、例えばレートモノトニックスケジューリングなどの手法に則り、処理ユニットへの割り当てを定めてもよい。実行時間60はシステム処理の実行時間である。複数のシステム処理が発生した場合、タスク割り当て部26は当該実行時間60に基づき処理ユニットへの割り当てを定めてもよい。また場合によっては、システム処理の実行が実行時間60を経過したら、処理ユニットにおける当該システム処理を強制的に打ち切るようにしてもよい。
【0045】
これまでの説明では、システムレベル管理部24がシステム処理を発生させると、専らユーザレベル管理部25のタスク割り当て部26に処理要求を行うことにより、ユーザレベルのスケジューリングにシステム処理を組み入れる態様を実現した。一方で、同じ情報処理装置10を用いて、システム処理をユーザレベルのスケジューリングに組み入れる態様と、図2について説明したようにシステム処理がユーザレベルスケジューリングと独立に実行される態様とを、アプリケーションなどのプログラムによって選択できるようにしてもよい。この場合、システムレベル管理部24は、システム処理が発生した時点で、いずれの態様が指定されているかを実行中のアプリケーションのプログラムから判断する。
【0046】
そしてシステム処理をユーザレベルのスケジューリングに組み入れる態様が指定されていれば、システムレベル管理部24は、発生したシステム処理の要求をタスク割り当て部26に対して発行する。システム処理をユーザレベルスケジューリングと独立に実行する態様が指定されていれば、システムレベル管理部24は、タスク割り当て部26に処理を要求せず、処理ユニットがユーザレベルのタスクを処理している場合は処理時間を横取りしてシステム処理を実行させる。このようにすることで、アプリケーションを作成する際に、必要となるシステム処理の種類や実行頻度などに応じて最適な態様を選択することができる。
【0047】
以上述べた本実施の形態によれば、アプリケーションの処理の途中で発生するシステム処理をユーザレベルのスケジューリング処理に組み込む。これにより、ユーザレベルのスケジューリングポリシーに則りシステム処理を実行できる機会が生まれ、アプリケーションなどユーザレベルのタスクが予期しないタイミングで休止させられる可能性が低くなる。また、システム処理の負荷が複数の処理ユニットに分散し易いため、システム管理部によるプリエンプションをせずに実行期限までにシステム処理を実行できる可能性が高くなる。これにより、システム処理を割り当てられた処理ユニットは、自らが処理していたアプリケーションのタスクを、好適なタイミングで休止させることができ、システム処理を開始させるためのコンテキストスイッチによるオーバーヘッドを削減することができる。また、アプリケーションのタスク処理に偏りが発生しにくいため、特定の処理ユニットのみ処理ユニット間通信がしにくい、といった状況が回避でき、プログラムの並列化が容易である。
【0048】
また、処理ユニットによるシステム処理が実行期限を超過するなど実行条件に違反した場合、主処理ユニットは処理ユニットの処理を強制的にシステム処理に切り替える。これにより、システム処理を確実に実行することができ、処理割り当てをユーザレベルのスケジューリングに則り行うことによってシステム処理が遅延するなどの悪影響を排除することができる。結果として、システム処理を確実に実行しながら、アプリケーションのタスクも高速に処理することが可能となる。
【0049】
実施の形態2
実施の形態1は、優先度や実行時間などに基づき、ユーザレベル管理部25のタスク割り当て部26が各タスクを適宜処理ユニットに割り当てていくことによりスケジュールを生成していく態様であった。本実施の形態では、各処理ユニットが自律的にタスクを選択して実行する自律的なユーザレベルスケジューリングの機構において、実施の形態1の如く、システム処理をスケジュールに則った処理ユニットで実行させる。
【0050】
このユーザレベルスケジューリングの例は、例えば特開2007−52511号公報などにおいて示されている。ここではその概要について説明する。図8は自律的なユーザレベルスケジューリングの概要を説明するための図である。なお以後の説明において実施の形態1と同じ機能ブロックを用いることができる場合、当該機能ブロックに実施の形態1で示したのと同じ符号を付す。また実施の形態1と同様の処理手順については適宜その説明を省略する。
【0051】
図8において、処理ユニット22aは、アプリケーションなどユーザレベルのタスクを生成すると、それを情報処理装置10に含まれる処理ユニットのグループのいずれかに割り当てる。具体的には、あらかじめ定めておいた一つまたは複数の処理ユニットのグループに対応するメインメモリ44内の領域(タスクキュー)に、割り当てたタスクを実行するためのデータを格納する。図8の例では、4つの処理ユニット22a、22b、22c、22dが処理ユニットのグループを構成しているとし、当該グループに割り当てたタスク80がメインメモリ44の対応する領域に格納されている。
【0052】
そして、処理ユニット22a、22b、22c、22dの各々のローカルメモリには、ユーザレベルスケジューリングを実行するカーネルのプログラムを格納しておく。処理ユニット22a、22b、22c、22dは、前のアプリケーションのタスクが完了したり休止状態となった場合、あるいは所定の周期が到来すると、カーネルの処理を開始し、メインメモリ44に格納されたタスクから1つ選択して、当該タスクの実行に必要なプログラムなどのデータを自らのローカルメモリにコピーすることによって当該タスクの処理を開始する。
【0053】
ここでメインメモリ44に格納するタスクは、1つの処理ユニットにおいて1回の処理で実行される最小単位のタスクでもよいし、それらを所定の処理単位でまとめたタスクセット、あるいはジョブチェインの状態でもよい。以後、このように最小単位のタスクを1つ以上まとめた単位をワークロードと呼ぶ。1つの巨視的な処理、すなわち目的を達成するためのタスクの集合体をワークロードとして形成すれば、当該ワークロード単位で処理ユニットに割り当てを行うことにより、効率的な処理が可能となる。例えば、ワークロードの実行に複数の処理ユニットが必要な場合は、基本的にはその数の処理ユニットを同時に確保して実行させる。このため各ワークロードには、要求する処理ユニットの数、各処理ユニットにおける優先度、最大の処理ユニット割り当て数などの割り当て条件の情報を付加しておく。
【0054】
処理ユニット22a、22b、22c、22dは、当該ワークロードに係る情報を読み出したうえ、処理ユニットごとの優先度などに基づき一つのワークロードを選択してタスクの処理を行う。図9は、4つのワークロードのそれぞれに設定された割り当て条件、ここでは各処理ユニットにおける優先度および最大の処理ユニット割り当て数を例示している。図9に示した割り当て条件テーブル90の例では、ワークロード欄92に示すように、物理演算のワークロードP、人工知能のワークロードA、グラフィックス処理のワークロードG、およびオーディオ処理のワークロードMを処理対象のワークロードとしている。
【0055】
そして各ワークロードに対し、各処理ユニットにおける4つのワークロードの優先順位、および割り当てることのできる処理ユニットの最大数が、優先度欄94および最大処理ユニット数欄96に記載されている。例えばワークロードPの場合、処理ユニット22a、22b、22c、22dにおける優先順位はそれぞれ「1」、「0」、「2」、「2」と設定されている。また割り当てることのできる処理ユニットの最大数は「2」と設定されている。その他のワークロードも同様である。
【0056】
同図の場合、優先度欄94に記載された数値は、「0」を除き数が少ないほど優先順位が高いとする。例えば処理ユニット22aにおける優先順位はワークロードPが高く次がワークロードGである。数値が「0」の場合は、当該処理ユニットでは処理を行わない設定を意味する。割り当てることのできる処理ユニットの最大数を設定しない場合は最大処理ユニット数欄96を空欄としてよい。このような設定はプログラム作成時にアプリケーションごとに行う。
【0057】
図10は、図9に示した割り当て条件を設定した際、処理ユニット22a、22b、22c、22dが各ワークロードを選択し、処理する過程の例を模式的に示している。同図において縦方向が時間軸であり、各処理ユニットの下に示される矩形がタスクあるいはワークロードの一つ一つの処理である。同図で示した時刻t0付近では、各処理ユニット22a、22b、22c、22dが、それぞれにおいて最も高い優先順位を有するタスクの処理、すなわちワークロードP、ワークロードA、ワークロードG、ワークロードGの処理をそれぞれ行っている。
【0058】
例えば時刻t1で、処理ユニット22c、22dで処理されていたワークロードGのタスクがデバイスアクセスのための待機状態となると、それらの処理ユニット22c、22dは次に優先度の高いタスクであるワークロードPを選択しようとする。ところがワークロードPのタスクを処理できる処理ユニットの最大数は「2」であったため、処理ユニット22cがワークロードPを選択した場合、処理ユニット22dはさらに次の優先度を有するワークロードMを選択する。そしてデイバイスアクセスのための待機が時間Tで解消すると、処理ユニット22c、22dは、それぞれのワークロードP、ワークロードMを休止できるタイミングで、再びワークロードGを選択して実行を開始する(時刻t2)。
【0059】
このように、アプリケーションにおいて指定された優先度および割り当て可能な処理ユニットの最大数、あるいは要求する処理ユニットの数などの割り当て条件に従い、各処理ユニットで動作するカーネルによって自律的にタスクの処理が進捗する。このとき各処理ユニットにおいて優先度の低いタスクは休止に好適なタイミングで優先度の高いタスクに処理時間を譲るため、コンテキストスイッチに要する時間を最小限に、優先度に従った処理の切り替えが可能となる。また処理ユニットごとに優先度を指定可能とすることで、処理ユニットへのタスクの割り振りが容易になる。なお図9、10はあくまで例示であり、割り当て条件は優先度のみとしたり、その他のパラメータを指定してもよい。
【0060】
本実施の形態では、このような自律的なユーザレベルスケジューラを導入した情報処理装置において、システム処理をユーザレベルスケジューリングに組み込む。具体的には、システム処理を仮想ワークロードとして発生させることにより、ユーザレベルスケジューラのスケジューリングにシステム処理を組み込む。この態様は、実施の形態1の図1および図4で示した情報処理装置10と同様の構成によって実現できる。ただし本態様においてタスク割り当て部26は、タスクを直接処理ユニットに割り当てるのでなく、上述のとおり、ワークロードを処理ユニットグループに割り当て、当該処理ユニットグループに対応するメインメモリ44内の領域に処理に必要なデータや割り当て条件を格納する。
【0061】
図11は本実施の形態においてシステム処理を仮想ワークロードとして実行する際の処理手順を模式的に示している。図6と同様、白い矩形はアプリケーションのタスク(ワークロード)、斜線網掛けの矩形はシステム処理のタスク(仮想ワークロード)である。同図において処理ユニット22a、22b、22c、22dの4つの処理ユニットが処理ユニットグループを形成し、それぞれが、割り当てられたアプリケーションのワークロードを構成するタスクを処理している。この状況において、まずシステムレベル管理部24のシステム処理要求部27がシステム処理要求をタスク割り当て部26に行う(S40)。タスク割り当て部26は、当該処理要求をあらかじめ定めた規則により仮想ワークロードに変換し、メインメモリ44の該当領域に格納する(S42)。
【0062】
その後、処理ユニットグループのうち前のタスク処理を完了、または休止させた処理ユニット、図11の例では処理ユニット22dが、メインメモリ44からシステム処理の仮想ワークロードを選択して自らのローカルメモリにロードする(S44)。仮想ワークロードの処理が可能となった時点で処理ユニット22dはその旨の通知をシステムレベル管理部24に送信する(S46)。
【0063】
システムレベル管理部24の実行監視部28は、S40の処理要求からの経過時間を測定し、実行期限までにS46の通知を受けた場合、実行制御部30は処理ユニット22dにシステム処理を開始させる(S50)。実行条件違反があった場合は、実施の形態1と同様、処理ユニット22a、22b、22c、22dのいずれか、または全てのタスク処理を休止させ、システム処理を実行させてよい。
【0064】
次にタスク割り当て部26が、システムレベル管理部24から要求されたシステム処理を仮想ワークロードに変換する手法について説明する。図12はタスク割り当て部26が要求されたシステム処理を仮想ワークロードに変換する際に参照する変換テーブルの例である。変換テーブル100はあらかじめ設定しておきメインメモリ44などに格納しておく。変換テーブル100は、グループ欄102、種別欄104、リソース割り当て単位欄108、およびユーザパラメータ欄110を含む。
【0065】
タスク割り当て部26は、実施の形態1の図7に示したシステム処理に係る情報と同様の情報をシステム処理要求部27から受け取る。この情報のうち、種別識別子52に基づき図12の種別欄104から、要求されたシステム処理の種別を検索する。同図に示すように、各種別はグループ欄102に示したグループにまとめられ、それぞれのグループに対し、ワークロードとして必要なパラメータを設定する。
【0066】
リソース割り当て単位欄108には、各グループを一つの単位として処理ユニットなどのリソースを割り当てるか、種別ごとに割り当てるかを設定する。図12の例で「グループ」と記載されている場合は、1つのグループでリソースを共有する。「種別ごと」と記載されている場合は、種別欄104に記載した種別ごとにリソースを割り当てる。ユーザパラメータ欄110には、アプリケーションごとに設定が可能なパラメータ、例えば当該システム処理を割り当てる処理ユニットや、割り当てることのできる最大の処理ユニット数、あるいは処理ユニットごとの優先順位を定めた優先度テーブルの識別子などを設定する。優先度テーブルは識別子と対応づけてあらかじめ準備しておく。タスク割り当て部26は、当該設定に基づき、図9の優先度欄94、最大処理ユニット数欄96に示すような数値を最終決定する。
【0067】
次にこれまで述べた構成による本実施の形態の動作を説明する。図13は自律的なユーザレベルスケジューラを導入した際にシステム処理を実行する処理手順を示すフローチャートである。まずタスク割り当て部26は、アプリケーションの起動時や、システム処理をユーザレベルスケジューリングに則り行う態様が必要となった際、アプリケーションのワークロードと同様に、初期状態の仮想ワークロードをメインメモリ44に登録しておく(S60)。初期状態の仮想ワークロードでは、要求する処理ユニットの数を初期値0としておく。
【0068】
このときアプリケーションのタスクは自律的なユーザレベルスケジューリングによって各処理ユニットで処理されているとする。このような状況において、OSが提供するライブラリが呼び出されるなどした際に、システムレベル管理部24のシステム処理要求部27は、当該ライブラリに対応するシステム処理を発生させ、タスク割り当て部26に処理要求を行う(S62)。
【0069】
要求を受けたタスク割り当て部26は、要求に含まれる情報に従い、S60において登録しておいた初期状態の仮想ワークロードを修正する(S64)。例えばシステム処理の処理IDに基づき、あらかじめ設定した当該処理に要する処理ユニットの数を特定し、仮想ワークロードにおける初期値0の設定を修正する。上述した優先度なども決定できる。各処理ユニットで動作するカーネルは、仮想ワークロードにおいて、要求する処理ユニットの設定数が1以上に変更されたことを受けて、仮想ワークロードの選択を開始する。これによりにより、実質、仮想ワークロードが要求数の処理ユニットに割り当てられる(S66)。
【0070】
すると仮想ワークロードを選択した処理ユニットは、あらかじめ準備しておいた仮想ワークロード用のプログラムを起動し、処理IDに基づきメインメモリ44からプログラムをロードしたうえ、システム処理を実行する(S68)。
【0071】
図14〜16は本実施の形態で実現できる、6つの処理ユニット22a、22b、22c、22d、22e、22fにおける処理の推移の例を示している。図の横方向が時間軸であり、ある単位処理時間中にどのタスクが処理されたかを処理ユニットごとに矩形で示している。同図において「P」、「A」、「G」が記載されたタスクは、上述の物理演算のワークロードP、人工知能のワークロードA、グラフィックス処理のワークロードGに対応するアプリケーションのタスクである。同図の例は、常に「A」、「P」、「G」の順で処理が進捗するとする。
【0072】
このようにアプリケーションのタスク処理がなされている環境において、時刻T0でノイズ除去、システムBGM、AVチャット、レコーディング、のシステム処理が要求されたとする。図14〜16ではシステム処理を太線の矩形で示し、それぞれの処理を、「ノイズ除去」、「BGM」、「AVチャット」、「レコーディング」と記載して区別している。上述したように、図12に示した変換テーブル100によって、それぞれの処理が属するグループごとに割り当てる処理ユニットなどを設定することができる。
【0073】
図14は各システム処理をどの処理ユニットに割り当ててもよい、との設定がなされている場合の例である。割り当て可能な処理ユニットは、例えばビットマスクを利用して変換テーブルに対しユーザが指定できるようにする。同図の場合、各システム処理は、処理ユニット22c、22d、22e、22fが時刻T0でそれぞれ開始している。その間に、アプリケーションのタスクのうち「A」は、2つの処理ユニット22a、22bで処理されているため、このようにシステム処理が実行されても、アプリケーションの後続のタスクである「P」、「G」は大きく遅延することなく、最大限の数の処理ユニットを利用して処理を進捗させることができる。
【0074】
図15は、システム処理は処理ユニット22aにのみ割り当てるという設定がなされている場合の例である。この例では、時刻T0でアプリケーションのタスクのうち「A」を開始しているが、処理ユニット22aにおいてはコンテキストスイッチに好適なタイミングでシステム処理「ノイズ除去」に処理が切り替わり、その後のシステム処理が処理ユニット22aで優先度などに従い進捗する。この場合、時刻T0からシステム処理へ切り替わるまでの時間、およびシステム処理が終了した後の時間は、全ての処理ユニットをアプリケーションのタスクに割り当てることが可能である。
【0075】
図16は、システム処理をどの処理ユニットに割り当ててもよいが、ユーティリティや高負荷サービスのグループに属するシステム処理の優先度を比較的低くした場合の例である。この場合、優先度が高い「ノイズ除去」、「BGM」の処理は時刻T0で処理ユニット22c、22dによって開始されるが、「レコーディング」、「AVチャット」の処理は、アプリケーションのタスク「G」が終了した後に開始されている。
【0076】
このように、システム処理をワークロードに変換する際に割り当てる処理ユニットなどの指定を可能としておくことにより、アプリケーションごとに最適な態様で処理を進捗させることができる。
【0077】
以上述べた本実施の形態によれば、プログラムを分割して並列処理する際、処理ユニット自らが分割後のタスクを優先度などに基づき選択して実行する自律的なユーザレベルスケジューラを導入した環境において、システム処理を仮想ワークロードに変換する。これにより、本来はユーザレベルスケジューリングの対象外であったシステム処理を、ユーザレベルのタスクと同様に扱うことが可能となる。結果として、優先度ベースで行われている本来のスケジューリングの動作を阻害することなくシステム処理も進捗させることができる。
【0078】
またアプリケーションにおいて、各システム処理の優先度や割り当てる処理ユニットを指定できるようにし、仮想ワークロードへ変換する際に当該指定に従った設定を行う。これによりアプリケーションごとにシステム処理を実行するタイミングや実行する処理ユニットを容易に変化させることができ、最適な処理態様を実現できる。さらに、アプリケーションのタスクと同様にシステム処理を扱えるため、アプリケーションの作成は従来と同様に行える。また実施の形態1と同様、システム処理の負荷を分散させ最大限の処理ユニットを稼働させることによって処理の高速化を実現できる。
【0079】
以上、本発明を実施の形態をもとに説明した。上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【符号の説明】
【0080】
10 情報処理装置、 22a 処理ユニット、 24 システムレベル管理部、 25 ユーザレベル管理部、 26 タスク割り当て部、 27 システム処理要求部、 28 実行監視部、 30 実行制御部、 32 タスク処理部、 34 通信部、 36 ローカルメモリ、 44 メインメモリ。
【特許請求の範囲】
【請求項1】
プログラムのタスクを処理するタスク処理部と、
実行中のプログラムの外部プログラムが呼び出された場合に、当該外部プログラムのタスクに実行条件を付加して処理要求を発行する処理要求部と、
前記処理要求部が処理要求を発行した前記外部プログラムのタスクを前記タスク処理部におけるタスク処理のスケジュール制御に組み入れるタスク割り当て部と、
前記タスク処理部における前記外部プログラムのタスクの処理において、前記処理要求部が付加した実行条件に対する違反が生じたか否かを判定する実行監視部と、
前記実行監視部が実行条件違反が生じたと判定した際に、前記タスク処理部の処理を前記外部プログラムのタスクに切り替える実行制御部と、
を備えたことを特徴とする情報処理装置。
【請求項2】
前記処理要求部は、前記外部プログラムのタスクとしてシステムレベルのタスクに、実行条件を付加して処理要求を発行することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記処理要求部は、前記実行条件として、処理要求を発行してから実行開始までに許容される実行期限を設定することを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記実行監視部は、前記タスク処理部から、前記外部プログラムのタスク処理を受け入れ可能である旨の通知が、前記実行期限以内になされなかった場合に、実行条件違反が生じたと判定することを特徴とする請求項3に記載の情報処理装置。
【請求項5】
前記タスク割り当て部は、前記外部プログラムの処理内容の種別に対してあらかじめ設定された優先度、実行期限、動作周期、および実行時間、の少なくともいずれかの情報を特定し、特定した情報に基づき、前記タスク処理部の処理のスケジュールを決定することを特徴とする請求項1から3のいずれかに記載の情報処理装置。
【請求項6】
前記タスク割り当て部は、タスクの処理スケジュールを前記タスク処理部ごとに生成し、前記処理要求部が前記外部プログラムのタスクの処理要求を発行した際、当該外部プログラムのタスクを前記タスク処理部ごとの処理スケジュールのいずれかに挿入し、
前記タスク処理部は、前記タスク割り当て部が生成した処理スケジュールに則りタスクを処理することを特徴とする請求項1から3のいずれかに記載の情報処理装置。
【請求項7】
前記タスク割り当て部は、タスクをメモリのタスクキューに格納し、前記処理要求部が前記システムレベルのタスクの処理要求を発行した際、当該タスクに係る情報を、ユーザレベルのタスクと同様の情報に変換したうえ、前記メモリのタスクキューに格納し、
前記タスク処理部は、前記タスクキューに格納されたタスクから選択したタスクを処理することを特徴とする請求項2に記載の情報処理装置。
【請求項8】
前記タスク割り当て部は、前記システムレベルのタスクに係る情報をユーザレベルのタスクと同様の情報に変換する際、当該システムレベルのプログラムを呼び出したプログラムにおいて、当該システムレベルのプログラムのタスクに対し設定された優先度および割り当てることのできるタスク処理部の数の少なくともいずれかを、変換後の情報に付加することを特徴とする請求項7に記載の情報処理装置。
【請求項9】
前記処理要求部は、実行中のプログラムにおいて、呼び出す外部プログラムのタスクを前記タスク処理部におけるタスク処理のスケジュール制御へ組み入れない旨の設定がなされていた場合、前記処理要求を発行せず、前記実行制御部は、いずれかの前記タスク処理部の処理を、呼び出された外部プログラムのタスクへ切り替えることを特徴とする請求項1に記載の情報処理装置。
【請求項10】
実行すべきプログラムのタスクをプロセッサにおいて処理するステップと、
実行中のプログラム以外のシステムレベルのプログラムが呼び出された場合、実行中のプログラムのタスクについて行っていたユーザレベルのスケジュール制御に、当該システムレベルのプログラムのタスクを組み入れるステップと、
スケジュール制御に組み入れられた前記システムレベルのプログラムのタスクを前記プロセッサにおいて処理するステップと、
を含むことを特徴とする情報処理方法。
【請求項11】
前記システムレベルのプログラムのタスクに実行条件を付加するステップと、
前記実行条件に違反が生じた場合に、いずれかのプロセッサにおけるタスクの処理を、前記システムレベルのプログラムのタスクに切り替えるステップと、
をさらに含むことを特徴とする請求項10に記載の情報処理方法。
【請求項12】
実行すべきプログラムのタスクを処理する機能と、
実行中のプログラム以外のシステムレベルのプログラムが呼び出された場合、実行中のプログラムのタスクについて行っていたユーザレベルのスケジュール制御に、当該システムレベルのプログラムのタスクを組み入れる機能と、
をコンピュータに実現させ、
前記タスクを処理する機能は、スケジュール制御に組み入れられた前記システムレベルのプログラムのタスクも処理することを特徴とするコンピュータプログラム。
【請求項1】
プログラムのタスクを処理するタスク処理部と、
実行中のプログラムの外部プログラムが呼び出された場合に、当該外部プログラムのタスクに実行条件を付加して処理要求を発行する処理要求部と、
前記処理要求部が処理要求を発行した前記外部プログラムのタスクを前記タスク処理部におけるタスク処理のスケジュール制御に組み入れるタスク割り当て部と、
前記タスク処理部における前記外部プログラムのタスクの処理において、前記処理要求部が付加した実行条件に対する違反が生じたか否かを判定する実行監視部と、
前記実行監視部が実行条件違反が生じたと判定した際に、前記タスク処理部の処理を前記外部プログラムのタスクに切り替える実行制御部と、
を備えたことを特徴とする情報処理装置。
【請求項2】
前記処理要求部は、前記外部プログラムのタスクとしてシステムレベルのタスクに、実行条件を付加して処理要求を発行することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記処理要求部は、前記実行条件として、処理要求を発行してから実行開始までに許容される実行期限を設定することを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記実行監視部は、前記タスク処理部から、前記外部プログラムのタスク処理を受け入れ可能である旨の通知が、前記実行期限以内になされなかった場合に、実行条件違反が生じたと判定することを特徴とする請求項3に記載の情報処理装置。
【請求項5】
前記タスク割り当て部は、前記外部プログラムの処理内容の種別に対してあらかじめ設定された優先度、実行期限、動作周期、および実行時間、の少なくともいずれかの情報を特定し、特定した情報に基づき、前記タスク処理部の処理のスケジュールを決定することを特徴とする請求項1から3のいずれかに記載の情報処理装置。
【請求項6】
前記タスク割り当て部は、タスクの処理スケジュールを前記タスク処理部ごとに生成し、前記処理要求部が前記外部プログラムのタスクの処理要求を発行した際、当該外部プログラムのタスクを前記タスク処理部ごとの処理スケジュールのいずれかに挿入し、
前記タスク処理部は、前記タスク割り当て部が生成した処理スケジュールに則りタスクを処理することを特徴とする請求項1から3のいずれかに記載の情報処理装置。
【請求項7】
前記タスク割り当て部は、タスクをメモリのタスクキューに格納し、前記処理要求部が前記システムレベルのタスクの処理要求を発行した際、当該タスクに係る情報を、ユーザレベルのタスクと同様の情報に変換したうえ、前記メモリのタスクキューに格納し、
前記タスク処理部は、前記タスクキューに格納されたタスクから選択したタスクを処理することを特徴とする請求項2に記載の情報処理装置。
【請求項8】
前記タスク割り当て部は、前記システムレベルのタスクに係る情報をユーザレベルのタスクと同様の情報に変換する際、当該システムレベルのプログラムを呼び出したプログラムにおいて、当該システムレベルのプログラムのタスクに対し設定された優先度および割り当てることのできるタスク処理部の数の少なくともいずれかを、変換後の情報に付加することを特徴とする請求項7に記載の情報処理装置。
【請求項9】
前記処理要求部は、実行中のプログラムにおいて、呼び出す外部プログラムのタスクを前記タスク処理部におけるタスク処理のスケジュール制御へ組み入れない旨の設定がなされていた場合、前記処理要求を発行せず、前記実行制御部は、いずれかの前記タスク処理部の処理を、呼び出された外部プログラムのタスクへ切り替えることを特徴とする請求項1に記載の情報処理装置。
【請求項10】
実行すべきプログラムのタスクをプロセッサにおいて処理するステップと、
実行中のプログラム以外のシステムレベルのプログラムが呼び出された場合、実行中のプログラムのタスクについて行っていたユーザレベルのスケジュール制御に、当該システムレベルのプログラムのタスクを組み入れるステップと、
スケジュール制御に組み入れられた前記システムレベルのプログラムのタスクを前記プロセッサにおいて処理するステップと、
を含むことを特徴とする情報処理方法。
【請求項11】
前記システムレベルのプログラムのタスクに実行条件を付加するステップと、
前記実行条件に違反が生じた場合に、いずれかのプロセッサにおけるタスクの処理を、前記システムレベルのプログラムのタスクに切り替えるステップと、
をさらに含むことを特徴とする請求項10に記載の情報処理方法。
【請求項12】
実行すべきプログラムのタスクを処理する機能と、
実行中のプログラム以外のシステムレベルのプログラムが呼び出された場合、実行中のプログラムのタスクについて行っていたユーザレベルのスケジュール制御に、当該システムレベルのプログラムのタスクを組み入れる機能と、
をコンピュータに実現させ、
前記タスクを処理する機能は、スケジュール制御に組み入れられた前記システムレベルのプログラムのタスクも処理することを特徴とするコンピュータプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【公開番号】特開2010−165259(P2010−165259A)
【公開日】平成22年7月29日(2010.7.29)
【国際特許分類】
【出願番号】特願2009−8162(P2009−8162)
【出願日】平成21年1月16日(2009.1.16)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【公開日】平成22年7月29日(2010.7.29)
【国際特許分類】
【出願日】平成21年1月16日(2009.1.16)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
[ Back to top ]