(57)【要約】【課題】ストリーム処理の高速化。【解決手段】ネットワークから入力されたパケットに含まれるデータに、クエリ処理を行うストリーム処理装置は、入力されたパケットを複数に複製する複製部と、複製されたパケットのうちの一方のパケットに、ネットワークに対応するプロトコル処理を行うことによって、パケットにエラーがあるか否かを判定するプロトコル処理部と、プロトコル処理による判定結果を示す管理フラグを格納する記憶部と、複製されたパケットのうちの他方のパケットから、クエリ処理に必要なデータを抽出するデータ抽出部と、抽出されたデータにクエリ処理を行い、当該クエリ処理の結果を含むデータを出力するクエリ処理部と、クエリ処理部から出力されたデータを、管理フラグに基づいて、ストリーム処理装置から出力するか否かを決定する出力制御部と、を有する。【選択図】図３
2014050091.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークから入力されたパケットに含まれるデータに、クエリ処理を行うストリーム処理装置であって、
前記ストリーム処理装置は、
前記入力されたパケットを複数に複製する複製部と、
前記複製されたパケットのうちの一方のパケットに、前記ネットワークに対応するプロトコル処理を行うことによって、前記パケットにエラーがあるか否かを判定するプロトコル処理部と、
前記プロトコル処理による判定結果を示す管理フラグを格納する記憶部と、
前記複製されたパケットのうちの他方のパケットから、前記クエリ処理に必要なデータを抽出するデータ抽出部と、
前記抽出されたデータに前記クエリ処理を行い、当該クエリ処理の結果を含むデータを出力するクエリ処理部と、
前記クエリ処理部から出力されたデータを、前記管理フラグに基づいて、前記ストリーム処理装置から出力するか否かを決定する出力制御部と、を有することを特徴とするストリーム処理装置。
【請求項２】
請求項１に記載のストリーム処理装置であって、
前記ストリーム処理装置は、前記抽出されたデータを、前記クエリ処理部へ入力するか否かを決定する入力制御部を有し、
前記入力制御部は、前記管理フラグが前記プロトコル処理による判定結果を保持する場合、前記管理フラグに従って、前記抽出されたデータを、前記クエリ処理部へ入力するか否かを決定することを特徴とするストリーム処理装置。
【請求項３】
請求項１又は２に記載のストリーム処理装置であって、
前記ストリーム処理装置は、前記抽出されたデータを保持する入力レジスタを、さらに有し、
前記クエリ処理部は、
前記抽出されたデータのうち蓄積されたデータを用いた所定の処理の結果を取得し、
前記取得された処理の結果と、前記抽出されたデータとに基づいて、前記クエリ処理を行い、
前記出力制御部は、前記クエリ処理部から出力されたデータを、前記ストリーム処理装置から前記ネットワークに出力することを決定した場合、前記入力レジスタに保持される抽出されたデータを蓄積することを決定することを特徴とするストリーム処理装置。
【請求項４】
請求項３に記載のストリーム処理装置であって、
前記パケットは、シーケンス番号を含み、
前記プロトコル処理部は、前記クエリ処理に必要なデータが各々に分割されて含まれる、複数の前記パケットを受信した場合、
前記複数のパケットの各々が含むデータを、前記シーケンス番号に基づいて結合し、
前記複数のパケットのうちの一つの第１のパケットに含まれるデータを、前記結合されたデータによって更新し、
前記結合されたデータを含む前記第１のパケットを、前記データ抽出部に入力し、
前記複数のパケットに含まれる前記第１のパケット以外の第２のパケットから抽出されたデータに前記クエリ処理を行った結果を、前記ストリーム処理装置から出力しないように、前記管理フラグを更新することを特徴とするストリーム処理装置。
【請求項５】
ネットワークから入力されたパケットに含まれるデータに、クエリ処理を行うサーバであって、
前記サーバは、
前記入力されたパケットを複数に複製する複製部と、
前記複製されたパケットのうちの一方のパケットに、前記ネットワークに対応するプロトコル処理を行うことによって、前記パケットにエラーがあるか否かを判定するプロトコル処理部と、
前記プロトコル処理による判定結果を示す管理フラグを格納する記憶部と、
前記複製されたパケットのうちの他方のパケットから、第１のクエリ処理に必要なデータを抽出するデータ抽出部と、
前記抽出されたデータに前記第１のクエリ処理を行い、前記第１のクエリ処理の結果を含むデータを出力する第１のクエリ処理部と、
前記第１のクエリ処理部から出力されたデータを、前記管理フラグに基づいて、前記サーバから出力するか否かを決定する出力制御部と、を有することを特徴とするサーバ。
【請求項６】
請求項５に記載のサーバであって、
前記サーバは、前記抽出されたデータを、前記第１のクエリ処理部へ入力するか否かを決定する入力制御部を有し、
前記入力制御部は、前記管理フラグが前記プロトコル処理による判定結果を保持する場合、前記管理フラグに従って、前記抽出されたデータを、前記第１のクエリ処理部へ入力するか否かを決定することを特徴とするサーバ。
【請求項７】
請求項５又は６に記載のサーバであって、
前記サーバは、
前記抽出されたデータを保持する入力レジスタと、
前記抽出されたデータを蓄積するデータ蓄積部と、
前記データ蓄積部に蓄積されたデータに、第２のクエリ処理を行う第２のクエリ処理部と、をさらに有し、
前記第１のクエリ処理部は、前記第２のクエリ処理部による処理結果と、前記抽出されたデータとに基づいて、前記第１のクエリ処理を行い、
前記出力制御部は、前記第１のクエリ処理部から出力されたデータを、前記サーバから前記ネットワークに出力することを決定した場合、前記入力レジスタに保持される抽出されたデータを前記データ蓄積部に蓄積することを決定することを特徴とするサーバ。
【請求項８】
請求項７に記載のサーバであって、
前記パケットは、シーケンス番号を含み、
前記プロトコル処理部は、前記クエリ処理に必要なデータが各々に分割されて含まれる、複数の前記パケットを受信した場合、
前記複数のパケットの各々が含むデータを、前記シーケンス番号に基づいて結合し、
前記複数のパケットのうちの一つの第１のパケットに含まれるデータを、前記結合されたデータによって更新し、
前記結合されたデータを含む前記第１のパケットを、前記データ抽出部に入力し、
前記複数のパケットに含まれる前記第１のパケット以外の第２のパケットから抽出されたデータに前記第１のクエリ処理を行った結果を、前記サーバから出力しないように、前記管理フラグを更新することを特徴とするサーバ。
【請求項９】
ネットワークから入力されたパケットに含まれるデータに、クエリ処理を行うストリーム処理装置によるストリーム処理方法であって、
前記ストリーム処理装置は、プロセッサ及びメモリを有し、
前記方法は、
前記プロセッサが、前記入力されたパケットを複数に複製する複製手順と、
前記プロセッサが、前記複製されたパケットのうちの一方のパケットに、前記ネットワークに対応するプロトコル処理を行うことによって、前記パケットにエラーがあるか否かを判定するプロトコル処理手順と、
前記プロセッサが、前記プロトコル処理による判定結果を示す管理フラグを前記メモリに格納する記憶手順と、
前記プロセッサが、前記複製されたパケットのうちの他方のパケットから、前記クエリ処理に必要なデータを抽出するデータ抽出手順と、
前記プロセッサが、前記抽出されたデータに前記クエリ処理を行い、当該クエリ処理の結果を含むデータを出力するクエリ処理手順と、
前記プロセッサが、前記クエリ処理手順によって出力されたデータを、前記管理フラグに基づいて、前記ストリーム処理装置から出力するか否かを決定する出力制御手順と、を有することを特徴とするストリーム処理方法。
【請求項１０】
請求項９に記載のストリーム処理方法であって、
前記方法は、
前記プロセッサが、前記抽出されたデータを、前記クエリ処理手順へ入力するか否かを決定する入力制御手順を有し、
前記入力制御手順は、前記プロセッサが、前記管理フラグが前記プロトコル処理による判定結果を保持する場合、前記管理フラグに従って、前記抽出されたデータを、前記クエリ処理手順へ入力するか否かを決定する手順を含むことを特徴とするストリーム処理方法。
【請求項１１】
請求項９又は１０に記載のストリーム処理方法であって、
前記ストリーム処理装置は、前記抽出されたデータを保持する入力レジスタを、さらに有し、
前記クエリ処理手順は、
前記プロセッサが、前記抽出されたデータのうち蓄積されたデータを用いた所定の処理の結果を取得する手順と、
前記プロセッサが、前記取得された処理の結果と、前記抽出されたデータとに基づいて、前記クエリ処理を行う手順と、を含み、
前記出力制御手順は、前記クエリ処理手順によって出力されたデータを、前記ストリーム処理装置から前記ネットワークに出力することを決定した場合、前記入力レジスタに保持される抽出されたデータを蓄積することを決定する手順を含むことを特徴とするストリーム処理方法。
【請求項１２】
請求項１１に記載のストリーム処理方法であって、
前記パケットは、シーケンス番号を含み、
前記プロトコル処理手順は、前記プロセッサが、前記クエリ処理に必要なデータが各々に分割されて含まれる、複数の前記パケットを受信した場合、
前記プロセッサが、前記複数のパケットの各々が含むデータを、前記シーケンス番号に基づいて結合する手順と、
前記プロセッサが、前記複数のパケットのうちの一つの第１のパケットに含まれるデータを、前記結合されたデータによって更新する手順と、
前記プロセッサが、前記結合されたデータを含む前記第１のパケットを、前記データ抽出手順に入力する手順と、
前記プロセッサが、前記複数のパケットに含まれる前記第１のパケット以外の第２のパケットから抽出されたデータに前記クエリ処理を行った結果を、前記ストリーム処理装置から出力しないように、前記管理フラグを更新する手順と、を含むことを特徴とするストリーム処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリーム処理装置に関する。
【背景技術】
【０００２】
ストリーム処理技術は、センサデータのような時々刻々と発生するフローデータを、高速に処理する技術である。データベース管理システムに備わるサーバが、ストリーム処理を用いずにデータを処理する場合、サーバは、入力されたフローデータを、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）に格納し、ＨＤＤから読み出されたデータに定められた処理を行う。これに対して、サーバがストリーム処理によってデータを処理する場合、サーバが有するメモリにデータが書き込まれた場合、サーバは、データに定められた処理を即座に行う。このため、ストリーム処理の技術は、リアルタイム性が求められる処理に適している。
【０００３】
図１２は、従来のストリーム処理を行うサーバ１０１を示すブロック図である。
【０００４】
サーバ１０１は、ＣＰＵ１０２、メモリ１０３、入力ネットワークアダプタ１０５、ＩＯハブ１０４、及び、出力ネットワークアダプタ１０６を有する従来の計算機である。
【０００５】
センサデータ等の入力データが、ネットワークからサーバ１０１に入力された場合、サーバ１０１は、入力データを入力ネットワークアダプタ１０５によって受け取る。入力ネットワークアダプタ１０５は、ネットワークにおける下位層のプロトコル処理を入力データに行う。
【０００６】
ＣＰＵ１０２は、プロトコル処理によって入力データから取り出されるデータを、ＩＯハブ１０４を介して受信する。そして、ＣＰＵ１０２は、入力データから取り出されたデータをメモリ１０３に格納する。
【０００７】
ＣＰＵ１０２は、メモリ１０３に格納されたデータに、ネットワークの上位層のプロトコル処理を行うことによって、センサデータ等のアプリケーションデータを得る。そして、ＣＰＵ１０２は、メモリ１０３にインストールされたストリーム処理ソフトウエアによって、得られたアプリケーションデータと、メモリ１０３に蓄積された複数のセンサデータ（内部状態）とから、出力データを求める。
【０００８】
ＣＰＵ１０２は、求められた出力データを、ネットワーク経由で別の機器に送るため、ネットワークの上位層のプロトコル処理を出力データに行った後、出力データを出力ネットワークアダプタ１０６へ送る。出力ネットワークアダプタ１０６は、送られた出力データにネットワークの下位層のプロトコル処理を行った後、出力データを別の機器へ送信する。
【０００９】
近年、金融分野及び産業機器制御分野において、リアルタイム処理のニーズが高まっており、ストリーム処理を適用するシステムが増えつつある。そのため、ストリーム処理では、レスポンスタイム（サーバにデータが入力されてから、サーバからデータが出力されるまでの時間）の向上が望まれている。
【００１０】
前述したとおり、レスポンスタイムには、ストリーム処理ソフトウエアによる処理の時間だけでなく、ネットワークのプロトコル処理の時間も含まれており、レスポンスタイムの向上には、ストリーム処理ソフトウエアによる処理の時間及びネットワークのプロトコル処理の時間の両方又はいずれかを低減する必要がある。
【００１１】
従来、複数の入力データの処理をパイプライン化することによって、ストリーム処理ソフトウエアによる処理のスループットをあげ、処理時間を低減する技術が提案されている（例えば、特許文献１参照）。
【００１２】
また、ネットワークのプロトコル処理については、パケットに対するプロトコル処理において、パケットをパケットプリフィックスとデータブロックとに分割して処理する技術が提案されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００９−１３４３９１号公報
【特許文献２】特開平０８−２６５２８０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
特許文献１に記載のストリーム処理の高速化は、ストリーム処理を並列に実行することによって、短時間に複数の入力があった場合のストリーム処理の全体の処理時間を低減するものであり、短時間に複数の入力がない場合に、ストリーム処理自体のレスポンスタイムを低減するものではない。
【００１５】
一方で、ネットワークのプロトコル処理は、一般的に、ネットワークアダプタとサーバが有するＯＳとによって行われ、所定の規則に従って順序どおり行われる必要がある。このため、ネットワークのプロトコル処理を高速化することは難しい。
【００１６】
特許文献２に記載された処理において、パケットをパケットプリフィックスとデータブロックとに分割して並列に処理する技術が提案されているが、ストリーム処理ソフトウエアがストリーム処理を行うために必要なデータをパケットから抽出しないため、正常なストリーム処理結果を得ることができない。
【００１７】
本発明の目的は、ストリーム処理を正常に行い、かつ、ストリーム処理のレスポンスタイムを低減できる装置の提供である。
【課題を解決するための手段】
【００１８】
本発明の代表的な一例を示せば以下の通りである。すなわち、ネットワークから入力されたパケットに含まれるデータに、クエリ処理を行うストリーム処理装置であって、前記ストリーム処理装置は、前記入力されたパケットを複数に複製する複製部と、前記複製されたパケットのうちの一方のパケットに、前記ネットワークに対応するプロトコル処理を行うことによって、前記パケットにエラーがあるか否かを判定するプロトコル処理部と、前記プロトコル処理による判定結果を示す管理フラグを格納する記憶部と、前記複製されたパケットのうちの他方のパケットから、前記クエリ処理に必要なデータを抽出するデータ抽出部と、前記抽出されたデータに前記クエリ処理を行い、当該クエリ処理の結果を含むデータを出力するクエリ処理部と、前記クエリ処理部から出力されたデータを、前記管理フラグに基づいて、前記ストリーム処理装置から出力するか否かを決定する出力制御部と、を有する。
【発明の効果】
【００１９】
本発明の一実施形態によると、ストリーム処理を正常に行い、かつ、ストリーム処理のレスポンスタイムを低減できる。
【図面の簡単な説明】
【００２０】
【図１】本実施例の計算機システムを示すブロック図である。
【図２】本実施例のストリームプロセッサの内部構成を示すブロック図である。
【図３】本実施例のストリーム処理部における処理の詳細を示すブロック図である。
【図４Ａ】本実施例のサーバを用いた異常検知システム示す説明図である。
【図４Ｂ】本実施例のサーバを用いた異常検知システムにおける異常判定の方法を示す説明図である。
【図５】本実施例のストリーム処理部がストリーム処理を行うための設定を取得する処理を示すフローチャートである。
【図６】本実施例のストリーム処理部に入力されるパケットのフォーマットを示す説明図である。
【図７】本実施例のストリーム処理部によるストリーム処理を示すフローチャートである。
【図８】本実施例のストリーム処理部が受信するＴＣＰ／ＩＰパケットを示す説明図である。
【図９】本実施例の管理フラグを示す説明図である。
【図１０】本実施例の入力レジスタからデータを取り出す入力条件を示す説明図である。
【図１１】本実施例の出力レジスタからデータを取り出す出力条件を示す説明図である。
【図１２】従来のストリーム処理を行うサーバを示すブロック図である。
【発明を実施するための形態】
【００２１】
以下に、ネットワークのプロトコル処理と、ストリーム処理におけるクエリ処理とを、並行に実行することによって、レスポンスタイムを低減するストリーム処理装置を示す。
【００２２】
図１は、本実施例のサーバ２０２を示すブロック図である。
【００２３】
本実施例のサーバ２０２は、ネットワークに接続される計算機であり、入力されたデータにストリーム処理を実行する。サーバ２０２は、ストリームアクセラレータ２０１、ホストＣＰＵ２０３、メモリ２０４、ＩＯハブ２０５、及び、ＩＯバス２１０を備える。
【００２４】
なお、サーバ２０２は、ユーザ（サーバ２０２の開発者又は管理者等）によって入力された情報を受けつけるため、キーボード又はマウス等を備えた入力装置を有してもよく、また、キーボード又はマウス等を備えた入力装置と接続されてもよい。
【００２５】
ホストＣＰＵ２０３は、演算装置である。ホストＣＰＵ２０３は、演算処理ができれば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）以外のプロセッサでもよい。また、ホストＣＰＵ２０３は、複数のプロセッサを有してもよい。本実施例のホストＣＰＵ２０３は、ストリーム処理におけるクエリ処理を行う。
【００２６】
メモリ２０４は、サーバ２０２に入力されたデータ等を蓄積するための記憶領域である。本実施例のホストＣＰＵ２０３は、メモリ２０４に蓄積された一つ又は複数のデータを読み出し、読み出されたデータに、ユーザによって指定されたクエリ処理を実行する。
【００２７】
ＩＯハブ２０５は、ストリームアクセラレータ２０１によってＩＯハブ２０５に入力されるデータを、ホストＣＰＵ２０３に送信する。また、ＩＯハブ２０５は、ホストＣＰＵ２０３によってＩＯハブ２０５に入力されるデータを、ストリームアクセラレータ２０１に送信する。ＩＯハブ２０５とストリームアクセラレータ２０１とは、ＩＯバス２１０によって接続される。
【００２８】
ストリームアクセラレータ２０１は、入力されたデータにストリーム処理を行うための装置であり、本実施例の後述する処理によって、レスポンスタイムを短縮するための装置である。ストリームアクセラレータ２０１は、一般的な計算機に搭載できる拡張カードの形状であってもよい。ストリームアクセラレータ２０１は、ストリームプロセッサ２０６、ＤＲＡＭ２０７、入力ネットワークポート２０８、及び、出力ネットワークポート２０９を有する。
【００２９】
入力ネットワークポート２０８は、サーバ２０２に入力されるデータを受け付け、入力されたデータをストリームプロセッサ２０６に送信するポートである。出力ネットワークポート２０９は、ストリームプロセッサ２０６から出力されたデータを、サーバ２０２から出力するポートである。
【００３０】
ストリームプロセッサ２０６は、サーバ２０２に入力されたデータに所定のネットワーク処理及びクエリ処理を実行するプロセッサである。ＤＲＡＭ２０７は、ストリームプロセッサ２０６がクエリ処理を実行するために使用する記憶領域である。
【００３１】
なお、本実施例において、サーバ２０２に入力されるデータは、サーバ２０２に到着した際、ネットワークにおける通信の単位であるパケットに含まれる。このため、以下において、サーバ２０２は、サーバ２０２に接続されるネットワークから、データを含むパケットを受信するものとして記載される。
【００３２】
図２は、本実施例のストリームプロセッサ２０６の内部構成を示すブロック図である。
【００３３】
ストリームプロセッサ２０６は、組み込みＣＰＵ３０１、ＭｅｍｏｒｙＩ／Ｆ３０２、ＩＯバスＩ／Ｆ３０３、及び、ストリーム処理部３０４を有する。
【００３４】
ＩＯバスＩ／Ｆ３０３は、図１に示すＩＯバス２１０を介して、ＩＯハブ２０５に接続されるインターフェースである。ＭｅｍｏｒｙＩ／Ｆ３０２は、ストリームプロセッサ２０６が、クエリ処理を実行する際にＤＲＡＭ２０７と接続するためのインターフェースである。
【００３５】
ストリーム処理部３０４は、入力ネットワークのプロトコル処理、出力ネットワークのプロトコル処理、及び、クエリ処理（ストリーム処理の一部）を行う。本実施例の入力ネットワークのプロトコル処理とは、サーバ２０２に接続されるネットワークに従って、パケットに行われるあらかじめ定められた処理であり、入力されたパケットに含まれるデータに、クエリ処理を行うための処理である。
【００３６】
また、本実施例の出力ネットワークのプロトコル処理とは、クエリ処理が行われた後のデータをサーバ２０２からネットワークへ出力するための処理であり、例えば、クエリ処理後のデータをパケットに格納する処理である。
【００３７】
組み込みＣＰＵ３０１は、サーバ２０２のホストＣＰＵ２０３とストリーム処理部３０４とのデータ送受信制御、及び、ＤＲＡＭ２０７とストリーム処理部３０４とのデータ送受信制御を行う。
【００３８】
図３は、本実施例のストリーム処理部３０４における処理の詳細を示すブロック図である。
【００３９】
図３に示す各ブロックは、ストリーム処理部３０４による処理を示すが、ストリーム処理部３０４は、各ブロックに示す処理を実行する複数の物理的な装置（処理部）を有してもよい。また、ストリーム処理部３０４は、各ブロックに示す処理を実行するソフトウエアを有してもよい。
【００４０】
以下における説明において、図３に示すストリーム処理部３０４は、各ブロックの処理を実行する物理的な処理部を有する。また、図３に示すストリーム処理部３０４は、レジスタ等の記憶部を有し、処理に用いるデータ等を一時的に記憶部に格納する。
【００４１】
ストリーム処理部３０４は、処理部として、ＥｔｈｅｒＰＨＹ部４０１、ＥｔｈｅｒＭＡＣ部４０２、ＩＰ処理部４０３、ＴＣＰ／ＵＤＰ処理部４０４、データ抽出部４０５、ＴＣＰ／ＵＤＰ処理部４０８、ＩＰ処理部４０９、ＥｔｈｅｒＭＡＣ部４１０、ＥｔｈｅｒＰＨＹ部４１１、クエリ処理部４１３、入力レジスタ制御部４１５、出力レジスタ制御部４１６、エントリ番号付与部４１７、及び、エントリ番号生成部４１８を有する。
【００４２】
また、ストリーム処理部３０４は、記憶部として、入力レジスタ４０６、出力レジスタ４０７、及び、一時レジスタ４１２を有する。また、ストリーム処理部３０４は、管理フラグ４１４を格納する記憶部を有する。
【００４３】
以下において示す実施例は、サーバ２０２が接続するネットワークが、Ｅｔｈｅｒｎｅｔ（登録商標、以下同じ）によって実装されるネットワークである場合の実施例である。このため、以下に示すストリーム処理の対象となるデータは、Ｅｔｈｅｒｎｅｔにおけるパケットのペイロード部分に含まれて、ストリーム処理部３０４に入力される。
【００４４】
ただし、本実施例におけるストリーム処理の対象となるデータは、Ｅｔｈｅｒｎｅｔのパケットに含まれるとは限らず、サーバ２０２が接続されるネットワークに従った通信の単位によって、サーバ２０２に送信される。
【００４５】
入力ネットワークポート２０８から入力されたパケットには、サーバ２０２が接続されるネットワークの規約に従った順序どおりに、入力ネットワークのプロトコル処理及び出力ネットワークのプロトコル処理が行われる。図３に示すストリーム処理部３０４は、例として、サーバ２０２がＥｔｈｅｒｎｅｔのネットワークにおいてＴＣＰ／ＩＰプロトコルを利用する場合のプロトコル処理を実行する。
【００４６】
しかし、ストリーム処理部３０４が実行する入力ネットワークのプロトコル処理及び出力ネットワークのプロトコル処理は、Ｅｔｈｅｒｎｅｔ上のＴＣＰ／ＩＰプロトコルに関するプロトコル処理である必要はなく、ネットワークにおいて提供されるプロトコルに従った処理であればよい。
【００４７】
ＥｔｈｅｒＭＡＣ部４０２、ＩＰ処理部４０３、及び、ＴＣＰ／ＵＤＰ処理部４０４は、図３におけるストリーム処理部３０４の入力ネットワークのプロトコル処理を実行する。また、ＴＣＰ／ＵＤＰ処理部４０８、ＩＰ処理部４０９、及び、ＥｔｈｅｒＭＡＣ部４１０は、図３におけるストリーム処理部３０４の出力ネットワークのプロトコル処理を実行する。
【００４８】
ＥｔｈｅｒＰＨＹ部４０１は、入力ネットワークポート２０８を介して受信したアナログ信号によるパケットを、デジタル信号によるパケットに変換する。ＥｔｈｅｒＰＨＹ部４１１は、ＥｔｈｅｒＭＡＣ部４１０から出力されたデジタル信号によるパケットを、アナログ信号によるパケットに変換する。
【００４９】
データ抽出部４０５は、入力されたパケットから、クエリ処理に必要なデータを抽出する処理部である。
【００５０】
入力レジスタ４０６は、クエリ処理に必要なデータを格納するための少なくとも一つの記憶領域を有するレジスタであり、エントリ番号付与部４１７によってパケットに付与されるエントリ番号の数と同じ数の記憶領域を有する。また、入力レジスタ４０６が有する各記憶領域には、パケットに付与されるエントリ番号が割り当てられる。
【００５１】
出力レジスタ４０７は、クエリ処理結果を格納するための記憶領域を有するレジスタである。出力レジスタ４０７は、クエリ処理部４１３によるクエリ処理の内容に従った数の記憶領域を有する。
【００５２】
一時レジスタ４１２は、ホストＣＰＵ２０３によるクエリ処理によって求められた処理結果を格納するための少なくとも一つの記憶領域を有するレジスタである。また、一時レジスタ４１２は、クエリ処理部４１３による処理の途中結果を格納してもよい。
【００５３】
さらに、一時レジスタ４１２は、一時結果終了フラグ４１９を有する。一時結果終了フラグ４１９は、一時レジスタ４１２に、ホストＣＰＵ２０３による処理結果が格納されたか否かを示すフラグである。
【００５４】
入力レジスタ制御部４１５は、入力レジスタ４０６からの読み出し及び入力レジスタ４０６への書き込みを制御する。入力レジスタ制御部４１５は、入力条件８０１を有する。
【００５５】
入力条件８０１は、入力レジスタ４０６に格納されたデータのうち、クエリ処理部４１３に入力するべきデータの条件を示す情報である。
【００５６】
出力レジスタ制御部４１６は、入力レジスタ４０６及び出力レジスタ４０７からの読み出し、及び、出力レジスタ４０７への書き込みを制御する。出力レジスタ制御部４１６は、出力条件８０２を有する。
【００５７】
出力条件８０２は、出力レジスタ４０７に格納されたデータを、サーバ２０２から出力するか否かを決定するための条件を示す情報である。
【００５８】
クエリ処理部４１３は、ホストＣＰＵ２０３によるクエリ処理の結果と、入力レジスタ４０６に格納されるデータとに、ユーザによって指定されたクエリ処理を実行する処理部である。クエリ処理部４１３がクエリ処理を実行することによって、ストリーム処理部３０４によるストリーム処理が実行される。
【００５９】
管理フラグ４１４は、入力ネットワークのプロトコル処理の処理結果を示す情報である。管理フラグ４１４は、ストリーム処理部３０４が有する記憶部に格納される。
【００６０】
エントリ番号生成部４１８は、ストリーム処理部３０４に入力されたパケットを管理するために、各パケットに一意のエントリ番号を生成する処理部である。エントリ番号生成部４１８は、エントリ番号の所定の数をユーザによって指定されてもよく、また、入力レジスタ４０６が有する記憶領域の数と同じ数のエントリ番号を保持してもよい。
【００６１】
エントリ番号付与部４１７は、エントリ番号生成部４１８によって生成された番号を、パケットに付加する処理部である。エントリ番号生成部４１８は、エントリ番号付与部４１７の指示に従い、エントリ番号をエントリ番号付与部４１７に入力する。
【００６２】
また、エントリ番号付与部４１７は、パケットを少なくとも二つに複製し、複製された一方のパケットをデータ抽出部４０５に入力し、他方のパケットをＥｔｈｅｒＭＡＣ部４０２に入力する。なお、入力ネットワークのプロトコル処理において、複製されたパケットが並列に処理される場合、エントリ番号付与部４１７は、パケットを三つ以上に複製してもよい。
【００６３】
サーバ２０２におけるストリーム処理は、本実施例において、ホストＣＰＵ２０３及びクエリ処理部４１３が、各々のクエリ処理を行うことによって実行される。
【００６４】
ホストＣＰＵ２０３は、メモリ２０４に蓄積されたデータのうち、所定の期間前にサーバ２０２に到着したデータから、最新のデータまでのデータ（すなわち、内部状態）を用いて、ホストＣＰＵ２０３のクエリ処理を行う。そして、ホストＣＰＵ２０３は、ホストＣＰＵ２０３によるクエリ処理の結果を、ストリーム処理部３０４に入力し、クエリ処理部４１３は、ホストＣＰＵ２０３から入力された処理の結果と、最新のデータとによって、クエリ処理部４１３のクエリ処理（ホストＣＰＵ２０３におけるクエリ処理とは異なる）を行う。
【００６５】
以下において、サーバ２０２が異常検知システムを実装するための計算機である場合を例として、本実施例のストリーム処理を説明する。ただし、本実施例のサーバ２０２は、様々なストリーム処理を行うシステムに適用されるため、図４Ａに示す異常検知システムのみを実装するための計算機ではない。
【００６６】
図４Ａは、本実施例のサーバ２０２を用いた異常検知システム示す説明図である。
【００６７】
本実施例の異常検知システムは、機器６０１、及び、サーバ２０２（異常検知装置）を備える。機器６０１は、少なくとも一つのセンサを備え、機器６０１に備わる各センサによって測定されたセンサデータを、サーバ２０２に送信する。
【００６８】
図４Ａに示すサーバ２０２は、異常検知装置である。サーバ２０２は、受信したセンサデータにストリーム処理を実行し、処理結果に基づいて機器６０１の状態が異常であるか否かを判定する。そして、サーバ２０２は、判定結果に従った信号を、機器６０１に送信する。
【００６９】
図４Ａにおいて、サーバ２０２が、機器６０１の状態が異常であると判定した場合、サーバ２０２は、機器停止信号を機器６０１に送信することによって、機器６０１を停止させる。また、サーバ２０２が、機器６０１の状態が異常ではないと判定した場合、サーバ２０２は、正常であることを示す正常通知信号を機器６０１に送信する。
【００７０】
図４Ｂは、本実施例のサーバ２０２を用いた異常検知システムにおける異常判定の方法を示す説明図である。
【００７１】
図４Ｂに示すグラフは、機器６０１において測定されたセンサデータの値を示す。図４Ｂに示す横軸が時間であり、縦軸がセンサデータの値（センサ値）である。図４Ｂに示すグラフによって、センサデータの値が示される。
【００７２】
サーバ２０２は、ホストＣＰＵ２０３によるクエリ処理により、過去のセンサ値を分析し、センサ値の周期性等を求める。そして、ホストＣＰＵ２０３によるクエリ処理により、サーバ２０２は、求められた周期性等に基づいて、センサデータが次に測定される時刻におけるセンサ値の上限値６０３と下限値６０４とを予測する。
【００７３】
センサデータを新たに受信した場合、サーバ２０２のストリーム処理部３０４（クエリ処理部４１３）は、新たに受信したセンサデータの値が、上限値６０３と下限値６０４との範囲（許容範囲）に含まれるか否かを判定する。新たに受信したセンサデータの値が、許容範囲に含まれる場合、クエリ処理部４１３は機器６０１の状態が正常であると判定する。
【００７４】
また、新たに受信したセンサデータの値が、許容範囲に含まれない場合、クエリ処理部４１３は、機器６０１の状態が異常であると判定し、機器６０１に機器停止信号を送信する。
【００７５】
図５は、本実施例のストリーム処理部３０４がストリーム処理を行うための設定を取得する処理を示すフローチャートである。
【００７６】
ユーザは、サーバ２０２が有する入力装置、又は、サーバ２０２に接続される入力装置を用いて、サーバ２０２に入力されるパケットのフォーマットを、サーバ２０２に入力する（５０１）。ステップ５０１において入力されるフォーマットは、例えば、図４Ａに示す異常検知システムにおけるセンサデータのフォーマットである。ステップ５０１において入力されるフォーマットは、パケットにおけるいずれの箇所が、クエリ処理部４１３に入力するためのデータであるかを示す。
【００７７】
ホストＣＰＵ２０３は、ユーザによって入力されたフォーマットを、ストリームアクセラレータ２０１に入力し、ストリームアクセラレータ２０１の各処理部に設定させる（５０２）。
【００７８】
ストリームアクセラレータ２０１の組み込みＣＰＵ３０１は、フォーマットをホストＣＰＵ２０３から入力された場合、ストリーム処理部３０４のＥｔｈｅｒＭＡＣ部４０２、ＩＰ処理部４０３、ＴＣＰ／ＵＤＰ処理部４０４、及び、データ抽出部４０５に、入力されたフォーマットを設定する。ＥｔｈｅｒＭＡＣ部４０２、ＩＰ処理部４０３、ＴＣＰ／ＵＤＰ処理部４０４、及び、データ抽出部４０５は、設定されたフォーマットを、各々に接続される、又は、各々が有するレジスタ等の記憶部に保持する（５０３）。
【００７９】
図６は、本実施例のストリーム処理部３０４に入力されるパケットのフォーマットを示す説明図である。
【００８０】
ストリーム処理部３０４に入力されるパケットのフォーマットには、クエリ処理部４１３による処理に必要なデータに関する情報が含まれる。パケットのフォーマットは、図６に示す通り、例えば、領域７０１〜領域７０５を含むが、図６に示すフォーマットには限られない。
【００８１】
領域７０１には、データの送信元のＩＰアドレスを示す値が含まれる。図４Ａに示す例において、領域７０１には、機器６０１のＩＰアドレス、又は、機器６０１に備わるセンサデータのＩＰアドレスが含まれる。ＩＰ処理部４０３は、入力されたパケットに含まれるデータの送信元を判定する際に、領域７０１を参照する。
【００８２】
領域７０２には、サーバ２０２が、接続されるネットワークからパケットを受信するために使用するポート番号が含まれる。図４Ａに示す例において、領域７０２には、センサデータを受信するためのＴＣＰポート番号（例：１００番）が含まれる。
【００８３】
領域７０３には、パケットに含まれるアプリケーションヘッダーのバイト数（例：１２８バイト）が含まれる。また、領域７０４には、クエリ処理部４１３が処理するために必要なデータが、アプリケーションヘッダーの後から何バイト目に格納されているかを示すオフセット値が含まれる（例：６４バイト）。
【００８４】
図６に示す領域７０５は、領域７０４のオフセット値が示す部分から１番目〜３番目の要素が、クエリ処理部４１３が処理するために必要なデータであることを示す。また、図６に示す領域７０５は、１番目の要素が、時刻等を表す固定バイト長のＴＩＭＥ型であること示す。また、図６に示す領域７０５は、２番目の要素及び３番目の要素が、数値を表す固定バイト長のＩＮＴＥＧＥＲ型であることを示す。
【００８５】
データ抽出部４０５は、入力されたパケットから、クエリ処理部４１３における処理に必要なデータを抽出する際に、領域７０３〜領域７０５を参照する。
【００８６】
図５のステップ５０１の後、ユーザは、ストリーム処理の結果を出力する先のＩＰアドレスをサーバ２０２に入力する（５０４）。ステップ５０４に入力されるＩＰアドレスは、図４Ａに示す例において、機器停止信号、又は、正常通知信号を送信する対象の機器６０１のＩＰアドレスである。
【００８７】
ホストＣＰＵ２０３は、ユーザによって入力されたＩＰアドレスを、ストリームアクセラレータ２０１に設定させる（５０５）。ストリームアクセラレータ２０１のＩＰ処理部４０９は、ユーザによって入力されたＩＰアドレスを保持する（５０６）。
【００８８】
ステップ５０４の後、ユーザは、クエリを入力する。入力されるクエリは、ストリーム処理によってユーザが実行したい内容を記述したプログラムである。入力されるクエリには、クエリ処理部４１３において行われるクエリ処理を実行するためのプログラムと、ホストＣＰＵ２０３において行われるクエリ処理を実行するためのプログラムとが含まれる。
【００８９】
図４Ａに示す例において、クエリ処理部４１３において行われるクエリ処理は、センサデータが入力される毎に、センサデータの値が許容範囲に含まれるか否かを判定し、判定結果に従って、機器停止信号又は正常通知信号を送信する処理である。また、ホストＣＰＵ２０３において行われるクエリ処理は、センサデータの値をメモリ２０４に蓄積し、蓄積されたセンサデータの値に基づいて、上限値と下限値とを求める処理である。
【００９０】
なお、本実施例において、蓄積されたデータを用いるクエリ処理は、前述の通り、ホストＣＰＵ２０３によって実行させる。これは、図１に示すホストＣＰＵ２０３の処理性能がストリーム処理部３０６の処理性能よりも高く、かつ、メモリ２０４の容量が、ストリームアクセラレータ２０１が有する記憶部（ＤＲＡＭ２０７等）の容量よりも大きいためである。すなわち、ストリームアクセラレータ２０１は、ホストＣＰＵ２０３の処理性能及びメモリ２０４の容量よりも低い性能の装置であってもよい。
【００９１】
しかし、ストリームアクセラレータ２０１の処理性能が十分に高く、かつ、ストリームアクセラレータ２０１が有する記憶部の容量が十分に大きい場合、ストリームアクセラレータ２０１がデータを蓄積し、ストリーム処理部３０６が蓄積されたデータを用いるクエリ処理を行ってもよい。すなわち、ホストＣＰＵ２０３が行うクエリ処理を、クエリ処理部４１３が実行してもよい。
【００９２】
ユーザによって入力されたクエリは、ホストＣＰＵ２０３によってコンパイルされる。そして、ホストＣＰＵ２０３は、コンパイルされたストリームアクセラレータ２０１のクエリを、ストリームアクセラレータ２０１に送信する。また、ホストＣＰＵ２０３は、コンパイルされたクエリを、ホストＣＰＵ２０３のメモリ２０４に保持する（５０８）。
【００９３】
ストリームアクセラレータ２０１のクエリ処理部４１３は、送信されたクエリを、自らが有するレジストリ等に保持する（５０９）。
【００９４】
ステップ５０７の後、ユーザは、ストリーム処理のスタートをサーバ２０２に指示する（５１０）。ホストＣＰＵ２０３は、ユーザからスタートを指示された場合、ストリームアクセラレータ２０１へストリーム処理のスタートを指示する（５１１）。
【００９５】
クエリ処理部４１３は、ホストＣＰＵ２０３からスタートを指示された場合、ステップ５０９において保持したクエリを開始する（５１２）。
【００９６】
図７は、本実施例のストリーム処理部３０４によるストリーム処理を示すフローチャートである。
【００９７】
図５に示すステップ５１１の後、ホストＣＰＵ２０３も、メモリ２０４に格納されるクエリを開始する（５１３）。
【００９８】
ステップ５１３の後、ホストＣＰＵ２０３は、クエリ処理の結果をストリームアクセラレータ２０１へ転送する。図４Ａに示す例において、クエリ処理がスタートされた場合、ホストＣＰＵ２０３は、メモリ２０４に蓄積されたセンサデータの値から、センサデータの許容範囲である上限値と下限値とを求める。そして、ホストＣＰＵ２０３は、求められた上限値と下限値とを、ストリームアクセラレータ２０１へ転送する（５１４）。
【００９９】
ストリームプロセッサ２０６の組み込みＣＰＵ３０１は、ホストＣＰＵ２０３から転送された上限値と下限値とを受け付け、ストリーム処理部３０４の一時レジスタ４１２へ格納する。また、組み込みＣＰＵ３０１は、一時レジスタ４１２への格納が終了したことを示す値によって一時結果終了フラグ４１９を更新する（５１５）。
【０１００】
ステップ５１５の後、ストリームアクセラレータ２０１のＥｔｈｅｒＰＨＹ部４０１は、入力ネットワークポート２０８を介してパケットが入力されることを待つ（５１６）。図４Ａに示す例では、ＥｔｈｅｒＰＨＹ部４０１は、機器６０１から出力されたセンサデータがサーバ２０２の入力ネットワークポート２０８に到着し、さらに、入力ネットワークポート２０８を介してセンサデータが入力されることを待つ。
【０１０１】
パケットが入力された場合、ＥｔｈｅｒＰＨＹ部４０１は、入力されたパケットを、アナログ信号によるパケットからデジタル信号によるパケットに変換する（５１７）。
【０１０２】
ステップ５１７の後、エントリ番号付与部４１７は、デジタル信号に変換されたパケットに、エントリ番号生成部４１８から取得されたエントリ番号を付与する。そして、エントリ番号付与部４１７は、エントリ番号を付与されたパケットを、二つに複製する。そして、エントリ番号付与部４１７は、複製された一方のパケットをデータ抽出部４０５へ入力し（バイパス）、さらに、他方のパケットをＥｔｈｅｒＭＡＣ部４０２に入力する（５１８）。
【０１０３】
なお、エントリ番号付与部４１７は、ステップ５１８において、管理フラグ４１４を更新する。管理フラグ４１４の更新及びエントリ番号についての詳細は、後述する。
【０１０４】
エントリ番号付与部４１７からパケットを入力された場合、データ抽出部４０５は、入力されたパケットから、クエリ処理に必要なデータを抽出する。そして、データ抽出部４０５は、抽出されたクエリ処理に必要なデータを、入力レジスタ４０６に格納する（５２０）。
【０１０５】
ここで、データ抽出部４０５で行われる処理について説明する。
【０１０６】
一般的なストリーム処理において、１回のストリーム処理を行うためにサーバ２０２に送信される一つのデータの量は、一つのパケットに格納される程度に十分に短い（少ない）。例えば、図４Ａに示すセンサデータは、一般的に一つのパケットのペイロード部等に格納される程度の容量である。
【０１０７】
このため、データ抽出部４０５は、ストリーム処理に必要なデータのうちの一つが一つのパケットに格納される場合、一つのパケットのみからクエリ処理に必要なデータを抽出する。なお、複数のパケットに分割されて、ストリーム処理に必要なデータが送信された場合の、サーバ２０２における処理については後述される。
【０１０８】
図８は、本実施例のストリーム処理部３０４が受信するＴＣＰ／ＩＰパケットを示す説明図である。
【０１０９】
図８は、サーバ２０２に入力される一つのパケットの例を示す。
【０１１０】
ＥｔｈｅｒＰＨＹ部４０１から出力されたパケットは、先頭にＥｔｈｅｒヘッダーを含む。Ｅｔｈｅｒヘッダー長は、Ｅｔｈｅｒｎｅｔの規格によって定められる固定長であり、２２バイトである。
【０１１１】
Ｅｔｈｅｒｎｅｔにおけるパケットは、Ｅｔｈｅｒヘッダーの後にＩＰヘッダーを含む。ＩＰヘッダーの中には、ＩＰヘッダー長を示すフィールドが含まれる。例えば、ＩＰヘッダー長を示すフィールドに、"ｈ"が格納された場合、ＩＰヘッダー長は、４＊ｈバイトである。
【０１１２】
Ｅｔｈｅｒｎｅｔにおけるパケットは、ＩＰヘッダーの後にＴＣＰヘッダーを含む。ＴＣＰヘッダーの中には、データオフセットを示すフィールドが含まれる。ここでデータオフセットとは、ＴＣＰヘッダー長である。ＴＣＰヘッダーにおけるデータオフセットを示すフィールドに"ｙ"が格納された場合、ＴＣＰヘッダー長は、４＊ｙバイトである。
【０１１３】
パケットの送信元の機器（図４Ａに示す例において、機器６０１）は、前述のＩＰヘッダー長及びＴＣＰヘッダー長の値を任意に決定した場合、各パケットにＩＰヘッダー長及びＴＣＰヘッダー長の値を格納する。これによって、データ抽出部４０５は、各パケットにおいていずれの領域がＩＰヘッダーか、ＴＣＰヘッダーか、又は、アプリケーションヘッダーかを識別することができる。
【０１１４】
Ｅｔｈｅｒｎｅｔにおけるパケットは、ＴＣＰヘッダーの後にアプリケーションヘッダーを含む。アプリケーションヘッダー長は、一般的にアプリケーション毎に異なるが、本実施例において、ユーザがアプリケーションヘッダー長をあらかじめ定める。本実施例におけるアプリケーションヘッダー長は、ａバイトである。
【０１１５】
Ｅｔｈｅｒｎｅｔにおけるパケットは、アプリケーションヘッダーの後に、アプリケーションデータを含む。アプリケーションデータには、ストリーム処理に必要なデータが含まれる。本実施例において、サーバ２０２のユーザは、ストリーム処理に必要なデータのアプリケーションデータにおける位置を、あらかじめ定める。本実施例のオフセットの値は、ｋバイトである。
【０１１６】
アプリケーションヘッダー長（ａ）と、オフセット（ｋ）とは、ユーザによって、図６に示すパケットのフォーマットの領域７０３及び領域７０４に格納される。そして、アプリケーションヘッダー長（ａ）と、オフセット（ｋ）とは、図５に示すステップ５０１〜ステップ５０３によって、データ抽出部４０５に保持される。
【０１１７】
このため、データ抽出部４０５は、ステップ５２０において、パケットの先頭から２２＋４＊ｈ＋４＊ｙ＋ａ＋ｋバイト目の位置から、ストリーム処理に必要なデータを抽出することができる。
【０１１８】
ステップ５２０において、データ抽出部４０５は、入力されたパケットからストリーム処理に必要なデータを抽出し、さらに、入力されたパケットのエントリ番号を抽出されたデータに付与する。そして、データ抽出部４０５は、抽出されたデータに付与されたエントリ番号を特定し、特定されたエントリ番号に対応する入力レジスタ４０６の記憶領域に、抽出されたデータを格納する。
【０１１９】
ステップ５２０において、データ抽出部４０５に入力されたパケットは、ネットワークプロトコル処理を実行されることなく、データ抽出部４０５によって、ストリーム処理に必要なデータを抽出される。このため、入力されたパケットは、ステップ５２０の後、ネットワークプロトコル処理を実行されるよりも早く、クエリ処理部４１３によってクエリ処理を実行される。
【０１２０】
しかし、データ抽出部４０５に入力されたパケットには、サーバ２０２宛でないパケットなどの、ストリーム処理とは関係のないパケットも含まれる。そのようなストリーム処理とは関係ないパケットにクエリ処理部４１３がクエリ処理を行い、その結果を出力した場合、誤った結果が出力されることとなる。
【０１２１】
このため、本実施例におけるストリーム処理部３０４は、ストリーム処理とは関係ないパケットを受信した場合でも誤った結果を出力することがないように、ネットワークプロトコル処理を、データ抽出部４０５の処理、および、クエリ処理部４１３の処理と並行して実行する。
【０１２２】
エントリ番号付与部４１７から出力された二つのパケットのうち一つは、ＥｔｈｅｒＭＡＣ部４０２へ入力される。その後、ＥｔｈｅｒＭＡＣ部４０２、ＩＰ処理部４０３、及び、ＴＣＰ／ＵＤＰ処理部４０４は、入力されたパケットに、入力ネットワークのプロトコル処理を行う（５１９）。
【０１２３】
ＥｔｈｅｒＭＡＣ部４０２は、入力ネットワークのプロトコル処理として、入力されたパケットのＭＡＣアドレスによって、入力されたデータが自サーバ２０２宛であるか否かを判定したり、入力されたパケットにエラーがあるか否かをＣＲＣ法によって判定したりする。
【０１２４】
そして、入力されたパケットが自サーバ２０２宛ではないか、又は、自サーバ２０２宛ではあるが、算出されたＣＲＣエラーがパケットに誤りがあることを示す場合、ＥｔｈｅｒＭＡＣ部４０２は、入力されたパケットはエラーであると判定する。そして、入力されたパケットがエラーであると判定された場合、ＥｔｈｅｒＭＡＣ部４０２は、バイパスされてデータ抽出部４０５に入力されたパケット、又は、クエリ処理部４１３から出力されたデータをキャンセルするため、管理フラグ４１４を更新する。
【０１２５】
図９は、本実施例の管理フラグ４１４を示す説明図である。
【０１２６】
管理フラグ４１４は、エントリ番号４１４１、エントリｖａｌｉｄ４１４２、入力レジスタｖａｌｉｄ４１４３、出力レジスタｖａｌｉｄ４１４４、Ｅｒｒｏｒ４１４５、及び、ＮｏＥｒｒｏｒ４１４６を含む。
【０１２７】
エントリ番号４１４１は、エントリ番号付与部４１７によってデータに付与された値である。
【０１２８】
エントリｖａｌｉｄ４１４２は、エントリ番号を付与されたパケットが、データ抽出部４０５に入力されたか否かを示す。本実施例において、エントリｖａｌｉｄ４１４２が"１"（有効）である場合、エントリｖａｌｉｄ４１４２は、エントリ番号４１４１の値を付与されたパケットが、データ抽出部４０５に入力されたことを示す。
【０１２９】
入力レジスタｖａｌｉｄ４１４３は、エントリ番号４１４１の値を付与されたデータが入力レジスタ４０６に格納されているか否かを示す。本実施例において、入力レジスタｖａｌｉｄ４１４３が"１"（有効）である場合、入力レジスタｖａｌｉｄ４１４３は、エントリ番号４１４１の値を付与されたデータが入力レジスタ４０６に格納されていることを示す。
【０１３０】
出力レジスタｖａｌｉｄ４１４４は、エントリ番号４１４１の値を付与されたデータが出力レジスタ４０７に格納されているか否かを示す。本実施例において、出力レジスタｖａｌｉｄ４１４４が"１"（有効）である場合、出力レジスタｖａｌｉｄ４１４４は、エントリ番号４１４１の値を付与されたデータが出力レジスタ４０７に格納されていることを示す。
【０１３１】
Ｅｒｒｏｒ４１４５は、入力ネットワークのプロトコル処理において、エントリ番号４１４１の値を付与されたパケットがエラーであると判定されたか否かを示す。本実施例において、Ｅｒｒｏｒ４１４５が"１"（有効）である場合、Ｅｒｒｏｒ４１４５は、エントリ番号４１４１の値を付与されたパケットが、入力ネットワークのプロトコル処理によってエラーであると判定されたことを示す。
【０１３２】
入力レジスタ制御部４１５は、Ｅｒｒｏｒ４１４５に格納される値に従って、入力レジスタ４０６に格納される値をクエリ処理部４１３に入力されるか否かを決定し、出力レジスタ制御部４１６も、Ｅｒｒｏｒ４１４５に格納される値に従って、出力レジスタ４０７に格納される値をサーバ２０２から出力するか否かを決定する。
【０１３３】
ＮｏＥｒｒｏｒ４１４６は、入力ネットワークのプロトコル処理において、エントリ番号４１４１の値を付与されたパケットがエラーではないと判定されたか否かを示す。本実施例において、ＮｏＥｒｒｏｒ４１４６が"１"（有効）である場合、ＮｏＥｒｒｏｒ４１４６は、エントリ番号４１４１の値を付与されたパケットは、入力ネットワークのプロトコル処理において、エラーでないと判定されたことを示す。
【０１３４】
エントリ番号付与部４１７は、ステップ５１８において、パケットにエントリ番号を付与した後、パケットに付与された番号をエントリ番号４１４１が示す管理フラグ４１４の行を特定する。そして、エントリ番号付与部４１７は、特定された行のエントリｖａｌｉｄ４１４２に"１"を格納し、特定された行のその他の列（入力レジスタｖａｌｉｄ４１４３、出力レジスタｖａｌｉｄ４１４４、Ｅｒｒｏｒ４１４５、及び、ＮｏＥｒｒｏｒ４１４６）に"０"を格納する。これによって、エントリ番号付与部４１７は、管理フラグ４１４を初期化する。
【０１３５】
エントリ番号４１４１に格納されるエントリ番号には、エントリ番号の下限値及び上限値があり、本実施例において、エントリ番号の下限値は０であり、エントリ番号の上限値は１５である。この場合、エントリ番号には、１６種類の番号がある。
【０１３６】
エントリ番号の上限値は、ストリームアクセラレータ２０１が同時に処理できるパケットの数である。また、エントリ番号の上限値は、入力レジスタ４０６が有する記憶領域の数に対応する。
【０１３７】
本実施例のエントリ番号付与部４１７は、エントリ番号生成部４１８が生成する番号に従って、パケットを受信する毎に、パケットに付与するエントリ番号をインクリメントする。そして、エントリ番号付与部４１７は、パケットに付与する番号がエントリ番号の上限値に達した後、パケットに付与する番号を下限値に戻す。
【０１３８】
なお、パケットに付与するエントリ番号に下限値及び上限値があれば、エントリ番号付与部４１７は、いかなる方法によってエントリ番号をパケットに付与してもよい。例えば、エントリ番号付与部４１７は、パケットを受信する毎に、パケットに付与するエントリ番号をデクリメントしてもよい。
【０１３９】
ステップ５１９における入力ネットワークのプロトコル処理において、ＥｔｈｅｒＭＡＣ部４０２に入力されたパケットがエラーであると判定された場合、ＥｔｈｅｒＭＡＣ部４０２は、エラーとなったパケットに付与されたエントリ番号に対応する管理フラグ４１４の行を特定し、特定された行のＥｒｒｏｒ４１４５を"１"によって更新する。また、ＥｔｈｅｒＭＡＣ部４０２は、プロトコル処理に従ったエラー処理（パケットの廃棄等）も行う。
【０１４０】
ＥｔｈｅｒＭＡＣ部４０２において、入力されたパケットはエラーではないと判定された場合、ＩＰ処理部４０３は、入力されたパケットの宛先ＩＰアドレスが自サーバ２０２を示すか、及び、入力されたパケットの送信元ＩＰアドレスが所定のアドレスであるか否かを判定する。なお、送信元ＩＰアドレスを判定するための所定のアドレスは、図５に示すステップ５０１〜５０３によって保持されたパケットのフォーマットの領域７０１に格納される値に相当する。
【０１４１】
入力されたパケットの宛先ＩＰアドレスが自サーバ２０２を示さないか、又は、入力されたパケットの送信元ＩＰアドレスが所定のアドレスではない場合、ＩＰ処理部４０３は、入力されたパケットがエラーであると判定する。そして、入力されたパケットがエラーである場合、ＩＰ処理部４０３は、パケット廃棄等のエラー処理と、管理フラグ４１４の更新とを行う。
【０１４２】
具体的には、ＩＰ処理部４０３において、入力されたパケットがエラーであると判定された場合、ＩＰ処理部４０３は、ＥｔｈｅｒＭＡＣ部４０２と同じく、管理フラグ４１４のＥｒｒｏｒ４１４５を"１"によって更新する。
【０１４３】
ＩＰ処理部４０３において入力されたパケットはエラーではないと判定された場合、ＴＣＰ／ＵＤＰ処理部４０４は、入力されたパケットがエラーであるか否かを判定する。ＴＣＰ／ＵＤＰ処理部４０４におけるエラーの判定手順を、以下に示す。
【０１４４】
例えば、サーバ２０２がＴＣＰプロトコルを使用した場合、ＴＣＰ／ＵＤＰ処理部４０４は、入力されたパケットのＴＣＰヘッダーの値が所定のＴＣＰポート番号であるか否かを判定する。そして、ＴＣＰ／ＵＤＰ処理部４０４は、ＴＣＰヘッダーの値が所定のＴＣＰポート番号である場合、入力されたパケットは、自サーバ２０２において処理されるべきデータであると判定する。
【０１４５】
ここで、所定のＴＣＰポート番号は、ステップ５０３において保持されたパケットのフォーマットの領域７０２の値に相当する。
【０１４６】
入力されたパケットが、自サーバ２０２において処理されるべきデータでないと判定された場合、ＴＣＰ／ＵＤＰ処理部４０４は、入力されたパケットがエラーであると判定し、パケット廃棄等のエラー処理と、管理フラグ４１４の更新とを行う。具体的には、入力されたパケットがエラーであると判定された場合、ＴＣＰ／ＵＤＰ処理部４０４は、ＥｔｈｅｒＭＡＣ部４０２及びＩＰ処理部４０３と同じく、管理フラグ４１４のＥｒｒｏｒ４１４５を"１"によって更新する。
【０１４７】
入力されたパケットが、自サーバ２０２において処理されるべきデータであると判定された場合も、ＴＣＰ／ＵＤＰ処理部４０４は、あらかじめ保持されたパケットのフォーマット（ＴＣＰポート番号以外）に従って、入力されたパケットに含まれるデータがストリーム処理を行うべきデータであるか否かを判定する。
【０１４８】
入力されたパケットに含まれるデータがストリーム処理を行うべきデータでないと判定された場合、ＴＣＰ／ＵＤＰ処理部４０４は、入力されたデータがエラーであると判定し、パケット廃棄等のエラー処理を行い、さらに、管理フラグ４１４のＥｒｒｏｒ４１４５を"１"によって更新する。
【０１４９】
また、ＴＣＰ／ＵＤＰ処理部４０４は、チェックサムによるエラーチェックを入力されたパケットに行い、エラーチェックの結果がエラーを示す場合、入力されたパケットがエラーであると判定する。そして、ＴＣＰ／ＵＤＰ処理部４０４は、入力されたパケットがエラーであると判定された場合、パケット廃棄等のエラー処理を行い、さらに、管理フラグ４１４のＥｒｒｏｒ４１４５を"１"によって更新する。
【０１５０】
なお、複数のパケットに分割されて、ストリーム処理に必要なデータが送信された場合、ＴＣＰ／ＵＤＰ処理部４０４は、以下の処理を行う。なお、以下において、ストリーム処理に必要なデータを、分割して含む複数のパケットをパケット群と記載する。
【０１５１】
一般的にパケットのＴＣＰヘッダーにはシーケンス番号が付与されている。このため、ＴＣＰ／ＵＤＰ処理部４０４は、パケット群のうちのいくつかがネットワーク上で消失したり、パケット群に含まれるパケットが各々異なる順序で到着したりするなどの異常を、シーケンス番号に基づいて検出できる。
【０１５２】
ＴＣＰ／ＵＤＰ処理部４０４は、シーケンス番号を参照した結果、このような異常が検出された場合、入力されたパケット群はエラーであると判定し、パケット群の各パケットに対応する管理フラグ４１４のＥｒｒｏｒ４１４５を"１"によって更新する。そして、ＴＣＰ／ＵＤＰ処理部４０４は、データの送信側にパケット群の再送を要求する。
【０１５３】
さらに、ＴＣＰ／ＵＤＰ処理部４０４は、シーケンス番号を参照した結果、異常が検出されない場合、パケット群に含まれる各データを、各データに対応するシーケンス番号に基づいて一つのデータに組み立てる。そして、ＴＣＰ／ＵＤＰ処理部４０４は、先頭のシーケンス番号を含むパケットのデータを、組み立てられたデータによって更新する。そして、ＴＣＰ／ＵＤＰ処理部４０４は、パケット群のうち、先頭のシーケンス番号以外のシーケンス番号を含むパケットに付与されたエントリ番号（少なくとも一つ）を特定し、特定されたエントリ番号を示すエントリ番号４１４１を含む行のＥｒｒｏｒ４１４５を"１"によって更新する。
【０１５４】
その後、ＴＣＰ／ＵＤＰ処理部４０４は、先頭のシーケンス番号と組み立てられたデータとを含むパケットを、データ抽出部４０５に入力する。これによって、データ抽出部４０５は、ＴＣＰ／ＵＤＰ処理部４０４によって入力されたパケットから、ストリーム処理に必要なデータを、組み立てられた状態で抽出することができる。
【０１５５】
一方で、先頭のシーケンス番号以外のシーケンス番号を含むパケットが、ＴＣＰ／ＵＤＰ処理部４０４によるデータの組み立て処理の前に、データ抽出部４０５、及び、クエリ処理部４１３によって処理されていた場合においても、管理フラグ４１４が更新されるため、先頭のシーケンス番号以外のシーケンス番号を含むパケットに関する処理結果は、少なくとも出力レジスタ４０７において廃棄される。
【０１５６】
なお、先頭のシーケンス番号と組み立てられたデータとを含むパケットを、データ抽出部４０５に入力するまでに、ＴＣＰ／ＵＤＰ処理部４０４は、先頭のシーケンス番号を含むパケットに対応する、管理フラグ４１４の出力レジスタｖａｌｉｄ４１４４を"０"に更新する。これによって、ＴＣＰ／ＵＤＰ処理部４０４は、エントリ番号付与部４１７からプロトコル処理をバイパスして入力されたパケットに関するクエリ処理部４１３の処理結果が、出力レジスタ４０７に先に入力されている状態において、組み立てられたデータがクエリ処理部４１３によって処理されている間に、出力レジスタ４０７に格納されるデータを出力レジスタ制御部４１６がサーバ２０２から出力することを防ぐことができる。
【０１５７】
ＴＣＰ／ＵＤＰ処理部４０４は、複数のパケットに分割されて送信されるデータを、前述のような方法によって処理することによって、クエリ処理に必要なデータを適切にクエリ処理部４１３に送ることができる。
【０１５８】
ＴＣＰ／ＵＤＰ処理部４０４は、入力されたパケットがエラーでないと判定された場合、入力されたパケットのエントリ番号を示すエントリ番号４１４１を含む管理フラグ４１４の行を特定し、特定された行のＮｏＥｒｒｏｒ４１４６を"１"によって更新する。
【０１５９】
入力されたパケットがエラーでないと判定された場合、ＴＣＰ／ＵＤＰ処理部４０４は、エラーではないと判定されたパケットを廃棄してもよい。これによって、ＴＣＰ／ＵＤＰ処理部４０４は、データ抽出部４０５、及び、クエリ処理部４１３が不要な処理をすることを防ぐことができる。
【０１６０】
以上によって、入力ネットワークのプロトコル処理（ステップ５１９に相当）が終了する。
【０１６１】
ステップ５２０において、データ抽出部４０５は、エントリ番号付与部４１７から入力されたパケットと同じく、ＴＣＰ／ＵＤＰ処理部４０４から入力されたパケットから、クエリ処理に必要なデータを抽出し、抽出されたデータを入力レジスタ４０６に入力する。図９に示すエントリ番号がパケットに付与される場合、本実施例の入力レジスタ４０６は、１６個（本実施例のエントリ番号の上限値＋１）の記憶領域を有する。
【０１６２】
ステップ５２０において、データ抽出部４０５は、さらに、パケットに付与されたエントリ番号を示すエントリ番号４１４１を含む管理フラグ４１４の行の、入力レジスタｖａｌｉｄ４１４３を"１"によって更新する。
【０１６３】
ステップ５２０の後、入力レジスタ制御部４１５は、パケットの到着順にデータをクエリ処理部４１３に処理させるため、記憶領域に割り当てられたエントリ番号の順に、入力レジスタ４０６に格納されたデータを取り出す。ここで、入力レジスタ制御部４１５は、管理フラグ４１４と所定の入力条件とに従って、クエリ処理部４１３に入力するデータを入力レジスタ４０６から取り出すか、又は、データを取り出さずに次の記憶領域に読み進む（廃棄する）かを決定する。
【０１６４】
ここで、データを取り出す所定の入力条件８０１を図１０に示す。
【０１６５】
図１０は、本実施例の入力レジスタ４０６からデータを取り出す入力条件８０１を示す説明図である。
【０１６６】
入力条件８０１は、あらかじめ入力レジスタ制御部４１５に保持される。図１０に示す入力条件８０１は、条件８０１１及び条件８０１２を示す。
【０１６７】
条件８０１１は、管理フラグ４１４において、エントリｖａｌｉｄ４１４２が有効（"１"）であり、かつ、Ｅｒｒｏｒ４１４５が有効（"１"）であるデータは、入力レジスタ４０６から取り出されないことを示す。すなわち、入力レジスタ制御部４１５は、条件８０１１に該当するデータが格納された入力レジスタ４０６の記憶領域からデータを取り出すことなく、次の記憶領域に読み進む。
【０１６８】
このため、条件８０１１に該当するデータは、クエリ処理部４１３によって処理されることなく、同じエントリ番号を付与されたデータによって入力レジスタ４０６において上書きされる。すなわち、入力レジスタ制御部４１５がデータを読み進めた場合、読み進められたデータは廃棄される。
【０１６９】
条件８０１１によって、入力ネットワークのプロトコル処理においてエラーであると判定されたデータには、クエリ処理が実行されない。入力レジスタ４０６に格納されたデータが条件８０１１に該当しない場合、入力レジスタ制御部４１５は、条件８０１２を参照する。
【０１７０】
条件８０１２は、管理フラグ４１４において、エントリｖａｌｉｄ４１４２が有効（"１"）であり、かつ、入力レジスタｖａｌｉｄ４１４３が有効（"１"）であるデータは、入力レジスタ制御部４１５によって入力レジスタ４０６から取り出されることを示す。また、条件８０１２は、取り出されたデータが、クエリ処理部４１３によって処理されることを示す。
【０１７１】
条件８０１２によって、入力レジスタ４０６に格納されたデータが、クエリ処理部４１３によって処理される。また、入力条件８０１が条件８０１１及び条件８０１１を含むことによって、入力ネットワークのプロトコル処理が終了していなくても、クエリ処理部４１３は、入力レジスタ４０６に格納されたデータにクエリ処理を実行することができる。
【０１７２】
ステップ５２０の後、入力レジスタ制御部４１５は、管理フラグ４１４及び入力条件８０１（特に条件８０１１）に従って、Ｅｒｒｏｒ４１４５に"１"が格納されている行に対応するパケットから抽出されたデータを、入力レジスタ４０６から廃棄する（５２６）。これによって、入力レジスタ制御部４１５は、出力レジスタ制御部４１６による制御前に、不要なデータを廃棄することができるため、クエリ処理部４１３が不要なデータを処理することによるクエリ処理部４１３の負荷の増加を抑制することができる。
【０１７３】
入力レジスタ制御部４１５は、条件８０１２に従って、クエリ処理部４１３に処理させるデータを取り出し、取り出されたデータをクエリ処理部４１３に入力する。
【０１７４】
また、入力レジスタ制御部４１５は、入力レジスタ４０６のデータに該当する管理フラグ４１４の値が、入力条件８０１のいずれにも該当しない場合、次の記憶領域を読むことなく、管理フラグ４１４の値が更新されるまで、入力レジスタ４０６からの読み出しを待つ。
【０１７５】
なお、入力レジスタ制御部４１５が、入力条件８０１を用いてデータを制御する際に、入力ネットワークのプロトコル処理がまだ終了していない場合がある。この場合においても、後述する出力レジスタ制御部４１６の制御によって、クエリ処理部４１３から出力されたデータは、入力ネットワークのプロトコル処理の結果に従って、サーバ２０２から出力されるか否か決定される。このため、入力レジスタ制御部４１５は、入力ネットワークのプロトコル処理が終了していないデータも、クエリ処理部４１３に入力できるため、ストリーム処理をより高速化することができる。
【０１７６】
クエリ処理部４１３は、データを入力された場合、入力されたデータと一時レジスタ４１２に格納されるデータとに基づいて、クエリ処理を行う（５２１）。そして、クエリ処理部４１３は、ステップ５２１において、クエリ処理結果を示すデータを、出力レジスタ４０７に格納する。ここで、クエリ処理部４１３は、クエリ処理結果に、入力レジスタ４０６から入力されたデータに付与されていたエントリ番号を付与する。
【０１７７】
一時レジスタ４１２の一時結果終了フラグ４１９が、ホストＣＰＵ２０３から一時レジスタ４１２へのデータの格納が終了していないことを示す場合、クエリ処理部４１３は、ホストＣＰＵ２０３から一時レジスタ４１２へのデータの格納が終了するまで、クエリ処理を待つ。なお、クエリ処理部４１３は、クエリ処理結果を示すデータを、一時レジスタ４１２に格納してもよい。
【０１７８】
図４Ａに示す例において、クエリ処理部４１３は、一時レジスタ４１２へ格納された上限値及び下限値（許容範囲）を読み出し、入力レジスタ４０６から入力されたデータ（センサ値）と、一時レジスタ４１２から読み出された許容範囲とを比較する。入力されたセンサ値が許容範囲に含まれる場合、クエリ処理部４１３は、正常であることを示すデータを出力レジスタ４０７に入力する。入力されたセンサ値が許容範囲に含まれない場合、クエリ処理部４１３は、機器停止するためのコマンドを含むデータを出力レジスタ４０７に入力する。
【０１７９】
出力レジスタ４０７に処理結果のデータが格納された場合、出力レジスタ制御部４１６は、管理フラグ４１４の出力レジスタｖａｌｉｄ４１４４を"１"によって更新する。
【０１８０】
出力レジスタ４０７の記憶領域の数は、ストリーム処理の内容に従って定められ、本実施例において一つである。これは、クエリ処理部４１３は、入力されたデータ毎に、前回までに受信したデータによって更新された内部状態を用いなければならず、一つのデータに一つのクエリ処理しか行うことができないためである。この結果、クエリ処理部４１３によるクエリ処理結果は、一般的に一つであることが多い。
【０１８１】
なお、一つのデータから複数のクエリ処理結果が算出される場合も、本実施例のクエリ処理部４１３は、複数のクエリ処理結果を含む一つのデータを出力レジスタ４０７に入力する。
【０１８２】
ステップ５２１において、出力レジスタ４０７にクエリ処理結果を含むデータが入力された場合、出力レジスタ制御部４１６は、管理フラグ４１４と図１１に示す出力条件８０２とに従って、出力レジスタ４０７に格納されるデータをサーバ２０２から出力するか否かを決定する（５２２）。すなわち、出力レジスタ制御部４１６は、管理フラグ４１４と図１１に示す出力条件８０２とに従って、サーバ２０２から出力せずに廃棄するデータを決定する。
【０１８３】
図１１は、本実施例の出力レジスタ４０７からデータを取り出す出力条件８０２を示す説明図である。
【０１８４】
出力条件８０２は、あらかじめ出力レジスタ制御部４１６に保持される。図１１に示す出力条件８０２は、条件８０２１及び条件８０２２を示す。
【０１８５】
条件８０２１は、管理フラグ４１４において、エントリｖａｌｉｄ４１４２が有効（"１"）であり、かつ、出力レジスタｖａｌｉｄ４１４４が有効（"１"）であり、かつ、ＮｏＥｒｒｏｒ４１４６が有効（"１"）であるデータは、サーバ２０２から出力されることを示す。
【０１８６】
条件８０２２は、管理フラグ４１４において、エントリｖａｌｉｄ４１４２が有効（"１"）であり、かつ、入力レジスタｖａｌｉｄ４１４３が有効（"１"）であり、かつ、Ｅｒｒｏｒ４１４５が有効（"１"）であるデータは、出力レジスタ制御部４１６によって廃棄されることを示す。
【０１８７】
すなわち、出力レジスタ制御部４１６は、条件８０２１によって、入力ネットワークのプロトコル処理によってエラーではないと判定されたパケットに対応する、クエリ処理部３１３が処理を行った結果のデータを、ＴＣＰ／ＵＤＰ処理部４０８に入力する。
【０１８８】
また、出力レジスタ制御部４１６は、入力ネットワークのプロトコル処理のいずれかでエラーと判定されたパケットに対応するクエリ処理結果をサーバ２０２から出力しないため、条件８０２２に該当するデータを廃棄する。
【０１８９】
さらに、出力レジスタ制御部４１６は、出力レジスタ４０７のデータが条件８０２１又は条件８０２２のいずれかに該当し、データをサーバ２０２から出力するか否かを決定した後、決定されたデータに付加されたエントリ番号を示すエントリ番号４１４１を含む管理フラグ４１４の行を、すべて"０"によって更新する（５２２）。
【０１９０】
なお、ステップ５２２において、出力レジスタ４０７のデータが条件８０２１又は条件８０２２のいずれにも該当しない場合、出力レジスタ制御部４１６は、出力レジスタ４０７のデータをサーバ２０２から出力するか否かを決定することなく、入力ネットワークのプロトコル処理が終わり、かつ、管理フラグ４１４が更新されるまで待つ。
【０１９１】
ステップ５２２の後、ＴＣＰ／ＵＤＰ処理部４０８にデータが入力された後、ＴＣＰ／ＵＤＰ処理部４０８、ＩＰ処理部４０９、及び、ＥｔｈｅｒＭＡＣ部４１０は、データをサーバ２０２から出力するためのプロトコル処理（出力ネットワークのプロトコル処理）を、データに順次実行する。これによって、出力レジスタ４０７から出力されたデータが、サーバ２０２によって送信されるためのパケットに含める。特に、ＩＰ処理部４０９は、ステップ５０６において保持された出力先ＩＰアドレスを、出力レジスタ４０７から出力されたデータが含まれるパケットに格納する。
【０１９２】
そして、ＥｔｈｅｒＭＡＣ部４１０からデータを入力された場合、ＥｔｈｅｒＰＨＹ部４１１は、データをデジタル信号からアナログ信号に変換し、さらに、アナログ信号に変換されたデータを、出力ネットワークポート２０９を介してネットワークへ出力する（５２３）。
【０１９３】
さらに、ステップ５２２の後、出力レジスタ制御部４１６は、ＴＣＰ／ＵＤＰ処理部４０８に入力したデータと同じエントリ番号を割り当てられた入力レジスタ４０６の記憶領域のデータを、ホストＣＰＵ２０３に入力する。また、ホストＣＰＵ２０３によって実行されるストリーム処理において必要な場合、ＴＣＰ／ＵＤＰ処理部４０８に入力したデータをホストＣＰＵ２０３に入力する（５２４）。
【０１９４】
ホストＣＰＵ２０３は、入力されたデータをメモリ２０４に格納することによって、内部状態を、新たな内部状態に更新する（５２５）。出力レジスタ制御部４１６が、出力レジスタ４０７のデータを、サーバ２０２から出力すると決定した場合に、入力レジスタ４０６に格納されたデータをホストＣＰＵ２０３に送ることによって、入力ネットワークのプロトコル処理においてエラーであると判定されたパケットのデータが内部状態に追加されることを防ぐことができる。また、これによって、サーバ２０２は、適切な内部状態を保持することができる。
【０１９５】
図４Ａに示す例のステップ５２１において、クエリ処理部４１３は、センサデータの値が許容範囲に含まれる場合、出力レジスタ４０７に正常であることを示すデータを格納し、センサデータの値が許容範囲に含まれない場合、センサデータの値及び機器停止コマンドを含むデータを、出力レジスタ４０７に格納する。
【０１９６】
図４Ａに示す例におけるステップ５２２において、出力レジスタ制御部４１６は、管理フラグ４１４が、入力ネットワークのプロトコル処理によってエラーがないと判定されたことを示す場合、機器６０１に対して機器停止コマンドを含むデータ（機器停止信号）又は正常であることを示すデータ（正常通知信号）を送信するため、出力レジスタ４０７のデータをＴＣＰ／ＵＤＰ処理部４０８に入力する。さらに、出力レジスタ制御部４１６は、ステップ５２３において、出力レジスタ４０７から取り出されたデータと同じエントリ番号を付与されたデータを、入力レジスタ４０６からホストＣＰＵ２０３へ転送する。
【０１９７】
ホストＣＰＵ２０３は、データを入力された場合、ストリーム処理の内部状態であるセンサ値の時系列データに、入力された値を加え、次のセンサデータの入力に備え、クエリ処理を行う。図４Ａに示す例において、ホストＣＰＵ２０３は、新たな上限値６０３及び下限値６０４を算出する。
【０１９８】
本実施例によれば、ストリーム処理を行う装置にデータが入力されてから、ストリーム処理の結果が出力されるまでのレスポンス時間を低減できる。具体的には、入力ネットワークプロトコル処理（ステップ５１９）と、データ抽出処理（ステップ５２０）及びクエリ処理５２１とが並行に行われることによって、図７に示すステップ５１６〜ステップ５２３の処理に必要な時間（レスポンス時間）が低減される。
【０１９９】
また、管理フラグ４１４によって、入力ネットワークのプロトコル処理の結果に従って、クエリ処理結果を出力するか否かを決定するため、ストリーム処理を正しく実行することが可能である。
【０２００】
なお、上述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。
【０２０１】
また、前述の各構成、機能、処理部、及び、処理手順等は、それらの一部又は全部を、プログラムによって実装されることによって実行されてもよい。各処理部等がプログラムによって実装された場合、各処理部の機能を実現するプログラム、及び、入力条件８０１等の情報は、メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、又は、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０２０２】
また、本実施例のサーバ２０２等の内部構成を示す図（特に図３）において、制御線及び情報線は説明上必要と考えられるものを示しており、製品として実装される制御線及び情報線の全てを示しているとは限らない。実際には、ほとんど全ての処理部が相互に接続されていると考えてもよい。
【符号の説明】
【０２０３】
２０１  ストリームアクセラレータ
２０２  サーバ
２０３  ホストＣＰＵ
２０４  メモリ
２０５  ＩＯハブ
２０６  ストリームプロセッサ
２０７  ＤＲＡＭ
２０８  入力ネットワークポート
２０９  出力ネットワークポート
３０１  組み込みＣＰＵ
３０２  ＭｅｍｏｒｙＩ／Ｆ
３０３  ＩＯバスＩ／Ｆ
３０４  ストリーム処理部
４０１  ＥｔｈｅｒＰＨＹ部
４０２  ＥｔｈｅｒＭＡＣ部
４０３  ＩＰ処理部
４０４  ＴＣＰ／ＵＤＰ処理部
４０５  データ抽出部
４０６  入力レジスタ
４０７  出力レジスタ
４０８  ＴＣＰ／ＵＤＰ処理部
４０９  ＩＰ処理部
４１０  ＥｔｈｅｒＭＡＣ部
４１１  ＥｔｈｅｒＰＨＹ部
４１２  一時レジスタ
４１３  クエリ処理部
４１４  管理フラグ
４１５  入力レジスタ制御部
４１６  出力レジスタ制御部
４１７  エントリ番号付与部
【図１】
2014050091.tif 000003
【図２】
2014050091.tif 000004
【図３】
2014050091.tif 000005
【図４Ａ】
2014050091.tif 000006
【図４Ｂ】
2014050091.tif 000007
【図５】
2014050091.tif 000008
【図６】
2014050091.tif 000009
【図７】
2014050091.tif 000010
【図８】
2014050091.tif 000011
【図９】
2014050091.tif 000012
【図１０】
2014050091.tif 000013
【図１１】
2014050091.tif 000014
【図１２】
2014050091.tif 000015