(57)【要約】【課題】  他のモジュールに対する影響を抑えながら、ＬＡＮカードを再起動させることができる情報処理装置を提供する。【解決手段】  情報処理装置は、ＬＡＮカードを介してデータの送受信を行う送受信部と、送受信部からの制御情報に応じて、ＬＡＮカードにアクセスし、データの送受信を行う下位送受信部と、ＬＡＮカードの異常を検知する検知部と、検知部により異常が検知された場合に、ＬＡＮカードに対して再起動動作を指示する復帰指示部とを有し、送受信部は、復帰指示部により指示された再起動動作が実行されている間、下位送受信部に対して、少なくとも送信処理を禁止する制御情報を出力する。好適には、検知部は、送受信部が管理している送信キューの状態に基づいて、前記ＬＡＮカードの異常を検知する。【選択図】図２
2017046283.tif 000002
【特許請求の範囲】
【請求項１】
ＬＡＮカードを介してデータの送受信を行う送受信部と、
前記送受信部からの制御情報に応じて、前記ＬＡＮカードにアクセスし、データの送受信を行う下位送受信部と、
前記ＬＡＮカードの異常を検知する検知部と、
前記検知部により異常が検知された場合に、ＬＡＮカードに対して再起動動作を指示する復帰指示部と
を有し、
前記送受信部は、前記復帰指示部により指示された再起動動作が実行されている間、前記下位送受信部に対して、少なくとも送信処理を禁止する制御情報を出力する
情報処理装置。
【請求項２】
前記検知部は、前記送受信部が管理している送信キューの状態に基づいて、前記ＬＡＮカードの異常を検知する
請求項１に記載の情報処理装置。
【請求項３】
前記復帰指示部は、単一の制御プレーンコアであり、
前記送受信部は、複数のデータプレーンコアを含み、
全ての前記データプレーンコアが、少なくとも送信処理を禁止する制御情報を前記下位送信部に出力する
請求項２に記載の情報処理装置。
【請求項４】
前記検知部は、いずれかの前記データプレーンコアで既定期間、送信キューが変化しなかった場合に、ＬＡＮカードの異常であると判断する
請求項３に記載の情報処理装置。
【請求項５】
前記制御プレーンコアは、ＬＡＮカードの再起動動作が実施されている間、上位層からの要求を無視し、前記下位送信部に対して、ＬＡＮカードの終了処理、初期化処理及び開始処理を順に実行させる制御情報を出力して、ＬＡＮカードの再起動動作を実現させる
請求項４に記載の情報処理装置。
【請求項６】
ＬＡＮカードを介してデータの送受信処理を行う送受信ステップと、
前記送受信ステップからの制御情報に応じて、前記ＬＡＮカードにアクセスし、データの送受信を行う下位送受信ステップと、
前記ＬＡＮカードの異常を検知する検知ステップと、
前記ＬＡＮカードの異常が検知された場合に、前記ＬＡＮカードに対して再起動動作を指示する復帰指示ステップと、
前記ＬＡＮカードの前記再起動動作が実行されている間、データの送受信処理を行う下位送受信ステップに対して、少なくとも送信処理を禁止する制御情報を出力する出力ステップと
を有する情報処理方法。
【請求項７】
ＬＡＮカードを介してデータの送受信処理を行う送受信機能と、
前記送受信機能からの制御情報に応じて、前記ＬＡＮカードにアクセスし、データの送受信を行う下位送受信機能と、
前記ＬＡＮカードの異常を検知する検知機能と、
前記ＬＡＮカードの異常が検知された場合に、前記ＬＡＮカードに対して再起動動作を指示する復帰指示機能と、
前記ＬＡＮカードの前記再起動動作が実行されている間、データの送受信処理を行う下位送受信機能に対して、少なくとも送信処理を禁止する制御情報を出力する出力機能と
をコンピュータに実現させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及びプログラムに関する。
【背景技術】
【０００２】
例えば、特許文献１には、調整システムを利用して共有リソースの障害を判断し、リセットと、共有リソースへのアクセスを制御できるマルチコアシステムが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１０／０３２５４９５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
他のモジュールに対する影響を抑えながら、ＬＡＮカードを再起動させることができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明に係る情報処理装置は、ＬＡＮカードを介してデータの送受信を行う送受信部と、前記送受信部からの制御情報に応じて、前記ＬＡＮカードにアクセスし、データの送受信を行う下位送受信部と、前記ＬＡＮカードの異常を検知する検知部と、前記検知部により異常が検知された場合に、ＬＡＮカードに対して再起動動作を指示する復帰指示部とを有し、前記送受信部は、前記復帰指示部により指示された再起動動作が実行されている間、前記下位送受信部に対して、少なくとも送信処理を禁止する制御情報を出力する。
【０００６】
好適には、前記検知部は、前記送受信部が管理している送信キューの状態に基づいて、前記ＬＡＮカードの異常を検知する。
【０００７】
好適には、前記復帰指示部は、単一の制御プレーンコアであり、前記送受信部は、複数のデータプレーンコアを含み、全ての前記データプレーンコアが、少なくとも送信処理を禁止する制御情報を前記下位送信部に出力する。
【０００８】
好適には、前記検知部は、いずれかの前記データプレーンコアで既定期間、送信キューが変化しなかった場合に、ＬＡＮカードの異常であると判断する。
【０００９】
好適には、前記制御プレーンコアは、ＬＡＮカードの再起動動作が実施されている間、上位層からの要求を無視し、前記下位送信部に対して、ＬＡＮカードの終了処理、初期化処理及び開始処理を順に実行させる制御情報を出力して、ＬＡＮカードの再起動動作を実現させる。
【００１０】
本発明に係る情報処理方法は、ＬＡＮカードを介してデータの送受信処理を行う送受信ステップと、前記送受信ステップからの制御情報に応じて、前記ＬＡＮカードにアクセスし、データの送受信を行う下位送受信ステップと、前記ＬＡＮカードの異常を検知する検知ステップと、前記ＬＡＮカードの異常が検知された場合に、前記ＬＡＮカードに対して再起動動作を指示する復帰指示ステップと、前記ＬＡＮカードの前記再起動動作が実行されている間、データの送受信処理を行う下位送受信ステップに対して、少なくとも送信処理を禁止する制御情報を出力する出力ステップとを有する。
【００１１】
本発明に係るプログラムは、ＬＡＮカードを介してデータの送受信処理を行う送受信機能と、前記送受信機能からの制御情報に応じて、前記ＬＡＮカードにアクセスし、データの送受信を行う下位送受信機能と、前記ＬＡＮカードの異常を検知する検知機能と、前記ＬＡＮカードの異常が検知された場合に、前記ＬＡＮカードに対して再起動動作を指示する復帰指示機能と、前記ＬＡＮカードの前記再起動動作が実行されている間、データの送受信処理を行う下位送受信機能に対して、少なくとも送信処理を禁止する制御情報を出力する出力機能とをコンピュータに実現させる。
【発明の効果】
【００１２】
他のモジュールに対する影響を抑えながら、ＬＡＮカードを再起動させることができる。
【図面の簡単な説明】
【００１３】
【図１】ネットワーク装置１０を含むネットワーク通信システム１のハードウェア構成を例示する図である。
【図２】ネットワーク装置１０のハードウェア構成を例示する図である。
【図３】ネットワーク装置１０の機能ブロックを例示する図である。
【図４】図３のＬＡＮドライバ３６０（制御プレーンコア側）及びＬＡＮドライバ４６０（データプレーンコア側）のより詳細な機能構成を例示する図である。
【図５】（Ａ）は、制御プレーンコア及びデータプレーンコアと、ＬＡＮカードのインタフェースとの間の関係を中心としたシステム構成を例示する図であり、（Ｂ）は、単一のインタフェースに着目してみた場合のシステム構成を例示する図である。
【図６】通常状態のデータプレーンコア処理部４００によるパケット送受信処理を模式的に説明する図である。
【図７】ＬＡＮカード再起動中のデータプレーンコア処理部４００の状態を模式的に説明する図である。
【図８】データプレーンコア側の異常検知処理（Ｓ１０）を説明するフローチャートである。
【図９】制御プレーンコア側の異常検知処理（Ｓ２０）を説明するフローチャートである。
【図１０】ＬＡＮカードの再起動処理（Ｓ３０）を説明するフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の実施形態を、図面を参照して説明する。
図１は、ネットワーク装置１０を含むネットワーク通信システム１のハードウェア構成を例示する図である。
図１に例示するように、ネットワーク通信システム１は、複数のネットワーク装置１０と、これを接続するネットワークスイッチ２０とを含む。
ネットワーク装置１０は、ネットワークに接続して使用されるネットワーク機器である。ネットワーク装置１０は、本発明に係る情報処理装置の一例である。本例のネットワーク装置は、ＬＡＮケーブル及びネットワークスイッチ２０を介してＬＡＮに接続しており、帯域制御機能及びファイアウォール機能などを有すると共に、他のネットワーク装置１０と二重化して冗長構成によって耐障害性を高めている。具体的には、稼働中のネットワーク装置１０Ａ（Ａｃｔｉｖｅ）と、待機中のネットワーク装置１０Ｂ（Ｓｔａｎｄｂｙ）との間で生存監視パケットが送受信され、既定時間生存監視パケットが送受信されない場合に、待機中のネットワーク装置１０Ｂが稼働状態となり、役割を引き継ぐ。
【００１５】
例えば、本例のネットワーク通信システム１では、２台のネットワーク装置１０の間で、１秒間隔で生存監視パケットが送信され、生存監視パケットの送信が３秒以上滞ると、二重化監視でエラー検出となり、Ａｃｔｉｖｅ／Ｓｔａｎｄｂｙのネットワーク装置１０の切り替えが発生するように設定されている。この場合、ＬＡＮカードの異常などで送信タイムアウトが検出され、リセットリカバリして復旧させるまでに３秒以上の時間がかかってしまうと、ネットワーク装置１０間で生存監視パケットの送信ができず、リカバリできる事象であるにも関わらずＡｃｔｉｖｅ／Ｓｔａｎｄｂｙの系切り替えが発生してしまう。したがって、本例では、送信タイムアウト検出からリセットリカバリまでを３秒以内に完了させることが望ましい。
【００１６】
図２は、ネットワーク装置１０のハードウェア構成を例示する図である。
図２に例示するように、ネットワーク装置１０は、ＣＰＵ１００、メモリ１０２、複数のスロット１０４、サウスブリッジ１０６、ハードディスクドライブ１０８、コンパクトフラッシュ変換アダプタ１１０、及び、ＤＶＤドライブ１１２を有する。
ＣＰＵ１００は、中央処理装置である。本例のＣＰＵ１００は、複数のコアからなるマルチコアプロセッサである。
メモリ１０２は、例えば、半導体メモリであり、ＣＰＵ１００に接続され、主記憶装置として機能する。
スロット１０４は、拡張スロットであり、例えば、ＬＡＮカード１２０などが挿入される。本例のスロット１０４には、ＬＡＮカード１２０が挿入されており、本例のＬＡＮカード１２０には、ＰＣＩスイッチを介して複数のインタフェース（＃０〜＃３）が設けられている。ここで、ＬＡＮカードとは、広義のネットワークカードを意味し、イーサネット（登録商標）に対する狭義のＬＡＮカードだけではなく、ファイバーチャネルカードなどのネットワークカードやネットワークアダプタなどを含む概念である。
サウスブリッジ１０６は、例えば、ＳＡＴＡバスなどを接続するＩＣチップである。本例では、サウスブリッジ１０６には、ハードディスクドライブ１０８、コンパクトフラッシュ変換アダプタ１１０、及び、ＤＶＤドライブ１１２が接続されている。
本例のネットワーク装置１０は、上記ハードウェア構成にデータプレーン開発キット（Ｄａｔａ  Ｐｌａｎｅ  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｋｉｔ）を採用して、パケット処理の高速化を実現している。
【００１７】
ここで、オープンソースソフトウェアであるデータプレーン開発キットでは、送信処理が複数コア（複数のデータプレーンコア）に跨って実行される場合の送信タイムアウト検出処理及びリセット処理が用意されていない。すなわち、データプレーン開発キットで採用されているＬＡＮドライバ（ＰＭＤ：Polling Mode Driver）では、制御プレーンコアとデータプレーンコアという二つの機能に分離されている。制御プレーンコアでは、主にＬＡＮカードに対する制御を行い、データプレーンコアでは、パケット送受信処理を行うという特殊なＣＰＵコアの使い方となっている。さらに、パケットを高速に処理するためにデータプレーンコアが複数存在し、一つのＬＡＮカード上のインタフェースに対して、コア毎に送受信キューを用意している。この、各コアに割り当てられた送受信キューを常時ポーリングすることで、高速なパケット処理を実現している。このパケット処理機構に則って、タイムアウト検出処理とリセット処理を実装する必要がある。
パケット送信キューはデータプレーンコアが管理しているため、送信キューの状態が変化しないことを検出して、その状況が所定時間続いてタイムアウトしたことを判定する処理は、データプレーンコア上に実装する必要がある。一方、ＬＡＮカードのインタフェースに対してリセットを指示してリカバリを行う処理は、制御プレーンコア上に実装する必要がある。このため、これらの機能をデータプレーン開発キットで実現するには、複数コア間の連携が必要になる。つまり、異常検知処理及び再起動処理の影響範囲が広くなり、排他制御などが複雑になる可能性があった。
【００１８】
図３は、ネットワーク装置１０の機能ブロックを例示する図である。
図３に例示するように、ネットワーク装置１０は、ＬＡＮドライバの機能ブロックとして、制御プレーンコア処理部３００と、データプレーンコア処理部４００とを有する。ここで、制御プレーンコアと制御プレーンコア処理部は実質的に同じものであるが、ハードウェアに着目した場合には「制御プレーンコア」と呼び、機能又はソフトウェアに着目した場合には「制御プレーンコア処理部」と呼ぶ。データプレーンコアとデータプレーンコア処理部の関係も同様である。
制御プレーンコア処理部３００は、ＬＡＮカード１２０などの制御処理を行う。本例の制御プレーンコア処理部３００は、上位エンジン処理部３２０、ＬＡＮドライバ共通部３４０、及びＬＡＮドライバ３６０を有する。上位エンジン処理部３２０は、上位層からの指示に応じて、制御に必要なデータを、ＬＡＮドライバ共通部３４０及びＬＡＮドライバ３６０を介して、ＬＡＮカード１２０に出力する。制御プレーンコア処理部３００は、本発明に係る復帰指示部の一例である。本例の制御プレーンコア処理部３００は、ＬＡＮカード１２０の異常が検知された場合に、ＬＡＮカード１２０の終了処理、初期化処理及び開始処理を順に実行させる制御情報を出力して、ＬＡＮカード１２０の再起動動作を実現させる。
【００１９】
データプレーンコア処理部４００は、パケット処理を行う。本例のデータプレーンコア処理部４００は、上位エンジン処理部４２０、ＬＡＮドライバ共通部４４０、及びＬＡＮドライバ４６０を有する。上位エンジン処理部４２０は、ファイアウォールなどの処理を実行する。
ＬＡＮドライバ共通部４４０は、上位エンジン処理部４２０からの指示に応じて、送受信するパケットに対してＬＡＮカード共通の処理を施す。ＬＡＮドライバ共通部４４０は、本発明に係る送受信部の一例であり、ＬＡＮカードの再起動動作が実行されている間、ＬＡＮドライバ４６０に対して、少なくとも送信処理を禁止する制御情報を出力する。より具体的には、ＬＡＮドライバ共通部４４０は、送受信処理を空振りさせる空振り関数をコールする。
【００２０】
ＬＡＮドライバ４６０は、ＬＡＮカード１２０に直接アクセスして、ＬＡＮドライバ共通部４４０から指示されたパケットの送受信を行う。すなわち、受信パケットは、ＬＡＮドライバ４６０でＬＡＮカード１２０から受け取り、ＬＡＮドライバ共通部４４０を通過して、上位エンジン処理部４２０でファイアウォール機能などの固有機能を適用する。送信パケットは、上位エンジン処理部４２０からＬＡＮドライバ共通部４４０を通過して、ＬＡＮドライバ４６０からＬＡＮカード１２０に受け渡される。ＬＡＮドライバ４６０は、本発明に係る下位送受信部の一例である。
【００２１】
図４は、図３のＬＡＮドライバ３６０（制御プレーンコア処理部）及びＬＡＮドライバ４６０（データプレーンコア処理部）のより詳細な機能構成を例示する図である。
図４に例示するように、制御プレーンコア処理部３００に設けられたＬＡＮドライバ３６０は、アクセス制御部３６２、ダミーアクセス制御部３６４、監視スレッド部３６６、及びリセット処理部３６８を有する。
アクセス制御部３６２は、上位からの制御依頼に応じて、パケット処理に関与する各構成を制御する。本例のアクセス制御部３６２は、データプレーン開発キットにおいて用意されている制御機能を実現する。
ダミーアクセス制御部３６４は、リセット処理部３６８によりＬＡＮカード１２０の再起動動作が実行されている間に、上位からの制御依頼を受けても、制御プレーンコア処理部３００がこの依頼に対応する処理を何もしない状態にする。
【００２２】
監視スレッド部３６６は、複数のデータプレーンコア処理部４００を定期的にチェックして、送信タイムアウト検出フラグがセットされているか否かを監視する。監視スレッド部３６６は、いずれかのデータプレーンコア処理部４００に送信タイムアウト検出フラグがセットされている場合に、ＬＡＮカード１２０の異常が発生したものと判定する。監視スレッド部３６６は、本発明に係る検知部の一例である。
【００２３】
リセット処理部３６８は、監視スレッド部３６６によりＬＡＮカード１２０の異常が検知された場合に、ＬＡＮカード１２０に対して、再起動動作を実施するよう指示する。本例のリセット処理部３６８は、ＬＡＮカード１２０の終了処理、初期化処理及び開始処理を順に実行させる制御情報を出力して、ＬＡＮカード１２０の再起動動作を実現させる。
【００２４】
データプレーンコア処理部４００に設けられたＬＡＮドライバ４６０は、送信処理部４６２、ダミー送信処理部４６６、受信処理部４６８、及びダミー受信処理部４７０を有する。送信処理部４６２は、タイムアウトチェック部４６４を含む。
送信処理部４６２は、データプレーン開発キットに即したパケット送信処理を実行する。本例の送信処理部４６２は、各データプレーンコア処理部４００に割り当てられた送信キューを常時ポーリングして、パケットの送信処理を繰り返し実行する。
タイムアウトチェック部４６４は、送信キューの状態を監視し、既定時間送信キューの状態が変化しない場合に、送信タイムアウト検出フラグをセットする。
【００２５】
ダミー送信処理部４６６は、ＬＡＮドライバ共通部４４０によりコールされた送信空振り関数に応じて、パケット送信処理の空振りを行う。すなわち、ダミー送信処理部４６６は、ＬＡＮドライバ共通部４４０によりコールされた送信空振り関数に従って、ＬＡＮカード１２０に対するアクセスを行わずに、パケット送信できなかった旨を上位層に返す。これにより、上位層では、送信不可を検知し、リトライ処理やパケットドロップ扱いとすることができる。換言すると、リンクアップ状態を継続させながらハードウェアにアクセスしない状態となり、疑似的に送信しているようにエミュレートしている。
【００２６】
受信処理部４６８は、データプレーン開発キットに即したパケット受信処理を実行する。本例の受信処理部４６８は、送信処理部４６２に続いて、パケットの受信処理を繰り返し実行する。
ダミー受信処理部４７０は、ＬＡＮドライバ共通部４４０によりコールされた受信空振り関数に応じて、パケット受信処理の空振りを行う。すなわち、ダミー受信処理部４７０は、ＬＡＮドライバ共通部４４０によりコールされた受信空振り関数に従って、ＬＡＮカード１２０に対するアクセスを行わずに、パケット受信できなかった旨を上位層に返す。これにより、上位層では、受信パケット無しということで処理を継続できる。
【００２７】
図５（Ａ）は、制御プレーンコア及びデータプレーンコアと、ＬＡＮカードのインタフェースとの間の関係を中心としたシステム構成を例示する図である。
図５（Ｂ）は、単一のインタフェースに着目してみた場合のシステム構成を例示する図である。
図５に例示するように、ＣＰＵ１００の複数のコア（＃０〜＃Ｎ）のうち、一つが制御プレーンコアとして割り当て、残りのＮ個のコアがデータプレーンコアとして割り当てられている。それぞれのデータプレーンコアが、ループ処理によってパケット送受信処理を実行している。
つまり、それぞれのデータプレーンコアでは、ＬＡＮカード１２０のインタフェース毎に送受信キューを用意しており、送受信処理を無限ループで実行することで、高速なパケット処理を実現している。この高速パケット処理では、送信処理と受信処理を延々ループして実行しており、当然、タイミングによってはパケットが存在しない場合が存在するが、このような場合も「通常状態」として存在しうる。したがって、パケット送受信処理の空振りも多くの構成は「通常状態」として処理を継続することができる。
これにより、ＬＡＮカード１２０の再起動処理中も、その影響範囲を必要最小限に限定することができる。
【００２８】
図６は、通常状態のデータプレーンコア処理部４００によるパケット送受信処理を模式的に説明する図である。
図７は、ＬＡＮカード再起動中のデータプレーンコア処理部４００の状態を模式的に説明する図である。
図６に示すように、各データプレーンコア処理部４００では、各コアにくくりつけられた単一スレッドがパケット送受信関数を無限ループで起動している。上位エンジン処理部４２０からの指示が、ＬＡＮドライバ共通部４４０（図のＬＡＮドライバ共通部）を介して、最下層のＬＡＮドライバ４６０に入力され、ＬＡＮドライバ４６０がＬＡＮカード１２０に直接アクセスしてパケットの送受信を連続的に行っている。
ＬＡＮカード１２０の異常が検知され、再起動動作が開始されると、図７に示すように、ＬＡＮドライバ共通部４４０は、ＬＡＮドライバ４６０に対して、パケットの送受信を実行させない関数（送受信空振り関数）に置換する。これにより、下位のＬＡＮドライバ４６０では、リセット中のＬＡＮカード１２０に対するアクセスを行わずに、結果をＬＡＮドライバ共通部４４０に返し、これが上位エンジン処理部４２０に結果として返される。上位エンジン処理部４２０では、通常時（図６の場合）と同じ処理が継続される。
なお、ＬＡＮカード１２０の再起動が完了すると、ＬＡＮドライバ共通部４４０は、送受信空振り関数を、図６の通常の関数に戻して、通常状態に戻す。
【００２９】
図８は、データプレーンコア側の異常検知処理（Ｓ１０）を説明するフローチャートである。
図８に例示するように、データプレーンコア処理部４００のタイムアウトチェック部４６４（図４）は、使用可能ディスクリプタの有無を判定し、使用可能ディスクリプタが存在しない場合（Ｓ１００：Ｙｅｓ）、Ｓ１１０の処理に移行し、使用可能なディスクリプタが存在する場合（Ｓ１００：Ｎｏ）、Ｓ１０５の処理に移行する。
【００３０】
ステップ１０５（Ｓ１０５）において、タイムアウトチェック部４６４は、変数last_tx_endにAll Fを設定し、送信タイムアウト検出フラグdetect_tx_hungにfalseを設定する。
【００３１】
ステップ１１０（Ｓ１１０）において、タイムアウトチェック部４６４は、変数tx_endが変数last_tx_endと不一致か否かを判定する。変数tx_endが変数last_tx_endと不一致である場合（Ｓ１１０：Ｙｅｓ）、以前検出した送信停止とは異なるインデックスで停止しているため、停止は解消され、また異なる停止が発生したと判断する。変数tx_endが変数last_tx_endと一致している場合（Ｓ１１０：Ｎｏ）、タイムアウトチェック部４６４は、検出した送信停止が継続していると判断し、送信停止継続時間の判断（Ｓ１２０）に移る。
【００３２】
ステップ１１５（Ｓ１１５）において、タイムアウトチェック部４６４は、送信キューの最後のエントリインデックスを変数last_tx_endに設定し、送信ディスクリプタ獲得不可を検出した時刻tx_busy_timeに、現在時刻を設定する。 
タイムＳ１００の処理に戻る。
【００３３】
ステップ１２０（Ｓ１２０）において、タイムアウトチェック部４６４は、送信キューが変化しない時間が２．９秒を超えている否かを判定し、２．９秒を超えた場合（Ｓ１２０：Ｙｅｓ）、Ｓ１２５の処理に移行し、２．９秒以下である場合（Ｓ１２０：Ｎｏ）、Ｓ１００の処理に戻る。
【００３４】
ステップ１２５（Ｓ１２５）において、タイムアウトチェック部４６４は、送信タイムアウト検出フラグdetect_tx_hungにtrueを設定して、フラグを立てる。
このように、本例のタイムアウトチェック部４６４は、送信ディスクリプタ獲得不可を検出後、２．９秒間送信キューが変化しない場合、送信タイムアウト検出とする。これは、二重化切り替えの閾値として、３秒間送信不可という値があるため、制御プレーンコアとデータプレーンコアの処理時間の合計を３秒以内にする必要があることを前提として、送信タイムアウトの検出閾値を極力長くしたためである。
【００３５】
図９は、制御プレーンコア側の異常検知処理（Ｓ２０）を説明するフローチャートである。
図９に例示するように、ステップ２００（Ｓ２００）において、制御プレーンコア処理部３００は、送信タイムアウト検出フラグと共に、送信処理の初期化を行う。
ステップ２０５（Ｓ２０５）において、制御プレーンコア処理部３００は、監視スレッド部３６６（図４）を定期的に起動させる。
ステップ２１０（Ｓ２１０）において、起動した監視スレッド部３６６は、全データプレーンコア処理部４００の管理領域をチェックする。
【００３６】
ステップ２１５（Ｓ２１５）において、監視スレッド部３６６は、いずれかのデータプレーンコア処理部４００において送信タイムアウト検出フラグdetect_tx_hungがtrueに設定されているか否かを判定し、いずれかのデータプレーンコア処理部４００において送信タイムアウト検出フラグdetect_tx_hungがtrueに設定されている場合（Ｓ２１５：Ｙｅｓ）、Ｓ２２０の処理に移行し、いずれの送信タイムアウト検出フラグdetect_tx_hungもfalseに設定されている場合（Ｓ２１５：Ｎｏ）、Ｓ２３０の処理に移行する。
【００３７】
ステップ２２０（Ｓ２２０）において、制御プレーンコア処理部３００は、ＰＡＵＳＥフレームを受信中であるか否かを判定し、ＰＡＵＳＥ受信中である場合（Ｓ２２０：Ｙｅｓ）に、Ｓ２３０の処理に移行し、これ以外の場合（Ｓ２２０：Ｎｏ）に、Ｓ２２５の処理に移行する。
ステップ２２５（Ｓ２２５）において、監視スレッド部３６６は、ＬＡＮカード１２０の異常を検知したものと判断して、リセット処理部３６８にリセット処理を指示する。
リセット処理部３６８は、ＬＡＮカード１２０に再起動動作を指示する。制御プレーンコア処理部３００は、全てのデータプレーンコア処理部用の資源を初期化し、変数及び送信タイムアウトフラグをfalseに初期化する。
【００３８】
ステップ２３０（Ｓ２３０）において、監視スレッド部３６６は、０．１秒間待機して、Ｓ２１０の処理に戻る。
このように、制御プレーンコア処理部３００では、全データプレーンコア処理部４００の送信タイムアウト検出フラグをチェックするために、監視スレッド部３６６を起動させる。監視スレッド部３６６は、起動後、全データプレーンコア処理部４００の送信タイムアウト検出フラグを０．１秒間隔で定期的にチェックする。こうすることで、データプレーンコア処理部４００で要した２．９秒と合わせて、３秒以内にリセットリカバリを実行することができる。
【００３９】
図１０は、ＬＡＮカードの再起動処理（Ｓ３０）を説明するフローチャートである。
図１０に例示するように、ステップ３００（Ｓ３００）において、制御プレーンコア処理部３００は、リセットフラグを設定する。
ステップ３０５（Ｓ３０５）において、制御プレーンコア処理部３００は、全てのデータプレーンコア処理部４００のＬＡＮドライバ共通部４４０に対して、送受信空振り関数を設定するよう指示し、各データプレーンコア処理部４００のＬＡＮドライバ共通部４４０は、送受信空振り関数をＬＡＮドライバ４６０に設定する。これにより、送信処理部４６２及び受信処理部４６８が送受信処理を停止し、ダミー送信処理部４６６及びダミー受信処理部４７０が送受信空振り処理を開始する。結果、ＬＡＮカード１２０に対するデータプレーンコア処理部４００のアクセスが無くなる。
【００４０】
ステップ３１０（Ｓ３１０）において、制御プレーンコア処理部３００のダミーアクセス制御部３６４は、上位層からの要求に対して未サポート応答するように設定して、別スレッドからの要求に対して、未サポートである旨を応答する。
ステップ３１５（Ｓ３１５）において、制御プレーンコア処理部３００は、２０ミリ秒待機して、現在のデータプレーン処理部４００における処理を完了させる。
ステップ３２０（Ｓ３２０）において、制御プレーンコア処理部３００は、close処理を実行する。具体的には、リセット処理部３６８が、ＬＡＮカード１２０の終了処理を実行させる。
【００４１】
ステップ３２５（Ｓ３２５）において、制御プレーンコア処理部３００は、９００ミリ秒待機する。リンクダウンからアップまでの間に、最低でも７００ミリ秒を要するため、上記待機期間が設けられている。
ステップ３３０（Ｓ３３０）において、制御プレーンコア処理部３００のリセット処理部３６８は、ＬＡＮカード１２０の初期化処理を開始する。なお、初期化処理中には、データプレーンコア処理部４００に送受信関数を設定させない。
ステップ３３５（Ｓ３３５）において、リセット処理部３６８は、ＬＡＮカード１２０のconfigure処理を実行する。
ステップ３４０（Ｓ３４０）において、リセット処理部３６８は、ＬＡＮカード１２０に、送受信処理に用いる送受信キューのキューセットアップ処理を実行する。
【００４２】
ステップ３４５（Ｓ３４５）において、リセット処理部３６８は、ＬＡＮカード１２０の開始処理を開始する。なお、開始処理中にも、データプレーンコア処理部４００に送受信関数を設定させない。
ステップ３５０（Ｓ３５０）において、リセット処理部３６８は、ＬＡＮカード１２０にプロミスキャスモードを設定する。
【００４３】
ステップ３５５（Ｓ３５５）において、ダミーアクセス制御部３６４は、未サポート応答を終了し、アクセス制御部３６４が、通常の動作モードを再開する。
ステップ３６０（Ｓ３６０）において、制御プレーンコア処理部３００は、全てのデータプレーンコア処理部４００のＬＡＮドライバ共通部４４０に対して、送受信関数を元に戻すよう指示する。
各データプレーンコア処理部４００のＬＡＮドライバ共通部４４０は、送受信空振り関数を通常の送受信関数に戻す。すなわち、ダミー送信処理部４６６及びダミー受信処理部４７０が送受信空振り処理を終了し、送信処理部４６２及び受信処理部４６８が送受信処理を再開する。
【００４４】
ステップ３６５（Ｓ３６５）において、制御プレーンコア処理部３００は、リセットフラグを解除して、ＬＡＮカード１２０の再起動処理を完了する。
【００４５】
次に、システムの一例を用いて、送受信空振り関数の具体例を説明する。
データプレーンコア処理部４００のパケット送受信処理において、ＬＡＮドライバ４６０の送受信関数は、グローバル領域のI/Fデバイス構造体に設定された関数ポインタ（rx_pkt_burst、tx_pkt_burst）をＬＡＮドライバ共通部４４０がコールすることで起動される。
struct rte_eth_dev {
eth_rx_burst_t rx_pkt_burst; /**＜ Pointer to PMD receive function. */
eth_tx_burst_t tx_pkt_burst; /**＜ Pointer to PMD transmit function. */
struct rte_eth_dev_data *data; /**＜ Pointer to device data */
const struct eth_driver *driver;/**＜ Driver for this device */
struct eth_dev_ops *dev_ops; /**＜ Functions exported by PMD */
struct rte_pci_device *pci_dev; /**＜ PCI info. supplied by probing */
struct rte_eth_dev_cb_list callbacks; /**＜ User application callbacks */
};
【００４６】
送受信関数のインタフェースは、以下の通り形式が決まっており、パケット情報域など必要な情報を引数で渡して、復帰値で受信パケット数、送信パケット数を応答する。
typedef uint16_t (*eth_rx_burst_t)(void *rxq,
struct rte_mbuf **rx_pkts,
uint16_t nb_pkts);
/**＜ @internal Retrieve input packets from a receive queue of an Ethernet device. */
typedef uint16_t (*eth_tx_burst_t)(void *txq,
struct rte_mbuf **tx_pkts,
uint16_t nb_pkts);
/**＜ @internal Send output packets on a transmit queue of an Ethernet device. */
【００４７】
今回、上記の関数インタフェースに合わせて、以下の空振り関数を実装した。受信関数を起動して受信処理を行ったが、ＬＡＮカード１２０から受信したパケットが存在しなかった、というように上位層に対して見せている。また、送信関数を起動して送信処理を行ったが、ＬＡＮカード１２０に対して送信依頼できたパケットが存在しなかった、というように上位層に対して見せている。
【００４８】
（受信処理の空振り関数）
uint16_t
eth_igb_recv_pkts_reinit(__rte_unused void *rx_queue,
__rte_unused struct rte_mbuf **rx_pkts,
__rte_unused uint16_t nb_pkts)
{
/* now resetting */
return 0;
}
（送信処理の空振り関数）
uint16_t
eth_igb_xmit_pkts_reinit(__rte_unused void *tx_queue,
__rte_unused struct rte_mbuf **tx_pkts,
__rte_unused uint16_t nb_pkts)
{
/* now resetting */
return 0;
}
【００４９】
上記は、ＬＡＮカード１２０の１Ｇｂｐｓインタフェースの実装例だが、１０Ｇｂｐｓインタフェースの場合も同様に以下の関数を登録する実装を行った。
【００５０】
uint16_t
ixgbe_recv_pkts_reinit(__rte_unused void *rx_queue,
__rte_unused struct rte_mbuf **rx_pkts,
__rte_unused uint16_t nb_pkts)
{
/* now resetting */
return 0;
}
uint16_t
ixgbe_xmit_pkts_reinit(__rte_unused void *tx_queue,
__rte_unused struct rte_mbuf **tx_pkts,
__rte_unused uint16_t nb_pkts)
{
/* now resetting */
return 0;
}
【００５１】
同様に、制御プレーンコア処理部３００においても、ＬＡＮドライバ３６０に対する各種制御関数は、グローバル領域のI/Fデバイス構造体に設定された関数ポインタをＬＡＮドライバ共通部３４０がコールすることで起動される。これらを「NULL」に設定することで、各種制御関数が未サポートである状態を作り出す。例として、インタフェースの設定を変更する場合、dev_configureという関数ポインタに制御関数が登録されている。制御関数起動には、以下のマクロを使用しているが、関数ポインタが「NULL」になることで、-ENOTSUPを応答する処理となる。
FUNC_PTR_OR_ERR_RET(*dev-＞dev_ops-＞dev_configure, -ENOTSUP);
【００５２】
図１０のフローチャートでは、「制御プレーンコア処理部３００の別スレッドからの要求には、未サポート応答するように設定」の箇所では、例えば、各種制御関数を「NULL」に設定し、「制御プレーンの別スレッドからの要求には未サポート応答する設定を解除」の箇所では、通常の制御関数に戻す。
ちなみに、本実施形態では、制御プレーンコア処理部３００では監視スレッド部３６６がインタフェースの個数分生成され、それらが性能に影響を及ぼすことが懸念されたが、本例のネットワーク装置１０にて上記の設定で性能影響は無視できる範囲（0.7%）であることが確認されている。
【００５３】
以上説明したように、本実施形態のネットワーク装置１０は、ＬＡＮカード１２０に異常が発生した場合に、その異常を検知し、影響範囲を限定しながらＬＡＮカード１２０の再起動動作を実行させることができる。
【符号の説明】
【００５４】
１…ネットワーク通信システム
１０…ネットワーク装置
１００…ＣＰＵ
１０２…メモリ
１０４…スロット
１２０…ＬＡＮカード
３００…制御プレーンコア処理部
３２０…上位エンジン処理部
３４０…ＬＡＮドライバ共通部
３６０…ＬＡＮドライバ
３６２…アクセス制御部
３６４…ダミーアクセス制御部
３６６…監視スレッド部
３６８…リセット処理部
４００…データプレーンコア処理部
４２０…上位エンジン処理部
４４０…ＬＡＮドライバ共通部
４６０…ＬＡＮドライバ
４６２…送信処理部
４６４…タイムアウトチェック部
４６６…ダミー送信処理部
４６８…受信処理部
４７０…ダミー受信処理部
【図１】
2017046283.tif 000003
【図２】
2017046283.tif 000004
【図３】
2017046283.tif 000005
【図４】
2017046283.tif 000006
【図５】
2017046283.tif 000007
【図６】
2017046283.tif 000008
【図７】
2017046283.tif 000009
【図８】
2017046283.tif 000010
【図９】
2017046283.tif 000011
【図１０】
2017046283.tif 000012