JPWO2009096029A1 - パケット処理装置およびパケット処理プログラム - Google Patents

パケット処理装置およびパケット処理プログラム Download PDF

Info

Publication number
JPWO2009096029A1
JPWO2009096029A1 JP2009551378A JP2009551378A JPWO2009096029A1 JP WO2009096029 A1 JPWO2009096029 A1 JP WO2009096029A1 JP 2009551378 A JP2009551378 A JP 2009551378A JP 2009551378 A JP2009551378 A JP 2009551378A JP WO2009096029 A1 JPWO2009096029 A1 JP WO2009096029A1
Authority
JP
Japan
Prior art keywords
processing
buffer
packet
connection
buffer area
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.)
Granted
Application number
JP2009551378A
Other languages
English (en)
Other versions
JP5136564B2 (ja
Inventor
浪平 大輔
大輔 浪平
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
Publication of JPWO2009096029A1 publication Critical patent/JPWO2009096029A1/ja
Application granted granted Critical
Publication of JP5136564B2 publication Critical patent/JP5136564B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/387Information transfer, e.g. on bus using universal interface adapter for adaptation of different data processing systems to different peripheral devices, e.g. protocol converters for incompatible systems, open system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Multi Processors (AREA)

Abstract

パケットに対する処理を複数のCPUが並列して実行する場合に、複数のCPUの間における排他処理の頻度を低減して処理性能を向上すること。この課題を解決するために、処理振分部(111)は、同一のコネクションから受信されるパケットが同一の並列処理CPUによって処理されるようにパケットの処理を振り分ける。バッファ割当部(112)は、処理が振り分けられた並列処理CPUに対して、処理の実行に使用するバッファ領域を割り当てる。FIFO監視部(113)は、FIFO部(121−1〜121−n)を監視し、解放可能なバッファ領域の有無を検知する。バッファ解放部(114)は、解放可能なバッファ領域がある場合に、該当するバッファ領域を解放する。並列処理CPU(120−1〜120−n)は、不要となった情報を格納するバッファ領域のバッファ位置情報をFIFO部(121−1〜121−n)に登録する。

Description

本発明は、パケット処理装置およびパケット処理プログラムに関し、特に、パケットに対する処理を複数のCPUが並列して実行する場合に、複数のCPUの間における排他処理の頻度を低減して処理性能を向上することができるパケット処理装置およびパケット処理プログラムに関する。
通常、コンピュータネットワークにおいては、サーバとクライアントの間にスイッチやルータなどの中継装置が設けられ、パケットの中継処理が行われる。従来の中継装置は、OSI(Open Systems Interconnection)参照モデルにおけるレイヤ2(データリンク層)およびレイヤ3(ネットワーク層)の処理を実施するのみであったが、近年は、より高位レイヤの処理が中継装置によって実施されることがある。具体的には、サーバに対する負荷を分散させる負荷分散処理、外部からの攻撃に対するファイアウォールなどの処理、またはクライアントとサーバの間の通信を秘匿するIPsec(Security Architecture for Internet Protocol)やSSL−VPN(Secure Socket Layer-Virtual Private Network)などのVPN処理のような高位レイヤ処理を行う中継装置が登場している。さらに、中継装置によって高位レイヤの解析も実施可能であることから、高位レイヤの情報を基にしたQoS(Quality of Service)処理などが実施されることもある。
また、一般にネットワークサーバと呼ばれ、高位レイヤ処理とレイヤ2およびレイヤ3の処理との双方の処理を実施する装置も登場し、コンピュータネットワークに配置されるようになっている。このようなネットワークサーバには、多機能であることに起因してネットワーク内の負荷が集中することがあり、基本的な性能についても高度なものが求められている。このため、ネットワークサーバにおける中継処理に関しては、それほど複雑な処理を含まないため、ハードウェア化による高速化が図られることがある。一方、ネットワークサーバにおける高位レイヤ処理に関しては、複雑な処理を含むことや新規サービスに対応する柔軟な機能拡張が必要とされることなどの要因から、単純なハードウェア化による高速化は困難となっている。したがって、ネットワークサーバにおける高位レイヤ処理を高速化するためには、ソフトウェア処理の高速化、換言すればCPU(Central Processing Unit)の処理性能の向上が不可欠となる。
近年では、CPU単体の処理性能がほぼ限界に近づいているため、複数のCPUやCPUコア(以下、これらをまとめて「CPU」という)を単一の装置に搭載することでソフトウェア処理の高速化が図られることがある。このとき、単に複数のCPUそれぞれに同一の処理をさせるのではソフトウェア処理の高速化が図られないため、処理対象の複数のパケットがネットワークサーバに到着すると、各パケットは複数のCPUに振り分けられ、それぞれのCPUによって並列に処理が実行される。ところが、従来の多くのソフトウェアは、処理の流れが単一であることを前提に実装されているため、複数のCPUによって並列に処理が実行されると、誤動作が発生する虞がある。この誤動作の主原因は、ソフトウェアが使用するメモリに対する複数のCPUからのアクセスが発生するため、1つのCPUが利用するメモリ内の情報が他のCPUによって書き換えられ、内部不整合が発生することである。
そこで、例えば図1に示すように、メモリ20の記憶領域中にCPU10−1〜10−n(nは2以上の整数)に対応するn個の領域を確保し、各CPU10−1〜10−nが利用する情報をそれぞれのCPUに対応する領域に別々に記憶しておくことが考えられる。こうすることにより、メモリ20内の各領域に対しては、CPU10−1〜10−nのいずれか1つのみがアクセスすることになり、内部不整合の発生を防止することができる。しかし、このようなメモリ構成とした場合、CPU10−1〜10−nが共通して利用する情報(以下「共有情報」という)については、同一の情報をn個用意してメモリ20内の各領域に記憶させる必要が生じ、メモリ20に必要とされる容量が増大してしまう。
したがって、共有情報に対して1つのCPUがアクセスしている間は、同一の情報に対する他のCPUによるアクセスを禁ずる排他処理が必要となる。具体的には、例えば図2に示すように、メモリ20に記憶された共有情報にロック変数を付加しておき、例えばCPU10−1が共有情報にアクセス中は、ロック変数によって共有情報がロックされ、他のCPU10−2〜10−nによる共有情報へのアクセスが禁じられる。そして、CPU10−1による共有情報へのアクセスが終了すると、ロック変数による共有情報のロックが解除され、他のCPU10−2〜10−nによる共有情報へのアクセスが許可されるようになる。こうすることにより、共有情報に対して複数のCPUが同時にアクセスし、内部不整合が発生することを防止することができる。
また、例えば特許文献1には、メモリなどの共有資源を管理する共有資源管理情報によって、複数のプロセッサが同時に同一の共有資源を使用することを防止することが記載されている。この特許文献1に記載された技術によっても、共通資源に記憶された共有情報に対する排他処理を実現することができる。
特開平6−19858号公報
しかしながら、上述した排他処理を行う場合には、1つのCPUが共有情報にアクセスしている間は、他のCPUが共有情報にアクセスすることができず、他のCPUの処理が停止してしまうことがある。この結果、複数のCPUが並列に処理を実行するにも拘らず、装置の性能向上に一定の限界があるという問題がある。具体的には、CPUの数を2倍にすれば理論的には処理性能が2倍になると考えられるが、実際にはCPU間の排他処理が発生するため、処理性能が2倍に到達することはない。極端な場合には、CPUの数を2倍にする前と比べて処理性能が低下することもある。したがって、処理性能を向上するためには、排他処理の頻度を低減することが非常に重要となる。
特にネットワークサーバでは、中継されるパケットの情報(以下「パケット情報」という)やパケットが伝送されるコネクションの情報(以下「コネクション情報」という)などは、すべてのCPUによって利用される共有情報として共通のバッファに格納されるため、排他処理が頻繁に発生するとネットワークサーバの性能向上が困難であり、排他処理の頻度を低減することが強く望まれている。
排他処理を回避するためには、共有情報のそれぞれにアクセスする必要があるCPUが1つとなるように、複数のCPUそれぞれに対して処理を振り分ければ良い。すなわち、例えばネットワークサーバにおいては、バッファに格納されたパケットについて、1つのパケットに対しては1つのCPUによってのみ処理が実行されるように処理が振り分けられていれば、それぞれのパケット情報に対するアクセスが競合することがなく、排他処理を回避することができる。
ただし、このように複数のCPUに対する処理の振り分けを行っても、これらの複数のCPUがパケットに対する処理の実行のために使用するバッファの獲得および解放については、依然として排他処理が必要となる。すなわち、各CPUは、パケットに対する処理の際に例えばコネクション情報などを参照するが、必要なコネクション情報を格納するバッファを獲得・解放するためには、バッファを管理する情報にアクセスする必要がある。つまり、バッファを管理する情報に対しては、必ず複数のCPUがアクセスすることになるため、各CPU間での排他処理が必要となる。
本発明はかかる点に鑑みてなされたものであり、パケットに対する処理を複数のCPUが並列して実行する場合に、複数のCPUの間における排他処理の頻度を低減して処理性能を向上することができるパケット処理装置およびパケット処理プログラムを提供することを目的とする。
上記課題を解決するために、本発明に係るパケット処理装置は、複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、前記バッファのバッファ領域を使用しながらパケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、処理対象パケットを前記複数の処理プロセッサのいずれか1つに振り分けるとともに、処理対象のパケットが振り分けられた処理プロセッサに対して前記バッファのバッファ領域を割り当てる振分プロセッサとを有する構成を採る。
この構成によれば、振分プロセッサが複数の処理プロセッサに対して処理対象パケットを振り分けるとともに、処理に必要なバッファ領域を割り当てるため、並列に処理を実行する複数の処理プロセッサがそれぞれバッファ領域取得のためにバッファへアクセスする必要がなく、複数の処理プロセッサの間における排他処理が不要となる。換言すれば、パケットに対する処理を複数のCPUが並列して実行する場合に、複数のCPUの間における排他処理の頻度を低減して処理性能を向上することができる。
また、本発明に係るパケット処理装置は、上記構成において、前記振分プロセッサは、処理対象パケットの伝送に利用されるコネクションに対応する処理プロセッサへ当該処理対象パケットを振り分ける構成を採る。
この構成によれば、複数の処理プロセッサのそれぞれが1つのコネクションに対応し、パケットの伝送に利用されたコネクションに応じて処理プロセッサへの振り分けを行うため、各処理プロセッサがパケットに対して処理を実行する際、それぞれのコネクションの情報に対するアクセスの競合が発生することがなく、複数の処理プロセッサの間における排他処理を確実に低減することができる。
また、本発明に係るパケット処理装置は、上記構成において、処理対象パケットの伝送に利用されるコネクションに、処理対象パケットの振り分け先の処理プロセッサおよび当該処理プロセッサが使用中のバッファ領域を対応付けて記憶するとともに、いずれの処理プロセッサにも使用されていない空きバッファ領域を記憶する記憶手段をさらに有し、前記振分プロセッサは、既存のコネクションに対応する処理プロセッサには当該処理プロセッサが使用中のバッファ領域を割り当てる一方、新規のコネクションに対応する処理プロセッサには空きバッファ領域を割り当てる構成を採る。
この構成によれば、パケットの伝送に利用されるコネクションとパケットの処理に使用されるバッファ領域との対応関係を記憶し、同一のコネクションによって伝送されたパケットには、同一のバッファ領域を割り当てるため、各バッファ領域に格納された情報を複数の処理プロセッサが共有する必要がなく、複数の処理プロセッサの間における排他処理を確実に低減することができる。
また、本発明に係るパケット処理装置は、上記構成において、前記記憶手段は、処理対象パケットの伝送に利用されるコネクションに、当該コネクションに関連する関連コネクションに対応する処理プロセッサが使用中の関連バッファ領域をさらに対応付けて記憶し、前記振分プロセッサは、処理対象パケットの伝送に利用されるコネクションが関連コネクションを有する場合に、処理対象パケットを関連コネクションに対応する処理プロセッサに振り分けるとともに、当該処理プロセッサに関連バッファ領域を割り当てる構成を採る。
この構成によれば、複数のコネクションが互いに関連する場合には、それぞれのコネクションによって伝送されるパケットを同一の処理プロセッサに振り分けるとともに、この処理プロセッサに関連バッファ領域を割り当てるため、例えば制御コネクションとデータコネクションの2つのコネクションを利用するプロトコルでパケットが伝送される場合でも、互いに関連するコネクションの情報を格納するバッファ領域に対しては、1つの処理プロセッサがアクセスすることになり、複数の処理プロセッサによるアクセス競合の発生を防止することができる。
また、本発明に係るパケット処理装置は、上記構成において、前記複数の処理プロセッサは、使用を終了したバッファ領域の位置を示すバッファ位置情報を格納するキューをそれぞれ備える構成を採る。
この構成によれば、使用を終了したバッファ領域のバッファ位置情報をそれぞれの処理プロセッサのキューが格納するため、各処理プロセッサは、解放可能なバッファ領域を他のプロセッサに対して容易に通知することができる。
また、本発明に係るパケット処理装置は、上記構成において、前記振分プロセッサは、前記複数の処理プロセッサに備えられたキューを監視する監視手段と、前記監視手段による監視の結果、キューにバッファ位置情報が格納されている場合に、当該バッファ位置情報をキューから読み出してバッファ位置情報が示すバッファ領域を解放する解放手段とを含む構成を採る。
この構成によれば、振分プロセッサがキューを監視して、バッファ位置情報が示すバッファ領域を解放するため、振分プロセッサのみがバッファ領域の解放を実行することになり、バッファ領域の解放時における複数の処理プロセッサのバッファへのアクセス競合を防止することができる。
また、本発明に係るパケット処理装置は、上記構成において、前記キューは、前記複数の処理プロセッサがそれぞれバッファ位置情報を格納する位置を示すライトポインタと、前記振分プロセッサがバッファ位置情報を読み出す位置を示すリードポインタとを備える構成を採る。
この構成によれば、処理プロセッサが参照するライトポインタと、振分プロセッサが参照するリードポインタとを備えるため、バッファ位置情報を格納するキューに対するアクセスの際に、処理プロセッサはライトポインタのみにアクセスし、振分プロセッサはリードポインタのみにアクセスすることになり、キューにおけるアクセス競合を防止することができる。
また、本発明に係るパケット処理プログラムは、複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、パケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、処理対象パケットを前記複数の処理プロセッサのいずれか1つに振り分ける振分プロセッサとを有するコンピュータによって実行されるパケット処理プログラムであって、前記コンピュータに、処理対象パケットが振り分けられた処理プロセッサに対して、前記振分プロセッサが前記バッファのバッファ領域を割り当てる割当ステップと、処理対象パケットが振り分けられた処理プロセッサが前記割当ステップにて割り当てられたバッファ領域を使用しながら処理対象パケットに対して処理を実行する処理ステップとを実行させるようにした。
また、本発明に係るパケット処理方法は、複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、パケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、処理対象パケットを前記複数の処理プロセッサのいずれか1つに振り分ける振分プロセッサとを有するパケット処理装置におけるパケット処理方法であって、処理対象パケットが振り分けられた処理プロセッサに対して、前記振分プロセッサが前記バッファのバッファ領域を割り当てる割当ステップと、処理対象パケットが振り分けられた処理プロセッサが前記割当ステップにて割り当てられたバッファ領域を使用しながら処理対象パケットに対して処理を実行する処理ステップとを有するようにした。
これらによれば、振分プロセッサが複数の処理プロセッサに対して処理対象パケットを振り分けるとともに、処理に必要なバッファ領域を割り当てるため、並列に処理を実行する複数の処理プロセッサがそれぞれバッファ領域取得のためにバッファへアクセスする必要がなく、複数の処理プロセッサの間における排他処理が不要となる。換言すれば、パケットに対する処理を複数のCPUが並列して実行する場合に、複数のCPUの間における排他処理の頻度を低減して処理性能を向上することができる。
本明細書に開示されたパケット処理装置およびパケット処理プログラムによれば、パケットに対する処理を複数のCPUが並列して実行する場合に、複数のCPUの間における排他処理の頻度を低減して処理性能を向上することができる。
図1は、並列処理時の内部不整合を防止する方法の一例を示す図である。 図2は、並列処理時の内部不整合を防止する方法の他の一例を示す図である。 図3は、一実施の形態に係るパケット処理装置の概要構成を示すブロック図である。 図4は、一実施の形態係るCPU部の内部構成を示すブロック図である。 図5は、一実施の形態に係るメモリの内部構成を示すブロック図である。 図6は、一実施の形態に係るFIFO部の具体的構成例を示す図である。 図7は、一実施の形態に係るコネクション情報テーブルの一例を示す図である。 図8は、一実施の形態に係るパケット処理装置の動作を示すフロー図である。 図9は、一実施の形態に係るバッファ解放時の並列処理CPUの動作を示すフロー図である。 図10は、一実施の形態に係るバッファ解放時の振分CPUの動作を示すフロー図である。 図11は、他の実施の形態に係るコネクション情報テーブルの一例を示すブロック図である。
符号の説明
100 CPU部
110 振分CPU
111 処理振分部
112 バッファ割当部
113 FIFO監視部
114 バッファ解放部
120−1〜120−n 並列処理CPU
121 FIFO部
121a FIFO
121b ライトポインタ
121c リードポインタ
200 メモリ
210 パケット情報格納バッファ
220 コネクションバッファ
230 その他バッファ
240 空きバッファ記憶部
250 コネクション情報テーブル
本発明の骨子は、パケットに対する処理を複数のCPUへ振り分けるプロセッサが、処理の振り分け以外にも処理の実行に必要なバッファ領域の割り当ておよび解放を一括して実行することである。以下、本発明の一実施の形態について、図面を参照して詳細に説明する。
図3は、本発明の一実施の形態に係るパケット処理装置の概要構成を示すブロック図である。同図に示すパケット処理装置は、例えばネットワークサーバなどの中継装置に搭載されているものとする。なお、このパケット処理装置は、サーバやクライアントなどの端末装置に搭載されていても良い。図3に示すパケット処理装置は、CPU部100、メモリ200、メモリ制御部300、MAC(Media Access Control)部400−1〜400−m(mは1以上の整数)、PHY(PHYsical)部500−1〜500−m、および内部バス600を有している。
CPU部100は、複数のCPUを備え、各CPUがメモリ200に格納された情報を用いた処理を実行する。このとき、CPU部100内の各CPUは、それぞれが異なる処理を並列に実行する。また、CPU部100は、並列に処理を実行する複数のCPUへ処理を振り分けるCPUを備え、このCPUが処理に必要なバッファ領域の割り当ておよび解放を実行する。
メモリ200は、CPU部100内の各CPUが処理に用いる情報を格納するバッファを備えている。具体的には、メモリ200は、外部から入力されたパケットに含まれる情報(パケット情報)やパケットの伝送に用いられるコネクションの情報(コネクション情報)などを格納するためのバッファをそれぞれ備えている。また、メモリ200は、それぞれのバッファの空き状態を記憶している。
メモリ制御部300は、CPU部100がメモリ200に格納された情報を用いて処理を実行する際に、CPU部100とメモリ200の間の情報のやり取りを制御する。すなわち、メモリ制御部300は、CPU部100による処理が実行される際に、内部バス600を介してメモリ200から必要な情報を取得し、CPU部100へ提供する。
MAC部400−1〜400−mは、パケットの送受信方法や誤り検出方法などを設定するレイヤ2の一部に属する処理を実行する。同様に、PHY部500−1〜500−mは、それぞれ外部のインタフェース1〜mに接続し、レイヤ1(物理層)に属する処理を実行する。これらのMAC部400−1〜400−mとPHY部500−1〜500−mとは、対応する2つの処理部の組み合わせ(例えばMAC部400−1とPHY部500−1の組み合わせ)ごとに例えばネットワークカード上に一体的に形成されている。そして、MAC部400−1〜400−mおよびPHY部500−1〜500−mを介して各インタフェース1〜nからパケット処理装置内部へパケットが入力されたり、パケット処理装置内部から各インタフェース1〜mへパケットが出力されたりする。
内部バス600は、パケット処理装置内の各処理部を接続し、情報を伝達する。具体的には、内部バス600は、例えば各インタフェース1〜mから入力されたパケットのパケット情報をMAC部400−1〜400−mからメモリ200へ伝達したり、このパケット情報をメモリ200からメモリ制御部300へ伝達したりする。
図4および図5は、それぞれ本実施の形態に係るCPU部100およびメモリ200の内部構成を示すブロック図である。図4に示すCPU部100は、振分CPU110および並列処理CPU120−1〜120−n(nは2以上の整数)を有している。また、図5に示すメモリ200は、パケット情報格納バッファ210、コネクションバッファ220、その他バッファ230、空きバッファ記憶部240、およびコネクション情報テーブル250を有している。
図4において、振分CPU110は、メモリ200に記憶されたコネクション情報テーブル250を参照し、同一のコネクションから受信されるパケットが同一の並列処理CPUによって処理されるように、パケットを並列処理CPU120−1〜120−nに振り分ける。また、振分CPU110は、並列処理CPU120−1〜120−nがパケットに対する処理を実行する際に使用するバッファ領域の割り当ておよび解放を実行する。具体的には、振分CPU110は、処理振分部111、バッファ割当部112、FIFO(First In First Out)監視部113、およびバッファ解放部114を有している。
処理振分部111は、パケット処理装置にパケットが入力されると、メモリ200の空きバッファ記憶部240を参照してパケット情報格納バッファ210の空きバッファ領域を獲得し、この空きバッファ領域に入力パケットのパケット情報を格納する。そして、処理振分部111は、コネクション情報テーブル250を参照し、パケットの処理を実行する並列処理CPUを決定する。すなわち、例えばあるTCP(Transmission Control Protocol)コネクションから受信されたパケットが以前に並列処理CPU120−1によって処理され、その旨がコネクション情報テーブル250に記憶されていれば、処理振分部111は、同一のTCPコネクションから受信されるパケットは、すべて並列処理CPU120−1によって処理されるようにパケットの処理を振り分ける。
バッファ割当部112は、メモリ200の空きバッファ記憶部240またはコネクション情報テーブル250を参照し、処理が振り分けられた並列処理CPUに対して、処理の実行に使用するコネクションバッファ220およびその他バッファ230のバッファ領域を割り当てる。すなわち、バッファ割当部112は、振分先の並列処理CPUが新規に確立されたコネクションによって伝送されたパケットを処理する場合は、空きバッファ記憶部240を参照して空きバッファ領域を獲得し、この空きバッファ領域を振分先の並列処理CPUに割り当てる。一方、バッファ割当部112は、振分先の並列処理CPUが既存のコネクションによって伝送されたパケットを処理する場合は、コネクション情報テーブル250を参照して既存のコネクションに対応する使用中のバッファ領域を振分先の並列処理CPUに割り当てる。
これらの処理振分部111およびバッファ割当部112による処理の結果、入力パケットに対する処理が並列処理CPU120−1〜120−nのいずれかに振り分けられるとともに、パケットに対する処理時に参照・使用されるパケット情報格納バッファ210、コネクションバッファ220、およびその他バッファ230が振分先の並列処理CPUに割り当てられる。
FIFO監視部113は、並列処理CPU120−1〜120−nのそれぞれに備えられたFIFOを監視し、各並列処理CPUが使用を終了したバッファ領域の有無を検知する。すなわち、並列処理CPU120−1〜120−nは処理を完了した際に後述するFIFO部121−1〜121−nに解放可能なバッファ領域の位置を示すバッファ位置情報を格納するが、FIFO監視部113は、FIFO部121−1〜121−nを常時監視し、解放可能なバッファ領域があるか否かを確認する。
バッファ解放部114は、FIFO監視部113によるFIFO部121−1〜121−nの監視の結果、パケット情報格納バッファ210、コネクションバッファ220、またはその他バッファ230に解放可能なバッファ領域がある場合に、該当するバッファ領域を解放し、このバッファ領域を空きバッファ領域として空きバッファ記憶部240に登録する。
並列処理CPU120−1〜120−nは、振分CPU110によってパケットに対する処理が振り分けられるとともに、処理に使用するバッファ領域が割り当てられると、このパケットのパケット情報をメモリ200のパケット情報格納バッファ210から取得し、所定の処理を実行する。このとき、並列処理CPU120−1〜120−nは、振分CPU110によって割り当てられたコネクションバッファ220およびその他バッファ230のバッファ領域に格納されたコネクション情報などを利用して処理を実行する。
また、並列処理CPU120−1〜120−nは、それぞれFIFO部121−1〜121−nを備えており、パケットに対する処理が完了すると、このパケットのパケット情報を格納するパケット情報格納バッファ210のバッファ領域のバッファ位置情報をFIFO部121−1〜121−nに登録する。同様に、並列処理CPU120−1〜120−nは、パケットに対する処理の完了により、このパケットを伝送するコネクションが切断される場合に、このコネクションのコネクション情報を格納するコネクションバッファ220のバッファ領域のバッファ位置情報をFIFO部121−1〜121−nに登録する。そして、並列処理CPU120−1〜120−nは、その他バッファ230についても同様に、パケットの処理完了に伴って不要となるバッファ領域のバッファ位置情報をFIFO部121−1〜121−nに登録する。
ここで、FIFO部121−1は、例えば図6に示すような構成を有している。すなわち、FIFO部121−1は、パケット情報格納バッファ210、コネクションバッファ220、およびその他バッファ230にそれぞれ対応するFIFO121aを有し、それぞれのFIFO121aには、書き込みの先頭位置を示すライトポインタ121bと読み出しの先頭位置を示すリードポインタ121cとが付加されている。この構成は、FIFO部121−2〜121−nにも共通している。
FIFO121aは、それぞれ対応するバッファ領域の複数のバッファ位置情報を格納可能になっており、末尾にバッファ位置情報が格納された後には先頭に次のバッファ位置情報が格納される循環バッファ構造となっている。例えば図6においては、左端がFIFO121aの先頭であり右端がFIFO121aの末尾であるが、バッファ位置情報は、左端から右端へ順次格納されていき、右端にバッファ位置情報が格納されると、次のバッファ位置情報は空きとなった左端に格納される。また、バッファ位置情報の読み出しも同様に、末尾のバッファ位置情報が読み出された後は、先頭のバッファ位置情報が読み出されることになる。
ライトポインタ121bは、並列処理CPU120−1がパケットに対する処理を完了した場合やコネクションの切断を検知した場合など不要なバッファ領域がある場合に、並列処理CPU120−1が不要となったバッファ領域のバッファ位置情報を書き込むべき位置を示している。したがって、並列処理CPU120−1は、解放可能となったバッファ領域がある場合には、ライトポインタ121bおよびリードポインタ121cの位置関係からFIFO121aに空きがあることを確認し、解放可能なバッファ領域のバッファ位置情報をライトポインタ121bが示す位置に格納し、ライトポインタ121bをインクリメントする。すなわち、並列処理CPU120−1は、図6において、ライトポインタ121bが示す位置を1単位分だけ右方向へ移動させる。
リードポインタ121cは、振分CPU110のFIFO監視部113が監視すべき位置を示している。つまり、FIFO監視部113は、FIFO121aのリードポインタ121cが示す位置を監視し、FIFO121aにバッファ位置情報が格納されているか否かを確認する。具体的には、FIFO監視部113は、ライトポインタ121bとリードポインタ121cが一致しているか否かを判断し、両者が一致していなければFIFO121aにバッファ格納位置情報が格納されていると判断する。そして、FIFO監視部113は、FIFO121aにバッファ位置情報が格納されている場合に、1つのバッファ位置情報を読み出し、リードポインタ121cをインクリメントする。すなわち、FIFO監視部113は、図6において、リードポインタ121cが示す位置を1単位分だけ右方向へ移動させる。
このように構成されるFIFO部121−1〜121−nは、それぞれ対応する並列処理CPU120−1〜120−nまたは振分CPU110によってのみアクセスされるため、並列処理CPU120−1〜120−n間でのアクセスの競合は発生しない。また、個々の並列処理CPU120−1〜120−nと振分CPU110とは、FIFO部121−1〜121−nにアクセスするが、並列処理CPU120−1〜120−nは、ライトポインタ121bのみを書き換え、振分CPU110は、リードポインタ121cのみを書き換える。したがって、2つのCPUによる書き換えのアクセスは、異なるポインタに対してのみ生じるため、ライトポインタ121bおよびリードポインタ121cが示す位置に不整合が生じることはない。結果として、並列処理CPU120−1〜120−nの間での排他処理や並列処理CPU120−1〜120−nと振分CPU110の間での排他処理は不要となる。
一方、図5において、パケット情報格納バッファ210は、複数のバッファ領域を含んでおり、各インタフェース1〜nからパケット処理装置に入力されたパケットのパケット情報を各バッファ領域に格納する。すなわち、パケット情報格納バッファ210は、MAC部およびPHY部を備えたネットワークカードを介して入力されたパケットのパケット情報を内部バス600を経由して取得し、パケットごとのパケット情報を格納する。
コネクションバッファ220は、複数のバッファ領域を含んでおり、パケットが伝送されるコネクションのコネクション情報を各バッファ領域に格納する。コネクションバッファ220が各バッファ領域に格納するコネクション情報は、並列処理CPU120−1〜120−nがパケットに対する処理を実行する際に格納・参照される。
その他バッファ230は、複数のバッファ領域を含んでおり、並列処理CPU120−1〜120−nがパケットに対する処理を実行する際に必要な情報を各バッファ領域に格納する。その他バッファ230が各バッファ領域に格納する情報は、例えば並列処理CPU120−1〜120−nによる高位レイヤ処理などに関する情報である。
空きバッファ記憶部240は、パケット情報格納バッファ210、コネクションバッファ220、およびその他バッファ230のバッファ領域ごとの空き状態を記憶する。具体的には、空きバッファ記憶部240は、処理振分部111によってパケット情報がパケット情報格納バッファ210のバッファ領域に格納されると、このバッファ領域が空きではないことを記憶し、バッファ割当部112によってコネクションバッファ220およびその他バッファ230のバッファ領域が並列処理CPU120−1〜120−nに割り当てられると、このバッファ領域が空きではないことを記憶する。また、空きバッファ記憶部240は、バッファ解放部114によってバッファ領域が解放されると、このバッファ領域が空きであることを記憶する。
このように、空きバッファ記憶部240は、メモリ200内のすべてのバッファの空き状態を記憶するため、振分CPU110がパケット情報を格納したり並列処理CPU120−1〜120−nにバッファ領域を割り当てたりする際、振分CPU110は、容易に空きバッファ領域を把握することができる。また、空きバッファ記憶部240に対しては、振分CPU110のみがアクセスするため、排他処理が必要となることもない。
コネクション情報テーブル250は、パケット処理装置に入力されたパケットが伝送されるコネクションに対応する処理の振り分け先の並列処理CPU120−1〜120−nおよび処理に使用されるバッファ領域を記憶している。具体的には、コネクション情報テーブル250は、例えば図7に示すように、コネクションに応じたIPアドレスおよびポートに対応付けて、振り分け先の並列処理CPU120−1〜120−n、振り分け先の並列処理CPUが使用中のコネクションバッファ220のバッファ領域(コネクションバッファポインタ)、および振り分け先の並列処理CPUが使用中のその他バッファ230のバッファ領域(その他バッファポインタ)を記憶する。図7に示した例では、例えばIPアドレスが「IPa」でポートが「Pa」のパケットは、並列処理CPU120−1へ振り分けられ、このパケットの処理は、コネクションバッファ220のバッファ領域「Cb#1」およびその他バッファ230のバッファ領域「Ob#1」が使用されることになる。
ここで、コネクション情報テーブル250におけるIPアドレスおよびポートと振分先CPU、コネクションバッファポインタ、およびその他バッファポインタとの対応関係は、新たなコネクションが確立されるたびに振分CPU110によって決定され登録される。そして、既存のコネクションによって伝送されるパケットが入力された場合には、振分CPU110の処理振分部111によってコネクション情報テーブル250が参照されることにより、同一のコネクションから以前に入力されたパケットの振り分け先となっている並列処理CPU120−1〜120−nへパケットが振り分けられることになる。したがって、同一のコネクションから入力されるパケットは、すべて同一の並列処理CPU120−1〜120−nによって処理が施されることになる。これにより、コネクションバッファ220およびその他バッファ230のバッファ領域に対しては、並列処理CPU120−1〜120−nのいずれか1つのみがアクセスすることになり、排他処理が不要となる。
次いで、上記のように構成されたパケット処理装置のパケット入力時の動作について、図8に示すフロー図を参照しながら説明する。なお、以下においては、主にCPU部100内の各CPUの動作について説明するものとし、メモリ制御部300、MAC部400−1〜400−m、およびPHY部500−1〜500−mの詳細な動作については説明を省略する。
まず、コネクションによって伝送されたパケットがパケット処理装置に入力されると(ステップS101)、振分CPU110の処理振分部111によって、空きバッファ記憶部240が参照され、パケット情報格納バッファ210の空きバッファ領域が獲得される。そして、入力パケットのパケット情報は、パケット情報格納バッファ210の獲得された空きバッファ領域に格納される(ステップS102)。
また、処理振分部111によって、パケット情報からIPアドレスおよびポートが確認され、コネクション情報テーブル250が参照されることにより、パケットが伝送されたコネクションが既存のコネクションであるか否かが判断される(ステップS103)。すなわち、パケットのIPアドレスおよびポートがコネクション情報テーブル250に登録済みであれば、処理振分部111によって、パケットのコネクションが既存のコネクションであると判断され、パケットのIPアドレスおよびポートがコネクション情報テーブル250に未登録であれば、処理振分部111によって、パケットのコネクションが新規のコネクションであると判断される。
この判断の結果、コネクションが既存のコネクションである場合は(ステップS103Yes)、処理振分部111によって、パケットのIPアドレスおよびポートに対応する振分先CPUがコネクション情報テーブル250から読み出され、振り分け先の並列処理CPUへパケットの処理が振り分けられる。換言すれば、以前に同一のコネクションから入力されたパケットの処理を実行した並列処理CPUへパケットの処理が振り分けられる(ステップS104)。
そして、バッファ割当部112によって、パケットのIPアドレスおよびポートに対応するコネクションバッファポインタおよびその他バッファポインタがコネクション情報テーブル250から読み出され、振り分け先の並列処理CPUにコネクションバッファ220およびその他バッファ230のバッファ領域を割り当てるバッファ割当処理が実行される(ステップS105)。
反対に、コネクションが新規のコネクションである場合は(ステップS103No)、処理振分部111によって、空いている並列処理CPUが1つ選択され、パケットの振り分け先に決定される。換言すれば、パケットに対する処理を実行中でない新規の並列処理CPUへパケットの処理が振り分けられる(ステップS106)。また、処理振分部111によって、パケットのIPアドレスおよびポートと振り分け先の並列処理CPUとの対応関係がコネクション情報テーブル250に登録される。この時点では、コネクション情報テーブル250においては、コネクションと振り分け先の並列処理CPUとの対応関係のみが登録されていることになり、並列処理CPUが使用するコネクションバッファ220およびその他バッファ230のバッファ領域を示すコネクションバッファポインタおよびその他バッファポインタ未登録である。
そして、バッファ割当部112によって、空きバッファ記憶部240が参照され、コネクションバッファ220およびその他バッファ230の空きバッファ領域を獲得するバッファ獲得処理が実行される(ステップS107)。このバッファ獲得処理によって獲得される空きバッファ領域は、コネクションが確立されている間、パケットの振り分け先となった並列処理CPUによって高位レイヤ処理などのために継続的に使用されることとなる。そこで、バッファ割当部112によって、空きバッファ領域を示すコネクションバッファポインタおよびその他バッファポインタがコネクションを示すIPアドレスおよびポートに対応付けてコネクション情報テーブル250に登録される(ステップS108)。
こうしてパケットを伝送するコネクション、パケットに対する処理を実行する並列処理CPU、および並列処理CPUが使用するバッファ領域がコネクション情報テーブル250において対応付けられることになり、同一コネクションによって伝送されたパケットの処理を同一の並列処理CPUに振り分けることが可能になるとともに、コネクションが継続中は、並列処理CPUにコネクションバッファ220およびその他バッファ230の同一のバッファ領域を割り当てることができる。
また、上述した一連の処理の振り分けおよびバッファ領域の割り当てや獲得においては、振分CPU110のみが空きバッファ記憶部240およびコネクション情報テーブル250に対して情報の登録に伴う書き込みを実行している。したがって、空きバッファ記憶部240およびコネクション情報テーブル250におけるアクセスの競合がなく、複数のCPU間での排他処理が不要となる。
そして、振り分け先の並列処理CPUが決定され、使用するバッファ領域が割り当てられると、この並列処理CPUによって、パケットに対する高位レイヤ処理などの処理が実行される(ステップS109)。このとき、振り分け先の並列処理CPUは、パケット情報格納バッファ210に格納されたパケット情報を使用するとともに、コネクションバッファ220およびその他バッファ230の割り当てられたバッファ領域を使用する。割り当てられたバッファ領域については、他の並列処理CPUからアクセスされることがないため、コネクションバッファ220およびその他バッファ230においてもアクセスの競合がなく、複数の並列処理CPU120−1〜120−nの間での排他処理が不要となる。
次に、本実施の形態に係るパケット処理装置においてパケットの処理が完了し、パケットを伝送するコネクションが切断される場合の並列処理CPU120−1の動作について、図9に示すフロー図を参照しながら説明する。なお、並列処理CPU120−2〜120−nの動作は、並列処理CPU120−1の動作と同様であるため、その説明を省略する。
本実施の形態においては、コネクションを伝送される最後のパケットのパケット情報には、その旨を示す情報が含まれており、並列処理CPU120−1は、コネクションの最後のパケットに対する処理を実行する際、このパケットが伝送された後、コネクションが終了することを検知する(ステップS201)。そして、並列処理CPU120−1は、図示しないタイマによって、コネクションの終了が検知されてから所定時間が経過するまで待機する(ステップS202)。
所定時間が経過してパケットを伝送していたコネクションが確実に切断されると、並列処理CPU120−1は、FIFO部121−1のFIFO121aに空きがあるか否かを判定する(ステップS203)。具体的には、並列処理CPU120−1は、バッファ情報格納バッファ210、コネクションバッファ220、およびその他バッファ230のそれぞれに対応するFIFO121aに付加されたライトポインタ121bおよびリードポインタ121cを参照し、リードポインタ121cがライトポインタ121bより1単位分だけ大きい場合には、FIFO121aに空きがないと判定する。つまり、FIFO121aにライトポインタ121bから1単位分の情報が書き込まれると、FIFO121aが一杯になってしまうため、上記の場合に空きがないと判定される。
そして、FIFO121aに空きがない場合には(ステップS203No)、終了したコネクションのコネクション情報を格納するコネクションバッファ220のバッファ領域やその他バッファ230のバッファ領域は解放されることなく、この時点での処理が終了して待機される。
一方、FIFO121aに空きがある場合には(ステップS203Yes)、並列処理CPU120−1によって、処理が完了したパケットのパケット情報を格納しているバッファ領域や、終了したコネクションのコネクション情報およびその他の情報を格納しているバッファ領域のバッファ位置情報がライトポインタ121bの位置に書き込まれる(ステップS204)。同時に、並列処理CPU120−1によって、バッファ位置情報が書き込まれた1単位分だけそれぞれのFIFO121aにおけるライトポインタ121bがインクリメントされる(ステップS205)。
このように、並列処理CPU120−1がパケットに対する処理を完了し、コネクションが終了すると、これらのパケットおよびコネクションに関する情報を格納しているバッファ領域のバッファ位置情報がFIFO部121−1に記憶されることになる。このとき、並列処理CPU120−1は、FIFO部121−1にのみアクセスし、他の並列処理CPU120−2〜120−nのFIFO部121−2〜121−nにはアクセスしないため、並列処理CPU120−1〜120−nの間での排他処理は不要である。そして、不要となったバッファ領域のバッファ位置情報が記憶されたFIFO部121−1〜121−nが振分CPU110によって参照されることにより、不要となった情報を格納するバッファ領域の解放を実行することができる。
そこで、次に、本実施の形態に係る振分CPU110のバッファ領域解放時の動作について、図10に示すフロー図を参照しながら説明する。
本実施の形態においては、振分CPU110のFIFO監視部113によって、常時並列処理CPU120−1〜120−nのFIFO部121−1〜121−nが監視されている(ステップS301)。具体的には、FIFO監視部113によって、それぞれのFIFO121aにおけるライトポインタ121bおよびリードポインタ121cが比較され、両者が一致しておりFIFO121aが空であるか否かが監視される。そして、すべてのFIFO部121−1〜121−nが空で、解放すべきバッファ領域のバッファ位置情報が記憶されていなければ(ステップS301No)、いずれのバッファ領域も解放されることなく処理が終了する。
一方、いずれかのFIFO部121−1〜121−nが空でなく、解放すべきバッファ領域のバッファ位置情報が記憶されていれば(ステップS301Yes)、FIFO監視部113によって、それぞれのFIFO121aにおけるリードポインタ121cの位置からバッファ位置情報が読み出される(ステップS302)。同時に、FIFO監視部113によって、バッファ位置情報が読み出された分だけそれぞれのFIFO121aにおけるリードポインタ121cがインクリメントされる(ステップS303)。
解放対象のバッファ領域のバッファ位置情報がFIFO部121−1〜121−nから読み出されると、バッファ解放部114によって、読み出されたバッファ位置情報が示すパケット情報格納バッファ210、コネクションバッファ220、およびその他バッファ230のバッファ領域の解放処理が実行される。また、バッファ解放部114によって、これらのバッファ領域が空きバッファ領域であることが空きバッファ記憶部240に記憶される(ステップS304)。
これにより、コネクションの終了により不要となるパケット情報やコネクション情報などを格納するバッファ領域が解放され、空きバッファ領域となる。この空きバッファ領域は、新たなコネクションが確立された場合に、このコネクションを伝送されるパケットのパケット情報やコネクション情報などを格納するのに使用されることになる。なお、パケット情報格納バッファ210のバッファ領域については、並列処理CPU120−1〜120−nによる処理が完了するたびに、上記と同様の方法で解放されている。これに対して、コネクションバッファ220およびその他バッファ230のバッファ領域については、コネクションが継続している間は並列処理CPU120−1〜120−nによって参照されるため、上記のようにコネクションが終了するときにのみ解放される。
このように、FIFO部121−1〜121−nに解放すべきバッファ領域のバッファ位置情報が格納されている場合には、振分CPU110によってバッファ領域の解放が実行される。このとき、振分CPU110は、FIFO部121−1〜121−nにアクセスするが、実際に書き換えるのはリードポインタ121cのみである。そして、各並列処理CPU120−1〜120−nは、ライトポインタ121bのみを書き換えるため、並列処理CPU120−1〜120−nと振分CPU110の間での排他処理は不要である。
以上のように、本実施の形態によれば、振分CPU110が並列処理CPU120−1〜120−nに対してパケットの処理を振り分けると同時に、処理に使用するバッファ領域の獲得処理または割当処理を実行する。また、並列処理CPU120−1〜120−nの処理が完了した際には、並列処理CPU120−1〜120−nが解放対象となったバッファ領域をそれぞれFIFO部121−1〜121−nに登録し、振分CPU110がバッファ領域の解放処理を実行する。このため、バッファ領域の割り当てや解放の際にも、バッファを管理する情報に対して振分CPU110のみがアクセスすることになり、複数のCPUからのアクセスが競合することがない。したがって、バッファの割り当てや解放に際しても排他処理が不要となり、パケットに対する処理を複数のCPUが並列して実行する場合に、複数のCPUの間における排他処理の頻度を低減して処理性能を向上することができる。
なお、上記一実施の形態においては、パケット処理装置に振分CPU110が備えられるものとして説明したが、本発明はこれに限定されず、一般のコンピュータに汎用のCPUが複数備えられる場合に、上記一実施の形態と同様の処理をいずれか1つのCPUに実行させるプログラムをコンピュータに導入し、コンピュータを上記一実施の形態と同様に動作させることも可能である。
ところで、上記一実施の形態においては、コネクションごとに並列処理CPU120−1〜120−nにパケットの処理を振り分けることにより、コネクションバッファ220およびその他バッファ230におけるアクセスの競合を防止し、排他処理を削減した。しかし、例えば制御コネクションとデータコネクションの2つのコネクションを同時に使用するFTP(File Transfer Protocol)などのサービスにおいては、複数のコネクションのコネクション情報を1つの並列処理CPUが参照する必要が生じることがある。
FTPにおける制御コネクションは、転送されるファイルの一覧や状態などの制御情報の伝送に使用され、データコネクションは実際にアップロードまたはダウンロードされるファイルの伝送に使用される。そして、FTPの所謂パッシブモードにおいては、制御コネクションによって伝送される制御情報が参照されることにより、この制御コネクションに対応するデータコネクションが特定される。したがって、データコネクションによって伝送されるファイルに対する処理を実行する並列処理CPUは、制御コネクションのコネクション情報およびデータコネクションのコネクション情報の双方を使用することになる。
具体的に、FTPにおけるQoS(Quality of Service)処理の例を挙げると、FTPの帯域を10Mbpsに帯域制御するように設定された場合、制御コネクションおよびデータコネクションの合計の帯域を10Mbpsに制限する必要がある。このとき、パッシブモード以外のモードでは、制御コネクションに対応する接続先ポートは、通常、21番ポートに固定され、データコネクションに対応する接続先ポートは、通常、20番ポートに固定されている。しかしながら、パッシブモードでは、データコネクションのポートが固定されておらず、サーバが制御コネクションを通じて指定するポートにおいてデータコネクションが確立される。このため、本発明に係るパケット処理装置がFTPのトラフィックを中継する場合に、接続先ポートの番号からFTPのデータコネクションであるか否かを判定することはできず、FTPの制御コネクションによって伝送される制御情報を参照する必要がある。
換言すれば、FTPの制御コネクションに関する処理が振り分けられた並列処理CPUは、制御コネクションに対応するデータコネクションのポート番号を確認し、制御コネクションとデータコネクションの対応をコネクション情報としてコネクションバッファに記憶させる必要がある。そして、互いに対応する制御コネクションとデータコネクションに関する処理が異なる並列処理CPUへ振り分けられると、コネクション情報を格納するコネクションバッファに対して複数の並列処理CPUがアクセスすることになり、排他処理が必要となってしまう。そこで、互いに対応する制御コネクションおよびデータコネクションに関しては、同一の並列処理CPUに処理を担当させる必要がある。
これを実現するためには、メモリ200に記憶されるコネクション情報テーブル250を例えば図11に示すようなものにする。すなわち、並列処理CPU120−1〜120−nが使用するコネクションバッファ220のバッファ領域の位置として、関連コネクションバッファポインタを追加する。これは、並列処理CPU120−1〜120−nに対応する制御コネクションおよびデータコネクションの双方のコネクション情報を参照させるための処置である。したがって、FTP以外の通常のコネクションに関しては、関連コネクションバッファポインタが登録されることはない。
さらに、並列処理CPU120−1〜120−nのFIFO部121−1〜121−nにそれぞれ関連コネクション通知用のFIFOを新たに配置する。そして、制御コネクションに対応する処理を振り分けられた並列処理CPU120−1〜120−nが、制御コネクションによって伝送される制御情報からデータコネクションのIPアドレスおよびポートを把握すると、並列処理CPU120−1〜120−nは、互いに対応する制御コネクションおよびデータコネクションのIPアドレスおよびポートの情報を関連コネクション通知用のFIFOに格納する。
このような構成にした場合、振分CPU110のFIFO監視部113は、関連コネクション通知用のFIFOを監視し、関連コネクションのIPアドレスおよびポートの情報が格納されていれば、この情報を読み出し、制御コネクションに対応する振分先CPUをコネクション情報テーブル250から確認する。そして、FIFO監視部113は、データコネクションに対応付けて振分先CPU、コネクションバッファポインタ、関連コネクションバッファポインタ、およびその他バッファポインタをコネクション情報テーブル250に登録するが、このとき、データコネクションの振分先CPUを、制御コネクションに対応する振分先CPUと同一の並列処理CPUとする。また、データコネクションの関連コネクションバッファポインタを、制御コネクションに対応するコネクションバッファポインタとする。
これにより、以降は、データコネクションに関する処理が対応する制御コネクションに関する処理を担当する並列処理CPUに振り分けられることになる。また、振分CPU110がデータコネクションに関する処理を振り分ける際には、コネクション情報テーブル250の関連コネクションバッファポインタを参照することにより、データコネクションに対応する制御コネクションのコネクション情報を格納するコネクションバッファ220のバッファ領域を特定することができる。したがって、制御コネクションおよびデータコネクションの双方の処理が振り分けられた並列処理CPUは、双方のコネクションのコネクション情報を参照しながら処理を実行することができる。また、互いに対応する制御コネクションおよびデータコネクションに関する処理が同一の並列処理CPUに振り分けられるため、制御コネクションおよびデータコネクションのコネクション情報に対して複数のCPUがアクセスすることがない。結果として、複数の並列処理CPU間での排他処理が不要になる。
本発明は、パケットに対する処理を複数のCPUが並列して実行する場合に、複数のCPUの間における排他処理の頻度を低減して処理性能を向上する際などに適用することができる。
本願が開示するパケット処理装置は、1つの態様において、パケットの伝送に利用される通信の種別に対応する複数の領域を有する記憶手段と、前記通信の種別に対応して設けられ、パケットに対する処理を実行する複数の処理手段と、処理対象パケットを該処理対象パケットの伝送に利用された通信の種別に対応する前記処理手段に振り分ける振分手段と、前記処理対象パケットが振り分けられた前記処理手段に対して、該処理対象パケットの伝送に利用された通信の種別に対応する前記領域を割り当てる割当手段と、前記割当手段によって割り当てられた領域に、前記処理対象パケットの処理に関する情報と該処理対象パケットの伝送に利用された種別の通信に関する情報とを格納する格納手段とを有する

Claims (9)

  1. 複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、
    前記バッファのバッファ領域を使用しながらパケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、
    処理対象パケットを前記複数の処理プロセッサのいずれか1つに振り分けるとともに、処理対象のパケットが振り分けられた処理プロセッサに対して前記バッファのバッファ領域を割り当てる振分プロセッサと
    を有することを特徴とするパケット処理装置。
  2. 前記振分プロセッサは、
    処理対象パケットの伝送に利用されるコネクションに対応する処理プロセッサへ当該処理対象パケットを振り分けることを特徴とする請求項1記載のパケット処理装置。
  3. 処理対象パケットの伝送に利用されるコネクションに、処理対象パケットの振り分け先の処理プロセッサおよび当該処理プロセッサが使用中のバッファ領域を対応付けて記憶するとともに、いずれの処理プロセッサにも使用されていない空きバッファ領域を記憶する記憶手段をさらに有し、
    前記振分プロセッサは、
    既存のコネクションに対応する処理プロセッサには当該処理プロセッサが使用中のバッファ領域を割り当てる一方、新規のコネクションに対応する処理プロセッサには空きバッファ領域を割り当てることを特徴とする請求項2記載のパケット処理装置。
  4. 前記記憶手段は、
    処理対象パケットの伝送に利用されるコネクションに、当該コネクションに関連する関連コネクションに対応する処理プロセッサが使用中の関連バッファ領域をさらに対応付けて記憶し、
    前記振分プロセッサは、
    処理対象パケットの伝送に利用されるコネクションが関連コネクションを有する場合に、処理対象パケットを関連コネクションに対応する処理プロセッサに振り分けるとともに、当該処理プロセッサに関連バッファ領域を割り当てることを特徴とする請求項3記載のパケット処理装置。
  5. 前記複数の処理プロセッサは、
    使用を終了したバッファ領域の位置を示すバッファ位置情報を格納するキューをそれぞれ備えることを特徴とする請求項1記載のパケット処理装置。
  6. 前記振分プロセッサは、
    前記複数の処理プロセッサに備えられたキューを監視する監視手段と、
    前記監視手段による監視の結果、キューにバッファ位置情報が格納されている場合に、当該バッファ位置情報をキューから読み出してバッファ位置情報が示すバッファ領域を解放する解放手段と
    を含むことを特徴とする請求項5記載のパケット処理装置。
  7. 前記キューは、
    前記複数の処理プロセッサがそれぞれバッファ位置情報を格納する位置を示すライトポインタと、
    前記振分プロセッサがバッファ位置情報を読み出す位置を示すリードポインタと
    を備えることを特徴とする請求項5記載のパケット処理装置。
  8. 複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、パケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、処理対象パケットを前記複数の処理プロセッサのいずれか1つに振り分ける振分プロセッサとを有するコンピュータによって実行されるパケット処理プログラムであって、前記コンピュータに、
    処理対象パケットが振り分けられた処理プロセッサに対して、前記振分プロセッサが前記バッファのバッファ領域を割り当てる割当ステップと、
    処理対象パケットが振り分けられた処理プロセッサが前記割当ステップにて割り当てられたバッファ領域を使用しながら処理対象パケットに対して処理を実行する処理ステップと
    を実行させることを特徴とするパケット処理プログラム。
  9. 複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、パケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、処理対象パケットを前記複数の処理プロセッサのいずれか1つに振り分ける振分プロセッサとを有するパケット処理装置におけるパケット処理方法であって、
    処理対象パケットが振り分けられた処理プロセッサに対して、前記振分プロセッサが前記バッファのバッファ領域を割り当てる割当ステップと、
    処理対象パケットが振り分けられた処理プロセッサが前記割当ステップにて割り当てられたバッファ領域を使用しながら処理対象パケットに対して処理を実行する処理ステップと
    を有することを特徴とするパケット処理方法。
JP2009551378A 2008-01-31 2008-01-31 パケット処理装置およびパケット処理プログラム Expired - Fee Related JP5136564B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2008/051575 WO2009096029A1 (ja) 2008-01-31 2008-01-31 パケット処理装置およびパケット処理プログラム

Publications (2)

Publication Number Publication Date
JPWO2009096029A1 true JPWO2009096029A1 (ja) 2011-05-26
JP5136564B2 JP5136564B2 (ja) 2013-02-06

Family

ID=40912398

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009551378A Expired - Fee Related JP5136564B2 (ja) 2008-01-31 2008-01-31 パケット処理装置およびパケット処理プログラム

Country Status (3)

Country Link
US (1) US20100293280A1 (ja)
JP (1) JP5136564B2 (ja)
WO (1) WO2009096029A1 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8014295B2 (en) 2009-07-14 2011-09-06 Ixia Parallel packet processor with session active checker
JP5405414B2 (ja) * 2010-08-13 2014-02-05 日本電信電話株式会社 セキュリティ装置及びフロー特定方法
US8819245B2 (en) 2010-11-22 2014-08-26 Ixia Processor allocation for multi-core architectures
US8572260B2 (en) 2010-11-22 2013-10-29 Ixia Predetermined ports for multi-core architectures
US8654643B2 (en) 2011-07-27 2014-02-18 Ixia Wide field indexing for packet tracking
EP2951977B1 (en) * 2013-01-30 2017-10-25 Palo Alto Networks, Inc. Security device implementing network flow prediction, and flow ownership assignment and event aggregation in a distributed processor system
US9077702B2 (en) 2013-01-30 2015-07-07 Palo Alto Networks, Inc. Flow ownership assignment in a distributed processor system
US9240975B2 (en) 2013-01-30 2016-01-19 Palo Alto Networks, Inc. Security device implementing network flow prediction
WO2018220855A1 (ja) * 2017-06-02 2018-12-06 富士通コネクテッドテクノロジーズ株式会社 演算処理装置、演算処理制御方法及び演算処理制御プログラム
KR102035740B1 (ko) * 2019-06-03 2019-10-23 오픈스택 주식회사 타이머 인터럽트 서비스 루틴을 이용한 패킷 송신 장치

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05173953A (ja) * 1991-12-26 1993-07-13 Oki Electric Ind Co Ltd バッファ管理方式
US5485460A (en) * 1994-08-19 1996-01-16 Microsoft Corporation System and method for running multiple incompatible network protocol stacks
JPH10320358A (ja) * 1997-03-18 1998-12-04 Toshiba Corp メモリ管理システム、メモリ管理システムのメモリ管理方法、及びメモリ管理システムのメモリ管理方法のプログラム情報を格納したコンピュータ読取り可能な記憶媒体
JPH11234331A (ja) * 1998-02-19 1999-08-27 Matsushita Electric Ind Co Ltd パケット並列処理装置
JP2001034582A (ja) * 1999-05-17 2001-02-09 Matsushita Electric Ind Co Ltd コマンドパケットによってプロセッサを選択する並列処理装置及びそのシステム
JP3619411B2 (ja) * 1999-12-03 2005-02-09 富士通株式会社 パケット中継装置
US7058082B1 (en) * 2000-09-06 2006-06-06 Cisco Technology, Inc. Communicating messages in a multiple communication protocol network
US7007190B1 (en) * 2000-09-06 2006-02-28 Cisco Technology, Inc. Data replication for redundant network components
US7076042B1 (en) * 2000-09-06 2006-07-11 Cisco Technology, Inc. Processing a subscriber call in a telecommunications network
US7185061B1 (en) * 2000-09-06 2007-02-27 Cisco Technology, Inc. Recording trace messages of processes of a network component
US8218555B2 (en) * 2001-04-24 2012-07-10 Nvidia Corporation Gigabit ethernet adapter
US7472205B2 (en) * 2002-04-24 2008-12-30 Nec Corporation Communication control apparatus which has descriptor cache controller that builds list of descriptors
JP3849578B2 (ja) * 2002-05-27 2006-11-22 日本電気株式会社 通信制御装置
US7814218B1 (en) * 2002-10-17 2010-10-12 Astute Networks, Inc. Multi-protocol and multi-format stateful processing
US7596621B1 (en) * 2002-10-17 2009-09-29 Astute Networks, Inc. System and method for managing shared state using multiple programmed processors
US7337314B2 (en) * 2003-04-12 2008-02-26 Cavium Networks, Inc. Apparatus and method for allocating resources within a security processor
US7363383B2 (en) * 2003-04-23 2008-04-22 Sun Microsytems, Inc. Running a communication protocol state machine through a packet classifier
JP4394590B2 (ja) * 2005-02-22 2010-01-06 株式会社日立コミュニケーションテクノロジー パケット中継装置および通信帯域制御方法
JP4652285B2 (ja) * 2006-06-12 2011-03-16 株式会社日立製作所 ゲートウェイ選択機能を備えたパケット転送装置
US9143585B2 (en) * 2006-07-07 2015-09-22 Wi-Lan Inc. Method and system for generic multiprotocol convergence over wireless air interface
US7849214B2 (en) * 2006-12-04 2010-12-07 Electronics And Telecommunications Research Institute Packet receiving hardware apparatus for TCP offload engine and receiving system and method using the same

Also Published As

Publication number Publication date
US20100293280A1 (en) 2010-11-18
JP5136564B2 (ja) 2013-02-06
WO2009096029A1 (ja) 2009-08-06

Similar Documents

Publication Publication Date Title
JP5136564B2 (ja) パケット処理装置およびパケット処理プログラム
US10459777B2 (en) Packet processing on a multi-core processor
US8005022B2 (en) Host operating system bypass for packets destined for a virtual machine
US7788411B2 (en) Method and system for automatically reflecting hardware resource allocation modifications
US7826359B2 (en) Method and system for load balancing using queued packet information
US7733890B1 (en) Network interface card resource mapping to virtual network interface cards
US20080002683A1 (en) Virtual switch
US20080059686A1 (en) Multiple context single logic virtual host channel adapter supporting multiple transport protocols
US9584637B2 (en) Guaranteed in-order packet delivery
US20050169309A1 (en) System and method for vertical perimeter protection
JP5477112B2 (ja) ネットワークシステムの試験方法
US8832332B2 (en) Packet processing apparatus
US9015438B2 (en) System and method for achieving enhanced performance with multiple networking central processing unit (CPU) cores
JP5673057B2 (ja) 輻輳制御プログラム、情報処理装置および輻輳制御方法
JP5251716B2 (ja) パケット中継装置
JP4415391B2 (ja) データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置
US9413654B2 (en) System, relay device, method, and medium
US11271897B2 (en) Electronic apparatus for providing fast packet forwarding with reference to additional network address translation table
JP2007325178A (ja) パケット処理システム、パケット処理方法、およびプログラム
KR101469244B1 (ko) 수신된 데이터에서의 불필요한 패킷 제거 장치 및 방법
WO2020184381A1 (ja) 処理装置、情報処理システム、情報処理方法、及びプログラム
US20110191403A1 (en) Distributed packet processing system for high-speed networks and distributed packet processing method using thereof
Vallath et al. Tuning the Cluster Interconnect

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120626

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120824

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121016

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121029

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151122

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees