(57)【要約】【課題】クエリエントリに一致する条件エントリを検索する際に、何エントリ分の検索が必要か（期待値）を考慮して、リソース割り当てを制御する装置等を提供する。【解決手段】各条件エントリは、クエリエントリと一致した回数に基づくヒット率を含む。また、エントリ判定のために許容される最大処理ステップ回数を予め設定する。そして、条件テーブルについて、優先度順にヒット率を累積した累積ヒット率を、最大処理ステップ回数で分類する条件エントリ分類手段と、分類された処理ステップ毎に、条件エントリ数を所要の演算プロセッサ数として決定するプロセッサ数決定手段と、クエリエントリと当該条件エントリとが一致するか否かを一度に判定させる個別ステップ処理手段と、個別ステップ処理手段を、条件テーブルの条件エントリの降順に、最大処理ステップ回数まで繰り返すエントリ検索手段とを有する。【選択図】図２
2014120827.tif 000002
【特許請求の範囲】
【請求項１】
複数の要素の列からなる条件エントリが複数個並べられた条件テーブルと、
前記条件エントリと同種の要素の列からなるクエリエントリを入力し、該クエリエントリが前記条件テーブルのいずれかの条件エントリと一致するか否かを判定するエントリ判定部と、
複数の演算プロセッサを含み且つ所要のプロセッサ数を任意に変更可能なプロセッサ部とを有する検索装置において、
前記条件テーブルにおける各条件エントリは、当該条件エントリとクエリエントリとが一致した回数に基づくヒット率を含んでおり、
前記エントリ判定部は、線形判定手段を有し、
前記線形判定手段は、
エントリ判定のために許容される最大処理ステップ回数が予め設定されており、前記条件テーブルについて、優先度順にヒット率を累積した累積ヒット率を、最大処理ステップ回数で分類する条件エントリ分類手段と、
分類された処理ステップ毎に、当該処理ステップに含まれる条件エントリ数を、所要の演算プロセッサ数として決定するプロセッサ数決定手段と、
各演算プロセッサに対して条件エントリそれぞれを割り当てて、前記クエリエントリと当該条件エントリとが一致するか否かを一度に判定させる個別ステップ処理手段と、
前記個別ステップ処理手段によって両エントリが一致したと判定されるまで、前記個別ステップ処理手段を、前記条件テーブルの条件エントリの降順に、最大処理ステップ回数まで繰り返すエントリ検索手段と
を含むことを特徴とする検索装置。
【請求項２】
前記プロセッサ部は、ハードウェアとしてのＳＩＭＤ(Single Instruction, Multiple Data)型又はＳＩＭＴ(Single Instruction, Multiple Thread)型のものであることを特徴とする請求項１に記載の検索装置。
【請求項３】
前記プロセッサ部は、汎用ＧＰＵ(Graphic Processor Unit)であり、
前記プロセッサ数決定手段は、単位グループのＳＭ(Streaming MultiProcessor)における演算プロセッサ数を決定する
ことを特徴とする請求項２に記載の検索装置。
【請求項４】
前記条件テーブルに含まれる条件エントリは、任意の要素についてワイルドカードで定義可能であることを特徴とする請求項１から３のいずれか１項に記載の検索装置。
【請求項５】
前記エントリ検索手段によって両エントリが一致したと判定された際に、前記条件テーブルの当該条件エントリにおけるヒット率を増分するヒット率更新手段を更に含むことを特徴とする請求項１から４のいずれか１項に記載の検索装置。
【請求項６】
前記条件エントリ分類手段は、前記条件テーブルにおける優先度順に累積した累積ヒット率が、処理ステップ毎に平滑化されるように、前記条件テーブルを分類することを特徴とする請求項１から５のいずれか１項に記載の検索装置。
【請求項７】
前記条件テーブルの各条件エントリは、クエリエントリと一致した際に実行すべき内容を表す実行要素を含んでおり、
前記エントリ判定部は、前記線形判定手段とは別に、ハッシュ判定手段を更に有し、
前記ハッシュ判定手段は、
前記線形判定手段によってクエリエントリと任意の条件エントリとが一致したと判定された際に、当該クエリエントリに含まれる複数の要素から、ハッシュ関数に基づくハッシュ値を算出するハッシュ値算出手段と、
算出されたハッシュ値と、当該クエリエントリに含まれる複数の要素と、一致した条件エントリの実行要素とを、ハッシュテーブルとして登録するハッシュテーブル更新手段と、
を有し、
前記エントリ判定部は、前記クエリエントリが入力された際に、最初に前記ハッシュ判定手段によってハッシュテーブルに登録されたいずれの条件エントリとも完全一致しなかった場合に、前記線形判定手段における条件エントリとの一致を判定する
ことを特徴とする請求項１から６のいずれか１項に記載の検索装置。
【請求項８】
請求項１から７のいずれか１項に記載の検索装置は、フロースイッチ装置であり、
前記クエリエントリは、入力された通信パケットにおけるフローヘッダ識別子であり、
前記条件テーブルは、フローテーブルであり、
前記条件エントリは、フローエントリであり、
前記フローエントリに規定された、クエリエントリと一致した際に実行すべき内容を表す実行要素は、
当該クエリエントリのパケットを出力すべきポートの指定、
当該クエリエントリのパケットの所定ヘッダの書き換えの指示、及び／又は、
当該クエリエントリのパケットのスケジューリング若しくは帯域制御の指示
であることを特徴とするフロースイッチ装置。
【請求項９】
装置に搭載された、複数の演算プロセッサを含み且つ所要のプロセッサ数を任意に変更可能なプロセッサ部を、検索用に機能させるプログラムにおいて、
複数の要素の列からなる条件エントリが複数個並べられた条件テーブルと、
前記条件エントリと同種の要素の列からなるクエリエントリを入力し、該クエリエントリが前記条件テーブルのいずれかの条件エントリと一致するか否かを判定するエントリ判定部とを有すると共に、
前記条件テーブルにおける各条件エントリは、当該条件エントリとクエリエントリとが一致した回数に基づくヒット率を含んでおり、
前記エントリ判定部は、線形判定手段を有し、
前記線形判定手段は、
エントリ判定のために許容される最大処理ステップ回数が予め設定されており、前記条件テーブルについて優先度順にヒット率を累積した累積ヒット率を、最大処理ステップ回数で分類する条件エントリ分類手段と、
分類された処理ステップ毎に、当該処理ステップに含まれる条件エントリ数を、所要の演算プロセッサ数として決定するプロセッサ数決定手段と、
各演算プロセッサに対して条件エントリそれぞれを割り当てて、前記クエリエントリと当該条件エントリとが一致するか否かを一度に判定させる個別ステップ処理手段と、
前記個別ステップ処理手段によって両エントリが一致したと判定されるまで、前記個別ステップ処理手段を、前記条件テーブルの条件エントリの降順に、最大処理ステップ回数まで繰り返すエントリ検索手段と
を含むようにプロセッサ部を機能させることを特徴とする検索プログラム。
【請求項１０】
複数の演算プロセッサを含み且つ所要のプロセッサ数を任意に変更可能なプロセッサ部を用いた検索方法において、
複数の要素の列からなる条件エントリが複数個並べられた条件テーブルを有し、該条件テーブルにおける各条件エントリは、当該条件エントリとクエリエントリとが一致した回数に基づくヒット率を含んでおり、
前記条件エントリと同種の要素の列からなるクエリエントリを入力する第１のステップと、
エントリ判定のために許容される最大処理ステップ回数が予め設定されており、前記条件テーブルについて優先度順にヒット率を累積した累積ヒット率を、最大処理ステップ回数で分類する第２のステップと、
分類された処理ステップ毎に、当該処理ステップに含まれる条件エントリ数を、所要の演算プロセッサ数として決定する第３のステップと、
各演算プロセッサに対して条件エントリそれぞれを割り当てて、前記クエリエントリと当該条件エントリとが一致するか否かを一度に判定させる第４のステップと
を有し、
第４のステップによって両エントリが一致したと判定されるまで、第４のステップを、前記条件テーブルの条件エントリの降順に、最大処理ステップ回数まで繰り返すことを特徴とする検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、条件テーブルからクエリエントリに一致する条件エントリを検索する技術に関する。特に、フロースイッチ装置について、フローテーブル（条件テーブル）を用いて、入力されたパケットのフローヘッダ識別子（クエリエントリ）に一致するフローエントリ（条件エントリ）を検索し、そのフローエントリに登録された転送先へ当該パケットを経路制御する技術に関する。
【背景技術】
【０００２】
従来、ネットワークの構成や機能を変更する場合、専門のネットワーク運用管理者が、ベンダ独自のコマンドを用いて、スイッチやルータのプロトコルの設定を変更する必要があった。これに対し、ＳＤＮ(Software-Defined Network)という概念が注目されてきている。ＳＤＮによれば、仮想化ネットワークを用いて、その構成や機能の設定をソフトウェアによってプログラマブルに制御することができる。これは、ネットワーク全体における各機能レイヤを分離し、オープンなインタフェースでつなぐアーキテクチャによって構成される。ネットワーク運用管理者は、異なるプロトコルを持つネットワーク機器を統合管理した物理的資源の設定を、稼働状況や経路制御ポリシに合わせて、アプリケーションによって迅速に変更することができる。
【０００３】
ＳＤＮの中核として、フローベースネットワーキングが必要とされる。これは、通信パケットの経路をフロー単位で制御することによって、ユーザやアプリケーション毎に細かい粒度のＱｏＳ(Quality of Service)を制御することができる。「フロー」とは、当該パケットに対する、例えば入力ポート、ＭＡＣ(Media Access Control)アドレス、ＶＬＡＮ(Virtual Local Area Network)識別子、ＩＰ(Internet Protocol)アドレスやポート番号の組み合わせで識別される通信のまとまりをいう。即ち、アプリケーション毎の一連の通信のまとまりを意味する。これら要素の組み合わせが識別されることよって、当該パケットの経路が制御される。
【０００４】
フローベースネットワーキングによれば、中継ノードとして、ＣＯＴＳ(Commercial Off The Shelf)によるフロースイッチ装置が用いられることが想定される。このようなフロースイッチ装置は、高いプログラム性や機能拡張性を有すると共に、汎用機器を用いるために比較的低コストで実現される。「フロースイッチ装置」は、入力されたパケットのフローヘッダ識別子（クエリエントリ）と一致する、フローテーブル（条件テーブル）に予め登録されたフローエントリ（条件エントリ）を検索し、そのフローエントリに基づいて当該パケットの経路（転送先）を制御する。フローテーブルは、各フローエントリを、経路制御ポリシに基づいて優先度順に並べたものである。
【０００５】
従来、専用的なフロースイッチ装置であっても、一般的な宛先検索の技術が適用されていた。即ち、経路制御ポリシとしての複数のフローエントリの中から、入力されたパケットのフローヘッダ識別子に一致するフローエントリを検索するために、優先度順に線形的な完全一致検索の技術が適用されている。
【０００６】
フロースイッチ装置の用途とは異なるが、例えばPatricia-Treeという二分木検索を用いた技術がある（非特許文献１参照）。この技術によれば、Linux（登録商標）やFreeBSD（登録商標）等のＯＳ(Operating System)における宛先検索に利用されており、ＩＰ(Internet Protocol)アドレスに基づく経路を検索するべく、最長プレフィックスの一致を検索するものである。
【０００７】
また、商用のフロールータであって、入力された全てのパケットのフローヘッダ識別子から、完全一致とするハッシュ値を算出し、そのハッシュテーブルを用いてフローエントリを高速に検索する技術もある（例えば非特許文献２参照）。
【０００８】
更に、ＧＰＵ(Graphic Processer Unit)を用いて、ソフトウェアルータにおけるフローテーブルから宛先を高速に検索する技術もある（例えば非特許文献３参照）。この技術によれば、フローエントリとの完全一致にはハッシュ検索を適用している。
【０００９】
更に、フロースイッチ装置とは別の用途として、線形的な完全一致検索を実現するために、並列処理可能な複数演算部を備え、実行プログラムの負荷情報に応じて各演算部に対する処理分担を決定する技術もある（例えば特許文献１参照）。この技術によれば、実行プログラムそれぞれの負荷情報が予め与えられており、必要な並列度を考慮して最適なプロセッサリソースの割当てを実行することができる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００８−１６５７４６号公報
【非特許文献】
【００１１】
【非特許文献１】Donald R. Morrisonら著 "PATRICIA:Practical Algorithm To Retrieve Information Coded in Alpha numeric" Journal of the ACM,Volume 15 Issue 4 1968年10月
【非特許文献２】L. G. Roberts著 "The Next Generation ofIP - Flow Routing" SSGRR 2003S  2003年7月
【非特許文献３】Sangjin Hanら著 "PacketShader: aGPU-accelerated Software Router"  Proceedings of ACM SIGCOMM2010  2010年 8月
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、非特許文献１に記載された技術によれば、最長プレフィックスの一致を検索することを前提としたＩＰ経路検索であって、複数のフローエントリを含むフローテーブルの検索には適用することができない。また、非特許文献２に記載された技術によれば、完全一致検索を適用するためには、入力された全てのパケットのフローヘッダ識別子（クエリエントリ）に対して、フローエントリ（条件エントリ）を定義する必要がある。これは、スケーラビリティの観点から、ネットワーク管理を想定した大量のフローエントリに対する適用は難しい。更に、非特許文献３に記載された技術も、優先度順の線形検索のために、フローエントリ（条件エントリ）が大量になるほど、検索処理時間や計算リソースに対する性能劣化が大きくなる。
【００１３】
また、特許文献１に記載された技術によれば、各プロセッサの負荷情報を予め明確にする必要があるが、フローテーブルの検索の場合、入力されたパケットに対する検索負荷を予め明確とすることができない。即ち、実際に一致するまで何エントリ分の検索が必要か（期待値）が明確でないために、最適なリソースを割り当てることができない。
【００１４】
そこで、本発明によれば、条件テーブル（フローテーブル）からクエリエントリ（入力されたパケットのフローヘッダ識別子）に一致する条件エントリ（フローエントリ）を検索する際に、実際に一致するまで何エントリ分の検索が必要か（期待値）を考慮して、リソース割り当てを制御することができる検索装置、フロースイッチ装置、プログラム及び方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明によれば、複数の要素の列からなる条件エントリが複数個並べられた条件テーブルと、
条件エントリと同種の要素の列からなるクエリエントリを入力し、該クエリエントリが条件テーブルのいずれかの条件エントリと一致するか否かを判定するエントリ判定部と、
複数の演算プロセッサを含み且つ所要のプロセッサ数を任意に変更可能なプロセッサ部とを有する検索装置において、
条件テーブルにおける各条件エントリは、当該条件エントリとクエリエントリとが一致した回数に基づくヒット率を含んでおり、
エントリ判定部は、線形判定手段を有し、
線形判定手段は、
エントリ判定のために許容される最大処理ステップ回数が予め設定されており、条件テーブルについて、優先度順にヒット率を累積した累積ヒット率を、最大処理ステップ回数で分類する条件エントリ分類手段と、
分類された処理ステップ毎に、当該処理ステップに含まれる条件エントリ数を、所要の演算プロセッサ数として決定するプロセッサ数決定手段と、
各演算プロセッサに対して条件エントリそれぞれを割り当てて、クエリエントリと当該条件エントリとが一致するか否かを一度に判定させる個別ステップ処理手段と、
個別ステップ処理手段によって両エントリが一致したと判定されるまで、個別ステップ処理手段を、条件テーブルの条件エントリの降順に、最大処理ステップ回数まで繰り返すエントリ検索手段と
を含むことを特徴とする。
【００１６】
本発明の検索装置における他の実施形態によれば、プロセッサ部は、ハードウェアとしてのＳＩＭＤ(Single Instruction, Multiple Data)型又はＳＩＭＴ(Single Instruction, Multiple Thread)型のものであることも好ましい。
【００１７】
本発明の検索装置における他の実施形態によれば、
プロセッサ部は、汎用ＧＰＵ(Graphic Processor Unit)であり、
プロセッサ数決定手段は、単位グループのＳＭ(Streaming MultiProcessor)における演算プロセッサ数を決定する
ことも好ましい。
【００１８】
本発明の検索装置における他の実施形態によれば、
条件テーブルに含まれる条件エントリは、任意の要素についてワイルドカードで定義可能であることも好ましい。
【００１９】
本発明の検索装置における他の実施形態によれば、
エントリ検索手段によって両エントリが一致したと判定された際に、条件テーブルの当該条件エントリにおけるヒット率を増分するヒット率更新手段を更に含むことも好ましい。
【００２０】
本発明の検索装置における他の実施形態によれば、
条件エントリ分類手段は、条件テーブルにおける優先度順に累積した累積ヒット率が、処理ステップ毎に平滑化されるように、条件テーブルを分類することも好ましい。
【００２１】
本発明の検索装置における他の実施形態によれば、
条件テーブルの各条件エントリは、クエリエントリと一致した際に実行すべき内容を表す実行要素を含んでおり、
エントリ判定部は、線形判定手段とは別に、ハッシュ判定手段を更に有し、
ハッシュ判定手段は、
線形判定手段によってクエリエントリと任意の条件エントリとが一致したと判定された際に、当該クエリエントリに含まれる複数の要素から、ハッシュ関数に基づくハッシュ値を算出するハッシュ値算出手段と、
算出されたハッシュ値と、当該クエリエントリに含まれる複数の要素と、一致した条件エントリの実行要素とを、ハッシュテーブルとして登録するハッシュテーブル更新手段と、
を有し、
エントリ判定部は、クエリエントリが入力された際に、最初にハッシュ判定手段によってハッシュテーブルに登録されたいずれの条件エントリとも完全一致しなかった場合に、線形判定手段における条件エントリとの一致を判定する
ことも好ましい。
【００２２】
本発明によれば、前述した検索装置は、フロースイッチ装置であり、
クエリエントリは、入力された通信パケットにおけるフローヘッダ識別子であり、
条件テーブルは、フローテーブルであり、
条件エントリは、フローエントリであり、
フローエントリに規定された、クエリエントリと一致した際に実行すべき内容を表す実行要素は、
当該クエリエントリのパケットを出力すべきポートの指定、
当該クエリエントリのパケットの所定ヘッダの書き換えの指示、及び／又は、
当該クエリエントリのパケットのスケジューリング若しくは帯域制御の指示
であることを特徴とする。
【００２３】
本発明によれば、装置に搭載された、複数の演算プロセッサを含み且つ所要のプロセッサ数を任意に変更可能なプロセッサ部を、検索用に機能させるプログラムにおいて、
複数の要素の列からなる条件エントリが複数個並べられた条件テーブルと、
条件エントリと同種の要素の列からなるクエリエントリを入力し、該クエリエントリが条件テーブルのいずれかの条件エントリと一致するか否かを判定するエントリ判定部とを有すると共に、
条件テーブルにおける各条件エントリは、当該条件エントリとクエリエントリとが一致した回数に基づくヒット率を含んでおり、
エントリ判定部は、線形判定手段を有し、
線形判定手段は、
エントリ判定のために許容される最大処理ステップ回数が予め設定されており、条件テーブルについて優先度順にヒット率を累積した累積ヒット率を、最大処理ステップ回数で分類する条件エントリ分類手段と、
分類された処理ステップ毎に、当該処理ステップに含まれる条件エントリ数を、所要の演算プロセッサ数として決定するプロセッサ数決定手段と、
各演算プロセッサに対して条件エントリそれぞれを割り当てて、クエリエントリと当該条件エントリとが一致するか否かを一度に判定させる個別ステップ処理手段と、
個別ステップ処理手段によって両エントリが一致したと判定されるまで、個別ステップ処理手段を、条件テーブルの条件エントリの降順に、最大処理ステップ回数まで繰り返すエントリ検索手段と
を含むようにプロセッサ部を機能させることを特徴とする。
【００２４】
本発明によれば、複数の演算プロセッサを含み且つ所要のプロセッサ数を任意に変更可能なプロセッサ部を用いた検索方法において、
複数の要素の列からなる条件エントリが複数個並べられた条件テーブルを有し、該条件テーブルにおける各条件エントリは、当該条件エントリとクエリエントリとが一致した回数に基づくヒット率を含んでおり、
条件エントリと同種の要素の列からなるクエリエントリを入力する第１のステップと、
エントリ判定のために許容される最大処理ステップ回数が予め設定されており、条件テーブルについて優先度順にヒット率を累積した累積ヒット率を、最大処理ステップ回数で分類する第２のステップと、
分類された処理ステップ毎に、当該処理ステップに含まれる条件エントリ数を、所要の演算プロセッサ数として決定する第３のステップと、
各演算プロセッサに対して条件エントリそれぞれを割り当てて、クエリエントリと当該条件エントリとが一致するか否かを一度に判定させる第４のステップと
を有し、
第４のステップによって両エントリが一致したと判定されるまで、第４のステップを、条件テーブルの条件エントリの降順に、最大処理ステップ回数まで繰り返すことを特徴とする。
【発明の効果】
【００２５】
本発明の検索装置、フロースイッチ装置、プログラム及び方法によれば、条件テーブルからクエリエントリに一致する条件エントリを検索する際に、実際に一致するまで何エントリ分の検索が必要か（期待値）を考慮して、リソース割り当てを制御することができる。
【図面の簡単な説明】
【００２６】
【図１】本発明の検索装置がフロースイッチ装置に適用されたシステム構成図である。
【図２】本発明におけるフロースイッチ装置（検索装置）の機能構成図である。
【図３】本発明のフローテーブル（条件テーブル）における各フローエントリ（条件エントリ）の説明図である。
【図４】本発明のエントリ判定部における線形判定部の機能構成図である。
【図５】本発明における条件エントリの分類を表すグラフである。
【図６】個別ステップ処理部における検索処理を表す説明図である。
【図７】本発明におけるハッシュ判定部及び線形判定部を含むエントリ判定部のフローチャートである。
【発明を実施するための形態】
【００２７】
以下、本発明の実施の形態について、図面を用いて詳細に説明する。
【００２８】
本発明の検索装置、フロースイッチ装置、プログラム及び方法によれば、条件テーブルの複数の条件エントリの中から、クエリエントリと一致する条件エントリを検索する様々な技術に適用することができる。
【００２９】
図１は、本発明の検索装置がフロースイッチ装置に適用されたシステム構成図である。
【００３０】
本発明の検索装置を、以下のようにフロースイッチ装置の用途に適用することができる。
クエリエントリ：入力されたパケットのフローヘッダ識別子
フローエントリ：条件エントリ
フローテーブル：多数の条件エントリを優先度順に並べた条件テーブル
エントリの各要素：フロー制御のためのヘッダ識別子
（例えばＭＡＣアドレス、ＩＰアドレス、ポート番号等）
本発明によれば、フローテーブルの複数のフローエントリの中から、入力されたパケットのフローヘッダ識別子と一致すると共に優先度が最も高いフローエントリを検索することができる。尚、フローテーブルは、優先度順に線形に検索されるものである。
【００３１】
図１によれば、例えばトランスポートネットワーク内に、フロースイッチ装置が備えられている。フロースイッチ装置は、トランスポートネットワークに限られず、アクセスネットワークのゲートウェイや、機能プールの各アプライアンス装置への経路を制御し、様々なネットワークを統合的に利用する。
【００３２】
また、フロースイッチ装置は、ネットワークの経路制御ポリシとしてフローテーブル（条件テーブル）を記憶している。このフローテーブルは、外部のフロー制御装置から、各フロースイッチ装置へ配信される。尚、フロー制御装置は、例えばネットワーク構成管理装置から、そのネットワーク運用制御ポリシに基づいて、各フロースイッチ装置に対するフローテーブルを作成する。ネットワーク構成管理装置が、ネットワーク運用制御ポリシを変更することによって、フロー制御装置が適宜、各フロースイッチ装置に対するフローテーブルのフローエントリを更新（追加、削除、変更等）する。
【００３３】
フロースイッチ装置は、入力されたパケット毎に、宛先検索（フローテーブルのフローエントリに対するクエリエントリの一致検索）が必要となる。この宛先検索を高速化するために、本発明によれば、一度に検索処理を実行するフローエントリの数を柔軟に制御するべく、ホスト側ＣＰＵ(Central Processer Unit)に加えて、汎用ＧＰＵ(Graphic Processor Unit)を用いている。従来、フロースイッチ装置は、ベンダ特有の専用ハードウェアで構成されていたが、本発明によれば、ＧＰＵを搭載した汎用パーソナルコンピュータで高速な宛先検索を実現することができる。これは、膨大な数のフロースイッチ装置を設備導入しなければならない通信事業者にとって、設備投資コストの抑制につながる。
【００３４】
図２は、本発明におけるフロースイッチ装置（検索装置）の機能構成図である。
【００３５】
図２によれば、フロースイッチ装置は、ハードウェアのプロセッサ部として、ホスト側ＣＰＵ１と、汎用ＧＰＵ２とを有する。ＣＰＵを搭載した一般的なパーソナルコンピュータによれば、例えばＰＣＩバスを介して、汎用ＧＰＵを搭載したボードを接続することができる。また、ＣＰＵとＧＰＵとを統合したプロセッサも、汎用的なものとして市販されている。
【００３６】
「ＧＰＵ」は、画像（グラフィック）処理専用のプロセッサチップとして市販されている。近年、ＨＰＣ(High Performance Computing)技術の発展によって、ＧＰＵに対して直接的に並列プログラミングをすることが可能となった。ＧＰＵは、複数の演算プロセッサを含み且つ所要のプロセッサ数を任意に変更可能なものである。各演算プロセッサは、例えばスレッドプロセッサとも称され、データ並列型の演算を実現する。本発明も、フロースイッチ装置における高速演算処理を要する宛先検索に、並列プログラミングによって汎用ＧＰＵを利用したものである。
【００３７】
特に、本発明で用いられるＧＰＵは、ハードウェアとしてのＳＩＭＤ(Single Instruction, Multiple Data、単一命令多重データ)型又はＳＩＭＴ(Single Instruction, Multiple Thread、単一命令複数スレッド)型のものである。ＳＩＭＤは、１回の命令（ステップ）で複数データに対して同時に処理する技術をいう。ＳＩＭＤの幅は、ソフトウェアから操作することができる。また、ＳＩＭＴは、マルチプロセッサの各スレッドを、個別の命令アドレスと状態レジスタを持って独立に処理するスカラプロセッサコアに対応付けたものである。
【００３８】
図２によれば、ＣＰＵ１は、クエリ入力部１０からクエリエントリを入力する。フロースイッチ装置の場合、クエリエントリは、入力されたパケットのフローヘッダ識別子である。また、ＣＰＵ１は、エントリ判定部１１と、ホスト側メモリ１２と、ハッシュテーブル１３とを有する。これら機能は、ＣＰＵ１に対するプログラミングによって実現される。エントリ判定部１１は、制御バスを介してＧＰＵ２と接続され、ホスト側メモリ１２も、ＤＭＡ(Direct Memory Access)バスを介してＧＰＵ２と接続される。
【００３９】
エントリ判定部１１は、パケットのフローヘッダ識別子（クエリエントリ）を入力し、フローテーブル（条件テーブル）のいずれかのフローエントリ（条件エントリ）と一致するか否かを判定する。ここで、フローヘッダ識別子（クエリエントリ）と、フローエントリ（条件エントリ）とは、例えばベクトルのように、同種の要素の列からなる。
【００４０】
また、図２によれば、ＧＰＵ２は、スレッド実行制御部２１と、ＳＭ(Streaming MultiProcessor)２２と、スレッド側メモリ２３と、フローテーブル（条件テーブル）２４とを有する。スレッド実行制御部２１は、ＣＰＵ１のエントリ判定部１１からの命令によって、ＳＭ２２における所要の演算プロセッサ数を任意に変更する。また、スレッド側メモリ２３は、ＣＰＵ１のホスト側メモリ１２との間で、ＤＭＡバスを介して接続される。フローテーブル２４は、データアクセスの高速性のために、ＧＰＵ２上のメモリに展開しておくのが好ましい。
【００４１】
図３は、本発明のフローテーブル（条件テーブル）における各フローエントリ（条件エントリ）の説明図である。
【００４２】
フローテーブルは、優先度順に線形に検索されるものである。フローテーブルは、複数の要素の列からなる多数のフローエントリ（条件エントリ）が、経路制御ポリシに基づいて優先度順に並べられている。図３によれば、１０２４個のフローエントリが、優先度順に並べられている。
【００４３】
フローエントリの各要素には、フローヘッダ識別子が定義されており、ワイルドカード「＊」（どのようなフローヘッダ識別子も一致したと判定する）を指定することができる。図３によれば、フローエントリの要素として、以下のものが定義されている。
入力ポート
宛先ＭＡＣアドレス、送信元ＭＡＣアドレス
ＶＬＡＮ−ＩＤ
送信元ＩＰアドレス、宛先ＩＰアドレス
送信元ポート番号、宛先ポート番号
【００４４】
本発明によれば、フローエントリにワイルドカードを指定することができるので、フローテーブル上のフローエントリ（条件エントリ）の数が削減される。アプリケーション単位や宛先ネットワーク単位等で、フローエントリを集約して設定することができるために、運用ネットワークのスケール性を向上させることができる。
【００４５】
また、各フローエントリには、実行要素として、転送先情報も定義されている。実行要素とは、フローエントリの条件としての要素が全て一致した場合、実行すべき内容を表す。フロースイッチ装置の場合、実行要素の内容としては、具体的には、以下のものがある。
当該クエリエントリのパケットを出力すべきポートの指定
当該クエリエントリのパケットの所定ヘッダの書き換えの指示
当該クエリエントリのパケットのスケジューリング若しくは帯域制御の指示
【００４６】
更に、本発明におけるフローテーブルには、各フローエントリに、当該フローエントリと、入力されたパケットのフローヘッダ識別子（クエリエントリ）とが一致した回数に基づく「ヒット率」も含まれている。
【００４７】
図３によれば、エントリ優先度順に１〜１０２４を並べた横軸に対して、ヒット率を縦軸としたグラフが表されている。このグラフによれば、エントリ優先度が高いフローエントリほど、ヒット率も高いことが理解できる。尚、エントリ優先度は、通信事業者の経路制御ポリシに応じて設定されたものであって、エントリ優先度が高いほどヒット率が高いとは限らない。
【００４８】
図４は、本発明のエントリ判定部における線形判定部の機能構成図である。
【００４９】
図４によれば、線形判定部１１ｒは、条件エントリ分離部１１ｒ１と、プロセッサ数決定部１１ｒ２と、個別ステップ処理部１１ｒ３と、エントリ検索部１１ｒ４と、ヒット率更新部１１ｒ５とを有する。
【００５０】
線形判定部１１ｒは、フローテーブル（条件テーブル）の検索のために、ＧＰＵ２の複数の演算プロセッサを並列に実行する。ここで、ＧＰＵでは同一ステップで並列に実行可能な演算プロセッサの数には上限があるために、それぞれのタスクをどのように演算プロセッサに割り当てるかが、検索処理時間に影響する。特に、優先度順検索型のフローテーブルは、各フローエントリに対する一致を並列に判定するために、並列に実行可能な演算プロセッサの数によって、検索処理時間と消費計算リソースとに影響する。
【００５１】
［条件エントリ分離部１１ｒ１］
条件エントリ分離部１１ｒ１には、エントリ判定のために許容される最大処理ステップ回数が予め設定されている。例えば最大処理ステップ回数＝８回を目標として設定する。最大処理ステップ回数が少ないほど、一度に要する演算プロセッサの並列個数が多くなるが、検索時間が短くなる。一方で、最大処理ステップ回数が多いほど、一度に要する演算プロセッサの並列個数が少ないが、検索時間が長くなる。
【００５２】
その上で、条件エントリ分離部１１ｒ１は、フローテーブル（条件テーブル）について、優先度順にヒット率を累積した累積ヒット率を、最大処理ステップ回数で分類する。ここで、条件エントリ分離部１１ｒ１は、フローテーブルにおける優先度順に累積した累積ヒット率が、処理ステップ毎に平滑化されるように、フローテーブルを分類する。例えば「１００／最大処理ステップ回数」を、ステップ毎に累積するものであってもよい。
（処理ステップ回数）    （累積ヒット率）
ステップ１            １２．５％
ステップ２            ２５．０％
ステップ３            ３７．５％
ステップ４            ５０．０％
ステップ５            ６２．５％
ステップ６            ７５．０％
ステップ７            ８７．５％
ステップ８          １００．０％
【００５３】
［プロセッサ数決定部１１ｒ２］
プロセッサ数決定部１１ｒ２は、分類された処理ステップ毎に、当該処理ステップに含まれるフローエントリ（条件エントリ）数を、所要の演算プロセッサ数として決定する。即ち、プロセッサ数決定部１１ｒ２は、ＧＰＵ２における単位グループのＳＭ(Streaming MultiProcessor)における演算プロセッサ数を決定することとなる。
【００５４】
図５は、本発明における条件エントリの分類を表すグラフである。
【００５５】
図５（ａ）によれば、エントリ優先度が高い部分（フローテーブルの先頭部分）ほど、高いヒット率のフローエントリが集中していることが理解できる。これは、累積エントリ数１２．５％に含まれるフローエントリの数が少ないことを意味する。即ち、フローエントリの数と同数の、少ない演算プロセッサが用いられることとなる。図５（ａ）によれば、例えば以下のように、演算プロセッサ数が決定される。
フローテーブルのフローエントリの総数＝１０２４個
ＧＰＵに搭載された演算プロセッサ数（並列演算数）＝５１２個
最大処理ステップ回数＝８回
（処理ステップ回数）    （累積ヒット率）  （演算プロセッサの並列個数）
ステップ１            １２．５％              ９
ステップ２            ２５．０％            ２３
ステップ３            ３７．５％            ５６
ステップ４            ５０．０％          １２５
ステップ５            ６２．５％          １２５
ステップ６            ７５．０％          １４２
ステップ７            ８７．５％          ２７２
ステップ８          １００．０％          ２７２
尚、各ステップの累積ヒット率に含まれるフローエントリ数が、演算プロセッサの最大数を超える場合、その最大数の演算プロセッサが並列に用いられることとなる。
【００５６】
図５（ｂ）によれば、エントリ優先度７００程度の部分で、高いヒット率のフローエントリが集中していることが理解できる。これは、エントリ優先度７００程度の部分における累積エントリ数１２．５％に含まれるフローエントリの数が少ないことを意味する。
【００５７】
図５（ｃ）によれば、エントリ優先度９００程度の部分で、高いヒット率のフローエントリが集中していることが理解できる。これは、エントリ優先度９００程度の部分における累積エントリ数１２．５％に含まれるフローエントリの数が少ないことを意味する。
【００５８】
優先度順の線形検索によれば、ステップ１から順に検索を進めていき、クエリエントリに一致する条件エントリが発見された時点で、検索処理を終了することができる。また、図５（ａ）〜（ｃ）からも明らかなとおり、ステップ毎に使用される演算プロセッサ数が異なっている。即ち、あるパケットのフローヘッダ識別子（クエリエントリ）にとってフローエントリ（条件エントリ）の検索に最適な演算プロセッサ数は、一致するフローエントリの優先度に依存することとなる。例えばＮ番目のフローエントリが優先度の最も高いものである場合、Ｎ−１番目までは一致しないことが検出できればよい。即ち、Ｎ個の演算プロセッサで並列検索を実行した場合、１ステップで検索が終了することとなる。
【００５９】
例えば図５（ａ）の場合、ステップ１で条件エントリと一致する確率が高く、検索処理時間が短くなる可能性が高く、更にその際に使用される演算プロセッサ数も少なくて済む。一方で、図５（ｃ）の場合、ステップ７程度で条件エントリと一致する確率が高く、検索処理時間は比較的長くなる可能性が高いが、その際に使用される演算プロセッサ数が少なくて済む。
【００６０】
［個別ステップ処理部１１ｒ３］
個別ステップ処理部１１ｒ３は、各演算プロセッサに対して条件エントリそれぞれを割り当てて、クエリエントリと当該条件エントリとが一致するか否かを一度に判定させる。前述した例によれば、以下のように検索される。
ステップ１は、９個の演算プロセッサを用いて、９個のフローエントリ＃１〜＃９を並列に検索する。
ステップ２は、２３個の演算プロセッサを用いて、２３個のフローエントリ＃１０〜＃５６を並列に検索する。
ステップ３は、５６個の演算プロセッサを用いて、５６個のフローエントリ＃５７〜＃１１２を並列に検索する。
・・・・・
ステップ８は、２７２個の演算プロセッサを用いて、２７２個のフローエントリ＃７５２〜＃１０２４を並列に検索する。
【００６１】
［エントリ検索部１１ｒ４］
エントリ検索部１１ｒ４は、個別ステップ処理手段によって両エントリが一致したと判定されるまで、個別ステップ処理部１１ｒ３を、フローテーブル（条件テーブル）のフローエントリ（条件エントリ）の降順に、最大処理ステップ回数まで繰り返す。
【００６２】
［ヒット率更新部１１ｒ５］
ヒット率更新部１１ｒ５は、エントリ検索部１１ｒ４によって両エントリが一致したと判定された際に、フローテーブル（条件テーブル）の当該フローエントリ（条件エントリ）におけるヒット率を増分する。
【００６３】
このように、本発明のエントリ判定部１１は、クエリエントリ（フローヘッダ識別子）に対するフローエントリ（条件エントリ）を検索する際に、各ステップの中で同時に実行されるＧＰＵの演算プロセッサの並列個数を最適化することができる。即ち、各フローエントリにおける過去のヒット率から、全体的傾向の中で、ステップ毎に「平均的によさそうな演算プロセッサの並列個数（期待値）」を導出することができる。一般に、フロースイッチ装置の場合、固定的なフローテーブルを経路制御ポリシに応じて設定しても、各フローエントリのヒット率の傾向は、日単位、週単位、年単位等の時間経過に応じて変化する。本発明によれば、ヒット率の傾向が変化しても尚、各ステップの中で同時に実行される演算プロセッサ数を最適化することができる。
【００６４】
図４におけるエントリ検索部１１ｒ４は、個別ステップ処理部１１ｒ３を、例えば以下のコードのように制御する。このコードは、ホスト側ＣＰＵ１によって実行される。
uint num_group[] = {9, 23, 56, ...};
/*プロセッサ数決定部によって決定された、ステップ毎の演算プロセッサの並列個数*/
uint num_field = 9;  /*エントリの一致判定条件の要素数*/
void search_table () {
bool judge_matrix[][];
uint ret[];
uint match_id = 0;
uint idx = 1;
for (uint step = 0; ; step++) {  /*ステップ毎の繰り返し*/
create_judge_matrix(judge_matrix);
check_field<<<1, num_field * num_group[step]>>>(idx, pkt, judge_matrix);
/*各要素の一致判定*/
check_entry<<<1, num_group[step]>>>(idx, ret, judge_matrix);
/*エントリの一致判定*/
match_id = get_highest_priority(ret);
if (match_id > 0) break;
idx += num_group[step];
clear_array(ret);
}
};
【００６５】
個別ステップ処理部１１ｒ３からの制御によって、例えば以下のコードが、ＧＰＵの各演算プロセッサによって実行される。
__global__ void check_field (uint start, struct packet pkt, uint **matrix) {
uint tid = blockIdx.x * blockDim.x + threadIdx.x;
uint fid = tid % num_field;
uint eid = (tid - fid) / num_field;
if (is_matched(pkt[fid], flow_table(start + eid, fid))) {
/* start + eid番目のフローエントリとpktのフィールドfidが一致するか
どうかを判定*/
matrix[eid][fid] = 1;
} else {
matrix[eid][fid] = 0;
}
}
__global__ void check_entry (uint start, uint *ret, uint **matrix) {
uint eid = blockIdx.x * blockDim.x + threadIdx.x;
if (is_allmatched(matrix[eid])) { ret[eid] = start + eid; }
/* start + eid番目のフローエントリにpktがヒットしたかどうかを判定*/
else { ret[eid] = 0; }
}
【００６６】
図６は、個別ステップ処理部における検索処理を表す説明図である。
【００６７】
個別ステップ処理部１１ｒ３は、例えば以下のように処理を進める。
（Ｓ１：一致判定行列の生成）
最初に、優先度の高い方から順に、各ステップに含まれる複数のフローエントリを選択し、それらフローエントリ群に対する一致判定行列を生成する。一致判定行列は、各要素の一致状況を保持するための行列である。一致判定行列について、各フローエントリのワイルドカードの要素には「１」を、それ以外には「０」を代入する。図６（ｂ）は、図６（ａ）のフローテーブルから生成された一致判定行列のフローエントリ群を表す。
【００６８】
（Ｓ２：一致判定に必要な要素の選出）
一致判定行列における各フローエントリについて、クエリエントリとの一致判定が必要となる要素である、「０」の要素のみを選出する。
【００６９】
（Ｓ３：要素一致の判定）
そして、検索対象となるフローヘッダ識別子（クエリエントリ）を一致判定行列に当てて、一致を判定する。各ステップで、同時に実行されるフローエントリ群の全てについて、一致した要素に相当する一致判定行列の行列要素に「１」を代入する。図６（ｃ）によれば、一致した要素に「１」が代入された一致判定行列を表す。
【００７０】
（Ｓ４：一致エントリの抽出）
一致判定行列について、全ての要素が「１」となっているフローエントリの中で、最も優先度の高いフローエントリを、当該クエリエントリに対する一致したフローエントリとする。全ての要素が「１」となっているフローエントリが存在しなければ、フローテーブルの次のステップのフローエントリ群に対する一致判定を繰り返していく。尚、フローエントリが全要素で一致しているかの判定は、要素のビット論理積を全フローエントリに対して実行するものであるために、ＧＰＵによる並列処理が望ましい。図６（ｃ）によれば、全ての要素が「１」となっているフローエントリの中で、最も優先度が高い、優先度２のフローエントリが検出される。
【００７１】
図７は、本発明におけるハッシュ判定部及び線形判定部を含むエントリ判定部のフローチャートである。
【００７２】
前述した図２によれば、エントリ判定部１１は、線形判定部１１ｒとは別に、ハッシュ判定部１１ｈを更に有する。図７によれば、ハッシュ判定部１１ｈを用いて以下のように処理を実行する。
【００７３】
（Ｓ７１）最初に、ハッシュ判定部１１ｈによって、入力されたフローヘッダ識別子（クエリエントリ）の各要素から、ハッシュ値を算出する。そのハッシュ値をキーとして、ハッシュテーブル１３を検索する。そのハッシュ値に紐付くフローエントリ（条件エントリ）が検出された場合、そのフローエントリの実行要素に基づく経路制御が実行される。尚、ハッシュテーブルに対する検索処理は、そのフローエントリの数に拘わらず高速に実行される。
【００７４】
（Ｓ７２）逆に、一致しなかった場合には、線形判定部１１ｒにおけるフローエントリ（条件エントリ）と一致するか否かを判定する。ここで一致しなかった場合には、不一致とする判定結果を出力する。逆に、ここで一致した場合には、当該クエリエントリに含まれる複数の要素から、ハッシュ関数に基づくハッシュ値を算出する（ハッシュ値算出部）。そして、算出されたハッシュ値と、当該クエリエントリに含まれる複数の要素と、一致した条件エントリの実行要素とを、ハッシュテーブルに新たに登録する（ハッシュテーブル更新部）。そして、そのフローエントリの実行要素に基づく経路制御が実行される。尚、優先順検索型のフローテーブルに対する検索処理は、各フローエントリに対して線形に判定されるために、処理時間に対するボトルネックとなる。そこで、本発明によれば、あえて、最初にハッシュ判定した後、一致しなかったクエリエントリに対してのみ線形判定を実行する。
【００７５】
図７のような処理工程を経る理由として、一般に、優先度順検索型フローテーブルの検索処理のみを用いて、必要以上に多くの演算プロセッサを割り当てた場合、無駄な検索処理が大量に発生することとなり、計算リソースを効率的に利用することができなくなる。一方で、ハッシュ型フローテーブルの検索処理の場合、フローエントリの要素に基づくハッシュ値を、ハッシュテーブルに登録する必要がある。そこで、本発明によれば、優先度順検索型フローテーブルとハッシュ型フローテーブルとを平行して検索処理に利用すると共に、優先度順検索型フローテーブルへの演算プロセッサの割り当てに過不足が生じないように最適に調整することができる。
【００７６】
以上、詳細に説明したように、本発明の検索装置、フロースイッチ装置、プログラム及び方法によれば、条件テーブルからクエリエントリに一致する条件エントリを検索する際に、実際に一致するまで何エントリ分の検索が必要か（期待値）を考慮して、リソース割り当てを制御することができる。確率的に無駄なフローエントリとの一致検索を削減することができる。その分、他の計算リソースに、他の演算プロセッサを割り当てることができ、全体的な処理性能を向上させることができる。
【００７７】
特に、本発明の検索装置等は、汎用ＧＰＵを用いることができるので、専用ハードウェアからＣＯＴＳノードへの置き換えることができ、ネットワーク設備のコストを低減させることができる。
【００７８】
また、本発明の検索装置等は、フローテーブルから高速に宛先検索をすることできるフロースイッチ装置を、汎用的なパーソナルコンピュータに実装することもできるので、通信事業者網におけるエンドツーエンドでのフロー単位の経路制御が可能となる。次いでは、アプリケーション毎に適した通信品質の提供も可能となり、サービス品質の向上を実現することもできる。
【００７９】
前述した本発明の種々の実施形態について、本発明の技術思想及び見地の範囲の種々の変更、修正及び省略は、当業者によれば容易に行うことができる。前述の説明はあくまで例であって、何ら制約しようとするものではない。本発明は、特許請求の範囲及びその均等物として限定するものにのみ制約される。
【符号の説明】
【００８０】
１  ＣＰＵ
１１  エントリ判定部
１１ｒ  線形判定部
１１ｒ１  条件エントリ分離部
１１ｒ２  プロセッサ数決定部
１１ｒ３  個別ステップ処理部
１１ｒ４  エントリ検索部
１１ｒ５  ヒット率更新部
１１ｈ  ハッシュ判定部
１２  ホスト側メモリ
１３  ハッシュテーブル
２  ＧＰＵ
２１  スレッド実行制御部
２２  ＳＭ
２３  スレッド側メモリ
２４  条件テーブル（フローテーブル）
【図１】
2014120827.tif 000003
【図２】
2014120827.tif 000004
【図３】
2014120827.tif 000005
【図４】
2014120827.tif 000006
【図５】
2014120827.tif 000007
【図６】
2014120827.tif 000008
【図７】
2014120827.tif 000009