JP2011521353A - スケジューラーにおけるスケジューリングコレクション - Google Patents

スケジューラーにおけるスケジューリングコレクション Download PDF

Info

Publication number
JP2011521353A
JP2011521353A JP2011509509A JP2011509509A JP2011521353A JP 2011521353 A JP2011521353 A JP 2011521353A JP 2011509509 A JP2011509509 A JP 2011509509A JP 2011509509 A JP2011509509 A JP 2011509509A JP 2011521353 A JP2011521353 A JP 2011521353A
Authority
JP
Japan
Prior art keywords
scheduling
collection
task
node
scheduler
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.)
Granted
Application number
JP2011509509A
Other languages
English (en)
Other versions
JP5597195B2 (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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2011521353A publication Critical patent/JP2011521353A/ja
Application granted granted Critical
Publication of JP5597195B2 publication Critical patent/JP5597195B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/483Multiproc

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Multi Processors (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

コンピューターシステムのプロセスにおけるスケジューラーは、スケジューラーにおける各スケジューリングノードのためのそれぞれのスケジューリングコレクションを含む。スケジューリングコレクションは、1つまたは複数の実行メトリックに基づいて少なくとも部分的な検索順位にマッピングされる。スケジューリングノードのプロセッシングリソースが利用可能になると、プロセッシングリソースは、検索順位によって特定される順位で他のスケジューリングコレクションを検索する前に、スケジューリングノードに対応しているスケジューリングコレクションにおいて実行するためのタスクを最初に見つけようとする。

Description

本発明は、スケジューラーにおけるスケジューリングコレクションに関する。
コンピューターシステムで実行されるプロセスの中には、コンピューターシステムで実行するプロセスのタスクをスケジューリングすることができるタスクスケジューラーがある。これらのスケジューラーは、プロセスのタスクがどのように実行されるべきかを決定する様々なアルゴリズムで動作することができる。複数のプロセッシングリソースを有するコンピューターシステムでは、プロセッシングリソースは、スケジューラーで実行するタスクを検索する際に互いに競合するかもしれない。コンテンションによって、スケジューラーでプロセスを実行する際にコンピューターシステムの効率が悪くなる傾向があり、プロセッシングリソースの数がコンピューターシステムにおいて増加するにつれて、通常、コンテンションの量は増加する。結果として、コンピューターシステムのプロセッシングリソースの数が増加するにつれて、プロセッシングリソースのコンテンションが、スケジューラーのスケーラビリティを制限するかもしれない。
この概要は、詳細な説明において更に記載されている単純化された形式の概念の選択を導くために提供されている。この概要は、請求された本発明の重要な特徴または基本的特徴を識別することを意図していないし、請求された本発明の範囲を限定するために用いられることも意図していない。
コンピューターシステムのプロセスにおけるスケジューラーは、該スケジューラー内の各スケジューリングノードのためのそれぞれのスケジューリングコレクションを含む。スケジューラーは、スケジュールグループのセットを備えた各スケジューリングコレクションに存在し、各インクルードのスケジュールグループは、プロセスのタスクのセットを含む。スケジューリングコレクションは、1つまたは複数の実行メトリックに基づいて少なくとも部分的な検索順位(オーダー)へマッピングされる。スケジューリングノード内のプロセッシングリソースが利用可能になると、プロセッシングリソースは、スケジューリングノードに対応するスケジューリングコレクションにおいて、実行するタスクを見つけようとする。プロセッシングリソースが、スケジューリングコレクションにおいて実行するタスクが見つからない場合、プロセッシングリソースは、検索順位で特定される順位で他のスケジューリングコレクションにおいて、実行するタスクを見つけようとする。
添付の図面は、実施形態への更なる理解を与えるために含まれていて、この明細書の一部に組み込まれていてかつこの明細書の一部を構成する。図面は、実施形態を示していて、明細書と共に、実施形態の原理を説明するのに役立つ。他の実施形態及び実施形態の意図された利点の多くは、以下の詳細な説明を参照してよりよく理解できるようになるので、すぐに理解できるだろう。図面の要素は、必ずしも互いに関連して適合されているわけではない。同様の参照番号は、対応する同様の部分を示す。
ランタイム環境においてスケジューリングコレクションを有するスケジューラーの実施形態を示すブロック図である。 スケジューラーにおいてスケジューリングコレクションを生成しかつ配置させる方法の実施形態を示すフローチャートである。 スケジューリングコレクションのマッピングの実施形態を示す図である。 スケジューリングコレクションのマッピングの実施形態を示す表である。 実行するタスクを選択する方法の実施形態を示すフローチャートである。 スケジューリングコレクションの実施形態を示すブロック図である。 スケジューリングコレクションの実施形態を示すブロック図である。 スケジューリングコレクションを有するスケジューラーを含むランタイム環境を実施するよう構成されたコンピューターシステムの実施形態を示すブロック図である。 スケジューリングコレクションを有するスケジューラーを含むランタイム環境を実施するよう構成されたコンピューターシステムの実施形態を示すブロック図である。
以下の詳細な説明において、添付の図面が参照される。添付の図面は、本明細書の一部を形成し、添付の図面において、説明の目的で本発明を実施することができる特定の実施形態が示されている。これに関し、「上部」、「底部」、「前部」「後部」「先頭の」、「末尾の」等の用語は、説明されている図(または複数の図)の方向に関して用いられている。実施形態の構成要素は多くの異なる方向に位置することができるので、方向の用語は、説明のために用いられていて、決して限定ではない。他の実施形態を利用することができ、構造の変更または論理的な変更を本発明の要旨を逸脱しない範囲で行うことができることが理解されるべきである。従って、以下の詳細な説明は、限定する意味と理解されるべきでなく、本発明の範囲は添付の特許請求の範囲により画定される。
本明細書において説明されている様々な例示的な実施形態の特徴は、特に断りのない限り、互いに組み合わせることができると理解されるべきである。
図1は、ランタイム環境10のプロセス12における実行コンテキストスケジューラー22の実施形態を示すブロック図である。スケジューラー22は、スケジューリングコレクション40(1)−40(L)のセットを含む。ここで、Lは2以上の整数であって、L番目のスケジューリングコレクション40を示す。各スケジューリングコレクション40(1)−40(L)は、それぞれのスケジューリングノード30(1)−30(L)に対応している。
ランタイム環境10は、図6A及び図6Bに示されかつ更に詳細に以下に説明されるコンピューターシステム100の実施形態100A及び100Bなどの、コンピューターシステムにおける動作のランタイムモードを示し、コンピューターシステムは命令を実行している。コンピューターシステムは、図6Aに示されかつ更に詳細に以下に説明されるランタイムプラットフォーム122などのランタイムプラットフォームから、ランタイム環境10を生成する。
ランタイム環境10は、少なくとも1つの呼び出されたプロセス12、リソース管理層14及びハードウェアスレッド16(1)−16(M)のセットを含む。ここで、Mは2以上の整数であって、M番目のハードウェアスレッド16を示す。ランタイム環境10によって、プロセス12からのタスクが、リソース管理層14及びハードウェアスレッド16(1)−16(M)を用いて、プロセス12と共存するあらゆる他のプロセス(図示せず)からのタスクとともに実行される。ランタイム環境10は、リソース管理層14に関連して動作し、プロセス12が、コンピューターシステム(例えば、ハードウェアスレッド16(1)−16(M))のプロセッサ及び他のリソースを得られるようにする。
ランタイム環境10は、スケジューラー22を生成するスケジューラー機能を含む。1つの実施形態では、スケジューラー機能は、スケジューラーのアプリケーションプログラミングインターフェース(API)として実施される。他の実施形態では、スケジューラー機能は、他の適切なプログラミングコンストラクトを用いて実施することができる。呼び出されると、スケジューラー機能は、プロセス12においてスケジューラー22を生成し、スケジューラー22が、1つまたは複数のハードウェアスレッド16(1)−16(M)による実行のためにプロセス12のタスクをスケジューリングするよう動作する。ランタイム環境10は、きめ細かい並列処理を利用することができる。該並列処理は、スケジューラー機能が提供する便利さを知っているアプリケーション開発者またはライブラリ開発者によって、付随するツールを用いて自分たちのプログラム(例えば、プロセス12)において示されている。
プロセス12は、1つまたは複数の実行コンテキスト(即ち、スレッド)をホストするプロセッシングリソース及び他のリソースの割り当てを含む。プロセス12は、リソース管理層14からコンピューターシステムのプロセッシングリソース及び他のリソース(例えば、ハードウェアスレッド16(1)−16(M))にアクセスできるようになる。プロセス12は、プロセッシングリソース及び他のリソースを用いてタスクを実行させる。
プロセス12は、可変長のタスク群で作業を生成し、各タスクは、スケジューラー22の実行コンテキストに関連している。各タスクは、コンピューターシステムによって実行されると、作業の単位を行なう一連の命令を含む。各実行コンテキストは、スレッドを形成し、該スレッドは、割当られたプロセッシングリソース上の関連するタスクを実行する。各実行コンテキストは、プログラム状態情報及びマシン状態情報を含む。実行コンテキストは、実行するタスクがこれ以上ない場合に、終了することができる。各タスクについて、ランタイム環境10及び/またはプロセス12は、スケジューラー22にタスクを割り当てて実行のためにスケジューリングされるかまたはそうでなければスケジューラー22を用いずにタスクを実行させる。
プロセス12は、スタックモデルまたはインタープリターモデルなどの、任意の適切な実行モデルに基づいて、コンピューターシステムにおいて動作するよう構成することができ、アプリケーション、ライブラリ機能、またはオペレーティングシステムサービスなどの、任意の適切なコードのタイプを表すことができる。プロセス12は、定義済みのメモリアドレス空間を含む割当られたリソースのセットに関連するプログラム状態及びマシン状態にある。プロセス12は、ランタイム環境10においてあらゆる共存しているプロセスから自律的にまたはほぼ自律的に実行する。従って、プロセス12は、共存しているプロセスのプログラム状態または共存しているプロセスに割り当てられたあらゆるリソースのマシン状態を悪い方向に変えない。同様に、共存しているプロセスは、プロセス12のプログラム状態またはプロセス12に割り当てられたあらゆるリソースのマシン状態を悪い方向に変えない。
リソース管理層14は、1つまたは複数のハードウェアスレッド16をプロセス12に割り当てることで、プロセッシングリソースをプロセス12に割り当てる。リソース管理層14は、図1の実施形態においてコンピューターシステムのオペレーティングシステム(図1に図示せず)と別個に存在する。他の実施形態では、リソース管理層14またはリソース管理層14のいくつかの機能もしくは全ての機能は、オペレーティングシステムに含まれていてもよい。
ハードウェアスレッド16は、コンピューターシステムの1組のプロセッサパッケージまたは1つもしくは複数のプロセッサパッケージ(例えば、図6に示しかつ更に詳細に以下に説明されるプロセッサパッケージ102)の実行コアにある。各ハードウェアスレッド16は、他の実行コアから独立してまたはほぼ独立して命令を実行するよう構成されていて、マシン状態を含む。ハードウェアスレッド16は、単一のプロセッサパッケージに含まれていてもよいし、または複数のプロセッサパッケージに分散されていてもよい。プロセッサパッケージの各実行コアは、1つまたは複数のハードウェアスレッド16を含むことができる。
プロセス12は、スケジューラー22をランタイム環境10が提供するスケジューラー機能を介して黙示的にまたは明示的に生成させる。プロセス12がコンピューターシステムにおいて利用可能なAPIまたはプログラミング言語機能を用いる場合、スケジューラー22を黙示的に生成することができる。APIまたはプログラミング言語機能に応じて、ランタイム環境10は、デフォルトのポリシーを用いてスケジューラー22を生成する。スケジューラー22を明示的に作成するために、プロセス12は、ランタイム環境10が提供するスケジューラー機能を呼び出すことができ、スケジューラー22についてのポリシーを特定する。
スケジューラー22は、リソース管理層14と相互作用して、プロセス12にトランスペアレントな方法でコンピューターシステムのリソースについて交渉する。リソース管理層14は、スケジューラー22の需要と供給及びあらゆるポリシーに基づいてスケジューラー22にハードウェアスレッド16を割り当てる。
図1に示した実施形態では、スケジューラー22は、仮想プロセッサ32を生成することでプロセッシングリソースを管理し、仮想プロセッサ32は、基本的なハードウェアスレッド16の抽象的概念を形成する。スケジューラー22は、各仮想プロセッサ32をハードウェアスレッド16にマッピングすることでハードウェアスレッド16上に仮想プロセッサ32を多重化する。スケジューラー22は、2つ以上の仮想プロセッサ32を特定のハードウェアスレッド16にマッピングすることができるが、1つのハードウェアスレッド16だけを各仮想プロセッサ32にマッピングする。他の実施形態では、スケジューラー22は、他の適切な方法でプロセッシングリソースを管理し、プロセス12の命令をハードウェアスレッド16に実行させる。
ランタイム環境10は、コンピューターシステムの基本的なトポロジーについての知識を用いてスケジューラー22を生成する。ランタイム環境10は、リソース管理層14及び/またはスケジューラー22にコンピューターシステムのノード情報を提供する。ノード情報は、コンピューターシステムのハードウェアのノードを直接識別するか、またはコンピューターシステムのトポロジーに関する十分な情報を含んでいて、リソース管理層14及び/またはスケジューラー22が、1つまたは複数の実行メトリックに基づいてハードウェアリソースをスケジューリングノード30に区分できるようにする。実行メトリックは、コンピューターシステムのプロセッシングリソース(例えば、ハードウェアスレッド16)、メモリリソース、並びに/または他のリソースの速度、タイプ、及び/もしくはコンフィグレーションを含むことができる。
例えば、コンピューターシステムのトポロジーがキャッシュコヒーレンシのある不均等メモリアクセス(NUMA)アーキテクチャを含む実施形態では、ノード情報は、2つまたはそれ以上のNUMAノードのセットを特定することができ、各NUMAノードは、ハードウェアスレッド16及びローカルメモリのセットを含む。ノード情報はまた、NUMAノード同士の間のメモリアクセスを説明する情報(例えば、NUMA距離またはメモリアクセストポロジーもしくはメモリアクセス時間)を含むことができる。
別の例では、ノード情報は、プロセッシングリソース(例えば、ハードウェアスレッド16)の速度、タイプ及び/またはコンフィグレーションを説明することができ、プロセッシングリソースをプロセッシングリソースの特徴同士の間の類似点または相違点に基づいてグループ化できるようになる。これらの特徴は、1つまたは複数のプロセッシングリソースの命令セットの一種を含み、異なるタイプの命令セットを有するプロセッシングリソースのセットを用いて異なるノードを形成することができるようになる。
ランタイム環境10は、スケジューラー22にノード情報に基づいて2つ以上のスケジューリングノード30(1)−30(L)のセットを含ませる。各スケジューリングノード30は、仮想プロセッサ32及びハードウェアスレッド16の形で、割当られたプロセッシングリソースを含む。スケジューリングノード30(1)は、仮想プロセッサ30(1)−30(N1)を含み、これらは、ハードウェアスレッド16(1)−16(m1)にマッピングを行う。ここで、N1は、1以上の整数であって(N1)番目の仮想プロセッサ30示し、m1は、M以下であって(m1)番目のハードウェアスレッド16を示す。スケジューリングノード30(L)は、仮想プロセッサ30(1)−30(NL)を含み、これらは、ハードウェアスレッド16(mm)−16(M)にマッピングする。ここで、NLは、1以上の整数であって、(NL)番目の仮想プロセッサ30を示し、mmは、M以下であってかつm1より大きく、(mm)番目のハードウェアスレッド16を示す。
スケジューラー22は、各スケジューリングノード30のためのスケジューリングコレクション40を生成する。従って、スケジューリングコレクション40(1)−40(L)は、矢印37(1)−37(L)で示すようにそれぞれのスケジューリングノード30(1)−30(L)に対応する。スケジューラー22は、1つまたは複数の実行メトリックに基づいて全検索順位または部分的な検索順位にスケジューリングコレクション40をマッピングし、以下の更なる詳細な説明において記述するように、プロセッシングリソースが利用可能になると、実行するタスクを検索する検索順位を用いる。
スケジューラー22の実行コンテキストのセットは、それぞれ関連するタスク36を有する実行コンテキスト34のセットを含む。タスク36は、各スケジューリングノード30におけるかつ各スケジューリングコレクション40においてそれぞれの仮想プロセッサ32、ゼロまたは1以上の実行可能な実行コンテキスト38のセット、及びゼロまたは1以上のブロックされている(即ち、待ち依存の)実行コンテキスト40のセットによって、実行されている。各実行コンテキスト34、38及び40は、実行コンテキスト34、38及び40が実行中か実行可能であるか(例えば、ブロックされなくなるかまたはスケジューラー22に追加されるのに応じて)またはブロックされているかを示す状態情報を含む。実行中の実行コンテキスト34は、仮想プロセッサ32にアタッチされており、現在実行している。実行可能な実行コンテキスト38は、関連するタスク39を含み、利用可能な仮想プロセッサ32によって実行される準備ができている。ブロックされている実行コンテキスト40は、関連するタスク41を含んでおり、別の実行コンテキスト34、38または40で生成されているかまたは生成されるデータ、メッセージまたはイベントを待っている。
仮想プロセッサ32で実行している各実行コンテキスト34は、その実行の途中で、追加のタスク42を生成することができ、追加のタスク42は、任意の適切な方法(例えば、作業キューに追加される(図1に図示せず))で構成される。作業は、1つの実施形態では、実行環境10で提供される複数のアプリケーションプログラミングインターフェース(複数のAPI)を用いてまたはプログラミング言語の特徴及び対応するツールを用いてのいずれかで生成することができる。プロセッシングリソースがスケジューラー22に利用可能である場合、タスクは、実行コンテキスト34または38に割り当てられ、実行コンテキスト34または38は、新しいタスクをピックアップする前に仮想プロセッサ32上で該タスクを完了まで実行する。仮想プロセッサ32で実行している実行コンテキスト34はまた、別の実行コンテキスト40が用いることができるデータ、メッセージまたはイベントを生成することによって、他の実行コンテキスト40をブロックしない。
スケジューラー22の各タスクを認識することができ(例えば、認識されたタスク36及び39)、各タスクは、実行コンテキスト34または38がタスクにアタッチされているかまたはアタッチすることができ、該タスクは準備ができているということを示す。認識されたタスクは、通常ブロックされていない実行コンテキスト及びスケジューリングされたエージェントを含む。認識されていないタスクは、非認識と称される。非認識タスク(例えば、タスク42)は、親タスクの実行によって生成される子タスクとして生成することができ、並列のコンストラクトで生成することができる(例えば、並列、並列の、開始する、及び、完了する)。スケジューラー22の各スケジューリングコレクション40は、以下に説明される図5Aの実施形態において説明されるような依存したタスク(即ち、非認識タスク)のためのワークスティーリングキューのリストとともに、実行コンテキストを備えた(即ち、認識されたタスク)、論理的に独立したタスクのための1つまたは複数の同期されたコレクション(例えば、スタック及び/またはキュー)に構成することができる。
仮想プロセッサ32で実行している実行コンテキスト34の完了、ブロッキング、または他の中断(例えば、明示的なイールド(yielding)または強制的なプリエンプション)で、仮想プロセッサ32は、別の認識されたタスク39または非認識タスク42を実行するために利用可能になる。スケジューラー22は、実行可能な実行コンテキスト38または非認識タスク42を検索して、実行のために利用可能な仮想プロセッサ32にアタッチする。スケジューラー22の全ての実行コンテキスト38が実行されるまで、スケジューラー22は、実行のための利用可能な仮想プロセッサ32に実行コンテキスト38をアタッチし続ける。
スケジューリングノード30の仮想プロセッサ32が利用可能になると、仮想プロセッサ32は、スケジューリングノード30に対応しているスケジューリングコレクション40において、実行するタスクを見つけようとする。仮想プロセッサ32は、スケジューリングコレクション40において実行するタスクを見つけない場合、仮想プロセッサ32は、検索順位で特定される順位で他のスケジューリングコレクション40において、実行するタスクを見つけようとする。1つの実施形態では、スケジューラー22は、設定可能な遅延パラメータを含むことができ、該遅延パラメータは、利用可能な仮想プロセッサ32に他のスケジューリングコレクション40の検索を遅延させて他の利用可能な仮想プロセッサ32とのコンテンションを最小化しようとする。遅延パラメータはまた、利用可能な仮想プロセッサ32のスケジューリングノード30に対応するスケジューリングコレクション40に対する作業の検索に優先順位をつけるために用いることができる。
図2は、スケジューラー22においてスケジューリングコレクション40を生成して配置させる方法の実施形態を示すフローチャートである。図2の方法は、図1のスケジューラー22の実施形態を参照して説明される。
図2において、ランタイム環境10、及び/またはリソース管理層14は、ブロック52において示されるように1つまたは複数の実行メトリックに基づいてスケジューリングノード30を識別する。実行メトリックは、コンピューターシステム内の命令を実行する任意の適切な手段であってもよく、コンピューターシステム内のプロセッシングリソース及び他のリソースの処理速度特性、処理スループット特性及びメモリレイテンシー特性を含むことができる。コンピューターシステムの様々な構成要素のセットについて決定された実行メトリックを用いて、ランタイム環境10、及び/または、リソース管理層14は、コンピューターシステムのプロセッシングリソース及び他のリソースを区分し、該区分を用いてスケジューラー22のためのスケジューリングノード30を識別する。スケジューリングノード30は各々、コンピューターシステムの処理リソース及び他のリソースの類似のセットまたは異なるセットからなるグループを含む。
1つの例では、コンピューターシステムは、複数のハードウェアスレッド16を含むプロセッサを含むことができる。この例では、ランタイム環境10、及び/または、リソース管理層14は、各プロセッサパッケージを別個のノードに区分して、各ノードのためのスケジューリングノード30を生成することができる。
別の例では、NUMAシステムにおいて、プロセッサ同士の間のメモリレイテンシーの相違及びメモリの異なる部分が実行メトリックとして用いられて、コンピューターシステムをNUMAノードに区分して各NUMAノードのためのスケジューリングノード30を生成することができる。NUMAノードは、各々プロセッシングリソース及びローカルメモリのセットを有することができ、そこで、NUMA内のプロセッシングリソースによるローカルメモリへのアクセスは、該プロセッシングリソースによる別のNUMAノード内のローカルメモリへのアクセスより速い。
さらなる例では、ランタイム環境10、及び/または、リソース管理層14は、コンピューターシステムのプロセッサリソースのセットを任意にまたは部分的に任意にノードに区分することができ、各ノードのためのスケジューリングノード30を生成することができる。
また別の例では、ランタイム環境10、及び/または、リソース管理層14は、異なるタイプまたは異なる速度のプロセッシングリソースを、ノードに区分することができ、各ノードは多くの同じタイプのプロセッシングリソースまたは多くの同じ速度のプロセッシングリソースを含む。ランタイム環境10、及び/または、リソース管理層14は、各ノードのためのスケジューリングノード30を生成する。
ランタイム環境10、リソース管理層14、及び/または、スケジューラー22は、ブロック54において示すように、各スケジューリングノード30のためのそれぞれのスケジューリングコレクション40を生成する。図1に示すように、スケジューラー22は、スケジューリングコレクション40(1)−40(L)を生成し、スケジューリングコレクション40(1)−40(L)は、それぞれスケジューリングノード30(1)−30(L)に対応している。各スケジューリングコレクション40は、タスクを格納するためのコンピューターシステムのメモリにおいてデータ構造を形成し、データ構造は、対応するスケジューリングノード30が提供している仮想プロセッサ32及び他のスケジューリングノード30が提供している仮想プロセッサ32で検索可能である。
ランタイム環境10、リソース管理層14、及び/または、スケジューラー22は、ブロック56において示すように、1つまたは複数の実行メトリックに基づいて全検索順位または部分的な検索順位にスケジューリングコレクション40(1)−40(L)をマッピングする。スケジューラー22は、実行メトリックを用いて、異なるスケジューリングノード30同士の間で実行コストを比較する。実行コストは、ノード距離に関して説明することができる。異なるノード距離は、所与のスケジューリングノード30と他のスケジューリングノード30との間の異なる実行特徴を表す。ノード距離については、所与のスケジューリングノード30に関してより低い実行コストを有するスケジューリングノード30は、所与のスケジューリングノード30により近いと説明され、所与のスケジューリングノード30に関してより高い実行コストを有するスケジューリングノード30は、所与のスケジューリングノード30からより遠いと説明される。スケジューラー22は、1つの実施形態において、ノード距離を用いて、スケジューリングコレクション40(1)−40(L)を全検索順位または部分的な検索順位にマッピングする。
検索順位を生成するために、スケジューラー22は、スケジューリングコレクション40のセットをノード距離に基づいて1つまたは複数のスケジューリングコレクション40のサブセットにグループ化する。各スケジューリングコレクション40は、対応するスケジューリングノード30から、ゼロのノード距離を有する。従って、各スケジューリングコレクション40は、対応するスケジューリングノード30のためのスケジューリングコレクション40(例えば、レベル0のサブセット)の第1のレベルのサブセットを形成する。スケジューリングコレクション40の次のレベルのサブセット(例えば、レベル1のサブセット)のために、スケジューラー22は、所与のスケジューリングノード30から最も近い範囲のノード距離を有する1つまたは複数のスケジューリングコレクション40のセットをグループ化する。次に、スケジューラー22は、所与のスケジューリングノード30から次に最も近い範囲のノード距離を有する1つまたは複数のスケジューリングコレクション40のセットを、スケジューリングコレクション40の次のレベルのサブセット(例えば、レベル2のサブセット)にグループ化する。スケジューリングコレクション40のセット内の全ての所望のスケジューリングコレクション40が検索順位に組み込まれるまで、スケジューラー22は、所与のスケジューリングノード30から連続した範囲のノード距離を有する1つまたは複数のスケジューリングコレクション40のセットを、スケジューリングコレクション40の連続したレベルのサブセットにグループ化し続ける。
スケジューリングコレクション40の検索順位は、スケジューリングノード30において利用可能なプロセッシングリソース(即ち、仮想プロセッサ32)によって用いられて実行するタスクを検索する。検索順位は、サブセット(例えば、所与のスケジューリングノード30から同じノード距離または類似したノード距離を有するスケジューリングノード30のサブセットに対応する2つ以上のスケジューリングコレクション40のサブセット)のうちの少なくともいくつかにおいて2つ以上のスケジューリングコレクション40をグループ化することによって、部分的な検索順位を特定することができる。部分的な検索順位が特定される場合には、プロセッシングリソースは、ラウンドロビン方式の順位または他の適切な順位でスケジューリングコレクション40のサブセットを検索することができる。検索順位は、また、各サブセットにおいて1つだけスケジューリングコレクション40をグループ化することによって、または2つもしくはそれ以上のスケジューリングコレクション40の各サブセットの検索順位を特定することによって、全検索順位を特定してもよい。
図3A乃至3Bはそれぞれ、4つのハードウェアスレッド16のセットをそれぞれ含む4つのプロセッサパッケージを有するNUMAコンピューターシステム61における部分的な検索順位60の実施形態を示す図及び表である。それぞれのローカルメモリは、各プロセッサ(図示せず)に接続している。プロセッサパッケージの各ハードウェアスレッド16は、類似した実行メトリックを有するので、各プロセッサパッケージは、図3A−3Bの例においてレベル0のノードを形成する。従って、レベル0のスケジューリングノード30(1)は、ハードウェアスレッド16(1)−16(4)を含み、レベル0のスケジューリングノード30(2)はハードウェアスレッド16(5)−16(8)を含み、レベル0のスケジューリングノード30(3)は、ハードウェアスレッド16(9)−16(12)を含み、レベル0のスケジューリングノード30(4)は、ハードウェアスレッド16(9)−16(12)を含む。レベル0スケジューリングノードの30(1)−30(4)は、スケジューリングコレクション40(1)−40(4)のそれぞれのレベル0のサブセットに対応する。
図3Aに示したように、スケジューリングノード30(1)−(2)は、ノード30(1)−30(2)の間の相互接続62(1)を共有し、スケジューリングノード30(1)−(3)は、ノード30(1)−30(3)の間の相互接続62(2)を共有し、スケジューリングノード30(2)−(4)は、ノード30(2)−30(4)の間の相互接続62(3)を共有し、スケジューリングノード30(3)−(4)は、ノード30(3)−30(4)の間の相互接続62(4)を共有する。相互接続62(1)−62(4)は全て、図3Aの例において同じ速度特性及び同じ帯域幅特性を有すると見なされる。
相互接続62を共有する任意の2つのノード30同士の間のノード距離は、相互接続62を共有していない任意の2つのノード30同士の間のノード距離より短い。例えば、ノード30(1)は、相互接続62(1)及び62(3)の両方、または、相互接続62(2)及び62(4)の両方のいずれかを用いてノード30(4)にアクセスする。同様に、ノード30(2)は、相互接続62(1)及び62(2)の両方、または相互接続62(3)及び62(4)の両方を用いてノード30(3)にアクセスする。
ノード30(1)から、スケジューリングコレクション40のレベル1のサブセットは、スケジューリングノード30(2)−30(3)に対応するスケジューリングコレクション40(2)−40(3)を含み、スケジューリングコレクション40のレベル2のサブセットは、スケジューリングノード30(4)に対応するスケジューリングコレクション40(4)を含む。
ノード30(2)から、スケジューリングコレクション40のレベル1のサブセットは、スケジューリングノード30(1)−30(4)に対応するスケジューリングコレクション40(1)−40(4)を含み、スケジューリングコレクション40のレベル2のサブセットは、スケジューリングノード30(3)に対応するスケジューリングコレクション40(3)を含む。
ノード30(3)から、スケジューリングコレクション40のレベル1のサブセットは、スケジューリングノード30(1)−30(4)に対応するスケジューリングコレクション40(1)−40(4)を含み、スケジューリングコレクション40のレベル2のサブセットは、スケジューリングノード30(2)に対応するスケジューリングコレクション40(2)を含む。
ノード30(4)から、スケジューリングコレクション40のレベル1のサブセットは、スケジューリングノード30(2)−30(3)に対応するスケジューリングコレクション40(2)−40(3)を含み、スケジューリングコレクション40のレベル2のサブセットは、スケジューリングノード30(1)に対応するスケジューリングコレクション40(1)を含む。
図2を再度参照すると、スケジューラー22は、ブロック58において示したように、それぞれのタスクのセットをスケジューリングコレクション40(1)−40(M)に配置する。スケジューラー22に示される1つまたは複数のタスクの各セットは、プロセス12によって明示的に、またはランタイム環境10によって暗示的に生成することができる(例えば、親のないエージェントを生成することによってまたはオペレーティングシステム実行コンテキストをスケジューラー22の実行コンテキストに導入することによって)。スケジューラー22は、任意の適切なアルゴリズムに基づいてまたはスケジューリングノード30のトポロジーに基づいて、スケジューリングコレクション40にタスクのセットを挿入する。例えば、スケジューラー22は、ラウンドロビン方式の順位でスケジューリングコレクション40にタスクのセットを挿入することができる。別の例として、スケジューラー22は、スケジューリングノード30の所望のトポロジーに対応するスケジューリングコレクションにタスクのセットを挿入することができる。
図4は、実行するタスクを選択する方法の実施形態を示すフローチャートである。図4の方法は、図1のスケジューラー22の実施形態を参照して説明される。
スケジューラー22は、ブロック72において示すように、仮想プロセッサ32が利用可能になるかどうかを判断する。スケジューラー22は、プロセス12を実行させながら、連続してこの機能を実行することができる。仮想プロセッサ32で実行している実行コンテキスト34の完了、ブロッキング、または他の中断(例えば、明示的なイールドまたは強制的なプリエンプション)で、仮想プロセッサ32は利用可能になって新しいタスクを実行する。
スケジューラー22は、仮想プロセッサ32が利用可能になると判断すると、実行する利用可能な仮想プロセッサ32のためのタスクの検索を開始する。スケジューラー22は、ブロック74において示すように、最初にスケジューリングコレクション40の第1のサブセットにおいて実行するタスクを見つけようとする。スケジューリングコレクション40の第1のサブセットは、利用可能な仮想プロセッサ32を含むスケジューリングノード30に対応しているスケジューリングコレクション40である。スケジューラー22は、任意の適切な方法で第1のサブセットを検索することができる。
実行可能なタスクが第1のサブセットにおいて見つけられた場合、ブロック76に示すように、スケジューラー22は、タスクを仮想プロセッサ32によって実行させる。仮想プロセッサ32は、前の実行コンテキスト34の続きとしてタスクを実行しようとする。続きとしてタスクを実行することができない場合、仮想プロセッサ32は、タスクによって表される実行コンテキストへ全オペレーティングシステムのコンテキストの切り替えを行なう。
実行可能なタスクが第1のサブセットにおいて見つけられない場合、ブロック78に示すように、スケジューラー22は、スケジューリングコレクション40の別のサブセットが検索順位によって特定されているかどうかを判断する。第1のレベルのサブセットが検索順位によって特定される唯一のサブセットである場合、実行可能なタスクが見つけられるまで、スケジューラー22は第1のサブセットを検索し続ける。
別のサブセットが検索順位で特定された場合、ブロック80において示すように、スケジューラー22は、次のサブセットの1つまたは複数のスケジューリングコレクション40において実行するタスクを見つけようとする。実行可能なタスクが次のサブセットのスケジューリングコレクション40において見つけられる場合、ブロック82において示すように、スケジューラー22は、タスクを仮想プロセッサ32に実行させる。実行可能なタスクがスケジューリングコレクション40の次のサブセットにおいて見つけられない場合、スケジューラー22はブロック78の機能を繰り返す。スケジューラー22は、実行可能なタスクが見つけられるまでまたは検索順位で特定される全てのサブセットが検索されるまで、特定の検索順位でスケジューリングコレクション40のサブセットを検索し続ける。
上記の実施形態では、スケジューラー22は、次のサブセットに取り掛かる前に、繰り返してスケジューリングコレクション40の上記のサブセットのうちの1つまたは複数を検索するように構成されていてもよい。スケジューラー22はまた、1つまたは複数の遅延パラメータに基づいて1つまたは複数のサブセットの検索を遅延させるよう構成されていてもよい。
上記の実施形態では、スケジューリングノード30は、対応するスケジューリングコレクション40を事実上所有する。プロセス12のいくつかの実行ポイントで、所与のスケジューリングノード30の全てのプロセッシングリソースは、所与のスケジューリングノード30に対応するスケジューリングコレクション40以外のスケジューリングコレクション40が提供している実行タスクであってもよい。このシナリオでは、所与のスケジューリングノード30の所有されたスケジューリングコレクション40は、スケジューリングコレクション40になり、スケジューリングコレクション40から、所与のスケジューリングノード30のほとんどのプロセッシングリソースはタスクを実行していてかつスケジューリングノード30はランブリングノードになる。ランブリングノードが後で元々所有するスケジューリングコレクション40が提供しているタスクを実行しているプロセッシングリソースを有する場合、ランブリングノードは再び元々所有するスケジューリングコレクション40の所有者になる。
図5A乃至5Bは、スケジューリングコレクション40のそれぞれの実施形態40A及び40Bを示すブロック図である。
図5Aは、スケジュールグループ90(1)−90(P)のセットを含むスケジューリングコレクション40の実施形態40Aを示すブロック図である。ここで、Pは1以上の整数であって、P番目のスケジュールグループ90を示す。スケジュールグループ90(1)−90(P)のセットは、矢印96で示すようなスケジューリングリングに配される。各スケジュールグループ90は、実行可能なコレクション92、作業キュー93、及び0または1以上のワークスティーリングキュー94のセットを含む。各実行可能なコレクション92は、実行可能なタスクまたは実行コンテキストのリストを含む。実行コンテキストがブロックされないようになるかまたは新しい実行可能な実行コンテキスト(おそらく生成された要求)がプロセス12によってスケジューラー22に示されると、スケジューラー22は実行コンテキストを実行可能なコレクション92に加える。作業キュー93は、矢印95で示すようにワークスティーリングキュー94のリストを含み、ワークスティーリングキュー93からのタスクを実行している実行コンテキストを追跡する。各ワークスティーリングキュー94は、割り当てられた実行コンテキストを備えていない1つまたは複数の認識されていないタスクを含む。
スケジューラー22は、いつでも(例えば、他のタスクを実行するのに応じて)0または1以上のスケジュールグループ90のそれぞれのセットをスケジューリングコレクション40A(図1)に配置する。各スケジュールグループ90は、プロセス12のタスクのセットを含む。かかる実施形態において、スケジューラー22は、別のスケジューリングコレクション40または40Aにおいてタスクを検索する前に、スケジューリングコレクション40Aにおいて各スケジュールグループ90を検索することができる。
スケジューラー22は、利用可能な仮想プロセッサ32が最近実行可能なタスクを得たスケジュールグループ90において、またはインデックス97(例えば、ラウンドロビン方式のインデックス)で示されたスケジュールグループ90において、実行するタスクを見つけようとすることができる。各スケジュールグループ90において、スケジューラー22は、(例えば、ラウンドロビン方式の順位で)他のスケジュールグループ90において認識されたタスクを検索する前に、スケジュールグループ90の実行可能なコレクション92において認識されたタスクを検索することができる。認識されたタスクが見つからない場合、スケジューラー22は、他のスケジュールグループ90(例えば、ラウンドロビン方式の順位で)において認識されていないタスクを検索する前に、スケジュールグループ90のワークスティーリングキュー94において認識されていないタスクを検索することができる。スケジューラー22は、インデックス97を更新して実行可能なタスクが見つかったスケジュールグループ90を識別することができる。
プロセス12は、スケジューラー22のスケジュールグループ90を用いて、作業、公正さ、及び進捗のローカリティのための構造を提供することができる。各スケジュールグループ90のタスクは、論理的に関連する作業(例えば、共通のルートのタスクに由来するタスクのコレクション)、ハードウェアトポロジー(例えば、非均等型メモリアーキテクチャ(NUMA))、またはこれらの組合せによりグループ化することができる。
図5Bは、スケジューリングコレクション40の実施形態40Bを示すブロック図であり、スケジューリングコレクション40は、それぞれの仮想プロセッサ32(1)−32(N)に対応しているタスク44(1)−44(N)のローカルコレクションを含む。
1つまたは複数のスケジューリングコレクション40がローカルコレクション44を含む実施形態において、スケジューラー22の実行コンテキストのセットはまた、それぞれのローカルコレクション44(1)−44(N)において実行可能な実行コンテキスト46(1)−46(N)のセットを含む。各実行コンテキスト46は、タスク36の実行によってブロックされていない関連するタスク47を有し、タスク36は実行されたかまたは、実行コンテキスト46を含むローカルコレクション44に対応している仮想プロセッサ32で実行中である。
スケジューラー22は、最初に、スケジューリングコレクション40Bにおいてほかの場所を検索する前に、利用可能な仮想プロセッサ32に対応したローカルコレクション44においてタスクを見つけようとすることができる。ローカルコレクション44は、スケジューラー22が、ハードウェアスレッド16によって生じるかもしれないメモリローカリティ及び他の効果を利用できるようにする。プロセス12を実行する際に、スケジューラー22は、ブロックされないようになる各待ち依存の実行を、実行コンテキストをブロックされないようにする仮想プロセッサ32に対応しているローカルコレクション44に割り当てることができる。仮想プロセッサ32が利用可能になると、仮想プロセッサ32は、対応するローカルコレクション44において最近追加された実行コンテキストを実行しようとし、仮想プロセッサ32に対応しているメモリ階層に格納されたデータを利用しようとする。
実行可能なタスクが、利用可能な仮想プロセッサ32に対応しているローカルコレクション44において見つけられない場合、スケジューラー22は、スケジューリングノード30の別の仮想プロセッサ32に対応しているローカルコレクション44において実行可能なタスクを見つけようとすることができる。スケジューラー22は、ラウンドロビン方式の順位でまたは他の適切な順位で、他の仮想プロセッサ32に対応しているローカルコレクション44にアクセスして、実行可能なタスクが見つけられるローカルコレクション44において最も長い間使われていない追加された実行コンテキストを実行することができる。
他の実施形態では、他のスケジューリングコレクション40は、スケジューリングコレクション40A(図5A)のスケジュールグループ90及びスケジューリングコレクション40B(図5B)のローカルコレクション44の両方を含むことができる。
図6A乃至6Bは、スケジューリングコレクション40を備えたスケジューラー22を含むランタイム環境10を実施するよう構成されたコンピューターシステム100の実施形態100A及び100Bをそれぞれ示すブロック図である。
図6Aに示すように、コンピューターシステム100Aは、1つまたは複数のプロセッサパッケージ102、メモリシステム104、0または1以上の入力デバイス/出力デバイス106、0または1以上のディスプレイデバイス108、0または1以上の周辺デバイス110、及び0または1以上のネットワークデバイス112を含む。プロセッサパッケージ102、メモリシステム104、入力デバイス/出力デバイス106、ディスプレイデバイス108、周辺デバイス110、及びネットワークデバイス112は、任意の適切なタイプ、数及び構成のコントローラー、バス、インターフェース、及び/または他の有線接続もしくは無線接続を含む相互接続114のセットを用いて通信を行う。
コンピューターシステム100Aは、汎用または特定の目的のために構成された任意の適切な処理デバイスを表す。コンピューターシステム100Aの例は、サーバ、パーソナルコンピューター、ラップトップコンピューター、タブレットコンピューター、携帯情報端末(PDA)、携帯電話、及びオーディオデバイス/ビデオデバイスを含む。コンピューターシステム100Aの構成要素(即ち、プロセッサパッケージ102、メモリシステム104、入力デバイス/出力デバイス106、ディスプレイデバイス108、周辺デバイス110、ネットワークデバイス112、及び相互接続114)は、共通の筐体(図示せず)に含まれていてもよいしまたは任意の適切な数の別個の筐体(図示せず)に含まれていてもよい。
プロセッサパッケージ102は、ハードウェアスレッド16(1)−16(M)を含む。プロセッサパッケージ102の各ハードウェアスレッド16は、メモリシステム104に格納された命令にアクセスして実行するよう構成されている。命令は、基本入出力システム(BIOS)またはファームウェア(図示せず)、オペレーティングシステム(OS)、ランタイムプラットフォーム122、アプリケーション124、及びリソース管理層14(図1にも示されている)を含むことができる。各ハードウェアスレッド16は、入力/出力デバイス106、ディスプレイデバイス108、周辺デバイス110、及び/または、ネットワークデバイス112から受信した情報と連動してまたは当該情報に応じて、命令を実行することができる。
コンピューターシステム100Aは、OS120をブートして実行する。OS120は、プロセッサパッケージ102が実行可能な命令を含み、コンピューターシステム100Aの構成要素を管理し、アプリケーション124が該構成要素にアクセスして使用できるようにする機能のセットを提供する。1つの実施形態では、OS120は、ウィンドウズ(商標登録)のオペレーティングシステムである。他の実施形態では、OS120は、コンピューターシステム100Aでの使用に適した別のオペレーティングシステムである。
リソース管理層14は、OS120とともに実行可能な命令を含み、図1を参照して上記に説明したようにハードウェアスレッド16を含むコンピューターシステム100Aのリソースを割り当てる。リソース管理層14は、1つまたは複数のアプリケーション124が利用可能な機能のライブラリとしてまたはOS120の統合された部分としてコンピューターシステム100Aに含むことができる。
ランタイムプラットフォーム122は、OS120及びリソース管理層14とともに実行可能な命令を含み、ランタイム環境10を生成してアプリケーション124にランタイム機能を提供する。これらのランタイム機能は、図1を参照して上記に更に詳細に説明したようなスケジューラー機能を含む。ランタイム機能は、アプリケーション124の一部として、1つまたは複数のアプリケーション124に利用可能な機能のライブラリとして、またはOS120及び/もしくはリソース管理層14の統合された部分として、コンピューターシステム100Aに含むことができる。
各アプリケーション124は、OS120、リソース管理層14、及び/またはランタイムプラットフォーム122と連動して実行可能な命令を含み、所望の動作をコンピューターシステム100Aによって実行させる。各アプリケーション124は、上記に説明したようにプロセス12などの1つまたは複数のプロセスを表し、該プロセスは、ランタイムプラットフォーム122によって提供されるようなスケジューラー22を用いて実行することができる。
メモリシステム104は、命令及びデータを格納するよう構成された、任意の適切なタイプ、数、及び構成の揮発性の記憶装置または不揮発性の記憶装置を含む。メモリシステム104の記憶装置は、OS120、リソース管理層14、ランタイムプラットフォーム122、及びアプリケーション124を含むコンピューター実行可能命令を格納するコンピューター読取可能な記憶媒体を表す。命令は、本明細書において説明されたOS120、リソース管理層14、ランタイムプラットフォーム122及びアプリケーション124の機能及び方法を実行するコンピューターシステムによって実行可能である。メモリシステム104の記憶装置の例は、ハードディスクデバイス、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、フラッシュメモリドライブ及びフラッシュメモリカード、並びに磁気ディスク及び光ディスクを含む。
メモリシステム104は、プロセッサパッケージ102、入力デバイス/出力デバイス106、ディスプレイデバイス108、周辺デバイス110、及びネットワークデバイス112から受信した命令及びデータを格納する。メモリシステム104は、プロセッサパッケージ102、入力デバイス/出力デバイス106、表示デバイス108、周辺デバイス110、及びネットワークデバイス112に対して格納された命令及びデータを与える。
入力デバイス/出力デバイス106は、ユーザからコンピューターシステム100Aへの命令またはデータを入力しかつコンピューターシステム100Aからユーザへの命令及びデータを出力するよう構成された任意の適切なタイプ、数、及び構成の入力デバイス/出力デバイスを含む。入力デバイス/出力デバイス106の例は、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイヤル、ノブ、及びスイッチを含む。
ディスプレイデバイス108は、コンピューターシステム100Aのユーザにテキスト情報及び/またはグラフィック情報を出力するよう構成された任意の適切なタイプ、数、及び構成のディスプレイデバイスを含む。ディスプレイデバイス108の例は、モニタ、ディスプレイスクリーン、及びプロジェクタを含む。
周辺デバイス110は、コンピューターシステム100Aの1つまたは複数の他の構成要素で動作して一般的な処理機能または特定の処理機能を実行するよう構成された、任意の適切なタイプ、数、及び構成の周辺デバイスを含む。
ネットワークデバイス112は、コンピューターシステム100Aが1つまたは複数のネットワーク(図示せず)と通信できるよう構成された任意の適切なタイプ、数、及び構成のネットワークデバイスを含む。ネットワークデバイス112は、コンピューターシステム100Aが情報をネットワークに送信できるようにするかまたはコンピューターシステム100Aが情報をネットワークから受信できるようにする任意の適切なネットワーキングプロトコル及び/またはネットワーク構成により動作することができる。
図6Bは、コンピューターシステム100の実施形態100Bを示すブロック図である。コンピューターシステム100Bはまた、少なくともプロセッサパッケージ102及びメモリシステム104を含む。プロセッサパッケージ102は、プロセッサパッケージ102(1)−102(R)を含み、メモリシステム104は、メモリデバイス128(1)−128(R)のセットを含む。ここで、Rは2以上の整数であって、R番目のプロセッサパッケージ102及びR番目のメモリデバイス128のセットを表す。OS120、ランタイムプラットフォーム122、アプリケーション124、及びリソース管理層14は、各々、メモリデバイス104(1)−104(R)のうちの任意の適切なデバイスに格納することができる。
図6Bの実施形態では、各プロセッサパッケージ102(1)‐102(R)及びメモリデバイスのそれぞれのセット128(1)−128(R)が、ノードを形成する。ノードは、ノードの相互接続130の任意の適切なタイプ、数、及び/または組み合わせに相互接続されている。相互接続130の速度及び/または帯域幅は、ノード同士の間で変えることができる。
各プロセッサパッケージ102は、ハードウェアスレッド16(1)−16(4)のセットを含み、各ハードウェアスレッドは、L1(レベル1)キャッシュ(図示せず)を含む。各プロセッサパッケージ102も、それぞれのハードウェアスレッド16(1)(1)−16(1)(4)に対応するL2(レベル2)キャッシュ132(1)−132(4)のセットを含む。各プロセッサパッケージ102は更に、ハードウェアスレッド16(1)−16(4)のセット、システムリソースインターフェース136、クロスバースイッチ138、メモリコントローラー140、及びノードインターフェース142が利用可能なL3(レベル3)キャッシュを含む。システムリソースインターフェース136は、ノードリソース(図示せず)にアクセスできる。クロスバースイッチ138は、メモリコントローラー140及びノードインターフェース142とシステムリソースインターフェース136を相互接続する。メモリコントローラー140は、メモリデバイス128に接続している。ノードインターフェース142は、1つまたは複数のノード相互接続130に接続している。
ノードはローカルメモリ(即ち、メモリデバイス104のセット)を含むので、ノードのプロセッサパッケージ102によるローカルメモリへのアクセスは、他のノードのメモリへのアクセスより速い。更に、他のノードのメモリへのアクセスは、ノード同士の間の相互接続130の接続速度、帯域幅、キャッシュトポロジー、及び/または、NUMAノードの距離によって決まる。例えば、いくつかのノードは、アドバンストマイクロデバイセズ社のハイパートランスポートバスまたはインテル社のCSIバスなどの、相対的に速い相互接続130に接続することができ、一方他のノードは1つまたは複数の相対的に遅い相互接続130に接続することができる。
他の実施形態では、各プロセッサパッケージ102は、他の構成及び/または数のキャッシュを含むことができる。例えば、各ハードウェアスレッド16は、他の実施形態において2つまたはそれ以上のL1キャッシュを含むことができ、L2キャッシュ及び/またはL3キャッシュは、他の実施形態において共有されていてもよいし共有されていなくてもよい。別の例として、他の実施形態は、追加のキャッシュ(例えば、レベル4(L4)キャッシュ)もしくはより少ないキャッシュを含んでいてもよいし、またはキャッシュを含まなくてもよい。
図1乃至5Bにおいて上記で説明した実施形態を参照すると、コンピューターシステム100Bのメモリレイテンシー及び相互接続レイテンシーは、スケジューリングノード30を形成する際にランタイム環境10、リソース管理層14、及び/またはスケジューラー30が考慮することができるノード距離を提供する。例えば、ランタイム環境10、リソース管理層14、及び/または、スケジューラー22は、対応しているスケジューリングコレクション40とともに、コンピューターシステム100Bにおいて各ノードのためのスケジューリングノード30を生成することができる。ランタイム環境10、リソース管理層14、及び/または、スケジューラー22は、ノード同士の間の相互接続トポロジーに基づいて、スケジューリングコレクション40を部分的な検索順位または全検索順位にマッピングすることができる。例えば、相対的に速い相互接続130に接続された任意の2つのノードは、同じスケジューリングノード及びスケジューリングコレクションのサブセットレベルへグループ化することができ、相対的に遅い相互接続130を有する及びノードは、相対的に速い相互接続130を含むスケジューリングノード及びスケジューリングコレクションのサブセットレベルより上位のスケジューリングノード及びスケジューリングコレクションのサブセットレベルへグループ化することができる。
検索順位で実行可能なタスクを求めてスケジューリングコレクション40を検索することによって、ノードのプロセッシングリソースは、コンピューターシステム100Bにおけるメモリローカリティの効果を利用する可能性を増大させる。同じスケジューリングコレクション40からのタスクは、別のスケジューリングコレクション40からのタスクよりノードのローカルメモリの階層に存在する共通のデータを有する可能性が高いかもしれない。
潜在的なローカリティの利点に加えて、上記の実施形態におけるスケジューリングノード及びスケジューリングコレクションの使用は、実行するタスクを検索するプロセッシングリソース同士の間のコンテンションを減らす能力をスケジューラーに与えることができる。異なったスケジューリングノードにおけるプロセッシングリソースは、異なった対応するスケジューリングコレクションにおいて実行可能なタスクの検索を開始する。そのように検索することによって、スケジューラーのタスクのコレクションに配されるロックまたは他の同期コンストラクトの数を減少することができる。
スケジューラーはまた、実行可能なタスクについての局所化された検索の結果として、多数のプロセッシングリソースを有するコンピューターシステムにも適合することができる。更に、スケジュールグループにおいてラウンドロビン方式の検索キュー及びワークスティーリングキューを用いて、公正さ及び進捗を維持しながら、スケジューラーは作業のローカリティを提供することができる。
本明細書において特定の実施形態が示されかつ説明されてきたが、様々な代わりの実施例及び/または等価な実施例によって、本発明の範囲から逸脱することなしに、示されかつ説明された特定の実施形態に代替されることを、当業者は認めることができる。本出願は、本明細書において検討された特定の実施形態のあらゆる適応形または変化形を含めることを意図している。従って、本発明は本発明の特許請求の範囲及び均等物によってだけ限定されることが意図されている。

Claims (15)

  1. コンピューターシステム(100A/100B)のプロセス(12)においてスケジューラー(22)によって実行される方法であって、
    利用可能になる第1のスケジューリングノード(10)における第1の複数のプロセッシングリソースのうちの1つに応じて、前記第1のスケジューリングノードに対応する第1のスケジューリングコレクション(40)において実行する第1のタスク(39/42)を検索するステップと、
    前記第1のスケジューリングコレクションにおいて実行する第1のタスクが見つからないと、前記第1の複数のプロセッシングリソースのうちの前記1つを用いて、第2の複数のプロセッシングリソース(16/32)を含む第2のスケジューリングノード(10)に対応している第2のスケジューリングコレクション(40)からの第2のタスク(39/42)を実行するステップと
    を含むことを特徴とする方法。
  2. 前記第1のスケジューリングコレクションにおいて前記第1のタスクが見つかると、前記第1の複数のプロセッシングリソースのうちの前記1つを用いて前記第1のタスクを実行するステップを更に含むことを特徴とする請求項1記載の方法。
  3. 前記第1のスケジューリングコレクションにおいて前記第1のタスクを求めてスケジュールグループの第1のセットを検索するステップを更に含むことを特徴とする請求項1記載の方法。
  4. 前記第2のスケジューリングコレクションにおいて前記第2のタスクを求めてスケジュールグループ(90)の第2のセットを検索するステップを更に含むことを特徴とする請求項3記載の方法。
  5. 前記第1の複数のプロセッシングリソースのうちの前記1つは、第1の仮想プロセッサ(32)及び第1のハードウェアスレッド(16)を含むことを特徴とする請求項1記載の方法。
  6. 前記第1のスケジューリングコレクションにおいて実行する第1のタスクが見つからないと、前記第1のスケジューリングノードを前記第2のスケジューリングノードに関係づける少なくとも1つの実行メトリックに基づいて前記第2のスケジューリングコレクションにおいて前記第2のタスクを検索するステップを更に含むことを特徴とする請求項1記載の方法。
  7. 前記第1の複数のプロセッシングリソースに対応しているローカルコレクション(44)において、実行する第3のタスク(39/42)を検索するステップと、
    前記ローカルコレクションにおいて前記実行する第3のタスクが見つかると、前記第1の複数のプロセッシングリソースのうちの前記1つを用いて前記第3のタスクを実行するステップとを更に含むことを特徴とする請求項1記載の方法。
  8. 前記第1のスケジューリングコレクションにおいて前記第1のタスクを検索するステップは更に、
    前記第1のスケジューリングコレクションにおいてスケジュールグループ(90)のセットにおいて認識されたタスク(39)を検索するステップと、
    前記スケジュールグループのセットにおいて、実行するための認識されたタスクが見つからないと、前記スケジュールグループのセットにおいて非認識のタスク(42)を検索するステップと、
    を含むことを特徴とする請求項1記載の方法。
  9. コンピューターシステム(100A/100B)によって実行されると、
    前記コンピューターシステムで実行しているプロセス(12)においてスケジューラー(22)のための第1のスケジューリングノード(30)及び第2のスケジューリングノード(30)を識別するステップと、
    第1のスケジューリングノード及び第2のスケジューリングノードにそれぞれ対応している第1のスケジューリングコレクション(40)及び第2のスケジューリングコレクション(40)を生成するステップと、
    タスクの第1のセット及び第2のセットを第1のスケジューリングコレクション及び第2のスケジューリングコレクション(39/40/42)に配置させるステップと
    を含む方法を実行するコンピューター実行可能命令を格納していることを特徴とするコンピューター読取可能な記憶媒体(104/128/132/134)。
  10. 前記方法は、
    前記第1のスケジューリングコレクション及び前記第2のスケジューリングコレクションを少なくとも部分的な検索順位にマッピングするステップを更に含むことを特徴とする請求項9記載のコンピューター読取可能な記憶媒体。
  11. 前記部分的な検索順位は、前記第1のスケジューリングノード及び前記第2のスケジューリングノードに関連する1つまたは複数の実行メトリックに基づいていることを特徴とする請求項10記載のコンピューター読取可能な記憶媒体。
  12. 前記第1のスケジューリングノード及び前記第2のスケジューリングノードは、リソース管理層によって割り当てられるプロセッシングリソースの第1のセット及び第2のセットをそれぞれ含むことを特徴とする請求項9記載のコンピューター読取可能な記憶媒体。
  13. 第1のメモリ及び第2のメモリは、前記プロセッシングリソースの第1のセット及び第2のセットに対応し、前記プロセッシングリソースの第1のセットによる前記第1のメモリへのアクセスは、前記プロセッシングリソースの第1のセットよる前記第2のメモリへのアクセスより速く、前記プロセッシングリソースの第2のセットによる前記第2のメモリへのアクセスは、前記プロセッシングリソースの第2のセットによる前記第1のメモリへのアクセスより早いことを特徴とする請求項12記載のコンピューター読取可能な記憶媒体。
  14. 前記方法は、
    実行メトリックに基づいて前記第1のスケジューリングノード及び前記第2のスケジューリングノードを識別するステップを更に含むことを特徴とする請求項9記載のコンピューター読取可能な記憶媒体。
  15. 前記実行メトリックは、不均等メモリアクセス(NUMA)距離を含むことを特徴とする請求項14記載のコンピューター読取可能な記憶媒体。
JP2011509509A 2008-05-16 2009-03-27 スケジューラーにおけるスケジューリングコレクション Active JP5597195B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/121,794 US8561072B2 (en) 2008-05-16 2008-05-16 Scheduling collections in a scheduler
US12/121,794 2008-05-16
PCT/US2009/038658 WO2009139966A1 (en) 2008-05-16 2009-03-27 Scheduling collections in a scheduler

Publications (2)

Publication Number Publication Date
JP2011521353A true JP2011521353A (ja) 2011-07-21
JP5597195B2 JP5597195B2 (ja) 2014-10-01

Family

ID=41317379

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011509509A Active JP5597195B2 (ja) 2008-05-16 2009-03-27 スケジューラーにおけるスケジューリングコレクション

Country Status (12)

Country Link
US (1) US8561072B2 (ja)
EP (1) EP2288990B1 (ja)
JP (1) JP5597195B2 (ja)
KR (1) KR101618892B1 (ja)
CN (1) CN102027452B (ja)
AU (1) AU2009246817B2 (ja)
BR (1) BRPI0910565A2 (ja)
CA (1) CA2720806C (ja)
ES (1) ES2699698T3 (ja)
MY (1) MY155867A (ja)
RU (1) RU2510527C2 (ja)
WO (1) WO2009139966A1 (ja)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10417051B2 (en) * 2008-05-23 2019-09-17 International Business Machines Corporation Synchronizing shared resources in an order processing environment using a synchronization component
US9417914B2 (en) * 2008-06-02 2016-08-16 Microsoft Technology Licensing, Llc Regaining control of a processing resource that executes an external execution context
KR101644800B1 (ko) * 2010-01-07 2016-08-02 삼성전자주식회사 컴퓨팅 시스템 및 방법
US8392920B2 (en) * 2010-01-27 2013-03-05 Microsoft Corporation Parallel query engine with dynamic number of workers
US8965966B2 (en) * 2010-12-15 2015-02-24 Sap Se System and method for logging a scheduler
KR101859188B1 (ko) * 2011-09-26 2018-06-29 삼성전자주식회사 매니코어 시스템에서의 파티션 스케줄링 장치 및 방법
US9191435B2 (en) * 2012-08-23 2015-11-17 TidalScale, Inc. Selective data migration or remapping of virtual processors to provide required data accessibility to processor cores
WO2014084820A1 (en) * 2012-11-28 2014-06-05 Hewlett-Packard Development Company, L.P. Regulating application task development
CN103699435B (zh) * 2013-12-25 2017-05-03 龙芯中科技术有限公司 负载均衡方法及装置
JP6241300B2 (ja) * 2014-02-04 2017-12-06 富士通株式会社 ジョブスケジューリング装置、ジョブスケジューリング方法、およびジョブスケジューリングプログラム
US20150227586A1 (en) * 2014-02-07 2015-08-13 Futurewei Technologies, Inc. Methods and Systems for Dynamically Allocating Resources and Tasks Among Database Work Agents in an SMP Environment
US10445123B2 (en) 2015-01-19 2019-10-15 Vmware, Inc. Hypervisor exchange with virtual-machine consolidation
US10725770B2 (en) * 2015-01-19 2020-07-28 Vmware, Inc. Hot-swapping operating systems using inter-partition application migration
CN107025131B (zh) * 2016-02-01 2020-12-29 腾讯科技(深圳)有限公司 一种任务调度方法及装置
US10353736B2 (en) 2016-08-29 2019-07-16 TidalScale, Inc. Associating working sets and threads
WO2018061825A1 (ja) * 2016-09-29 2018-04-05 日本電気株式会社 分散処理システム、分散処理方法、及び記録媒体
CN108667864B (zh) * 2017-03-29 2020-07-28 华为技术有限公司 一种进行资源调度的方法和装置
US11023135B2 (en) 2017-06-27 2021-06-01 TidalScale, Inc. Handling frequently accessed pages
US10817347B2 (en) 2017-08-31 2020-10-27 TidalScale, Inc. Entanglement of pages and guest threads
CN109885377B (zh) 2018-11-23 2023-04-28 中国银联股份有限公司 统一资源调度协调器及其创建虚拟机和/或容器的方法、统一资源调度系统
CN110362391B (zh) * 2019-06-12 2021-08-13 北京达佳互联信息技术有限公司 资源调度方法、装置、电子设备及存储介质
CN110362403A (zh) * 2019-06-25 2019-10-22 苏州浪潮智能科技有限公司 一种作业调度方法及装置
WO2021086839A1 (en) 2019-10-30 2021-05-06 TidalScale, Inc. Goal-directed software-defined numa working set management
CN113050874A (zh) * 2019-12-26 2021-06-29 华为技术有限公司 一种内存设置方法以及装置
US12118384B2 (en) * 2021-10-29 2024-10-15 Blackberry Limited Scheduling of threads for clusters of processors

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01316830A (ja) * 1988-06-16 1989-12-21 Hitachi Ltd タスク実行制御方式
JPH1078942A (ja) * 1996-09-02 1998-03-24 Nec Corp マルチプロセッサシステム
JPH11259318A (ja) * 1998-03-13 1999-09-24 Hitachi Ltd ディスパッチ方式

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04195577A (ja) * 1990-11-28 1992-07-15 Hitachi Ltd マルチプロセッサにおけるタスクスケジューリング方式
US5692193A (en) * 1994-03-31 1997-11-25 Nec Research Institute, Inc. Software architecture for control of highly parallel computer systems
US5586289A (en) * 1994-04-15 1996-12-17 David Sarnoff Research Center, Inc. Method and apparatus for accessing local storage within a parallel processing computer
US6105053A (en) * 1995-06-23 2000-08-15 Emc Corporation Operating system for a non-uniform memory access multiprocessor system
US6442585B1 (en) * 1997-11-26 2002-08-27 Compaq Computer Corporation Method for scheduling contexts based on statistics of memory system interactions in a computer system
US6952827B1 (en) * 1998-11-13 2005-10-04 Cray Inc. User program and operating system interface in a multithreaded environment
GB0013273D0 (en) * 2000-06-01 2000-07-26 Philips Electronics Nv Video signal encoding and buffer management
KR20020035580A (ko) 2000-06-27 2002-05-11 요트.게.아. 롤페즈 스케줄을 결정하는 방법, 스케줄러 및, 시스템
EP1182570A3 (en) * 2000-08-21 2004-08-04 Texas Instruments Incorporated TLB with resource ID field
US7234139B1 (en) * 2000-11-24 2007-06-19 Catharon Productions, Inc. Computer multi-tasking via virtual threading using an interpreter
US20030037091A1 (en) * 2001-08-09 2003-02-20 Kozo Nishimura Task scheduling device
US6874080B2 (en) * 2001-11-19 2005-03-29 Intel Corporation Context processing by substantially simultaneously selecting address and instruction of different contexts
US6901507B2 (en) * 2001-11-19 2005-05-31 Intel Corporation Context scheduling
JP2003263331A (ja) 2002-03-07 2003-09-19 Toshiba Corp マルチプロセッサシステム
US7181741B2 (en) * 2003-01-30 2007-02-20 Hewlett-Packard Development Company, L.P. Apparatus and method to minimize blocking overhead in upcall based MxN threads
US7321940B1 (en) * 2003-06-30 2008-01-22 Cisco Technology, Inc. Iterative architecture for hierarchical scheduling
US7610473B2 (en) * 2003-08-28 2009-10-27 Mips Technologies, Inc. Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US20050108711A1 (en) * 2003-11-13 2005-05-19 Infineon Technologies North America Corporation Machine instruction for enhanced control of multiple virtual processor systems
US7802255B2 (en) * 2003-12-19 2010-09-21 Stmicroelectronics, Inc. Thread execution scheduler for multi-processing system and method
US20050149916A1 (en) * 2003-12-29 2005-07-07 Tatiana Shpeisman Data layout mechanism to reduce hardware resource conflicts
US7873776B2 (en) * 2004-06-30 2011-01-18 Oracle America, Inc. Multiple-core processor with support for multiple virtual processors
US7886283B2 (en) * 2004-09-17 2011-02-08 The Regents Of The University Of California Phantom serializing compiler and method of operation of same
US20060168214A1 (en) * 2004-10-29 2006-07-27 International Business Machines Corporation System for managing logical partition preemption
JP4606142B2 (ja) * 2004-12-01 2011-01-05 株式会社ソニー・コンピュータエンタテインメント スケジューリング方法、スケジューリング装置およびマルチプロセッサシステム
US20060130062A1 (en) * 2004-12-14 2006-06-15 International Business Machines Corporation Scheduling threads in a multi-threaded computer
DE102004061339A1 (de) * 2004-12-20 2006-06-29 Infineon Technologies Ag Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren
US7657883B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US7752620B2 (en) * 2005-06-06 2010-07-06 International Business Machines Corporation Administration of locks for critical sections of computer programs in a computer that supports a multiplicity of logical partitions
GB0513045D0 (en) * 2005-06-27 2005-08-03 Vidus Ltd Resource scheduling method and system
US8112507B2 (en) * 2005-09-27 2012-02-07 Intel Corporation Remote node list searching mechanism for storage task scheduling
GB0519981D0 (en) * 2005-09-30 2005-11-09 Ignios Ltd Scheduling in a multicore architecture
US20070204268A1 (en) * 2006-02-27 2007-08-30 Red. Hat, Inc. Methods and systems for scheduling processes in a multi-core processor environment
KR100791296B1 (ko) 2006-03-03 2008-01-04 삼성전자주식회사 멀티 코어 시스템에서 협력적 스케줄링을 제공하는 장치 및방법
US8185422B2 (en) * 2006-07-31 2012-05-22 Accenture Global Services Limited Work allocation model
US7873964B2 (en) * 2006-10-30 2011-01-18 Liquid Computing Corporation Kernel functions for inter-processor communications in high performance multi-processor systems
CA2677131C (en) * 2007-02-06 2014-10-14 Mba Sciences, Inc. A resource tracking method and apparatus
WO2009029549A2 (en) * 2007-08-24 2009-03-05 Virtualmetrix, Inc. Method and apparatus for fine grain performance management of computer systems

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01316830A (ja) * 1988-06-16 1989-12-21 Hitachi Ltd タスク実行制御方式
JPH1078942A (ja) * 1996-09-02 1998-03-24 Nec Corp マルチプロセッサシステム
JPH11259318A (ja) * 1998-03-13 1999-09-24 Hitachi Ltd ディスパッチ方式

Also Published As

Publication number Publication date
BRPI0910565A2 (pt) 2015-09-22
AU2009246817A1 (en) 2009-11-19
CN102027452A (zh) 2011-04-20
EP2288990B1 (en) 2018-09-05
RU2010146457A (ru) 2012-05-20
WO2009139966A1 (en) 2009-11-19
EP2288990A1 (en) 2011-03-02
US20090288087A1 (en) 2009-11-19
MY155867A (en) 2015-12-15
CN102027452B (zh) 2014-04-02
KR101618892B1 (ko) 2016-05-09
EP2288990A4 (en) 2016-09-21
KR20110019729A (ko) 2011-02-28
CA2720806C (en) 2016-06-21
US8561072B2 (en) 2013-10-15
ES2699698T3 (es) 2019-02-12
AU2009246817B2 (en) 2014-04-24
RU2510527C2 (ru) 2014-03-27
JP5597195B2 (ja) 2014-10-01
CA2720806A1 (en) 2009-11-19

Similar Documents

Publication Publication Date Title
JP5597195B2 (ja) スケジューラーにおけるスケジューリングコレクション
JP5597196B2 (ja) プロセス内のスケジューラインスタンス
EP2288989B1 (en) Local collections of tasks in a scheduler
US10467051B2 (en) Support of non-trivial scheduling policies along with topological properties
US8156495B2 (en) Scheduling threads on processors
US8291426B2 (en) Memory allocators corresponding to processor resources
US10430233B1 (en) Scheduling computational tasks among multiple classes of storage resources based on job classification
US9378062B2 (en) Interface between a resource manager and a scheduler in a process
US9384063B2 (en) Eliding synchronization in a concurrent data structure

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111216

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130425

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130507

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130701

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130806

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130809

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140304

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140704

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20140711

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140808

R150 Certificate of patent or registration of utility model

Ref document number: 5597195

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250