(57)【要約】      （修正有）【課題】システム全体の処理能力の低下を回避し、合流部での負荷分散にも好適とされる方法、システムを提供する。【解決手段】入力されたデータを処理し処理結果データを出力する少なくとも一つの第１の装置２１と、第１の装置２１から出力される処理結果データに対して処理を実行する第２の装置２２と、を含む。少なくとも一つの第１の装置２１は、第２の装置２２で処理待ち状態にあるデータ量から第２の装置２２の負荷状況を把握し、第２の装置２２で行われる処理を、第２の装置２２の負荷状況に応じた分、第１の装置２１で実行するように制御する。【選択図】図５
2015185036.tif 000002
【特許請求の範囲】
【請求項１】
入力されたデータを処理し処理結果データを出力する少なくとも一つの第１の装置と、
前記第１の装置から出力される前記処理結果データに対して所定の処理を実行する第２の装置と、
を備え、
少なくとも一つの前記第１の装置は、
前記第２の装置で処理待ち状態にあるデータ量から前記第２の装置の負荷状況を把握し、前記第２の装置で行われる前記所定の処理を、前記第２の装置の負荷状況に応じた分、前記第１の装置で実行するように制御する手段を備えた、ことを特徴とするシステム。
【請求項２】
前記第２の装置は、一つ又は複数の前記第１の装置で処理されたデータを入力し処理実行まで保持する待ち行列を備え、
少なくとも一つの前記第１の装置は、
前記入力されたデータに対して、前記第２の装置の代わりに前記第１の装置で実行する前記所定の処理の件数を、前記第２の装置の前記待ち行列の長さ情報に基づき、決定する、ことを特徴とする請求項１記載のシステム。
【請求項３】
少なくとも一つの前記第１の装置は、
前記入力したデータに対して、第１の処理又は、前記第１の処理と第２の処理を実行し、
前記第２の装置で行われる前記所定の処理が前記第２の処理であり、
前記第１の装置は、
前記第１の装置で前記第２の処理を実行したデータの件数をカウントするオフロードカウンタと、
前記第２の装置の前記待ち行列の長さ情報に基づき、前記第１の装置で前記第２の処理を実行するデータの件数の上限となる閾値を取得する手段と、
を備え、
前記第１の装置は、
前記入力されたデータに対して前記第１の処理を実行したのち、
前記オフロードカウンタのカウント値が前記閾値を超えている場合には、前記第２の処理を実行せずに、前記第１の処理の処理結果データを前記第２の装置に送信し、
前記第２の装置は、
前記第１の装置で前記第１の処理が実行されたデータに対して前記第２の処理を実行し、
前記第１の装置において、
前記オフロードカウンタのカウント値が前記閾値以下の場合には、前記第２の処理をさらに実行して前記オフロードカウンタを１つ増加させ、前記第１の処理と前記第２の処理を施した処理結果データを前記第２の装置に送信する、ことを特徴とする請求項２記載のシステム。
【請求項４】
少なくとも一つの前記第１の装置は、前記第１の処理を施したデータ、又は前記第１の処理と前記第２の処理を施した処理結果データを、どの処理まで完了したかを示す完了ステップ情報とともに前記第２の装置に送信し、
前記第２の装置は、前記待ち行列に、前記第１の装置から送信された処理結果データと完了ステップ情報を対応付けて蓄積する、ことを特徴とする請求項３記載のシステム。
【請求項５】
少なくとも一つの前記第１の装置は、前記第２の装置の前記待ち行列の長さに関して、前記長さの範囲を複数の区分に分割し、前記各区分にそれぞれ対応させて前記閾値を予め設定しておき、取得した前記第２の装置の前記待ち行列の長さから、前記待ち行列の長さに対応した閾値を取得する、ことを特徴とする請求項２乃至４のいずれか１項に記載のシステム。
【請求項６】
互いに並列に動作する複数の前記第１の装置を備えた、ことを特徴とする請求項１乃至５のいずれか１項に記載のシステム。
【請求項７】
入力されたデータを処理し処理結果データを他の装置に出力する手段と、
前記他の装置で処理待ち状態にあるデータ量から前記他の装置の負荷状況を把握し、
前記他の装置で行われる所定の処理を、前記他の装置の負荷状況に応じた分、実行するように制御する手段を備えた、ことを特徴とする装置。
【請求項８】
前記入力されたデータに対して、前記他の装置の代わりに実行する前記処理の件数を、前記他の装置で処理実行までデータを保持する待ち行列の長さ情報に基づき、決定する、ことを特徴とする請求項７記載の装置。
【請求項９】
少なくとも一つの第１の装置では、入力したデータを処理し処理結果データを出力し、
第２の装置では、前記第１の装置から出力される前記処理結果データに対して所定の処理を実行し、
少なくとも一つの前記第１の装置は、前記第２の装置で処理待ち状態にあるデータ量から前記第２の装置の負荷状況を把握し、
前記第２の装置で行われる前記所定の処理を、前記第２の装置の負荷状況に応じた分、前記第１の装置で実行するように制御する、ことを特徴とする負荷分散方法。
【請求項１０】
入力されたデータを処理し処理結果データを他の装置に出力する装置を構成するコンピュータに、
前記他の装置で処理待ち状態にあるデータ量から前記他の装置の負荷状況を把握し、
前記他の装置で行われる所定の処理を、前記他の装置の負荷状況に応じた分、実行するように制御する処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、負荷分散方法とシステムと装置及びプログラムに関する。
【背景技術】
【０００２】
並列動作可能な複数の装置を備えたシステムにおいて、ある装置の出力が複数の装置への入力として振り分けられる部分（分岐部）と、複数の装置からの出力が他のより少数の装置への入力として合流する部分（合流部）を備えたシステムが知られている。例えば、特許文献１には、プロセッサへの伝送路を選択して該伝送路にパケットを出力する分岐部と、各プロセッサからのパケットを合流させる合流部とを備えた情報処理装置が開示されている。
【０００３】
この種のシステムにおいて、分岐部では、例えば一つの出力元（送信元）の装置からの出力がそれぞれ分岐先の複数の装置のいずれかへの入力として振り分けられる。合流部では、例えば送信元の複数の装置からの出力を例えば待ち行列等で合流させて処理する。なお、複数の装置は、複数のスイッチ等であってもよく、あるいは複数のプロセッサやＣＰＵ（Central Processing Unit）コア等であってもよい。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−２０７３８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
以下に関連技術の分析を与える。
【０００６】
上記した並列動作可能な複数の装置を備えたシステムにおいて、装置間で負荷に偏りがあると、負荷が大きい部分がシステム全体の処理能力のボトルネックとなり得ることが知られている。このため、システムの処理性能を維持するには、装置の負荷は装置間で平均化されていることが望ましい。
【０００７】
処理の振分を行う分岐部について、振分先の複数の装置間で負荷を平均化する為の負荷分散制御として、例えば、よく知られたラウンドロビン方式（一定時間毎に順番に割り当て、持ち時間が経過すると、再スケジュール対象の最後に回される）等の適用が可能である。
【０００８】
一方、複数の出力を合流する合流部における負荷の制御については、例えば半二重接続のハブやスイッチで用いられるフロー制御方式のバックプレッシャー方式等が知られている。バックプレッシャー方式は、例えば受信バッファがオーバフローしそうな場合、送信元へコリジョン信号を送信してデータ送信を一時的に中断させる等の制御を行う。
【０００９】
このように、合流部における負荷の制御は、合流先の装置が負荷の上昇を検出すると、出力元（送信元）の装置に対して送信を行わせないように制御する。このため、出力元の装置において、処理を進めることができない時間が発生する。その結果、システム全体の処理能力が低下する場合がある。
【００１０】
したがって、本発明は上記課題に鑑みて創案されたものであって、その目的は、システム全体の処理能力の低下を回避し、例えば合流部等での負荷制御に好適とされるシステム、装置、負荷分散方法、プログラムを提供することにある。
【課題を解決するための手段】
【００１１】
本発明の一の側面によれば、入力されたデータを処理し処理結果データを出力する少なくとも一つの第１の装置と、前記第１の装置から出力される前記処理結果データに対して所定の処理を実行する第２の装置と、を備え、少なくとも一つの前記第１の装置は、前記第２の装置で処理待ち状態にあるデータ量から前記第２の装置の負荷状況を把握し、前記第２の装置で行われる前記所定の処理を、前記第２の装置の負荷状況に応じた分、前記第１の装置で実行するように制御する手段を備えたシステムが提供される。
【００１２】
本発明の他の側面によれば、入力されたデータを処理し処理結果データを他の装置に出力する手段と、前記他の装置で処理待ち状態にあるデータ量から前記他の装置の負荷状況を把握し、前記他の装置で行われる所定の処理を、前記他の装置の負荷状況に応じた分、実行するように制御する手段を備えた装置が提供される。
【００１３】
本発明のさらに他の側面によれば、少なくとも一つの第１の装置では、入力したデータを処理し処理結果データを出力し、
第２の装置では、前記第１の装置から出力される前記処理結果データに対して所定の処理を実行し、
少なくとも一つの前記第１の装置は、前記第２の装置で処理待ち状態にあるデータ量から前記第２の装置の負荷状況を把握し、
前記第２の装置で行われる前記所定の処理を、前記第２の装置の負荷状況に応じた分、前記第１の装置で実行するように制御する、負荷分散方法が提供される。
【００１４】
本発明のさらに他の側面によれば、入力されたデータを処理し処理結果データを他の装置に出力する装置を構成するコンピュータに、
前記他の装置で処理待ち状態にあるデータ量から前記他の装置の負荷状況を把握し、
前記他の装置で行われる所定の処理を、前記他の装置の負荷状況に応じた分、実行するように制御する処理を実行させるプログラムが提供される。
【００１５】
本発明のさらに他の側面によれば、前記プログラムを記録したコンピュータ読み出し可能な記録媒体（例えば半導体ストレージや磁気／光ストレージ等）が提供される。
【発明の効果】
【００１６】
本発明によれば、システム全体の処理能力の低下を回避した負荷分散を実現可能とし、例えば合流部等への負荷制御に好適される。
【図面の簡単な説明】
【００１７】
【図１】（Ａ）は本発明の一実施形態を説明する図である。（Ｂ）は待ち行列の内容を説明する図である。
【図２】本発明の一実施形態の動作を説明する流れ図である。
【図３】本発明の一実施形態を説明する図である。
【図４】本発明の一実施形態の装置の構成の一例を模式的の例示する図である。
【図５】本発明の基本概念を説明する図である。
【発明を実施するための形態】
【００１８】
本発明の実施形態について図面を参照して説明する。はじめに本発明の基本概念について説明する。本発明によれば、図５を参照すると、システム２０は、入力されたデータ２３に対して処理２１１を実行し処理結果データ２４を出力する少なくとも一つの第１の装置２１と、前記第１の装置２１から出力される前記処理結果データ２４に対して処理２２１を実行する第２の装置２２と、を備えている。前記第１の装置２１は、前記第２の装置２２で処理待ち状態２２２にあるデータ量に関する情報２１３から、前記第２の装置２２の負荷状況を把握し、前記第２の装置２２で行われる前記処理２２１を、前記第２の装置２２の負荷状況に応じて、前記第１の装置２１で実行するように制御する制御手段２１２を備えている。第１の装置２１、第２の装置２２は、プロセッサ、ＣＰＵコア等の処理装置であってもよい。第１の装置２１における処理２１１、制御手段２１２は、第１の装置２１を構成するコンピュータ、プロセッサ、ＣＰＵ等で実行されるプログラムにより、その機能を実現するようにしてもよいことは勿論である。
【００１９】
前記第２の装置２２で行われる前記処理２２１を、前記第２の装置２２の負荷状況に応じた分、前記第１の装置２１で実行するように制御することで、合流部等での負荷制御を行うにあたり、システム全体の処理能力の低下を回避可能としている。
【００２０】
本発明の形態の一つによれば、前記第２の装置（図５の２２、あるいは、図１（Ａ）の例えば装置１４）は、一つ又は複数の前記第１の装置で処理されたデータを入力し処理実行まで保持する待ち行列（図５の２２２、あるいは、図１（Ａ）の１５）を備え、少なくとも一つの前記第１の装置（図５の２１、あるいは、図１（Ａ）の例えば装置１１）は、入力されたデータに対して、前記第２の装置（図５の２２、あるいは、図１（Ａ）の例えば装置１４）の代わりに前記第１の装置（図５の２１、あるいは、図１（Ａ）の例えば装置１１）で実行する前記処理の件数を、前記第２の装置（図５の２２、あるいは、図１（Ａ）の例えば装置１４）の前記待ち行列の長さ情報に基づき、決定するようにしてもよい。
【００２１】
本発明の形態の一つによれば、少なくとも一つの前記第１の装置（図１（Ａ）の例えば装置１１）は、前記入力したデータに対して、第１の処理（図１（Ａ）の処理―２）又は、前記第１の処理（図１（Ａ）の処理―２）と第２の処理（図１（Ａ）の処理―３）を実行する。
前記第１の装置（図１（Ａ）の例えば装置１１）は、前記第１の装置（図１（Ａ）の例えば装置１１）で前記第２の処理（図１（Ａ）の処理―３）を実行したデータの件数をカウントするオフロードカウンタ（図４の１１７）と、前記第２の装置（図１（Ａ）の例えば装置１４）の前記待ち行列（図１（Ａ）の１５）の長さ情報に基づき、前記第１の装置（図１（Ａ）の例えば装置１１）で前記第２の処理（図１（Ａ）の処理―３）を実行するデータの件数の上限となる閾値を取得する手段（図４の閾値算出部１１８）とを備えた構成としてもよい。
前記第１の装置（図１（Ａ）の例えば装置１１）は、前記入力されたデータに対して前記第１の処理（図１（Ａ）の処理―２）を実行したのち、オフロードカウンタのカウント値が前記閾値を超えている場合には、前記第２の処理（図１（Ａ）の処理―３）を実行せずに、前記第１の処理の処理結果データを前記第２の装置（図１（Ａ）の例えば装置１４）に送信する構成としてもよい。前記第２の装置（図１（Ａ）の例えば装置１４）は、前記第１の装置で、前記第１の処理（図１（Ａ）の処理―２）が実行されたデータに対して第２の処理（図１（Ａ）の処理―３）を実行するようにしてもよい。
一方、オフロードカウンタのカウント値が前記閾値以下の場合には、前記第１の装置（図１（Ａ）の例えば装置１１）は、前記第２の処理（図１（Ａ）の処理―３）をさらに実行して前記オフロードカウンタ（図４の１１７）を１つ増加させ、前記第１の処理（図１（Ａ）の処理―２）と前記第２の処理（図１（Ａ）の処理―３）を施した処理結果データを前記第２の装置（図１（Ａ）の例えば装置１４）に送信する構成としてもよい。
【００２２】
本発明の形態の一つによれば、前記第１の装置（図１（Ａ）の例えば装置１１）は、前記第１の処理（図１（Ａ）の処理―２）を施したデータ、又は前記第１の処理（図１（Ａ）の処理―２）と前記第２の処理（図１（Ａ）の処理―３）を施した処理結果データを、どの処理まで完了したかを示す完了ステップ情報とともに前記第２の装置（図１（Ａ）の例えば装置１４）に送信する構成としてもよい。前記第２の装置（図１（Ａ）の例えば装置１４）は、前記待ち行列（図１（Ａ）の１５）に、前記第１の装置（図１（Ａ）の例えば装置１１）から送信された処理結果データと完了ステップ情報を対応付けて蓄積する（図１（Ｂ）参照）構成としてもよい。
【００２３】
本発明の形態の一つによれば、前記第１の装置（図１（Ａ）の例えば装置１１）は、前記第２の装置（図１（Ａ）の例えば装置１４）の前記待ち行列（図１（Ａ）の１５）の長さに関して、前記長さの範囲を複数の区分に分割し、前記各区分にそれぞれ対応させて前記閾値を予め設定しておき、取得した前記第２の装置の前記待ち行列の長さから、前記待ち行列の長さに対応した閾値を取得する構成としてもよい（図４参照）。
【００２４】
以上、基本概念及びその形態を説明したが、以下では例示的な実施形態について説明する。
【００２５】
本発明の実施形態によれば、並列に動作する装置（図１（Ａ）の１０、１１、１２、１３、１４）から構成されるシステム（１）において、複数の装置（１１、１２、１３）と、それらの装置の出力を入力とする装置（１４）について、これらの装置（１１、１２、１３、１４）間の作業量が平均的になるようにする。特に制限されないが、例えば各装置を、処理装置、例えばＣＰＵコアとしたマルチコアＣＰＵのシステムにおいて、複数のコアと、それら複数のコアの出力を入力とするコアについて、これらのコアの作業量を平均的にする。なお、図１（Ａ）において、２は入力チャネル、３は出力チャネルを表している。
【００２６】
本発明の実施形態によれば、合流先の装置（１４）が、相対的に低負荷時に行っていた処理の一部を、相対的に高負荷になった場合に、複数の出力元（送信元）の装置（１１、１２、１３）で実行するように制御する。これにより、例えば出力元の装置（１１、１２、１３）と、合流先の装置（１４）間での負荷の平均化が可能となる。その際、出力元の装置（１１、１２、１３）では、実行中の処理を停止させる等、システムの処理性能を低下させるような制御は行われない。
【００２７】
本発明の実施形態によれば、出力元の装置（１１、１２、１３）は、待ち行列（１５）に保持され処理待ち状態に置かれているデータ長から装置（１４）の負荷状況（負荷の高低）を判断するようにしてよい。
【００２８】
また、本発明の実施形態によれば、処理の移動については、待ち行列（１５）に溜まっているデータの個数に一定の計算を行うことで、段階的に行う。例えば出力元の装置（１１、１２、１３）で実行する処理の割合として、
例えば１０％（１０個のデータを処理するうち１個について処理−３まで行い、それ以外は処理−２のみを行う）、
２０％（１０個のデータを処理するうち２個については処理−３まで行い、それ以外は処理−２のみを行う）、
３０％（２０％と同様）といったように段階的に行う。こうすることで、処理の移動によって、逆に、出力元の装置（１１、１２、１３）の負荷が上がるのを防ぐ。
【００２９】
＜実施形態１＞
図１を参照して、本発明の一実施形態を説明する。図１（Ａ）では、入力チャネル２と、出力チャネル３を持つ情報処理システム１が例示されている。入力チャネル２からデータを受信し、受信したデータに対し、処理−１、処理−２、処理−３、処理−４の４つの処理を順に実行し、処理結果のデータを出力チャネル３から送信している。
【００３０】
装置１０、１１、１２、１３、１４は、並列動作可能とされる。装置１０、１１、１２、１３、１４は、ＣＰＵコアで構成してもよい。装置１１、１２、１３、１４は、装置間でやり取りされるデータを蓄積保持する待ち行列を備えている。図１（Ａ）では、簡単のため、装置１４の待ち行列１５のみが示されている。
【００３１】
装置１０は、入力チャネル２で受信したデータを蓄えるためのバッファからなる待ち行列（不図示）を備えている。各装置１０、１１、１２、１３、１４は並列に動作するが、それぞれの処理時間は一定でない。そのため、各装置は待ち行列を持ち、自装置で処理を実行するまでの間、出力元の装置から送信されたデータを蓄えておく。
【００３２】
装置１１、１２、１３の待ち行列（不図示）は、装置１０から出力されたデータを蓄える。装置１４の待ち行列１５は、装置１１、１２、１３から出力されたデータを蓄える。特に制限されないが、装置１４は、装置１１、１２、１３からの出力を、例えば到着順に、順次、待ち行列１５にキューイングし、処理を行うときに、待ち行列１５からデキューする。特に制限されないが、各装置１１−１４の待ち行列は例えば先入れ先出し（First-In, First-Out；FIFO）方式のバッファで構成してもよい。
【００３３】
図１を参照して、本実施形態の動作の概略を説明する。
【００３４】
入力チャネル２からデータを受信（入力）する。入力されたデータに対する処理−１は、装置１０で固定的に実行する。装置１０は、処理−１を実行し、さらに装置１１、１２、１３に対して出力を振り分ける。
【００３５】
処理−２は、装置１０の振分結果に従い、装置１１、１２、１３のいずれかで実行される。
【００３６】
処理−３は、装置１１、１２、１３が実行する場合と、装置１４が実行する場合の二通りがある。ただし、各データに対しては、いずれかの装置にて、一度だけ実行される。すなわち、例えば出力元の装置１１で装置１０で振り分けられたデータに対して処理−３を実行して処理結果データを装置１４に送信し、装置１４が処理−３が施されたデータに対して処理―３を実行することはない。
【００３７】
処理−４は、装置１４で実行される。
【００３８】
特に制限されないが、図１（Ａ）の例では、処理−２は、他の処理と比べて長時間の処理時間を要する処理（処理量大）であることを想定している。この為、処理−２を、３個の装置１１、１２、１３に割り当て、これらの装置１１、１２、１３を並列動作させ、システムの性能（スループット）の低下を回避する。
【００３９】
装置１１、１２、１３の待ち行列（不図示）に蓄えられるデータと、装置１４の待ち行列１５に蓄えられるデータには、異なる性質がある。すなわち、装置１１、１２、１３の待ち行列（不図示）に蓄えられるデータは、処理−１を実行した結果である。一方、装置１４の待ち行列１５に蓄えられるデータは、処理−２を実行した結果である場合と、処理−３を実行した結果である場合の２通りがある。
【００４０】
そのため、装置１４の待ち行列１５には、処理結果と、どの処理まで完了しているかの情報を組にしたデータが蓄えられる。図１（Ｂ）は、待ち行列１５の内容の一例を模式的に例示する図である。図１（Ｂ）に示す例では、待ち行列１５の先頭と２番目、４番目のデータは、完了ステップが２、すなわち、処理−２まで完了しており、処理結果がＸＸＸ、ＹＹＹ、ＷＷＷであることを表している。待ち行列１５の３番目のデータは、完了ステップが３、すなわち、処理−３まで完了しており、処理結果がＺＺＺであることを表している。
【００４１】
本実施形態では、装置１１、１２、１３において、データに対し、処理−２のみを実行するか、処理−２に加えて処理−３を実行するかは、待ち行列１５に蓄えられたデータの長さによって決める構成とされている。装置１１、１２、１３は、受信したデータ毎に、処理−２を実行した後、装置１４の待ち行列１５のデータの長さを調べる。装置１１、１２、１３は装置１４の待ち行列１５のデータの長さに応じてデータのどの程度の割合（何パーセント）について処理−３まで実行するかを判断する。装置１１、１２、１３は処理する複数件のデータの内、当該割合（閾値）のデータについて処理−３まで実行する。当該割合を超えるデータについては、処理−２まで実行する。
【００４２】
装置１１、１２、１３での処理結果は、装置１１、１２、１３で実行した処理のステップ（完了ステップ）と共に、装置１４に送信され、装置１４の待ち行列１５に蓄積される。装置１４は、待ち行列１５からデータを取り出して完了ステップをチェックする。
【００４３】
完了ステップ２であれば、装置１４は、処理結果に処理−３と処理−４を実行し、出力チャネル３から処理結果を出力する。完了ステップが３であれば、装置１４は、処理結果に処理−４のみを実行し、出力チャネル３から処理結果を出力する。
【００４４】
図４は、図１（Ａ）の装置１１（出力元の装置）の構成を説明する図である。なお、図１（Ａ）の装置１１乃至１３は互いに同一構成としてもよい。また、装置１０、装置１４も基本構成は装置１１と同一としてもよい。
【００４５】
図４を参照すると、装置１１は、データパスとして、データを受信する受信部１１１、受信部１１１で受信したデータ（装置１０から受信した処理待ちデータ）を一時的に蓄積保持する受信バッファからなる待ち行列１１２、待ち行列１１２から取り出したデータに対して処理を実行する処理部１１３、処理部１１３での処理結果と完了ステップを送信する送信部１１４を備えている。なお、実行する処理が固定された装置１０、１４では、送信部１１４は処理結果のみを出力し、完了ステップは、出力しない構成としてもよい。
【００４６】
装置１１は、データパスの受信部１１１での受信データの待ち行列１１２への書き込み、待ち行列１１２からのデータの読み出しと、処理部１１３で実行する処理の別の処理への切り替え等のスケジューリング、送信部１１４からの出力を制御する制御部１１５を備えている。
【００４７】
さらに制御系として、待ち行列１１２から受信したデータをカウントする受信カウンタ１１６、装置１１において、受信されたデータのうち処理部１１３で処理３を実行する件数をカウントするオフロード（ｏｆｆ−ｌｏａｄ）カウンタ１１７と、後段の装置（図１（Ａ）の１４）の待ち行列（図１（Ａ）の１５）の長さ情報を取得する待ち行列長さ取得部１１９と、装置１４の待ち行列の長さ情報から閾値を導出する閾値算出部１１８を備えている。制御部１１５は、これらの各部１１６−１１９を制御する。
【００４８】
ｏｆｆ−ｌｏａｄカウンタ１１７は、装置１４における負荷の軽減（ｏｆｆ−ｌｏａｄ）を制御するためのカウンタであり、装置１４の負荷の程度に応じて装置１１の処理部１１３での処理３が実行されるデータの件数を管理するためのカウンタである。
【００４９】
装置１４の負荷の程度が相対的に高いと判断されると、装置１１では、より多くの受信データに対して処理３を実行する。相対的に低負荷のときに装置１４で行われる処理―３を、装置１４が相対的に高負荷のときは、装置１４に代わって、装置１１で行い、負荷がさらに高い場合には、装置１１でより多くの受信データに対して処理３を実行する。
【００５０】
この負荷分散制御を実現するため制御部１１５は、処理２を実行後、ｏｆｆ−ｌｏａｄカウンタ１１７の値が閾値算出部１１８で装置１４の待ち行列の長さに基づき算出された閾値よりも大のとき、完了ステップ＝２とともに、装置１４に出力する。ｏｆｆ−ｌｏａｄカウンタ１１７の値が閾値以下の場合、処理３を実行し、ｏｆｆ−ｌｏａｄカウンタ１１７を１つ増加させ、完了ステップ＝３とともに、装置１４に出力する。
【００５１】
なお、図４では、簡単のため、制御部１１５が、データパスの各部１１１−１１４と、制御系の各部１１６−１１９をそれぞれ制御信号線で制御する構成として図示しているが、データパスと制御系の制御部を別に備えた構成としてもよいし、あるいは、制御部１１５内に制御系の各部１１６−１１９を備えた構成としてもよい。
【００５２】
図２は、本発明の一実施形態の動作を説明する流れ図である。図３は、本発明の一実施形態の動作を説明する図である。図２乃至図４を参照して、装置１１、１２、１３のより詳細な動作を説明する。装置１１、１２、１３は、同じ手順に従って動作を行うので、装置１１として説明する。
【００５３】
装置１１において、受信カウンタ１１６のカウント値と閾値は０〜１００とされているが、かかる値に制限されるものでないことは勿論である（例えば１００を他の値に変更してもよい）。閾値が１００の場合、装置１１における受信データに対する処理―３の処理件数（ｏｆｆ−ｌｏａｄカウンタ１１７でカウントされる）は最大１００までとなる。
【００５４】
例えばパワーアップやリセット時等の装置１１の初期化時に、装置１１の制御部１１５は、受信カウンタ１１６とｏｆｆ−ｌｏａｄカウンタ１１７を０クリアする（ステップＳ１）。
【００５５】
装置１１は、装置１０からのデータを処理するループ（無限ループ）に入る（例えば外部からの停止の指示等に基づく割り込みやリセットによりデータ処理を停止する以外、データ処理を繰り返す）。
【００５６】
装置１１の処理部１１３は、待ち行列１１２からデータを受信する（ステップＳ２）。これに応じて、制御部１１５は、受信カウンタ１１６のカウント値を１つ増加させる（ステップＳ３）。なお、装置１１において、処理部１１３が待ち行列１１２からデータを受信すると、待ち行列１１２の長さ（処理待ち状態として保持されるデータの量に対応する）は１単位減少する。
【００５７】
その結果、受信カウンタ１１６のカウント値が１００を超えた場合（ステップＳ４のＹＥＳ分岐）、制御部１１５は、受信カウンタ１１６とｏｆｆ−ｌｏａｄカウンタ１１７を０クリアし（ステップＳ５）、その後、ステップＳ６に移る。受信カウンタ１１６のカウント値が例えば１００以下の場合（ステップＳ４のＮＯ分岐）、ステップＳ６に移る。
【００５８】
ステップＳ６では、処理部１１３が受信したデータに対して処理−２を実行する。
【００５９】
待ち行列長さ取得部１１９は、合流先の装置１４の待ち行列１５（図１（Ａ）参照）の長さ情報を取得する（ステップＳ７）。装置１４は、待ち行列１５を管理する管理部から、自装置内の待ち行列１５の長さ情報を、制御系通信路（不図示）を介して、装置１１に通知する構成としてもよい。
【００６０】
閾値算出部１１８は、取得した合流先の装置１４の待ち行列１５（図１（Ａ））に対して所定の演算を行うことで（あるいはテーブルルックアップ方式で）、閾値を算出（導出）し、制御部１１５に算出した閾値を供給する（ステップＳ８）。
【００６１】
閾値は、例えば具体的なシステムに応じて設定される。特に制限されないが、簡単な例として、図３に示すように、取得した装置１４の待ち行列１５の長さが「１８」であれば、閾値算出部１１８で算出される閾値は１０となる。また、取得した装置１４の待ち行列１５の長さが「０」〜「９」であれば、装置１４での負荷は低いと判断されるため、閾値は「０」となる。この場合、装置１１では受信したデータに対して処理３は実行せず、装置１４で処理３を実行する。
【００６２】
制御部１１６は、閾値算出部１１８で算出された閾値とｏｆｆ−ｌｏａｄカウンタ１１７のカウント値とを比較する。ｏｆｆ−ｌｏａｄカウンタ１１７のカウント値が閾値を超えている場合（ステップＳ９のＹＥＳ分岐）、完了ステップ＝２（「処理−２まで処理した」ことを表す情報）と共に、処理−２の結果を、装置１４に送信し（ステップＳ１０）、ステップＳ２に戻る。
【００６３】
装置１１において、閾値算出部１１８で算出された閾値がｏｆｆ−ｌｏａｄカウンタ１１７のカウント値以上である場合（ステップＳ９のＮＯ分岐）、処理部１１３は、受信データ（例えば、ステップＳ６で処理―２が実行されたデータ）に対して、処理−３を実行する（ステップＳ１１）。
【００６４】
その後、制御部１１５は、ｏｆｆ−ｌｏａｄカウンタ１１７のカウント値を＋１増加させる（ステップＳ１２）。
【００６５】
制御部１１５は、送信部１１４から、完了ステップ＝３（「処理−３まで処理した」ことを表す情報）と共に、処理−３の結果を、装置１４に送信し（ステップＳ１３）、ステップＳ２に戻る。
【００６６】
なお、装置１１において、処理−２、処理―３で処理、ｏｆｆ−ｌｏａｄカウンタ１１７のカウント値を＋１増加させるデータ（待ち行列１１２から取り出されるデータ）は、データを、出力元の装置（図１（Ａ）の装置１０）から装置１１に送信されるパケットデータ、フレームデータ等、固定長（一定の長さ）のデータ単位であってもよい。あるいは、可変長データであってもよい。この場合、単位データ長（サイズ）の２倍のデータ量のデータに対して、処理−３を実行した場合、ｏｆｆ−ｌｏａｄカウンタ１１７のカウント値を単位データ長の２倍、したがって＋２増加させるようにしてもよい。
【００６７】
なお、実装に依存するが、図２のステップＳ７の合流先装置の待ち行列の長さ取得処理において、合流先装置の待ち行列の長さの取得の処理時間等を考慮して、受信データごとに合流先装置（図１（Ａ）の１４）の待ち行列の長さを取得するのではなく、ある所定期間ごとに、取得するようにしてもよい。
【００６８】
上記した実施形態によれば、以下のような作用効果を奏する。
【００６９】
Ａ）  合流先の装置（図１（Ａ）の１４）の負荷が上昇した場合に、負荷をデータの出力元の装置（図１（Ａ）の１１、１２、１３）との間で負担する構成としている。この結果、システム全体で負荷を平均化している。すなわち、システム全体でのリソース、能力の有効活用を可能とし、スループットの向上に貢献する。
【００７０】
Ｂ）  合流先の装置（図１（Ａ）の１４）の負荷の測定を行うために、専用の装置、処理を追加する必要はない。装置の待ち行列の長さの管理機能は、リソースの管理のために、一般的に、待ち行列を備えた装置に具備されている。この機能を用いて、出力元の装置は、合流先の装置の待ち行列の長さ情報を取得し、合流先の装置の負荷状況を判断するためである。
【００７１】
Ｃ）  装置１１、１２、１３間でも処理の負荷分散を促すという作用効果を奏する。装置１１、１２、１３では、処理―２（又は処理２と処理−３）を実行するか、装置１１、１２、１３が追加で実行することになる処理−３の量は、データの処理能力の高い装置程高くなる。多量のデータを処理可能な装置程、処理−３を実行するデータの件数が増えるためである。
【００７２】
＜変形例１＞
前記実施形態の変形例として、パイプライン処理への適用がある。図１の前記実施形態では、前段の装置１１〜１３の３台、後段の装置１４の１台である。前段の装置と後段の装置が各１台の部分に着目して、前段、後段の装置のパイプライン処理に前記実施形態の機構を導入することが可能である。すなわち、前段の装置が、後段の装置の負荷状況に応じて後段の装置で行われるパイプラインステージを後段の装置に代わって実行する。この場合、前段の装置が１つであるため、上記C）の作用効果は得られないが、A)、B)の作用効果は得られる。
【００７３】
＜変形例２＞
更に別の変形例では、装置間で、動的に割り付ける処理を複数としている。図１を参照して説明した前記実施形態では、前段（出力元）の装置１１、１２、１３で実行するか、後段（合流先）の装置１４で実行するかを、動的に決める対象の処理は、処理−３に限定されている。しかしながら、装置１４が実行する処理として、処理−３、処理−４、処理−５等が含まれる場合、処理−３と処理−４を動的に、前段（出力元）の装置で実行することも可能である。この場合、後段（合流先）の装置１４の待ち行列１５に設定されるデータに付属させる完了ステップの情報は、「２」、「３」、「４」のいずれかになる。この完了ステップの情報に応じて、装置１４は、
「処理−３、処理−４、処理−５を実行する」、
「処理−４、処理−５を実行する」、
「処理−５を実行する」
のいずれかを選択する。
【００７４】
上記実施形態は、例えばシステムがその一部に、１個以上の前段の装置(処理装置)と、１個の後段の装置（処理装置）を含む場合、当該部分の負荷制御に適用して好適とされる。また定型的なデータを大量に処理する、通信装置に適用して好適とされる。
【００７５】
なお、上記の特許文献の開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ乃至選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【００７６】
１、２０  システム
２  入力チャネル
３  出力チャネル
１０、１１、１２、１３、１４  装置
１５  待ち行列
２１  第１の装置
２２  第２の装置
２３  入力データ
２４、２５  処理結果
１１１  受信部
１１２  待ち行列
１１３  処理部
１１４  送信部
１１５  制御部
１１６  受信カウンタ
１１７  オフロード（ｏｆｆ−ｌｏａｄ）カウンタ
１１８  閾値算出部
１１９  待ち行列長さ取得部
２１１、２２１  処理
２１２  制御手段（制御機能）
２１３  処理待ち状態のデータ量（待ち行列の長さ）
２２２  処理待ち状態のデータ（待ち行列）
【図１】
2015185036.tif 000003
【図２】
2015185036.tif 000004
【図３】
2015185036.tif 000005
【図４】
2015185036.tif 000006
【図５】
2015185036.tif 000007