(57)【要約】【課題】プロセッサとプロセッサからオフロードされた処理を実行するハードウェアとの間でデータが消失されたことによる障害を検出すること。【解決手段】プロセッサ１は、受信部２、処理部３、送信部４、制御部５、カウンタ６、比較部７および検出部８を備える。制御部５は、処理部３から渡されたオフロード対象の処理要求データを送信部４へ送り、受信部２から渡された処理結果データを処理部３へ送る。カウンタ６は、制御部５が送信部４へ処理要求データを送った数と制御部５が受信部２から処理結果データを受け取った数との差分を求める。比較部７は、カウンタ６の値と予め設定された閾値とを比較する。検出部８は、比較部７での比較の結果、カウンタ６の値が閾値を超える場合に障害の発生を検出する。【選択図】図１
2011150481.tif 000002
【特許請求の範囲】
【請求項１】
データを受信する受信部と、
前記受信部が受信したデータの処理を実行する処理部と、
データを送信する送信部と、
前記処理部から渡された処理要求データを前記送信部へ送り、前記受信部から渡された処理結果データを前記処理部へ送る制御部と、
前記制御部が前記送信部へ前記処理要求データを送った数と前記制御部が前記受信部から前記処理結果データを受け取った数との差分を求める第１のカウンタと、
前記第１のカウンタの値と予め設定された閾値とを比較する第１の比較部と、
前記第１の比較部での比較の結果、前記第１のカウンタの値が前記閾値を超える場合に障害の発生を検出する検出部と、
を備えることを特徴とするプロセッサ。
【請求項２】
前記制御部が前記送信部へ前記処理要求データを送った数を数える第２のカウンタと、
前記制御部が前記受信部から前記処理結果データを受け取った数を数える第３のカウンタと、
一定時間を計るタイマと、
前記一定時間が経過するたびに前記第１のカウンタの値、前記第２のカウンタの値および前記第３のカウンタの値を保持する保持部と、
前記保持部に保持された前記第２のカウンタの値と、前記保持部に前記第２のカウンタの値が最後に保持されてから前記一定時間が経過した時点の前記第２のカウンタの値と、を比較する第２の比較部と、
前記保持部に保持された前記第３のカウンタの値と、前記保持部に前記第３のカウンタの値が最後に保持されてから前記一定時間が経過した時点の前記第３のカウンタの値と、を比較する第３の比較部と、
前記保持部に保持された前記第１のカウンタの値と、前記保持部に前記第１のカウンタの値が最後に保持されてから前記一定時間が経過した時点の前記第１のカウンタの値と、を比較し、かつ前記第１のカウンタの値と０とを比較する第４の比較部と、
を備え、
前記検出部は、前記第２の比較部での比較の結果、前記一定時間の間前記第２のカウンタの値が同じであり、かつ前記第３の比較部での比較の結果、前記一定時間の間前記第３のカウンタの値が同じであり、さらに前記第４の比較部での比較の結果、前記第１のカウンタの値が０でなく、前記一定時間の間前記第１のカウンタの値が同じである場合に障害の発生を検出することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記制御部が前記送信部へ送る前記処理要求データにシーケンス番号を付与する付与部と、
前記制御部が前記受信部から受け取った前記処理結果データからシーケンス番号を抽出する抽出部と、
前記抽出部が抽出したシーケンス番号と期待値とを比較する第５の比較部と、
を備え、
前記検出部は、前記第５の比較部での比較の結果、前記抽出部が抽出したシーケンス番号が前記期待値と異なる場合に障害の発生を検出することを特徴とする請求項２に記載のプロセッサ。
【請求項４】
プロセッサから該プロセッサに接続されたハードウェアへ処理要求データを送った数と前記プロセッサが前記ハードウェアから処理結果データを受け取った数との差分を求めるステップと、
前記差分の値と予め設定された閾値とを比較するステップと、
前記差分の値が前記閾値を超える場合に障害の発生を検出するステップと、
を含むことを特徴とする障害検出方法。
【請求項５】
前記プロセッサが前記ハードウェアへ前記処理要求データを送った数が一定時間同じであり、かつ前記プロセッサが前記ハードウェアから前記処理結果データを受け取った数が前記一定時間同じであり、さらに前記差分の値が０でなく、前記差分の値が一定時間同じである場合に障害の発生を検出するステップ、を含むことを特徴とする請求項４に記載の障害検出方法。
【請求項６】
前記プロセッサが前記ハードウェアへ送る前記処理要求データにシーケンス番号を付与するステップと、
前記プロセッサが前記ハードウェアから受け取った前記処理結果データからシーケンス番号を抽出するステップと、
抽出した前記シーケンス番号と期待値とを比較するステップと、
抽出した前記シーケンス番号が前記期待値と異なる場合に障害の発生を検出するステップと、
を含むことを特徴とする請求項５に記載の障害検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プロセッサおよび障害検出方法に関する。
【背景技術】
【０００２】
従来、コンピュータシステムの効率や速度やスループットを向上させる方法として、プロセッサが、実行するべき処理を、プロセッサに接続されたハードウェアにオフロードして実行させる方法が知られている。オフロードされる処理として、例えばＴＣＰ（伝送制御プロトコル）／ＩＰ（インターネットプロトコル）チェックサム計算や、ＴＣＰセグメンテーションや、セキュアインターネットプロトコル（ＩＰＳＥＣ）暗号化および復号などの処理がある。プロセッサからオフロードされた処理を実行するハードウェアをオフロードエンジンと呼ぶことがある。また、プロセッサ中の複数のコアで並列処理を行うマルチコアプロセッサが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−３３３０７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
プロセッサからオフロードエンジンに処理をオフロードする構成において、プロセッサからオフロードエンジンへ処理要求を送信し、オフロードエンジンから処理結果を受信するまでの間に、オフロードされた処理のデータが消失してしまうと、問題が発生する。例えば、ネットワークプロセッサとオフロードエンジンとがイーサネット（登録商標）によって接続されている場合、ネットワークプロセッサは、ネットワークからＩＰパケットを受信し、オフロードエンジンへ処理要求パケットを送信する。オフロードエンジンは、処理要求パケットに対して所定の処理を行い、ネットワークプロセッサへ処理結果パケットを送信する。ネットワークプロセッサは、処理結果パケットを受信し、ネットワークへＩＰパケットを送信する。この一連の流れにおいて、パケットの廃棄が発生すると、ネットワークプロセッサからネットワークへＩＰパケットの送信ができなくなるため、通信断となってしまう。特に、処理要求パケットや処理結果パケットが廃棄されてしまった場合に障害を検出できないと、警報などが通知されないサイレント故障による通信断が発生してしまう。
【０００５】
そこで、プロセッサとオフロードエンジンとの間で処理要求パケットや処理結果パケットが廃棄されたことを検出することが重要である。例えば、プロセッサは、オフロードエンジンへ処理要求パケットを送信するたびに時間を計り、一定時間経過してもオフロードエンジンから処理結果パケットを受信しない場合に、処理要求または処理結果のパケットが廃棄されたことを検出することができる。しかしながら、処理要求パケットごとに時間を計るタイマが必要になるため、プロセッサの負荷が増大する、という問題点がある。
【０００６】
あるいは、プロセッサとオフロードエンジンとの間でＴＣＰコネクションを確立し、処理要求パケットや処理結果パケットの到達を確認し、到達を確認できない場合に処理要求パケットや処理結果パケットを再び送信するようにしてもよい。処理要求パケットや処理結果パケットを所定回数送信しても送信したパケットの到達を確認することができない場合には、処理要求または処理結果のパケットが廃棄されたことを検出することができる。しかしながら、プロセッサおよびオフロードエンジンの両方にＴＣＰプロトコルを実装し、オフロードエンジンにＴＣＰを制御するプロセッサまたは専用ハードウェアが必要になる、という問題点がある。
【０００７】
プロセッサとプロセッサからオフロードされた処理を実行するハードウェアとの間でデータが消失されたことによる障害を検出することができるプロセッサおよび障害検出方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
プロセッサは、受信部、処理部、送信部、制御部、第１のカウンタ、第１の比較部および検出部を備える。受信部は、データを受信する。処理部は、受信部が受信したデータの処理を実行する。送信部は、データを送信する。制御部は、処理部から渡された処理要求データを送信部へ送り、受信部から渡された処理結果データを処理部へ送る。第１のカウンタは、制御部が送信部へ処理要求データを送った数と制御部が受信部から処理結果データを受け取った数との差分を求める。第１の比較部は、第１のカウンタの値と予め設定された閾値とを比較する。検出部は、第１の比較部での比較の結果、第１のカウンタの値が閾値を超える場合に障害の発生を検出する。障害検出方法は、プロセッサにハードウェアが接続された構成において、三つのステップを含む。プロセッサからハードウェアへ処理要求データを送った数とプロセッサがハードウェアから処理結果データを受け取った数との差分を求めるステップがある。求めた差分の値と予め設定された閾値とを比較するステップがある。差分の値が閾値を超える場合に障害の発生を検出するステップがある。
【発明の効果】
【０００９】
このプロセッサおよび障害検出方法によれば、プロセッサとプロセッサからオフロードされた処理を実行するハードウェアとの間でデータが消失されたことによる障害を検出することができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】実施例１にかかるプロセッサを示すブロック図である。
【図２】実施例１にかかる障害検出方法を示すフローチャートである。
【図３】実施例２にかかるプロセッサを示すブロック図である。
【図４】実施例２にかかるプロセッサのオフロード制御部を示すブロック図である。
【図５】実施例２における処理要求パケットの一例を示す説明図である。
【図６】実施例２における処理結果パケットの一例を示す説明図である。
【図７】実施例２にかかるプロセッサの動作を示すフローチャートである。
【図８】実施例２にかかるプロセッサの動作を示すフローチャートである。
【図９】実施例２にかかるプロセッサの動作を示すフローチャートである。
【図１０】実施例２にかかるプロセッサの動作を示すフローチャートである。
【図１１】実施例２にかかるプロセッサの動作を示すフローチャートである。
【図１２】実施例２にかかる障害検出方法を説明するフローチャートである。
【図１３】実施例２にかかる障害検出方法を説明するフローチャートである。
【図１４】実施例２にかかる障害検出方法を説明するフローチャートである。
【図１５】実施例２にかかる障害検出方法を説明するフローチャートである。
【図１６】実施例２にかかる障害検出方法を説明するフローチャートである。
【図１７】実施例２にかかる障害検出方法を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、このプロセッサおよび障害検出方法の好適な実施の形態を詳細に説明する。プロセッサおよび障害検出方法は、プロセッサにハードウェアが接続された構成において、プロセッサからハードウェアへ処理要求データを送った数とプロセッサがハードウェアから処理結果データを受け取った数との差分の値が、予め設定された閾値を超える場合に障害の発生を検出する。
【００１２】
（実施例１）
・プロセッサの説明
図１は、実施例１にかかるプロセッサを示すブロック図である。図１に示すように、プロセッサ１は、受信部２、処理部３、送信部４、制御部５、第１のカウンタとしてのカウンタ６、第１の比較部としての比較部７、および検出部８を備える。受信部２は、データを受信する。処理部３は、受信部２が受信したデータの処理を実行する。送信部４は、データを送信する。制御部５は、処理部３から渡された処理要求データを送信部４へ送る。制御部５は、受信部２から渡された処理結果データを処理部３へ送る。カウンタ６は、制御部５が送信部４へ処理要求データを送った数と制御部５が受信部２から処理結果データを受け取った数との差分を求める。比較部７は、カウンタ６の値（処理要求データを送った数と処理結果データを受け取った数との差分の値）と予め設定された閾値とを比較する。検出部８は、比較部７での比較の結果、カウンタ６の値が閾値を超える場合に障害の発生を検出する。
【００１３】
カウンタ６は、例えば処理要求データを送った数と処理結果データを受け取った数との差分を求めるプログラムを制御部５で実行することにより実現される。比較部７は、例えばカウンタ６の値と閾値とを比較するプログラムを制御部５で実行することにより実現される。検出部８は、例えば比較部７での比較の結果に基づいて障害の発生を検出するプログラムを制御部５で実行することにより実現される。
【００１４】
・障害検出方法の説明
図２は、実施例１にかかる障害検出方法を示すフローチャートである。プロセッサにはハードウェアが接続されている。このハードウェアは、プロセッサから送られてきた処理要求に基づいて処理を実行し、その結果を処理結果としてプロセッサに返す。図２に示すように、障害検出処理が開始されると、プロセッサは、まず、プロセッサからハードウェアへ処理要求データを送った数とプロセッサがハードウェアから処理結果データを受け取った数との差分を求める（ステップＳ１）。次いで、プロセッサは、求めた差分の値と予め設定された閾値とを比較し、差分の値が閾値よりも小さいか否かを判定する（ステップＳ２）。差分の値が閾値よりも小さくない場合（ステップＳ２：Ｎｏ）、プロセッサは、障害が発生していないと判断し、ステップＳ１へ戻る。差分の値が閾値よりも小さい場合（ステップＳ２：Ｙｅｓ）、プロセッサは、障害が発生していると判断し、障害を検出する（ステップＳ３）。プロセッサが障害を検出した場合には、予め設定されている障害処理が行われる。
【００１５】
実施例１によれば、障害が発生すると、ハードウェアへ送った処理要求データに対してハードウェアから処理結果データが返されてこなくなる。従って、処理要求データを送った数と処理結果データを受け取った数との差分の値が大きくなり、やがて閾値を超えることになる。障害が発生していないときには、ハードウェアへ送った処理要求データに対してハードウェアから処理結果データが返されてくるので、処理要求データを送った数と処理結果データを受け取った数との差分の値は、閾値以下となる。従って、処理要求データを送った数と処理結果データを受け取った数との差分の値が閾値を超えたか否かを調べることによって、プロセッサは障害の発生を検出することができる。
【００１６】
（実施例２）
実施例２は、実施例１にかかるプロセッサおよび障害検出方法を、ネットワークに接続される装置に適用した例である。ネットワークに接続される装置の一例として、例えばゲートウエイ装置が挙げられる。プロセッサの一例として、例えばＩＰパケットを処理するネットワークプロセッサが挙げられる。ネットワークプロセッサの一例として、例えばＣＰＵタイプのマルチコア・ネットワークプロセッサが挙げられる。実施例２では、ＣＰＵタイプのマルチコア・ネットワークプロセッサからオフロードエンジンに処理の一部をオフロードして実行させる例について説明する。オフロードエンジンに実行させる処理の一例として、例えばパケット処理において、データを暗号化する処理、暗号化されたデータを復号する処理、パケットの中身を検査する処理（ＤＰＩ：Ｄｅｅｐ  Ｐａｃｋｅｔ  Ｉｎｓｐｅｃｔｉｏｎ、ディープパケットインスペクション）、データを圧縮する処理、圧縮されたデータを伸張する非圧縮処理などの、ソフトウェアでの処理よりもハードウェアでの処理に適した処理が挙げられる。
【００１７】
・プロセッサの説明
図３は、実施例２にかかるプロセッサを示すブロック図である。図３に示すように、プロセッサ１１は、例えばＣＰＵタイプのマルチコア・ネットワークプロセッサである。プロセッサ１１は、例えば８個のコア（＃０〜＃７）を備えている。プロセッサ１１は、受信部としてのパケット受信部１２、処理部としてのＩＰパケット処理部１３、送信部としてのパケット送信部１４および制御部としてのオフロード制御部１５を備えている。プロセッサ１１は、パケット受信部１２およびパケット送信部１４と外部インタフェースである物理層（ＰＨＹ：ｐｈｙｓｉｃａｌ  ｌａｙｅｒ）２１との間でインタフェースとして動作する媒体アクセス制御（ＭＡＣ：Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）層１６を有する。パケット受信部１２はコア＃０に割り当てられている。ＩＰパケット処理部１３は例えばコア＃３からコア＃７までに割り当てられている。パケット送信部１４はコア＃２に割り当てられている。オフロード制御部１５はコア＃１に割り当てられている。
【００１８】
オフロードエンジン２２は、プロセッサ１１からオフロードされた処理を実行する処理部２３、および処理部２３と物理層との間でインタフェースとして動作する媒体アクセス制御（ＭＡＣ）層２４を有する。プロセッサ１１、物理層２１およびオフロードエンジン２２は、レイヤ２スイッチ２５に接続されている。レイヤ２スイッチ２５は、プロセッサ１１と物理層２１およびオフロードエンジン２２との間でパケットの送り先を切り替える。一例として、オフロードエンジン２２内の伝送路、またはプロセッサ１１とオフロードエンジン２２との間の伝送路がイーサネットであるとする。これらの伝送路は、イーサネットに限らない。
【００１９】
図３に示す構成において、オフロードの処理は例えば以下の手順で行われる。まず、プロセッサ１１のパケット受信部１２が物理層２１、レイヤ２スイッチ２５およびプロセッサ１１の媒体アクセス制御層１６を介してＩＰパケットを受信する。パケット受信部１２は、受信したＩＰパケットをＩＰパケット処理部１３へ渡す。ＩＰパケット処理部１３は、受け取ったＩＰパケットがＩＰパケット処理部１３で処理する対象である場合、ＩＰパケット処理部１３でＩＰパケットを処理してパケット送信部１４へ渡す。パケット送信部１４は、受け取ったＩＰパケットをプロセッサ１１の媒体アクセス制御層１６を介して送信する。送信されたＩＰパケットは、レイヤ２スイッチ２５を介して物理層２１から送信される。
【００２０】
一方、ＩＰパケット処理部１３は、パケット受信部１２から受け取ったＩＰパケットがオフロード対象である場合、オフロード対象のＩＰパケットをオフロード制御部１５へ渡す。オフロード制御部１５は、処理要求パケットの処理を行い、処理要求パケットをパケット送信部１４へ渡す。パケット送信部１４は、受け取った処理要求パケットをプロセッサ１１の媒体アクセス制御層１６を介して送信する。送信された処理要求パケットは、レイヤ２スイッチ２５を介してオフロードエンジン２２に渡される。オフロードエンジン２２は、媒体アクセス制御層２４を介して処理要求パケットを受け取り、処理部２３で処理要求パケットを処理する。オフロードエンジン２２は、処理部２３での処理が終了すると、処理結果パケットをオフロードエンジン２２の媒体アクセス制御層２４を介してレイヤ２スイッチ２５へ送信する。
【００２１】
プロセッサ１１のパケット受信部１２は、プロセッサ１１の媒体アクセス制御層１６を介して処理結果パケットを受信する。パケット受信部１２は、受信した処理結果パケットをオフロード制御部１５へ渡す。オフロード制御部１５は、処理結果パケットの処理を行い、処理結果パケットをＩＰパケット処理部１３へ渡す。ＩＰパケット処理部１３は、処理結果パケットをＩＰパケットとしてパケット送信部１４へ渡す。パケット送信部１４は、受け取ったＩＰパケットをプロセッサ１１の媒体アクセス制御層１６を介して送信する。送信されたＩＰパケットは、レイヤ２スイッチ２５を介して物理層２１から送信される。このように、処理要求パケットの処理および処理結果パケットの処理は、オフロード制御部１５で行われる。
【００２２】
・オフロード制御部の説明
図４は、実施例２にかかるプロセッサのオフロード制御部を示すブロック図である。図４に示すように、オフロード制御部１５は、第１のカウンタとしてのアップダウンカウンタ３１、第１の比較部３２および検出部３３を備えている。アップダウンカウンタ３１の値は、オフロード制御部１５がパケット送信部１４へ処理要求パケットを送信するたびに１増え、オフロード制御部１５がパケット受信部１２から処理結果パケットを受信するたびに１減る。従って、アップダウンカウンタ３１は、オフロード制御部１５が処理要求パケットを送信した数とオフロード制御部１５が処理結果パケットを受信した数との差分を求める。第１の比較部３２は、アップダウンカウンタ３１の値と予め設定された閾値Ａとを比較する。検出部３３は、第１の比較部３２での比較の結果、アップダウンカウンタ３１の値が閾値Ａを超えると障害の発生を検出する。
【００２３】
閾値Ａは、オフロード制御部１５が処理要求パケットを送信してからそれに対応する処理結果パケットを受信するまでの間にパケット受信部１２が受信するＩＰパケットの数に基づいて決まる値である。つまり、プロセッサ１１は、オフロードエンジン２２へ処理要求パケットを送信した後、それに対応する処理結果パケットを受信するまでの間もＩＰパケットを受信する。そして、プロセッサ１１は、新たに受信したＩＰパケットのうちオフロード対象のものについてはオフロードエンジン２２へ処理要求パケットを送信する。従って、オフロードエンジン２２が一つの処理要求パケットに対する処理を実行している間も、プロセッサ１１ではアップダウンカウンタ３１の値が増えていく。障害が発生していなければ、オフロードエンジン２２から処理結果パケットが返されてくるので、アップダウンカウンタ３１の値が１減る。従って、アップダウンカウンタ３１の値が増える程度と減る程度とで釣り合いが取れるので、アップダウンカウンタ３１の値がある程度の値よりも大きくなることはない。閾値Ａは、オフロードエンジン２２が１回の処理を実行している間にプロセッサ１１が新たに受信するＩＰパケットの数に基づいて、障害が発生していない場合にアップダウンカウンタ３１の値が超えることのない値に設定される。
【００２４】
また、オフロード制御部１５は、第２のカウンタとしての送信数カウンタ３４、第３のカウンタとしての受信数カウンタ３５、タイマ３６、保持部としてのメモリ３７、第２の比較部３８、第３の比較部３９および第４の比較部４０を備えている。送信数カウンタ３４の値は、オフロード制御部１５がパケット送信部１４へ処理要求パケットを送信すると１増える。受信数カウンタ３５の値は、オフロード制御部１５がパケット受信部１２から処理結果パケットを受信すると１増える。タイマ３６は、一定時間Ｔを計り、一定時間Ｔごとに割り込みを発生する。メモリ３７は、タイマ３６による割り込みが発生すると、アップダウンカウンタ３１の値、送信数カウンタ３４の値および受信数カウンタ３５の値を記憶する。
【００２５】
第２の比較部３８は、タイマ３６による割り込みが発生すると、その時点での送信数カウンタ３４の値とメモリ３７に記憶されている送信数カウンタ３４の値とを比較する。第３の比較部３９は、タイマ３６による割り込みが発生すると、その時点での受信数カウンタ３５の値とメモリ３７に記憶されている受信数カウンタ３５の値とを比較する。第４の比較部４０は、タイマ３６による割り込みが発生すると、その時点でのアップダウンカウンタ３１の値と０とを比較する。第４の比較部４０は、タイマ３６による割り込みが発生すると、その時点でのアップダウンカウンタ３１の値とメモリ３７に記憶されているアップダウンカウンタ３１の値とを比較する。
【００２６】
タイマ３６による割り込みの発生時点においてメモリ３７に記憶されている送信数カウンタ３４の値は、タイマ３６による割り込みの発生時点から時間Ｔだけ遡った時点での送信数カウンタ３４の値である。従って、第２の比較部３８は、一定時間Ｔの開始時点と終了時点とで送信数カウンタ３４の値を比較していることになる。つまり、一定時間Ｔの期間において送信数カウンタ３４の値が変化したか否かを監視していることになる。第３の比較部３９についても同様であり、一定時間Ｔの期間において受信数カウンタ３５の値が変化したか否かを監視していることになる。第４の比較部４０についても同様であり、一定時間Ｔの期間においてアップダウンカウンタ３１の値が変化したか否かを監視し、さらにアップダウンカウンタ３１の値が０であるか否かを監視していることになる。
【００２７】
検出部３３は、第２の比較部３８、第３の比較部３９および第４の比較部４０での比較の結果、一定時間Ｔの間に、送信数カウンタ３４の値に変化がなく、かつ受信数カウンタ３５の値に変化がなく、さらにアップダウンカウンタ３１の値が０以外で変化がない場合に障害の発生を検出する。障害が発生していない状態で、かつプロセッサ１１がＩＰパケットを受信しない状態が続くと、オフロード制御部１５がオフロードエンジン２２へ処理要求パケットを送信しないので、送信数カウンタ３４の値は変化しない。また、既にオフロード制御部１５がオフロードエンジン２２へ送信した全ての処理要求パケットに対して処理結果パケットを受信している場合、受信数カウンタ３５の値は変化しない。送信数カウンタ３４の値および受信数カウンタ３５の値がそれぞれ一定であれば、アップダウンカウンタ３１の値も変化しない。また、全ての処理要求パケットに対する処理結果パケットを受信しているので、アップダウンカウンタ３１の値は０になる。従って、一定時間Ｔの期間において、送信数カウンタ３４の値および受信数カウンタ３５の値が変化せず、かつアップダウンカウンタ３１の値も変化していないにもかかわらず、アップダウンカウンタ３１の値が０にならない場合には、障害が発生していることになる。
【００２８】
また、オフロード制御部１５は、付与部４１、抽出部４２、メモリ４３、加算部４４および第５の比較部４５を備えている。付与部４１は、パケット送信部１４へ送信する処理要求パケットにシーケンス番号を付与する。抽出部４２は、パケット受信部１２から受信した処理結果パケットからシーケンス番号を抽出する。オフロードエンジン２２は、プロセッサ１１から受信した処理要求パケットからシーケンス番号を抽出し、そのシーケンス番号をそのまま処理結果パケットに付与してプロセッサ１１へ送り返すとする。メモリ４３は、オフロード制御部１５が処理結果パケットを受信するたびに加算部４４から渡される値を記憶する。加算部４４は、オフロード制御部１５が処理結果パケットを受信するたびにメモリ４３に記憶されている値に１を加えてシーケンス番号の期待値を生成する。第５の比較部４５は、抽出部４２が抽出したシーケンス番号と加算部４４が生成した期待値とを比較する。検出部３３は、第５の比較部４４での比較の結果、抽出部４２が抽出したシーケンス番号が期待値と異なる場合に障害の発生を検出する。
【００２９】
障害が発生していない場合には、加算部４４で生成されたシーケンス番号の期待値は、前回オフロード制御部１５がパケット受信部１２から受け取った処理結果パケットのシーケンス番号の次の番号となるはずである。従って、障害が発生していない状態のときには、オフロード制御部１５が処理結果パケットを受信するたびにシーケンス番号の期待値を１ずつ大きくしていけば、抽出部４２が抽出した実際のシーケンス番号と期待値とが一致することになる。オフロード制御部１５が送信した処理要求パケットやオフロードエンジン２２が送信した処理結果パケットが、相手が受信する前に消失すると、消失した分の１がシーケンス番号の期待値に加算されないので、抽出部４２が抽出したシーケンス番号が期待値よりも大きくなる。従って、障害の発生を検出することができる。なお、シーケンス番号の期待値を、前回抽出部４２が実際に処理結果パケットから抽出したシーケンス番号に１を加えた値としてもよい。
【００３０】
アップダウンカウンタ３１は、例えば処理要求パケットを送信すると１増え、処理結果パケットを受信すると１減るプログラムをオフロード制御部１５で実行することにより実現される。なお、アップダウンカウンタ３１を、送信数カウンタ３４の値から受信数カウンタ３５の値を減算する構成としてもよい。第１の比較部３２は、アップダウンカウンタ３１の値と閾値Ａとを比較するプログラムをオフロード制御部１５で実行することにより実現される。検出部３３は、第１の比較部３２での比較結果、第２の比較部３８での比較結果、第３の比較部３９での比較結果、第４の比較部４０での比較結果および第５の比較部４５での比較結果に基づいて障害の発生を検出するプログラムをオフロード制御部１５で実行することにより実現される。
【００３１】
送信数カウンタ３４は、処理要求パケットを送信すると１増えるプログラムをオフロード制御部１５で実行することにより実現される。受信数カウンタ３５は、処理結果パケットを受信すると１増えるプログラムをオフロード制御部１５で実行することにより実現される。タイマ３６は、一定時間Ｔを計るプログラムをオフロード制御部１５で実行することにより実現される。第２の比較部３８は、送信数カウンタ３４の値とメモリ３７に記憶されている送信数カウンタ３４の値とを比較するプログラムをオフロード制御部１５で実行することにより実現される。第３の比較部３９は、受信数カウンタ３５の値とメモリ３７に記憶されている受信数カウンタ３５の値とを比較するプログラムをオフロード制御部１５で実行することにより実現される。第４の比較部４０は、アップダウンカウンタ３１の値と０とを比較し、かつアップダウンカウンタ３１の値とメモリ３７に記憶されているアップダウンカウンタ３１の値とを比較するプログラムをオフロード制御部１５で実行することにより実現される。
【００３２】
付与部４１は、処理要求パケットにシーケンス番号を付与するプログラムをオフロード制御部１５で実行することにより実現される。抽出部４２は、処理結果パケットからシーケンス番号を抽出するプログラムをオフロード制御部１５で実行することにより実現される。加算部４４は、シーケンス番号の期待値を生成するプログラムをオフロード制御部１５で実行することにより実現される。第５の比較部４５は、抽出したシーケンス番号とシーケンス番号の期待値とを比較するプログラムをオフロード制御部１５で実行することにより実現される。
【００３３】
・処理要求パケットの説明
図５は、実施例２における処理要求パケットの一例を示す説明図である。図５に示すように、処理要求パケット５１では、例えばＭＡＣヘッダのイーサタイプ領域５２に、イーサタイプの代わりに、シーケンス番号が格納される。なお、処理要求パケット５１において、イーサタイプ領域５２以外の領域にシーケンス番号を格納してもよい。図５において、ＭＡＣ１は、オフロードエンジン２２のＭＡＣアドレスであり、ＭＡＣ２は、プロセッサ１１のＭＡＣアドレスである（図６においても同様）。
【００３４】
・処理結果パケットの説明
図６は、実施例２における処理結果パケットの一例を示す説明図である。図６に示すように、処理結果パケット５６では、例えばＭＡＣヘッダのイーサタイプ領域５７に、イーサタイプの代わりに、シーケンス番号が格納される。なお、処理結果パケット５６において、イーサタイプ領域５７以外の領域にシーケンス番号を格納してもよい。処理要求パケット５１および処理結果パケット５６は、ＭＡＣアドレスに基づいてレイヤ２スイッチ２５がスイッチングすることによって、それぞれの相手先に到達する。
【００３５】
・プロセッサの動作の説明
図７〜図１１は、実施例２にかかるプロセッサの動作を示すフローチャートである。図７に示すように、物理層２１で受信されたＩＰパケットは、レイヤ２スイッチ２５を通ってプロセッサ１１に入力する。パケット受信部１２は、ＩＰパケットの受信処理を行い、そのＩＰパケットが処理結果パケットであるか否かを判定する（ステップＳ１１）。処理結果パケットでない場合（ステップＳ１１：Ｎｏ）、パケット受信部１２は、ＩＰパケットをＩＰパケット処理部１３に振り分ける。
【００３６】
次いで、図８に示すように、ＩＰパケット処理部１３は、ＩＰパケット処理を開始し（ステップＳ１２）、このＩＰパケットの機能Ｘの処理をオフロードするか否かを判定する（ステップＳ１３）。機能Ｘの処理をオフロードしない場合（ステップＳ１３：Ｎｏ）、ＩＰパケット処理部１３は、機能Ｘの処理を開始し（ステップＳ１４）、機能Ｘの処理を終了する（ステップＳ１５）。そして、ＩＰパケット処理部１３は、ＩＰパケット処理を終了し（ステップＳ１６）、パケット送信部１４にＩＰパケットの送信を依頼する。
【００３７】
次いで、図９に示すように、パケット送信部１４は、パケット送信処理を行い（ステップＳ１７）、処理要求パケットを送信するのか否かを判定する（ステップＳ１８）。ここでは、送信するのは処理要求パケットでないので（ステップＳ１８：Ｎｏ）、パケット送信部１４は、ＩＰパケットをレイヤ２スイッチ２５を介して物理層２１へ送信する（ステップＳ１９）。
【００３８】
図８のステップＳ１３において、機能Ｘの処理をオフロードする場合（ステップＳ１３：Ｙｅｓ）、ＩＰパケット処理部１３は、オフロード制御部１５にオフロード処理要求を依頼する。
【００３９】
次いで、図１０に示すように、オフロード制御部１５は、オフロード処理要求の処理を開始し（ステップＳ２０）、処理要求パケットを生成する（ステップＳ２１）。オフロード制御部１５は、付与部４１により処理要求パケットにシーケンス番号を付与する（ステップＳ２２）。オフロード制御部１５は、アップダウンカウンタ３１の値に１を加算し（ステップＳ２３）、第１の比較部３２によりアップダウンカウンタ３１の値が閾値Ａよりも大きいか否かを判定する（ステップＳ２４）。アップダウンカウンタ３１の値が閾値Ａよりも大きい場合（ステップＳ２４：Ｙｅｓ）、オフロード制御部１５は、検出部３３により障害の発生を検出し、障害処理へ移行する（ステップＳ２７）。
【００４０】
アップダウンカウンタ３１の値が閾値Ａよりも大きくない場合（ステップＳ２４：Ｎｏ）、オフロード制御部１５は、送信数カウンタ３４の値に１を加算する（ステップＳ２５）。そして、オフロード制御部１５は、オフロード処理要求の処理を終了し（ステップＳ２６）、パケット送信部１４に処理要求パケットの送信を依頼する。
【００４１】
次いで、図９に示すように、パケット送信部１４は、パケット送信処理を行い（ステップＳ１７）、処理要求パケットを送信するのか否かを判定する（ステップＳ１８）。ここでは、送信するのが処理要求パケットであるので（ステップＳ１８：Ｙｅｓ）、パケット送信部１４は、処理要求パケットをレイヤ２スイッチ２５を介してオフロードエンジン２２へ送信する（ステップＳ２８）。
【００４２】
一方、図７のステップＳ１１において、ＩＰパケットが処理結果パケットである場合（ステップＳ１１：Ｙｅｓ）、パケット受信部１２は、処理結果パケットをオフロード制御部１５に振り分ける。処理結果パケットには、オフロードエンジン２２で処理要求パケットと同じシーケンス番号が付与されている。
【００４３】
次いで、図１１に示すように、オフロード制御部１５は、オフロード処理結果の処理を開始し（ステップＳ２９）、抽出部４２により処理結果パケットのシーケンス番号を抽出しチェックする（ステップＳ３０）。そして、オフロード制御部１５は、第５の比較部４５によりシーケンス番号と期待値とを比較し、シーケンス番号が異常であるか否かを判定する（ステップＳ３１）。シーケンス番号が異常である場合（ステップＳ３１：Ｙｅｓ）、オフロード制御部１５は、検出部３３により障害の発生を検出し、障害処理へ移行する（ステップＳ３６）。
【００４４】
シーケンス番号が正常である場合（ステップＳ３１：Ｎｏ）、オフロード制御部１５は、アップダウンカウンタ３１の値から１を減算し（ステップＳ３２）、第１の比較部３２によりアップダウンカウンタ３１の値が閾値Ａよりも大きいか否かを判定する（ステップＳ３３）。アップダウンカウンタ３１の値が閾値Ａよりも大きい場合（ステップＳ３３：Ｙｅｓ）、オフロード制御部１５は、検出部３３により障害の発生を検出し、障害処理へ移行する（ステップＳ３６）。
【００４５】
アップダウンカウンタ３１の値が閾値Ａよりも大きくない場合（ステップＳ３３：Ｎｏ）、オフロード制御部１５は、受信数カウンタ３５の値に１を加算する（ステップＳ３４）。そして、オフロード制御部１５は、オフロード処理結果の処理を終了し（ステップＳ３５）、ＩＰパケット処理部１３に処理結果を送信する。
【００４６】
次いで、図８に示すように、ＩＰパケット処理部１３は、ＩＰパケット処理を再開し、機能Ｘの処理を終了する（ステップＳ１５）。そして、ＩＰパケット処理部１３は、ＩＰパケット処理を終了し（ステップＳ１６）、パケット送信部１４にＩＰパケットの送信を依頼する。これ以降は、図９のステップＳ１７、ステップＳ１８およびステップＳ１９と同様である。上述した一連の処理の間に、オフロード制御部１５は、一定時間Ｔの間、送信数カウンタ３４の値、受信数カウンタ３５の値およびアップダウンカウンタ３１の値のいずれにも変化がなく、かつアップダウンカウンタ３１の値が０でない場合に、検出部３３により障害の発生を検出し、障害処理へ移行する。
【００４７】
・アップダウンカウンタによる障害検出方法の説明
図１２および図１３は、実施例２にかかるアップダウンカウンタによる障害検出方法を説明するフローチャートである。以下の説明および図面において、アップダウンカウンタ３１の値をＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔと表記する。送信数カウンタ３４の値をＳｎｄＲｅｑＰｋｔ＿Ｃｏｕｎｔと表記する。受信数カウンタ３５の値をＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔと表記する。
【００４８】
図１２に示すように、ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔによる障害検出方法では、まず、オフロード制御部１５は、オフロード処理通知を受け取るまで待機する（ステップＳ４１：Ｎｏ）。オフロード制御部１５は、オフロード処理通知を受け取ると（ステップＳ４１：Ｙｅｓ）、その処理が処理結果パケットの処理であるか否かを判定する（ステップＳ４２）。
【００４９】
処理結果パケットの処理である場合（ステップＳ４２：Ｙｅｓ）、オフロード制御部１５は、メモリからＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔを読み込む（ステップＳ４３）。ここで、メモリからＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔを読み込む、としているのは、プログラムの処理によってメモリに格納されている値に対して１を加算したり１を減算したりすることによってアップダウンカウンタ３１が実現されているからである。なお、ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔを記憶しているメモリは、図４で省略されている。オフロード制御部１５は、読み込んだＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔから１を減算する（ステップＳ４４）。次いで、オフロード制御部１５は、第１の比較部３２によりＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔが閾値Ａよりも小さいか否かを判定する（ステップＳ４５）。
【００５０】
ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔが閾値Ａよりも小さくない場合（ステップＳ４５：Ｎｏ）、オフロード制御部１５は障害を検出し、処理を終了する。ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔが閾値Ａよりも小さい場合（ステップＳ４５：Ｙｅｓ）、オフロード制御部１５は、ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔをメモリに書き込む（ステップＳ４６）。次いで、オフロード制御部１５は、メモリからＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔを読み込む（ステップＳ４７）。ここで、メモリからＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔを読み込む、としているのは、アップダウンカウンタ３１の場合と同様に、受信数カウンタ３５がプログラムの処理によって実現されているからである。なお、ＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔを記憶しているメモリは、図４で省略されている。オフロード制御部１５は、読み込んだＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔに１を加算し（ステップＳ４８）、ＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔをメモリに書き込む（ステップＳ４９）。そして、最初に戻り、ステップＳ４１でオフロード処理通知を受け取るまで待機する。
【００５１】
一方、ステップＳ４２で、受け取ったオフロード処理通知の処理が処理結果パケットの処理でない場合（ステップＳ４２：Ｎｏ）、図１３に示すように、オフロード制御部１５は、メモリからＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔを読み込む（ステップＳ５０）。オフロード制御部１５は、読み込んだＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔに１を加算する（ステップＳ５１）。次いで、オフロード制御部１５は、第１の比較部３２によりＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔが閾値Ａよりも小さいか否かを判定する（ステップＳ５２）。
【００５２】
ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔが閾値Ａよりも小さくない場合（ステップＳ５２：Ｎｏ）、オフロード制御部１５は障害を検出し、処理を終了する。ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔが閾値Ａよりも小さい場合（ステップＳ５２：Ｙｅｓ）、オフロード制御部１５は、ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔをメモリに書き込む（ステップＳ５３）。次いで、オフロード制御部１５は、メモリからＳｎｄＲｅｑＰｋｔ＿Ｃｏｕｎｔを読み込む（ステップＳ５４）。ここで、メモリからＳｎｄＲｅｑＰｋｔ＿Ｃｏｕｎｔを読み込む、としているのは、アップダウンカウンタ３１の場合と同様に、送信数カウンタ３４がプログラムの処理によって実現されているからである。なお、ＳｎｄＲｅｑＰｋｔ＿Ｃｏｕｎｔを記憶しているメモリは、図４で省略されている。オフロード制御部１５は、読み込んだＳｎｄＲｅｑＰｋｔ＿Ｃｏｕｎｔに１を加算し（ステップＳ５５）、ＳｎｄＲｅｑＰｋｔ＿Ｃｏｕｎｔをメモリに書き込む（ステップＳ５６）。そして、最初に戻り、ステップＳ４１でオフロード処理通知を受け取るまで待機する。
【００５３】
・送信数カウンタおよび受信数カウンタによる障害検出方法の説明
図１４および図１５は、実施例２にかかる送信数カウンタおよび受信数カウンタによる障害検出方法を説明するフローチャートである。以下の説明および図面において、一定時間Ｔだけ遡った時点でのアップダウンカウンタ３１の値をＴ＿ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔと表記する。一定時間Ｔだけ遡った時点での送信数カウンタ３４の値をＴ＿ＳｎｄＲｅｑＰｋｔ＿Ｃｏｕｎｔと表記する。一定時間Ｔだけ遡った時点での受信数カウンタ３５の値をＴ＿ＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔと表記する。
【００５４】
図１４に示すように、ＳｎｄＲｅｑＰｋｔ＿ＣｏｕｎｔおよびＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔによる障害検出方法では、オフロード制御部１５は、タイマ３６から一定時間Ｔごとの割り込みが発生するまで待機する（ステップＳ６１：Ｎｏ）。タイマ３６から割り込みが発生すると（ステップＳ６１：Ｙｅｓ）、オフロード制御部１５は、図４において省略されているメモリからＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔ、ＳｎｄＲｅｑＰｋｔ＿ＣｏｕｎｔおよびＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔを読み込む（ステップＳ６２、ステップＳ６４、ステップＳ６６）。また、オフロード制御部１５は、メモリ３７からＴ＿ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔ、Ｔ＿ＳｎｄＲｅｑＰｋｔ＿ＣｏｕｎｔおよびＴ＿ＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔを読み込む（ステップＳ６３、ステップＳ６５、ステップＳ６７）。なお、ステップＳ６２からステップＳ６７までの順番は問わない。
【００５５】
次いで、オフロード制御部１５は、ステップＳ６２で読み込んだＳｎｄＲｅｑＵｐＤｏｗｎ＿ＣｏｕｎｔをＴ＿ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔとしてメモリ３７に書き込む（ステップＳ６８）。オフロード制御部１５は、ステップＳ６４で読み込んだＳｎｄＲｅｑＰｋｔ＿ＣｏｕｎｔをＴ＿ＳｎｄＲｅｑＰｋｔ＿Ｃｏｕｎｔとしてメモリ３７に書き込む（ステップＳ６９）。オフロード制御部１５は、ステップＳ６６で読み込んだＲｃｖＲｓｌｔＰｋｔ＿ＣｏｕｎｔをＴ＿ＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔとしてメモリ３７に書き込む（ステップＳ７０）。ステップＳ６８からステップＳ７０まででメモリ３７に書き込まれたＴ＿ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔ、Ｔ＿ＳｎｄＲｅｑＰｋｔ＿ＣｏｕｎｔおよびＴ＿ＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔは、次回のタイマ３６による割り込み発生の際に使用される。なお、ステップＳ６８からステップＳ７０までの順番は問わない。
【００５６】
次いで、オフロード制御部１５は、第２の比較部３８により、ステップＳ６４で読み込んだＳｎｄＲｅｑＰｋｔ＿ＣｏｕｎｔとステップＳ６５で読み込んだＴ＿ＳｎｄＲｅｑＰｋｔ＿Ｃｏｕｎｔとが等しいか否かを判定する（ステップＳ７１）。等しい場合（ステップＳ７１：Ｙｅｓ）、オフロード制御部１５は、第３の比較部３９により、ステップＳ６６で読み込んだＲｃｖＲｓｌｔＰｋｔ＿ＣｏｕｎｔとステップＳ６７で読み込んだＴ＿ＲｃｖＲｓｌｔＰｋｔ＿Ｃｏｕｎｔとが等しいか否かを判定する（ステップＳ７２）。等しい場合（ステップＳ７２：Ｙｅｓ）、オフロード制御部１５は、第４の比較部４０により、ステップＳ６２で読み込んだＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔが０であるか否かを判定する（ステップＳ７３）。０である場合（ステップＳ７３：Ｙｅｓ）、オフロード制御部１５は、第４の比較部４０により、ステップＳ６２で読み込んだＳｎｄＲｅｑＵｐＤｏｗｎ＿ＣｏｕｎｔとステップＳ６３で読み込んだＴ＿ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔとが等しいか否かを判定する（ステップＳ７４）。
【００５７】
ＳｎｄＲｅｑＵｐＤｏｗｎ＿ＣｏｕｎｔがＴ＿ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔに等しい場合（ステップＳ７４：Ｙｅｓ）、オフロード制御部１５は障害を検出し、処理を終了する。ステップＳ７１、ステップＳ７２、ステップＳ７３およびステップＳ７４のいずれかでＮｏである場合、最初に戻り、ステップＳ６１でタイマ３６による割り込みが発生するまで待機する。
【００５８】
・シーケンス番号による障害検出方法の説明
図１６および図１７は、実施例２にかかるシーケンス番号による障害検出方法を説明するフローチャートである。以下の説明および図面において、処理要求パケットに付与するシーケンス番号をＳｎｄ＿ＳｅｑＮｕｍと表記する。シーケンス番号の期待値をＲｅｑ＿ＳｅｑＮｕｍと表記する。
【００５９】
図１６に示すように、シーケンス番号による障害検出方法では、まず、オフロード制御部１５は、オフロード処理通知を受け取るまで待機する（ステップＳ８１：Ｎｏ）。オフロード制御部１５は、オフロード処理通知を受け取ると（ステップＳ８１：Ｙｅｓ）、その処理が処理要求パケットの処理であるか否かを判定する（ステップＳ８２）。
【００６０】
処理要求パケットの処理である場合（ステップＳ８２：Ｙｅｓ）、オフロード制御部１５は、メモリからＳｎｄ＿ＳｅｑＮｕｍを読み込む（ステップＳ８３）。ここで、メモリからＳｎｄ＿ＳｅｑＮｕｍを読み込む、としているのは、前回処理要求パケットに付与したシーケンス番号が、図４において省略されているメモリに書き込まれているからである。オフロード制御部１５は、読み込んだＳｎｄ＿ＳｅｑＮｕｍに１を加算し（ステップＳ８４）、Ｓｎｄ＿ＳｅｑＮｕｍをメモリに書き込む（ステップＳ８５）。次いで、オフロード制御部１５は、処理要求パケットを作成し（ステップＳ８６）、抽出部４２により処理要求パケットにステップＳ８４で更新されたＳｎｄ＿ＳｅｑＮｕｍを付与する（ステップＳ８７）。オフロード制御部１５は、パケット送信部１４に処理要求パケットを通知する処理を行う（ステップＳ８８）。そして、最初に戻り、ステップＳ８１でオフロード処理通知を受け取るまで待機する。
【００６１】
一方、ステップＳ８２で、受け取ったオフロード処理通知の処理が処理要求パケットの処理でない場合、すなわち処理結果パケットの処理である場合（ステップＳ８２：Ｎｏ）、図１７に示すように、オフロード制御部１５は、メモリ４３からＲｅｑ＿ＳｅｑＮｕｍを読み込む（ステップＳ８９）。この時点では、Ｒｅｑ＿ＳｅｑＮｕｍは、前回の期待値であり、今回の期待値よりも１だけ小さい。オフロード制御部１５は、読み込んだＲｅｑ＿ＳｅｑＮｕｍに１を加算して（ステップＳ９０）、今回の期待値を生成する。オフロード制御部１５は、メモリ４３にステップＳ９０で更新されたＲｅｑ＿ＳｅｑＮｕｍを書き込む（ステップＳ９１）。
【００６２】
次いで、オフロード制御部１５は、抽出部４２により処理結果パケットからシーケンス番号Ｙを抽出し（ステップＳ９２）、ステップＳ９０で更新されたＲｅｑ＿ＳｅｑＮｕｍとステップＳ９２で抽出されたシーケンス番号Ｙとが等しいか否かを判定する（ステップＳ９３）。等しい場合（ステップＳ９３：Ｙｅｓ）、最初に戻り、ステップＳ８１でオフロード処理通知を受け取るまで待機する。等しくない場合（ステップＳ９３：Ｎｏ）、オフロード制御部１５は障害を検出し、処理を終了する。
【００６３】
実施例２によれば、アップダウンカウンタ３１の値（ＳｎｄＲｅｑＵｐＤｏｗｎ＿Ｃｏｕｎｔ）が閾値Ａを超えたか否かを調べることによって、プロセッサ１１は障害の発生を検出することができる。また、障害が発生しているためにプロセッサ１１にＩＰパケットが送られてこない場合、アップダウンカウンタ３１の値が閾値Ａを超えないことがある。このような場合でも、アップダウンカウンタ３１、送信数カウンタ３４および受信数カウンタ３５について、ある時点での値とそれよりも一定時間Ｔだけ遡った時点での値とを比較し、かつアップダウンカウンタ３１の値が０であるか否かを調べることによって、プロセッサ１１は障害の発生を検出することができる。一定時間Ｔを計るためのタイマ３６は１個で済むので、プロセッサ１１の負荷が増大するのを抑えることができる。また、障害の発生によって瞬間的に処理要求パケットまたは処理結果パケットが消失した場合、アップダウンカウンタ３１の値が閾値Ａを超えないことがある。このような場合でも、処理結果パケットのシーケンス番号が期待値と一致しているか否かを調べることによって、プロセッサ１１は障害の発生を検出することができる。
【００６４】
なお、本実施の形態で説明したプロセッサおよび障害検出方法は、ゲートウエイ装置などのネットワークに接続される装置、ネットワークプロセッサおよびＣＰＵタイプのマルチコア・ネットワークプロセッサに限らず、その他の装置やプロセッサにも適用可能である。また、オフロードエンジンに実行させる処理は暗号化処理、復号処理、ディープパケットインスペクション処理、圧縮処理および非圧縮処理に限らない。
【００６５】
上述した実施例１、２に関し、さらに以下の付記を開示する。
【００６６】
（付記１）データを受信する受信部と、前記受信部が受信したデータの処理を実行する処理部と、データを送信する送信部と、前記処理部から渡された処理要求データを前記送信部へ送り、前記受信部から渡された処理結果データを前記処理部へ送る制御部と、前記制御部が前記送信部へ前記処理要求データを送った数と前記制御部が前記受信部から前記処理結果データを受け取った数との差分を求める第１のカウンタと、前記第１のカウンタの値と予め設定された閾値とを比較する第１の比較部と、前記第１の比較部での比較の結果、前記第１のカウンタの値が前記閾値を超える場合に障害の発生を検出する検出部と、を備えることを特徴とするプロセッサ。
【００６７】
（付記２）前記閾値は、前記制御部が前記処理要求データを前記送信部へ送ってから前記制御部が前記処理結果データを前記受信部から受け取るまでの間に前記受信部が受信するデータの数に基づいて決まる値であることを特徴とする付記１に記載のプロセッサ。
【００６８】
（付記３）前記制御部が前記送信部へ前記処理要求データを送った数を数える第２のカウンタと、前記制御部が前記受信部から前記処理結果データを受け取った数を数える第３のカウンタと、一定時間を計るタイマと、前記一定時間が経過するたびに前記第１のカウンタの値、前記第２のカウンタの値および前記第３のカウンタの値を保持する保持部と、前記保持部に保持された前記第２のカウンタの値と、前記保持部に前記第２のカウンタの値が最後に保持されてから前記一定時間が経過した時点の前記第２のカウンタの値と、を比較する第２の比較部と、前記保持部に保持された前記第３のカウンタの値と、前記保持部に前記第３のカウンタの値が最後に保持されてから前記一定時間が経過した時点の前記第３のカウンタの値と、を比較する第３の比較部と、前記保持部に保持された前記第１のカウンタの値と、前記保持部に前記第１のカウンタの値が最後に保持されてから前記一定時間が経過した時点の前記第１のカウンタの値と、を比較し、かつ前記第１のカウンタの値と０とを比較する第４の比較部と、を備え、前記検出部は、前記第２の比較部での比較の結果、前記一定時間の間前記第２のカウンタの値が同じであり、かつ前記第３の比較部での比較の結果、前記一定時間の間前記第３のカウンタの値が同じであり、さらに前記第４の比較部での比較の結果、前記第１のカウンタの値が０でなく、前記一定時間の間前記第１のカウンタの値が同じである場合に障害の発生を検出することを特徴とする付記１または２に記載のプロセッサ。
【００６９】
（付記４）前記制御部が前記送信部へ送る前記処理要求データにシーケンス番号を付与する付与部と、前記制御部が前記受信部から受け取った前記処理結果データからシーケンス番号を抽出する抽出部と、前記抽出部が抽出したシーケンス番号と期待値とを比較する第５の比較部と、を備え、前記検出部は、前記第５の比較部での比較の結果、前記抽出部が抽出したシーケンス番号が前記期待値と異なる場合に障害の発生を検出することを特徴とする付記３に記載のプロセッサ。
【００７０】
（付記５）前記期待値は、前回前記制御部が前記受信部から前記処理結果データを受け取ったときのシーケンス番号に１を加えた値であることを特徴とする付記４に記載のプロセッサ。
【００７１】
（付記６）プロセッサから該プロセッサに接続されたハードウェアへ処理要求データを送った数と前記プロセッサが前記ハードウェアから処理結果データを受け取った数との差分を求めるステップと、前記差分の値と予め設定された閾値とを比較するステップと、前記差分の値が前記閾値を超える場合に障害の発生を検出するステップと、を含むことを特徴とする障害検出方法。
【００７２】
（付記７）前記閾値は、前記プロセッサが前記処理要求データを前記ハードウェアへ送ってから前記プロセッサが前記処理結果データを前記ハードウェアから受け取るまでの間に前記プロセッサが受信するデータの数に基づいて決まる値であることを特徴とする付記６に記載の障害検出方法。
【００７３】
（付記８）前記プロセッサが前記ハードウェアへ前記処理要求データを送った数が一定時間同じであり、かつ前記プロセッサが前記ハードウェアから前記処理結果データを受け取った数が前記一定時間同じであり、さらに前記差分の値が０でなく、前記差分の値が一定時間同じである場合に障害の発生を検出するステップ、を含むことを特徴とする付記６または７に記載の障害検出方法。
【００７４】
（付記９）前記プロセッサが前記ハードウェアへ送る前記処理要求データにシーケンス番号を付与するステップと、前記プロセッサが前記ハードウェアから受け取った前記処理結果データからシーケンス番号を抽出するステップと、抽出した前記シーケンス番号と期待値とを比較するステップと、抽出した前記シーケンス番号が前記期待値と異なる場合に障害の発生を検出するステップと、を含むことを特徴とする付記８に記載の障害検出方法。
【００７５】
（付記１０）前記期待値は、前回プロセッサが前記ハードウェアから前記処理結果データを受け取ったときのシーケンス番号に１を加えた値であることを特徴とする付記９に記載の障害検出方法。
【符号の説明】
【００７６】
１，１１  プロセッサ
２，１２  受信部
３，１３  処理部
４，１４  送信部
５，１５  制御部
６，３１  第１のカウンタ
７，３２  第１の比較部
８，３３  検出部
３４  第２のカウンタ
３５  第３のカウンタ
３６  タイマ
３７  保持部
３８  第２の比較部
３９  第３の比較部
４０  第４の比較部
４１  付与部
４２  抽出部
４５  第５の比較部
【図１】
2011150481.tif 000003
【図２】
2011150481.tif 000004
【図３】
2011150481.tif 000005
【図４】
2011150481.tif 000006
【図５】
2011150481.tif 000007
【図６】
2011150481.tif 000008
【図７】
2011150481.tif 000009
【図８】
2011150481.tif 000010
【図９】
2011150481.tif 000011
【図１０】
2011150481.tif 000012
【図１１】
2011150481.tif 000013
【図１２】
2011150481.tif 000014
【図１３】
2011150481.tif 000015
【図１４】
2011150481.tif 000016
【図１５】
2011150481.tif 000017
【図１６】
2011150481.tif 000018
【図１７】
2011150481.tif 000019