(57)【要約】【課題】仮想スイッチがバッファとして使う資源を有効に活用すること。【解決手段】受信パケットについてのフローの情報を仮想スイッチ２０がフローキャッシュ２３に登録する際に、登録部２７ａが、フローキャッシュ２３及び対応付テーブル２６に基づいて、当該フローの前段フローを特定する。そして、登録部２７ａは、特定した前段フローを含む情報を対応付テーブル２６に登録する。そして、探索部２７ｂが、仮想スイッチ２０がパケットを送信する際にパケットを送信する出力ポートが輻輳状態にあるとき、対応付テーブル２６に基づいて、送信するパケットについてのフローの大本のフローを特定して、大本のフローについて送信抑制指示を送信する。【選択図】図３
2019083469.tif 000002
【特許請求の範囲】
【請求項１】
フローと、該フローの出力ポートと、該フローの存在期間との対応を示す情報を記憶する第１記憶部と、
出力ポート毎に、フローと、該フローの入力ポートと、該フローの前段フローとの対応を示す情報を記憶する第２記憶部と、
受信パケットについてのフローに関する情報が前記第１記憶部に登録される際に、前記第１記憶部及び前記第２記憶部に基づいて、該フローの前段フローを特定し、特定した前段フローを含む情報を前記第２記憶部に登録する登録部と、
パケットが送信される際にパケットが送信される出力ポートが輻輳状態にあるとき、前記第２記憶部に基づいて、送信されるパケットについてのフローの大本のフローを特定する特定部と
を有することを特徴とする情報処理装置。
【請求項２】
前記登録部は、受信パケットについてのフローの入力ポートを出力ポートとするとともに前記存在期間が所定の閾値以下であるフローを前記第１記憶部を参照して特定し、特定したフローの出力ポート及び該特定したフローに対応付けられたエントリを前記第２記憶部から前段フローとして特定し、特定した前段フローと前記出力ポートを入力ポートとして含むエントリを作成して前記第２記憶部に登録し、
前記特定部は、送信するパケットについてのフローに対応する前段フローを前記第２記憶部を参照して特定し、特定した前段フローが外部からのフローとなるまで前記第２記憶部において前段フローを辿ることで前記大本のフローを特定する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第２記憶部は、優先度が付加された複数の前段フローを前段フロー群として記憶し、
前記登録部は、前段フロー群を含むエントリを作成する際に前記優先度を各前段フローに付加し、前段フロー群を優先度順に並べ替え、
前記特定部は、前記優先度の高い前段フローから前段フローを辿ることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記特定部は、前記大本のフローの入力ポートから対向装置に対して該大本のフローの送信抑制指示を送信して前記大本のフローの流量が減少したか否かを判定し、減少した場合には、前段フロー群から前記大本のフローの特定に使用した前段フロー以外を削除し、減少しなかった場合には、前記送信抑制指示を解除し、前段フロー群の中で次に優先度の高い前段フローを辿ることで別の大本のフローを特定することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
ネットワーク専用装置の機能をそれぞれ実現する複数の仮想ネットワーク機能部と、
前記複数の仮想ネットワーク機能部とパケットの送受信を行う中継部と
をさらに有することを特徴とする請求項１〜４のいずれか１つに記載の情報処理装置。
【請求項６】
前記第２記憶部は、フローと、該フローの入力ポートと、該フローの前段フローとの対応を示す管理テーブルを出力ポート番号毎に記憶し、ポート番号と管理テーブルへのポインタを対応付ける管理テーブルトップを記憶することを特徴とする請求項１〜５のいずれか１つに記載の情報処理装置。
【請求項７】
ポートをグループ化し、ポート番号とグループ番号の対応を示す第３記憶部をさらに有し、ポート番号の代わりにグループ番号を用いてポートを識別することを特徴とする請求項１〜６のいずれか１つに記載の情報処理装置。
【請求項８】
前記登録部は、フローのパケット数、バイト数、単位時間あたりの該パケット数の増加量、単位時間あたりの該バイト数の増加量を含む統計値に基づいて前記優先度を各前段フローに付加することを特徴とする請求項３に記載の情報処理装置。
【請求項９】
前記登録部は、前記第２記憶部に登録するエントリに対応するパケットと前記前段フローに対応するパケットの間のヘッダ情報の類似性に基づいて前記優先度を各前段フローに付加することを特徴とする請求項３に記載の情報処理装置。
【請求項１０】
前記登録部は、前記第２記憶部に登録するエントリに対応するパケットに含まれるペイロードの先頭と前記前段フローに対応するパケットのヘッダ情報との類似性に基づいて前記優先度を各前段フローに付加することを特徴とする請求項３に記載の情報処理装置。
【請求項１１】
コンピュータが、
フローと、該フローの出力ポートと、該フローの存在期間との対応を示す情報を第１記憶部に記憶し、
出力ポート毎に、フローと、該フローの入力ポートと、該フローの前段フローとの対応を示す情報を第２記憶部に記憶し、
受信パケットについてのフローに関する情報が前記第１記憶部に登録される際に、前記第１記憶部及び前記第２記憶部に基づいて、該フローの前段フローを特定し、特定した前段フローを含む情報を前記第２記憶部に登録し、
パケットが送信される際にパケットが送信される出力ポートが輻輳状態にあるとき、前記第２記憶部に基づいて、送信されるパケットについてのフローの大本のフローを特定する
処理を実行することを特徴とする情報処理方法。
【請求項１２】
コンピュータに、
フローと、該フローの出力ポートと、該フローの存在期間との対応を示す情報を第１記憶部に記憶し、
出力ポート毎に、フローと、該フローの入力ポートと、該フローの前段フローとの対応を示す情報を第２記憶部に記憶し、
受信パケットについてのフローに関する情報が前記第１記憶部に登録される際に、前記第１記憶部及び前記第２記憶部に基づいて、該フローの前段フローを特定し、特定した前段フローを含む情報を前記第２記憶部に登録し、
パケットが送信される際にパケットが送信される出力ポートが輻輳状態にあるとき、前記第２記憶部に基づいて、送信されるパケットについてのフローの大本のフローを特定する
処理を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
近年、ＮＦＶ（Network  Function  Virtualization）の利用が進んでいる。ＮＦＶは、従来専用装置で実現されていたネットワーク機能を汎用の情報処理装置上のソフトウェアで実装する技術である。ＮＦＶは、情報処理装置の仮想化技術を用いて複数の仮想ネットワーク機能（ＶＮＦ：Virtual  Network  Function）を単一の情報処理装置内で動作させ、仮想スイッチ等でＶＮＦ間、外部ＮＷ（ネットワーク）とＶＮＦの間を接続する。
【０００３】
仮想マシン（ＶＭ：Virtual  Machine）は通信の端点として動作することが一般的である。しかしながら、ＶＭ上でＶＮＦが動作する場合には、ＶＮＦは入力したパケット群を処理して再度ネットワークに送信する中間ノードとして動作するため、ＶＮＦが動作するＶＭの通信挙動はアプリケーションが動作するＶＭの通信挙動と異なる。
【０００４】
特に、あるフローを複数のＶＮＦで処理するサービスチェインにより、アプリケーションが動作するＶＭと比較してＶＭ（ＶＮＦ）間通信が発生しやすい。ここで、フローとは、通信の起点と通信の終点で特定されるパケット群の流れである。通信の起点及び終点は、例えば、情報処理装置とアプリケーションの組合せで特定される。
【０００５】
なお、他の装置から受信した送信停止命令に基づいて、出力ポートへのフレームの送信を一時的に停止することで、フレームの破棄を防止する技術がある。また、ネットワークに向けた通信の帯域制御が行われる仮想マシンのＭＡＣ（Media  Access  Control）アドレスを格納したＰＡＵＳＥフレーム（送信停止命令）を生成して仮想マシンが稼働する仮想マシンサーバに送出する技術がある。この技術によれば、仮想マシンサーバに高い負荷をかけることなく、帯域制御対象の仮想マシンを特定することに寄与することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−２４４５２４号公報
【特許文献２】特開２０１４−８６８９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＶＮＦが動作する情報処理装置の出口で、あるフローの送信レート制御を行っている場合、情報処理装置内でＰＡＵＳＥ伝播が発生する。ここで、ＰＡＵＳＥとは、送信側への送信抑制指示である。送信抑制指示には、ＰＡＵＳＥ以外にバックプレッシャ、輻輳通知（Congestion  Notification）等がある。図１２は、ＰＡＵＳＥ伝播により発生する問題を説明するための図である。図１２において、ＮＦＶ装置９１は、ＶＮＦ＃１〜ＶＮＦ＃３で表される３つのＶＮＦ３０及び仮想スイッチ９２が動作する情報処理装置である。
【０００８】
ＮＦＶ装置９１は、ｐＰ＃１及びｐＰ＃２で表される２つの物理ポート１０を有する。仮想スイッチ９２は、ｖＰ＃１〜ｖＰ＃８で表される８つの仮想ポート２１を有する。ＶＮＦ３０は、ｖＮＩＣ＃１及びｖＮＩＣ＃２で表される２つの仮想ネットワークインタフェースカード３１を有する。ＮＷ−Ａ及びＮＷ−Ｂは外部ネットワーク２である。
【０００９】
ＮＷ−Ａから、ｐＰ＃１、ｖＰ＃１、ｖＰ＃３、ｖＮＩＣ＃１、ＶＮＦ＃１、ｖＮＩＣ＃２、ｖＰ＃４、ｖＰ＃５、ｖＮＩＣ＃１、ＶＮＦ＃２、ｖＮＩＣ＃２、ｖＰ＃６、ｖＰ＃２、ｐＰ＃２を経由してフローＡがＮＷ−Ｂに流れる。また、ＮＷ−Ａから、ｐＰ＃１、ｖＰ＃１、ｖＰ＃７、ｖＮＩＣ＃１、ＶＮＦ＃３、ｖＮＩＣ＃２、ｖＰ＃８、ｖＰ＃２、ｐＰ＃２を経由してフローＢがＮＷ−Ｂに流れる。
【００１０】
ｖＰ＃２でフローＡの輻輳が発生すると、仮想スイッチ９２からＶＮＦ＃２へＰＡＵＳＥが送信され、ＶＮＦ＃２から仮想スイッチ９２へＰＡＵＳＥが送信され、仮想スイッチ９２からＶＮＦ＃１へＰＡＵＳＥが送信され、ＰＡＵＳＥ伝播が発生する。ＰＡＵＳＥを受信したＶＮＦ３０及び仮想スイッチ９２は、送信を抑制し、抑制した送信レート以上の受信があると、パケットをバッファに退避する。バッファがフルになるとパケットは廃棄される。
【００１１】
このように、フローＡの輻輳によるＰＡＵＳＥ伝播が発生すると、フローＡに沿う経路のバッファがフローＡで占拠され、バッファとして使われる資源が有効に活用されないという問題がある。また、ＶＮＦ＃１のようにＰＡＵＳＥ非対応のＶＮＦ３０があると、バッファがフルになり、パケット廃棄を回避することができない。
【００１２】
本発明は、１つの側面では、バッファとして使われる資源を有効に活用することを目的とする。
【課題を解決するための手段】
【００１３】
１つの態様では、情報処理装置は、第１記憶部と第２記憶部と登録部と特定部とを有する。前記第１記憶部は、フローと、該フローの出力ポートと、該フローの存在期間との対応を示す情報を記憶する。前記第２記憶部は、出力ポート毎に、フローと、該フローの入力ポートと、該フローの前段フローとの対応を示す情報を記憶する。前記登録部は、受信パケットについてのフローに関する情報が前記第１記憶部に登録される際に、前記第１記憶部及び前記第２記憶部に基づいて、該フローの前段フローを特定し、特定した前段フローを含む情報を前記第２記憶部に登録する。前記特定部は、パケットが送信される際にパケットが送信される出力ポートが輻輳状態にあるとき、前記第２記憶部に基づいて、送信されるパケットについてのフローの大本のフローを特定する。
【発明の効果】
【００１４】
１つの側面では、本発明は、バッファとして使われる資源を有効に活用することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施例に係るＮＦＶ装置による送信抑制指示を説明するための図である。
【図２Ａ】図２Ａは、ＶＮＦにおけるパケット変換例を示す図である。
【図２Ｂ】図２Ｂは、ＶＮＦにおける他のパケット変換例を示す図である。
【図３】図３は、仮想スイッチの機能構成を示す図である。
【図４】図４は、高速中継部と低速中継部を説明するための図である。
【図５Ａ】図５Ａは、フローの例を示す図である。
【図５Ｂ】図５Ｂは、フローキャッシュ及び対応付テーブルの例を示す図である。
【図６】図６は、ポート・グループ対応表の例を示す図である。
【図７】図７は、仮想スイッチによる受信処理のフローを示すフローチャートである。
【図８】図８は、対応付テーブル処理のフローを示すフローチャートである。
【図９】図９は、送信処理のフローを示すフローチャートである。
【図１０】図１０は、Ｔｒａｃｅ（Ｅ）の処理のフローを示すフローチャートである。
【図１１】図１１は、仮想スイッチプログラムを実行するコンピュータのハードウェア構成を示す図である。
【図１２】図１２は、ＰＡＵＳＥ伝播により発生する問題を説明するための図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する情報処理装置、情報処理方法及びプログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１７】
まず、実施例に係るＮＦＶ装置による送信抑制指示について説明する。図１は、実施例に係るＮＦＶ装置による送信抑制指示を説明するための図である。図１において、ＮＦＶ装置１は、ＶＮＦ＃１〜ＶＮＦ＃３で表される３つのＶＮＦ３０及び仮想スイッチ２０が動作する情報処理装置である。
【００１８】
ＮＦＶ装置１は、ｐＰ＃１及びｐＰ＃２で表される２つの物理ポート１０を有する。仮想スイッチ２０は、ｖＰ＃１〜ｖＰ＃８で表される８つの仮想ポート２１を有する。ＶＮＦ３０は、ｖＮＩＣ＃１及びｖＮＩＣ＃２で表される２つの仮想ネットワークインタフェースカード３１を有する。ＮＷ−Ａ及びＮＷ−Ｂは外部ネットワーク２である。
【００１９】
ＮＷ−Ａから、ｐＰ＃１、ｖＰ＃１、ｖＰ＃３、ｖＮＩＣ＃１、ＶＮＦ＃１、ｖＮＩＣ＃２、ｖＰ＃４、ｖＰ＃５、ｖＮＩＣ＃１、ＶＮＦ＃２、ｖＮＩＣ＃２、ｖＰ＃６、ｖＰ＃２、ｐＰ＃２を経由してフローＡがＮＷ−Ｂに流れる。また、ＮＷ−Ａから、ｐＰ＃１、ｖＰ＃１、ｖＰ＃７、ｖＮＩＣ＃１、ＶＮＦ＃３、ｖＮＩＣ＃２、ｖＰ＃８、ｖＰ＃２、ｐＰ＃２を経由してフローＢがＮＷ−Ｂに流れる。
【００２０】
仮想スイッチ２０の出口ポートｖＰ＃２でフローの輻輳が発生すると、仮想スイッチ２０は、大本のフローを特定し、特定した大本のフローについて、ｖＰ＃１からＰＡＵＳＥをＮＷ−Ａに送出する。ここで、大本のフローとは、入口ポートｖＰ＃１において、出口ポートｖＰ＃２のフローと同じフローである。
【００２１】
したがって、仮想スイッチ２０は、ＮＦＶ装置１内でのＰＡＵＳＥ伝播を防ぐことでバッファの使用量を減らすことができ、バッファとして使われる資源を有効に活用することができる。また、仮想スイッチ２０は、ＶＮＦ３０がＰＡＵＳＥに対応していない場合でも、バッファフルによるパケット廃棄を回避することができる。
【００２２】
なお、図１において、ｖＰ＃２において出力フローＡの輻輳が発生すると、仮想スイッチ２０は、ｖＰ＃１における入力フローＡを特定する。入力フローＡのパケットと出力フローＡのパケットのヘッダ情報が同じであれば、出力フローＡから簡単に入力フローＡを特定することができる。しかしながら、ＶＮＦ３０は、入力したパケットのヘッダ情報を変換してパケットを出力する場合があり、ｖＰ＃２における出力フローＡのヘッダ情報とｖＰ＃１における入力フローＡのヘッダ情報は異なる場合がある。
【００２３】
図２Ａは、ＶＮＦ３０におけるパケット変換例を示す図である。図２Ａは、ＶＮＦ３０がＮＡＰＴ（ＮＡＴ（Network  Address  Translation）＆ＰＡＴ（Port  Address  Translation））の場合を示す。図２Ａにおいて、ＰＣ＃Ａ〜ＰＣ＃Ｃは、内部ネットワークで接続されたＰＣ（Personal  Computer）であり、ＮＡＰＴ対応ルータ３及びインターネット４を介してＰＣ＃Ｄに接続される。また、ＮＡＰＴ対応ルータ３が有するＮＡＰＴテーブルにおいて、例えば、ＰＣ＃Ａの内部ＩＰ（Internet  Protocol）アドレス「ＰＩＰ＿Ａ」が外部ＩＰアドレス「ＧＩＰ＿Ｒ」に対応付けられ、内部ポート番号「１０２４」が外部ポート番号「５０００」に対応付けられる。
【００２４】
ＰＣ＃ＡからＰＣ＃ＤのＷｅｂサーバ（宛先ポート番号＝８０）にアクセスする場合、ＮＡＰＴ対応ルータ３は、ＮＡＰＴテーブルを用いて送信パケットの送信元ＩＰを「ＰＩＰ＿Ａ」から「ＧＩＰ−Ｒ」に変換し、送信元ポート番号を「１０２４」から「５０００」に変換する。
【００２５】
このように、ＶＮＦ３０がＮＡＰＴの場合、送信パケットの送信元ＩＰと送信元ポート番号が変換される。なお、図２Ａにおいて、宛先ＭＡＣ及び送信元ＭＡＣは、ルータ機能で変換される。ＭＡＣ＿ＮＨはルータで解決されたネクストホップのＭＡＣアドレスであり、ＭＡＣ＿ＧＲはＧＩＰ＿Ｒに対応するＭＡＣアドレスである。
【００２６】
図２Ｂは、ＶＮＦ３０における他のパケット変換例を示す図である。図２Ｂは、ＶＮＦ３０がＶｘＬＡＮ（Virtual  eXtensibe  Local  Area  Network）ゲートウェイの場合を示す。ＶｘＬＡＮは、カプセル化によりＬ２ネットワークをルータを越えて延伸可能とするネットワーク仮想化技術の一つである。
【００２７】
ＶｘＬＡＮではＯＳ（Operating  System）が送信するオリジナルパケットがＵＤＰ（User  Datagram  Protocol）でカプセル化される。すなわち、オリジナルパケットは外部ヘッダが付加されてＬ２／Ｌ３ネットワークで転送される。カプセル化及びカプセル解除は、ＶｘＬＡＮ対応のエンドポイント（ＶＴＥＰ：Virtual  Tunnel  End  Point）やゲートウェイ（ＧＷ）で行われる。
【００２８】
カプセル化では、オリジナルパケットの宛先に応じて送信先のＶＴＥＰ又はＧＷのアドレス解決が実施され、自ＶＴＥＰ又はＧＷアドレスを送信元とする外部ヘッダが付加される。外部ヘッダには、宛先ＶＴＥＰＭＡＣ、送信元ＶＴＥＰＭＡＣ、宛先ＶＴＥＰＩＰ、送信元ＶＴＥＰＩＰ、ＵＤＰヘッダ、ＶｘＬＡＮヘッダが含まれる。
【００２９】
このように、ＶＮＦ３０がＶｘＬＡＮゲートウェイの場合、オリジナルパケットに宛先ＶＴＥＰＭＡＣ、送信元ＶＴＥＰＭＡＣ、宛先ＶＴＥＰＩＰ、送信元ＶＴＥＰＩＰ、ＵＤＰヘッダ、ＶｘＬＡＮヘッダが付加される。
【００３０】
次に、仮想スイッチ２０の機能構成について説明する。図３は、仮想スイッチ２０の機能構成を示す図である。図３に示すように、仮想スイッチ２０は、ｖＰ＃１〜ｖＰ＃５で表される５つの仮想ポート２１と、フローテーブル群２２と、フローキャッシュ２３と、高速中継部２４と、低速中継部２５と、対応付テーブル２６と、フローキャッシュ制御部２７とを有する。なお、図３では、説明の便宜上、図１に示した８つの仮想ポート２１のうち５つだけを示す。また、仮想ポート２１の数は８つ未満でも９つ以上でもよい。
【００３１】
仮想ポート２１は、パケットの入力及び出力に用いられるインタフェースである。ｖＰ＃１はｐＰ＃１で表される物理ポート１０に接続され、ｖＰ＃２はｐＰ＃２で表される物理ポート１０に接続される。ｐＰ＃１及びｐＰ＃２は、ＮＩＣ１０ａに含まれる。
【００３２】
フローテーブル群２２は、フローに対するアクションを定義する一連のフローテーブルである。アクションとしては、例えば、いずれかの仮想ポート２１からのパケットの出力、次に使用するフローテーブルの指定がある。フローに対するアクションは、フローテーブルのチェインを用いて特定される。フローキャッシュ２３は、フローテーブル群２２のキャッシュである。なお、フローは受信パケットから特定される。したがって、フローテーブル群２２は、受信パケットに対するアクションを定義する一連のテーブルといえる。
【００３３】
高速中継部２４は、パケットを受信すると、フローキャッシュ２３を用いてパケットに対するアクションを決定して実行する。パケットに対するアクションがフローキャッシュ２３に登録されていない場合には、高速中継部２４は、低速中継部２５にパケットを渡してアクションの決定を依頼する。低速中継部２５は、フローテーブル群２２を用いて、パケットに対するアクションを決定する。
【００３４】
図４は、高速中継部２４と低速中継部２５を説明するための図である。図４に示すように、低速中継部２５では、複数のブリッジ（論理スイッチ）を含む仮想トポロジが用いられ、ブリッジ毎に一連のフローテーブルが用いられる。低速中継部２５は、フローテーブルのチェインであるフローパイプラインを用いてフローに対するアクションを決定することで、仮想スイッチ２０の柔軟なトポロジ構成に対応することができる。
【００３５】
一方、高速中継部２４は、フローパイプラインを用いて決定されたアクションとフローとの関係を単一フローテーブルとして表すフローキャッシュ２３を用いることで、仮想スイッチ２０を単一のブリッジとみなし、高速にアクションを決定することができる。
【００３６】
低速中継部２５は、決定したアクションに関する情報を高速中継部２４に渡す。高速中継部２４は、決定されたアクションを実行するとともに、フロー及びアクションの情報をフローキャッシュ２３に登録する。
【００３７】
対応付テーブル２６は、前後のフローの対応関係を管理するテーブルである。対応付テーブル２６には、フローに関する情報とフローの前段フロー候補についての情報が登録される。ここで、前段フロー候補とは、フローの入力ポートを出力ポートとし、フローキャッシュ２３での存在期間が閾値以下のフローであり、フローの前段のフローである可能性があるフロー群である。フロー群に含まれるフローには優先度が付けられる。
【００３８】
フローキャッシュ制御部２７は、フローキャッシュ２３と対応付テーブル２６を用いて、ＮＦＶ装置１の出口ポートで輻輳が発生したフローにＮＦＶ装置１の入口ポートにおいて対応するフローを特定する。フローキャッシュ制御部２７は、登録部２７ａと探索部２７ｂを有する。
【００３９】
登録部２７ａは、高速中継部２４がフローキャッシュ２３にフローの情報を登録する際に、フローキャッシュ２３と対応付テーブル２６に基づいて、フローの情報と前段フロー候補情報を対応付テーブル２６に登録する。
【００４０】
探索部２７ｂは、外部出力ポートで輻輳が発生したフローについて、対応付テーブル２６の前段フローを優先度に基づいて順に辿ることによって、大本のフローを特定し、大本のフローの外部入力ポートから大本のフローの送信抑制指示を送信する。
【００４１】
そして、探索部２７ｂは、送信抑制指示により抑制フローの流量が下がった場合には、対応付テーブル２６において辿られた前段フローの関係が正しいと判断し、前段フロー候補から他の候補を削除する。一方、送信抑制指示により抑制フローの流量が下がらなかった場合には、探索部２７ｂは、対応付テーブル２６において辿られた前段フローの関係が正しくないと判断し、送信抑制指示を解除した上で、次の優先度の候補を用いて大本のフローを特定する。
【００４２】
図５Ａ及び図５Ｂは、フローキャッシュ制御部２７による処理の例を示す図である。図５Ａはフローの例を示し、図５Ｂはフローキャッシュ２３及び対応付テーブル２６の例を示す。図５Ｂにおいて、管理テーブルトップ及び出力ポート番号毎の管理テーブルが対応付テーブル２６である。
【００４３】
図５Ａに示すように、外部から入力されてＶＮＦ＃１で処理されるフローＡが、ＶＮＦ＃１で処理されて外部へ送信されるフローＡ’に変換される。このとき、フローキャッシュ制御部２７はフローＡ’の大本フローがフローＡである対応関係を作成する。フローＡの入力ポートはｖＰ＃１であり、出力ポートはｖＰ＃３である。フローＡ’の入力ポートはｖＰ＃３であり、出力ポートはｖＰ＃２である。
【００４４】
図５Ｂに示すように、フローキャッシュ２３には、番地、ルール、アクション、存在期間、統計値及びポインタがフロー毎に登録される。番地は、フローが登録される位置を示す。ルールは、受信パケットからフローを識別するために用いられるマッチングルールである。図５Ｂでは、説明の便宜上、フローＡ、フローＡ’のようにルールから識別されたフローの名前が示されている。
【００４５】
アクションは、フローに対するアクションを示す。例えば、「Ｏｕｔｐｕｔ：３」は、番号＃３のポート（ｖＰ＃３）からパケットを送信することを示す。存在期間は、フローがフローキャッシュ２３に登録されてから経過した時間である。単位は、例えばミリ秒である。統計値は、フローのパケット数、バイト数、パケット数の単位時間あたりの増加量、バイト数の単位時間あたりの増加量である。ポインタは、出力ポート番号に対応する管理テーブルでのフローの登録位置へのポインタである。
【００４６】
管理テーブルトップは、番地と管理テーブルへのポインタを対応付ける。番地はポート番号であるので、管理テーブルトップは、ポート番号と管理テーブルへのポインタを対応付ける。
【００４７】
管理テーブルは、出力ポート番号毎に設けられる。各管理テーブルには、番地、入力ポート番号、フロー情報、統計値、前段候補リスト、ポインタがフロー毎に登録される。番地は、フローが登録される位置を示す。入力ポート番号は、フローが入力する仮想ポート２１の番号である。フロー情報は、フローキャッシュ２３のルールである。
【００４８】
統計値は、フローキャッシュ２３の統計値である。フローキャッシュ２３の統計値は、一定間隔、又は、フローキャッシュ２３からエージングによりフローが削除される際に管理テーブルに反映される。前段候補リストは、前段フロー候補が登録された管理テーブルへのポインタ群である。ポインタは、フローのフローキャッシュ２３での位置を示すポインタである。
【００４９】
図５Ａは、フローＡに関する情報がフローキャッシュ２３と管理テーブルに登録されており、フローＡ’に関する情報をフローキャッシュ２３に登録する場合を示す。フローＡの出力ポート番号は「３」であるので、出力ポート番号＃３に対応する管理テーブルにフローＡの情報が登録されている。
【００５０】
フローＡ’がフローキャッシュ２３に登録されると、登録部２７ａは、フローＡ’の出力ポート番号が「２」であるので、出力ポート番号＃２に対応する管理テーブルにフローＡ’の情報を登録する。このとき、登録部２７ａは、フローＡ’の入力ポート番号が「３」であるので、フローキャッシュ２３から出力ポート番号が「３」で存在期間が閾値以下のフローを前段フロー候補として抽出する。
【００５１】
閾値を「５」とすると、フローＢは存在期間が「１５」であるため除外され、フローＡが前段フロー候補として抽出される。そして、登録部２７ａは、出力ポート番号＃２に対応する管理テーブルのフローＡ’の前段候補リストに出力ポート番号＃３に対応する管理テーブルのフローＡへのポインタを設定する。
【００５２】
このように、フローがフローキャッシュ２３に登録される際に、登録部２７ａが前段フロー候補を特定し、フローの情報を管理テーブルに登録することで、探索部２７ｂは輻輳出力フローから大本の入力フローを辿ることができる。
【００５３】
なお、ＶＮＦ３０は、入力したパケットのヘッダ情報を変換してパケットを出力する場合があるため、同じフローのパケットでもヘッダ情報が異なる。したがって、パケットのヘッダ情報から特定されたフローに関する情報が登録されるフローキャッシュ２３及び対応付テーブル２６では、図５Ａに示したフローＡとフローＡ’のように、同じフローが異なるフローとして登録される。
【００５４】
また、登録部２７ａは、前段フロー候補が複数の場合に、各前段フロー候補に所定のアルゴリズムに従って優先度を付加する。例えば、ＶＮＦ３０で変換される前後で、前段フローと後段フローには統計値に関して類似性があることが期待できるので、登録部２７ａは、統計値が管理テーブルに反映されたときに統計値の類似性に基づいて各前段フロー候補に優先度を付加する。
【００５５】
また、ルータやロードバランサ等、ヘッダ情報の一部（宛先アドレス等）のみ変換するＶＮＦ３０があり、ヘッダ情報のその他の部分の類似性に基づき前段フローと後段フローの対応関係を把握できる可能性が高い。そこで、登録部２７ａは、ヘッダ情報の類似性に基づいて各前段フロー候補に優先度を付加してもよい。
【００５６】
また、ＶｘＬＡＮやＮＶＧＲＥ（Network  Virtualization  using  Generic  Routing  Encapsulation）等、オーバーレイネットワーク技術では元々のパケットをＩＰパケット等でカプセル化し、変換前のパケットのヘッダ情報がペイロード先頭に存在するプロトコルがある。したがって、変換前後のヘッダ情報とペイロード先頭の同一性に基づき前段フローと後段フローの対応関係を把握することができる。そこで、登録部２７ａは、前段フローのヘッダ情報と後段フローのペイロードの同一性に基づいて各前段フロー候補に優先度を付加してもよい。
【００５７】
あるいは、登録部２７ａは、以上の組合せに基づいて各前段フロー候補に優先度を付加してもよい。
【００５８】
なお、図５Ａでは、ＶＮＦ３０は仮想スイッチ２０と１つの仮想ポート２１で接続されるが、ＶＮＦ３０は仮想スイッチ２０と複数の仮想ポート２１で接続されてもよい。このような場合、フローキャッシュ制御部２７は、１個以上の仮想ポート２１からなるポートグループを用いて対応付テーブル２６を管理する。フローキャッシュ制御部２７は、同一ＶＮＦ３０に接続される仮想ポート２１は同一グループとなるようにグループ化を行う。
【００５９】
そして、フローキャッシュ制御部２７は、仮想ポート２１の番号とグループ番号を対応付けたポート・グループ対応表を記憶する。そして、フローキャッシュ制御部２７は、入力ポートと出力ポートの対応関係を検査する際にポート・グループ対応表からグループ番号を取得し、グループ番号で比較を行うことで、ＶＮＦ３０で変換する前後のフローの対応関係を作成することができる。対応付テーブル２６では、仮想ポート２１の番号の代わりにグループ番号が用いられる。
【００６０】
図６は、ポート・グループ対応表の例を示す図である。図６では、ｖＰ＃１〜ｖＰ＃６が４つのグループにグループ化される。グループ＃１にはｖＰ＃１が含まれ、グループ＃２にはｖＰ＃２が含まれ、グループ＃３にはｖＰ＃３とｖＰ＃４が含まれ、グループ＃４にはｖＰ＃５とｖＰ＃６が含まれる。
【００６１】
ポート・グループ対応表では、ポート番号「１」がグループ番号「１」に対応付けられ、ポート番号「２」がグループ番号「２」に対応付けられる。また、ポート番号「３」及び「４」がグループ番号「３」に対応付けられ、ポート番号「５」及び「６」がグループ番号「４」に対応付けられる。
【００６２】
次に、仮想スイッチ２０による処理のフローについて図７〜図１１を用いて説明する。図７は、仮想スイッチ２０による受信処理のフローを示すフローチャートである。図７に示すように、仮想スイッチ２０は、仮想ポート２１に受信パケットがあるか否かを判定し（ステップＳ１）、受信パケットがない間はステップＳ１の処理を繰り返す。
【００６３】
一方、仮想ポート２１に受信パケットがある場合には、仮想スイッチ２０は、受信パケットのヘッダ情報に基づきフローキャッシュ２３を検索する（ステップＳ２）。そして、フローキャッシュ２３にヒットした場合には、仮想スイッチ２０は、フローキャッシュ２３の該当エントリのアクションを適用し（ステップＳ３）、受信パケットを送信する送信処理を行う（ステップＳ４）。そして、仮想スイッチ２０は、ステップＳ１へ戻る。
【００６４】
一方、ステップＳ２においてフローキャッシュ２３にヒットしなかった場合には、仮想スイッチ２０は、フローパイプライン処理を実行し、最終的なアクションを取得する（ステップＳ５）。そして、フローパイプライン処理でマッチがあり、最終的なアクションを取得した場合には、仮想スイッチ２０は、取得アクションを適用し（ステップＳ６）、送信処理を行う（ステップＳ７）。そして、仮想スイッチ２０は、受信パケットに対応するルール及びアクションをフローキャッシュ２３に登録し（ステップＳ８）、対応付テーブル２６に情報を登録する対応付テーブル処理を行う（ステップＳ９）。そして、仮想スイッチ２０は、ステップＳ１へ戻る。
【００６５】
一方、フローパイプライン処理でマッチがない場合には、仮想スイッチ２０は、受信パケットを廃棄し（ステップＳ１０）、ステップＳ１へ戻る。
【００６６】
このように、仮想スイッチ２０は、ルール及びアクションをフローキャッシュ２３に登録する際に対応付テーブル２６に情報を登録することで、出力フローに輻輳が発生した場合に、大本の入力フローを特定することができる。
【００６７】
図８は、対応付テーブル処理のフローを示すフローチャートである。図８に示すように、登録部２７ａは、処理中パケットの入力ポート番号Ｐｉと出力ポート番号Ｐｏを取得し（ステップＳ２１）、Ｐｉは外部ポートの番号か否かを判定する（ステップＳ２２）。
【００６８】
そして、Ｐｉが外部ポートの番号でない場合には、登録部２７ａは、フローキャッシュ２３から存在期間が指定閾値以下かつ出力ポート番号がＰｉのエントリＥを全て取得する（ステップＳ２３）。そして、登録部２７ａは、取得エントリ群のポインタフィールドの値を前段候補リストに設定し（ステップＳ２４）、所定のアルゴリズムに従って前段候補リストを優先度順に並べ替える（ステップＳ２５）。一方、Ｐｉが外部ポートの番号である場合には、登録部２７ａは、前段候補リストに外部ポートを示す値を設定する（ステップＳ２６）。
【００６９】
そして、登録部２７ａは、対応付テーブル２６の管理テーブルトップからＰｏに対応する管理テーブルを取得し（ステップＳ２７）、取得した管理テーブルにＥのルール、Ｐｉ、前段候補リスト、Ｅへのポインタを含むエントリを登録する（ステップＳ２８）。
【００７０】
このように、登録部２７ａが、フローキャッシュ２３から前段フローの候補を取り出し、前段フローの候補に関する情報を対応付テーブル２６に前段候補リストとして登録することで、探索部２７ｂは、大本の入力フローを特定することができる。
【００７１】
図９は、送信処理のフローを示すフローチャートである。図９に示すように、仮想スイッチ２０は、処理中パケットの入力ポート番号Ｐｉと出力ポート番号Ｐｏを取得し（ステップＳ４１）、フローの情報及び送信制御設定情報から当該フローの出力キューを決定する（ステップＳ４２）。
【００７２】
そして、仮想スイッチ２０は、出力キューがフルか否かを判定し（ステップＳ４３）、フルの場合には、当該受信パケットを廃棄する（ステップＳ４４）。一方、出力キューがフルでない場合には、仮想スイッチ２０は、出力キューの使用量が指定の閾値以上であるか否かを判定し（ステップＳ４５）、指定の閾値以上でない場合には、処理中パケットを出力キューに追加する（ステップＳ４６）。
【００７３】
一方、出力キューの使用量が指定の閾値以上である場合には、仮想スイッチ２０は、対応付テーブル２６の管理テーブルトップからＰｏに対応する管理テーブルを取得する（ステップＳ４７）。そして、仮想スイッチ２０は、取得した管理テーブルからＰｉ、当該フローの情報を用いて処理中パケットに対応するフローのエントリを取得し（ステップＳ４８）、取得したエントリをＥとしてＴｒａｃｅ（Ｅ）を別スレッドで起動する（ステップＳ４９）。ここで、Ｔｒａｃｅ（Ｅ）は、探索部２７ｂが対応付テーブル２６の前段フローを優先度に基づいて順に辿ることによって、Ｅのフローの大本のフローを特定し、大本のフローの外部入力ポートから大本のフローの送信抑制指示を送信する処理である。
【００７４】
図１０は、Ｔｒａｃｅ（Ｅ）の処理のフローを示すフローチャートである。図１０に示すように、探索部２７ｂは、エントリＥのフロー情報Ｆと入力ポート番号Ｐを抽出し（ステップＳ５１）、エントリＥの前段候補リストが空か否かを判定する（ステップＳ５２）。そして、エントリＥの前段候補リストが空の場合には、探索部２７ｂは、戻り値をＦＡＬＳＥとし（ステップＳ５３）、処理を終了する。
【００７５】
一方、エントリＥの前段候補リストが空でない場合には、探索部２７ｂは、エントリＥの前段候補リストから最も優先度の高いエントリの情報を取り出しＥｎとする（ステップＳ５４）。そして、探索部２７ｂは、Ｅｎが外部ポートを示す値であるか否かを判定し（ステップＳ５５）、外部ポートを示す値でない場合には、Ｔｒａｃｅ（Ｅｎ）を再帰呼び出しで実行する（ステップＳ５６）。
【００７６】
そして、探索部２７ｂは、Ｔｒａｃｅ（Ｅｎ）の戻り値がＴＲＵＥであるか否かを判定し（ステップＳ５７）、ＴＲＵＥである場合には、フローＦの流量を確認する（ステップＳ５８）。そして、探索部２７ｂは、フローＦの流量が減少しているか否かを判定し（ステップＳ５９）、減少していない場合には、フローＦｒの送信抑制の解除指示パケットを仮想ポートＰｒから送信する（ステップＳ６０）。そして、探索部２７ｂは、エントリＥの前段候補リストからＥｎを削除し（ステップＳ６１）、ステップＳ５２へ戻る。
【００７７】
一方、フローＦの流量が減少している場合には、探索部２７ｂは、エントリＥの前段候補リストからＥｎ以外の要素を全て削除し（ステップＳ６２）、戻り値をＴＲＵＥとし（ステップＳ６３）、処理を終了する。また、ステップＳ５７において、Ｔｒａｃｅ（Ｅｎ）の戻り値がＴＲＵＥでない場合には、探索部２７ｂは、ステップＳ６１へ移動する。
【００７８】
また、ステップＳ５５において、Ｅｎが外部ポートを示す値である場合には、探索部２７ｂは、グローバル変数ＦｒにＦをグローバル変数ＰｒにＰを代入し、仮想ポートＰからフローＦの送信抑制指示パケットを送信する（ステップＳ６４）。そして、探索部２７ｂは、戻り値をＴＲＵＥとし（ステップＳ６３）、処理を終了する。
【００７９】
このように、探索部２７ｂは、優先度に基づいて前段候補リストを大本のフローまで辿り、大本のフローの入力ポートから大本のフローの送信促成指示パケットを送信することで、送信抑制指示が仮想スイッチ２０内で伝播することを防ぐことができる。
【００８０】
上述してきたように、実施例では、受信パケットについてのフローの情報を仮想スイッチ２０がフローキャッシュ２３に登録する際に、登録部２７ａが、フローキャッシュ２３及び対応付テーブル２６に基づいて、当該フローの前段フローを特定する。そして、登録部２７ａは、特定した前段フローを含む情報を対応付テーブル２６に登録する。そして、探索部２７ｂが、仮想スイッチ２０がパケットを送信する際にパケットを送信する出力ポートが輻輳状態にあるとき、対応付テーブル２６に基づいて、送信するパケットについてのフローの大本のフローを特定する。そして、探索部２７ｂは、大本のフローについて送信抑制指示を送信する。
【００８１】
したがって、仮想スイッチ２０は、送信抑制指示が仮想スイッチ２０内で伝播することを防ぐことができ、バッファとして使われる資源を有効に活用することができる。また、送信抑制指示非対応のＶＮＦ３０がＮＦＶ装置１で動作する場合にも、仮想スイッチ２０は、出力ポートの輻輳に対応することができる。
【００８２】
また、実施例では、登録部２７ａは、受信パケットについてのフローの入力ポートを出力ポートとし、存在期間が所定の閾値以下であるフローをフローキャッシュ２３を参照して特定する。そして、登録部２７ａは、特定したフローの出力ポート及び該特定したフローに対応付けられたエントリを対応付テーブル２６から前段フローとして特定し、特定した前段フローと出力ポートを入力ポートとして含むエントリを作成し、対応付テーブル２６に登録する。そして、探索部２７ｂは、送信パケットについてのフローに対応する前段フローを対応付テーブル２６を参照して特定し、特定した前段フローが外部からのフローとなるまで対応付テーブル２６において前段フローを辿ることで大本のフローを特定する。したがって、探索部２７ｂは、大本のフローを正確に特定することができる。
【００８３】
また、実施例では、対応付テーブル２６の前段候補リストには前段フローの候補が優先付されて並べられ、登録部２７ａは、前段候補リストに含まれる各前段フローの候補に優先度を付加し、前段候補リストを優先度で並べ替えて対応付テーブル２６に登録する。そして、探索部２７ｂは、優先度の高い前段フローから前段フローを辿る。したがって、探索部２７ｂは、大本のフローを効率良く特定することができる。
【００８４】
また、実施例では、探索部２７ｂは、大本のフローの入力ポートから対向装置に対して大本のフローの送信抑制指示を送信して大本のフローの流量が減少したか否かを判定する。そして、探索部２７ｂは、大本のフローの流量が減少した場合には、前段候補リストから大本のフローの特定に使用した前段フロー以外を削除する。一方、大本のフローの流量が減少しなかった場合には、探索部２７ｂは、送信抑制指示を解除し、前段フロー群の中で次に優先度の高い前段フローを辿ることで別の大本のフローを特定する。したがって、探索部２７ｂは、大本のフローを確実に特定することができる。
【００８５】
また、実施例では、仮想スイッチ２０は、複数のＶＮＦ３０との間でパケットの送受信を行うため、ＶＭ上で別のアプリケーションが動作する場合と比較して、通信量が多く、より多くのバッファを使用する。したがって、仮想スイッチ２０は、仮想スイッチ２０内での送信抑制指示の伝播をなくすことで、バッファとして使われる資源をより有効に活用することができる。
【００８６】
また、実施例では、仮想スイッチ２０は、管理テーブルトップと複数の管理テーブルを用いて対応付テーブル２６を実現するので、効率良く対応付テーブル２６を実現することができる。
【００８７】
また、実施例では、仮想スイッチ２０は、仮想ポート２１をグループ化し、ポート番号とグループ番号の対応を示すポート・グループ対応表を有してもよいので、１つのＶＮＦ３０と複数の仮想ポート２１で接続することができる。
【００８８】
また、実施例では、登録部２７ａは、例えば、フローのパケット数、バイト数、単位時間あたりの該パケット数の増加量、単位時間あたりの該バイト数の増加量を含む統計値に基づいて優先度を各前段フローに付加するので、適切な優先度を付加することができる。
【００８９】
また、実施例では、登録部２７ａは、例えば、対応付テーブル２６に登録するフローに対応するパケットと前段フローに対応するパケットの間のヘッダ情報の類似性に基づいて優先度を各前段フローに付加するので、適切な優先度を付加することができる。
【００９０】
また、実施例では、登録部２７ａは、例えば、対応付テーブル２６に登録するフローに対応するパケットに含まれるペイロードの先頭と前段フローに対応するパケットのヘッダ情報との類似性に基づいて優先度を各前段フローに付加する。したがって、登録部２７ａは、適切な優先度を付加することができる。
【００９１】
なお、実施例では、仮想スイッチ２０について説明したが、仮想スイッチ２０は、同様の機能を有する仮想スイッチプログラムにより実現される。そこで、仮想スイッチプログラムを実行するコンピュータについて説明する。
【００９２】
図１１は、仮想スイッチプログラムを実行するコンピュータのハードウェア構成を示す図である。図１１に示すように、コンピュータ５０は、メインメモリ５１と、ＣＰＵ（Central  Processing  Unit）５２と、ＬＡＮインタフェース５３と、ＨＤＤ（Hard  Disk  Drive）５４とを有する。また、コンピュータ５０は、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【００９３】
メインメモリ５１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ５２は、メインメモリ５１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラを有するチップセットを含む。
【００９４】
ＬＡＮインタフェース５３は、コンピュータ５０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ５４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【００９５】
ＬＡＮインタフェース５３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【００９６】
そして、コンピュータ５０において実行される仮想スイッチプログラムは、コンピュータ５０により読み出し可能な記録媒体の一例であるＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読み出されてコンピュータ５０にインストールされる。あるいは、仮想スイッチプログラムは、ＬＡＮインタフェース５３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ５０にインストールされる。そして、インストールされた仮想スイッチプログラムは、ＨＤＤ５４に記憶され、メインメモリ５１に読み出されてＣＰＵ５２によって実行される。
【符号の説明】
【００９７】
１    ＮＦＶ装置
２    外部ネットワーク
３    ＮＡＰＴ対応ルータ
４    インターネット
１０    物理ポート
１０ａ    ＮＩＣ
２０    仮想スイッチ
２１    仮想ポート
２２    フローテーブル群
２３    フローキャッシュ
２４    高速中継部
２５    低速中継部
２６    対応付テーブル
２７    フローキャッシュ制御部
２７ａ    登録部
２７ｂ    探索部
３０    ＶＮＦ
３１    仮想ネットワークインタフェースカード
５０    コンピュータ
５１    メインメモリ
５２    ＣＰＵ
５３    ＬＡＮインタフェース
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
【図１】
2019083469.tif 000003
【図２Ａ】
2019083469.tif 000004
【図２Ｂ】
2019083469.tif 000005
【図３】
2019083469.tif 000006
【図４】
2019083469.tif 000007
【図５Ａ】
2019083469.tif 000008
【図５Ｂ】
2019083469.tif 000009
【図６】
2019083469.tif 000010
【図７】
2019083469.tif 000011
【図８】
2019083469.tif 000012
【図９】
2019083469.tif 000013
【図１０】
2019083469.tif 000014
【図１１】
2019083469.tif 000015
【図１２】
2019083469.tif 000016