特許第5836229号(P5836229)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧
特許5836229ストリーム処理装置、サーバ、及び、ストリーム処理方法
<>
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000002
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000003
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000004
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000005
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000006
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000007
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000008
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000009
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000010
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000011
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000012
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000013
  • 特許5836229-ストリーム処理装置、サーバ、及び、ストリーム処理方法 図000014
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5836229
(24)【登録日】2015年11月13日
(45)【発行日】2015年12月24日
(54)【発明の名称】ストリーム処理装置、サーバ、及び、ストリーム処理方法
(51)【国際特許分類】
   H04L 12/70 20130101AFI20151203BHJP
【FI】
   H04L12/70 E
【請求項の数】9
【全頁数】34
(21)【出願番号】特願2012-194346(P2012-194346)
(22)【出願日】2012年9月4日
(65)【公開番号】特開2014-50091(P2014-50091A)
(43)【公開日】2014年3月17日
【審査請求日】2014年11月7日
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】100114236
【弁理士】
【氏名又は名称】藤井 正弘
(74)【代理人】
【識別番号】100075513
【弁理士】
【氏名又は名称】後藤 政喜
(72)【発明者】
【氏名】福村 裕祐
【審査官】 菊地 陽一
(56)【参考文献】
【文献】 特開2008−187323(JP,A)
【文献】 特開平06−350670(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 12/70
(57)【特許請求の範囲】
【請求項1】
ネットワークから入力されたパケットに含まれるデータに、クエリ処理を行うストリーム処理装置であって、
前記ストリーム処理装置は、
前記入力されたパケットを複数に複製する複製部と、
前記複製されたパケットのうちの一方のパケットに、前記ネットワークに対応するプロトコル処理を行うことによって、前記パケットにエラーがあるか否かを判定するプロトコル処理部と、
前記プロトコル処理による判定結果を示す管理フラグを格納する記憶部と、
前記複製されたパケットのうちの他方のパケットから、前記クエリ処理に必要なデータを抽出するデータ抽出部と、
前記抽出されたデータに前記クエリ処理を行い、当該クエリ処理の結果を含むデータを出力するクエリ処理部と、
前記クエリ処理部から出力されたデータを、前記管理フラグに基づいて、前記ストリーム処理装置から出力するか否かを決定する出力制御部と、
前記ストリーム処理装置は、前記抽出されたデータを保持する入力レジスタとを、有し、
前記クエリ処理部は、
前記抽出されたデータのうち蓄積されたデータを用いた所定の処理の結果を取得し、
前記取得された処理の結果と、前記抽出されたデータとに基づいて、前記クエリ処理を行い、
前記出力制御部は、前記クエリ処理部から出力されたデータを、前記ストリーム処理装置から前記ネットワークに出力することを決定した場合、前記入力レジスタに保持される抽出されたデータを蓄積することを決定することを特徴とするストリーム処理装置。
【請求項2】
請求項1に記載のストリーム処理装置であって、
前記ストリーム処理装置は、前記抽出されたデータを、前記クエリ処理部へ入力するか否かを決定する入力制御部を有し、
前記入力制御部は、前記管理フラグが前記プロトコル処理による判定結果を保持する場合、前記管理フラグに従って、前記抽出されたデータを、前記クエリ処理部へ入力するか否かを決定することを特徴とするストリーム処理装置。
【請求項3】
請求項1に記載のストリーム処理装置であって、
前記パケットは、シーケンス番号を含み、
前記プロトコル処理部は、前記クエリ処理に必要なデータが各々に分割されて含まれる、複数の前記パケットを受信した場合、
前記複数のパケットの各々が含むデータを、前記シーケンス番号に基づいて結合し、
前記複数のパケットのうちの一つの第1のパケットに含まれるデータを、前記結合されたデータによって更新し、
前記結合されたデータを含む前記第1のパケットを、前記データ抽出部に入力し、
前記複数のパケットに含まれる前記第1のパケット以外の第2のパケットから抽出されたデータに前記クエリ処理を行った結果を、前記ストリーム処理装置から出力しないように、前記管理フラグを更新することを特徴とするストリーム処理装置。
【請求項4】
ネットワークから入力されたパケットに含まれるデータに、クエリ処理を行うサーバであって、
前記サーバは、
前記入力されたパケットを複数に複製する複製部と、
前記複製されたパケットのうちの一方のパケットに、前記ネットワークに対応するプロトコル処理を行うことによって、前記パケットにエラーがあるか否かを判定するプロトコル処理部と、
前記プロトコル処理による判定結果を示す管理フラグを格納する記憶部と、
前記複製されたパケットのうちの他方のパケットから、第1のクエリ処理に必要なデータを抽出するデータ抽出部と、
前記抽出されたデータに前記第1のクエリ処理を行い、前記第1のクエリ処理の結果を含むデータを出力する第1のクエリ処理部と、
前記第1のクエリ処理部から出力されたデータを、前記管理フラグに基づいて、前記サーバから出力するか否かを決定する出力制御部と、
前記抽出されたデータを保持する入力レジスタと、
前記抽出されたデータを蓄積するデータ蓄積部と、
前記データ蓄積部に蓄積されたデータに、第2のクエリ処理を行う第2のクエリ処理部と、を有し、
前記第1のクエリ処理部は、前記第2のクエリ処理部による処理結果と、前記抽出されたデータとに基づいて、前記第1のクエリ処理を行い、
前記出力制御部は、前記第1のクエリ処理部から出力されたデータを、前記サーバから前記ネットワークに出力することを決定した場合、前記入力レジスタに保持される抽出されたデータを前記データ蓄積部に蓄積することを特徴とするサーバ。
【請求項5】
請求項4に記載のサーバであって、
前記サーバは、前記抽出されたデータを、前記第1のクエリ処理部へ入力するか否かを決定する入力制御部を有し、
前記入力制御部は、前記管理フラグが前記プロトコル処理による判定結果を保持する場合、前記管理フラグに従って、前記抽出されたデータを、前記第1のクエリ処理部へ入力するか否かを決定することを特徴とするサーバ。
【請求項6】
請求項4に記載のサーバであって、
前記パケットは、シーケンス番号を含み、
前記プロトコル処理部は、前記クエリ処理に必要なデータが各々に分割されて含まれる、複数の前記パケットを受信した場合、
前記複数のパケットの各々が含むデータを、前記シーケンス番号に基づいて結合し、
前記複数のパケットのうちの一つの第1のパケットに含まれるデータを、前記結合されたデータによって更新し、
前記結合されたデータを含む前記第1のパケットを、前記データ抽出部に入力し、
前記複数のパケットに含まれる前記第1のパケット以外の第2のパケットから抽出されたデータに前記第1のクエリ処理を行った結果を、前記サーバから出力しないように、前記管理フラグを更新することを特徴とするサーバ。
【請求項7】
ネットワークから入力されたパケットに含まれるデータに、クエリ処理を行うストリーム処理装置によるストリーム処理方法であって、
前記ストリーム処理装置は、プロセッサ及びメモリを有し、
前記方法は、
前記プロセッサが、前記入力されたパケットを複数に複製する複製手順と、
前記プロセッサが、前記複製されたパケットのうちの一方のパケットに、前記ネットワークに対応するプロトコル処理を行うことによって、前記パケットにエラーがあるか否かを判定するプロトコル処理手順と、
前記プロセッサが、前記プロトコル処理による判定結果を示す管理フラグを前記メモリに格納する記憶手順と、
前記プロセッサが、前記複製されたパケットのうちの他方のパケットから、前記クエリ処理に必要なデータを抽出するデータ抽出手順と、
前記プロセッサが、前記抽出されたデータに前記クエリ処理を行い、当該クエリ処理の結果を含むデータを出力するクエリ処理手順と、
前記プロセッサが、前記クエリ処理手順によって出力されたデータを、前記管理フラグに基づいて、前記ストリーム処理装置から出力するか否かを決定する出力制御手順と、を含み、
前記ストリーム処理装置は、前記抽出されたデータを保持する入力レジスタを、さらに有し、
前記クエリ処理手順は、
前記プロセッサが、前記抽出されたデータのうち蓄積されたデータを用いた所定の処理の結果を取得する手順と、
前記プロセッサが、前記取得された処理の結果と、前記抽出されたデータとに基づいて、前記クエリ処理を行う手順と、を含み、
前記出力制御手順は、前記クエリ処理手順によって出力されたデータを、前記ストリーム処理装置から前記ネットワークに出力することを決定した場合、前記入力レジスタに保持される抽出されたデータを蓄積することを決定する手順を含むことを特徴とするストリーム処理方法。
【請求項8】
請求項7に記載のストリーム処理方法であって、
前記方法は、
前記プロセッサが、前記抽出されたデータを、前記クエリ処理手順へ入力するか否かを決定する入力制御手順を有し、
前記入力制御手順は、前記プロセッサが、前記管理フラグが前記プロトコル処理による判定結果を保持する場合、前記管理フラグに従って、前記抽出されたデータを、前記クエリ処理手順へ入力するか否かを決定する手順を含むことを特徴とするストリーム処理方法。
【請求項9】
請求項7に記載のストリーム処理方法であって、
前記パケットは、シーケンス番号を含み、
前記プロトコル処理手順は、前記プロセッサが、前記クエリ処理に必要なデータが各々に分割されて含まれる、複数の前記パケットを受信した場合、
前記プロセッサが、前記複数のパケットの各々が含むデータを、前記シーケンス番号に基づいて結合する手順と、
前記プロセッサが、前記複数のパケットのうちの一つの第1のパケットに含まれるデータを、前記結合されたデータによって更新する手順と、
前記プロセッサが、前記結合されたデータを含む前記第1のパケットを、前記データ抽出手順に入力する手順と、
前記プロセッサが、前記複数のパケットに含まれる前記第1のパケット以外の第2のパケットから抽出されたデータに前記クエリ処理を行った結果を、前記ストリーム処理装置から出力しないように、前記管理フラグを更新する手順と、を含むことを特徴とするストリーム処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストリーム処理装置に関する。
【背景技術】
【0002】
ストリーム処理技術は、センサデータのような時々刻々と発生するフローデータを、高速に処理する技術である。データベース管理システムに備わるサーバが、ストリーム処理を用いずにデータを処理する場合、サーバは、入力されたフローデータを、HDD(Hard Disk Drive)に格納し、HDDから読み出されたデータに定められた処理を行う。これに対して、サーバがストリーム処理によってデータを処理する場合、サーバが有するメモリにデータが書き込まれた場合、サーバは、データに定められた処理を即座に行う。このため、ストリーム処理の技術は、リアルタイム性が求められる処理に適している。
【0003】
図12は、従来のストリーム処理を行うサーバ101を示すブロック図である。
【0004】
サーバ101は、CPU102、メモリ103、入力ネットワークアダプタ105、IOハブ104、及び、出力ネットワークアダプタ106を有する従来の計算機である。
【0005】
センサデータ等の入力データが、ネットワークからサーバ101に入力された場合、サーバ101は、入力データを入力ネットワークアダプタ105によって受け取る。入力ネットワークアダプタ105は、ネットワークにおける下位層のプロトコル処理を入力データに行う。
【0006】
CPU102は、プロトコル処理によって入力データから取り出されるデータを、IOハブ104を介して受信する。そして、CPU102は、入力データから取り出されたデータをメモリ103に格納する。
【0007】
CPU102は、メモリ103に格納されたデータに、ネットワークの上位層のプロトコル処理を行うことによって、センサデータ等のアプリケーションデータを得る。そして、CPU102は、メモリ103にインストールされたストリーム処理ソフトウエアによって、得られたアプリケーションデータと、メモリ103に蓄積された複数のセンサデータ(内部状態)とから、出力データを求める。
【0008】
CPU102は、求められた出力データを、ネットワーク経由で別の機器に送るため、ネットワークの上位層のプロトコル処理を出力データに行った後、出力データを出力ネットワークアダプタ106へ送る。出力ネットワークアダプタ106は、送られた出力データにネットワークの下位層のプロトコル処理を行った後、出力データを別の機器へ送信する。
【0009】
近年、金融分野及び産業機器制御分野において、リアルタイム処理のニーズが高まっており、ストリーム処理を適用するシステムが増えつつある。そのため、ストリーム処理では、レスポンスタイム(サーバにデータが入力されてから、サーバからデータが出力されるまでの時間)の向上が望まれている。
【0010】
前述したとおり、レスポンスタイムには、ストリーム処理ソフトウエアによる処理の時間だけでなく、ネットワークのプロトコル処理の時間も含まれており、レスポンスタイムの向上には、ストリーム処理ソフトウエアによる処理の時間及びネットワークのプロトコル処理の時間の両方又はいずれかを低減する必要がある。
【0011】
従来、複数の入力データの処理をパイプライン化することによって、ストリーム処理ソフトウエアによる処理のスループットをあげ、処理時間を低減する技術が提案されている(例えば、特許文献1参照)。
【0012】
また、ネットワークのプロトコル処理については、パケットに対するプロトコル処理において、パケットをパケットプリフィックスとデータブロックとに分割して処理する技術が提案されている(例えば、特許文献2参照)。
【先行技術文献】
【特許文献】
【0013】
【特許文献1】特開2009−134391号公報
【特許文献2】特開平08−265280号公報
【発明の概要】
【発明が解決しようとする課題】
【0014】
特許文献1に記載のストリーム処理の高速化は、ストリーム処理を並列に実行することによって、短時間に複数の入力があった場合のストリーム処理の全体の処理時間を低減するものであり、短時間に複数の入力がない場合に、ストリーム処理自体のレスポンスタイムを低減するものではない。
【0015】
一方で、ネットワークのプロトコル処理は、一般的に、ネットワークアダプタとサーバが有するOSとによって行われ、所定の規則に従って順序どおり行われる必要がある。このため、ネットワークのプロトコル処理を高速化することは難しい。
【0016】
特許文献2に記載された処理において、パケットをパケットプリフィックスとデータブロックとに分割して並列に処理する技術が提案されているが、ストリーム処理ソフトウエアがストリーム処理を行うために必要なデータをパケットから抽出しないため、正常なストリーム処理結果を得ることができない。
【0017】
本発明の目的は、ストリーム処理を正常に行い、かつ、ストリーム処理のレスポンスタイムを低減できる装置の提供である。
【課題を解決するための手段】
【0018】
本発明の代表的な一例を示せば以下の通りである。すなわち、ネットワークから入力されたパケットに含まれるデータに、クエリ処理を行うストリーム処理装置であって、前記ストリーム処理装置は、前記入力されたパケットを複数に複製する複製部と、前記複製されたパケットのうちの一方のパケットに、前記ネットワークに対応するプロトコル処理を行うことによって、前記パケットにエラーがあるか否かを判定するプロトコル処理部と、前記プロトコル処理による判定結果を示す管理フラグを格納する記憶部と、前記複製されたパケットのうちの他方のパケットから、前記クエリ処理に必要なデータを抽出するデータ抽出部と、前記抽出されたデータに前記クエリ処理を行い、当該クエリ処理の結果を含むデータを出力するクエリ処理部と、前記クエリ処理部から出力されたデータを、前記管理フラグに基づいて、前記ストリーム処理装置から出力するか否かを決定する出力制御部と、前記ストリーム処理装置は、前記抽出されたデータを保持する入力レジスタとを、有し、前記クエリ処理部は、前記抽出されたデータのうち蓄積されたデータを用いた所定の処理の結果を取得し、前記取得された処理の結果と、前記抽出されたデータとに基づいて、前記クエリ処理を行い、前記出力制御部は、前記クエリ処理部から出力されたデータを、前記ストリーム処理装置から前記ネットワークに出力することを決定した場合、前記入力レジスタに保持される抽出されたデータを蓄積することを決定する。
【発明の効果】
【0019】
本発明の一実施形態によると、ストリーム処理を正常に行い、かつ、ストリーム処理のレスポンスタイムを低減できる。
【図面の簡単な説明】
【0020】
図1】本実施例の計算機システムを示すブロック図である。
図2】本実施例のストリームプロセッサの内部構成を示すブロック図である。
図3】本実施例のストリーム処理部における処理の詳細を示すブロック図である。
図4A】本実施例のサーバを用いた異常検知システム示す説明図である。
図4B】本実施例のサーバを用いた異常検知システムにおける異常判定の方法を示す説明図である。
図5】本実施例のストリーム処理部がストリーム処理を行うための設定を取得する処理を示すフローチャートである。
図6】本実施例のストリーム処理部に入力されるパケットのフォーマットを示す説明図である。
図7】本実施例のストリーム処理部によるストリーム処理を示すフローチャートである。
図8】本実施例のストリーム処理部が受信するTCP/IPパケットを示す説明図である。
図9】本実施例の管理フラグを示す説明図である。
図10】本実施例の入力レジスタからデータを取り出す入力条件を示す説明図である。
図11】本実施例の出力レジスタからデータを取り出す出力条件を示す説明図である。
図12】従来のストリーム処理を行うサーバを示すブロック図である。
【発明を実施するための形態】
【0021】
以下に、ネットワークのプロトコル処理と、ストリーム処理におけるクエリ処理とを、並行に実行することによって、レスポンスタイムを低減するストリーム処理装置を示す。
【0022】
図1は、本実施例のサーバ202を示すブロック図である。
【0023】
本実施例のサーバ202は、ネットワークに接続される計算機であり、入力されたデータにストリーム処理を実行する。サーバ202は、ストリームアクセラレータ201、ホストCPU203、メモリ204、IOハブ205、及び、IOバス210を備える。
【0024】
なお、サーバ202は、ユーザ(サーバ202の開発者又は管理者等)によって入力された情報を受けつけるため、キーボード又はマウス等を備えた入力装置を有してもよく、また、キーボード又はマウス等を備えた入力装置と接続されてもよい。
【0025】
ホストCPU203は、演算装置である。ホストCPU203は、演算処理ができれば、CPU(Central Processing Unit)以外のプロセッサでもよい。また、ホストCPU203は、複数のプロセッサを有してもよい。本実施例のホストCPU203は、ストリーム処理におけるクエリ処理を行う。
【0026】
メモリ204は、サーバ202に入力されたデータ等を蓄積するための記憶領域である。本実施例のホストCPU203は、メモリ204に蓄積された一つ又は複数のデータを読み出し、読み出されたデータに、ユーザによって指定されたクエリ処理を実行する。
【0027】
IOハブ205は、ストリームアクセラレータ201によってIOハブ205に入力されるデータを、ホストCPU203に送信する。また、IOハブ205は、ホストCPU203によってIOハブ205に入力されるデータを、ストリームアクセラレータ201に送信する。IOハブ205とストリームアクセラレータ201とは、IOバス210によって接続される。
【0028】
ストリームアクセラレータ201は、入力されたデータにストリーム処理を行うための装置であり、本実施例の後述する処理によって、レスポンスタイムを短縮するための装置である。ストリームアクセラレータ201は、一般的な計算機に搭載できる拡張カードの形状であってもよい。ストリームアクセラレータ201は、ストリームプロセッサ206、DRAM207、入力ネットワークポート208、及び、出力ネットワークポート209を有する。
【0029】
入力ネットワークポート208は、サーバ202に入力されるデータを受け付け、入力されたデータをストリームプロセッサ206に送信するポートである。出力ネットワークポート209は、ストリームプロセッサ206から出力されたデータを、サーバ202から出力するポートである。
【0030】
ストリームプロセッサ206は、サーバ202に入力されたデータに所定のネットワーク処理及びクエリ処理を実行するプロセッサである。DRAM207は、ストリームプロセッサ206がクエリ処理を実行するために使用する記憶領域である。
【0031】
なお、本実施例において、サーバ202に入力されるデータは、サーバ202に到着した際、ネットワークにおける通信の単位であるパケットに含まれる。このため、以下において、サーバ202は、サーバ202に接続されるネットワークから、データを含むパケットを受信するものとして記載される。
【0032】
図2は、本実施例のストリームプロセッサ206の内部構成を示すブロック図である。
【0033】
ストリームプロセッサ206は、組み込みCPU301、MemoryI/F302、IOバスI/F303、及び、ストリーム処理部304を有する。
【0034】
IOバスI/F303は、図1に示すIOバス210を介して、IOハブ205に接続されるインターフェースである。MemoryI/F302は、ストリームプロセッサ206が、クエリ処理を実行する際にDRAM207と接続するためのインターフェースである。
【0035】
ストリーム処理部304は、入力ネットワークのプロトコル処理、出力ネットワークのプロトコル処理、及び、クエリ処理(ストリーム処理の一部)を行う。本実施例の入力ネットワークのプロトコル処理とは、サーバ202に接続されるネットワークに従って、パケットに行われるあらかじめ定められた処理であり、入力されたパケットに含まれるデータに、クエリ処理を行うための処理である。
【0036】
また、本実施例の出力ネットワークのプロトコル処理とは、クエリ処理が行われた後のデータをサーバ202からネットワークへ出力するための処理であり、例えば、クエリ処理後のデータをパケットに格納する処理である。
【0037】
組み込みCPU301は、サーバ202のホストCPU203とストリーム処理部304とのデータ送受信制御、及び、DRAM207とストリーム処理部304とのデータ送受信制御を行う。
【0038】
図3は、本実施例のストリーム処理部304における処理の詳細を示すブロック図である。
【0039】
図3に示す各ブロックは、ストリーム処理部304による処理を示すが、ストリーム処理部304は、各ブロックに示す処理を実行する複数の物理的な装置(処理部)を有してもよい。また、ストリーム処理部304は、各ブロックに示す処理を実行するソフトウエアを有してもよい。
【0040】
以下における説明において、図3に示すストリーム処理部304は、各ブロックの処理を実行する物理的な処理部を有する。また、図3に示すストリーム処理部304は、レジスタ等の記憶部を有し、処理に用いるデータ等を一時的に記憶部に格納する。
【0041】
ストリーム処理部304は、処理部として、EtherPHY部401、EtherMAC部402、IP処理部403、TCP/UDP処理部404、データ抽出部405、TCP/UDP処理部408、IP処理部409、EtherMAC部410、EtherPHY部411、クエリ処理部413、入力レジスタ制御部415、出力レジスタ制御部416、エントリ番号付与部417、及び、エントリ番号生成部418を有する。
【0042】
また、ストリーム処理部304は、記憶部として、入力レジスタ406、出力レジスタ407、及び、一時レジスタ412を有する。また、ストリーム処理部304は、管理フラグ414を格納する記憶部を有する。
【0043】
以下において示す実施例は、サーバ202が接続するネットワークが、Ethernet(登録商標、以下同じ)によって実装されるネットワークである場合の実施例である。このため、以下に示すストリーム処理の対象となるデータは、Ethernetにおけるパケットのペイロード部分に含まれて、ストリーム処理部304に入力される。
【0044】
ただし、本実施例におけるストリーム処理の対象となるデータは、Ethernetのパケットに含まれるとは限らず、サーバ202が接続されるネットワークに従った通信の単位によって、サーバ202に送信される。
【0045】
入力ネットワークポート208から入力されたパケットには、サーバ202が接続されるネットワークの規約に従った順序どおりに、入力ネットワークのプロトコル処理及び出力ネットワークのプロトコル処理が行われる。図3に示すストリーム処理部304は、例として、サーバ202がEthernetのネットワークにおいてTCP/IPプロトコルを利用する場合のプロトコル処理を実行する。
【0046】
しかし、ストリーム処理部304が実行する入力ネットワークのプロトコル処理及び出力ネットワークのプロトコル処理は、Ethernet上のTCP/IPプロトコルに関するプロトコル処理である必要はなく、ネットワークにおいて提供されるプロトコルに従った処理であればよい。
【0047】
EtherMAC部402、IP処理部403、及び、TCP/UDP処理部404は、図3におけるストリーム処理部304の入力ネットワークのプロトコル処理を実行する。また、TCP/UDP処理部408、IP処理部409、及び、EtherMAC部410は、図3におけるストリーム処理部304の出力ネットワークのプロトコル処理を実行する。
【0048】
EtherPHY部401は、入力ネットワークポート208を介して受信したアナログ信号によるパケットを、デジタル信号によるパケットに変換する。EtherPHY部411は、EtherMAC部410から出力されたデジタル信号によるパケットを、アナログ信号によるパケットに変換する。
【0049】
データ抽出部405は、入力されたパケットから、クエリ処理に必要なデータを抽出する処理部である。
【0050】
入力レジスタ406は、クエリ処理に必要なデータを格納するための少なくとも一つの記憶領域を有するレジスタであり、エントリ番号付与部417によってパケットに付与されるエントリ番号の数と同じ数の記憶領域を有する。また、入力レジスタ406が有する各記憶領域には、パケットに付与されるエントリ番号が割り当てられる。
【0051】
出力レジスタ407は、クエリ処理結果を格納するための記憶領域を有するレジスタである。出力レジスタ407は、クエリ処理部413によるクエリ処理の内容に従った数の記憶領域を有する。
【0052】
一時レジスタ412は、ホストCPU203によるクエリ処理によって求められた処理結果を格納するための少なくとも一つの記憶領域を有するレジスタである。また、一時レジスタ412は、クエリ処理部413による処理の途中結果を格納してもよい。
【0053】
さらに、一時レジスタ412は、一時結果終了フラグ419を有する。一時結果終了フラグ419は、一時レジスタ412に、ホストCPU203による処理結果が格納されたか否かを示すフラグである。
【0054】
入力レジスタ制御部415は、入力レジスタ406からの読み出し及び入力レジスタ406への書き込みを制御する。入力レジスタ制御部415は、入力条件801を有する。
【0055】
入力条件801は、入力レジスタ406に格納されたデータのうち、クエリ処理部413に入力するべきデータの条件を示す情報である。
【0056】
出力レジスタ制御部416は、入力レジスタ406及び出力レジスタ407からの読み出し、及び、出力レジスタ407への書き込みを制御する。出力レジスタ制御部416は、出力条件802を有する。
【0057】
出力条件802は、出力レジスタ407に格納されたデータを、サーバ202から出力するか否かを決定するための条件を示す情報である。
【0058】
クエリ処理部413は、ホストCPU203によるクエリ処理の結果と、入力レジスタ406に格納されるデータとに、ユーザによって指定されたクエリ処理を実行する処理部である。クエリ処理部413がクエリ処理を実行することによって、ストリーム処理部304によるストリーム処理が実行される。
【0059】
管理フラグ414は、入力ネットワークのプロトコル処理の処理結果を示す情報である。管理フラグ414は、ストリーム処理部304が有する記憶部に格納される。
【0060】
エントリ番号生成部418は、ストリーム処理部304に入力されたパケットを管理するために、各パケットに一意のエントリ番号を生成する処理部である。エントリ番号生成部418は、エントリ番号の所定の数をユーザによって指定されてもよく、また、入力レジスタ406が有する記憶領域の数と同じ数のエントリ番号を保持してもよい。
【0061】
エントリ番号付与部417は、エントリ番号生成部418によって生成された番号を、パケットに付加する処理部である。エントリ番号生成部418は、エントリ番号付与部417の指示に従い、エントリ番号をエントリ番号付与部417に入力する。
【0062】
また、エントリ番号付与部417は、パケットを少なくとも二つに複製し、複製された一方のパケットをデータ抽出部405に入力し、他方のパケットをEtherMAC部402に入力する。なお、入力ネットワークのプロトコル処理において、複製されたパケットが並列に処理される場合、エントリ番号付与部417は、パケットを三つ以上に複製してもよい。
【0063】
サーバ202におけるストリーム処理は、本実施例において、ホストCPU203及びクエリ処理部413が、各々のクエリ処理を行うことによって実行される。
【0064】
ホストCPU203は、メモリ204に蓄積されたデータのうち、所定の期間前にサーバ202に到着したデータから、最新のデータまでのデータ(すなわち、内部状態)を用いて、ホストCPU203のクエリ処理を行う。そして、ホストCPU203は、ホストCPU203によるクエリ処理の結果を、ストリーム処理部304に入力し、クエリ処理部413は、ホストCPU203から入力された処理の結果と、最新のデータとによって、クエリ処理部413のクエリ処理(ホストCPU203におけるクエリ処理とは異なる)を行う。
【0065】
以下において、サーバ202が異常検知システムを実装するための計算機である場合を例として、本実施例のストリーム処理を説明する。ただし、本実施例のサーバ202は、様々なストリーム処理を行うシステムに適用されるため、図4Aに示す異常検知システムのみを実装するための計算機ではない。
【0066】
図4Aは、本実施例のサーバ202を用いた異常検知システム示す説明図である。
【0067】
本実施例の異常検知システムは、機器601、及び、サーバ202(異常検知装置)を備える。機器601は、少なくとも一つのセンサを備え、機器601に備わる各センサによって測定されたセンサデータを、サーバ202に送信する。
【0068】
図4Aに示すサーバ202は、異常検知装置である。サーバ202は、受信したセンサデータにストリーム処理を実行し、処理結果に基づいて機器601の状態が異常であるか否かを判定する。そして、サーバ202は、判定結果に従った信号を、機器601に送信する。
【0069】
図4Aにおいて、サーバ202が、機器601の状態が異常であると判定した場合、サーバ202は、機器停止信号を機器601に送信することによって、機器601を停止させる。また、サーバ202が、機器601の状態が異常ではないと判定した場合、サーバ202は、正常であることを示す正常通知信号を機器601に送信する。
【0070】
図4Bは、本実施例のサーバ202を用いた異常検知システムにおける異常判定の方法を示す説明図である。
【0071】
図4Bに示すグラフは、機器601において測定されたセンサデータの値を示す。図4Bに示す横軸が時間であり、縦軸がセンサデータの値(センサ値)である。図4Bに示すグラフによって、センサデータの値が示される。
【0072】
サーバ202は、ホストCPU203によるクエリ処理により、過去のセンサ値を分析し、センサ値の周期性等を求める。そして、ホストCPU203によるクエリ処理により、サーバ202は、求められた周期性等に基づいて、センサデータが次に測定される時刻におけるセンサ値の上限値603と下限値604とを予測する。
【0073】
センサデータを新たに受信した場合、サーバ202のストリーム処理部304(クエリ処理部413)は、新たに受信したセンサデータの値が、上限値603と下限値604との範囲(許容範囲)に含まれるか否かを判定する。新たに受信したセンサデータの値が、許容範囲に含まれる場合、クエリ処理部413は機器601の状態が正常であると判定する。
【0074】
また、新たに受信したセンサデータの値が、許容範囲に含まれない場合、クエリ処理部413は、機器601の状態が異常であると判定し、機器601に機器停止信号を送信する。
【0075】
図5は、本実施例のストリーム処理部304がストリーム処理を行うための設定を取得する処理を示すフローチャートである。
【0076】
ユーザは、サーバ202が有する入力装置、又は、サーバ202に接続される入力装置を用いて、サーバ202に入力されるパケットのフォーマットを、サーバ202に入力する(501)。ステップ501において入力されるフォーマットは、例えば、図4Aに示す異常検知システムにおけるセンサデータのフォーマットである。ステップ501において入力されるフォーマットは、パケットにおけるいずれの箇所が、クエリ処理部413に入力するためのデータであるかを示す。
【0077】
ホストCPU203は、ユーザによって入力されたフォーマットを、ストリームアクセラレータ201に入力し、ストリームアクセラレータ201の各処理部に設定させる(502)。
【0078】
ストリームアクセラレータ201の組み込みCPU301は、フォーマットをホストCPU203から入力された場合、ストリーム処理部304のEtherMAC部402、IP処理部403、TCP/UDP処理部404、及び、データ抽出部405に、入力されたフォーマットを設定する。EtherMAC部402、IP処理部403、TCP/UDP処理部404、及び、データ抽出部405は、設定されたフォーマットを、各々に接続される、又は、各々が有するレジスタ等の記憶部に保持する(503)。
【0079】
図6は、本実施例のストリーム処理部304に入力されるパケットのフォーマットを示す説明図である。
【0080】
ストリーム処理部304に入力されるパケットのフォーマットには、クエリ処理部413による処理に必要なデータに関する情報が含まれる。パケットのフォーマットは、図6に示す通り、例えば、領域701〜領域705を含むが、図6に示すフォーマットには限られない。
【0081】
領域701には、データの送信元のIPアドレスを示す値が含まれる。図4Aに示す例において、領域701には、機器601のIPアドレス、又は、機器601に備わるセンサデータのIPアドレスが含まれる。IP処理部403は、入力されたパケットに含まれるデータの送信元を判定する際に、領域701を参照する。
【0082】
領域702には、サーバ202が、接続されるネットワークからパケットを受信するために使用するポート番号が含まれる。図4Aに示す例において、領域702には、センサデータを受信するためのTCPポート番号(例:100番)が含まれる。
【0083】
領域703には、パケットに含まれるアプリケーションヘッダーのバイト数(例:128バイト)が含まれる。また、領域704には、クエリ処理部413が処理するために必要なデータが、アプリケーションヘッダーの後から何バイト目に格納されているかを示すオフセット値が含まれる(例:64バイト)。
【0084】
図6に示す領域705は、領域704のオフセット値が示す部分から1番目〜3番目の要素が、クエリ処理部413が処理するために必要なデータであることを示す。また、図6に示す領域705は、1番目の要素が、時刻等を表す固定バイト長のTIME型であること示す。また、図6に示す領域705は、2番目の要素及び3番目の要素が、数値を表す固定バイト長のINTEGER型であることを示す。
【0085】
データ抽出部405は、入力されたパケットから、クエリ処理部413における処理に必要なデータを抽出する際に、領域703〜領域705を参照する。
【0086】
図5のステップ501の後、ユーザは、ストリーム処理の結果を出力する先のIPアドレスをサーバ202に入力する(504)。ステップ504に入力されるIPアドレスは、図4Aに示す例において、機器停止信号、又は、正常通知信号を送信する対象の機器601のIPアドレスである。
【0087】
ホストCPU203は、ユーザによって入力されたIPアドレスを、ストリームアクセラレータ201に設定させる(505)。ストリームアクセラレータ201のIP処理部409は、ユーザによって入力されたIPアドレスを保持する(506)。
【0088】
ステップ504の後、ユーザは、クエリを入力する。入力されるクエリは、ストリーム処理によってユーザが実行したい内容を記述したプログラムである。入力されるクエリには、クエリ処理部413において行われるクエリ処理を実行するためのプログラムと、ホストCPU203において行われるクエリ処理を実行するためのプログラムとが含まれる。
【0089】
図4Aに示す例において、クエリ処理部413において行われるクエリ処理は、センサデータが入力される毎に、センサデータの値が許容範囲に含まれるか否かを判定し、判定結果に従って、機器停止信号又は正常通知信号を送信する処理である。また、ホストCPU203において行われるクエリ処理は、センサデータの値をメモリ204に蓄積し、蓄積されたセンサデータの値に基づいて、上限値と下限値とを求める処理である。
【0090】
なお、本実施例において、蓄積されたデータを用いるクエリ処理は、前述の通り、ホストCPU203によって実行させる。これは、図1に示すホストCPU203の処理性能がストリーム処理部306の処理性能よりも高く、かつ、メモリ204の容量が、ストリームアクセラレータ201が有する記憶部(DRAM207等)の容量よりも大きいためである。すなわち、ストリームアクセラレータ201は、ホストCPU203の処理性能及びメモリ204の容量よりも低い性能の装置であってもよい。
【0091】
しかし、ストリームアクセラレータ201の処理性能が十分に高く、かつ、ストリームアクセラレータ201が有する記憶部の容量が十分に大きい場合、ストリームアクセラレータ201がデータを蓄積し、ストリーム処理部306が蓄積されたデータを用いるクエリ処理を行ってもよい。すなわち、ホストCPU203が行うクエリ処理を、クエリ処理部413が実行してもよい。
【0092】
ユーザによって入力されたクエリは、ホストCPU203によってコンパイルされる。そして、ホストCPU203は、コンパイルされたストリームアクセラレータ201のクエリを、ストリームアクセラレータ201に送信する。また、ホストCPU203は、コンパイルされたクエリを、ホストCPU203のメモリ204に保持する(508)。
【0093】
ストリームアクセラレータ201のクエリ処理部413は、送信されたクエリを、自らが有するレジストリ等に保持する(509)。
【0094】
ステップ507の後、ユーザは、ストリーム処理のスタートをサーバ202に指示する(510)。ホストCPU203は、ユーザからスタートを指示された場合、ストリームアクセラレータ201へストリーム処理のスタートを指示する(511)。
【0095】
クエリ処理部413は、ホストCPU203からスタートを指示された場合、ステップ509において保持したクエリを開始する(512)。
【0096】
図7は、本実施例のストリーム処理部304によるストリーム処理を示すフローチャートである。
【0097】
図5に示すステップ511の後、ホストCPU203も、メモリ204に格納されるクエリを開始する(513)。
【0098】
ステップ513の後、ホストCPU203は、クエリ処理の結果をストリームアクセラレータ201へ転送する。図4Aに示す例において、クエリ処理がスタートされた場合、ホストCPU203は、メモリ204に蓄積されたセンサデータの値から、センサデータの許容範囲である上限値と下限値とを求める。そして、ホストCPU203は、求められた上限値と下限値とを、ストリームアクセラレータ201へ転送する(514)。
【0099】
ストリームプロセッサ206の組み込みCPU301は、ホストCPU203から転送された上限値と下限値とを受け付け、ストリーム処理部304の一時レジスタ412へ格納する。また、組み込みCPU301は、一時レジスタ412への格納が終了したことを示す値によって一時結果終了フラグ419を更新する(515)。
【0100】
ステップ515の後、ストリームアクセラレータ201のEtherPHY部401は、入力ネットワークポート208を介してパケットが入力されることを待つ(516)。図4Aに示す例では、EtherPHY部401は、機器601から出力されたセンサデータがサーバ202の入力ネットワークポート208に到着し、さらに、入力ネットワークポート208を介してセンサデータが入力されることを待つ。
【0101】
パケットが入力された場合、EtherPHY部401は、入力されたパケットを、アナログ信号によるパケットからデジタル信号によるパケットに変換する(517)。
【0102】
ステップ517の後、エントリ番号付与部417は、デジタル信号に変換されたパケットに、エントリ番号生成部418から取得されたエントリ番号を付与する。そして、エントリ番号付与部417は、エントリ番号を付与されたパケットを、二つに複製する。そして、エントリ番号付与部417は、複製された一方のパケットをデータ抽出部405へ入力し(バイパス)、さらに、他方のパケットをEtherMAC部402に入力する(518)。
【0103】
なお、エントリ番号付与部417は、ステップ518において、管理フラグ414を更新する。管理フラグ414の更新及びエントリ番号についての詳細は、後述する。
【0104】
エントリ番号付与部417からパケットを入力された場合、データ抽出部405は、入力されたパケットから、クエリ処理に必要なデータを抽出する。そして、データ抽出部405は、抽出されたクエリ処理に必要なデータを、入力レジスタ406に格納する(520)。
【0105】
ここで、データ抽出部405で行われる処理について説明する。
【0106】
一般的なストリーム処理において、1回のストリーム処理を行うためにサーバ202に送信される一つのデータの量は、一つのパケットに格納される程度に十分に短い(少ない)。例えば、図4Aに示すセンサデータは、一般的に一つのパケットのペイロード部等に格納される程度の容量である。
【0107】
このため、データ抽出部405は、ストリーム処理に必要なデータのうちの一つが一つのパケットに格納される場合、一つのパケットのみからクエリ処理に必要なデータを抽出する。なお、複数のパケットに分割されて、ストリーム処理に必要なデータが送信された場合の、サーバ202における処理については後述される。
【0108】
図8は、本実施例のストリーム処理部304が受信するTCP/IPパケットを示す説明図である。
【0109】
図8は、サーバ202に入力される一つのパケットの例を示す。
【0110】
EtherPHY部401から出力されたパケットは、先頭にEtherヘッダーを含む。Etherヘッダー長は、Ethernetの規格によって定められる固定長であり、22バイトである。
【0111】
Ethernetにおけるパケットは、Etherヘッダーの後にIPヘッダーを含む。IPヘッダーの中には、IPヘッダー長を示すフィールドが含まれる。例えば、IPヘッダー長を示すフィールドに、"h"が格納された場合、IPヘッダー長は、4*hバイトである。
【0112】
Ethernetにおけるパケットは、IPヘッダーの後にTCPヘッダーを含む。TCPヘッダーの中には、データオフセットを示すフィールドが含まれる。ここでデータオフセットとは、TCPヘッダー長である。TCPヘッダーにおけるデータオフセットを示すフィールドに"y"が格納された場合、TCPヘッダー長は、4*yバイトである。
【0113】
パケットの送信元の機器(図4Aに示す例において、機器601)は、前述のIPヘッダー長及びTCPヘッダー長の値を任意に決定した場合、各パケットにIPヘッダー長及びTCPヘッダー長の値を格納する。これによって、データ抽出部405は、各パケットにおいていずれの領域がIPヘッダーか、TCPヘッダーか、又は、アプリケーションヘッダーかを識別することができる。
【0114】
Ethernetにおけるパケットは、TCPヘッダーの後にアプリケーションヘッダーを含む。アプリケーションヘッダー長は、一般的にアプリケーション毎に異なるが、本実施例において、ユーザがアプリケーションヘッダー長をあらかじめ定める。本実施例におけるアプリケーションヘッダー長は、aバイトである。
【0115】
Ethernetにおけるパケットは、アプリケーションヘッダーの後に、アプリケーションデータを含む。アプリケーションデータには、ストリーム処理に必要なデータが含まれる。本実施例において、サーバ202のユーザは、ストリーム処理に必要なデータのアプリケーションデータにおける位置を、あらかじめ定める。本実施例のオフセットの値は、kバイトである。
【0116】
アプリケーションヘッダー長(a)と、オフセット(k)とは、ユーザによって、図6に示すパケットのフォーマットの領域703及び領域704に格納される。そして、アプリケーションヘッダー長(a)と、オフセット(k)とは、図5に示すステップ501〜ステップ503によって、データ抽出部405に保持される。
【0117】
このため、データ抽出部405は、ステップ520において、パケットの先頭から22+4*h+4*y+a+kバイト目の位置から、ストリーム処理に必要なデータを抽出することができる。
【0118】
ステップ520において、データ抽出部405は、入力されたパケットからストリーム処理に必要なデータを抽出し、さらに、入力されたパケットのエントリ番号を抽出されたデータに付与する。そして、データ抽出部405は、抽出されたデータに付与されたエントリ番号を特定し、特定されたエントリ番号に対応する入力レジスタ406の記憶領域に、抽出されたデータを格納する。
【0119】
ステップ520において、データ抽出部405に入力されたパケットは、ネットワークプロトコル処理を実行されることなく、データ抽出部405によって、ストリーム処理に必要なデータを抽出される。このため、入力されたパケットは、ステップ520の後、ネットワークプロトコル処理を実行されるよりも早く、クエリ処理部413によってクエリ処理を実行される。
【0120】
しかし、データ抽出部405に入力されたパケットには、サーバ202宛でないパケットなどの、ストリーム処理とは関係のないパケットも含まれる。そのようなストリーム処理とは関係ないパケットにクエリ処理部413がクエリ処理を行い、その結果を出力した場合、誤った結果が出力されることとなる。
【0121】
このため、本実施例におけるストリーム処理部304は、ストリーム処理とは関係ないパケットを受信した場合でも誤った結果を出力することがないように、ネットワークプロトコル処理を、データ抽出部405の処理、および、クエリ処理部413の処理と並行して実行する。
【0122】
エントリ番号付与部417から出力された二つのパケットのうち一つは、EtherMAC部402へ入力される。その後、EtherMAC部402、IP処理部403、及び、TCP/UDP処理部404は、入力されたパケットに、入力ネットワークのプロトコル処理を行う(519)。
【0123】
EtherMAC部402は、入力ネットワークのプロトコル処理として、入力されたパケットのMACアドレスによって、入力されたデータが自サーバ202宛であるか否かを判定したり、入力されたパケットにエラーがあるか否かをCRC法によって判定したりする。
【0124】
そして、入力されたパケットが自サーバ202宛ではないか、又は、自サーバ202宛ではあるが、算出されたCRCエラーがパケットに誤りがあることを示す場合、EtherMAC部402は、入力されたパケットはエラーであると判定する。そして、入力されたパケットがエラーであると判定された場合、EtherMAC部402は、バイパスされてデータ抽出部405に入力されたパケット、又は、クエリ処理部413から出力されたデータをキャンセルするため、管理フラグ414を更新する。
【0125】
図9は、本実施例の管理フラグ414を示す説明図である。
【0126】
管理フラグ414は、エントリ番号4141、エントリvalid4142、入力レジスタvalid4143、出力レジスタvalid4144、Error4145、及び、NoError4146を含む。
【0127】
エントリ番号4141は、エントリ番号付与部417によってデータに付与された値である。
【0128】
エントリvalid4142は、エントリ番号を付与されたパケットが、データ抽出部405に入力されたか否かを示す。本実施例において、エントリvalid4142が"1"(有効)である場合、エントリvalid4142は、エントリ番号4141の値を付与されたパケットが、データ抽出部405に入力されたことを示す。
【0129】
入力レジスタvalid4143は、エントリ番号4141の値を付与されたデータが入力レジスタ406に格納されているか否かを示す。本実施例において、入力レジスタvalid4143が"1"(有効)である場合、入力レジスタvalid4143は、エントリ番号4141の値を付与されたデータが入力レジスタ406に格納されていることを示す。
【0130】
出力レジスタvalid4144は、エントリ番号4141の値を付与されたデータが出力レジスタ407に格納されているか否かを示す。本実施例において、出力レジスタvalid4144が"1"(有効)である場合、出力レジスタvalid4144は、エントリ番号4141の値を付与されたデータが出力レジスタ407に格納されていることを示す。
【0131】
Error4145は、入力ネットワークのプロトコル処理において、エントリ番号4141の値を付与されたパケットがエラーであると判定されたか否かを示す。本実施例において、Error4145が"1"(有効)である場合、Error4145は、エントリ番号4141の値を付与されたパケットが、入力ネットワークのプロトコル処理によってエラーであると判定されたことを示す。
【0132】
入力レジスタ制御部415は、Error4145に格納される値に従って、入力レジスタ406に格納される値をクエリ処理部413に入力されるか否かを決定し、出力レジスタ制御部416も、Error4145に格納される値に従って、出力レジスタ407に格納される値をサーバ202から出力するか否かを決定する。
【0133】
NoError4146は、入力ネットワークのプロトコル処理において、エントリ番号4141の値を付与されたパケットがエラーではないと判定されたか否かを示す。本実施例において、NoError4146が"1"(有効)である場合、NoError4146は、エントリ番号4141の値を付与されたパケットは、入力ネットワークのプロトコル処理において、エラーでないと判定されたことを示す。
【0134】
エントリ番号付与部417は、ステップ518において、パケットにエントリ番号を付与した後、パケットに付与された番号をエントリ番号4141が示す管理フラグ414の行を特定する。そして、エントリ番号付与部417は、特定された行のエントリvalid4142に"1"を格納し、特定された行のその他の列(入力レジスタvalid4143、出力レジスタvalid4144、Error4145、及び、NoError4146)に"0"を格納する。これによって、エントリ番号付与部417は、管理フラグ414を初期化する。
【0135】
エントリ番号4141に格納されるエントリ番号には、エントリ番号の下限値及び上限値があり、本実施例において、エントリ番号の下限値は0であり、エントリ番号の上限値は15である。この場合、エントリ番号には、16種類の番号がある。
【0136】
エントリ番号の上限値は、ストリームアクセラレータ201が同時に処理できるパケットの数である。また、エントリ番号の上限値は、入力レジスタ406が有する記憶領域の数に対応する。
【0137】
本実施例のエントリ番号付与部417は、エントリ番号生成部418が生成する番号に従って、パケットを受信する毎に、パケットに付与するエントリ番号をインクリメントする。そして、エントリ番号付与部417は、パケットに付与する番号がエントリ番号の上限値に達した後、パケットに付与する番号を下限値に戻す。
【0138】
なお、パケットに付与するエントリ番号に下限値及び上限値があれば、エントリ番号付与部417は、いかなる方法によってエントリ番号をパケットに付与してもよい。例えば、エントリ番号付与部417は、パケットを受信する毎に、パケットに付与するエントリ番号をデクリメントしてもよい。
【0139】
ステップ519における入力ネットワークのプロトコル処理において、EtherMAC部402に入力されたパケットがエラーであると判定された場合、EtherMAC部402は、エラーとなったパケットに付与されたエントリ番号に対応する管理フラグ414の行を特定し、特定された行のError4145を"1"によって更新する。また、EtherMAC部402は、プロトコル処理に従ったエラー処理(パケットの廃棄等)も行う。
【0140】
EtherMAC部402において、入力されたパケットはエラーではないと判定された場合、IP処理部403は、入力されたパケットの宛先IPアドレスが自サーバ202を示すか、及び、入力されたパケットの送信元IPアドレスが所定のアドレスであるか否かを判定する。なお、送信元IPアドレスを判定するための所定のアドレスは、図5に示すステップ501〜503によって保持されたパケットのフォーマットの領域701に格納される値に相当する。
【0141】
入力されたパケットの宛先IPアドレスが自サーバ202を示さないか、又は、入力されたパケットの送信元IPアドレスが所定のアドレスではない場合、IP処理部403は、入力されたパケットがエラーであると判定する。そして、入力されたパケットがエラーである場合、IP処理部403は、パケット廃棄等のエラー処理と、管理フラグ414の更新とを行う。
【0142】
具体的には、IP処理部403において、入力されたパケットがエラーであると判定された場合、IP処理部403は、EtherMAC部402と同じく、管理フラグ414のError4145を"1"によって更新する。
【0143】
IP処理部403において入力されたパケットはエラーではないと判定された場合、TCP/UDP処理部404は、入力されたパケットがエラーであるか否かを判定する。TCP/UDP処理部404におけるエラーの判定手順を、以下に示す。
【0144】
例えば、サーバ202がTCPプロトコルを使用した場合、TCP/UDP処理部404は、入力されたパケットのTCPヘッダーの値が所定のTCPポート番号であるか否かを判定する。そして、TCP/UDP処理部404は、TCPヘッダーの値が所定のTCPポート番号である場合、入力されたパケットは、自サーバ202において処理されるべきデータであると判定する。
【0145】
ここで、所定のTCPポート番号は、ステップ503において保持されたパケットのフォーマットの領域702の値に相当する。
【0146】
入力されたパケットが、自サーバ202において処理されるべきデータでないと判定された場合、TCP/UDP処理部404は、入力されたパケットがエラーであると判定し、パケット廃棄等のエラー処理と、管理フラグ414の更新とを行う。具体的には、入力されたパケットがエラーであると判定された場合、TCP/UDP処理部404は、EtherMAC部402及びIP処理部403と同じく、管理フラグ414のError4145を"1"によって更新する。
【0147】
入力されたパケットが、自サーバ202において処理されるべきデータであると判定された場合も、TCP/UDP処理部404は、あらかじめ保持されたパケットのフォーマット(TCPポート番号以外)に従って、入力されたパケットに含まれるデータがストリーム処理を行うべきデータであるか否かを判定する。
【0148】
入力されたパケットに含まれるデータがストリーム処理を行うべきデータでないと判定された場合、TCP/UDP処理部404は、入力されたデータがエラーであると判定し、パケット廃棄等のエラー処理を行い、さらに、管理フラグ414のError4145を"1"によって更新する。
【0149】
また、TCP/UDP処理部404は、チェックサムによるエラーチェックを入力されたパケットに行い、エラーチェックの結果がエラーを示す場合、入力されたパケットがエラーであると判定する。そして、TCP/UDP処理部404は、入力されたパケットがエラーであると判定された場合、パケット廃棄等のエラー処理を行い、さらに、管理フラグ414のError4145を"1"によって更新する。
【0150】
なお、複数のパケットに分割されて、ストリーム処理に必要なデータが送信された場合、TCP/UDP処理部404は、以下の処理を行う。なお、以下において、ストリーム処理に必要なデータを、分割して含む複数のパケットをパケット群と記載する。
【0151】
一般的にパケットのTCPヘッダーにはシーケンス番号が付与されている。このため、TCP/UDP処理部404は、パケット群のうちのいくつかがネットワーク上で消失したり、パケット群に含まれるパケットが各々異なる順序で到着したりするなどの異常を、シーケンス番号に基づいて検出できる。
【0152】
TCP/UDP処理部404は、シーケンス番号を参照した結果、このような異常が検出された場合、入力されたパケット群はエラーであると判定し、パケット群の各パケットに対応する管理フラグ414のError4145を"1"によって更新する。そして、TCP/UDP処理部404は、データの送信側にパケット群の再送を要求する。
【0153】
さらに、TCP/UDP処理部404は、シーケンス番号を参照した結果、異常が検出されない場合、パケット群に含まれる各データを、各データに対応するシーケンス番号に基づいて一つのデータに組み立てる。そして、TCP/UDP処理部404は、先頭のシーケンス番号を含むパケットのデータを、組み立てられたデータによって更新する。そして、TCP/UDP処理部404は、パケット群のうち、先頭のシーケンス番号以外のシーケンス番号を含むパケットに付与されたエントリ番号(少なくとも一つ)を特定し、特定されたエントリ番号を示すエントリ番号4141を含む行のError4145を"1"によって更新する。
【0154】
その後、TCP/UDP処理部404は、先頭のシーケンス番号と組み立てられたデータとを含むパケットを、データ抽出部405に入力する。これによって、データ抽出部405は、TCP/UDP処理部404によって入力されたパケットから、ストリーム処理に必要なデータを、組み立てられた状態で抽出することができる。
【0155】
一方で、先頭のシーケンス番号以外のシーケンス番号を含むパケットが、TCP/UDP処理部404によるデータの組み立て処理の前に、データ抽出部405、及び、クエリ処理部413によって処理されていた場合においても、管理フラグ414が更新されるため、先頭のシーケンス番号以外のシーケンス番号を含むパケットに関する処理結果は、少なくとも出力レジスタ407において廃棄される。
【0156】
なお、先頭のシーケンス番号と組み立てられたデータとを含むパケットを、データ抽出部405に入力するまでに、TCP/UDP処理部404は、先頭のシーケンス番号を含むパケットに対応する、管理フラグ414の出力レジスタvalid4144を"0"に更新する。これによって、TCP/UDP処理部404は、エントリ番号付与部417からプロトコル処理をバイパスして入力されたパケットに関するクエリ処理部413の処理結果が、出力レジスタ407に先に入力されている状態において、組み立てられたデータがクエリ処理部413によって処理されている間に、出力レジスタ407に格納されるデータを出力レジスタ制御部416がサーバ202から出力することを防ぐことができる。
【0157】
TCP/UDP処理部404は、複数のパケットに分割されて送信されるデータを、前述のような方法によって処理することによって、クエリ処理に必要なデータを適切にクエリ処理部413に送ることができる。
【0158】
TCP/UDP処理部404は、入力されたパケットがエラーでないと判定された場合、入力されたパケットのエントリ番号を示すエントリ番号4141を含む管理フラグ414の行を特定し、特定された行のNoError4146を"1"によって更新する。
【0159】
入力されたパケットがエラーでないと判定された場合、TCP/UDP処理部404は、エラーではないと判定されたパケットを廃棄してもよい。これによって、TCP/UDP処理部404は、データ抽出部405、及び、クエリ処理部413が不要な処理をすることを防ぐことができる。
【0160】
以上によって、入力ネットワークのプロトコル処理(ステップ519に相当)が終了する。
【0161】
ステップ520において、データ抽出部405は、エントリ番号付与部417から入力されたパケットと同じく、TCP/UDP処理部404から入力されたパケットから、クエリ処理に必要なデータを抽出し、抽出されたデータを入力レジスタ406に入力する。図9に示すエントリ番号がパケットに付与される場合、本実施例の入力レジスタ406は、16個(本実施例のエントリ番号の上限値+1)の記憶領域を有する。
【0162】
ステップ520において、データ抽出部405は、さらに、パケットに付与されたエントリ番号を示すエントリ番号4141を含む管理フラグ414の行の、入力レジスタvalid4143を"1"によって更新する。
【0163】
ステップ520の後、入力レジスタ制御部415は、パケットの到着順にデータをクエリ処理部413に処理させるため、記憶領域に割り当てられたエントリ番号の順に、入力レジスタ406に格納されたデータを取り出す。ここで、入力レジスタ制御部415は、管理フラグ414と所定の入力条件とに従って、クエリ処理部413に入力するデータを入力レジスタ406から取り出すか、又は、データを取り出さずに次の記憶領域に読み進む(廃棄する)かを決定する。
【0164】
ここで、データを取り出す所定の入力条件801を図10に示す。
【0165】
図10は、本実施例の入力レジスタ406からデータを取り出す入力条件801を示す説明図である。
【0166】
入力条件801は、あらかじめ入力レジスタ制御部415に保持される。図10に示す入力条件801は、条件8011及び条件8012を示す。
【0167】
条件8011は、管理フラグ414において、エントリvalid4142が有効("1")であり、かつ、Error4145が有効("1")であるデータは、入力レジスタ406から取り出されないことを示す。すなわち、入力レジスタ制御部415は、条件8011に該当するデータが格納された入力レジスタ406の記憶領域からデータを取り出すことなく、次の記憶領域に読み進む。
【0168】
このため、条件8011に該当するデータは、クエリ処理部413によって処理されることなく、同じエントリ番号を付与されたデータによって入力レジスタ406において上書きされる。すなわち、入力レジスタ制御部415がデータを読み進めた場合、読み進められたデータは廃棄される。
【0169】
条件8011によって、入力ネットワークのプロトコル処理においてエラーであると判定されたデータには、クエリ処理が実行されない。入力レジスタ406に格納されたデータが条件8011に該当しない場合、入力レジスタ制御部415は、条件8012を参照する。
【0170】
条件8012は、管理フラグ414において、エントリvalid4142が有効("1")であり、かつ、入力レジスタvalid4143が有効("1")であるデータは、入力レジスタ制御部415によって入力レジスタ406から取り出されることを示す。また、条件8012は、取り出されたデータが、クエリ処理部413によって処理されることを示す。
【0171】
条件8012によって、入力レジスタ406に格納されたデータが、クエリ処理部413によって処理される。また、入力条件801が条件8011及び条件8011を含むことによって、入力ネットワークのプロトコル処理が終了していなくても、クエリ処理部413は、入力レジスタ406に格納されたデータにクエリ処理を実行することができる。
【0172】
ステップ520の後、入力レジスタ制御部415は、管理フラグ414及び入力条件801(特に条件8011)に従って、Error4145に"1"が格納されている行に対応するパケットから抽出されたデータを、入力レジスタ406から廃棄する(526)。これによって、入力レジスタ制御部415は、出力レジスタ制御部416による制御前に、不要なデータを廃棄することができるため、クエリ処理部413が不要なデータを処理することによるクエリ処理部413の負荷の増加を抑制することができる。
【0173】
入力レジスタ制御部415は、条件8012に従って、クエリ処理部413に処理させるデータを取り出し、取り出されたデータをクエリ処理部413に入力する。
【0174】
また、入力レジスタ制御部415は、入力レジスタ406のデータに該当する管理フラグ414の値が、入力条件801のいずれにも該当しない場合、次の記憶領域を読むことなく、管理フラグ414の値が更新されるまで、入力レジスタ406からの読み出しを待つ。
【0175】
なお、入力レジスタ制御部415が、入力条件801を用いてデータを制御する際に、入力ネットワークのプロトコル処理がまだ終了していない場合がある。この場合においても、後述する出力レジスタ制御部416の制御によって、クエリ処理部413から出力されたデータは、入力ネットワークのプロトコル処理の結果に従って、サーバ202から出力されるか否か決定される。このため、入力レジスタ制御部415は、入力ネットワークのプロトコル処理が終了していないデータも、クエリ処理部413に入力できるため、ストリーム処理をより高速化することができる。
【0176】
クエリ処理部413は、データを入力された場合、入力されたデータと一時レジスタ412に格納されるデータとに基づいて、クエリ処理を行う(521)。そして、クエリ処理部413は、ステップ521において、クエリ処理結果を示すデータを、出力レジスタ407に格納する。ここで、クエリ処理部413は、クエリ処理結果に、入力レジスタ406から入力されたデータに付与されていたエントリ番号を付与する。
【0177】
一時レジスタ412の一時結果終了フラグ419が、ホストCPU203から一時レジスタ412へのデータの格納が終了していないことを示す場合、クエリ処理部413は、ホストCPU203から一時レジスタ412へのデータの格納が終了するまで、クエリ処理を待つ。なお、クエリ処理部413は、クエリ処理結果を示すデータを、一時レジスタ412に格納してもよい。
【0178】
図4Aに示す例において、クエリ処理部413は、一時レジスタ412へ格納された上限値及び下限値(許容範囲)を読み出し、入力レジスタ406から入力されたデータ(センサ値)と、一時レジスタ412から読み出された許容範囲とを比較する。入力されたセンサ値が許容範囲に含まれる場合、クエリ処理部413は、正常であることを示すデータを出力レジスタ407に入力する。入力されたセンサ値が許容範囲に含まれない場合、クエリ処理部413は、機器停止するためのコマンドを含むデータを出力レジスタ407に入力する。
【0179】
出力レジスタ407に処理結果のデータが格納された場合、出力レジスタ制御部416は、管理フラグ414の出力レジスタvalid4144を"1"によって更新する。
【0180】
出力レジスタ407の記憶領域の数は、ストリーム処理の内容に従って定められ、本実施例において一つである。これは、クエリ処理部413は、入力されたデータ毎に、前回までに受信したデータによって更新された内部状態を用いなければならず、一つのデータに一つのクエリ処理しか行うことができないためである。この結果、クエリ処理部413によるクエリ処理結果は、一般的に一つであることが多い。
【0181】
なお、一つのデータから複数のクエリ処理結果が算出される場合も、本実施例のクエリ処理部413は、複数のクエリ処理結果を含む一つのデータを出力レジスタ407に入力する。
【0182】
ステップ521において、出力レジスタ407にクエリ処理結果を含むデータが入力された場合、出力レジスタ制御部416は、管理フラグ414と図11に示す出力条件802とに従って、出力レジスタ407に格納されるデータをサーバ202から出力するか否かを決定する(522)。すなわち、出力レジスタ制御部416は、管理フラグ414と図11に示す出力条件802とに従って、サーバ202から出力せずに廃棄するデータを決定する。
【0183】
図11は、本実施例の出力レジスタ407からデータを取り出す出力条件802を示す説明図である。
【0184】
出力条件802は、あらかじめ出力レジスタ制御部416に保持される。図11に示す出力条件802は、条件8021及び条件8022を示す。
【0185】
条件8021は、管理フラグ414において、エントリvalid4142が有効("1")であり、かつ、出力レジスタvalid4144が有効("1")であり、かつ、NoError4146が有効("1")であるデータは、サーバ202から出力されることを示す。
【0186】
条件8022は、管理フラグ414において、エントリvalid4142が有効("1")であり、かつ、入力レジスタvalid4143が有効("1")であり、かつ、Error4145が有効("1")であるデータは、出力レジスタ制御部416によって廃棄されることを示す。
【0187】
すなわち、出力レジスタ制御部416は、条件8021によって、入力ネットワークのプロトコル処理によってエラーではないと判定されたパケットに対応する、クエリ処理部313が処理を行った結果のデータを、TCP/UDP処理部408に入力する。
【0188】
また、出力レジスタ制御部416は、入力ネットワークのプロトコル処理のいずれかでエラーと判定されたパケットに対応するクエリ処理結果をサーバ202から出力しないため、条件8022に該当するデータを廃棄する。
【0189】
さらに、出力レジスタ制御部416は、出力レジスタ407のデータが条件8021又は条件8022のいずれかに該当し、データをサーバ202から出力するか否かを決定した後、決定されたデータに付加されたエントリ番号を示すエントリ番号4141を含む管理フラグ414の行を、すべて"0"によって更新する(522)。
【0190】
なお、ステップ522において、出力レジスタ407のデータが条件8021又は条件8022のいずれにも該当しない場合、出力レジスタ制御部416は、出力レジスタ407のデータをサーバ202から出力するか否かを決定することなく、入力ネットワークのプロトコル処理が終わり、かつ、管理フラグ414が更新されるまで待つ。
【0191】
ステップ522の後、TCP/UDP処理部408にデータが入力された後、TCP/UDP処理部408、IP処理部409、及び、EtherMAC部410は、データをサーバ202から出力するためのプロトコル処理(出力ネットワークのプロトコル処理)を、データに順次実行する。これによって、出力レジスタ407から出力されたデータが、サーバ202によって送信されるためのパケットに含める。特に、IP処理部409は、ステップ506において保持された出力先IPアドレスを、出力レジスタ407から出力されたデータが含まれるパケットに格納する。
【0192】
そして、EtherMAC部410からデータを入力された場合、EtherPHY部411は、データをデジタル信号からアナログ信号に変換し、さらに、アナログ信号に変換されたデータを、出力ネットワークポート209を介してネットワークへ出力する(523)。
【0193】
さらに、ステップ522の後、出力レジスタ制御部416は、TCP/UDP処理部408に入力したデータと同じエントリ番号を割り当てられた入力レジスタ406の記憶領域のデータを、ホストCPU203に入力する。また、ホストCPU203によって実行されるストリーム処理において必要な場合、TCP/UDP処理部408に入力したデータをホストCPU203に入力する(524)。
【0194】
ホストCPU203は、入力されたデータをメモリ204に格納することによって、内部状態を、新たな内部状態に更新する(525)。出力レジスタ制御部416が、出力レジスタ407のデータを、サーバ202から出力すると決定した場合に、入力レジスタ406に格納されたデータをホストCPU203に送ることによって、入力ネットワークのプロトコル処理においてエラーであると判定されたパケットのデータが内部状態に追加されることを防ぐことができる。また、これによって、サーバ202は、適切な内部状態を保持することができる。
【0195】
図4Aに示す例のステップ521において、クエリ処理部413は、センサデータの値が許容範囲に含まれる場合、出力レジスタ407に正常であることを示すデータを格納し、センサデータの値が許容範囲に含まれない場合、センサデータの値及び機器停止コマンドを含むデータを、出力レジスタ407に格納する。
【0196】
図4Aに示す例におけるステップ522において、出力レジスタ制御部416は、管理フラグ414が、入力ネットワークのプロトコル処理によってエラーがないと判定されたことを示す場合、機器601に対して機器停止コマンドを含むデータ(機器停止信号)又は正常であることを示すデータ(正常通知信号)を送信するため、出力レジスタ407のデータをTCP/UDP処理部408に入力する。さらに、出力レジスタ制御部416は、ステップ523において、出力レジスタ407から取り出されたデータと同じエントリ番号を付与されたデータを、入力レジスタ406からホストCPU203へ転送する。
【0197】
ホストCPU203は、データを入力された場合、ストリーム処理の内部状態であるセンサ値の時系列データに、入力された値を加え、次のセンサデータの入力に備え、クエリ処理を行う。図4Aに示す例において、ホストCPU203は、新たな上限値603及び下限値604を算出する。
【0198】
本実施例によれば、ストリーム処理を行う装置にデータが入力されてから、ストリーム処理の結果が出力されるまでのレスポンス時間を低減できる。具体的には、入力ネットワークプロトコル処理(ステップ519)と、データ抽出処理(ステップ520)及びクエリ処理521とが並行に行われることによって、図7に示すステップ516〜ステップ523の処理に必要な時間(レスポンス時間)が低減される。
【0199】
また、管理フラグ414によって、入力ネットワークのプロトコル処理の結果に従って、クエリ処理結果を出力するか否かを決定するため、ストリーム処理を正しく実行することが可能である。
【0200】
なお、上述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。
【0201】
また、前述の各構成、機能、処理部、及び、処理手順等は、それらの一部又は全部を、プログラムによって実装されることによって実行されてもよい。各処理部等がプログラムによって実装された場合、各処理部の機能を実現するプログラム、及び、入力条件801等の情報は、メモリ、ハードディスク、SSD(Solid State Drive)等の記録装置、又は、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0202】
また、本実施例のサーバ202等の内部構成を示す図(特に図3)において、制御線及び情報線は説明上必要と考えられるものを示しており、製品として実装される制御線及び情報線の全てを示しているとは限らない。実際には、ほとんど全ての処理部が相互に接続されていると考えてもよい。
【符号の説明】
【0203】
201 ストリームアクセラレータ
202 サーバ
203 ホストCPU
204 メモリ
205 IOハブ
206 ストリームプロセッサ
207 DRAM
208 入力ネットワークポート
209 出力ネットワークポート
301 組み込みCPU
302 MemoryI/F
303 IOバスI/F
304 ストリーム処理部
401 EtherPHY部
402 EtherMAC部
403 IP処理部
404 TCP/UDP処理部
405 データ抽出部
406 入力レジスタ
407 出力レジスタ
408 TCP/UDP処理部
409 IP処理部
410 EtherMAC部
411 EtherPHY部
412 一時レジスタ
413 クエリ処理部
414 管理フラグ
415 入力レジスタ制御部
416 出力レジスタ制御部
417 エントリ番号付与部
図1
図2
図3
図4A
図4B
図5
図6
図7
図8
図9
図10
図11
図12