JP5966927B2 - 分散処理装置及び分散処理システム - Google Patents

分散処理装置及び分散処理システム Download PDF

Info

Publication number
JP5966927B2
JP5966927B2 JP2012538551A JP2012538551A JP5966927B2 JP 5966927 B2 JP5966927 B2 JP 5966927B2 JP 2012538551 A JP2012538551 A JP 2012538551A JP 2012538551 A JP2012538551 A JP 2012538551A JP 5966927 B2 JP5966927 B2 JP 5966927B2
Authority
JP
Japan
Prior art keywords
continuation
worker
processing
storage unit
data
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
JP2012538551A
Other languages
English (en)
Other versions
JPWO2012049794A1 (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
Publication of JPWO2012049794A1 publication Critical patent/JPWO2012049794A1/ja
Application granted granted Critical
Publication of JP5966927B2 publication Critical patent/JP5966927B2/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/54Interprogram communication
    • 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/461Saving or restoring of program or task context

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、分散処理技術に関する。
従来の分散処理システムの一例が下記非特許文献1に記載されている。この従来の分散処理システムは、MapReduceと呼ばれ、分散ファイルシステムと、計算を実行する複数のノードとから構成される。分散ファイルシステム上では、一つのファイルが、いくつかの断片(チャンク)に分割されることにより、複数のノードに跨って置かれる。更に、各チャンクは、そのコピーが複数のノードに置かれることによって、信頼性を確保している。
このような構成を有する従来の分散処理システムは以下のように動作する。計算は、MapフェーズとReduceフェーズという二つのフェーズで行われる。計算を実行する各ノードでは、ワーカ(worker)プロセスが動作する。ワーカプロセスは、Mapフェーズを実行するタスク(以下、Mapタスクと表記する)及びReduceフェーズを実行するタスク(以下、Reduceタスクと表記する)の少なくとも一方を割り当てられる。ワーカプロセスはこのように割り当てられたタスクを実行することにより、計算が進行する。
Mapフェーズでは、各ノードのワーカプロセスで動作する各Mapタスクがそれぞれローカル又はリモートから少なくとも1つの入力ファイルのチャンクを読み込み、ユーザにより定義されたMap関数を並列に実行する。ここでは、このMap関数の出力がキーとバリューのペアと仮定する。続いて、ユーザにより定義した分割関数により、どのキーをどのReduceタスクに渡すかが決定される。この決定に基づき、キーとバリューのペアが分類され、そのペアがローカルディスクに保存される。
続いて、Reduceタスクが自身の担当するキーとバリューのペアを各ノードに要求して受信する。Reduceタスクは、同じキー毎にバリューをまとめ、このまとめられたデータを入力としてユーザにより定義されたReduce関数を実行する。各Reduceタスクは、計算結果をそれぞれ別ファイルとして分散ファイルシステム上に出力する。
従来の分散処理システムは、このような動作過程においてノードに障害が発生した場合には、次のように動作する。まず、当該分散処理システムは、障害が発生したノードにおいて実行を完了した全てのMapタスクを別のノードで再実行する。これは、Mapタスクの出力が障害の生じたノード上のローカルディスクに保存されているためである。このように再実行が行われた場合、データ入力元が変わるため、ワーカプロセスにその旨が伝えられる。なお、Reduceタスクは再実行されなくてもよい。これは、実行完了後の結果が既に分散ファイルシステム上に保存されているためである。
Jeffrey Dean, Sanjay Ghemawat, "MapReduce: Simplified Data Processing on Large Clusters", OSDI, pages 137-150, 2004
上述したように、従来の分散処理システムとしてのMapReduceにおいてノードに障害が発生した場合には、障害が発生したノードにおいて実行を完了した全てのMapタスクを再実行しなければならない。つまり、従来の分散処理システムでは、タスクの処理途中における実行状態が保存されず、タスクの処理途中における実行状態に回復することができない。よって、システム全体の復帰時間が遅れる恐れがある。
MapReduceは、入出力結果を高信頼な分散ファイルシステム上に保存することにより、高信頼化が図られている。よって、ユーザは、高信頼化を望む場合には、記述したいアルゴリズムをMapReduceにより提供される枠組みで動作するように変更する必要がある。
本発明の目的は、柔軟性があり信頼性の高い分散処理技術を提供することにある。
本発明の各態様では、上述した課題を解決するために、それぞれ以下の構成を採用する。
本発明の第1の態様は、分散処理装置に関する。第1の態様に係る分散処理装置は、複数の処理によって構成されるタスクに含まれるいずれかの前記処理をつ以上含、なおかつそのタスクの処理途中のデータを保持する継続オブジェクトを格納するオブジェクト格納部と、このオブジェクト格納部から取り出された継続オブジェクトを実行する処理手段と、当該オブジェクト格納部に格納されるデータを実行状態ファイルに保存する保存処理手段とを備える。処理手段は、第1の前記継続オブジェクトに含まれる処理を実行することにより、実行された処理の結果を用いて実行される他の処理を含む第2の継続オブジェクトを生成し、第2の継続オブジェクトをオブジェクト格納部に格納した後、第1の継続オブジェクトの実行を終了する。
本発明の第2の態様は、複数のコンピュータから構成される分散処理システムに関する。第2の態様に係る分散処理システムは、複数のワーカプロセスとマスタプロセスとを備える。各ワーカプロセスは、タスクを構成する複数の処理のうちの少なくとも1つを含みそのタスクの処理途中のデータを保持する継続オブジェクトを格納するオブジェクト格納部と、このオブジェクト格納部から取り出された継続オブジェクトを実行する処理手段と、当該オブジェクト格納部に格納されるデータを実行状態ファイルに保存する保存処理手段と、をそれぞれ含む。処理手段は、第1の前記継続オブジェクトに含まれる処理を実行することにより、実行された処理の結果を用いて実行される他の処理を含む第2の継続オブジェクトを生成し、第2の継続オブジェクトをオブジェクト格納部に格納した後、第1の継続オブジェクトの実行を終了する。マスタプロセスは、所定のタイミングで各ワーカプロセスに対し上記保存処理手段による保存処理を要求し、この保存処理を要求する際には、各ワーカプロセスに対し、各実行状態ファイルを保存させる他のワーカプロセスをそれぞれ指定する。
また、本発明の別態様は、少なくとも1つのコンピュータが上記各構成の処理をそれぞれ実行する分散処理方法であってもよいし、当該各構成を少なくとも1つのコンピュータに実現させるプログラムであってもよいし、このようなプログラムを格納したコンピュータに読み取り可能な記憶媒体であってもよい。この記憶媒体は、非一時的な有形の媒体を含む。
本発明によれば、柔軟性があり信頼性の高い分散処理技術を提供することができる。
図1は、第1実施形態における分散処理装置の構成例を示す概念図である。 図2Aは、一般的なタスクプログラムの例を示す図である。 図2Bは、第1実施形態における分散処理装置で処理されるタスクプログラムの例を示す図である。 図3は、継続オブジェクトの生成を実現するプログラムの例を示す図である。 図4は、第2実施形態における分散処理システムの処理構成例を示す概念図である。 図5は、第2実施形態におけるワーカの動作例を示すフローチャートである。 図6は、タスクの処理内容例及び処理タイミング例を示す図である。 図7は、同期変数の読み出し時の動作例を示すフローチャートである。 図8は、同期変数への書き込み時の動作例を示すフローチャートである。 図9は、同期変数を利用したタスクプログラム例を示す図である。 図10は、キューからデータを取り出す際の動作例を示すフローチャートである。 図11は、キューにデータを投入する際の動作例を示すフローチャートである。 図12は、マスタが各ワーカの実行状態を保存する際の動作例を示すフローチャートである。 図13は、第2実施形態の分散処理システムにおけるワーカに障害が発生した場合のリカバリ動作の例を示すフローチャートである。 図14は、第2実施形態における分散処理システムのハードウェア構成例を示す概念図である。
以下、本発明の実施の形態について図面を用いて説明する。尚、すべての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。また、以下に挙げた各実施形態はそれぞれ例示であり、本発明は以下の各実施形態の構成に限定されない。
[第1実施形態]
〔装置構成例〕
図1は、第1実施形態における分散処理装置1の構成例を示す概念図である。
分散処理装置1は、図1に示すように、ハードウェア構成として、CPU(Central Processing Unit)10、メモリ(RAM(Random Access Memory)12、ROM(Read Only Memory、図示せず)、ハードディスク(HDD)14等)、入出力インタフェース16等を有する。これら各ハードウェア要素は例えばバス18により接続される。なお、本実施形態は、分散処理装置1のハードウェア構成を限定しない。
分散処理装置1は、ワーカプロセス200(以降、単にワーカと表記する場合もある)を有する。ワーカ200は、オブジェクト格納部201、処理部202、保存処理部250を有する。分散処理装置1は、例えば、メモリに記憶されるプログラムがCPU10により実行されることにより、このような各処理部を実現する。
ワーカ200は、処理対象であるタスク(ジョブ)を受けると、そのタスクを処理する。タスクは、MapReduceのMapタスクやReduceタスクであってもよいし、MapReduce以外のプロジェクトで生成されたタスク(処理対象)であってもよい。このように、ワーカ200は、タスクを処理するためのフレームワークを実現する。
オブジェクト格納部201は、タスクを構成する複数の処理単位のうちの少なくとも1つを含みそのタスクの処理途中のデータを保持する継続オブジェクトを格納する。処理部202は、オブジェクト格納部201から継続オブジェクトを取り出し、その取り出された継続オブジェクトを実行する。保存処理部250は、オブジェクト格納部201に格納されるデータを実行状態ファイルに保存する。
このように、ワーカ200では、オブジェクト格納部201に格納される継続オブジェクトが処理部202で実行されることにより、タスクが処理される。ここで、継続オブジェクトに含まれる少なくとも1つの処理単位とは、言い換えれば、タスク(プログラム)の実行においてある時点から後に行われる処理を表す概念である。例えば、継続オブジェクトは、C++におけるメンバ変数及びrun()のようなメンバ関数が定義されたクラスオブジェクトとして実現される。
〔動作例〕
次に、第1実施形態における分散処理装置1の動作例について説明する。
図2Aは、一般的なタスクプログラムの例を示し、図2Bは、第1実施形態における分散処理装置1で処理されるタスクプログラムの例を示す。図3は、継続オブジェクトの生成を実現するプログラムの例である。図2A、図2B及び図3のプログラム例は、C++言語で記述された例であるが、本実施形態はこのような記述言語を限定するものではない。
図2A及び図2Bは、共に、引数に与えられた変数aに1を加算した値に2を掛ける処理(=(a+1)×2)を行うプログラムである。図2Aで示される一般的なプログラムでは、inc関数でa+1が実行され、その結果を引数にdbl関数が呼び出され、dbl関数で引数が2倍され、その結果が出力される。この場合、例えば、inc関数終了時点でのプログラムの実行状態は、C++のフレームワークが管理するスタック上に置かれている。よって、この時点での実行状態を保存し、かつ、その保存されたデータでリカバリを行うことは難しい。
図2Bで示されるタスクが処理される場合には、第1実施形態における分散処理装置1は、2つの継続オブジェクトを生成し、それらをオブジェクト格納部201に格納し、処理部202がそれらを順次実行する。例えば、変数aに1が与えられて関数sampleが実行される場合、inc関数及び引数a(=1)を引数としてmake_cont関数が呼び出されることで継続オブジェクトが生成される。この継続オブジェクトは、inc関数を処理単位とし、変数aの値(=1)及びretポインタをタスクの処理途中のデータとして保持する。そして、この生成された継続オブジェクトを引数にput_ctrlpool関数が呼び出されることで、その継続オブジェクトがオブジェクト格納部201に格納される。
処理部202は、オブジェクト格納部201からその継続オブジェクトを取り出し、引数で与えられたinc関数を引数a(=1)を用いて実行する。図2Bの例ではinc関数内においてもmake_cont関数が呼び出されるため、処理部202は、dbl関数及び引数x(=2)(=1+1)を用いて次の継続オブジェクトを生成する。生成された次の継続オブジェクトは、dbl関数を処理単位とし、inc関数で計算された変数xの値(=2)及びretポインタをタスクの処理途中データとして保持する。
処理部202は、この生成された次の継続オブジェクトを引数にput_ctrlpool関数を呼び出すことで、その継続オブジェクトをオブジェクト格納部201に格納する。その後、処理部202は、その継続オブジェクトをオブジェクト格納部201から取り出し、実行する。これにより、引数x(=2)を用いてdbl関数が実行され、変数retの値が4に設定されることで処理が完了する。
このような例によれば、inc関数の処理が終了した時点でのタスクの実行状態は、オブジェクト格納部201に格納されている継続オブジェクトが保持している。すなわち、その継続オブジェクトにより、inc関数で計算された変数xの値(=2)が保持されている。よって、保存処理部250がこの継続オブジェクトを実行状態ファイルに保存することで、その後、処理部202にこの継続オブジェクトを処理させることが可能となる。
このように、第1実施形態によれば、タスクの実行途中の状態を反映する継続オブジェクトを実行状態ファイルに保存することができるため、ワーカ200におけるタスク実行途中の状態を容易に保存することができる。このような効果は、処理対象のタスクを限定することなく、ワーカ200で実現されるため、様々なタスクを処理対象とすることができ、ひいては、柔軟なシステム構築が可能となる。
上述したmake_cont関数は、図3の例のように実現することができる。図3(a)の例では、make_cont関数は、テンプレート関数として実現されている。make_cont関数中では、テンプレートクラスであるRealCont2クラスのオブジェクトが生成され、このオブジェクトが返される。ここで、図3(a)の例は、継続オブジェクト(RealCont2クラスのオブジェクト)が2つの引数を持つ関数に対応しているが、本実施形態は、このような継続オブジェクトに限定しない。例えば、様々な数の引数を持つ関数に対応するようなクラスライブラリを用意するようにすればよい。
図3(b)には、Contクラスの定義が示される。Contクラスには、run()メンバ関数及びset_arg1()メンバ関数が定義される。set_arg1()メンバ関数は、後述する同期変数及びキューを扱う際に利用される。
図3(c)には、RealCont2クラスの定義が示される。コンストラクタでは、与えられた引数がメンバ変数に保存される。また、run()メンバ関数が定義され、このrun()メンバ関数により、関数ポインタと引数を使ってその関数ポインタで示される関数が実行される。
このような継続オブジェクトの生成関数及び継続オブジェクトをオブジェクト格納部201へ投入する関数は、ライブラリとして実現されてもよい。このライブラリは、予めワーカ200に含まれていてもよいし、他のプロセスから送られるようにしてもよい。
上述の動作例で示されたように、処理部202は、継続オブジェクトを実行することにより次の継続オブジェクトを生成し、この生成された次の継続オブジェクトをオブジェクト格納部201に格納した後、上記継続オブジェクトの実行を終了するようにしてもよい。このようにすれば、継続オブジェクトの実行が次の継続オブジェクトのオブジェクト格納部201への格納後に終了するため、その終了時点で処理部202の処理を一時停止させることができ、結果としてタスクの実行途中の状態を確実に保存することができる。
各継続オブジェクトは、その処理時間が十分短くなるように区分けされたものであることが望ましい。例えば、繰り返し数の多いループやブロック処理など、実行時間が長くなる処理がタスクに含まれる場合には、残りの処理を継続オブジェクトにし、オブジェクト格納部201に投入するようタスクのプログラムが記述されることが望ましい。このようにすれば、従来手法では、タスクの処理を一旦開始するとその処理が終了するまで、タスクオブジェクトの実行が継続されるのに対して、本実施形態によれば、途中でタスクの処理を停止させることができる。具体的には、処理部202が1つの継続オブジェクトの処理を終了し、次の継続オブジェクトを取り出す前の時点でその処理部202を一時停止させることができる。結果、オブジェクト格納部201内のデータを保存することで、その時点での実行状態が確実に保存されることになる。
[第2実施形態]
図4は、第2実施形態における分散処理システム2の処理構成例を示す概念図である。
第2実施形態における分散処理システム2は、複数のワーカ200、各ワーカ200を制御するマスタプロセス(以降、単にマスタと表記する場合もある)100、スペアワーカプロセス(以降、単にスペアワーカと表記する場合もある)300等を有する。なお、第2実施形態における分散処理システム2のハードウェア構成については後述する。
〔ワーカプロセス〕
第2実施形態では、各ワーカ200は、制御用継続プール211、制御処理スレッド212、計算用継続プール213、計算処理スレッド214、ディスク用継続プール215、ディスク処理スレッド216、ネットワーク用継続プール217、ネットワーク処理スレッド218、同期変数220、同期変数テーブル225、キュー230、キューテーブル235、保存処理部250、要求応答部260、ワーカテーブル270等を有する。
制御用継続プール211、計算用継続プール213、ディスク用継続プール215及びネットワーク用継続プール217は、第1実施形態におけるオブジェクト格納部201に相当する。つまり、第2実施形態における各ワーカ200は、複数のオブジェクト格納部201をそれぞれ有する。図4の例に示されるように、各オブジェクト格納部201がそれぞれ異なる計算資源を利用する継続オブジェクトを格納するように構成されるのが好ましい。以降、制御用継続プール211、計算用継続プール213、ディスク用継続プール215及びネットワーク用継続プール217を単に継続プールと表記する場合もある。
計算用継続プール213は、タスクの中で計算のみを行う部分を処理単位とする継続オブジェクトを格納する。ディスク用継続プール215は、タスクの中でハードディスク14に対する入出力処理のみを処理単位とする継続オブジェクトを格納する。ネットワーク用継続プール217は、入出力インタフェース16に含まれるネットワークインタフェースに対する入出力処理のみを処理単位とする継続オブジェクトを格納する。制御用継続プール211は、上記以外の処理を処理単位とする継続オブジェクトを格納する。図2B及び図3の例におけるput_ctrlpool関数が制御用継続プール211に継続オブジェクトを格納する関数であるとすれば、例えば、各継続プールに格納するための各関数(put_networkpoolなど)がそれぞれ用意されることで実現可能である。
制御用継続プール211、計算用継続プール213、ディスク用継続プール215及びネットワーク用継続プール217は、このように複数の継続オブジェクトをそれぞれ格納可能である。各継続プールは、キューやスタックのようなデータの集合を扱う任意のデータ構造でそれぞれ実現される。
制御処理スレッド212、計算処理スレッド214、ディスク処理スレッド216及びネットワーク処理スレッド218は、第1実施形態における処理部202に相当する。つまり、第2実施形態における各ワーカ200は、複数の処理部202をそれぞれ有する。図4の例では、各処理部202がそれぞれ異なる計算資源を利用する継続オブジェクトを実行するように設けられる。計算資源とは、例えば、ハードディスクのメモリ資源であり、ネットワークを利用するためのプロトコルスタックの資源であり、ディスプレイに表示させるための画像処理資源である。もちろん、異なる処理部202が同じ計算資源を利用する各継続オブジェクトを処理するようにしてもよい。このように各処理部202は、それぞれ実行すべき継続オブジェクトを格納する各オブジェクト格納部201にそれぞれ対応付けられており、予め決まったオブジェクト格納部201から取得した継続オブジェクトをそれぞれ実行する。
制御処理スレッド212は、制御用継続プール211から取り出される継続オブジェクトを実行する。計算処理スレッド214は、計算用継続プール213から取り出される継続オブジェクトを実行する。ディスク処理スレッド216は、ディスク用継続プール215から取り出される継続オブジェクトを実行する。ネットワーク処理スレッド218は、ネットワーク用継続プール217から取り出される継続オブジェクトを実行する。このような構成によれば、各継続オブジェクトを並列に実行することができる。以降、制御処理スレッド212、計算処理スレッド214、ディスク処理スレッド216及びネットワーク処理スレッド218を単に処理スレッドと表記する場合もある。
各処理スレッドは、継続オブジェクトの処理を完了させる度に、スレッド停止要求の有無を確認する。このスレッド停止要求の有無は、要求応答部260から各処理スレッドに通知される。この通知は、要求応答部260と各処理スレッドとの間で共有されるメモリにスレッド停止要求の有無を示すデータを書き込むことで実現されてもよい。各処理スレッドは、スレッド停止要求が有ると判断すると、処理を停止する、即ち、対応する継続プールからの継続オブジェクトの取り出しを保留する。
各ワーカ200は、各継続オブジェクトを並列に実行することができるようにするために、各継続オブジェクト間でデータの同期を取るための機構をそれぞれ有する。この同期機構は、同期変数220、同期変数テーブル225、キュー230、キューテーブル235により実現される。
同期変数220は、未定義の変数値が読み出し処理されるとその処理がブロックされ、その変数値が定義されるとブロックされていた処理が再開されて変数値が読み出される、そのようなデータ構造である。但し、本実施形態における変数同期機構は、処理をブロックすることなく変数同期を可能とすることで、継続オブジェクトの実行時間を短くする。同期変数220は、例えば同期変数オブジェクトとして実現される。
本実施形態における変数同期機構は、以下のように動作する。変数同期機構は、同期変数220の読み出し時に継続オブジェクトの指定を受け、同期変数220が定義状態となるまでその継続オブジェクトを保持し、同期変数220が定義状態となればその継続オブジェクトをその同期変数220を引数として、対応する処理スレッドに実行させる。これにより、その処理スレッドは、実行中の継続オブジェクトにより未定義状態の同期変数220の読み出しが行われる場合には、次の継続オブジェクトをその同期変数220に登録した後、その継続オブジェクトの実行を終了する。
変数同期機構は、同期変数220が利用される場合には、同期変数テーブル225に、その同期変数220に関する情報を格納する。つまり、同期変数テーブル225には、利用されている各同期変数220についての情報がそれぞれ格納される。同期変数220に関する情報としては、その同期変数220を識別するための識別情報(以降、同期変数IDと表記する)、その同期変数220のオブジェクトが格納される。
同期変数220は、他のワーカ200からも定義され得る。ここで、リカバリが行われた場合、同期変数220のアドレスが変化する。よって、他のワーカ200から同期変数220を指定する際、そのアドレスを用いることはできないため、同期変数220は上述のように同期変数IDで管理される。他のワーカ200は、この同期変数IDを用いて、同期変数220を指定する。
キュー230は、有限又は無限のデータサイズを持つ。本実施形態では、説明の便宜のためにキューの例を示したが、一般的にデータ保持部と呼ぶことができる。すなわち、本実施形態は、このデータ保持機構をキューに限定するものではなく、データ保持機構はスタック等のようなデータ構造であってもよい。
キュー230は、有限サイズで定義されている場合、そのサイズ以上にデータを投入しようとする処理がブロックされ、保持されていないデータを取り出そうとする処理がブロックされる、そのようなデータ構造である。但し、本実施形態におけるデータ同期機構は、処理をブロックすることなくデータ保持を可能とすることで、継続オブジェクトの実行時間を短くする。キュー230は、例えばキューオブジェクトとして実現される。
キュー230は、投入待ちリスト及びデータ待ちリストを持ち、次のように動作する。キュー230は、キュー230へのデータ投入時、キュー230からのデータ取出し操作時に継続オブジェクトの指定を受ける。キュー230は、データ投入時であって投入されるデータのサイズ分キュー230に空きがない場合には、その投入されるデータ及びその指定された継続オブジェクトを関連付けて投入待ちリストに保持する。
キュー230は、空きが生じると、投入待ちリストに保持されていたデータをキュー230に投入した後、そのデータに関連付けられた継続オブジェクトを対応する処理スタックに実行させる。また、キュー230は、データ取出し時であって取り出すべきデータがキュー230にない場合には、その指定された継続オブジェクトをデータ待ちリストに保持する。キュー230は、データがキュー230に投入されると、そのデータを取り出し、データ待ちリストに保持されていた継続オブジェクトをその取り出されたデータを引数として、対応する処理スタックに実行させる。これにより、処理スタックは、実行中の継続オブジェクトにより空のキュー230からのデータ取り出し処理又はキュー230への制限を超えるデータ投入処理が行われる場合には、次の継続オブジェクトをそのキュー230と関連付けて保持した後、その継続オブジェクトの実行を終了する。
キュー230が利用される場合には、キューテーブル235に、そのキュー230に関する情報が格納される。つまり、キューテーブル235には、利用される各キュー230についての情報がそれぞれ格納される。キュー230に関する情報としては、そのキュー230を識別するための識別情報(以降、キューIDと表記する)、そのキュー230のオブジェクトが格納される。
キュー230は、他のワーカ200からも利用され得る。ここで、リカバリが行われた場合、キュー230のアドレスが変化する。よって、他のワーカ200からキュー230を指定する際、そのアドレスを用いることはできないため、キュー230は上述のようにキューIDで管理される。他のワーカ200は、このキューIDを用いて、キュー230を指定する。
このような変数同期機構及びデータ保持機構は、例えば、ライブラリとして実現される。このライブラリは、予めワーカ200に含まれていてもよいし、他のプロセスから送られるようにしてもよい。
上述したように、継続プール211、213、215及び217、同期変数220及びキュー230は、ワーカ200内の処理スレッドのみでなく、他のワーカ200から利用されることも可能である。即ち、第2実施形態は、或るワーカ200が、他のワーカ200の継続プールに継続オブジェクトを投入すること、他のワーカ200の同期変数220を定義及び参照すること、他のワーカ200のキュー230にデータを投入すること、他のワーカ200のキュー230からデータを取り出すことを可能とする。これを可能とするために、ワーカ200間通信が行われる。
ワーカテーブル270は、ワーカ200間通信のために利用される。ワーカテーブル270は、各ワーカ200についてそのワーカ200を識別するためのワーカID及びアドレス情報をそれぞれ格納する。アドレス情報とは、そのワーカ200が存在する装置のIPアドレスやポート番号等である。他のワーカ200の継続プール、同期変数、キュー等にアクセスしたい処理スレッドは、このワーカテーブル270から他のワーカ200のアドレスを取得し、このアドレスを指定してアクセスする。ワーカ200間の通信手法自体は、RPC(Remote Procedure Call)で利用されているような周知の通信手法が利用されればよいため、ここでは説明を省略する。
保存処理部250は、要求応答部260からの指示に応じて、継続プール211、213、215及び217に格納されるデータに加えて、上述の同期変数220に関するデータ、キュー230に関するデータ及びワーカテーブル270を実行状態ファイルに保存する。同期変数220に関するデータとしては、同期変数テーブル225に格納される各同期変数220に関する同期変数ID及び同期変数オブジェクト、並びに、各同期変数220に登録される継続オブジェクトが保存される。キュー230に関するデータとしては、キューテーブル235に格納される各キュー230に関するキューID及びキューオブジェクト、並びに、各キュー230に登録される継続オブジェクトが保存される。なお、保存処理部250による実行状態ファイルの保存には、保存時とリカバリ時との整合性(ポインタ操作等)が取られるように、例えば、シリアライズ機構が利用される。
更に、保存処理部250は、要求応答部260からリカバリの指示を受けた場合には、最近保存された実行状態ファイル内のデータで自ワーカ200の動作状態をリカバリする。つまり、当該実行状態ファイル内のデータが各継続プール、各同期変数220、各キュー230、同期変数テーブル225、キューテーブル235にそれぞれ反映される。
要求応答部260は、マスタ100からの要求を受け付け、その要求に応じた処理を行う。要求応答部260の具体的処理については、動作例の項において説明する。
〔マスタプロセス〕
マスタ100は、ワーカ制御部101を有する。マスタ100は、ワーカ制御部101を介して、処理対象となるタスクのエントリ処理、各ワーカ200の実行状態ファイルの保存、各ワーカ200の障害発生のチェック、ワーカ200に障害が生じた場合のリカバリ等を行う。タスクのエントリ処理では、ワーカ制御部101は、例えば、そのタスクで指定されたワーカ200の制御用継続プール211にそのタスクの継続オブジェクトを投入する。
ここで、ワーカ200に障害が生じた場合のリカバリとは、障害が検知された際に保存されている実行状態ファイルが示す実行状態に、全ワーカ200を戻すことを意味する。その他、ワーカ制御部101の具体的処理については、動作例の項において説明する。
〔スペアワーカプロセス〕
スペアワーカ300は、障害が発生したワーカ200の代替として動作するプロセスである。よって、スペアワーカ300は、代替対象となるワーカ200と同じ処理部を有していればよい。スペアワーカ300は、ワーカ200に障害が発生した際に生成されてもよいし、予め、ワーカ200と同時期に生成されるようにしてもよい。スペアワーカ300の具体的処理についても、動作例の項において説明する。
〔動作例〕
以下、第2実施形態における分散処理システム2の動作例について説明する。
まず、各ワーカ200の動作例について図5及び図6を用いて説明する。図5は、第2実施形態におけるワーカ200の動作例を示すフローチャートである。図6は、タスクの処理内容例及び処理タイミング例を示す図である。
ワーカ200において、制御処理スレッド212は、制御用継続プール211から継続オブジェクトを取り出す前に、スレッド停止要求の有無を確認する(S501)。制御処理スレッド212は、スレッド停止要求が有ると判断すると(S501;YES)、処理を停止する(S505)。処理停止以降、制御処理スレッド212は、任意のタイミングでスレッド実行要求の有無を確認し、スレッド実行要求があれば再度処理を開始するようにしてもよいし、要求応答部260からスレッド実行要求を受けた際に処理を開始するようにしてもよい。
一方、制御処理スレッド212は、スレッド停止要求が無いと判断すると(S501;NO)、自スレッドに対応する制御用継続プール211に継続オブジェクトが格納されているか否かを判定する(S502)。制御処理スレッド212は、制御用継続プール211に継続オブジェクトが格納されていない場合には(S502;NO)、制御用継続プール211に継続オブジェクトが投入されるか、又は、スレッド停止要求がくるまで待機する(S506)。
制御処理スレッド212は、制御用継続プール211に継続オブジェクトが格納されている場合には(S502;YES)、制御用継続プール211から継続オブジェクトを取り出す(S503)。制御処理スレッド212は、その取り出した継続オブジェクトを実行する(S504)。継続オブジェクトに次の継続オブジェクトの生成処理が含まれている場合には、制御処理スレッド212は、次の継続オブジェクトを生成し、対応する継続プールにその生成された継続オブジェクトを投入する。制御処理スレッド212は、継続オブジェクトの実行が完了すると、次の継続オブジェクトを取り出す前に、再度、スレッド停止要求の有無を確認する(S501)。このような動作は、計算処理スレッド214、ディスク処理スレッド216、ネットワーク処理スレッド218においても同様である。
第2実施形態では、ワーカ200内に複数の処理スレッドが存在するため、上述のような処理が並列に実行され得る。例えば、図6(a)に示すようなタスクがワーカ200に投入されたと仮定する。この例のタスクは処理A及び処理Bを含み、処理Aには、計算A、ディスクアクセス処理A(図6(a)に示すディスクI/O A)及びネットワーク処理A(図6(a)に示すネットワークI/O A)が含まれ、処理Bには、計算B、ディスクアクセス処理B及びネットワーク処理Bが含まれる。
この場合、計算Aを含む継続オブジェクト及び計算Bを含む継続オブジェクトが計算用継続プール213に投入され、ディスクアクセス処理Aを含む継続オブジェクト及びディスクアクセス処理Bを含む継続オブジェクトがディスク用継続プール215に投入され、ネットワーク処理Aを含む継続オブジェクト及びネットワーク処理Bを含む継続オブジェクトがネットワーク用継続プール217に順次投入される。
計算処理スレッド214、ディスク処理スレッド216及びネットワーク処理スレッド218は、対応する各継続プールから継続オブジェクトをそれぞれ取り出し、取り出された各継続オブジェクトをそれぞれ実行する。結果、図6(b)に示されるように、処理A内の各処理単位及び処理B内の各処理単位はそれぞれシーケンシャルに処理されつつ、計算Bとディスクアクセス処理A、及び、ディスクアクセス処理Bとネットワーク処理Aとがそれぞれ並列に処理される。
このように第2実施形態によれば、第1実施形態と同様の効果、即ち、タスク実行途中の状態を容易に保存することができること、柔軟なシステム構築を可能とすることという効果を奏しつつ、更に、高速処理を可能とする。
次に、各ワーカ200における同期変数220の読み出し時及び同期変数220への書き込み時の動作について図7及び図8を用いて説明する。図7は、同期変数220の読み出し時の動作例を示すフローチャートであり、図8は、同期変数220への書き込み時の動作例を示すフローチャートである。図7及び8に示される動作は、例えば、上述の図5に示す動作例における継続オブジェクトの実行(S504)に含まれる。
同期変数220の読み出し時には、処理スレッドは、継続オブジェクトを引数として与え、同期変数220に対して読み出し要求を行う(S701)。処理スレッドは、この同期変数220が定義済みか否かを確認する(S702)。処理スレッドは、この同期変数220が定義済みでなければ(S702;NO)、引数として与えられた継続オブジェクトを同期変数220に登録し(S704)、処理を終了させる。
処理スレッドは、同期変数220が定義済みであれば(S702;YES)、引数として与えられた継続オブジェクトに対応する関数の第1引数として同期変数220の値を設定し、その継続オブジェクトを実行する(S703)。なお、この動作例では、同期変数220の値を継続オブジェクトに対応する関数の第1引数に設定しているが、本実施形態はこのような形態に限定するものではない。例えば、同期変数220の値は第2引数に設定されてもよい。
同期変数220への書き込み時には、処理スレッドは、値を引数として与えることにより同期変数220の定義要求を行う(S801)。処理スレッドは、その同期変数220に登録されていた継続オブジェクトが存在すれば(S802;YES)、その登録されている継続オブジェクトに対応する関数の第1引数として同期変数220の値を設定し、その継続オブジェクトを実行する(S803)。一方、処理スレッドは、その同期変数220に登録されていた継続オブジェクトが存在しない場合には(S802;NO)、処理を終了する。
図9は、同期変数220を利用したタスクプログラム例を示す図である。図9のタスクプログラム例は、図2Bの例を同期変数220を用いるように変更したものである。
図9の例では、Sync<int>がint型の変数を保持する同期変数220である。sample関数では、同期変数aの値を読み出すために、make_cont_noarg1関数により継続オブジェクトが作成され、この継続オブジェクトを引数として与えて同期変数aのreadメンバ関数が呼ばれる。ここで、make_cont_noarg1関数は、inc関数のポインタと変数retとを引数として、継続オブジェクトを生成する。
readメンバ関数に指定された継続オブジェクトは、同期変数aの値が定義されると、第1引数に同期変数aの値を指定して実行される。このために、例えば、図3の例の場合、継続オブジェクトに対し、set_arg1()メンバ関数が呼び出される。
一方、dbl関数では、writeメンバ関数を用いて同期変数retの値が定義されている。これにより、同期変数retの値を待っていた継続オブジェクト、即ち、同期変数retが未定義のため登録されていた継続オブジェクトが存在すれば、その継続オブジェクトが実行される。同期変数220は上述のように同期変数IDで管理される。そこで、図9の例では、例えば、Sync型の変数が、内部に同期変数IDを持ち、readメンバ関数やwriteメンバ関数において同期変数テーブル225からその同期変数IDに対応するその同期変数220のアドレスが取得されるようにしてもよい。
次に、各ワーカ200におけるキュー230からデータを取り出す際及びキュー230にデータを投入する際の動作について図10及び図11を用いて説明する。図10は、キュー230からデータを取り出す際の動作例を示すフローチャートであり、図11は、キュー230にデータを投入する際の動作例を示すフローチャートである。図10及び図11に示される動作は、例えば、上述の図5に示す動作例における継続オブジェクトの実行(S504)に含まれる。
キュー230からデータを取り出す際には、処理スレッドは、継続オブジェクトを引数として与え、キュー230からのデータの取り出し要求を行う(S1001)。処理スレッドは、キュー230が空の場合には(S1002;YES)、引数として与えられた継続オブジェクトをそのキュー230のデータ待ちリストに登録する(S1003)。
一方、処理スレッドは、キュー230が空でない場合(S1002;NO)、キュー230からデータを取り出す(S1004)。続いて、処理スレッドは、引数として与えられた継続オブジェクトに対応する関数の第1引数としその取り出されたデータを設定し、その継続オブジェクトを実行する(S1005)。
その後、処理スレッドは、キュー230の投入待ちリストが空か否かを確認する(S1006)。処理スレッドは、投入待ちリストが空であれば(S1006;YES)、処理を終了し、投入待ちリストが空でなければ(S1006;NO)、その投入待ちリストからデータと継続オブジェクトとのペアを取り出す(S1007)。処理スレッドは、取り出されたデータをそのキュー230に投入し(S1008)、同様に取り出された継続オブジェクトを実行する(S1009)。
キュー230にデータを投入する際には、処理スレッドは、継続オブジェクトを引数として与え、キュー230へのデータの投入を要求する(S1101)。続いて、処理スレッドは、その投入すべきデータのサイズ分、キュー230に空きがあるか否かを判定する(S1102)。処理スレッドは、キュー230に空きがない場合(S1102;NO)、その投入すべきデータと継続オブジェクトとのペアをそのキュー230の投入待ちリストに登録する(S1103)。
一方、処理スレッドは、キュー230に空きがある場合(S1102;YES)、そのキュー230にそのデータを投入し(S1104)、更に、引数として与えられた継続オブジェクトを実行する(S1105)。
その後、処理スレッドは、そのキュー230のデータ待ちリストが空か否かを判定する(S1106)。処理スレッドは、データ待ちリストが空である場合には(S1106;YES)、処理を終了する。一方、処理スレッドは、データ待ちリストが空でない場合(S1106;NO)、そのデータ待ちリストから継続オブジェクトを取り出す(S1107)。
続いて、処理スレッドは、キュー230からデータを取り出し(S1108)、上記取り出された継続オブジェクトに対応する関数の第1引数としてその取り出されたデータを設定し、その継続オブジェクトを実行する(S1109)。これにより、キュー230からデータを取り出す際にキュー230が空だった場合の処理が継続される。
次に、各ワーカ200の実行状態を保存する際の動作例について図12を用いて説明する。図12は、マスタ100が各ワーカ200の実行状態を保存する際の動作例を示すフローチャートである。マスタ100は、所定の周期で、以下のような各ワーカ200の実行状態を保存する処理を実行する。なお、この処理は、所定の周期に限らず、任意のタイミングで実行されるようにしてもよい。
実行状態の保存処理を開始すると、マスタ100のワーカ制御部101は、全ワーカ200に対して、スレッド停止要求を送る(S1201)。これにより、上述したように、各ワーカ200の各処理スレッドはそれぞれ、スレッド停止要求の有無を確認することにより(図5のS501)、処理を停止する(図5のS505)。このとき、例えば、各ワーカ200の要求応答部260は、自ワーカ200内の全処理スレッドの停止を確認し、その旨をマスタ100に通知する。
ワーカ制御部101は、全ワーカ200の全処理スレッドの停止を確認すると(S1202)、続いて、全ワーカに実行状態の保存要求を送る(S1203)。この要求により、各ワーカ200の保存処理部250がその時点での保存対象データをシリアライズし、実行状態ファイルに保存する。保存対象データには、制御用継続プール211、計算用継続プール213、ディスク用継続プール215及びネットワーク用継続プール217に格納されているデータ、同期変数220に関するデータ、キュー230に関するデータ、ワーカテーブル270のデータが含まれる。
更に、ワーカ制御部101は、全ワーカ200に対して、保存された実行状態ファイルを指定された他のワーカに送信するように要求する(S1204)。例えば、他のワーカとして、そのワーカが実行される装置(ノード)とは異なる装置上で実行されるワーカが指定される。これは、ノード障害時にはその障害ノードに保存された実行状態ファイルにアクセスできなくなるからである。これにより、各ワーカ200の保存処理部250は、保存された実行状態ファイルのコピーを指定された他のワーカに送信する。結果、各ワーカ200の実行状態ファイルは、少なくとも2つの装置(ノード)にそれぞれ保存される。ワーカ制御部101は、各ワーカ200の実行状態ファイルが保存されるワーカの情報を保持する。
ワーカ制御部101は、全ワーカが実行状態の保存と、他のワーカへの実行状態ファイルの送信とを完了したことを確認すると(S1205)、全ワーカ200に対して、全処理スレッドの再開を要求する(S1206)。これにより、全ワーカ200の全処理スレッドにおける或る時点の実行状態が保存される。
なお、上記手順では、マスタ100のワーカ制御部101が各ワーカ200を制御する例が示されたが、ワーカ制御部101は、全ワーカ200に実行状態保存要求のみを送るようにし、各ワーカ200がスレッドの停止、実行状態ファイルの保存及び他のワーカへの送信、スレッドの再開を制御するようにしてもよい。
最後に、第2実施形態の分散処理システム2におけるワーカに障害が発生した場合のリカバリ動作の例について図13を用いて説明する。図13は、第2実施形態の分散処理システム2におけるワーカに障害が発生した場合のリカバリ動作の例を示すフローチャートである。
マスタ100は、ワーカ制御部101を介して、所定の周期で各ワーカ200の障害発生状況を確認する(S1301、S1302、S1302;NO)。なお、この処理は、所定の周期に限らず、任意のタイミングで実行されるようにしてもよい。
マスタ100のワーカ制御部101は、障害の発生したワーカ(以降、障害ワーカと表記する)が存在すると判断すると(S1302;YES)、障害ワーカ以外の正常ワーカに対してリカバリ要求を送る(S1303)。この要求を受けた各正常ワーカでは、保存処理部250が、最近保存された実行状態ファイル内のデータで自ワーカ200の動作状態をリカバリする。具体的には、保存処理部250は、各処理スレッドを停止させた後、実行状態ファイル内のデータを各継続プール、同期変数220、同期変数テーブル225、キュー230、キューテーブル235、ワーカテーブル270に反映させる。
続いて、ワーカ制御部101は、スペアワーカ300に対してリカバリ要求を送る(S1304)。このリカバリ要求には、例えば、障害ワーカの実行状態ファイルを持つワーカのワーカIDが含まれる。これにより、スペアワーカ300では、保存処理部250が、そのワーカIDで特定される他のワーカから実行状態ファイルを取得し、その実行状態ファイルに含まれるデータを用いて動作状態をリカバリする。これにより、スペアワーカ300では、障害ワーカの実行状態が回復されることになる。
ワーカ制御部101は、障害ワーカを除く全ワーカ(スペアワーカ300を含む)のリカバリが完了したことを確認すると(S1305)、その各ワーカにワーカテーブル270の更新を要求する(S1306)。これにより、スペアワーカ300を含む各ワーカでは、障害ワーカの情報とその代替として利用されたスペアワーカ300の情報がワーカテーブル270に反映される。
ワーカ制御部101は、全ワーカのワーカテーブル270が更新されたことを確認すると(S1307)、全ワーカに全処理スレッドの再開を要求する(S1308)。正常ワーカ及びスペアワーカ300は、この要求を受け付け、各処理スレッドを再開させる。これにより、ワーカの障害発生が検知された時点から直近に保存された実行状態により、分散処理システム2の動作状態が復旧する。
このように第2実施形態では、同期変数220及びキュー230というデータ同期の機構が設けられているため、タスクの並列処理が可能となり、処理の高速化を実現することができる。更に、第2実施形態は、実行状態保存時には、同期変数220及びキュー230に関するデータも保存対象としているため、完全なる実行状態の保存を可能としている。
更に、第2実施形態では、マスタ100が各ワーカ200の実行状態の保存を制御しつつ、各ワーカ200の障害発生状況を確認する。そして、障害発生時には、実行状態ファイル及びスペアワーカが用いられることにより、障害発生前の実行状態に回復して実行が再開されるため、高信頼な処理を可能としている。
〔ハードウェア構成]
図14は、第2実施形態における分散処理システム2のハードウェア構成例を示す概念図である。第2実施形態における分散処理システム2は、複数のコンピュータ5により構成される。ここで、コンピュータ5とは、CPU10、メモリ(RAM12、ROM(図示せず)、ハードディスク(HDD)14等)、入出力インタフェース16等を含み、メモリに格納されたプログラムを実行するためのハードウェア要素群を示す概念である。よって、コンピュータ5は、パーソナルコンピュータのような1台の装置として実現されたものであってもよいし、CPUボードといった1台の装置に複数装着可能な単位であってもよい。上述の説明ではノードとも表記している。
図14に示すように、マスタ100、各ワーカ200、スペアワーカ300はそれぞれ異なるコンピュータ(ノード)5上で実現されることが望ましい。これにより、コンピュータ5の故障に起因してワーカ200に異常が生じた場合には、他のコンピュータ上で実現されるスペアワーカ300でリカバリされるからである。分散処理システム2に含まれるマスタ100、各ワーカ200及びスペアワーカ300は、各コンピュータ5内のメモリに記憶されるプログラムがCPU10により実行されることで、実現される。マスタ100、各ワーカ200及びスペアワーカ300を構成する各処理部についても同様である。
また、第2実施形態では、1つの処理スレッドに1つの継続プールを対応付けたが、複数の処理スレッドで1つの継続プールが共有されるようにしてもよいし、1つの処理スレッドが複数の継続プールに対応づけられていてもよい。
上記の各実施形態及び各変形例の一部又は全部は、以下の付記のようにも特定され得る。但し、各実施形態及び各変形例が以下の記載に限定されるものではない。
(付記1)タスクを構成する複数の処理のうちの少なくとも1つを含みそのタスクの処理途中のデータを保持する継続オブジェクトを格納するオブジェクト格納部と、
前記オブジェクト格納部から取り出された前記継続オブジェクトを実行する処理手段と、
前記オブジェクト格納部に格納されるデータを実行状態ファイルに保存する保存処理手段と、
を備えることを特徴とする分散処理装置。
(付記2)前記処理手段は、前記継続オブジェクトを実行することにより次の継続オブジェクトを生成し、この生成された次の継続オブジェクトを前記オブジェクト格納部に格納した後、前記継続オブジェクトの実行を終了する、
ことを特徴とする付記1に記載の分散処理装置。
(付記3)前記オブジェクト格納部及び前記処理手段を複数備え、
前記各オブジェクト格納部は、それぞれ異なる計算資源を利用する継続オブジェクトを格納し、
前記各処理手段は、各オブジェクト格納部からそれぞれ取り出される継続オブジェクトを並列に実行する、
ことを特徴とする付記1又は2に記載の分散処理装置。
(付記4)同期変数を更に備え、
前記複数の処理手段の少なくとも1つは、実行中の第1の継続オブジェクトにより未定義状態の同期変数の読み出しが行われる場合には、第2の継続オブジェクトをその同期変数に登録した後、第1の継続オブジェクトの実行を終了し、
前記保存処理手段は、前記同期変数に登録されている前記第2の継続オブジェクトを実行状態ファイルに更に保存する、
ことを特徴とする付記3に記載の分散処理装置。
(付記5)データ保持部を更に備え、
前記複数の処理手段の少なくとも1つは、実行中の第1の継続オブジェクトにより空のデータ保持部からのデータ取り出し処理又はデータ保持部への制限を超えるデータ投入処理が行われる場合には、第2の継続オブジェクトをそのデータ保持部に登録した後、第1の継続オブジェクトの実行を終了し、
前記保存処理手段は、前記データ保持部に登録されている前記第2の継続オブジェクトを実行状態ファイルに更に保存する、
ことを特徴とする付記3又は4に記載の分散処理装置。
(付記6)複数のコンピュータから構成される分散処理システムにおいて、
タスクを構成する複数の処理のうちの少なくとも1つを含みそのタスクの処理途中のデータを保持する継続オブジェクトを格納するオブジェクト格納部と、
前記オブジェクト格納部から取り出された前記継続オブジェクトを実行する処理手段と、
前記オブジェクト格納部に格納されるデータを実行状態ファイルに保存する保存処理手段と、
をそれぞれ含む複数のワーカプロセスと、
所定のタイミングで前記各ワーカプロセスに対し前記保存処理手段による保存処理を要求するマスタプロセスと、
を備え、
前記マスタプロセスは、前記保存処理を要求する際には、前記各ワーカプロセスに対し、各実行状態ファイルを保存させる他のワーカプロセスをそれぞれ指定する、
ことを特徴とする分散処理システム。
(付記7)前記各ワーカプロセスが有する前記複数のオブジェクト格納部、前記複数の処理手段及び前記保存処理手段を含むスペアワーカプロセスを更に備え、
前記スペアワーカプロセスの保存処理手段は、障害の発生したワーカプロセスが検出された場合に、その障害の発生したワーカプロセスの実行状態ファイルを他のワーカプロセスから取得し、この取得された実行状態ファイルに含まれるデータを前記各オブジェクト格納部にリストアし、
前記障害の発生したワーカプロセス以外のワーカプロセスの保存処理手段は、前記障害の発生したワーカプロセスが検出された場合に、自ワーカプロセスの実行状態ファイルに含まれるデータを前記各オブジェクト格納部にリストアする、
ことを特徴とする付記6に記載の分散処理システム。
(付記8)前記複数のワーカプロセス及び前記スペアワーカプロセスはそれぞれ、各ワーカプロセスについての情報をそれぞれ格納するワーカテーブルを更に含み、
前記マスタプロセスは、前記障害の発生したワーカプロセス以外の各ワーカプロセス及び前記スペアワーカプロセスに対して、前記障害の発生したワーカプロセス及び前記スペアワーカプロセスの各情報を用いて前記各ワーカテーブルを更新させる、
ことを特徴とする付記7に記載の分散処理システム。
(付記9)少なくとも1つのコンピュータが、
タスクを構成する複数の処理のうちの少なくとも1つを含みそのタスクの処理途中のデータを保持する継続オブジェクトを生成し、
前記生成された継続オブジェクトをオブジェクト格納部に格納し、
前記オブジェクト格納部から前記継続オブジェクトを取り出し、
前記取り出された継続オブジェクトを実行し、
前記オブジェクト格納部に格納されるデータを実行状態ファイルに保存する、
ことを含むことを特徴とする分散処理方法。
(付記10)前記少なくとも1つのコンピュータが、
前記継続オブジェクトを実行することにより次の継続オブジェクトを生成し、
前記生成された次の継続オブジェクトを前記オブジェクト格納部に格納した後、前記継続オブジェクトの実行を終了する、
ことを更に含む付記9に記載の分散処理方法。
(付記11)タスクを構成する複数の処理のうちの少なくとも1つを含みそのタスクの処理途中のデータを保持する継続オブジェクトを格納するオブジェクト格納部と、
前記オブジェクト格納部から取り出された前記継続オブジェクトを実行する処理手段と、
前記オブジェクト格納部に格納されるデータを実行状態ファイルに保存する保存処理手段と、
を少なくとも1つのコンピュータに実現させることを特徴とするプログラム。
(付記12)前記処理手段は、前記継続オブジェクトを実行することにより次の継続オブジェクトを生成し、この生成された次の継続オブジェクトを前記オブジェクト格納部に格納した後、前記継続オブジェクトの実行を終了する、
ことを特徴とする付記11に記載のプログラム。
(付記13)前記少なくとも1つのコンピュータに、前記オブジェクト格納部及び前記処理手段を複数実現させ、
前記各オブジェクト格納部は、それぞれ異なる計算資源を利用する継続オブジェクトを格納し、
前記各処理手段は、各オブジェクト格納部からそれぞれ取り出される継続オブジェクトを並列に実行する、
ことを特徴とする付記11又は12に記載のプログラム。
(付記14)同期変数を前記少なくとも1つのコンピュータに更に実現させ、
前記複数の処理手段の少なくとも1つは、実行中の第1の継続オブジェクトにより未定義状態の同期変数の読み出しが行われる場合には、第2の継続オブジェクトをその同期変数に登録した後、第1の継続オブジェクトの実行を終了し、
前記保存処理手段は、前記同期変数に登録されている前記第2の継続オブジェクトを実行状態ファイルに更に保存する、
ことを特徴とする付記13に記載のプログラム。
(付記15)データ保持部を前記少なくとも1つのコンピュータに更に実現させ、
前記複数の処理手段の少なくとも1つは、実行中の第1の継続オブジェクトにより空のデータ保持部からのデータ取り出し処理又はデータ保持部への制限を超えるデータ投入処理が行われる場合には、第2の継続オブジェクトをそのデータ保持部に登録した後、第1の継続オブジェクトの実行を終了し、
前記保存処理手段は、前記データ保持部に登録されている前記第2の継続オブジェクトを実行状態ファイルに更に保存する、
ことを特徴とする付記13又は14に記載のプログラム。
(付記16)複数のコンピュータから構成される分散処理システムに、
タスクを構成する複数の処理のうちの少なくとも1つを含みそのタスクの処理途中のデータを保持する継続オブジェクトを格納するオブジェクト格納部と、
前記オブジェクト格納部から取り出された前記継続オブジェクトを実行する処理手段と、
前記オブジェクト格納部に格納されるデータを実行状態ファイルに保存する保存処理手段と、
をそれぞれ含む複数のワーカプロセスと、
所定のタイミングで前記各ワーカプロセスに対し前記保存処理手段による保存処理を要求するマスタプロセスと、
を実現させ、
前記マスタプロセスは、前記保存処理を要求する際には、前記各ワーカプロセスに対し、各実行状態ファイルを保存させる他のワーカプロセスをそれぞれ指定する、
ことを特徴とするプログラム。
(付記17)前記各ワーカプロセスが有する前記複数のオブジェクト格納部、前記複数の処理手段及び前記保存処理手段を含むスペアワーカプロセスを前記分散処理システムに更に実現させ、
前記スペアワーカプロセスの保存処理手段は、障害の発生したワーカプロセスが検出された場合に、その障害の発生したワーカプロセスの実行状態ファイルを他のワーカプロセスから取得し、この取得された実行状態ファイルに含まれるデータを前記各オブジェクト格納部にリストアし、
前記障害の発生したワーカプロセス以外のワーカプロセスの保存処理手段は、前記障害の発生したワーカプロセスが検出された場合に、自ワーカプロセスの実行状態ファイルに含まれるデータを前記各オブジェクト格納部にリストアする、
ことを特徴とする付記16に記載のプログラム。
(付記18)前記複数のワーカプロセス及び前記スペアワーカプロセスはそれぞれ、各ワーカプロセスについての情報をそれぞれ格納するワーカテーブルを更に含み、
前記マスタプロセスは、前記障害の発生したワーカプロセス以外の各ワーカプロセス及び前記スペアワーカプロセスに対して、前記障害の発生したワーカプロセス及び前記スペアワーカプロセスの各情報を用いて前記各ワーカテーブルを更新させる、
ことを特徴とする付記17に記載のプログラム。
この出願は、2010年10月14日に出願された日本出願の特願2010−231144号を基礎とする優先権を主張し、その開示の全てをここに取り込む。

Claims (9)

  1. 複数の処理によって構成されるタスクに含まれるいずれかの前記処理をつ以上含、なおかつそのタスクの処理途中のデータを保持する継続オブジェクトを格納するオブジェクト格納部と、
    前記オブジェクト格納部から取り出された前記継続オブジェクトを実行する処理手段と、
    前記オブジェクト格納部に格納されるデータを実行状態ファイルに保存する保存処理手段と、
    を備え
    前記処理手段は、第1の前記継続オブジェクトに含まれる前記処理を実行することにより、前記実行された処理の結果を用いて実行される他の前記処理を含む第2の前記継続オブジェクトを生成し、第2の前記継続オブジェクトを前記オブジェクト格納部に格納した後、第1の前記継続オブジェクトの実行を終了する、ことを特徴とする分散処理装置。
  2. 前記オブジェクト格納部及び前記処理手段を複数備え、
    前記各オブジェクト格納部は、それぞれ異なる計算資源を利用する継続オブジェクトを格納し、
    前記各処理手段は、各オブジェクト格納部からそれぞれ取り出される継続オブジェクトを並列に実行する、
    ことを特徴とする請求項1に記載の分散処理装置。
  3. 同期変数を更に備え、
    前記複数の処理手段の少なくとも1つは、実行中の第1の継続オブジェクトにより未定義状態の同期変数の読み出しが行われる場合には、第2の継続オブジェクトをその同期変数に登録した後、第1の継続オブジェクトの実行を終了し、
    前記保存処理手段は、前記同期変数に登録されている前記第2の継続オブジェクトを実行状態ファイルに更に保存する、
    ことを特徴とする請求項に記載の分散処理装置。
  4. データ保持部を更に備え、
    前記複数の処理手段の少なくとも1つは、実行中の第1の継続オブジェクトにより空のデータ保持部からのデータ取り出し処理又はデータ保持部への制限を超えるデータ投入処理が行われる場合には、第2の継続オブジェクトをそのデータ保持部に登録した後、第1の継続オブジェクトの実行を終了し、
    前記保存処理手段は、前記データ保持部に登録されている前記第2の継続オブジェクトを実行状態ファイルに更に保存する、
    ことを特徴とする請求項又はに記載の分散処理装置。
  5. 複数のコンピュータから構成される分散処理システムにおいて、
    複数の処理によって構成されるタスクに含まれるいずれかの前記処理をつ以上含、なおかつそのタスクの処理途中のデータを保持する継続オブジェクトを格納するオブジェクト格納部と、
    前記オブジェクト格納部から取り出された前記継続オブジェクトを実行する処理手段と、
    前記オブジェクト格納部に格納されるデータを実行状態ファイルに保存する保存処理手段と、
    をそれぞれ含む複数のワーカプロセスと、
    所定のタイミングで前記各ワーカプロセスに対し前記保存処理手段による保存処理を要求するマスタプロセスと、
    を備え、
    前記処理手段は、第1の前記継続オブジェクトに含まれる前記処理を実行することにより、前記実行された処理の結果を用いて実行される他の前記処理を含む第2の前記継続オブジェクトを生成し、第2の前記継続オブジェクトを前記オブジェクト格納部に格納した後、第1の前記継続オブジェクトの実行を終了し、
    前記マスタプロセスは、前記保存処理を要求する際には、前記各ワーカプロセスに対し、各実行状態ファイルを、指定された他のワーカプロセスへ送信すること要求し、
    各前記ワーカプロセスは、前記マスタプロセスによる要求に応じて、指定された他のワーカプロセスへ前記実行状態ファイルを送信する、
    ことを特徴とする分散処理システム。
  6. 前記各ワーカプロセスが有する前記複数のオブジェクト格納部、前記複数の処理手段及び前記保存処理手段を含むスペアワーカプロセスを更に備え、
    前記スペアワーカプロセスの保存処理手段は、障害の発生したワーカプロセスが検出された場合に、その障害の発生したワーカプロセスの実行状態ファイルを他のワーカプロセスから取得し、この取得された実行状態ファイルに含まれるデータを前記各オブジェクト格納部にリストアし、
    前記障害の発生したワーカプロセス以外のワーカプロセスの保存処理手段は、前記障害の発生したワーカプロセスが検出された場合に、自ワーカプロセスの実行状態ファイルに含まれるデータを前記各オブジェクト格納部にリストアする、
    ことを特徴とする請求項に記載の分散処理システム。
  7. 前記複数のワーカプロセス及び前記スペアワーカプロセスはそれぞれ、各ワーカプロセスについての情報をそれぞれ格納するワーカテーブルを更に含み、
    前記マスタプロセスは、前記障害の発生したワーカプロセス以外の各ワーカプロセス及び前記スペアワーカプロセスに対して、前記障害の発生したワーカプロセス及び前記スペアワーカプロセスの各情報を用いて前記各ワーカテーブルを更新させる、
    ことを特徴とする請求項に記載の分散処理システム。
  8. 少なくとも1つのコンピュータによって実行される分散処理方法であって、
    複数の処理によって構成されるタスクに含まれるいずれかの前記処理をつ以上含、なおかつそのタスクの処理途中のデータを保持する継続オブジェクトを生成するステップと、
    前記生成された継続オブジェクトをオブジェクト格納部に格納するステップと
    前記オブジェクト格納部から前記継続オブジェクトを取り出すステップと
    前記取り出された継続オブジェクトを実行するステップと
    前記オブジェクト格納部に格納されるデータを実行状態ファイルに保存するステップと、を有し、
    前記継続オブジェクトを実行するステップにおいて、第1の前記継続オブジェクトに含まれる前記処理を実行することにより、前記実行された処理の結果を用いて実行される他の前記処理を含む第2の前記継続オブジェクトを生成し、第2の前記継続オブジェクトを前記オブジェクト格納部に格納した後、第1の前記継続オブジェクトの実行を終了する、
    ことを特徴とする分散処理方法。
  9. 複数の処理によって構成されるタスクに含まれるいずれかの前記処理をつ以上含、なおかつそのタスクの処理途中のデータを保持する継続オブジェクトを格納するオブジェクト格納部と、
    前記オブジェクト格納部から取り出された前記継続オブジェクトを実行する処理手段と、
    前記オブジェクト格納部に格納されるデータを実行状態ファイルに保存する保存処理手段と、
    を少なくとも1つのコンピュータに実現させ
    前記処理手段は、第1の前記継続オブジェクトに含まれる前記処理を実行することにより、前記実行された処理の結果を用いて実行される他の前記処理を含む第2の前記継続オブジェクトを生成し、第2の前記継続オブジェクトを前記オブジェクト格納部に格納した後、第1の前記継続オブジェクトの実行を終了する、
    ことを特徴とするプログラム。
JP2012538551A 2010-10-14 2011-08-02 分散処理装置及び分散処理システム Active JP5966927B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2010231144 2010-10-14
JP2010231144 2010-10-14
PCT/JP2011/004366 WO2012049794A1 (ja) 2010-10-14 2011-08-02 分散処理装置及び分散処理システム

Publications (2)

Publication Number Publication Date
JPWO2012049794A1 JPWO2012049794A1 (ja) 2014-02-24
JP5966927B2 true JP5966927B2 (ja) 2016-08-10

Family

ID=45938037

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012538551A Active JP5966927B2 (ja) 2010-10-14 2011-08-02 分散処理装置及び分散処理システム

Country Status (4)

Country Link
US (1) US9946582B2 (ja)
EP (1) EP2629198A4 (ja)
JP (1) JP5966927B2 (ja)
WO (1) WO2012049794A1 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9021046B2 (en) 2010-01-15 2015-04-28 Joyent, Inc Provisioning server resources in a cloud resource
US8555276B2 (en) 2011-03-11 2013-10-08 Joyent, Inc. Systems and methods for transparently optimizing workloads
US8782224B2 (en) 2011-12-29 2014-07-15 Joyent, Inc. Systems and methods for time-based dynamic allocation of resource management
EP2857975A4 (en) 2012-05-31 2016-03-02 Univ Tokyo PARALLEL DATA PROCESSING SYSTEM, COMPUTER, AND METHOD FOR PARALLEL DATA PROCESSING
US9152458B1 (en) * 2012-08-30 2015-10-06 Google Inc. Mirrored stateful workers
US8943284B2 (en) 2013-03-14 2015-01-27 Joyent, Inc. Systems and methods for integrating compute resources in a storage area network
US8677359B1 (en) 2013-03-14 2014-03-18 Joyent, Inc. Compute-centric object stores and methods of use
US8881279B2 (en) 2013-03-14 2014-11-04 Joyent, Inc. Systems and methods for zone-based intrusion detection
US9104456B2 (en) * 2013-03-14 2015-08-11 Joyent, Inc. Zone management of compute-centric object stores
US8826279B1 (en) 2013-03-14 2014-09-02 Joyent, Inc. Instruction set architecture for compute-based object stores
US9092238B2 (en) 2013-03-15 2015-07-28 Joyent, Inc. Versioning schemes for compute-centric object stores
US8793688B1 (en) 2013-03-15 2014-07-29 Joyent, Inc. Systems and methods for double hulled virtualization operations
US8775485B1 (en) 2013-03-15 2014-07-08 Joyent, Inc. Object store management operations within compute-centric object stores
JP6097910B2 (ja) * 2016-01-21 2017-03-22 国立大学法人 東京大学 並列データ処理システム、計算機および並列データ処理方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04218842A (ja) * 1990-04-11 1992-08-10 Hitachi Ltd プログラムの再実行方法
JPH08263317A (ja) * 1995-03-27 1996-10-11 Nec Corp チェックポイント/リスタート処理方式
JP2003256233A (ja) * 2002-03-04 2003-09-10 Hitachi Ltd 半導体装置及びコンピュータシステム
JP2005284647A (ja) * 2004-03-29 2005-10-13 Nec Corp 並列処理装置、命令再試行方法、およびプログラム
JP2008293358A (ja) * 2007-05-25 2008-12-04 Fujitsu Ltd 分散処理プログラム、分散処理方法、分散処理装置、および分散処理システム
JP2010182141A (ja) * 2009-02-06 2010-08-19 Nec Corp データ処理装置及びデータ処理方法

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3408850B2 (ja) * 1992-12-09 2003-05-19 三菱電機株式会社 クライアント・サーバシステムおよびその制御方法、並びにクライアント機装置
US6112225A (en) * 1998-03-30 2000-08-29 International Business Machines Corporation Task distribution processing system and the method for subscribing computers to perform computing tasks during idle time
US6952827B1 (en) * 1998-11-13 2005-10-04 Cray Inc. User program and operating system interface in a multithreaded environment
US6895583B1 (en) * 2000-03-10 2005-05-17 Wind River Systems, Inc. Task control block for a computing environment
US20040235523A1 (en) * 2001-03-07 2004-11-25 Schrire Michael Anton System for replicating data of a mobile station
US20020188713A1 (en) * 2001-03-28 2002-12-12 Jack Bloch Distributed architecture for a telecommunications system
US7117496B1 (en) * 2001-05-09 2006-10-03 Ncr Corporation Event-based synchronization
US7756919B1 (en) * 2004-06-18 2010-07-13 Google Inc. Large-scale data processing in a distributed and parallel processing enviornment
US7552356B1 (en) * 2004-06-30 2009-06-23 Sun Microsystems, Inc. Distributed data storage system for fixed content
US7908313B2 (en) * 2004-07-21 2011-03-15 The Mathworks, Inc. Instrument-based distributed computing systems
US7308565B2 (en) * 2005-06-15 2007-12-11 Seiko Epson Corporation Saving/restoring task state data from/to device controller host interface upon command from host processor to handle task interruptions
US20070101325A1 (en) * 2005-10-19 2007-05-03 Juraj Bystricky System and method for utilizing a remote memory to perform an interface save/restore procedure
US7877752B2 (en) * 2005-12-14 2011-01-25 Broadcom Corp. Method and system for efficient audio scheduling for dual-decode digital signal processor (DSP)
US7861060B1 (en) * 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
US7895185B2 (en) * 2006-09-28 2011-02-22 International Business Machines Corporation Row-identifier list processing management
US7984440B2 (en) * 2006-11-17 2011-07-19 Sap Ag Interactive audio task system with interrupt recovery and confirmations
US8935372B2 (en) * 2007-02-02 2015-01-13 Sony Corporation Mediation server, terminals and distributed processing method
US20080244589A1 (en) * 2007-03-29 2008-10-02 Microsoft Corporation Task manager
JP5099128B2 (ja) * 2007-04-20 2012-12-12 富士通株式会社 ストレージ管理プログラム、ストレージ管理装置およびストレージ管理方法
US20090044195A1 (en) * 2007-05-03 2009-02-12 Kivati Software, Llc method for performing tasks based on differences in machine state
US20090204966A1 (en) * 2008-02-12 2009-08-13 Johnson Conrad J Utility for tasks to follow a user from device to device
JP5112524B2 (ja) * 2008-12-03 2013-01-09 株式会社日立製作所 ストレージシステム及びストレージシステムの運用方法
US8887162B2 (en) * 2008-12-17 2014-11-11 Microsoft Corporation Persistent local storage for processor resources
JP5214537B2 (ja) * 2009-05-25 2013-06-19 株式会社東芝 マルチプロセッサシステム
JP2011065645A (ja) * 2009-09-18 2011-03-31 Square Enix Co Ltd マルチコアプロセッサシステム
US9367462B2 (en) * 2009-12-29 2016-06-14 Empire Technology Development Llc Shared memories for energy efficient multi-core processors

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04218842A (ja) * 1990-04-11 1992-08-10 Hitachi Ltd プログラムの再実行方法
JPH08263317A (ja) * 1995-03-27 1996-10-11 Nec Corp チェックポイント/リスタート処理方式
JP2003256233A (ja) * 2002-03-04 2003-09-10 Hitachi Ltd 半導体装置及びコンピュータシステム
JP2005284647A (ja) * 2004-03-29 2005-10-13 Nec Corp 並列処理装置、命令再試行方法、およびプログラム
JP2008293358A (ja) * 2007-05-25 2008-12-04 Fujitsu Ltd 分散処理プログラム、分散処理方法、分散処理装置、および分散処理システム
JP2010182141A (ja) * 2009-02-06 2010-08-19 Nec Corp データ処理装置及びデータ処理方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6015039395; スチュアート・マドニック、、ジョン・ドノバン(Stuart E. Madnick & John J. Donovan)著、池田克夫 訳: オペレーティング・システム(Operating Systems) 5版, 19830615, pp.291-295, 日本コンピュータ協会 *
JPN6016020487; 鵜川始陽 他: '継続の生成におけるスタックコピーの遅延' 情報処理学会論文誌 第44巻、No.SIG13(PRO 18), 20031015, pp.72-83, 社団法人情報処理学会 *

Also Published As

Publication number Publication date
US9946582B2 (en) 2018-04-17
EP2629198A1 (en) 2013-08-21
JPWO2012049794A1 (ja) 2014-02-24
EP2629198A4 (en) 2014-04-16
US20130191835A1 (en) 2013-07-25
WO2012049794A1 (ja) 2012-04-19

Similar Documents

Publication Publication Date Title
JP5966927B2 (ja) 分散処理装置及び分散処理システム
US9798792B2 (en) Replication for on-line hot-standby database
EP2626786B1 (en) Multicore processor system, method of monitoring control, and monitoring control program
EP2972874B1 (en) Recovery of application from snapshot
US8904386B2 (en) Running a plurality of instances of an application
EP2662771A1 (en) Scheduling method, and multi-core processor system
US6108766A (en) Structure of processor having a plurality of main processors and sub processors, and a method for sharing the sub processors
US12019523B2 (en) System and method for cloning as SQL server AG databases in a hyperconverged system
US10387274B2 (en) Tail of logs in persistent main memory
GB2517780A (en) Improved checkpoint and restart
JP7192388B2 (ja) 並列処理装置、並列演算実行プログラムおよびバックアップ方法
JP2010218481A (ja) 高信頼性計算機システムおよびその構成方法
US10726047B2 (en) Early thread return with secondary event writes
US20140040191A1 (en) Inventorying and copying file system folders and files
JP2015005097A (ja) 電子機器、制御装置及びプログラム
JP5158576B2 (ja) 入出力制御システム、入出力制御方法、及び、入出力制御プログラム
WO2018188959A1 (en) Method and apparatus for managing events in a network that adopts event-driven programming framework
JP2008305021A (ja) 情報処理装置及びアプリケーション管理方法
US20090217290A1 (en) Method and System for Task Switching with Inline Execution
US11314700B1 (en) Non-native transactional support for distributed computing environments
EP3293635A1 (en) Electronic device and method of controlling the same
JP6036690B2 (ja) 分散実行システム及び分散プログラム実行方法
US11941398B1 (en) Fast mapper restore for flush in processor
KR20230080902A (ko) 분산 컴퓨팅 환경에서의 데이터 선 적재 장치 및 이를 이용한 방법
CN116820833A (zh) 崩溃恢复方法及装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140709

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151006

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151203

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160620

R150 Certificate of patent or registration of utility model

Ref document number: 5966927

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150