IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特開2022-187578通信制御装置,通信制御システムおよび通信制御方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022187578
(43)【公開日】2022-12-20
(54)【発明の名称】通信制御装置,通信制御システムおよび通信制御方法
(51)【国際特許分類】
   H04L 45/42 20220101AFI20221213BHJP
   H04L 47/00 20220101ALI20221213BHJP
【FI】
H04L12/717
H04L12/879
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2021095635
(22)【出願日】2021-06-08
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100092978
【弁理士】
【氏名又は名称】真田 有
(74)【代理人】
【識別番号】100189201
【弁理士】
【氏名又は名称】横田 功
(72)【発明者】
【氏名】清水 貴志
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA01
5K030KA03
5K030KA05
5K030LB07
5K030LB11
(57)【要約】
【課題】SDN(Software Defined Network)のフロー制御における少なくとも一部の機能をハードウェアで実施する通信制御装置において、パケットの順序制御を実現する。
【解決手段】フローを構成する複数のパケットの転送時に、転送制御情報に未登録のフローのパケットを検出すると、転送制御情報においてフローに対して宛先解決待ち状態を設定する設定部101と、宛先解決待ち状態において受信したパケットの少なくとも一部を格納する退避用キュー105と、フローに対する宛先解決後に、転送するパケットを処理するパイプライン101を停止させる停止処理部106と、退避用キュー105に格納したフローに属するパケットを出力させる出力制御部106と、退避用キュー105に格納したパケットの出力が完了した後に、パイプライン101を動作させる作動制御部1065とを備える。
【選択図】図2
【特許請求の範囲】
【請求項1】
SDN(Software Defined Network)のフロー制御における少なくとも一部の機能をハードウェアで実施する通信制御装置であって、
フローを構成する複数のパケットの転送時に、転送制御情報に未登録のフローのパケットを検出すると、前記転送制御情報において当該フローに対して宛先解決待ち状態を設定する設定部と、
前記宛先解決待ち状態において受信したパケットの少なくとも一部を格納する退避用キューと、
前記フローに対する宛先解決後に、転送するパケットを処理するパイプラインを停止させる停止処理部と、
前記退避用キューに格納した前記フローに属するパケットを出力させる出力制御部と、
前記退避用キューに格納した前記パケットの出力が完了した後に、前記パイプラインを動作させる作動制御部と、
を備えることを特徴とする、通信制御装置。
【請求項2】
前記停止処理部は、前記転送制御情報に対して、前記パイプラインを停止させる制御情報を設定する
ことを特徴とする、請求項1に記載の通信制御装置。
【請求項3】
前記退避用キューが、
複数のFIFO(First In, First Out)バッファと、
前記FIFOバッファから出力されたパケットを出力パケット特定情報と比較し、前記出力されたパケットが前記出力パケット特定情報と一致する場合に、当該退避用キューから出力させる比較部と
を備えることを特徴とする、請求項1または2に記載の通信制御装置。
【請求項4】
前記パイプラインに入力されたパケットのうち、宛先解決待ち状態が設定されたパケットとして最初に検出した第1のパケットを検出する検出部を備え、
前記退避用キューは、前記第1のパケットに後続する、当該第1のパケットと同じフローに属するパケットを格納する
ことを特徴とする、請求項1~3のいずれか1項に記載の通信制御装置。
【請求項5】
SDN(Software Defined Network)のフロー制御における少なくとも一部の機能をハードウェアで実施する通信制御装置を備える通信制御システムであって、
フローを構成する複数のパケットの転送時に、転送制御情報に未登録のフローのパケットを検出すると、前記転送制御情報において当該フローに対して宛先解決待ち状態を設定する設定部と、
前記宛先解決待ち状態において受信したパケットの少なくとも一部を格納する退避用キューと、
前記フローに関する宛先解決を行なう宛先解決部と、
前記フローに対する宛先解決後に、転送するパケットを処理するパイプラインを停止させる停止処理部と、
前記退避用キューに格納した前記フローに属するパケットを出力させる出力制御部と、
前記退避用キューに格納した前記パケットの出力が完了した後に、前記パイプラインを動作させる作動制御部と、
を備えることを特徴とする、通信制御システム。
【請求項6】
SDN(Software Defined Network)のフロー制御における少なくとも一部の機能をハードウェアで実施する通信制御装置において、
フローを構成する複数のパケットの転送時に、転送制御情報に未登録のフローのパケットを検出すると、前記転送制御情報において当該フローに対して宛先解決待ち状態を設定する処理と、
前記宛先解決待ち状態において受信したパケットの少なくとも一部を退避用キューに格納する処理と、
前記フローに対する宛先解決後に、転送するパケットを処理するパイプラインを停止させる処理と、
前記退避用キューに格納した前記フローに属するパケットを出力させる処理と、
前記退避用キューに格納した前記パケットの出力が完了した後に、前記パイプラインを動作させる処理と、
を備えることを特徴とする、通信制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、通信制御装置,通信制御システムおよび通信制御方法に関する。
【背景技術】
【0002】
ネットワークにおけるルータとしての機能をソフトウェアにより実現する仮想ルータが知られている。ルータがサーバ間を接続しパケットの宛先を解決するように、仮想ルータは、仮想マシン(VM:Virtual Machine)間を接続し宛先を解決する。仮想ルータは、一般的に、多数のテーブルを検索し、宛先を解決する。
【0003】
仮想ルータは、SDN(Software Defined Network)によって実現され、コントロールプレーンとデータプレーンとを備える。コントロールプレーンは、フローを管理するものであり、例えば、IP(Internet Protocol)アドレスとポート番号と宛先との組み合わせをフローとして設定する。
【0004】
データプレーンは、パケットの転送を行なうものであり、入力されたパケットの内容を分析し、コントロールプレーンと同じハッシュ(hash)計算を行なうことで、該当エントリにアクセスして宛先を特定する。
【0005】
データプレーンにおいては、入力されたパケットの送信先のIPアドレスとポート番号とに基づいてフローテーブル(flow table)を参照して、パケットの転送先を決定する。
【0006】
フローテーブルにおいては、送信元と受信先のIPアドレスとポート番号との組合せがエントリとして登録されるが、新しいサービスを開始する際にはエントリが未登録である。そこで、コントロールプレーンが、パケットを転送して良いか、アドレスを変更する必要があるかなどを解決(宛先解決)し、フローテーブルにエントリを登録する。このように、フローテーブルにエントリを登録することをフロー学習といってもよい。また、データプレーンにおいて、フローテーブルを参照した際にエントリの登録がない状態をフローミスといってもよい。
【0007】
仮想ルータにおいて、ソフトウェアにより実現されるデータプレーンは、CPU(Central Processing Unit)のリソースを大量に占有する。そこで、近年においては、データプレーンの一部の機能をFPGA(Field Programmable Gate Array)等のハードウェアにオフロードさせることが行なわれている。ソフトウェアによって実現される機能の一部をハードウェアにオフロードさせることをハードウェアオフロードといってもよい。
図26は従来の仮想ルータの構成を例示する図である。
この図26においては、データプレーンに示される各機能がFPGAにオフロード(ハードオフロード)されている。
【0008】
仮想ルータにおいて、フローテーブルに登録がなかったパケットは、コントロールプレーンに送信され(図26の符号A1参照)、コントロールプレーンによる宛先やアクションの解決が行なわれた後に、データプレーンに再投入される(図26の符号A2参照)。
【0009】
ここで、同時に大量のフローミスが発生すると全てのパケットをバッファすることが難しい。そのため、多くの場合はこれらのフローミスが生じたパケットをバッファせず、パイプラインに再投入される。
【0010】
再投入されたパケットは通常のパイプラインとは別経路の再投入パイプライン(符号A3参照)を介してクロスバースイッチ(Xbar SW)に出力することで、再度の登録チェックが防止される。
【先行技術文献】
【特許文献】
【0011】
【特許文献1】国際公開第2013/146770号
【特許文献2】特表2018-511272号公報
【発明の概要】
【発明が解決しようとする課題】
【0012】
しかしながら、このようなハードオフロードされた従来の仮想ルータにおいては、パケットを再投入するアーキテクチャが多く、パケットの順序制御が困難であるという課題がある。
図27はハードオフロードされた従来の仮想ルータにおけるパケット転送例を示す図である。
【0013】
この図27においては、同一のフローに属する4つのパケットに符号p1~p4を付して示す。これらのパケットp1~p4は、p1,p2,p3,p4の順に入力され、この順で送出されるべきものである。
【0014】
パケットp2はフローテーブルへのフローの登録書込みが間に合わず、コントロールプレーンに転送されたものとする。また、パケットp3はコントロールプレーンによるフローテーブルへのフローの登録書込みが間に合ったものとする。これにより、パケットp3がパケットp1,p2よりも先に出力されている。すなわち、仮想ルータにp1,p2,p3,p4の順に入力された4つのパケットが、パケットp3,p1,p2,p4の順で出力されている。
【0015】
パケットp1とパケットp2との順序関係や、パケットp3とパケットp4との順序関係は維持されているが、パケットp1とパケットp3との順序関係や、パケットp2とパケットp3との順序関係が入れ替わっている。
【0016】
ここで、図27に示すように、p1,p2,p3,p4の順に入力されたパケットが、パケットp3,p1,p2,p4の順で転送された場合には、TCP(Transmission Control Protocol)等の通信において、パケットp3が再送される。これにより、全体の処理速度が低下し、サービスの低下が発生する。
【0017】
1つの側面では、本発明は、SDN(Software Defined Network)のフロー制御における少なくとも一部の機能をハードウェアで実施する通信制御装置において、パケットの順序制御を実現することを目的とする。
【課題を解決するための手段】
【0018】
このため、この通信制御装置は、SDN(Software Defined Network)のフロー制御における少なくとも一部の機能をハードウェアで実施する通信制御装置であって、フローを構成する複数のパケットの転送時に、転送制御情報に未登録のフローのパケットを検出すると、前記転送制御情報において当該フローに対して宛先解決待ち状態を設定する設定部と、前記宛先解決待ち状態において受信したパケットの少なくとも一部を格納する退避用キューと、前記フローに対する宛先解決後に、転送するパケットを処理するパイプラインを停止させる停止処理部と、前記退避用キューに格納した前記フローに属するパケットを出力させる出力制御部と、前記退避用キューに格納した前記パケットの出力が完了した後に、前記パイプラインを動作させる作動制御部と、を備える。
【発明の効果】
【0019】
一実施形態によれば、SDN(Software Defined Network)のフロー制御における少なくとも一部の機能をハードウェアで実施する通信制御装置においてパケットの順序制御を実現することができる。
【図面の簡単な説明】
【0020】
図1】第1実施形態の一例としての仮想ルータの機能を実現する情報処理装置のハードウェア構成を例示する図である。
図2】第1実施形態の一例としての仮想ルータの機能構成を示す図である。
図3】第1実施形態の一例としての仮想ルータにおけるフローテーブルにおける管理情報の遷移を示す図である。
図4】第1実施形態の一例としての仮想ルータにおける退避用バッファ部および検査回路の構成を例示する図である。
図5】第1実施形態の一例としての仮想ルータにおける処理を説明するタイミングチャートである。
図6】第1実施形態の一例としての仮想ルータにおける処理を説明するタイミングチャートである。
図7】第1実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図8】第1実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図9】第1実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図10】第1実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図11】第1実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図12】第1実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図13】第1実施形態の一例としての仮想ルータにおけるパイプラインの処理を説明するためのフローチャートである。
図14】第2実施形態の一例としての仮想ルータの機能構成を示す図である。
図15】第2実施形態の一例としての仮想ルータにおける退避用バッファ部および検査回路の構成を例示する図である。
図16】第2実施形態の一例としての仮想ルータにおける処理を説明するためのタイミングチャートである。
図17】第2実施形態の一例としての仮想ルータにおける処理を説明するためのタイミングチャートである。
図18】第2実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図19】第2実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図20】第2実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図21】第2実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図22】第2実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図23】第2実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図24】第2実施形態の一例としての仮想ルータにおける処理の遷移を例示する図である。
図25】第2実施形態の一例としての仮想ルータにおけるパイプラインの処理を説明するためのフローチャートである。
図26】従来の仮想ルータの構成を例示する図である。
図27】ハードオフロードされた従来の仮想ルータにおけるパケット転送例を示す図である。
【発明を実施するための形態】
【0021】
以下、図面を参照して本通信制御装置,通信制御システムおよび通信制御方法にかかる実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【0022】
(I)第1実施形態の説明
(A)構成
図1は第1実施形態の一例としての仮想ルータ1aの機能を実現する情報処理装置20のハードウェア構成を例示する図である。
情報処理装置20は、例えば、サーバ機能を有するコンピュータであってもよい。情報処理装置20は仮想ルータ1aとしての機能を実現する。
【0023】
仮想ルータ1aは、仮想マシン300(図2参照)間や、仮想マシン300と図示しない他の装置との間においてパケットの送受信(転送)を行なう。仮想マシンをVMと表す場合がある。
【0024】
仮想マシン300は、例えば、ハイパーバイザ等のアプリケーションプログラム上で作成される仮想的なコンピュータである。仮想マシン300は、物理ハードウェアで実現されるコンピュータと同様に種々の処理を実行する。例えば、仮想マシン300は、種々のOS(ゲストOS)やこのゲストOS上で稼動するアプリケーションプログラムを実行する。OSはOperating Systemの略語である。なお、仮想マシン300は既知の手法により実現することができ、その説明は省略する。また、仮想マシン300に代えて、コンテナ等の他の仮想化基盤技術を用いてもよく、適宜変更して実施することができる。
仮想マシン300は仮想ポート(図示省略)を備え、この仮想ポートを介してパケットの送受信を行なう。仮想ポートは、ポート番号によって特定される。
【0025】
情報処理装置20は、図1に例示するように、CPU2,システムメモリ3およびPCI(Peripheral Component Interconnect)カード4を備える。
【0026】
CPU2は、種々の制御や演算を行なう処理装置であり、システムメモリ3に格納されたOSやプログラムを実行することにより、種々の機能を実現する。すなわち、CPU2は、仮想ルータとしての機能を実現する。
【0027】
システムメモリ3は、ROM(Read Only Memory)およびRAM(Random Access Memory)を含む記憶メモリである。システムメモリ3のROMには、仮想ルータ制御に係るソフトウェアプログラムやこのプログラム用のデータ類が書き込まれている。システムメモリ3上のソフトウェアプログラムは、CPU2に適宜読み込まれて実行される。また、システムメモリ3のRAMは、一次記憶メモリあるいはワーキングメモリとして利用される。
【0028】
また、情報処理装置20は、図示しない記憶装置を備えてもよい。記憶装置は、ハードディスクドライブ(Hard Disk Drive:HDD)、SSD(Solid State Drive),ストレージクラスメモリ(Storage Class Memory:SCM)や、等の記憶装置であって、種々のデータを格納するものである。
【0029】
PCIカード4は、情報処理装置20の機能を拡張する拡張カードであり、例えば、情報処理装置20の図示しない主基板(マザーボード)に取り付けられる。PCIカード4は、情報処理装置20の主基板とPCIバスを介して通信を行なう。
【0030】
PCIカード4は、図1に示すように、オンボードメモリ5およびFPGA10を備える。オンボードメモリ5は、FPGA10における論理回路の基になるプログラム(コンフィギュレーションデータ)を記憶する。
【0031】
FPGA10は、デジタル回路の回路設計を電気的に変更可能なデバイスである。FPGA10は、多数の論理ゲートを有するLSI(Large Scale Integration circuit)である。FPGA10は、論理ゲート間の論理関係と接続関係とを記述したコンフィギュレーションデータをFPGA10が備えるコンフィギュレーションRAM(図示省略)に書き込むことで、所定の論理回路として機能する。
【0032】
FPGA10は、SRAM(Static Random Access Memory)11および複数のレジスタ12を備え、FPGA10の電源投入時においては、オンボードメモリ5からプログラムファイル(ビットストリームデータ)がロードされ、FPGA10内のSRAM11にロードされる。
【0033】
SRAM11にロードされたビットストリームデータの個々のビット(bit)がFPGA10上で実現するユーザ回路の情報元となり、FPGA10に装備されているリソースをカスタマイズして所定の回路が実現される。本情報処理装置20においては、FPGA10が、仮想ルータ1aにおけるデータプレーンの少なくとも一部の機能を実現する。
レジスタ12には、FPGA10がデータプレーンとしての機能時に生成された各種データ等が一時的に格納されてもよい。
図2は第1実施形態の一例としての仮想ルータ1aの機能構成を示す図である。
【0034】
図2に例示する仮想ルータ1aは、コントロールプレーン200およびデータプレーン100aを備える。図2においては、仮想ルータ1aが、仮想マシン300から入力されるパケットを転送する例を示す。
【0035】
コントロールプレーン200は、後述するデータプレーン100aのフローテーブルに未登録のフロー(flow)についてのアクション(action)を決定する。コントロールプレーン200は、データプレーン100aのパイプライン101から、フローテーブルに未登録のフロー(flow)に属するパケットが転送されると、当該パケットが属するフローに対して行なわれるアクションを決定する。データプレーン100aにおいて、フローテーブルにフローが登録されていない状態をフローミス(flow miss)といってもよい。
【0036】
コントロールプレーン200が決定するアクションの内容には、flow,bridge,route,NextHopが含まれてもよく、また、block serviceやAdder changeのようなセキュリティポリシーが含まれてもよい。
【0037】
コントロールプレーン200は、例えば、経路制御プロトコルであるBGP(Border Gateway Protocol)に基づいて宛先情報を解析してもよい。
【0038】
また、コントロールプレーン200は、フローミスとなったパケットに、当該パケットが属するフローについて決定したアクションをfoward情報として付加し、当該foward情報が付加されたパケットをデータプレーン100aの再投入ポート107に入力させる。
【0039】
仮想ルータ1aにおいては、パケットの5tuple(送信元IP,送信元ポート番号,宛先IP,宛先ポート番号およびプロトコル番号)に基づいて算出したハッシュ値(hash)を用いて、個々のパケットのフローを特定してよい。
【0040】
以下、パケットの5tupleに基づいて算出したハッシュ値を、単に、パケットのハッシュ値という場合がある。また、例えば、フローの一致/不一致等の判断にパケットのハッシュ値を比較することを、単に、パケットを比較するという場合がある。
【0041】
コントロールプレーン200は、情報処理装置20に備えられてもよい。また、情報処理装置20は、他の情報処理装置とネットワークを介して接続された情報処理システム(通信制御システム)を構成してもよく、コントロールプレーン200は、この情報処理装置20に接続された他の情報処理装置に備えられてもよい。
【0042】
仮想ルータ1aのデータプレーン100aは、図2に示すように、パイプライン101,外部インタフェース102,VMインタフェース103,クロスバースイッチ(Xbar SW)104,退避用バッファ部105,検査回路106aおよび再投入ポート107を備える。
【0043】
再投入ポート107には、コントロールプレーン200から再投入されるパケットが入力される。再投入ポート107に入力されたパケットを再投入パケットといってもよい。また、再投入ポート107をインジェクションポート(inje)107といってもよい。
再投入ポート107に入力されたパケットは、後述する検査回路106aに転送(入力)される。
【0044】
パイプライン101には、転送されるパケットが入力される。このパイプライン101上にあるパケットについて複数の管理テーブル等が参照され、宛先検索等が行なわれる。管理テーブルにおいて、flow(フロー),bridge,route,NextHop等が管理される。また、特に、フローを管理する管理テーブルをフローテーブルといってもよい。フローテーブルは、フローを構成する複数のパケットの転送に用いられる転送制御情報として機能する。
パイプライン101に入力されたパケットはFIFO(First In, First Out)でクロスバースイッチ104に出力されてもよい。
また、パイプライン101は、フローテーブルにフローが登録されていないパケットを、後述する退避用バッファ部105に転送する。
【0045】
さらに、パイプライン101は、フローを構成する複数のパケットの転送時に、フローテーブル(転送制御情報)に未登録(フローミス)のフローのパケットを検出すると、前フローテーブルにおいて当該フローに対してhold(宛先解決待ち状態)を設定する設定部として機能する。
【0046】
外部インタフェース102は、図示しない外部装置との間でパケットの送受信を行なう。外部装置へ送出されるパケットは、この外部インタフェース102を介して送信される。また、外部装置から入力されたパケットは、この外部インタフェース102によって受信され、パイプライン101に入力される。
【0047】
VMインタフェース103は、仮想マシン300との間でパケットの送受信を行なう。仮想マシン300へ送出されるパケットは、このVMインタフェース103を介して送信される。また、仮想マシン300から入力されたパケットは、このVMインタフェース103によって受信され、パイプライン101に入力される。
【0048】
クロスバースイッチ104は、パイプライン101および退避用バッファ部105からそれぞれ出力されるパケットの送出先を、各宛先に応じて切り替える。クロスバースイッチ104は、例えば、外部装置へ送信されるパケットを外部インタフェース102に入力する。また、クロスバースイッチ104は、仮想マシン300へ送信されるパケットをVMインタフェース103に入力する。
【0049】
また、クロスバースイッチ104は、パイプライン101に入力されたパケットであって、フローテーブルにそのフローが登録されていないパケットをコントロールプレーン200に入力する。図2に示す例においては、コントロールプレーン200にパケットを送出するために用いるポートを符号pkt0を付して示している。
【0050】
退避用バッファ部105には、フローテーブルにフローが登録されていないパケットが入力される。退避用バッファ部105は、複数種類のフローに属する複数のパケットが入力され、退避用バッファ部105は、これらの複数種類のフローに属する複数のパケットの中から、特定のフローに属するパケットだけを選択して出力することができる。
また、退避用バッファ部105に入力される同一のフローに属する複数のパケットは、その順序を維持した状態で出力される。
退避用バッファ部105は、hold(宛先解決待ち)状態において受信したパケットの少なくとも一部を格納する退避用キューとして機能する。
なお、退避用バッファ部105の詳細な構成については図4を用いて後述する。
検査回路106aは、パイプライン101および退避用バッファ部105からそれぞれ出力されるパケットの制御を行なう。
検査回路106aには、コントロールプレーン200が再投入ポート107に投入したパケットが入力される。
【0051】
検査回路106aは、再投入ポート107からパケットが入力されると、フローテーブルにおける当該パケットのフローに対してstallを登録(設定)する。
図3は第1実施形態の一例としての仮想ルータ1aにおけるフローテーブルにおける管理情報の遷移を示す図である。
【0052】
本仮想ルータ1aにおいて、フローテーブルにおける各フローの管理情報は、図3に示すように、invalid、hold、stallおよびvalidの順で遷移する。
【0053】
ここで、invalidは当該フローがフローテーブルに未登録(無効)であることを示す。パイプライン101は、フローテーブルにinvalidが設定されているフローに属するパケットを、退避用バッファ部105に格納する。
【0054】
validは当該フローがフローテーブルに登録済み(有効)であることを示す。パイプライン101は、フローテーブルにvalidが設定されているフローに属するパケットを、フローテーブルにおいて当該フローに対して設定されているアクションに従って処理を行ない、クロスバースイッチ104に入力する。
【0055】
holdは、当該フローがフローテーブルに未登録であり、且つ、コントロールプレーン200により当該フローのアクションがフローテーブルに登録されることを待機している状態であることを示す。すなわち、holdは、当該フローのコントロールプレーン200による宛先解決待ちの状態を示す。パイプライン101は、フローテーブルにholdが設定されているフローに属するパケットを、退避用バッファ部105に格納する。
パイプライン101においてフローミスが検出されると、フローテーブルにおいて、当該パケットが属するフローにholdが設定される。
【0056】
stallは、コントロールプレーン200により当該フローのアクションがフローテーブルに登録され、当該フローのパケットが再投入ポート107に再投入された状態であることを示す。パイプライン101は、フローテーブルにstallが設定されているフローに属するパケットが入力された場合に、当該パイプライン101を停止させる。stallは、パイプライン101を停止させる制御情報として機能する。
図4は第1実施形態の一例としての仮想ルータ1aにおける退避用バッファ部105および検査回路106aの構成を例示する図である。
【0057】
退避用バッファ部105は、図4に示すように、入力切替スイッチ1051,FIFOバッファ1052-1,1052-2,出力制御スイッチ1053-1,1053-2,コンパレータ1054-1,1054-2,出力ゲート1055および切替判定部1056を備える。
【0058】
FIFOバッファ1052-1,1052-2はいずれもFIFOバッファであり、パイプライン101から入力されるパケットが、FIFOバッファ1052-1,1052-2のいずれか一方に入力される。
以下、FIFOバッファ1052-1,1052-2を特に区別しない場合には、FIFOバッファ1052と表記する。
【0059】
入力切替スイッチ1051は、パイプライン101から入力されるパケットをFIFOバッファ1052-1とFIFOバッファ1052-2とのいずれか一方に入力する(振り分ける)。入力切替スイッチ1051は、例えば、FIFOバッファ1052-1とFIFOバッファ1052-2とのいずれか一方に連続してパケットを格納させ、当該FIFOバッファ1052がバッファフル状態になると、他方に切り替えてパケットを格納させる制御を行なう。
【0060】
出力制御スイッチ1053-1はFIFOバッファ1052―1からパケットを出力し、コンパレータ1054―1に入力させる。出力制御スイッチ1053-2はFIFOバッファ1052―2からパケットを出力し、コンパレータ1054―2に入力させる。以下、出力制御スイッチ1053―1,1053―2を特に区別しない場合には、出力制御スイッチ1053と表記する。
【0061】
これらの出力制御スイッチ1053は、後述する検査回路106aの順序制御回路1063からの検査開始指示に従って、FIFOバッファ1052からパケットを出力させる。
【0062】
コンパレータ1054-1は、FIFOバッファ1052―1から出力されたパケットのハッシュ値と、順序制御回路1063から入力される比較対象のハッシュ値とを比較する。比較対象のハッシュ値は、退避用バッファ部105から出力させたいパケットのフローを示す。
【0063】
この比較の結果、ハッシュ値が一致した場合に、コンパレータ1054-1は、FIFOバッファ1052―1から出力されたパケットを、出力ゲート1055を介してクロスバースイッチ104に対して出力する。また、比較の結果、ハッシュ値が不一致であった場合には、コンパレータ1054―1は、FIFOバッファ1052―1から出力されたパケットを、後述する切替判定部1056に入力する。
【0064】
コンパレータ1054-2は、FIFOバッファ1052―2から出力されたパケットのハッシュ値と、順序制御回路1063から入力される比較対象のパケットのハッシュ値(比較対象ハッシュ値)とを比較する。
【0065】
この比較の結果、ハッシュ値が一致した場合に、コンパレータ1054―2は、FIFOバッファ1052―2から出力されたパケットを、出力ゲート1055を介してクロスバースイッチ104に対して出力する。また、比較の結果、ハッシュ値が不一致であった場合には、コンパレータ1054―2は、FIFOバッファ1052―2から出力されたパケットを切替判定部1056に入力する。
【0066】
以下、コンパレータ1054-1,1054-2を特に区別しない場合には、コンパレータ1054と表記する。
コンパレータ1054による比較の結果、順序制御回路1063から入力される比較対象のパケットのハッシュ値に一致するパケットを出力対象パケットといってもよい。また、コンパレータ1054による比較の結果、順序制御回路1063から入力される比較対象のパケットのハッシュ値に一致しないパケットを出力非対象パケットといってもよい。
退避用バッファ部105(FIFOバッファ1052)からは、出力対象パケットだけが出力される。
【0067】
コンパレータ1054において、順序制御回路1063から入力される比較対象ハッシュ値は、退避用バッファ部105から出力させるパケットを特定するための出力パケット特定情報として機能する。
【0068】
切替判定部1056は、コンパレータ1054―1からパケットが入力されると、当該パケットをFIFOバッファ1052―2に格納する。また、切替判定部1056は、コンパレータ1054―2からパケットが入力されると、当該パケットをFIFOバッファ1052―1に格納する。
【0069】
これにより、退避用バッファ部105のFIFOバッファ1052においては、コンパレータ1054による比較の結果判定された出力非対象パケットが格納される。このFIFOバッファ1052への再度の格納に際して、2つ(1組)のFIFOバッファ1052のうちの一方のFIFOバッファ1052に格納されていた出力非対象パケットは、他方のFIFOバッファ1052に格納(移動)される。
【0070】
また、切替判定部1056は、1つのフローに属する全てのパケットがFIFOバッファ1052から出力された場合に、検査回路106aの順序制御回路1063に対して、出力完了報告を通知する。
【0071】
出力ゲート1055には、コンパレータ1054-1,1054-2のそれぞれから出力されるパケットが入力され、これらの入力されたパケットをクロスバースイッチ104に入力する。
【0072】
検査回路106aは、図4に示すように、アクションデコーダ1061,stall書込処理部1062,順序制御回路1063,valid書込制御部1064および再起動指示部1065としての機能を備える。
【0073】
アクションデコーダ1061は、再投入ポート107から入力された再投入パケットから、コントロールプレーン200によって設定されたアクションの情報を抽出し、デコードを行なう。
【0074】
stall書込処理部1062には、再投入ポート107から再投入パケットが入力される。stall書込処理部1062は、再投入パケットのハッシュ値に基づいてフローテーブルを参照し、フローテーブルにおける当該パケットが属するフローに対してstallを登録(設定)する。
【0075】
上述の如く、stallが設定されているフローに属するパケットが入力された場合には、パイプライン101は停止される。従って、stall書込処理部1062は、フローに対する宛先解決後に、転送するパケットを処理するパイプライン101を停止させる停止処理部として機能する。
【0076】
順序制御回路1063は、各出力制御スイッチ1053に対して、検査開始指示を入力し、各FIFOバッファ1052に格納されたパケットを、順次、コンパレータ1054に出力させる。
【0077】
順序制御回路1063は、再投入ポート107から入力されたパケット(転送対象パケット)が属するフローを表すハッシュ値を退避用バッファ部105の各コンパレータ1054に入力する。転送対象パケットが属するフローを表すハッシュ値は、退避用バッファ部105から出力させるパケットを特定するための出力パケット特定情報として機能する。
【0078】
また、順序制御回路1063には、退避用バッファ部105の切替判定部1056から、1つのフローに属する全てのパケットがFIFOバッファ1052から出力されたことを示す出力完了報告が入力される。順序制御回路1063は、順序制御回路1063から出力完了報告が入力されると、valid書込制御部1064に処理対象のフローの出力が完了した旨の通知を入力する。
【0079】
valid書込制御部1064は、順序制御回路1063から処理対象のフローの出力が完了した旨の通知が入力されると、フローテーブルにおける当該処理対象フローに対してvalidを登録(設定)する。valid書込制御部1064は、処理対象のフローの出力が完了した旨の通知を再起動指示部1065に入力してもよい。
【0080】
再起動指示部1065は、フローテーブルにおけるフローにvalidが設定されると、パイプライン101に対して再起動を行なわせる。これにより、パイプライン101上に保持されていたパケットが出力される。valid書込制御部1064から処理対象のフローの出力が完了した旨の通知が入力されると、パイプライン101に対して再起動を行なわせてもよい。
【0081】
再起動指示部1065は、退避用バッファ部105(退避用キュー)に格納したパケットの出力が完了した後に、パイプライン101を動作させる作動制御部として機能する。
(B)動作
【0082】
上述の如く構成された第1実施形態の一例としての仮想ルータ1aにおける処理を、図7図12を参照しながら、図5および図6に示すタイミングチャートに従って説明する。
【0083】
図7図12は、本第1実施形態の一例としての仮想ルータ1aにおける処理の遷移を例示する図であり、図7は初期状態(状態0)を示し、図8図12は、それぞれ状態1~5を示す。
【0084】
また、図7図12に示す例においては、仮想マシン300が、パケットa1~a5を備えるフローaと、パケットb1~b5を備えるフローbと、パケットc1~c5を備えるフローcとを送信する例を示し、主にフローaの転送処理について説明する。
【0085】
フローbは、フローaの処理中に検出されるフローであって、初期状態においては、これらのフローa,bはフローテーブルに未登録(invalid)であるものとする(図7の符号P1,P2参照)。また、初期状態において、フローcはフローテーブルに登録済み(valid)であるものとする(図7の符号P3参照)。
【0086】
送信元の仮想マシン(送信VM)300から送信先の仮想マシン(受信VM)300に対して送信されたパケットa1はパイプライン101に入力される(図5の符号S01)。パイプライン101は、フローテーブルを参照し(図5の符号S02)、フローaがinvalidであることを取得(フローミスを検出)する(図5の符号S03,図8の符号P1参照)。
【0087】
パイプライン101は、フローテーブルにおけるフローaの管理情報にholdを設定する(図8の符号P2参照)。また、パイプライン101は、フローミスとなったパケットa1をコントロールプレーン200に転送する(図5の符号S04,図9の符号P1参照)。コントロールプレーン200においては、フローaについての宛先検索を開始する。
さらに、パイプライン101は、パケットa1を退避用バッファ部105に登録する(図5の符号S05,図9の符号P2参照)。
【0088】
また、送信元の仮想マシン(送信VM)300は、送信先の仮想マシン(受信VM)300に対してパケットa2を送信し、このパケットa2はパイプライン101に入力される(図5の符号S06)。このパケットa2は、フローテーブルにおけるフローaの管理情報にholdが設定される前にパイプライン101に到達したものとする。
【0089】
パイプライン101は、フローテーブルを参照し(図5の符号S07)、フローaがinvalidであることを取得(フローミスを検出)する(図5の符号S08)。
【0090】
パイプライン101は、フローミスとなったパケットa2をコントロールプレーン200に転送する(図5の符号S09,図9の符号P3参照)。コントロールプレーン200においては、フローaについての宛先検索を実施中であるので、このパケットa2に基づくフローaの宛先検索は行なわれず、パケットa2はコントロールプレーン200から破棄される(図5の符号S10)。
さらに、パイプライン101は、パケットa2を退避用バッファ部105に登録する(図5の符号S11,図9の符号P4参照)。
ここで、フローテーブルにおけるフローaの管理情報にholdが反映される(図5の符号S12,図9の符号P5参照)。
【0091】
また、送信元の仮想マシン(送信VM)300は、送信先の仮想マシン(受信VM)300に対してパケットa3を送信し、このパケットa3はパイプライン101に入力される(図5の符号S13)。パイプライン101は、フローテーブルを参照し(図5の符号S14)、フローaがholdであることを取得する(図5の符号S15)。
パイプライン101は、パケットa3を退避用バッファ部105に登録する(図5の符号S16)。
【0092】
また、送信元の仮想マシン(送信VM)300は、送信先の仮想マシン(受信VM)300に対して送信するパケットb1を出力し、このパケットb1はパイプライン101に入力される(図5の符号S17)。パイプライン101は、フローテーブルを参照し(図5の符号S18)、フローbがinvalidであることを取得(フローミスを検出)する(図5の符号S19,図9の符号P6参照)。
【0093】
パイプライン101は、フローテーブルにおけるフローbの管理情報にholdを設定する(図10の符号P1参照)。また、パイプライン101は、フローミスとなったパケットb1をコントロールプレーン200に転送する(図5の符号S20)。コントロールプレーン200においては、フローbについての宛先検索を開始する。
さらに、パイプライン101は、パケットb1を退避用バッファ部105に登録する(図5の符号S21,図10の符号P2参照)。
【0094】
また、送信元の仮想マシン(送信VM)300は、送信先の仮想マシン(受信VM)300に対してパケットa4を送信し、このパケットa4はパイプライン101に入力される(図5の符号S22)。パイプライン101は、フローテーブルを参照し(図5の符号S23)、フローaがholdであることを取得する(図5の符号S24)。
さらに、パイプライン101は、パケットa4を退避用バッファ部105に登録する(図5の符号S25,図10の符号P3参照)。
【0095】
その後、同様にして、送信元の仮想マシン(送信VM)300から、送信先の仮想マシン(受信VM)300に対してパケットb2,a5が送信され、同様の処理が行なわれて、これらのパケットb2,a5が退避用バッファ部105に登録される(図6の符号S26,図11の符号P1参照)。
【0096】
ここで、コントロールプレーン200において宛先検索が完了すると(図6の符号S27)、コントロールプレーン200は、パケットa1にforwardを付して再投入ポート107に転送する。
【0097】
再投入ポート107に入力されたforwardが付されたパケットa1は、検査回路106aに入力される(図6の符号S28,図10の符号P4参照)。検査回路106aは、フローテーブルにおける当該パケットa1のフローaに対してstallを登録(設定)する(図6の符号S29,図11の符号P2参照)。
【0098】
検査回路106aは、forwardが付されたパケットa1から宛先情報を取得し、退避用バッファ部105格納されている該当フロー(本例ではフローa)に属する各パケット(a1~a5)に宛先情報を付加する(図6の符号S30,図11の符号P3参照)。検査回路106aにおいて順序制御回路1063は、退避用バッファ部105に格納された複数のパケットのうち、パケットa1と同一のフローに属する各パケットa1~a5を出力させる(図6の符号S31,図12の符号P1参照)。クロスバースイッチ104は退避用バッファ部105から出力されたこれらのパケットを、送信先の仮想マシン(受信VM)300に送信する。
【0099】
退避用バッファ部105の切替判定部1056が、順序制御回路1063に対して、フローaに属する全てのパケットa1~a5がFIFOバッファ1052から出力されたことを示す出力完了報告を入力する(図6の符号S32,図12の符号P2参照)。
【0100】
またここで、送信元の仮想マシン(送信VM)300は、送信先の仮想マシン(受信VM)300に対して送信するパケットa6を出力し、このパケットa6はパイプライン101に入力される(図6の符号S33)。パイプライン101は、フローテーブルを参照し(図6の符号S34)、フローaがstallであることを取得する(図5の符号S35)。これにより、パイプライン101は、当該パイプライン101を停止させる(図6の符号S36)。これにより、パケットa6はパイプライン101上に保持される(図6の符号S37,図11の符号P4参照)。
【0101】
一方、切替判定部1056から出力完了報告が入力された検査回路106aにおいては、valid書込制御部1064が、フローテーブルにおけるフロー(処理対象フロー)aに対してvalidを登録(設定)する(図6の符号S38,図12の符号P3参照)。また、valid書込制御部1064は、処理対象のフローの出力が完了した旨の通知を再起動指示部1065に入力する。
【0102】
再起動指示部1065は、フローテーブルにおけるフローにvalidが設定されると(図6の符号S39)、パイプライン101に対して再起動を行なわせる(図6の符号S40)。これにより、パイプライン101上に保持されていたパケットa6が出力され、送信先の仮想マシン(受信VM)300に送信される(図6の符号S41)。
送信先の仮想マシン(受信VM)300においては、フローaのパケットa1~a5が正しい順序で受信される。
【0103】
次に、上述の如く構成された第1実施形態の一例としての仮想ルータ1aにおけるパイプライン101の処理を、図13に示したフローチャート(ステップA1~A14)に従って説明する。
この図13に示す処理は、仮想マシン300から出力されたパケットがパイプライン101に到着することで開始される。
ステップA1において、パイプライン101は、入力されたパケットの5tupleに基づいて算出したハッシュ値を用いて、フローテーブルを検索する。
【0104】
ステップA2において、パイプライン101は、フローテーブルからの応答(response)がvalidであるかを確認する。この確認の結果、フローテーブルからの応答がvalidである場合には(ステップA2のYESルート参照)、ステップA3において、パイプライン101は、当該パケットを、フローテーブルを参照して得られる宛先の仮想マシン300に出力する。その後、処理を終了する。
【0105】
ステップA2における確認の結果、フローテーブルからの応答がvalidでない場合には(ステップA2のNOルート参照)、ステップA4に移行する。ステップA4において、パイプライン101は、フローテーブルからの応答(response)がholdであるかを確認する。この確認の結果、フローテーブルからの応答がholdである場合には(ステップA4のYESルート参照)、ステップA5において、パイプライン101は、当該パケットを、退避用バッファ部105に出力する。その後、処理を終了する。
【0106】
また、ステップA4における確認の結果、フローテーブルからの応答がholdでない場合には(ステップA4のNOルート参照)、ステップA6に移行する。ステップA6において、パイプライン101は、フローテーブルからの応答(response)がinvalidであるかを確認する。この確認の結果、フローテーブルからの応答がinvalidである場合には(ステップA6のYESルート参照)、ステップA7において、パイプライン101は、当該パケットを、コントロールプレーン200に出力する。
【0107】
ステップA8において、パイプライン101は、フローテーブルにおける当該パケットが属するフローの管理情報をholdに変更する。そして、パイプライン101は、ステップA9において、当該パケットを、退避用バッファ部105に出力し、処理を終了する。
【0108】
ステップA6における確認の結果、フローテーブルからの応答がinvalidでない場合には(ステップA6のNOルート参照)、ステップA10に移行する。ステップA10において、パイプライン101は、フローテーブルからの応答(response)がstallであるかを確認する。この確認の結果、フローテーブルからの応答がstallである場合には(ステップA10のYESルート参照)、ステップA11において、パイプライン101は、当該パイプライン101を停止させる。
【0109】
ステップA12において、パイプライン101は、パイプライン101の起動指示が入力されたかを確認する。パイプライン101の起動指示が入力されていない場合には(ステップA12のNOルート参照)、ステップA11に戻り、パイプライン101の停止を継続して行なう。
【0110】
パイプライン101の起動指示が入力されると(ステップA12のYESルート参照)、ステップA13において、パイプライン101は、当該パケットを、フローテーブルを参照して得られる宛先の仮想マシン300に出力する。その後、処理を終了する。
【0111】
ステップA10における確認の結果、フローテーブルからの応答がstallでない場合には(ステップA10のNOルート参照)、ステップA14に移行する。ステップA14において、パイプライン101は、エラーメッセージの出力等、予め規定されたエラー発生時の処理を行なう。その後、処理を終了する。
【0112】
(C)効果
このように、第1実施形態の一例としての仮想ルータ1aによれば、退避用バッファ部105を備え、フローミスが生じたパケット、すなわち、フローテーブルにinvalidが設定されているフローに属するパケットをこの退避用バッファ部105に格納する。
また、パイプライン101は、フローテーブルにholdが設定されているフローに属するパケットを、退避用バッファ部105に格納する。
【0113】
コントロールプレーン200によりアクションがフローテーブルに登録され、当該フローのパケットが再投入ポート107に再投入された状態のパケットが属するフローに対して、フローテーブルにおける管理情報にstallを設定する。
【0114】
そして、パイプライン101は、フローテーブルにstallが設定されているフローに属するパケットが入力された場合に、当該パイプライン101を停止させる。これにより、退避用バッファ部105に格納されている同一のフローに属するパケットに後続するパケットがパイプライン101から出力されることを抑止する。
【0115】
従って、FPGA10によるハードオフロードが実現された仮想ルータ1aにおいてフローミスが生じた場合においても、コントロールプレーン200において宛先検索が行なわれ、フローテーブルの更新が行なわれる間に送信されたパケットについて、順序逆転が発生することを抑止することができる。また、これにより、パケットの順序逆転を原因とするフローの再送を抑止することができ、より効率的なパケット転送を実現することができる。
【0116】
退避用バッファ部105が、複数のFIFOバッファ1052と、これらのFIFOバッファ1052に対応させた複数のコンパレータ1054とを備える。そして、コンパレータ1054において、FIFOバッファ1052から出力されたパケットのハッシュ値と、順序制御回路1063から入力される比較対象のパケットのハッシュ値とを比較する。
【0117】
この比較の結果、ハッシュ値が一致した場合に、コンパレータ1054は、FIFOバッファ1052から出力されたパケットをクロスバースイッチ104に対して出力する。また、比較の結果、ハッシュ値が不一致であった場合には、コンパレータ1054は、FIFOバッファ1052から出力されたパケットを、他のFIFOバッファ1052に格納させる。
これにより、退避用バッファ部105から順序制御回路1063が指定するフローに属するパケットだけを容易に選択して出力することができる。
【0118】
(II)第2実施形態の説明
(A)構成
本発明の第2実施形態の一例としての仮想ルータ1bの機能も、第1実施形態の仮想ルータ1aと同様に、情報処理装置20によって実現される。
図14は第2実施形態の一例としての仮想ルータ1bの機能構成を示す図である。
【0119】
第2実施形態の仮想ルータ1bは、第1実施形態の仮想ルータ1aの検査回路106aに代えて検査回路106bをそなえるとともに、1st_hold設定部1011を備えるものであり、その他の部分は第1実施形態の仮想ルータ1aと同様に構成されている。
以下、図中、既述の符号と同一の符号は同様の部分を示しているので、その説明は省略する。
【0120】
1st_hold設定部1011は、パイプライン101に入力されたパケットのうち、管理情報としてholdが設定されたパケットとして最初に検出したパケットに対して管理用のフラグ(1st_holdフラグ)を設定する。1st_holdフラグは、例えば、当該パケットのヘッダにおける特定の領域に設定してもよい。
【0121】
ここで、holdが設定されたパケットとして最初に検出したパケットであるかを判断するための時間的基準(判断開始基準時刻)として、本仮想ルータ1bの起動時を起点として用いてもよい。また、その後、本仮想ルータ1bへのパケットの入力が所定時間以上ない場合に、パケットの入力がないことが所定時間以上継続したことが検出された時を判断開始基準時刻としてよい。また、予め規定した所定時間が経過する毎に判断開始基準時刻を更新してもよく、適宜変更して実施することができる。
なお、holdは、パイプライン101においてフローミスが検出された場合に、フローテーブルにおいて、当該パケットが属するフローに設定される。
【0122】
パイプライン101は、1st_holdフラグが設定されたパケットをコントロールプレーン200に転送する。以下、1st_holdフラグが設定されたパケットを1st_holdパケットといってもよい。
また、パイプライン101は、1st_holdフラグが設定されたパケットと同じフローに属する後続するパケットを、退避用バッファ部105に格納する。
1st_hold設定部1011としての機能は、パイプライン101の機能として備えられてもよく、適宜変更して実施することができる。
図15は第2実施形態の一例としての仮想ルータ1bにおける退避用バッファ部105および検査回路106bの構成を例示する図である。
【0123】
検査回路106bは、図15に示すように、図4に示した第1実施形態の検査回路106aの順序制御回路1063に代えて1st_hold検査回路1066をそなえるものであり、その他の部分は第1実施形態の検査回路106aと同様に構成されている。
【0124】
1st_hold検査回路1066は、パケットに1st_holdフラグが設定されているか否かを判断する。1st_hold検査回路1066は、例えば、パケットのヘッダの特定の領域に“1”が設定されている場合に、当該パケットに1st_holdフラグが設定されていると判断してよい。
【0125】
本第2実施形態においては、stall書込処理部1062は、1st_hold検査回路1066がパケットに1st_holdフラグが設定されていることを確認すると、フローテーブルに対して、当該パケットが属するフローにstallを設定する。
【0126】
また、1st_hold検査回路1066は、第1実施形態の順序制御回路1063と同様に、各出力制御スイッチ1053に対して、検査開始指示を入力し、各FIFOバッファ1052に格納されたパケットを、順次、コンパレータ1054に出力させる。
【0127】
さらに、1st_hold検査回路1066には、退避用バッファ部105の切替判定部1056から、1つのフローに属する全てのパケットがFIFOバッファ1052から出力されたことを示す出力完了報告が入力される。1st_hold検査回路1066は、順序制御回路1063から出力完了報告が入力されると、valid書込制御部1064に処理対象のフローの出力が完了した旨の通知を入力する。
【0128】
(B)動作
上述の如く構成された第2実施形態の一例としての仮想ルータ1bにおける処理を、図18図24を参照しながら、図16および図17に示すタイミングチャートに従って説明する。
【0129】
図18図24は、本第2実施形態の一例としての仮想ルータ1bにおける処理の遷移を例示する図であり、図18は初期状態(状態0)を示し、図19図24は、それぞれ状態1~6を示す。
【0130】
また、図18図24に示す例においても、図7図12と同様に、仮想マシン300が、パケットa1~a5を備えるフローaと、パケットb1~b5を備えるフローbと、パケットc1~c5を備えるフローcとを送信する例を示し、主にフローaの転送処理について説明する。
なお、図中、既述の符号と同一の符号は同様同一もしくは略(ほぼ)同一の処理を示しているので、その詳細な説明は省略する。
【0131】
フローbは、フローaの処理中に検出されるフローであって、初期状態においては、これらのフローa,bはフローテーブルに未登録(invalid)であるものとする(図18の符号P1,P2参照)。また、初期状態において、フローcはフローテーブルに登録済み(valid)であるものとする(図18の符号P3参照)。
【0132】
送信元の仮想マシン(送信VM)300から送信先の仮想マシン(受信VM)300に対して送信すべく出力されたパケットa1はパイプライン101に入力される(図16の符号S01)。パイプライン101は、フローテーブルを参照し(図16の符号S02)、フローaがinvalidであることを取得(フローミスを検出)する(図16の符号S03,図19の符号P1参照)。
【0133】
パイプライン101は、フローテーブルにおけるフローaの管理情報にholdを設定する(図19の符号P2参照)。また、パイプライン101は、フローミスとなったパケットa1をコントロールプレーン200に転送する(図16の符号S04,図20の符号P1参照)。コントロールプレーン200においては、フローaについての宛先検索を開始する。
【0134】
また、送信元の仮想マシン(送信VM)300は、送信先の仮想マシン(受信VM)300に対して送信するパケットa2を出力し、このパケットa2はパイプライン101に入力される(図16の符号S06)。このパケットa2は、フローテーブルにおけるフローaの管理情報にholdが設定される前にパイプライン101に到達したものとする。
【0135】
パイプライン101は、フローテーブルを参照し(図16の符号S07)、フローaがinvalidであることを取得(フローミスを検出)する(図16の符号S08)。
【0136】
パイプライン101は、フローミスとなったパケットa2をコントロールプレーン200に転送する(図16の符号S09,図20の符号P2参照)。
コントロールプレーン200は、パケットa2を再投入ポート107に入力する(図21の符号P1参照)。
ここで、フローテーブルにおけるフローaの管理情報にholdが反映される(図16の符号S12,図20の符号P3参照)。
【0137】
また、送信元の仮想マシン(送信VM)300は、送信先の仮想マシン(受信VM)300に対して送信するパケットa3を出力し、このパケットa3はパイプライン101に入力される(図16の符号S13)。
【0138】
パイプライン101は、フローテーブルを参照し(図16の符号S14)、フローaがholdであることを取得する(図16の符号S15)。1st_hold設定部1011は、holdが最初に設定されたパケットa3に対して1st_holdフラグを設定する。パイプライン101は、1st_holdフラグが設定されたパケットa3をコントロールプレーン200に転送する(図16の符号S16)。パイプライン101は、パケットa3に後続するフローaのパケットを退避用バッファ部105に格納する。
【0139】
また、送信元の仮想マシン(送信VM)300は、送信先の仮想マシン(受信VM)300に対して送信するパケットb1を出力し、このパケットb1はパイプライン101に入力される(図16の符号S17)。パイプライン101は、フローテーブルを参照し(図16の符号S18)、フローbがinvalidであることを取得(フローミスを検出)する(図16の符号S19,図21の符号P2参照)。
【0140】
パイプライン101は、フローテーブルにおけるフローbの管理情報にholdを設定する(図22の符号P1参照)。また、パイプライン101は、フローミスとなったパケットb1をコントロールプレーン200に転送する(図16の符号S20)。コントロールプレーン200においては、フローbについての宛先検索を開始する。
【0141】
また、送信元の仮想マシン(送信VM)300は、送信先の仮想マシン(受信VM)300に対して送信するパケットa4を出力し、このパケットa4はパイプライン101に入力される(図16の符号S22)。パイプライン101は、フローテーブルを参照し(図16の符号S23)、フローaがholdであることを取得する(図16の符号S24)。
パイプライン101は、パケットa4を退避用バッファ部105に登録する(図16の符号S25,図22の符号P2参照)。
【0142】
その後、同様にして、送信元の仮想マシン(送信VM)300から、送信先の仮想マシン(受信VM)300に対して送信するパケットb2,a5が出力され、これらのパケットb2,a5が退避用バッファ部105に登録される(図17の符号S26,図22の符号P3参照)。
【0143】
ここで、コントロールプレーン200において宛先検索が完了すると(図17の符号S27)、コントロールプレーン200は、パケットa1にforwardを付して再投入ポート107に転送する。
【0144】
再投入ポート107に入力されたパケットa1(forward付)は、検査回路106aに入力される(図17の符号S28,図21の符号P3参照)。検査回路106aは、フローテーブルにおける当該パケットa1のフローaに対してstallを登録(設定)する(図17の符号S29,図23の符号P1参照)。
【0145】
検査回路106aは、forwardが付されたパケットa1から宛先情報を取得し、退避用バッファ部105格納されている該当フロー(本例ではフローa)に属する各パケット(a1~a5)に宛先情報を付加する(図17の符号S30)。検査回路106aにおいて順序制御回路1063は、退避用バッファ部105に格納された複数のパケットのうち、パケットa1と同一のフローに属する各パケットa1~a5を出力させる(図17の符号S31,図23の符号P2参照)。クロスバースイッチ104は退避用バッファ部105から出力されたこれらのパケットを、送信先の仮想マシン(受信VM)300に送信する。
【0146】
退避用バッファ部105の切替判定部1056が順序制御回路1063に対して、フローaに属する全てのパケットa1~a5がFIFOバッファ1052から出力されたことを示す出力完了報告を入力する(図17の符号S32)。
【0147】
またここで、送信元の仮想マシン(送信VM)300は、送信先の仮想マシン(受信VM)300に対して送信するパケットa6を出力し、このパケットa6はパイプライン101に入力される(図6の符号S33)。パイプライン101は、フローテーブルを参照し(図6の符号S34)、フローaがstallであることを取得する(図17の符号S35,図23の符号P3参照)。これにより、パイプライン101は、当該パイプライン101を停止させる(図6の符号S36,図23の符号P4参照)。これにより、パケットa6はパイプライン101上に保持される(図17の符号S37)。
【0148】
一方、切替判定部1056から出力完了報告が入力された検査回路106aにおいては、valid書込制御部1064が、フローテーブルにおけるフロー(処理対象フロー)aに対してvalidを登録(設定)する(図17の符号S38,図24の符号P1参照)。また、valid書込制御部1064は、処理対象のフローの出力が完了した旨の通知を再起動指示部1065に入力する。
【0149】
再起動指示部1065は、フローテーブルにおけるフローにvalidが設定されると(図17の符号S39)、パイプライン101に対して再起動を行なわせる。これにより、パイプライン101上に保持されていたパケットa6が出力され、送信先の仮想マシン(受信VM)300に送信される(図17の符号S41)。
送信先の仮想マシン(受信VM)300においては、フローaのパケットa1~a5が正しい順序で受信される。
【0150】
次に、上述の如く構成された第2実施形態の一例としての仮想ルータ1bにおけるパイプライン101の処理を、図25に示したフローチャート(ステップA1~A8,A10~A16)に従って説明する。
この図25に示す処理は、仮想マシン300から出力されたパケットがパイプライン101に到着することで開始される。
ステップA1において、パイプライン101は、入力されたパケットの5tupleに基づいて算出したハッシュ値を用いて、フローテーブルを検索する。
【0151】
ステップA2において、パイプライン101は、フローテーブルからの応答(response)がvalidであるかを確認する。この確認の結果、フローテーブルからの応答がvalidである場合には(ステップA2のYESルート参照)、ステップA3において、パイプライン101は、当該パケットを、フローテーブルを参照して得られる宛先の仮想マシン300に出力する。その後、処理を終了する。
【0152】
ステップA2における確認の結果、フローテーブルからの応答がvalidでない場合には(ステップA2のNOルート参照)、ステップA4に移行する。ステップA4において、パイプライン101は、フローテーブルからの応答(response)がholdであるかを確認する。この確認の結果、フローテーブルからの応答がholdである場合には(ステップA4のYESルート参照)、ステップA15に移行する。
【0153】
ステップA15において、パイプライン101は、当該パケットは、holdが付加されたパケットとして最初に検出されたパケットであるかを確認する。確認の結果、当該パケットは、holdが付加されたパケットとして最初に検出されたパケットである場合には(ステップA15のYESルート参照)、ステップA16に移行する。
【0154】
ステップA16において、1st_hold設定部1011が、当該パケットに1st_holdフラグを付加する。その後、パイプライン101は、この1st_holdフラグを付加したパケットをコントロールプレーン200に出力し、処理を終了する。
【0155】
また、ステップA15おける確認の結果、当該パケットは、holdが付加されたパケットとして最初に検出されたパケットでない場合には(ステップA15のNOルート参照)、ステップA5に移行する。ステップA5において、パイプライン101は、当該パケットを、退避用バッファ部105に出力する。その後、処理を終了する。
【0156】
また、ステップA4における確認の結果、フローテーブルからの応答がholdでない場合には(ステップA4のNOルート参照)、ステップA6に移行する。ステップA6において、パイプライン101は、フローテーブルからの応答(response)がinvalidであるかを確認する。この確認の結果、フローテーブルからの応答がinvalidである場合には(ステップA6のYESルート参照)、ステップA7において、パイプライン101は、当該パケットを、コントロールプレーン200に出力する。
【0157】
ステップA8において、パイプライン101は、フローテーブルにおける当該パケットが属するフローの管理情報をholdに変更し、その後、処理を終了する。
【0158】
ステップA6における確認の結果、フローテーブルからの応答がinvalidでない場合には(ステップA6のNOルート参照)、ステップA10に移行する。ステップA10において、パイプライン101は、フローテーブルからの応答(response)がstallであるかを確認する。この確認の結果、フローテーブルからの応答がstallである場合には(ステップA10のYESルート参照)、ステップA11において、パイプライン101は、当該パイプライン101を停止させる。
【0159】
ステップA12において、パイプライン101は、パイプライン101の起動指示が入力されたかを確認する。パイプライン101の起動指示が入力されていない場合には(ステップA12のNOルート参照)、ステップA11に戻り、パイプライン101の停止を継続して行なう。
【0160】
パイプライン101の起動指示が入力されると(ステップA12のYESルート参照)、ステップA13において、パイプライン101は、当該パケットを、フローテーブルを参照して得られる宛先の仮想マシン300に出力する。その後、処理を終了する。
【0161】
ステップA10における確認の結果、フローテーブルからの応答がstallでない場合には(ステップA10のNOルート参照)、ステップA14に移行する。ステップA14において、パイプライン101は、エラーメッセージの出力等、予め規定されたエラー発生時の処理を行なう。その後、処理を終了する。
【0162】
(C)効果
このように、第2実施形態の一例としての仮想ルータ1bによれば、上述した第1実施形態と同様の作用効果を得ることができる他、退避用バッファ部105に格納するパケットの数を削減することができる。これにより、退避用バッファ部105におけるFIFOバッファ1052の使用量を削減することができ、FIFOバッファ1052のバッファオーバーフローの発生を抑止し、安定したシステム運用を実現することができる。
【0163】
すなわち、本第2実施形態の仮想ルータ1bにおいては、1st_holdパケットは退避用バッファ部105に格納させずに、コントロールプレーン200に転送させる。また、図18図24に示した例において、パケットa1~a3は退避用バッファ部105に格納させずにコントロールプレーン200に転送する。また、フローテーブルにおいてinvalidが設定されたパケットについても、コントロールプレーン200に転送させるだけで、退避用バッファ部105には格納させない。これらにより、退避用バッファ部105におけるFIFOバッファ1052の使用量を削減することができる。
【0164】
(III)その他
各実施形態の各構成および各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。
【0165】
例えば、上述した実施形態においては、退避用バッファ部105が、2つのFIFOバッファ1052-1,1052-2を備え、これに合わせて出力制御スイッチ1053およびコンパレータ1054をそれぞれ2つずつ備えているが、これに限定されるものではない。FIFOバッファ1052,出力制御スイッチ1053およびコンパレータ1054をそれぞれ3つ以上備えてもよく、適宜変更して実施することができる。
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
【0166】
(E)付記
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
SDN(Software Defined Network)のフロー制御における少なくとも一部の機能をハードウェアで実施する通信制御装置であって、
フローを構成する複数のパケットの転送時に、転送制御情報に未登録のフローのパケットを検出すると、前記転送制御情報において当該フローに対して宛先解決待ち状態を設定する設定部と、
前記宛先解決待ち状態において受信したパケットの少なくとも一部を格納する退避用キューと、
前記フローに対する宛先解決後に、転送するパケットを処理するパイプラインを停止させる停止処理部と、
前記退避用キューに格納した前記フローに属するパケットを出力させる出力制御部と、
前記退避用キューに格納した前記パケットの出力が完了した後に、前記パイプラインを動作させる作動制御部と、
を備えることを特徴とする、通信制御装置。
【0167】
(付記2)
前記停止処理部は、前記転送制御情報に対して、前記パイプラインを停止させる制御情報を設定する
ことを特徴とする、付記1に記載の通信制御装置。
【0168】
(付記3)
前記退避用キューが、
複数のFIFO(First In, First Out)バッファと、
前記FIFOバッファから出力されたパケットを出力パケット特定情報と比較し、前記出力されたパケットが前記出力パケット特定情報と一致する場合に、当該退避用キューから出力させる比較部と
を備えることを特徴とする、付記1または2に記載の通信制御装置。
【0169】
(付記4)
前記パイプラインに入力されたパケットのうち、宛先解決待ち状態が設定されたパケットとして最初に検出した第1のパケットを検出する検出部を備え、
前記退避用キューは、前記第1のパケットに後続する、当該第1のパケットと同じフローに属するパケットを格納する
ことを特徴とする、付記1~3のいずれか1項に記載の通信制御装置。
【0170】
(付記5)
SDN(Software Defined Network)のフロー制御における少なくとも一部の機能をハードウェアで実施する通信制御装置を備える通信制御システムであって、
フローを構成する複数のパケットの転送時に、転送制御情報に未登録のフローのパケットを検出すると、前記転送制御情報において当該フローに対して宛先解決待ち状態を設定する設定部と、
前記宛先解決待ち状態において受信したパケットの少なくとも一部を格納する退避用キューと、
前記フローに関する宛先解決を行なう宛先解決部と、
前記フローに対する宛先解決後に、転送するパケットを処理するパイプラインを停止させる停止処理部と、
前記退避用キューに格納した前記フローに属するパケットを出力させる出力制御部と、
前記退避用キューに格納した前記パケットの出力が完了した後に、前記パイプラインを動作させる作動制御部と、
を備えることを特徴とする、通信制御システム。
【0171】
(付記6)
前記停止処理部は、前記転送制御情報に対して、前記パイプラインを停止させる制御情報設定する
ことを特徴とする、付記5に記載の通信制御システム。
【0172】
(付記7)
前記退避用キューが、
複数のFIFO(First In, First Out)バッファと、
前記FIFOバッファから出力されたパケットを出力パケット特定情報と比較し、前記出力されたパケットが前記出力パケット特定情報と一致する場合に、当該退避用キューから出力させる比較部と
を備えることを特徴とする、付記5または6に記載の通信制御システム。
【0173】
(付記8)
前記パイプラインに入力されたパケットのうち、宛先解決待ち状態が設定されたパケットとして最初に検出した第1のパケットを検出する検出部を備え、
前記退避用キューは、前記第1のパケットに後続する、当該第1のパケットと同じフローに属するパケットを格納する
ことを特徴とする、付記5~7のいずれか1項に記載の通信制御システム。
【0174】
(付記9)
SDN(Software Defined Network)のフロー制御における少なくとも一部の機能をハードウェアで実施する通信制御装置において、
フローを構成する複数のパケットの転送時に、転送制御情報に未登録のフローのパケットを検出すると、前記転送制御情報において当該フローに対して宛先解決待ち状態を設定する処理と、
前記宛先解決待ち状態において受信したパケットの少なくとも一部を退避用キューに格納する処理と、
前記フローに対する宛先解決後に、転送するパケットを処理するパイプラインを停止させる処理と、
前記退避用キューに格納した前記フローに属するパケットを出力させる処理と、
前記退避用キューに格納した前記パケットの出力が完了した後に、前記パイプラインを動作させる処理と、
を備えることを特徴とする、通信制御方法。
【0175】
(付記10)
前記パイプラインを停止させる処理は、
前記転送制御情報に対して、前記パイプラインを停止させる制御情報を設定する
処理を備えることを特徴とする、付記9に記載の通信制御方法。
【0176】
(付記11)
前記退避用キューが、
複数のFIFO(First In, First Out)バッファと、
前記FIFOバッファから出力されたパケットを出力パケット特定情報と比較し、前記出力されたパケットが前記出力パケット特定情報と一致する場合に、当該退避用キューから出力させる比較部と
を備えることを特徴とする、付記9または10に記載の通信制御方法。
【0177】
(付記12)
前記パイプラインに入力されたパケットのうち、宛先解決待ち状態が設定されたパケットとして最初に検出した第1のパケットを検出する処理と、
前記退避用キューに、前記第1のパケットに後続する、当該第1のパケットと同じフローに属するパケットを格納させる処理と
を備えることを特徴とする、付記9~11のいずれか1項に記載の通信制御方法。
【符号の説明】
【0178】
1a,1b 仮想ルータ
2 CPU
3 システムメモリ
4 PCIカード
5 オンボードメモリ
10 FPGA
11 SRAM
12 レジスタ
20 情報処理装置
100a データプレーン
101 パイプライン
102 外部インタフェース
103 VMインタフェース
104 クロスバースイッチ
105 退避用バッファ部
107 再投入ポート
200 コントロールプレーン
300 仮想マシン
1011 1st_hold設定部
1051 入力切替スイッチ
1052ー1,1052ー2 FIFOバッファ
1053-1053-2 出力制御スイッチ
1054-1,1054-2 コンパレータ
1055 出力ゲート
1056 切替判定部
106a,106b 検査回路
1061 アクションデコーダ
1062 stall書込処理部
1063 順序制御回路
1064 valid書込制御部
1065 再起動指示部
1066 1st_hold検査回路
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27