JP2022035056A - 情報処理装置およびパケット制御方法 - Google Patents

情報処理装置およびパケット制御方法 Download PDF

Info

Publication number
JP2022035056A
JP2022035056A JP2020139120A JP2020139120A JP2022035056A JP 2022035056 A JP2022035056 A JP 2022035056A JP 2020139120 A JP2020139120 A JP 2020139120A JP 2020139120 A JP2020139120 A JP 2020139120A JP 2022035056 A JP2022035056 A JP 2022035056A
Authority
JP
Japan
Prior art keywords
entry
packet
flow table
memory
flow
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2020139120A
Other languages
English (en)
Inventor
貴志 清水
Takashi Shimizu
智宏 石原
Tomohiro Ishihara
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2020139120A priority Critical patent/JP2022035056A/ja
Priority to EP21171486.0A priority patent/EP3958523B1/en
Priority to US17/347,655 priority patent/US11637767B2/en
Publication of JP2022035056A publication Critical patent/JP2022035056A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/64Routing or path finding of packets in data switching networks using an overlay routing layer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/02Topology update or discovery
    • H04L45/021Ensuring consistency of routing table updates, e.g. by using epoch numbers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/22Alternate routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/38Flow based routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/54Organization of routing tables
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/58Association of routers
    • H04L45/586Association of routers of virtual routers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/7453Address table lookup; Address filtering using hashing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/74591Address table lookup; Address filtering using content-addressable memories [CAM]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

Figure 2022035056000001
【課題】パケットのルーティングのスループットを向上させる。
【解決手段】情報処理装置は、第1のメモリと第2のメモリと制御部とを有する。第1のメモリは、パケットの転送方法を示すエントリが、パケットのヘッダ情報から算出されるハッシュ値に応じた位置に格納される第1のテーブルを記憶する。第2のメモリは、第1のテーブルより大きい第2のテーブルを記憶する。制御部は、第1のテーブルの更新の際に、第1のテーブルにおいて異なるエントリの格納位置が衝突する衝突状態を検出し、衝突状態の検出に応じて、第1のテーブルに格納されているエントリを第2のテーブルに移行し、第2のテーブルの更新の際に、衝突状態の解消を検出し、解消の検出に応じて、第2のテーブルに格納されているエントリを第1のテーブルに移行する。
【選択図】図1

Description

本発明は情報処理装置およびパケット制御方法に関する。
ソフトウェア制御によって仮想的なネットワークを実現するSDN(Software Defined Networking)が提案されている。SDNシステムは、コントロールプレーンとデータプレーンという2種類のモジュールを含む。コントロールプレーンは、スイッチ間のパケットの転送経路を決定し、パケットの処理方法を示すエントリを各スイッチのフローテーブルに登録する。データプレーンは、スイッチに到着したパケットとフローテーブルとを照合して、そのパケットの処理方法を決定する。
フローテーブルの1つのエントリは、1つのフローに対応する。フローは、送信元IP(Internet Protocol)アドレス、送信元ポート番号、宛先IPアドレス、宛先ポート番号などのパケットのヘッダ情報によって規定される。フローテーブルの中のエントリが格納される位置は、ヘッダ情報から算出されるハッシュ値に基づいて決定される。データプレーンは、到着したパケットのハッシュ値を用いてフローテーブルを検索する。
なお、ルーティングテーブルを、高速なCAM(Contents Accessible Memory)と低速なRAM(Random Access Memory)とに跨がって格納するルータが提案されている。
特開2002-208945号公報
データプレーンのパケット転送は、情報処理装置が有する限られたハードウェアリソースを用いて実装されることがある。例えば、サーバコンピュータに追加したFPGA(Field Programmable Gate Array)などのハードウェアアクセラレータを用いて、データプレーンのパケット転送が実装されることがある。
この場合、フローテーブルを格納するメモリが、スループットのボトルネックになることがあるという問題がある。パケットを処理する回路との間に高速なインタフェースをもつメモリは、記憶容量が少ないことが多い。そのようなメモリにフローテーブルを格納すると、フローテーブルのサイズが小さくなり、ハッシュ値によって決定されるエントリの格納位置の衝突頻度が高くなる。一方、記憶容量が大きいメモリは、パケットを処理する回路との間に高速なインタフェースをもたないことが多い。そのようなメモリにフローテーブルを格納すると、フローテーブルのアクセス速度が低下する。
1つの側面では、本発明は、パケットのルーティングのスループットを向上させる情報処理装置およびパケット制御方法を提供することを目的とする。
1つの態様では、第1のメモリと第2のメモリと制御部とを有する情報処理装置が提供される。第1のメモリは、パケットの転送方法を示すエントリが、パケットのヘッダ情報から算出されるハッシュ値に応じた位置に格納される第1のテーブルを記憶する。第2のメモリは、第1のテーブルより大きい第2のテーブルを記憶する。制御部は、第1のテーブルの更新の際に、第1のテーブルにおいて異なるエントリの格納位置が衝突する衝突状態を検出し、衝突状態の検出に応じて、第1のテーブルに格納されているエントリを第2のテーブルに移行し、第2のテーブルの更新の際に、衝突状態の解消を検出し、解消の検出に応じて、第2のテーブルに格納されているエントリを第1のテーブルに移行する。
また、1つの態様では、コンピュータが実行するパケット制御方法が提供される。
1つの側面では、パケットのルーティングのスループットが向上する。
第1の実施の形態の情報処理装置を説明するための図である。 第2の実施の形態の情報処理システムの例を示す図である。 サーバ装置のハードウェア例を示すブロック図である。 拡張ボードのハードウェア例を示すブロック図である。 サーバ装置のソフトウェア例を示すブロック図である。 フローテーブルの例を示す図である。 フローテーブルのアクセス例を示す図である。 最長プレフィクス一致の例を示す図である。 FPGAの回路構成例を示すブロック図である。 衝突リストの例を示す図である。 フロー登録の手順例を示すフローチャートである。 フロー削除の手順例を示すフローチャートである。 テーブル整理の手順例を示すフローチャートである。 ルーティングの手順例を示すフローチャートである。 ルーティングのスループットの例を示すグラフである。 エントリの非衝突確率の例を示すグラフである。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の情報処理装置を説明するための図である。
第1の実施の形態の情報処理装置10は、テーブルを参照してパケットを転送する。情報処理装置10は、SDNのデータプレーンの機能を実装するものであってもよく、いわゆる仮想ルータを実装するものであってもよい。また、情報処理装置10は、サーバコンピュータでもよく、仮想マシンを実行していてもよい。例えば、情報処理装置10は、仮想ルータを用いて、仮想マシンが送受信するパケットを転送する。
情報処理装置10は、メモリ11,12および制御部13を有する。メモリ11,12は、例えば、RAM(Random Access Memory)などの揮発性半導体メモリである。メモリ11および制御部13は、FPGAなどのハードウェアアクセラレータに含まれていてもよく、メモリ12は、ハードウェアアクセラレータの外部に配置されていてもよい。例えば、メモリ11はFPGAに含まれるSRAM(Static Random Access Memory)、メモリ12はFPGAに接続されたオンボードメモリであるDRAM(Dynamic Random Access Memory)、制御部13はFPGAに含まれる論理回路である。ただし、制御部13がCPU(Central Processing Unit)であってもよく、メモリ12がCPUによって使用されるシステムメモリであるDRAMであってもよい。
パケットを処理する回路(例えば、FPGAの論理回路)からメモリ11には、高速なインタフェースを介してアクセスされる。一方、パケットを処理する回路からメモリ12には、メモリ11よりも低速なインタフェースを介してアクセスされる。よって、相対的に、メモリ11は高速小容量のメモリであり、メモリ12は低速大容量のメモリである。
メモリ11は、テーブル14を記憶する。テーブル14がフローテーブルと呼ばれてもよい。テーブル14は、複数のエントリを格納することができる。1つのエントリは、1つのフローに対応し、そのフローに属するパケットの処理方法を示している。フローは、通信プロトコル、送信元IPアドレス、送信元ポート番号、宛先IPアドレス、宛先ポート番号などのヘッダ情報によって識別される。処理方法を示す情報は、パケットを転送するか破棄するかの情報を含んでもよく、IPアドレスやポート番号を変換するためのNAT(Network Address Translation)情報を含んでもよい。また、処理方法を示す情報は、パケットを出力する通信インタフェースの情報を含んでもよい。
テーブル14において、あるフローのエントリは、ヘッダ情報から算出されるハッシュ値に応じた位置に格納される。ハッシュ値は、例えば、CRC(Cyclic Redundancy Checksum)32として算出される32ビットのビット列である。テーブル14では、例えば、ハッシュ値の下位の所定長のビット列(例えば、下位10ビットのビット列)が、エントリのインデックスとして使用される。一例として、エントリ16aは、192.168.24.20から10.1.120.5へのパケットをドロップすることを示している。テーブル14では、エントリ16aは0x001の位置に格納される。また、エントリ16bは、192.168.24.20から192.168.25.10へのパケットを転送することを示している。テーブル14では、エントリ16bは0x210の位置に格納される。
メモリ12は、テーブル15を記憶する。テーブル15がフローテーブルと呼ばれてもよい。テーブル15は、テーブル14と同様、複数のエントリを格納することができる。テーブル15は、テーブル14よりもサイズが大きく、テーブル14よりも多くのエントリを格納することができる。テーブル15では、例えば、ハッシュ値の下位の所定長のビット列(例えば、下位20ビットのビット列)が、エントリのインデックスとして使用される。テーブル15のインデックスのビット長は、テーブル14よりも大きい。
フローが少ないうちは、全てのエントリがテーブル14に格納されており、テーブル15は空である。情報処理装置10に到着したパケットの処理方法は、テーブル14を参照して決定される。新たなフローのエントリは、テーブル14に追加される。制御部13は、テーブル14の更新を監視する。そして、制御部13は、テーブル14において、異なるエントリの格納位置が衝突する衝突状態を検出する。例えば、テーブル14に、エントリ16cを追加しようとする場合を考える。エントリ16cは、192.168.24.30から192.168.26.20へのパケットを転送することを示している。ヘッダ情報から算出されるハッシュ値によれば、テーブル14では、エントリ16cは0x210の位置に格納される。しかし、テーブル14ではエントリ16b,16cの格納位置が衝突してしまう。
そこで、衝突状態を検出すると、制御部13は、テーブル14に格納されているエントリをテーブル15に移行する。例えば、制御部13は、テーブル14に格納されている全てのエントリをテーブル15にコピーする。テーブルサイズが異なるため、エントリの移行によって、各エントリのインデックスは変化する。テーブル15が有効になると、情報処理装置10に到着したパケットの処理方法は、テーブル14に代えてテーブル15を参照して決定される。テーブル15はテーブル14よりサイズが大きいため、テーブル14では衝突するエントリの格納位置が分散する。例えば、テーブル15では、エントリ16aが0x00001の位置に格納され、エントリ16bが0x10210の位置に格納され、エントリ16cが0x20210の位置に格納される。
テーブル15が有効になると、エントリの追加や削除は、テーブル14に代えてテーブル15に対して行われる。制御部13は、テーブル15の更新を監視する。そして、制御部13は、衝突状態の解消を検出する。例えば、制御部13は、テーブル14では格納位置が衝突することになるエントリを列挙した衝突リストを保持しておく。制御部13は、衝突リストを用いて、テーブル15の更新(例えば、テーブル15からのエントリの削除)によって衝突状態が解消したことを検出してもよい。
衝突状態の解消を検出すると、制御部13は、テーブル15に格納されているエントリをテーブル14に移行する。例えば、制御部13は、テーブル15に格納されている全てのエントリをテーブル14にコピーする。テーブルサイズが異なるため、エントリの移行によって、各エントリのインデックスは変化する。テーブル14が有効になると、情報処理装置10に到着したパケットの処理方法は、再びテーブル14を参照して決定される。
第1の実施の形態の情報処理装置10によれば、フローを示すエントリの動的な追加や削除を通じて、ソフトウェアによる柔軟なネットワーク制御が可能となる。また、FPGAなどの限定されたハードウェアリソースによって、仮想ルータを実装することができる。また、フローが少なくエントリの格納位置の衝突が発生していない間は、高速なメモリ11に記憶されたテーブル14を参照してパケット制御が行われる。一方、フローが多くテーブル14ではエントリの格納位置の衝突が発生してしまうと、大容量のメモリ12に記憶されたテーブル15を参照してパケット制御が行われる。よって、パケット処理速度と登録可能フロー数のバランスを図って、スループットを向上させることができる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
第2の実施の形態の情報処理システムは、仮想マシンを用いてコンピュータを仮想化し、仮想ルータを用いてネットワークを仮想化する。情報処理システムは、データセンタのシステムであってもよく、いわゆるクラウドシステムであってもよい。情報処理システムは、サーバ装置100,100a,100bなどの複数のサーバ装置を含む。サーバ装置100,100a,100bは、ネットワーク30に接続されている。サーバ装置100,100a,100bには、それぞれ1以上の仮想マシンが配置され、それぞれ仮想ルータが配置される。複数のサーバ装置の仮想ルータが連携して、それらサーバ装置上の仮想マシンが利用する仮想ネットワークを形成する。
図3は、サーバ装置のハードウェア例を示すブロック図である。
サーバ装置100は、CPU101、DRAM102、HDD103、画像インタフェース104、入力インタフェース105、媒体リーダ106、通信インタフェース107および拡張ボード120を有する。サーバ装置100が有するこれらのユニットは、バスに接続されている。サーバ装置100は、第1の実施の形態の情報処理装置10に対応する。他のサーバ装置が、サーバ装置100と同様のハードウェアを有してもよい。
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をDRAM102にロードし、プログラムを実行する。CPU101が複数のプロセッサコアを備えてもよく、サーバ装置100が複数のプロセッサを備えてもよい。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。また、CPU101は、拡張ボード120にデータを転送し、拡張ボード120に処理を実行させることがある。
DRAM102は、CPU101が実行するプログラムやCPU101が演算に使用するデータを一時的に記憶する揮発性半導体メモリである。DRAM102は、サーバ装置100のシステムメモリであると言うこともできる。サーバ装置100は、RAM以外の種類のメモリを備えてもよく、複数種類のメモリを備えてもよい。
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。サーバ装置100は、フラッシュメモリやSSD(Solid State Drive)など他の種類のストレージを備えてもよく、複数種類のストレージを備えてもよい。
画像インタフェース104は、CPU101からの命令に従って、サーバ装置100に接続された表示装置111に画像を出力する。表示装置111として、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイ、プロジェクタなど、任意の種類の表示装置を使用することができる。サーバ装置100に、プリンタなど表示装置111以外の出力デバイスが接続されてもよい。
入力インタフェース105は、サーバ装置100に接続された入力デバイス112から入力信号を受け付ける。入力デバイス112として、マウス、タッチパネル、タッチパッド、キーボードなど、任意の種類の入力デバイスを使用することができる。サーバ装置100に複数種類の入力デバイスが接続されてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、半導体メモリなど、任意の種類の記録媒体を使用することができる。媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、DRAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース107は、ネットワーク30に接続され、ネットワーク30を介して他のサーバ装置と通信する。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
拡張ボード120は、FPGAを含むハードウェアアクセラレータである。拡張ボード120は、CPU101からの指示に応じて、CPU101が実行可能な処理の一部をCPU101に代わって実行する。拡張ボード120は、特定種類の定型的な処理の高速化に使用される。後述するように第2の実施の形態では、拡張ボード120は、仮想ルータの処理の一部を実行する。拡張ボード120は、例えば、DRAM102から回路データを取得してFPGAの論理回路を設定する。拡張ボード120は、設定された論理回路を用いて入力データを処理し、処理結果をDRAM102に出力する。
図4は、拡張ボードのハードウェア例を示すブロック図である。
拡張ボード120は、DRAM121およびFPGA122を有する。DRAM121とFPGA122とは、メモリバスで接続されている。DRAM121は、拡張ボード120に含まれているがFPGA122の外部に配置されたオンボードメモリである。DRAM121は、FPGA122が使用するデータを記憶する。
FPGA122は、製造後に回路データに基づいて論理回路を再構成可能なプログラマブルデバイスである。FPGA122は、SRAM123、論理ブロック領域124およびレジスタ125を含む。SRAM123は、論理ブロック領域124からアクセス可能な揮発性半導体メモリであり、論理ブロック領域124で使用されるデータを記憶する。
論理ブロック領域124は、入出力関係を変更可能な多数の論理ブロックを含む。各論理ブロックは、例えば、入力信号から出力信号を決定するルックアップテーブルを含む。回路データに従って各論理ブロックの入出力関係を変更することで、論理ブロック領域124に所望の論理回路を実装することができる。レジスタ125は、少量のデータを一時的に記憶する揮発性半導体メモリである。レジスタ125は、論理ブロック領域124で使用されるデータを一時的に記憶する。
論理ブロック領域124から使用可能なメモリには、システムメモリであるDRAM102、オンボードメモリであるDRAM121、SRAM123およびレジスタ125がある。レジスタ125は、最も記憶容量が小さい。SRAM123は、レジスタ125より記憶容量が大きい。DRAM121は、SRAM123より更に記憶容量が大きい。DRAM102は、DRAM121より更に記憶容量が大きい。
DRAM102は、論理ブロック領域124からのアクセスが最も遅い。DRAM121は、DRAM102より論理ブロック領域124からのアクセスが速い。SRAM123は、DRAM121より更に論理ブロック領域124からのアクセスが速い。レジスタ125は、SRAM123より更に論理ブロック領域124からのアクセスが速い。よって、記憶容量は、DRAM102、DRAM121、SRAM123、レジスタ125の順に大きい。論理ブロック領域124からのアクセス速度は、レジスタ125、SRAM123、DRAM121、DRAM102の順に速い。
図5は、サーバ装置のソフトウェア例を示すブロック図である。
前述のように、仮想マシンを用いてコンピュータが仮想化され、仮想ルータを用いてネットワークが仮想化される。図5はサーバ装置100,100aの例を示しているが、他のサーバ装置も仮想マシンおよび仮想ルータを含む。
サーバ装置100は、仮想マシン131,132などの複数の仮想マシンと、仮想ルータ135とを含む。サーバ装置100は、仮想マシン131,132を制御するためのハイパーバイザまたは管理OSを含んでもよい。仮想マシン131は、ゲストOS133を含む。仮想マシン132は、ゲストOS134を含む。仮想マシン131,132には、サーバ装置100が有するCPUリソースやRAMリソースなどのハードウェアリソースが割り当てられる。ゲストOS133は、仮想マシン131に割り当てられたハードウェアリソースを管理し、仮想マシン131上でのアプリケーションソフトウェアの実行を制御する。ゲストOS134は、仮想マシン132に割り当てられたハードウェアリソースを管理し、仮想マシン132上でのアプリケーションソフトウェアの実行を制御する。
仮想ルータ135は、パケットを処理するルータとして機能する。仮想ルータ135は、コントロールプレーン136およびデータプレーン137を含む。仮想ルータ135は、仮想マシン131,132が出力したパケットを受け付け、受け付けたパケットのヘッダに基づいて、他のサーバ装置にパケットを転送するなど当該パケットを処理する。また、仮想ルータ135は、他のサーバ装置からパケットを受信し、受信したパケットのヘッダに基づいて、仮想マシン131,132にパケットを振り分けるなど当該パケットを処理する。仮想ルータ135の機能の詳細については後述する。
同様に、サーバ装置100aは、仮想マシン131a,132aなどの複数の仮想マシンと、仮想ルータ135aとを含む。仮想マシン131aは、ゲストOS133aを含む。仮想マシン132aは、ゲストOS134aを含む。仮想ルータ135aは、コントロールプレーン136aおよびデータプレーン137aを含む。
ここで、各サーバ装置に含まれる仮想ルータの機能について説明する。各仮想ルータは、コントロールプレーンおよびデータプレーンを含む。コントロールプレーンは、フロー毎にパケットの転送経路を決定し、パケット転送のためのフロー情報を各仮想ルータのデータプレーンに設定する。フローは、パケットの送信主体と受信主体の組み合わせ毎に規定され、通信プロトコル、送信元IPアドレス、送信元ポート番号、宛先IPアドレスおよび宛先ポート番号を含むヘッダ情報から特定される。
第2の実施の形態では、複数の仮想ルータのコントロールプレーンが連携してフローを決定する分散フロー制御を採用している。よって、仮想ルータ135のコントロールプレーン136や仮想ルータ135aのコントロールプレーン136aが相互に通信して、フローを決定する。データプレーンは、パケットを受け付け、コントロールプレーンによって設定されたフロー情報に従って、受け付けたパケットの処理方法を決定する。
例えば、データプレーン137は、受信したパケットからヘッダ情報を抽出し、抽出したヘッダ情報に対応するフロー情報を検索する。該当するフロー情報が存在する場合、データプレーン137は、該当するフロー情報に従ってパケットの転送先を決定する。一方、該当するフロー情報が存在しない場合、データプレーン137は、未知のフローのパケットとして、受信したパケットをコントロールプレーン136に転送する。
コントロールプレーン136は、データプレーン137から取得したパケットのヘッダ情報に基づいて、パケットの送信元(例えば、送信元の仮想マシン)から宛先(例えば、宛先の仮想マシン)までの最短経路を探索して、パケットの転送経路を決定する。コントロールプレーン136は、仮想ルータ135における当該ヘッダ情報をもつパケットの処理方法を示すフロー情報を生成し、データプレーン137に提供する。このとき、コントロールプレーン136は、フロー情報のタイムアウト時間を指定してもよい。
このように、新たな仮想マシンの起動などによって未知のフローが検出されたとき、データプレーン137に新たなフロー情報が追加されることがある。また、フロー情報のタイムアウトによって、データプレーン137からフロー情報が削除されることがある。フロー情報のタイムアウトは、そのフロー情報が登録されてから指定時間が経過することで発生するハードタイムアウトであることもあるし、そのフロー情報が参照されない時間が指定時間に達することで発生するアイドルタイムアウトであることもある。また、コントロールプレーン136が仮想マシンのシャットダウンを検出したときに、データプレーン137からフロー情報が削除されてもよい。コントロールプレーン136は、ハイパーバイザなどから仮想マシンの停止を示すコマンドを受信してもよい。
コントロールプレーン136は、CPU101やDRAM102を用いて実行されるソフトウェアとして実装される。一方、データプレーン137は、大量のパケットを受信し、受信した各パケットの転送先を短時間で決定できることが好ましい。そのため、データプレーン137の全体を同様のソフトウェアとして実装すると、CPU101の負荷が過大となるおそれがある。そこで、サーバ装置100は、データプレーン137の機能の少なくとも一部を、FPGA122を用いて実装する。すなわち、サーバ装置100は、パケット転送の負荷をFPGA122にオフロードする。
次に、フロー情報の検索について説明する。
図6は、フローテーブルの例を示す図である。
フローテーブル161は、サーバ装置100のデータプレーン137によって保持される。他のサーバ装置のデータプレーンも、同様のフローテーブルを保持する。フローテーブル161には、複数のフローのフロー情報が登録される。
フローテーブル161は、アドレス、ヘッダフィールド、アクションおよびアクションデータをそれぞれ対応付けた複数のエントリを含む。エントリをレコードやフロー情報と呼んでもよい。1つのエントリは、原則として1つのフローに対応する。アドレスは、フローテーブル161の中でエントリの格納位置を識別する識別番号である。アドレスのビット長は、フローテーブル161のサイズ、すなわち、フローテーブル161に格納可能なエントリの個数に応じて決まる。図6の例では、アドレスのビット長は10ビットである。よって、フローテーブル161には、0x000~0x3FFのアドレスの範囲内に最大で1024個のエントリを格納することが可能である。
ヘッダフィールドは、通信プロトコル、送信元IPアドレス、送信元ポート番号、宛先IPアドレスおよび宛先ポート番号の5つ組のヘッダ情報を示す。通信プロトコルは、TCP(Transmission Control Protocol)やUDP(User Datagram Protocol)などのトランスポート層のプロトコルを含んでもよく、IPv4やIPv6などのネットワーク層のプロトコルのバージョンを含んでもよい。
アクションは、ヘッダフィールドにマッチするパケットに対して実行される処理の種類を示す。1つのパケットに対して2以上のアクションが実行されることがある。アクションには、パケットを転送することを示すFORWARD、パケットを破棄することを示すDROP、パケットのヘッダを書き換えることを示すNATなどが含まれ得る。アクションデータは、アクションの実行に使用される引数を示す。アクションによって、アクションデータが存在することもあるし存在しないこともある。例えば、ヘッダの書き換えを伴わない単純なFORWARDに対しては、アクションデータが存在しなくてもよい。また、NATのアクションに対して、書き換え後の送信元IPアドレスと送信元ポート番号が指定されることがある。
フローテーブル161において、各エントリの格納位置を示すアドレスは、ヘッダフィールドから算出される。例えば、CRC32の技術を用いて、ヘッダフィールドからハッシュ値として32ビットのビット列が算出される。ハッシュ値のうちアドレス長に相当する下位のビット列(例えば、下位10ビット)が、アドレスとして使用される。フローテーブル161のサイズが十分に大きければ、異なるエントリの格納位置が衝突する(格納位置が同一になる)確率は十分に小さい。一方、フローテーブル161のサイズが小さいほど、衝突確率が大きくなってしまう。
なお、フローテーブル161を参照してパケットの処理方法を決定する際には、アクションおよびアクションデータが読み出されればよい。アクセスすべきフローテーブル161の位置は、受信されたパケットのハッシュ値から特定できる。そこで、ヘッダフィールドとアクションおよびアクションデータとは、同一のテーブルに格納されていなくてもよく、異なるテーブルに分けて格納されていてもよい。
図7は、フローテーブルのアクセス例を示す図である。
フローテーブル161にアクセスするFPGA122は、ADDRESS,READ REQUEST,WRITE REQUEST,WRITE DATAという入力信号線と、READ DATA,READ DATA VALIDという出力信号線とをもつ。ADDRESSは、フローテーブル161の中の位置を示す。前述のように、通信プロトコル、送信元IPアドレス、送信元ポート番号、宛先IPアドレスおよび宛先ポート番号の5つ組を示すヘッダ情報162から、ハッシュ値が算出される。ハッシュ値の中の一部のビット列が、ADDRESSの値として使用される。
READ REQUESTは、エントリの読み出し要求の有無を示す。読み出し要求の際はREAD REQUESTがON(例えば、1)に指定され、それ以外のときはREAD REQUESTがOFF(例えば、0)に指定される。WRITE REQUESTは、エントリの書き込み要求の有無を示す。書き込み要求の際はWRITE REQUESTがONに指定され、それ以外のときはWRITE REQUESTがOFFに指定される。WRITE DATAは、フローテーブル161に書き込まれるエントリを示す。
READ DATAは、フローテーブル161から読み出されたエントリを示す。READ REQUESTがONの場合に、ADDRESSが示す位置のエントリが読み出される。READ DATAの値には、アクションおよびアクションデータが含まれる。READ DATA VALIDは、フローテーブル161からの読み出しの成否を示す。ADDRESSが示す位置にエントリが存在した場合(ヒットの場合)はREAD DATA VALIDがONに指定され、ADDRESSが示す位置にエントリが存在しない場合(ミスの場合)はREAD DATA VALIDがOFFに指定される。READ DATA VALIDは、READ DATAの値が有効であるか否かを示している。なお、WRITE REQUESTがONの場合、ADDRESSが示す位置にWRITE DATAの値が書き込まれる。
次に、宛先IPアドレスの抽象化について説明する。
図8は、最長プレフィクス一致の例を示す図である。
1つの送信主体(例えば、1つの仮想マシン)が、多数の受信主体(例えば、多数の仮想マシン)にパケットを送信することがある。このため、具体的な送信主体と受信主体の組毎にフロー情報を設定すると、フローテーブル161に登録されるエントリが膨大になる。一方、類似する宛先IPアドレスをもつ受信主体は、物理的に同一または近接するネットワークに属していることが多い。このため、類似する宛先IPアドレスをもつパケットに対するアクションは、同一になることが多い。
そこで、宛先IPアドレスの抽象化が行われる。宛先IPアドレスの抽象化では、フロー情報に含まれる宛先IPアドレスの下位ビットがマスクされる。宛先IPアドレスのうちマスクされない上位ビットがプレフィクスと呼ばれることがあり、マスクされない上位ビットの長さがプレフィクス長と呼ばれることがある。抽象化では、宛先IPアドレスのうちマスクされる下位ビットが、所定の値に置換される。例えば、32ビットの宛先IPアドレスのうちマスクされる部分が、8ビット単位で「**」に置換される。
宛先IPアドレスの抽象化により、宛先IPアドレスの下位ビットのみが異なり他の情報が同一である複数のエントリが、1つのエントリに統合される。例えば、宛先IPアドレスが192.168.25.**に抽象化されたエントリは、宛先IPアドレスが192.168.25.0~192.168.25.255の範囲に属するパケットに対してヒットする。抽象化された宛先IPアドレスを含むフローテーブルの検索の際には、宛先IPアドレスの下位ビットがマスクされ、マスク済みのヘッダ情報からハッシュ値が算出される。
ただし、抽象化されたアドレス範囲に属する宛先IPアドレスをもつパケットの全てに対して、常に同一のアクションを適用できるとは限らない。例えば、宛先IPアドレスが192.168.25.0~192.168.25.255の範囲に属するパケットのうち、宛先IPアドレスが192.168.25.20のパケットのみに対して、異なるアクションを適用したいことがある。
そこで、プレフィクス長が異なる複数のエントリをフローテーブルに登録することが許容される。その場合、最長プレフィクス一致(Longest Prefix Match)の原則が適用される。受信されたパケットが、プレフィクス長の異なる複数のエントリにマッチした場合、プレフィクスが長い方のエントリが優先的に使用される。例えば、あるパケットが、宛先IPアドレスが192.168.25.20であるエントリと宛先IPアドレスが192.168.25.**に抽象化されたエントリの両方にマッチした場合、前者のエントリが優先的に使用される。
宛先IPアドレスの抽象化を考慮すると、1つのパケットに対して、プレフィクス長が32ビット、24ビット、16ビット、8ビットである4通りのエントリがヒットし得る。FPGA122は、プレフィクス長が異なるエントリの検索を高速化するため、プレフィクス長が異なる4つのエントリの検索を並列に実行する。
FPGA122は、フローテーブル161-1,161-2,161-3,161-4を保持する。フローテーブル161-1は、プレフィクス長が32ビットのエントリを記憶する。フローテーブル161-1の各エントリのヘッダフィールドでは、宛先IPアドレスがマスクされていない。フローテーブル161-2は、プレフィクス長が24ビットのエントリを記憶する。フローテーブル161-2の各エントリのヘッダフィールドでは、宛先IPアドレスの下位8ビットがマスクされている。
フローテーブル161-3は、プレフィクス長が16ビットのエントリを記憶する。フローテーブル161-3の各エントリのヘッダフィールドでは、宛先IPアドレスの下位16ビットがマスクされている。フローテーブル161-4は、プレフィクス長が8ビットのエントリを記憶する。フローテーブル161-4の各エントリのヘッダフィールドでは、宛先IPアドレスの下位24ビットがマスクされている。
FPGA122は、受信された1つのパケットから、ヘッダ情報162-1,162-2,162-3,162-4を生成する。ヘッダ情報162-1は、受信されたパケットのヘッダ情報そのものである。ヘッダ情報162-2は、受信されたパケットのヘッダ情報のうち、宛先IPアドレスの下位8ビットがマスクされている。ヘッダ情報162-3は、受信されたパケットのヘッダ情報のうち、宛先IPアドレスの下位16ビットがマスクされている。ヘッダ情報162-4は、受信されたパケットのヘッダ情報のうち、宛先IPアドレスの下位24ビットがマスクされている。FPGA122は、ヘッダ情報162-1,162-2,162-3,162-4を並列に生成し得る。
FPGA122は、ヘッダ情報162-1からハッシュ値を算出し、ハッシュ値に応じたアドレスを用いてフローテーブル161-1にアクセスする。また、FPGA122は、ヘッダ情報162-2からハッシュ値を算出し、ハッシュ値に応じたアドレスを用いてフローテーブル161-2にアクセスする。また、FPGA122は、ヘッダ情報162-3からハッシュ値を算出し、ハッシュ値に応じたアドレスを用いてフローテーブル161-3にアクセスする。また、FPGA122は、ヘッダ情報162-4からハッシュ値を算出し、ハッシュ値に応じたアドレスを用いてフローテーブル161-4にアクセスする。宛先IPアドレスの下位ビットが異なるため、ヘッダ情報162-1,162-2,162-3,162-4から算出されるハッシュ値は異なることが多い。FPGA122は、異なるフローテーブルのアクセスを並列に実行し得る。
FPGA122は、フローテーブル161-1,161-2,161-3,161-4の出力のうちの何れか1つを、最小プレフィクス一致の原則に基づいて選択する。フローテーブル161-1の検索結果がヒットである場合、FPGA122は、フローテーブル161-1のエントリを選択する。フローテーブル161-1の検索結果がミスであり、フローテーブル161-2の検索結果がヒットである場合、FPGA122は、フローテーブル161-2のエントリを選択する。フローテーブル161-1,161-2の検索結果がミスであり、フローテーブル161-3の検索結果がヒットである場合、FPGA122は、フローテーブル161-3のエントリを選択する。
フローテーブル161-1,161-2,161-3の検索結果がミスであり、フローテーブル161-4の検索結果がヒットである場合、FPGA122は、フローテーブル161-4のエントリを選択する。フローテーブル161-1,161-2,161-3,161-4の検索結果が全てミスである場合、FPGA122は、該当するエントリが存在しないと判定する。図8の例では、フローテーブル161-1,161-4の検索結果がミスであり、フローテーブル161-2,161-3の検索結果がヒットである。そこで、FPGA122は、フローテーブル161-2の出力を採用する。
ここで、分割されたフローテーブル161-1,161-2,161-3,161-4を何れのメモリに記憶させるかが問題となる。FPGA122の内部にあるSRAM123は、論理ブロック領域124からのアクセスが高速であるものの記憶容量が小さい。そのため、SRAM123がフローテーブル161-1,161-2,161-3,161-4を記憶すると、フローテーブル161-1,161-2,161-3,161-4のサイズが小さくなる。その結果、異なるエントリの格納位置が衝突する確率が高くなる。
一方、FPGA122の外部にあるDRAM121は、記憶容量が大きいものの論理ブロック領域124からのアクセスがSRAM123より低速である。そのため、DRAM121が常にフローテーブル161-1,161-2,161-3,161-4を記憶すると、エントリ検索が遅くなりスループットが低下する。
そこで、第2の実施の形態では、FPGA122は、エントリの衝突状況に応じてDRAM121とSRAM123を使い分ける。DRAM121とSRAM123の使い分けは、分割されたフローテーブル単位で行われる。FPGA122は、エントリが少なくエントリの格納位置が衝突していないフローテーブルを、SRAM123に記憶させる。一方、FPGA122は、エントリが増えてエントリの格納位置が衝突したフローテーブルを、SRAM123からDRAM121に移動する。このとき、FPGA122は、フローテーブルのサイズを拡張する。エントリの削除などによって衝突状態が解消すると、FPGA122は、DRAM121からSRAM123にフローテーブルを戻す。
図9は、FPGAの回路構成例を示すブロック図である。
FPGA122の論理ブロック領域124に、ヘッダ解析部141、ハッシュ計算部142-1,142-2,142-3,142-4、スイッチ143-1,143-2,143-3,143-4、判定部144-1,144-2,144-3,144-4、優先エンコーダ145、スイッチ146およびテーブルコントローラ147が形成される。SRAM123は、フローテーブル151-1,151-2,151-3,151-4、拡張フラグ152および衝突リスト153を記憶する。DRAM121は、拡張フローテーブル154を記憶する。ただし、拡張フラグ152と衝突リスト153の少なくとも一方が、DRAM121に記憶されてもよく、DRAM102に記憶されてもよい。
また、後述するテーブルコントローラ147の機能を、CPU101が実行するソフトウェアによって実装することも可能である。なお、SRAM123は、第1の実施の形態のメモリ11の一例である。DRAM121は、第1の実施の形態のメモリ12の一例である。テーブルコントローラ147は、第1の実施の形態の制御部13の一例である。
ヘッダ解析部141は、パケットの入力を受け付け、受け付けたパケットのヘッダから、通信プロトコル、送信元IPアドレス、送信元ポート番号、宛先IPアドレスおよび宛先ポート番号を含むヘッダ情報を抽出する。
ハッシュ計算部142-1,142-2,142-3,142-4は、ヘッダ解析部141が抽出したヘッダ情報からそれぞれハッシュ値を算出する。ハッシュ計算部142-1は、32ビットのプレフィクス長に対応する。ハッシュ計算部142-1は、ヘッダ情報からCRC32によって32ビットのハッシュ値を算出する。ハッシュ計算部142-2は、24ビットのプレフィクス長に対応する。ハッシュ計算部142-1は、ヘッダ情報に含まれる宛先IPアドレスの下位8ビットをマスクし、マスク後のヘッダ情報からCRC32によって32ビットのハッシュ値を算出する。
ハッシュ計算部142-3は、16ビットのプレフィクス長に対応する。ハッシュ計算部142-3は、ヘッダ情報に含まれる宛先IPアドレスの下位16ビットをマスクし、マスク後のヘッダ情報からCRC32によって32ビットのハッシュ値を算出する。ハッシュ計算部142-4は、8ビットのプレフィクス長に対応する。ハッシュ計算部142-4は、ヘッダ情報に含まれる宛先IPアドレスの下位24ビットをマスクし、マスク後のヘッダ情報からCRC32によって32ビットのハッシュ値を算出する。
スイッチ143-1,143-2,143-3,143-4は、ハッシュ値に基づいて、SRAM123とDRAM121の何れか一方を選択的にアクセスする。スイッチ143-1,143-2,143-3,143-4のアクセス先は、テーブルコントローラ147によって制御される。初期のアクセス先は、SRAM123である。
スイッチ143-1は、32ビットのプレフィクス長に対応する。スイッチ143-1は、ハッシュ計算部142-1が算出したハッシュ値の下位ビットをアドレスとして用いて、フローテーブル151-1または拡張フローテーブル154にアクセスする。例えば、フローテーブル151-1のアドレスはハッシュ値の下位10ビットであり、拡張フローテーブル154のアドレスはハッシュ値の下位20ビットである。
スイッチ143-2は、24ビットのプレフィクス長に対応する。スイッチ143-2は、ハッシュ計算部142-2が算出したハッシュ値の下位ビットをアドレスとして用いて、フローテーブル151-2または拡張フローテーブル154にアクセスする。スイッチ143-3は、16ビットのプレフィクス長に対応する。スイッチ143-3は、ハッシュ計算部142-3が算出したハッシュ値の下位ビットをアドレスとして用いて、フローテーブル151-3または拡張フローテーブル154にアクセスする。スイッチ143-4は、8ビットのプレフィクス長に対応する。スイッチ143-4は、ハッシュ計算部142-4が算出したハッシュ値の下位ビットをアドレスとして用いて、フローテーブル151-4または拡張フローテーブル154にアクセスする。
判定部144-1,144-2,144-3,144-4は、SRAM123の出力とDRAM121の出力のうち、何れか一方の有効な出力を選択する。判定部144-1は、32ビットのプレフィクス長に対応する。判定部144-1は、フローテーブル151-1の出力と拡張フローテーブル154の出力のうち有効な方の出力を選択する。
判定部144-2は、24ビットのプレフィクス長に対応する。判定部144-2は、フローテーブル151-2の出力と拡張フローテーブル154の出力のうち有効な方の出力を選択する。判定部144-3は、16ビットのプレフィクス長に対応する。判定部144-3は、フローテーブル151-3の出力と拡張フローテーブル154の出力のうち有効な方の出力を選択する。判定部144-4は、8ビットのプレフィクス長に対応する。判定部144-4は、フローテーブル151-4の出力と拡張フローテーブル154の出力のうち有効な方の出力を選択する。
優先エンコーダ145は、最長プレフィクス一致の原則に基づいて、判定部144-1,144-2,144-3,144-4の出力の何れか1つを選択する。検索結果がヒットである出力が1つ存在する場合、優先エンコーダ145は、その出力を選択する。検索結果がヒットである出力が2つ以上存在する場合、優先エンコーダ145は、それら2つ以上の出力のうちプレフィクス長が最大の出力を選択する。検索結果がヒットである出力が存在しない場合、優先エンコーダ145は、所定の出力(例えば、判定部144-1の出力または判定部144-4の出力)を選択する。
スイッチ146は、優先エンコーダ145の出力に基づいてパケットを処理する。例えば、スイッチ146は、検索されたアクションがDROPである場合、パケットを破棄する。また、スイッチ146は、検索されたアクションがFORWARDであり、宛先IPアドレスがサーバ装置100上の仮想マシンのIPアドレスである場合、パケットを該当の仮想マシンに転送させる。また、スイッチ146は、検索されたアクションがFORWARDであり、宛先IPアドレスがサーバ装置100上の仮想マシンのIPアドレスでない場合、パケットを通信インタフェース107から出力させる。また、スイッチ146は、検索されたアクションにNATが含まれる場合、アクションデータに基づいてヘッダを書き換える。
なお、スイッチ146は、宛先IPアドレスとパケットを出力する通信インタフェースとの対応関係を示す情報を学習して保持していてもよい。また、パケットを出力する通信インタフェースを示す情報が、フローテーブル151-1,151-2,151-3,151-4や拡張フローテーブル154のエントリに含まれていてもよい。
フローテーブル151-1は、32ビットのプレフィクス長に対応する。フローテーブル151-1は、宛先IPアドレスがマスクされていないエントリを保持する。フローテーブル151-2は、24ビットのプレフィクス長に対応する。フローテーブル151-2は、宛先IPアドレスの下位8ビットがマスクされたエントリを保持する。フローテーブル151-3は、16ビットのプレフィクス長に対応する。フローテーブル151-3は、宛先IPアドレスの下位16ビットがマスクされたエントリを保持する。フローテーブル151-4は、8ビットのプレフィクス長に対応する。フローテーブル151-4は、宛先IPアドレスの下位24ビットがマスクされたエントリを保持する。
拡張フラグ152は、SRAM123からDRAM121へのエントリの移行の有無(拡張の有無)を示すフラグである。拡張フラグ152は、フローテーブル151-1,151-2,151-3,151-4それぞれに対して割り当てられる。例えば、フローテーブル151-1に対応する拡張フラグ152がOFF(例えば、0)である場合、プレフィクス長が32ビットであるエントリがフローテーブル151-1に格納されている。一方、フローテーブル151-1に対応する拡張フラグ152がON(例えば、1)である場合、プレフィクス長が32ビットのエントリが拡張フローテーブル154に格納されている。拡張フラグ152の初期値はOFFである。拡張フラグ152は、テーブルコントローラ147によって書き換えられる。
衝突リスト153には、格納位置が衝突したエントリのペアが記録される。衝突リスト153は、フローテーブル151-1,151-2,151-3,151-4のうち拡張フラグ152がONであるフローテーブルに対して作成される。衝突リスト153の作成、更新および削除は、テーブルコントローラ147によって行われる。
拡張フローテーブル154は、フローテーブル151-1,151-2,151-3,151-4よりもサイズが大きいフローテーブルである。例えば、フローテーブル151-1,151-2,151-3,151-4のアドレス長が10ビットであり、拡張フローテーブルのアドレス長が20ビットである。このため、フローテーブル151-1,151-2,151-3,151-4では格納位置が衝突するエントリを、拡張フローテーブル154に衝突なしに登録できることが多い。拡張フローテーブル154は、例えば、フローテーブル151-1,151-2,151-3,151-4のうち拡張フラグがONであるフローテーブルそれぞれに対して作成される。ただし、拡張フローテーブル154が、4通りのプレフィクス長に共通のフローテーブルであってもよい。
テーブルコントローラ147は、SRAM123とDRAM121の間のエントリの移行を制御する。テーブルコントローラ147は、フローテーブル151-1,151-2,151-3,151-4の更新を監視し、エントリの衝突が発生したフローテーブルを検出する。テーブルコントローラ147は、衝突が発生したフローテーブルに含まれるエントリを全て拡張フローテーブル154に移動させる。そして、テーブルコントローラ147は、スイッチ143-1,143-2,143-3,143-4のうち衝突が発生したフローテーブルに対応するスイッチのアクセス先をDRAM121に切り替える。
その後、テーブルコントローラ147は、拡張フローテーブル154の更新を監視し、衝突リスト153を参照して、エントリの衝突が解消したフローテーブルを検出する。テーブルコントローラ147は、衝突が解消したフローテーブルに登録されるべきエントリを全て拡張フローテーブル154から当該フローテーブルに戻す。また、テーブルコントローラ147は、衝突リスト153に記録されたエントリのペアを確認し、宛先IPアドレスの抽象化によって当該ペアを統合可能か判断する。統合可能である場合、テーブルコントローラ147は、エントリの統合によって衝突状態を解消する。
図10は、衝突リストの例を示す図である。
衝突リスト153は、1つのフローテーブル(例えば、フローテーブル151-1)においてアドレスが衝突することになるエントリの情報を記憶する。衝突リスト153は、ペアを識別するIDを含む。また、衝突リスト153は、衝突するエントリそれぞれについて、ヘッダフィールドおよびハッシュ値を含む。ヘッダフィールドは、通信プロトコル、送信元IPアドレス、送信元ポート番号、宛先IPアドレスおよび宛先ポート番号を含む。ハッシュ値は、ヘッダフィールドから算出される。
図10の例では、ID=0の2つのエントリはそれぞれ、下位16ビットが0x3210であるハッシュ値をもつ。よって、この2つのエントリの格納位置は、フローテーブル151-1において衝突する。また、ID=1の2つのエントリはそれぞれ、下位16ビットが0xabcdであるハッシュ値をもつ。よって、この2つのエントリの格納位置は、フローテーブル151-1において衝突する。
次に、サーバ装置100の処理手順について説明する。
図11は、フロー登録の手順例を示すフローチャートである。
(S10)テーブルコントローラ147は、フロー登録要求を受信する。フロー登録要求は、例えば、コントロールプレーン136によって発行され、データプレーン137のソフトウェア実装部分を通じて受信される。
(S11)テーブルコントローラ147は、エントリの登録先の対象フローテーブルを確認し、対象フローテーブルに対応する拡張フラグがONであるか判断する。対象フローテーブルは、宛先IPアドレスのプレフィクス長に応じて決定される。拡張フラグがONの場合はステップS18に進み、拡張フラグがOFFの場合はステップS12に進む。
(S12)テーブルコントローラ147は、対象フローテーブルに対して、フロー登録要求に含まれるエントリを登録することを試みる。例えば、テーブルコントローラ147は、エントリのヘッダフィールドからハッシュ値を算出して格納位置を特定する。
(S13)テーブルコントローラ147は、ステップS12によって、対象フローテーブルにおいてエントリの格納位置の衝突が検出されたか判断する。衝突が検出された場合はステップS14に進み、衝突が検出されなかった場合はフロー登録が終了する。
(S14)テーブルコントローラ147は、対象フローテーブルに対応する衝突リストを作成する。作成した衝突リストには、フロー登録要求に含まれるエントリの情報と、そのエントリと衝突した既存エントリの情報とが対応付けて記録される。各エントリの情報には、ヘッダフィールドとハッシュ値が含まれる。
(S15)テーブルコントローラ147は、対象フローテーブルから拡張フローテーブルに全ての既存エントリを移行する。また、テーブルコントローラ147は、フロー登録要求に含まれるエントリを拡張フローテーブルに登録する。このとき、テーブルコントローラ147は、例えば、対象フローテーブルに含まれる各エントリのハッシュ値を算出して、拡張フローテーブルにおける格納位置を特定する。
(S16)テーブルコントローラ147は、スイッチ143-1,143-2,143-3,143-4のうち対象フローテーブルに対応するスイッチのアクセス先を、対象フローテーブルから拡張フローテーブルに切り替える。
(S17)テーブルコントローラ147は、対象フローテーブルに対応する拡張フラグをOFFからONに更新する。そして、フロー登録が終了する。
(S18)テーブルコントローラ147は、拡張フローテーブルに登録された既存エントリとフロー登録要求に含まれるエントリとの間で、対象フローテーブルに格納した場合に衝突が発生するか判断する。例えば、テーブルコントローラ147は、拡張フローテーブルに登録された既存エントリのアドレスの下位ビット(例えば、下位10ビット)と、フロー登録要求に含まれるエントリのハッシュ値の下位ビット(例えば、下位10ビット)とが同一であるか判断する。衝突が生じる場合はステップS19に進み、衝突が生じない場合はステップS20に進む。
(S19)テーブルコントローラ147は、対象フローテーブルに対応する衝突リストに、衝突するエントリのペアを記録する。
(S20)テーブルコントローラ147は、フロー登録要求に含まれるエントリを拡張フローテーブルに登録する。
図12は、フロー削除の手順例を示すフローチャートである。
(S30)テーブルコントローラ147は、フロー削除要求を受信する。フロー削除要求は、コントロールプレーン136によって発行され、データプレーン137のソフトウェア実装部分を通じて受信されることがある。また、フロー削除要求は、エントリに対して指定されたタイムアウト時間の経過によって発生することがある。
(S31)テーブルコントローラ147は、エントリの削除先の対象フローテーブルを確認し、対象フローテーブルに対応する拡張フラグがONであるか判断する。対象フローテーブルは、宛先IPアドレスのプレフィクス長に応じて決定される。拡張フラグがONの場合はステップS33に進み、拡張フラグがOFFの場合はステップS32に進む。
(S32)テーブルコントローラ147は、対象フローテーブルから、フロー削除要求によって指定されたエントリを削除する。そして、フロー削除が終了する。
(S33)テーブルコントローラ147は、対象フローテーブルに対応する衝突リストに、フロー削除要求によって指定されたエントリが記録されているか判断する。記録されている場合はステップS34に進み、記録されていない場合はステップS35に進む。
(S34)テーブルコントローラ147は、衝突リストから、フロー削除要求によって指定されたエントリを含むエントリペアを削除する。
(S35)テーブルコントローラ147は、拡張フローテーブルから、フロー削除要求によって指定されたエントリを削除する。
図13は、テーブル整理の手順例を示すフローチャートである。
テーブル整理は、定期的に実行されてもよい。また、テーブル整理は、上記のフロー削除の後に実行されてもよく、衝突リストの更新を契機に実行されてもよい。
(S40)テーブルコントローラ147は、フローテーブル151-1,151-2,151-3,151-4のうちの1つを対象フローテーブルとして選択する。テーブルコントローラ147は、各フローテーブルに対してステップS40~S48を実行してもよいし、更新されたフローテーブルのみに対してステップS40~S48を実行してもよい。テーブルコントローラ147は、対象フローテーブルに対応する拡張フラグがONであるか判断する。拡張フラグがONの場合はステップS41に進み、拡張フラグがOFFの場合は対象フローテーブルのテーブル整理が終了する。
(S41)テーブルコントローラ147は、対象フローテーブルに対応する衝突リストに、エントリが記録されているか判断する。衝突リストにエントリが記録されている場合はステップS42に進み、衝突リストが空の場合はステップS46に進む。
(S42)テーブルコントローラ147は、衝突リストから、宛先IPアドレスの抽象化によって統合可能なエントリを検索する。統合可能なエントリは、宛先IPアドレスの下位ビットのみが異なり他の情報が同一であるため、宛先IPアドレスのプレフィクス長を小さくすることで内容が同一になる2以上のエントリである。
(S43)テーブルコントローラ147は、ステップS42において、統合可能なエントリが検出されたか判断する。統合可能なエントリがある場合はステップS44に進み、統合可能なエントリが無い場合は対象フローテーブルのテーブル整理が終了する。
(S44)テーブルコントローラ147は、統合可能な2以上のエントリから、宛先IPアドレスのプレフィクス長を小さくした統合後エントリを生成する。テーブルコントローラ147は、統合後エントリの登録を要求する。これにより、統合後エントリに対して図11のフロー登録が実行される。また、テーブルコントローラ147は、拡張フローテーブルから、統合可能な2以上のエントリを削除する。
(S45)テーブルコントローラ147は、衝突リストから、統合可能な2以上のエントリについてのエントリペアを削除する。そして、ステップS41に戻る。
(S46)テーブルコントローラ147は、拡張フローテーブルから対象フローテーブルに全ての既存エントリを移行する。このとき、テーブルコントローラ147は、例えば、拡張フローテーブルに含まれる各エントリのアドレスの下位ビットに基づいて、対象フローテーブルにおける格納位置を特定する。
(S47)テーブルコントローラ147は、スイッチ143-1,143-2,143-3,143-4のうち対象フローテーブルに対応するスイッチのアクセス先を、拡張フローテーブルから対象フローテーブルに切り替える。
(S48)テーブルコントローラ147は、対象フローテーブルに対応する拡張フラグをONからOFFに更新する。
図14は、ルーティングの手順例を示すフローチャートである。
(S50)ヘッダ解析部141は、FPGA122に入力されたパケットから、通信プロトコル、送信元IPアドレス、送信元ポート番号、宛先IPアドレスおよび宛先ポート番号を含むヘッダ情報を抽出する。以下のステップS51~S54は、4通りのプレフィクス長について並列度4で並列に実行される。
(S51)ハッシュ計算部142-2,142-3,142-4は、ヘッダ情報に含まれる宛先IPアドレスの下位ビットを所定値に置換するマスク処理を実行する。
(S52)ハッシュ計算部142-1,142-2,142-3,142-4は、マスク後のヘッダ情報から、CRC32によってハッシュ値を算出する。
(S53)スイッチ143-1,143-2,143-3,143-4は、ステップS52で算出されたハッシュ値の下位ビットをアドレスとして抽出する。アドレス長は、アクセス先がフローテーブルか拡張フローテーブルかによって異なる。
(S54)スイッチ143-1,143-2,143-3,143-4は、テーブルコントローラ147からの設定に従って、ステップS53で算出されたアドレスを用いて、フローテーブルまたは拡張フローテーブルからエントリの読み出しを試みる。判定部144-1,144-2,144-3,144-4は、フローテーブルまたは拡張フローテーブルから出力された読み出し結果を取得する。
(S55)優先エンコーダ145は、最長プレフィクス一致により、4通りのプレフィクス長の読み出し結果のうちの1つを選択して、最終的な読み出し結果を決定する。
(S56)スイッチ146は、ステップS55で決定された読み出し結果に基づいて、パケットの処理方法を決定する。また、スイッチ146は、パケットを転送する場合、パケットを出力する通信インタフェースを決定する。
次に、仮想ルータ135のスループットについて説明する。
図15は、ルーティングのスループットの例を示すグラフである。
ここでは、以下のハードウェア条件を仮定する。レジスタ125の記憶容量が16キロバイト(16kB)、SRAM123の記憶容量が4メガバイト(4MB)、DRAM121の記憶容量が1ギガバイト(1GB)である。FPGA122とDRAM121との間のメモリインタフェースの速度が96ギガビット毎秒(96Gbps)、メモリアクセスの粒度が64バイト、ランダムアクセスの実効性能が10%である。また、エントリのデータ長が32バイト、フローテーブルの最大エントリ数が210=1024、拡張フローテーブルの最大エントリ数が220=1048576である。
曲線41,42,43の横軸は、エントリ数、すなわち、登録フロー数である。曲線41,42,43の縦軸は、スループット、すなわち、1秒当たりに処理可能なパケットの個数である。曲線41は、SRAM123のみ使用してDRAM121を使用しない場合のスループットを示す。ただし、曲線41は、SRAM123の記憶容量の制限を無視した理想的なスループットを示しており、現実的には達成困難である。
曲線42は、第2の実施の形態で説明したようにSRAM123とDRAM121を併用した場合のスループットを示す。曲線43は、DRAM121のみ使用してSRAM123を使用しない場合のスループットを示す。曲線43が示すように、DRAM121のみを使用した場合はスループットが低い。これに対して、曲線42が示すように、SRAM123とDRAM121を併用すると、エントリが少ないうちは、アクセスが高速なSRAM123の影響によりスループットが向上する。
図16は、エントリの非衝突確率の例を示すグラフである。
曲線44,45,46の横軸は、エントリ数、すなわち、登録フロー数である。曲線44,45,46の縦軸は、異なるエントリの格納位置が衝突しない非衝突確率である。曲線44は、第2の実施の形態で説明したようにSRAM123とDRAM121を併用した場合の非衝突確率を示す。曲線45は、DRAM121のみ使用してSRAM123を使用しない場合の非衝突確率を示す。曲線46は、SRAM123のみ使用してDRAM121を使用しない場合の非衝突確率を示す。
曲線46が示すように、SRAM123のみを使用した場合は、エントリ数の増加によって、早期にフローテーブル内でエントリの衝突が発生する。これに対して、曲線44が示すように、SRAM123とDRAM121を併用すると、エントリ数が増加しても、非衝突確率を合理的に低い水準に維持することができる。このように、第2の実施の形態のテーブル制御により、SRAM123の高速性とDRAM121の大容量の利点を生かして、スループットと非衝突確率のバランスを図ることができる。なお、第2の実施の形態では、高速小容量メモリの例としてSRAM123を挙げ、低速大容量メモリの例としてDRAM121を挙げたが、2種類のメモリの組み合わせはこれに限定されない。
第2の実施の形態の情報処理システムによれば、仮想ルータによってネットワークが仮想化される。よって、サーバ装置に配置される仮想マシンの通信の制御が効率化される。また、仮想ルータにはSDNが採用され、フローを制御するコントロールプレーンとパケットを処理するデータプレーンとが分離される。よって、仮想マシンの起動や停止に応じて柔軟なフロー設定が可能となり、仮想マシンの通信の制御が効率化される。また、データプレーンの処理の少なくとも一部がFPGAによって実行される。よって、CPUやシステムメモリの負荷が軽減され、仮想マシンの処理への影響が低減される。
また、エントリが少ないうちはFPGA内のSRAMに記憶されたフローテーブルが使用され、エントリが増えてアドレスの衝突が発生すると、FPGA外のオンボードメモリに記憶された拡張フローテーブルが使用される。また、拡張フローテーブルの更新によって衝突が解消されると、FPGA内のSRAMに記憶されたフローテーブルが再び使用される。よって、パケット処理のスループットを向上させることができる。
また、登録されたエントリに対して宛先IPアドレスの抽象化を行うことで、エントリの衝突を解消できる可能性が高くなる。また、宛先IPアドレスのプレフィクス長が異なるエントリの検索を並列に実行することで、スループットが向上する。また、プレフィクス長が異なる複数のフローテーブルそれぞれに対して独立にテーブル制御を行うことで、高速なSRAMを可能な限り使用することが可能となる。
10 情報処理装置
11,12 メモリ
13 制御部
14,15 テーブル
16a,16b,16c エントリ

Claims (9)

  1. パケットの転送方法を示すエントリが、前記パケットのヘッダ情報から算出されるハッシュ値に応じた位置に格納される第1のテーブルを記憶する第1のメモリと、
    前記第1のテーブルより大きい第2のテーブルを記憶する第2のメモリと、
    前記第1のテーブルの更新の際に、前記第1のテーブルにおいて異なるエントリの格納位置が衝突する衝突状態を検出し、前記衝突状態の検出に応じて、前記第1のテーブルに格納されているエントリを前記第2のテーブルに移行し、前記第2のテーブルの更新の際に、前記衝突状態の解消を検出し、前記解消の検出に応じて、前記第2のテーブルに格納されているエントリを前記第1のテーブルに移行する制御部と、
    を有する情報処理装置。
  2. 前記第1のテーブルおよび前記第2のテーブルの何れか一方にアクセスして、受信されたパケットの転送方法を決定するルーティング部を更に有し、
    前記制御部は、前記衝突状態の検出に応じて、前記ルーティング部のアクセス先を前記第1のテーブルから前記第2のテーブルに切り替え、前記解消の検出に応じて、前記アクセス先を前記第2のテーブルから前記第1のテーブルに切り替える、
    請求項1記載の情報処理装置。
  3. 前記制御部は、前記衝突状態の検出に応じて、前記異なるエントリを示す衝突リストを生成し、前記第2のテーブルの更新の際に、前記衝突リストと更新内容とに基づいて前記衝突状態が解消したか否か判定する、
    請求項1記載の情報処理装置。
  4. 前記ヘッダ情報は、宛先アドレスを含み、
    前記第1のメモリは、前記宛先アドレスの一部分をマスクすることで算出される他のハッシュ値に応じたエントリが格納される他の第1のテーブルを更に記憶し、
    前記制御部は、前記衝突状態の検出およびエントリの移行を、前記第1のテーブルおよび前記他の第1のテーブルそれぞれに対して独立に実行する、
    請求項1記載の情報処理装置。
  5. 前記ヘッダ情報は、宛先アドレスを含み、
    前記制御部は、前記宛先アドレスの一部分をマスクすることで前記異なるエントリを統合可能な場合、前記異なるエントリを統合することで前記衝突状態を解消する、
    請求項1記載の情報処理装置。
  6. 前記第1のテーブルのエントリは、前記ハッシュ値から抽出される第1のビット長のビット列を用いて識別され、前記第2のテーブルのエントリは、前記ハッシュ値から抽出される前記第1のビット長より大きい第2のビット長のビット列を用いて識別される、
    請求項1記載の情報処理装置。
  7. プログラマブルデバイスを更に有し、
    前記第1のメモリおよび前記制御部は、前記プログラマブルデバイスに含まれており、前記第2のメモリは、前記プログラマブルデバイスの外部に配置されている、
    請求項1記載の情報処理装置。
  8. 仮想マシンを実行するプロセッサを更に有し、
    前記第1のテーブルおよび前記第2のテーブルの何れか一方が選択的に、前記仮想マシンが送信または受信するパケットのルーティングに用いられる、
    請求項1記載の情報処理装置。
  9. コンピュータが、
    パケットの転送方法を示すエントリが前記パケットのヘッダ情報から算出されるハッシュ値に応じた位置に格納されるテーブルであって、前記コンピュータが有する第1のメモリに記憶された第1のテーブルの更新の際に、前記第1のテーブルにおいて異なるエントリの格納位置が衝突する衝突状態を検出し、
    前記衝突状態の検出に応じて、前記第1のテーブルに格納されているエントリを、前記第1のテーブルより大きいテーブルであって、前記コンピュータが有する第2のメモリに記憶された第2のテーブルに移行し、
    前記第2のテーブルの更新の際に、前記衝突状態の解消を検出し、
    前記解消の検出に応じて、前記第2のテーブルに格納されているエントリを前記第1のテーブルに移行する、
    パケット制御方法。
JP2020139120A 2020-08-20 2020-08-20 情報処理装置およびパケット制御方法 Pending JP2022035056A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2020139120A JP2022035056A (ja) 2020-08-20 2020-08-20 情報処理装置およびパケット制御方法
EP21171486.0A EP3958523B1 (en) 2020-08-20 2021-04-30 Information processing apparatus and packet control method
US17/347,655 US11637767B2 (en) 2020-08-20 2021-06-15 Information processing apparatus and packet control method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020139120A JP2022035056A (ja) 2020-08-20 2020-08-20 情報処理装置およびパケット制御方法

Publications (1)

Publication Number Publication Date
JP2022035056A true JP2022035056A (ja) 2022-03-04

Family

ID=75746429

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020139120A Pending JP2022035056A (ja) 2020-08-20 2020-08-20 情報処理装置およびパケット制御方法

Country Status (3)

Country Link
US (1) US11637767B2 (ja)
EP (1) EP3958523B1 (ja)
JP (1) JP2022035056A (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11902160B2 (en) * 2021-09-30 2024-02-13 Juniper Networks, Inc. EVPN host routed bridging (HRB) and EVPN cloud native data center
US20220327061A1 (en) * 2022-06-23 2022-10-13 Daniel Christian Biederman Packet processing device to determine memory to store data in a server architecture and computing system including same

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002208945A (ja) 2001-01-10 2002-07-26 Fujitsu Ltd パケットの宛先情報管理装置
US8295286B2 (en) * 2003-12-31 2012-10-23 Stmicroelectronics, Inc. Apparatus and method using hashing for efficiently implementing an IP lookup solution in hardware
US8964735B2 (en) * 2012-05-18 2015-02-24 Rackspace Us, Inc. Translating media access control (MAC) addresses in a network hierarchy
US9245626B2 (en) * 2012-10-26 2016-01-26 Cisco Technology, Inc. System and method for packet classification and internet protocol lookup in a network environment
US9450866B2 (en) * 2014-07-11 2016-09-20 Telefonaktiebolaget L M Ericsson (Publ) Forwarding table performance control in SDN
US10116564B2 (en) * 2014-11-10 2018-10-30 Cavium, Inc. Hybrid wildcard match table
CN108924047B (zh) * 2018-06-20 2021-10-12 新华三技术有限公司 一种流表项存储方法、装置、交换机和计算机可读介质
US20200136971A1 (en) * 2019-06-07 2020-04-30 Intel Corporation Hash-table lookup with controlled latency

Also Published As

Publication number Publication date
EP3958523B1 (en) 2023-07-19
EP3958523A1 (en) 2022-02-23
US11637767B2 (en) 2023-04-25
US20220060405A1 (en) 2022-02-24

Similar Documents

Publication Publication Date Title
US20200314011A1 (en) Flexible scheme for adding rules to a nic pipeline
US20200136971A1 (en) Hash-table lookup with controlled latency
US10719463B1 (en) Hardware handling memory write request during memory data migration
US7370174B2 (en) Method, system, and program for addressing pages of memory by an I/O device
US10911358B1 (en) Packet processing cache
US8542686B2 (en) Ethernet forwarding database method
US9667754B2 (en) Data structure and associated management routines for TCP control block (TCB) table in network stacks
US11431624B2 (en) Communication method and network interface card
US8937940B2 (en) Optimized virtual function translation entry memory caching
US11003719B2 (en) Method and apparatus for accessing a storage disk
CN108781184B (zh) 用于在网络设备中提供分类资源的分区的系统和方法
KR20120078535A (ko) Sas 확장기 접속 라우팅 기술들
EP3958523B1 (en) Information processing apparatus and packet control method
EP3771169A1 (en) Message processing method and related device
WO2018118265A1 (en) Technologies for management of lookup tables
US11138130B1 (en) Nested page tables
CN107493222B (zh) 一种vxlan报文转发的方法及装置
WO2014094421A1 (zh) 数据处理方法和虚拟机管理平台
CN116599892B (zh) 一种服务器系统、路由方法、装置及电子设备和存储介质
US10255213B1 (en) Adapter device for large address spaces
KR100429909B1 (ko) 고속 ip룩업 장치를 기반으로 한 고속 ip포워딩 엔진제어 장치 및 방법
WO2016065610A1 (zh) 访问文件的方法、分布式存储系统和存储节点
KR20220076826A (ko) Ndn 기반의 인-네트워크 처리 방법 및 시스템
JP2023075456A (ja) 情報処理装置、パケット制御方法およびパケット制御プログラム
US11880316B2 (en) Input output (IO) request handling based on tracking information

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230511

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20240216

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240319