(57)【要約】  パケットに対する処理を複数のＣＰＵが並列して実行する場合に、複数のＣＰＵの間における排他処理の頻度を低減して処理性能を向上すること。この課題を解決するために、処理振分部（１１１）は、同一のコネクションから受信されるパケットが同一の並列処理ＣＰＵによって処理されるようにパケットの処理を振り分ける。バッファ割当部（１１２）は、処理が振り分けられた並列処理ＣＰＵに対して、処理の実行に使用するバッファ領域を割り当てる。ＦＩＦＯ監視部（１１３）は、ＦＩＦＯ部（１２１−１〜１２１−ｎ）を監視し、解放可能なバッファ領域の有無を検知する。バッファ解放部（１１４）は、解放可能なバッファ領域がある場合に、該当するバッファ領域を解放する。並列処理ＣＰＵ（１２０−１〜１２０−ｎ）は、不要となった情報を格納するバッファ領域のバッファ位置情報をＦＩＦＯ部（１２１−１〜１２１−ｎ）に登録する。
2009096029.tif 000002
【特許請求の範囲】
【請求項１】
複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、
前記バッファのバッファ領域を使用しながらパケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、
処理対象パケットを前記複数の処理プロセッサのいずれか１つに振り分けるとともに、処理対象のパケットが振り分けられた処理プロセッサに対して前記バッファのバッファ領域を割り当てる振分プロセッサと
を有することを特徴とするパケット処理装置。
【請求項２】
前記振分プロセッサは、
処理対象パケットの伝送に利用されるコネクションに対応する処理プロセッサへ当該処理対象パケットを振り分けることを特徴とする請求項１記載のパケット処理装置。
【請求項３】
処理対象パケットの伝送に利用されるコネクションに、処理対象パケットの振り分け先の処理プロセッサおよび当該処理プロセッサが使用中のバッファ領域を対応付けて記憶するとともに、いずれの処理プロセッサにも使用されていない空きバッファ領域を記憶する記憶手段をさらに有し、
前記振分プロセッサは、
既存のコネクションに対応する処理プロセッサには当該処理プロセッサが使用中のバッファ領域を割り当てる一方、新規のコネクションに対応する処理プロセッサには空きバッファ領域を割り当てることを特徴とする請求項２記載のパケット処理装置。
【請求項４】
前記記憶手段は、
処理対象パケットの伝送に利用されるコネクションに、当該コネクションに関連する関連コネクションに対応する処理プロセッサが使用中の関連バッファ領域をさらに対応付けて記憶し、
前記振分プロセッサは、
処理対象パケットの伝送に利用されるコネクションが関連コネクションを有する場合に、処理対象パケットを関連コネクションに対応する処理プロセッサに振り分けるとともに、当該処理プロセッサに関連バッファ領域を割り当てることを特徴とする請求項３記載のパケット処理装置。
【請求項５】
前記複数の処理プロセッサは、
使用を終了したバッファ領域の位置を示すバッファ位置情報を格納するキューをそれぞれ備えることを特徴とする請求項１記載のパケット処理装置。
【請求項６】
前記振分プロセッサは、
前記複数の処理プロセッサに備えられたキューを監視する監視手段と、
前記監視手段による監視の結果、キューにバッファ位置情報が格納されている場合に、当該バッファ位置情報をキューから読み出してバッファ位置情報が示すバッファ領域を解放する解放手段と
を含むことを特徴とする請求項５記載のパケット処理装置。
【請求項７】
前記キューは、
前記複数の処理プロセッサがそれぞれバッファ位置情報を格納する位置を示すライトポインタと、
前記振分プロセッサがバッファ位置情報を読み出す位置を示すリードポインタと
を備えることを特徴とする請求項５記載のパケット処理装置。
【請求項８】
複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、パケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、処理対象パケットを前記複数の処理プロセッサのいずれか１つに振り分ける振分プロセッサとを有するコンピュータによって実行されるパケット処理プログラムであって、前記コンピュータに、
処理対象パケットが振り分けられた処理プロセッサに対して、前記振分プロセッサが前記バッファのバッファ領域を割り当てる割当ステップと、
処理対象パケットが振り分けられた処理プロセッサが前記割当ステップにて割り当てられたバッファ領域を使用しながら処理対象パケットに対して処理を実行する処理ステップと
を実行させることを特徴とするパケット処理プログラム。
【請求項９】
複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、パケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、処理対象パケットを前記複数の処理プロセッサのいずれか１つに振り分ける振分プロセッサとを有するパケット処理装置におけるパケット処理方法であって、
処理対象パケットが振り分けられた処理プロセッサに対して、前記振分プロセッサが前記バッファのバッファ領域を割り当てる割当ステップと、
処理対象パケットが振り分けられた処理プロセッサが前記割当ステップにて割り当てられたバッファ領域を使用しながら処理対象パケットに対して処理を実行する処理ステップと
を有することを特徴とするパケット処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット処理装置およびパケット処理プログラムに関し、特に、パケットに対する処理を複数のＣＰＵが並列して実行する場合に、複数のＣＰＵの間における排他処理の頻度を低減して処理性能を向上することができるパケット処理装置およびパケット処理プログラムに関する。
【背景技術】
【０００２】
通常、コンピュータネットワークにおいては、サーバとクライアントの間にスイッチやルータなどの中継装置が設けられ、パケットの中継処理が行われる。従来の中継装置は、ＯＳＩ（Open  Systems  Interconnection）参照モデルにおけるレイヤ２（データリンク層）およびレイヤ３（ネットワーク層）の処理を実施するのみであったが、近年は、より高位レイヤの処理が中継装置によって実施されることがある。具体的には、サーバに対する負荷を分散させる負荷分散処理、外部からの攻撃に対するファイアウォールなどの処理、またはクライアントとサーバの間の通信を秘匿するＩＰｓｅｃ（Security  Architecture  for  Internet  Protocol）やＳＳＬ−ＶＰＮ（Secure  Socket  Layer-Virtual  Private  Network）などのＶＰＮ処理のような高位レイヤ処理を行う中継装置が登場している。さらに、中継装置によって高位レイヤの解析も実施可能であることから、高位レイヤの情報を基にしたＱｏＳ（Quality  of  Service）処理などが実施されることもある。【０００３】
また、一般にネットワークサーバと呼ばれ、高位レイヤ処理とレイヤ２およびレイヤ３の処理との双方の処理を実施する装置も登場し、コンピュータネットワークに配置されるようになっている。このようなネットワークサーバには、多機能であることに起因してネットワーク内の負荷が集中することがあり、基本的な性能についても高度なものが求められている。このため、ネットワークサーバにおける中継処理に関しては、それほど複雑な処理を含まないため、ハードウェア化による高速化が図られることがある。一方、ネットワークサーバにおける高位レイヤ処理に関しては、複雑な処理を含むことや新規サービスに対応する柔軟な機能拡張が必要とされることなどの要因から、単純なハードウェア化による高速化は困難となっている。したがって、ネットワークサーバにおける高位レイヤ処理を高速化するためには、ソフトウェア処理の高速化、換言すればＣＰＵ（Central  Processing  Unit）の処理性能の向上が不可欠となる。【０００４】
近年では、ＣＰＵ単体の処理性能がほぼ限界に近づいているため、複数のＣＰＵやＣＰＵコア（以下、これらをまとめて「ＣＰＵ」という）を単一の装置に搭載することでソフトウェア処理の高速化が図られることがある。このとき、単に複数のＣＰＵそれぞれに同一の処理をさせるのではソフトウェア処理の高速化が図られないため、処理対象の複数のパケットがネットワークサーバに到着すると、各パケットは複数のＣＰＵに振り分けられ、それぞれのＣＰＵによって並列に処理が実行される。ところが、従来の多くのソフトウェアは、処理の流れが単一であることを前提に実装されているため、複数のＣＰＵによって並列に処理が実行されると、誤動作が発生する虞がある。この誤動作の主原因は、ソフトウェアが使用するメモリに対する複数のＣＰＵからのアクセスが発生するため、１つのＣＰＵが利用するメモリ内の情報が他のＣＰＵによって書き換えられ、内部不整合が発生することである。【０００５】
そこで、例えば図１に示すように、メモリ２０の記憶領域中にＣＰＵ１０−１〜１０−ｎ（ｎは２以上の整数）に対応するｎ個の領域を確保し、各ＣＰＵ１０−１〜１０−ｎが利用する情報をそれぞれのＣＰＵに対応する領域に別々に記憶しておくことが考えられる。こうすることにより、メモリ２０内の各領域に対しては、ＣＰＵ１０−１〜１０−ｎのいずれか１つのみがアクセスすることになり、内部不整合の発生を防止することができる。しかし、このようなメモリ構成とした場合、ＣＰＵ１０−１〜１０−ｎが共通して利用する情報（以下「共有情報」という）については、同一の情報をｎ個用意してメモリ２０内の各領域に記憶させる必要が生じ、メモリ２０に必要とされる容量が増大してしまう。【０００６】
したがって、共有情報に対して１つのＣＰＵがアクセスしている間は、同一の情報に対する他のＣＰＵによるアクセスを禁ずる排他処理が必要となる。具体的には、例えば図２に示すように、メモリ２０に記憶された共有情報にロック変数を付加しておき、例えばＣＰＵ１０−１が共有情報にアクセス中は、ロック変数によって共有情報がロックされ、他のＣＰＵ１０−２〜１０−ｎによる共有情報へのアクセスが禁じられる。そして、ＣＰＵ１０−１による共有情報へのアクセスが終了すると、ロック変数による共有情報のロックが解除され、他のＣＰＵ１０−２〜１０−ｎによる共有情報へのアクセスが許可されるようになる。こうすることにより、共有情報に対して複数のＣＰＵが同時にアクセスし、内部不整合が発生することを防止することができる。【０００７】
また、例えば特許文献１には、メモリなどの共有資源を管理する共有資源管理情報によって、複数のプロセッサが同時に同一の共有資源を使用することを防止することが記載されている。この特許文献１に記載された技術によっても、共通資源に記憶された共有情報に対する排他処理を実現することができる。【０００８】
【特許文献１】特開平６−１９８５８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述した排他処理を行う場合には、１つのＣＰＵが共有情報にアクセスしている間は、他のＣＰＵが共有情報にアクセスすることができず、他のＣＰＵの処理が停止してしまうことがある。この結果、複数のＣＰＵが並列に処理を実行するにも拘らず、装置の性能向上に一定の限界があるという問題がある。具体的には、ＣＰＵの数を２倍にすれば理論的には処理性能が２倍になると考えられるが、実際にはＣＰＵ間の排他処理が発生するため、処理性能が２倍に到達することはない。極端な場合には、ＣＰＵの数を２倍にする前と比べて処理性能が低下することもある。したがって、処理性能を向上するためには、排他処理の頻度を低減することが非常に重要となる。【００１０】
特にネットワークサーバでは、中継されるパケットの情報（以下「パケット情報」という）やパケットが伝送されるコネクションの情報（以下「コネクション情報」という）などは、すべてのＣＰＵによって利用される共有情報として共通のバッファに格納されるため、排他処理が頻繁に発生するとネットワークサーバの性能向上が困難であり、排他処理の頻度を低減することが強く望まれている。【００１１】
排他処理を回避するためには、共有情報のそれぞれにアクセスする必要があるＣＰＵが１つとなるように、複数のＣＰＵそれぞれに対して処理を振り分ければ良い。すなわち、例えばネットワークサーバにおいては、バッファに格納されたパケットについて、１つのパケットに対しては１つのＣＰＵによってのみ処理が実行されるように処理が振り分けられていれば、それぞれのパケット情報に対するアクセスが競合することがなく、排他処理を回避することができる。【００１２】
ただし、このように複数のＣＰＵに対する処理の振り分けを行っても、これらの複数のＣＰＵがパケットに対する処理の実行のために使用するバッファの獲得および解放については、依然として排他処理が必要となる。すなわち、各ＣＰＵは、パケットに対する処理の際に例えばコネクション情報などを参照するが、必要なコネクション情報を格納するバッファを獲得・解放するためには、バッファを管理する情報にアクセスする必要がある。つまり、バッファを管理する情報に対しては、必ず複数のＣＰＵがアクセスすることになるため、各ＣＰＵ間での排他処理が必要となる。【００１３】
本発明はかかる点に鑑みてなされたものであり、パケットに対する処理を複数のＣＰＵが並列して実行する場合に、複数のＣＰＵの間における排他処理の頻度を低減して処理性能を向上することができるパケット処理装置およびパケット処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記課題を解決するために、本発明に係るパケット処理装置は、複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、前記バッファのバッファ領域を使用しながらパケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、処理対象パケットを前記複数の処理プロセッサのいずれか１つに振り分けるとともに、処理対象のパケットが振り分けられた処理プロセッサに対して前記バッファのバッファ領域を割り当てる振分プロセッサとを有する構成を採る。【００１５】
この構成によれば、振分プロセッサが複数の処理プロセッサに対して処理対象パケットを振り分けるとともに、処理に必要なバッファ領域を割り当てるため、並列に処理を実行する複数の処理プロセッサがそれぞれバッファ領域取得のためにバッファへアクセスする必要がなく、複数の処理プロセッサの間における排他処理が不要となる。換言すれば、パケットに対する処理を複数のＣＰＵが並列して実行する場合に、複数のＣＰＵの間における排他処理の頻度を低減して処理性能を向上することができる。【００１６】
また、本発明に係るパケット処理装置は、上記構成において、前記振分プロセッサは、処理対象パケットの伝送に利用されるコネクションに対応する処理プロセッサへ当該処理対象パケットを振り分ける構成を採る。【００１７】
この構成によれば、複数の処理プロセッサのそれぞれが１つのコネクションに対応し、パケットの伝送に利用されたコネクションに応じて処理プロセッサへの振り分けを行うため、各処理プロセッサがパケットに対して処理を実行する際、それぞれのコネクションの情報に対するアクセスの競合が発生することがなく、複数の処理プロセッサの間における排他処理を確実に低減することができる。【００１８】
また、本発明に係るパケット処理装置は、上記構成において、処理対象パケットの伝送に利用されるコネクションに、処理対象パケットの振り分け先の処理プロセッサおよび当該処理プロセッサが使用中のバッファ領域を対応付けて記憶するとともに、いずれの処理プロセッサにも使用されていない空きバッファ領域を記憶する記憶手段をさらに有し、前記振分プロセッサは、既存のコネクションに対応する処理プロセッサには当該処理プロセッサが使用中のバッファ領域を割り当てる一方、新規のコネクションに対応する処理プロセッサには空きバッファ領域を割り当てる構成を採る。【００１９】
この構成によれば、パケットの伝送に利用されるコネクションとパケットの処理に使用されるバッファ領域との対応関係を記憶し、同一のコネクションによって伝送されたパケットには、同一のバッファ領域を割り当てるため、各バッファ領域に格納された情報を複数の処理プロセッサが共有する必要がなく、複数の処理プロセッサの間における排他処理を確実に低減することができる。【００２０】
また、本発明に係るパケット処理装置は、上記構成において、前記記憶手段は、処理対象パケットの伝送に利用されるコネクションに、当該コネクションに関連する関連コネクションに対応する処理プロセッサが使用中の関連バッファ領域をさらに対応付けて記憶し、前記振分プロセッサは、処理対象パケットの伝送に利用されるコネクションが関連コネクションを有する場合に、処理対象パケットを関連コネクションに対応する処理プロセッサに振り分けるとともに、当該処理プロセッサに関連バッファ領域を割り当てる構成を採る。【００２１】
この構成によれば、複数のコネクションが互いに関連する場合には、それぞれのコネクションによって伝送されるパケットを同一の処理プロセッサに振り分けるとともに、この処理プロセッサに関連バッファ領域を割り当てるため、例えば制御コネクションとデータコネクションの２つのコネクションを利用するプロトコルでパケットが伝送される場合でも、互いに関連するコネクションの情報を格納するバッファ領域に対しては、１つの処理プロセッサがアクセスすることになり、複数の処理プロセッサによるアクセス競合の発生を防止することができる。【００２２】
また、本発明に係るパケット処理装置は、上記構成において、前記複数の処理プロセッサは、使用を終了したバッファ領域の位置を示すバッファ位置情報を格納するキューをそれぞれ備える構成を採る。【００２３】
この構成によれば、使用を終了したバッファ領域のバッファ位置情報をそれぞれの処理プロセッサのキューが格納するため、各処理プロセッサは、解放可能なバッファ領域を他のプロセッサに対して容易に通知することができる。【００２４】
また、本発明に係るパケット処理装置は、上記構成において、前記振分プロセッサは、前記複数の処理プロセッサに備えられたキューを監視する監視手段と、前記監視手段による監視の結果、キューにバッファ位置情報が格納されている場合に、当該バッファ位置情報をキューから読み出してバッファ位置情報が示すバッファ領域を解放する解放手段とを含む構成を採る。【００２５】
この構成によれば、振分プロセッサがキューを監視して、バッファ位置情報が示すバッファ領域を解放するため、振分プロセッサのみがバッファ領域の解放を実行することになり、バッファ領域の解放時における複数の処理プロセッサのバッファへのアクセス競合を防止することができる。【００２６】
また、本発明に係るパケット処理装置は、上記構成において、前記キューは、前記複数の処理プロセッサがそれぞれバッファ位置情報を格納する位置を示すライトポインタと、前記振分プロセッサがバッファ位置情報を読み出す位置を示すリードポインタとを備える構成を採る。【００２７】
この構成によれば、処理プロセッサが参照するライトポインタと、振分プロセッサが参照するリードポインタとを備えるため、バッファ位置情報を格納するキューに対するアクセスの際に、処理プロセッサはライトポインタのみにアクセスし、振分プロセッサはリードポインタのみにアクセスすることになり、キューにおけるアクセス競合を防止することができる。【００２８】
また、本発明に係るパケット処理プログラムは、複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、パケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、処理対象パケットを前記複数の処理プロセッサのいずれか１つに振り分ける振分プロセッサとを有するコンピュータによって実行されるパケット処理プログラムであって、前記コンピュータに、処理対象パケットが振り分けられた処理プロセッサに対して、前記振分プロセッサが前記バッファのバッファ領域を割り当てる割当ステップと、処理対象パケットが振り分けられた処理プロセッサが前記割当ステップにて割り当てられたバッファ領域を使用しながら処理対象パケットに対して処理を実行する処理ステップとを実行させるようにした。【００２９】
また、本発明に係るパケット処理方法は、複数のバッファ領域を備え、パケットに対する処理に必要な情報を一時的に各バッファ領域に格納するバッファと、パケットに対してそれぞれ同時に処理を実行する複数の処理プロセッサと、処理対象パケットを前記複数の処理プロセッサのいずれか１つに振り分ける振分プロセッサとを有するパケット処理装置におけるパケット処理方法であって、処理対象パケットが振り分けられた処理プロセッサに対して、前記振分プロセッサが前記バッファのバッファ領域を割り当てる割当ステップと、処理対象パケットが振り分けられた処理プロセッサが前記割当ステップにて割り当てられたバッファ領域を使用しながら処理対象パケットに対して処理を実行する処理ステップとを有するようにした。【００３０】
これらによれば、振分プロセッサが複数の処理プロセッサに対して処理対象パケットを振り分けるとともに、処理に必要なバッファ領域を割り当てるため、並列に処理を実行する複数の処理プロセッサがそれぞれバッファ領域取得のためにバッファへアクセスする必要がなく、複数の処理プロセッサの間における排他処理が不要となる。換言すれば、パケットに対する処理を複数のＣＰＵが並列して実行する場合に、複数のＣＰＵの間における排他処理の頻度を低減して処理性能を向上することができる。
【発明の効果】
【００３１】
本明細書に開示されたパケット処理装置およびパケット処理プログラムによれば、パケットに対する処理を複数のＣＰＵが並列して実行する場合に、複数のＣＰＵの間における排他処理の頻度を低減して処理性能を向上することができる。
【図面の簡単な説明】
【００３２】
【図１】図１は、並列処理時の内部不整合を防止する方法の一例を示す図である。
【図２】図２は、並列処理時の内部不整合を防止する方法の他の一例を示す図である。
【図３】図３は、一実施の形態に係るパケット処理装置の概要構成を示すブロック図である。
【図４】図４は、一実施の形態係るＣＰＵ部の内部構成を示すブロック図である。
【図５】図５は、一実施の形態に係るメモリの内部構成を示すブロック図である。
【図６】図６は、一実施の形態に係るＦＩＦＯ部の具体的構成例を示す図である。
【図７】図７は、一実施の形態に係るコネクション情報テーブルの一例を示す図である。
【図８】図８は、一実施の形態に係るパケット処理装置の動作を示すフロー図である。
【図９】図９は、一実施の形態に係るバッファ解放時の並列処理ＣＰＵの動作を示すフロー図である。
【図１０】図１０は、一実施の形態に係るバッファ解放時の振分ＣＰＵの動作を示すフロー図である。
【図１１】図１１は、他の実施の形態に係るコネクション情報テーブルの一例を示すブロック図である。
【符号の説明】
【００３３】
１００  ＣＰＵ部
１１０  振分ＣＰＵ
１１１  処理振分部
１１２  バッファ割当部
１１３  ＦＩＦＯ監視部
１１４  バッファ解放部
１２０−１〜１２０−ｎ  並列処理ＣＰＵ
１２１  ＦＩＦＯ部
１２１ａ  ＦＩＦＯ
１２１ｂ  ライトポインタ
１２１ｃ  リードポインタ
２００  メモリ
２１０  パケット情報格納バッファ
２２０  コネクションバッファ
２３０  その他バッファ
２４０  空きバッファ記憶部
２５０  コネクション情報テーブル
【発明を実施するための最良の形態】
【００３４】
本発明の骨子は、パケットに対する処理を複数のＣＰＵへ振り分けるプロセッサが、処理の振り分け以外にも処理の実行に必要なバッファ領域の割り当ておよび解放を一括して実行することである。以下、本発明の一実施の形態について、図面を参照して詳細に説明する。【００３５】
図３は、本発明の一実施の形態に係るパケット処理装置の概要構成を示すブロック図である。同図に示すパケット処理装置は、例えばネットワークサーバなどの中継装置に搭載されているものとする。なお、このパケット処理装置は、サーバやクライアントなどの端末装置に搭載されていても良い。図３に示すパケット処理装置は、ＣＰＵ部１００、メモリ２００、メモリ制御部３００、ＭＡＣ（Media  Access  Control）部４００−１〜４００−ｍ（ｍは１以上の整数）、ＰＨＹ（PHYsical）部５００−１〜５００−ｍ、および内部バス６００を有している。【００３６】
ＣＰＵ部１００は、複数のＣＰＵを備え、各ＣＰＵがメモリ２００に格納された情報を用いた処理を実行する。このとき、ＣＰＵ部１００内の各ＣＰＵは、それぞれが異なる処理を並列に実行する。また、ＣＰＵ部１００は、並列に処理を実行する複数のＣＰＵへ処理を振り分けるＣＰＵを備え、このＣＰＵが処理に必要なバッファ領域の割り当ておよび解放を実行する。【００３７】
メモリ２００は、ＣＰＵ部１００内の各ＣＰＵが処理に用いる情報を格納するバッファを備えている。具体的には、メモリ２００は、外部から入力されたパケットに含まれる情報（パケット情報）やパケットの伝送に用いられるコネクションの情報（コネクション情報）などを格納するためのバッファをそれぞれ備えている。また、メモリ２００は、それぞれのバッファの空き状態を記憶している。【００３８】
メモリ制御部３００は、ＣＰＵ部１００がメモリ２００に格納された情報を用いて処理を実行する際に、ＣＰＵ部１００とメモリ２００の間の情報のやり取りを制御する。すなわち、メモリ制御部３００は、ＣＰＵ部１００による処理が実行される際に、内部バス６００を介してメモリ２００から必要な情報を取得し、ＣＰＵ部１００へ提供する。【００３９】
ＭＡＣ部４００−１〜４００−ｍは、パケットの送受信方法や誤り検出方法などを設定するレイヤ２の一部に属する処理を実行する。同様に、ＰＨＹ部５００−１〜５００−ｍは、それぞれ外部のインタフェース１〜ｍに接続し、レイヤ１（物理層）に属する処理を実行する。これらのＭＡＣ部４００−１〜４００−ｍとＰＨＹ部５００−１〜５００−ｍとは、対応する２つの処理部の組み合わせ（例えばＭＡＣ部４００−１とＰＨＹ部５００−１の組み合わせ）ごとに例えばネットワークカード上に一体的に形成されている。そして、ＭＡＣ部４００−１〜４００−ｍおよびＰＨＹ部５００−１〜５００−ｍを介して各インタフェース１〜ｎからパケット処理装置内部へパケットが入力されたり、パケット処理装置内部から各インタフェース１〜ｍへパケットが出力されたりする。【００４０】
内部バス６００は、パケット処理装置内の各処理部を接続し、情報を伝達する。具体的には、内部バス６００は、例えば各インタフェース１〜ｍから入力されたパケットのパケット情報をＭＡＣ部４００−１〜４００−ｍからメモリ２００へ伝達したり、このパケット情報をメモリ２００からメモリ制御部３００へ伝達したりする。【００４１】
図４および図５は、それぞれ本実施の形態に係るＣＰＵ部１００およびメモリ２００の内部構成を示すブロック図である。図４に示すＣＰＵ部１００は、振分ＣＰＵ１１０および並列処理ＣＰＵ１２０−１〜１２０−ｎ（ｎは２以上の整数）を有している。また、図５に示すメモリ２００は、パケット情報格納バッファ２１０、コネクションバッファ２２０、その他バッファ２３０、空きバッファ記憶部２４０、およびコネクション情報テーブル２５０を有している。【００４２】
図４において、振分ＣＰＵ１１０は、メモリ２００に記憶されたコネクション情報テーブル２５０を参照し、同一のコネクションから受信されるパケットが同一の並列処理ＣＰＵによって処理されるように、パケットを並列処理ＣＰＵ１２０−１〜１２０−ｎに振り分ける。また、振分ＣＰＵ１１０は、並列処理ＣＰＵ１２０−１〜１２０−ｎがパケットに対する処理を実行する際に使用するバッファ領域の割り当ておよび解放を実行する。具体的には、振分ＣＰＵ１１０は、処理振分部１１１、バッファ割当部１１２、ＦＩＦＯ（First  In  First  Out）監視部１１３、およびバッファ解放部１１４を有している。【００４３】
処理振分部１１１は、パケット処理装置にパケットが入力されると、メモリ２００の空きバッファ記憶部２４０を参照してパケット情報格納バッファ２１０の空きバッファ領域を獲得し、この空きバッファ領域に入力パケットのパケット情報を格納する。そして、処理振分部１１１は、コネクション情報テーブル２５０を参照し、パケットの処理を実行する並列処理ＣＰＵを決定する。すなわち、例えばあるＴＣＰ（Transmission  Control  Protocol）コネクションから受信されたパケットが以前に並列処理ＣＰＵ１２０−１によって処理され、その旨がコネクション情報テーブル２５０に記憶されていれば、処理振分部１１１は、同一のＴＣＰコネクションから受信されるパケットは、すべて並列処理ＣＰＵ１２０−１によって処理されるようにパケットの処理を振り分ける。【００４４】
バッファ割当部１１２は、メモリ２００の空きバッファ記憶部２４０またはコネクション情報テーブル２５０を参照し、処理が振り分けられた並列処理ＣＰＵに対して、処理の実行に使用するコネクションバッファ２２０およびその他バッファ２３０のバッファ領域を割り当てる。すなわち、バッファ割当部１１２は、振分先の並列処理ＣＰＵが新規に確立されたコネクションによって伝送されたパケットを処理する場合は、空きバッファ記憶部２４０を参照して空きバッファ領域を獲得し、この空きバッファ領域を振分先の並列処理ＣＰＵに割り当てる。一方、バッファ割当部１１２は、振分先の並列処理ＣＰＵが既存のコネクションによって伝送されたパケットを処理する場合は、コネクション情報テーブル２５０を参照して既存のコネクションに対応する使用中のバッファ領域を振分先の並列処理ＣＰＵに割り当てる。【００４５】
これらの処理振分部１１１およびバッファ割当部１１２による処理の結果、入力パケットに対する処理が並列処理ＣＰＵ１２０−１〜１２０−ｎのいずれかに振り分けられるとともに、パケットに対する処理時に参照・使用されるパケット情報格納バッファ２１０、コネクションバッファ２２０、およびその他バッファ２３０が振分先の並列処理ＣＰＵに割り当てられる。【００４６】
ＦＩＦＯ監視部１１３は、並列処理ＣＰＵ１２０−１〜１２０−ｎのそれぞれに備えられたＦＩＦＯを監視し、各並列処理ＣＰＵが使用を終了したバッファ領域の有無を検知する。すなわち、並列処理ＣＰＵ１２０−１〜１２０−ｎは処理を完了した際に後述するＦＩＦＯ部１２１−１〜１２１−ｎに解放可能なバッファ領域の位置を示すバッファ位置情報を格納するが、ＦＩＦＯ監視部１１３は、ＦＩＦＯ部１２１−１〜１２１−ｎを常時監視し、解放可能なバッファ領域があるか否かを確認する。【００４７】
バッファ解放部１１４は、ＦＩＦＯ監視部１１３によるＦＩＦＯ部１２１−１〜１２１−ｎの監視の結果、パケット情報格納バッファ２１０、コネクションバッファ２２０、またはその他バッファ２３０に解放可能なバッファ領域がある場合に、該当するバッファ領域を解放し、このバッファ領域を空きバッファ領域として空きバッファ記憶部２４０に登録する。【００４８】
並列処理ＣＰＵ１２０−１〜１２０−ｎは、振分ＣＰＵ１１０によってパケットに対する処理が振り分けられるとともに、処理に使用するバッファ領域が割り当てられると、このパケットのパケット情報をメモリ２００のパケット情報格納バッファ２１０から取得し、所定の処理を実行する。このとき、並列処理ＣＰＵ１２０−１〜１２０−ｎは、振分ＣＰＵ１１０によって割り当てられたコネクションバッファ２２０およびその他バッファ２３０のバッファ領域に格納されたコネクション情報などを利用して処理を実行する。【００４９】
また、並列処理ＣＰＵ１２０−１〜１２０−ｎは、それぞれＦＩＦＯ部１２１−１〜１２１−ｎを備えており、パケットに対する処理が完了すると、このパケットのパケット情報を格納するパケット情報格納バッファ２１０のバッファ領域のバッファ位置情報をＦＩＦＯ部１２１−１〜１２１−ｎに登録する。同様に、並列処理ＣＰＵ１２０−１〜１２０−ｎは、パケットに対する処理の完了により、このパケットを伝送するコネクションが切断される場合に、このコネクションのコネクション情報を格納するコネクションバッファ２２０のバッファ領域のバッファ位置情報をＦＩＦＯ部１２１−１〜１２１−ｎに登録する。そして、並列処理ＣＰＵ１２０−１〜１２０−ｎは、その他バッファ２３０についても同様に、パケットの処理完了に伴って不要となるバッファ領域のバッファ位置情報をＦＩＦＯ部１２１−１〜１２１−ｎに登録する。【００５０】
ここで、ＦＩＦＯ部１２１−１は、例えば図６に示すような構成を有している。すなわち、ＦＩＦＯ部１２１−１は、パケット情報格納バッファ２１０、コネクションバッファ２２０、およびその他バッファ２３０にそれぞれ対応するＦＩＦＯ１２１ａを有し、それぞれのＦＩＦＯ１２１ａには、書き込みの先頭位置を示すライトポインタ１２１ｂと読み出しの先頭位置を示すリードポインタ１２１ｃとが付加されている。この構成は、ＦＩＦＯ部１２１−２〜１２１−ｎにも共通している。【００５１】
ＦＩＦＯ１２１ａは、それぞれ対応するバッファ領域の複数のバッファ位置情報を格納可能になっており、末尾にバッファ位置情報が格納された後には先頭に次のバッファ位置情報が格納される循環バッファ構造となっている。例えば図６においては、左端がＦＩＦＯ１２１ａの先頭であり右端がＦＩＦＯ１２１ａの末尾であるが、バッファ位置情報は、左端から右端へ順次格納されていき、右端にバッファ位置情報が格納されると、次のバッファ位置情報は空きとなった左端に格納される。また、バッファ位置情報の読み出しも同様に、末尾のバッファ位置情報が読み出された後は、先頭のバッファ位置情報が読み出されることになる。【００５２】
ライトポインタ１２１ｂは、並列処理ＣＰＵ１２０−１がパケットに対する処理を完了した場合やコネクションの切断を検知した場合など不要なバッファ領域がある場合に、並列処理ＣＰＵ１２０−１が不要となったバッファ領域のバッファ位置情報を書き込むべき位置を示している。したがって、並列処理ＣＰＵ１２０−１は、解放可能となったバッファ領域がある場合には、ライトポインタ１２１ｂおよびリードポインタ１２１ｃの位置関係からＦＩＦＯ１２１ａに空きがあることを確認し、解放可能なバッファ領域のバッファ位置情報をライトポインタ１２１ｂが示す位置に格納し、ライトポインタ１２１ｂをインクリメントする。すなわち、並列処理ＣＰＵ１２０−１は、図６において、ライトポインタ１２１ｂが示す位置を１単位分だけ右方向へ移動させる。【００５３】
リードポインタ１２１ｃは、振分ＣＰＵ１１０のＦＩＦＯ監視部１１３が監視すべき位置を示している。つまり、ＦＩＦＯ監視部１１３は、ＦＩＦＯ１２１ａのリードポインタ１２１ｃが示す位置を監視し、ＦＩＦＯ１２１ａにバッファ位置情報が格納されているか否かを確認する。具体的には、ＦＩＦＯ監視部１１３は、ライトポインタ１２１ｂとリードポインタ１２１ｃが一致しているか否かを判断し、両者が一致していなければＦＩＦＯ１２１ａにバッファ格納位置情報が格納されていると判断する。そして、ＦＩＦＯ監視部１１３は、ＦＩＦＯ１２１ａにバッファ位置情報が格納されている場合に、１つのバッファ位置情報を読み出し、リードポインタ１２１ｃをインクリメントする。すなわち、ＦＩＦＯ監視部１１３は、図６において、リードポインタ１２１ｃが示す位置を１単位分だけ右方向へ移動させる。【００５４】
このように構成されるＦＩＦＯ部１２１−１〜１２１−ｎは、それぞれ対応する並列処理ＣＰＵ１２０−１〜１２０−ｎまたは振分ＣＰＵ１１０によってのみアクセスされるため、並列処理ＣＰＵ１２０−１〜１２０−ｎ間でのアクセスの競合は発生しない。また、個々の並列処理ＣＰＵ１２０−１〜１２０−ｎと振分ＣＰＵ１１０とは、ＦＩＦＯ部１２１−１〜１２１−ｎにアクセスするが、並列処理ＣＰＵ１２０−１〜１２０−ｎは、ライトポインタ１２１ｂのみを書き換え、振分ＣＰＵ１１０は、リードポインタ１２１ｃのみを書き換える。したがって、２つのＣＰＵによる書き換えのアクセスは、異なるポインタに対してのみ生じるため、ライトポインタ１２１ｂおよびリードポインタ１２１ｃが示す位置に不整合が生じることはない。結果として、並列処理ＣＰＵ１２０−１〜１２０−ｎの間での排他処理や並列処理ＣＰＵ１２０−１〜１２０−ｎと振分ＣＰＵ１１０の間での排他処理は不要となる。【００５５】
一方、図５において、パケット情報格納バッファ２１０は、複数のバッファ領域を含んでおり、各インタフェース１〜ｎからパケット処理装置に入力されたパケットのパケット情報を各バッファ領域に格納する。すなわち、パケット情報格納バッファ２１０は、ＭＡＣ部およびＰＨＹ部を備えたネットワークカードを介して入力されたパケットのパケット情報を内部バス６００を経由して取得し、パケットごとのパケット情報を格納する。【００５６】
コネクションバッファ２２０は、複数のバッファ領域を含んでおり、パケットが伝送されるコネクションのコネクション情報を各バッファ領域に格納する。コネクションバッファ２２０が各バッファ領域に格納するコネクション情報は、並列処理ＣＰＵ１２０−１〜１２０−ｎがパケットに対する処理を実行する際に格納・参照される。【００５７】
その他バッファ２３０は、複数のバッファ領域を含んでおり、並列処理ＣＰＵ１２０−１〜１２０−ｎがパケットに対する処理を実行する際に必要な情報を各バッファ領域に格納する。その他バッファ２３０が各バッファ領域に格納する情報は、例えば並列処理ＣＰＵ１２０−１〜１２０−ｎによる高位レイヤ処理などに関する情報である。【００５８】
空きバッファ記憶部２４０は、パケット情報格納バッファ２１０、コネクションバッファ２２０、およびその他バッファ２３０のバッファ領域ごとの空き状態を記憶する。具体的には、空きバッファ記憶部２４０は、処理振分部１１１によってパケット情報がパケット情報格納バッファ２１０のバッファ領域に格納されると、このバッファ領域が空きではないことを記憶し、バッファ割当部１１２によってコネクションバッファ２２０およびその他バッファ２３０のバッファ領域が並列処理ＣＰＵ１２０−１〜１２０−ｎに割り当てられると、このバッファ領域が空きではないことを記憶する。また、空きバッファ記憶部２４０は、バッファ解放部１１４によってバッファ領域が解放されると、このバッファ領域が空きであることを記憶する。【００５９】
このように、空きバッファ記憶部２４０は、メモリ２００内のすべてのバッファの空き状態を記憶するため、振分ＣＰＵ１１０がパケット情報を格納したり並列処理ＣＰＵ１２０−１〜１２０−ｎにバッファ領域を割り当てたりする際、振分ＣＰＵ１１０は、容易に空きバッファ領域を把握することができる。また、空きバッファ記憶部２４０に対しては、振分ＣＰＵ１１０のみがアクセスするため、排他処理が必要となることもない。【００６０】
コネクション情報テーブル２５０は、パケット処理装置に入力されたパケットが伝送されるコネクションに対応する処理の振り分け先の並列処理ＣＰＵ１２０−１〜１２０−ｎおよび処理に使用されるバッファ領域を記憶している。具体的には、コネクション情報テーブル２５０は、例えば図７に示すように、コネクションに応じたＩＰアドレスおよびポートに対応付けて、振り分け先の並列処理ＣＰＵ１２０−１〜１２０−ｎ、振り分け先の並列処理ＣＰＵが使用中のコネクションバッファ２２０のバッファ領域（コネクションバッファポインタ）、および振り分け先の並列処理ＣＰＵが使用中のその他バッファ２３０のバッファ領域（その他バッファポインタ）を記憶する。図７に示した例では、例えばＩＰアドレスが「ＩＰａ」でポートが「Ｐａ」のパケットは、並列処理ＣＰＵ１２０−１へ振り分けられ、このパケットの処理は、コネクションバッファ２２０のバッファ領域「Ｃｂ＃１」およびその他バッファ２３０のバッファ領域「Ｏｂ＃１」が使用されることになる。【００６１】
ここで、コネクション情報テーブル２５０におけるＩＰアドレスおよびポートと振分先ＣＰＵ、コネクションバッファポインタ、およびその他バッファポインタとの対応関係は、新たなコネクションが確立されるたびに振分ＣＰＵ１１０によって決定され登録される。そして、既存のコネクションによって伝送されるパケットが入力された場合には、振分ＣＰＵ１１０の処理振分部１１１によってコネクション情報テーブル２５０が参照されることにより、同一のコネクションから以前に入力されたパケットの振り分け先となっている並列処理ＣＰＵ１２０−１〜１２０−ｎへパケットが振り分けられることになる。したがって、同一のコネクションから入力されるパケットは、すべて同一の並列処理ＣＰＵ１２０−１〜１２０−ｎによって処理が施されることになる。これにより、コネクションバッファ２２０およびその他バッファ２３０のバッファ領域に対しては、並列処理ＣＰＵ１２０−１〜１２０−ｎのいずれか１つのみがアクセスすることになり、排他処理が不要となる。【００６２】
次いで、上記のように構成されたパケット処理装置のパケット入力時の動作について、図８に示すフロー図を参照しながら説明する。なお、以下においては、主にＣＰＵ部１００内の各ＣＰＵの動作について説明するものとし、メモリ制御部３００、ＭＡＣ部４００−１〜４００−ｍ、およびＰＨＹ部５００−１〜５００−ｍの詳細な動作については説明を省略する。【００６３】
まず、コネクションによって伝送されたパケットがパケット処理装置に入力されると（ステップＳ１０１）、振分ＣＰＵ１１０の処理振分部１１１によって、空きバッファ記憶部２４０が参照され、パケット情報格納バッファ２１０の空きバッファ領域が獲得される。そして、入力パケットのパケット情報は、パケット情報格納バッファ２１０の獲得された空きバッファ領域に格納される（ステップＳ１０２）。【００６４】
また、処理振分部１１１によって、パケット情報からＩＰアドレスおよびポートが確認され、コネクション情報テーブル２５０が参照されることにより、パケットが伝送されたコネクションが既存のコネクションであるか否かが判断される（ステップＳ１０３）。すなわち、パケットのＩＰアドレスおよびポートがコネクション情報テーブル２５０に登録済みであれば、処理振分部１１１によって、パケットのコネクションが既存のコネクションであると判断され、パケットのＩＰアドレスおよびポートがコネクション情報テーブル２５０に未登録であれば、処理振分部１１１によって、パケットのコネクションが新規のコネクションであると判断される。【００６５】
この判断の結果、コネクションが既存のコネクションである場合は（ステップＳ１０３Ｙｅｓ）、処理振分部１１１によって、パケットのＩＰアドレスおよびポートに対応する振分先ＣＰＵがコネクション情報テーブル２５０から読み出され、振り分け先の並列処理ＣＰＵへパケットの処理が振り分けられる。換言すれば、以前に同一のコネクションから入力されたパケットの処理を実行した並列処理ＣＰＵへパケットの処理が振り分けられる（ステップＳ１０４）。【００６６】
そして、バッファ割当部１１２によって、パケットのＩＰアドレスおよびポートに対応するコネクションバッファポインタおよびその他バッファポインタがコネクション情報テーブル２５０から読み出され、振り分け先の並列処理ＣＰＵにコネクションバッファ２２０およびその他バッファ２３０のバッファ領域を割り当てるバッファ割当処理が実行される（ステップＳ１０５）。【００６７】
反対に、コネクションが新規のコネクションである場合は（ステップＳ１０３Ｎｏ）、処理振分部１１１によって、空いている並列処理ＣＰＵが１つ選択され、パケットの振り分け先に決定される。換言すれば、パケットに対する処理を実行中でない新規の並列処理ＣＰＵへパケットの処理が振り分けられる（ステップＳ１０６）。また、処理振分部１１１によって、パケットのＩＰアドレスおよびポートと振り分け先の並列処理ＣＰＵとの対応関係がコネクション情報テーブル２５０に登録される。この時点では、コネクション情報テーブル２５０においては、コネクションと振り分け先の並列処理ＣＰＵとの対応関係のみが登録されていることになり、並列処理ＣＰＵが使用するコネクションバッファ２２０およびその他バッファ２３０のバッファ領域を示すコネクションバッファポインタおよびその他バッファポインタ未登録である。【００６８】
そして、バッファ割当部１１２によって、空きバッファ記憶部２４０が参照され、コネクションバッファ２２０およびその他バッファ２３０の空きバッファ領域を獲得するバッファ獲得処理が実行される（ステップＳ１０７）。このバッファ獲得処理によって獲得される空きバッファ領域は、コネクションが確立されている間、パケットの振り分け先となった並列処理ＣＰＵによって高位レイヤ処理などのために継続的に使用されることとなる。そこで、バッファ割当部１１２によって、空きバッファ領域を示すコネクションバッファポインタおよびその他バッファポインタがコネクションを示すＩＰアドレスおよびポートに対応付けてコネクション情報テーブル２５０に登録される（ステップＳ１０８）。【００６９】
こうしてパケットを伝送するコネクション、パケットに対する処理を実行する並列処理ＣＰＵ、および並列処理ＣＰＵが使用するバッファ領域がコネクション情報テーブル２５０において対応付けられることになり、同一コネクションによって伝送されたパケットの処理を同一の並列処理ＣＰＵに振り分けることが可能になるとともに、コネクションが継続中は、並列処理ＣＰＵにコネクションバッファ２２０およびその他バッファ２３０の同一のバッファ領域を割り当てることができる。【００７０】
また、上述した一連の処理の振り分けおよびバッファ領域の割り当てや獲得においては、振分ＣＰＵ１１０のみが空きバッファ記憶部２４０およびコネクション情報テーブル２５０に対して情報の登録に伴う書き込みを実行している。したがって、空きバッファ記憶部２４０およびコネクション情報テーブル２５０におけるアクセスの競合がなく、複数のＣＰＵ間での排他処理が不要となる。【００７１】
そして、振り分け先の並列処理ＣＰＵが決定され、使用するバッファ領域が割り当てられると、この並列処理ＣＰＵによって、パケットに対する高位レイヤ処理などの処理が実行される（ステップＳ１０９）。このとき、振り分け先の並列処理ＣＰＵは、パケット情報格納バッファ２１０に格納されたパケット情報を使用するとともに、コネクションバッファ２２０およびその他バッファ２３０の割り当てられたバッファ領域を使用する。割り当てられたバッファ領域については、他の並列処理ＣＰＵからアクセスされることがないため、コネクションバッファ２２０およびその他バッファ２３０においてもアクセスの競合がなく、複数の並列処理ＣＰＵ１２０−１〜１２０−ｎの間での排他処理が不要となる。【００７２】
次に、本実施の形態に係るパケット処理装置においてパケットの処理が完了し、パケットを伝送するコネクションが切断される場合の並列処理ＣＰＵ１２０−１の動作について、図９に示すフロー図を参照しながら説明する。なお、並列処理ＣＰＵ１２０−２〜１２０−ｎの動作は、並列処理ＣＰＵ１２０−１の動作と同様であるため、その説明を省略する。【００７３】
本実施の形態においては、コネクションを伝送される最後のパケットのパケット情報には、その旨を示す情報が含まれており、並列処理ＣＰＵ１２０−１は、コネクションの最後のパケットに対する処理を実行する際、このパケットが伝送された後、コネクションが終了することを検知する（ステップＳ２０１）。そして、並列処理ＣＰＵ１２０−１は、図示しないタイマによって、コネクションの終了が検知されてから所定時間が経過するまで待機する（ステップＳ２０２）。【００７４】
所定時間が経過してパケットを伝送していたコネクションが確実に切断されると、並列処理ＣＰＵ１２０−１は、ＦＩＦＯ部１２１−１のＦＩＦＯ１２１ａに空きがあるか否かを判定する（ステップＳ２０３）。具体的には、並列処理ＣＰＵ１２０−１は、バッファ情報格納バッファ２１０、コネクションバッファ２２０、およびその他バッファ２３０のそれぞれに対応するＦＩＦＯ１２１ａに付加されたライトポインタ１２１ｂおよびリードポインタ１２１ｃを参照し、リードポインタ１２１ｃがライトポインタ１２１ｂより１単位分だけ大きい場合には、ＦＩＦＯ１２１ａに空きがないと判定する。つまり、ＦＩＦＯ１２１ａにライトポインタ１２１ｂから１単位分の情報が書き込まれると、ＦＩＦＯ１２１ａが一杯になってしまうため、上記の場合に空きがないと判定される。【００７５】
そして、ＦＩＦＯ１２１ａに空きがない場合には（ステップＳ２０３Ｎｏ）、終了したコネクションのコネクション情報を格納するコネクションバッファ２２０のバッファ領域やその他バッファ２３０のバッファ領域は解放されることなく、この時点での処理が終了して待機される。【００７６】
一方、ＦＩＦＯ１２１ａに空きがある場合には（ステップＳ２０３Ｙｅｓ）、並列処理ＣＰＵ１２０−１によって、処理が完了したパケットのパケット情報を格納しているバッファ領域や、終了したコネクションのコネクション情報およびその他の情報を格納しているバッファ領域のバッファ位置情報がライトポインタ１２１ｂの位置に書き込まれる（ステップＳ２０４）。同時に、並列処理ＣＰＵ１２０−１によって、バッファ位置情報が書き込まれた１単位分だけそれぞれのＦＩＦＯ１２１ａにおけるライトポインタ１２１ｂがインクリメントされる（ステップＳ２０５）。【００７７】
このように、並列処理ＣＰＵ１２０−１がパケットに対する処理を完了し、コネクションが終了すると、これらのパケットおよびコネクションに関する情報を格納しているバッファ領域のバッファ位置情報がＦＩＦＯ部１２１−１に記憶されることになる。このとき、並列処理ＣＰＵ１２０−１は、ＦＩＦＯ部１２１−１にのみアクセスし、他の並列処理ＣＰＵ１２０−２〜１２０−ｎのＦＩＦＯ部１２１−２〜１２１−ｎにはアクセスしないため、並列処理ＣＰＵ１２０−１〜１２０−ｎの間での排他処理は不要である。そして、不要となったバッファ領域のバッファ位置情報が記憶されたＦＩＦＯ部１２１−１〜１２１−ｎが振分ＣＰＵ１１０によって参照されることにより、不要となった情報を格納するバッファ領域の解放を実行することができる。【００７８】
そこで、次に、本実施の形態に係る振分ＣＰＵ１１０のバッファ領域解放時の動作について、図１０に示すフロー図を参照しながら説明する。【００７９】
本実施の形態においては、振分ＣＰＵ１１０のＦＩＦＯ監視部１１３によって、常時並列処理ＣＰＵ１２０−１〜１２０−ｎのＦＩＦＯ部１２１−１〜１２１−ｎが監視されている（ステップＳ３０１）。具体的には、ＦＩＦＯ監視部１１３によって、それぞれのＦＩＦＯ１２１ａにおけるライトポインタ１２１ｂおよびリードポインタ１２１ｃが比較され、両者が一致しておりＦＩＦＯ１２１ａが空であるか否かが監視される。そして、すべてのＦＩＦＯ部１２１−１〜１２１−ｎが空で、解放すべきバッファ領域のバッファ位置情報が記憶されていなければ（ステップＳ３０１Ｎｏ）、いずれのバッファ領域も解放されることなく処理が終了する。【００８０】
一方、いずれかのＦＩＦＯ部１２１−１〜１２１−ｎが空でなく、解放すべきバッファ領域のバッファ位置情報が記憶されていれば（ステップＳ３０１Ｙｅｓ）、ＦＩＦＯ監視部１１３によって、それぞれのＦＩＦＯ１２１ａにおけるリードポインタ１２１ｃの位置からバッファ位置情報が読み出される（ステップＳ３０２）。同時に、ＦＩＦＯ監視部１１３によって、バッファ位置情報が読み出された分だけそれぞれのＦＩＦＯ１２１ａにおけるリードポインタ１２１ｃがインクリメントされる（ステップＳ３０３）。【００８１】
解放対象のバッファ領域のバッファ位置情報がＦＩＦＯ部１２１−１〜１２１−ｎから読み出されると、バッファ解放部１１４によって、読み出されたバッファ位置情報が示すパケット情報格納バッファ２１０、コネクションバッファ２２０、およびその他バッファ２３０のバッファ領域の解放処理が実行される。また、バッファ解放部１１４によって、これらのバッファ領域が空きバッファ領域であることが空きバッファ記憶部２４０に記憶される（ステップＳ３０４）。【００８２】
これにより、コネクションの終了により不要となるパケット情報やコネクション情報などを格納するバッファ領域が解放され、空きバッファ領域となる。この空きバッファ領域は、新たなコネクションが確立された場合に、このコネクションを伝送されるパケットのパケット情報やコネクション情報などを格納するのに使用されることになる。なお、パケット情報格納バッファ２１０のバッファ領域については、並列処理ＣＰＵ１２０−１〜１２０−ｎによる処理が完了するたびに、上記と同様の方法で解放されている。これに対して、コネクションバッファ２２０およびその他バッファ２３０のバッファ領域については、コネクションが継続している間は並列処理ＣＰＵ１２０−１〜１２０−ｎによって参照されるため、上記のようにコネクションが終了するときにのみ解放される。【００８３】
このように、ＦＩＦＯ部１２１−１〜１２１−ｎに解放すべきバッファ領域のバッファ位置情報が格納されている場合には、振分ＣＰＵ１１０によってバッファ領域の解放が実行される。このとき、振分ＣＰＵ１１０は、ＦＩＦＯ部１２１−１〜１２１−ｎにアクセスするが、実際に書き換えるのはリードポインタ１２１ｃのみである。そして、各並列処理ＣＰＵ１２０−１〜１２０−ｎは、ライトポインタ１２１ｂのみを書き換えるため、並列処理ＣＰＵ１２０−１〜１２０−ｎと振分ＣＰＵ１１０の間での排他処理は不要である。【００８４】
以上のように、本実施の形態によれば、振分ＣＰＵ１１０が並列処理ＣＰＵ１２０−１〜１２０−ｎに対してパケットの処理を振り分けると同時に、処理に使用するバッファ領域の獲得処理または割当処理を実行する。また、並列処理ＣＰＵ１２０−１〜１２０−ｎの処理が完了した際には、並列処理ＣＰＵ１２０−１〜１２０−ｎが解放対象となったバッファ領域をそれぞれＦＩＦＯ部１２１−１〜１２１−ｎに登録し、振分ＣＰＵ１１０がバッファ領域の解放処理を実行する。このため、バッファ領域の割り当てや解放の際にも、バッファを管理する情報に対して振分ＣＰＵ１１０のみがアクセスすることになり、複数のＣＰＵからのアクセスが競合することがない。したがって、バッファの割り当てや解放に際しても排他処理が不要となり、パケットに対する処理を複数のＣＰＵが並列して実行する場合に、複数のＣＰＵの間における排他処理の頻度を低減して処理性能を向上することができる。【００８５】
なお、上記一実施の形態においては、パケット処理装置に振分ＣＰＵ１１０が備えられるものとして説明したが、本発明はこれに限定されず、一般のコンピュータに汎用のＣＰＵが複数備えられる場合に、上記一実施の形態と同様の処理をいずれか１つのＣＰＵに実行させるプログラムをコンピュータに導入し、コンピュータを上記一実施の形態と同様に動作させることも可能である。【００８６】
ところで、上記一実施の形態においては、コネクションごとに並列処理ＣＰＵ１２０−１〜１２０−ｎにパケットの処理を振り分けることにより、コネクションバッファ２２０およびその他バッファ２３０におけるアクセスの競合を防止し、排他処理を削減した。しかし、例えば制御コネクションとデータコネクションの２つのコネクションを同時に使用するＦＴＰ（File  Transfer  Protocol）などのサービスにおいては、複数のコネクションのコネクション情報を１つの並列処理ＣＰＵが参照する必要が生じることがある。【００８７】
ＦＴＰにおける制御コネクションは、転送されるファイルの一覧や状態などの制御情報の伝送に使用され、データコネクションは実際にアップロードまたはダウンロードされるファイルの伝送に使用される。そして、ＦＴＰの所謂パッシブモードにおいては、制御コネクションによって伝送される制御情報が参照されることにより、この制御コネクションに対応するデータコネクションが特定される。したがって、データコネクションによって伝送されるファイルに対する処理を実行する並列処理ＣＰＵは、制御コネクションのコネクション情報およびデータコネクションのコネクション情報の双方を使用することになる。【００８８】
具体的に、ＦＴＰにおけるＱｏＳ（Quality  of  Service）処理の例を挙げると、ＦＴＰの帯域を１０Ｍｂｐｓに帯域制御するように設定された場合、制御コネクションおよびデータコネクションの合計の帯域を１０Ｍｂｐｓに制限する必要がある。このとき、パッシブモード以外のモードでは、制御コネクションに対応する接続先ポートは、通常、２１番ポートに固定され、データコネクションに対応する接続先ポートは、通常、２０番ポートに固定されている。しかしながら、パッシブモードでは、データコネクションのポートが固定されておらず、サーバが制御コネクションを通じて指定するポートにおいてデータコネクションが確立される。このため、本発明に係るパケット処理装置がＦＴＰのトラフィックを中継する場合に、接続先ポートの番号からＦＴＰのデータコネクションであるか否かを判定することはできず、ＦＴＰの制御コネクションによって伝送される制御情報を参照する必要がある。【００８９】
換言すれば、ＦＴＰの制御コネクションに関する処理が振り分けられた並列処理ＣＰＵは、制御コネクションに対応するデータコネクションのポート番号を確認し、制御コネクションとデータコネクションの対応をコネクション情報としてコネクションバッファに記憶させる必要がある。そして、互いに対応する制御コネクションとデータコネクションに関する処理が異なる並列処理ＣＰＵへ振り分けられると、コネクション情報を格納するコネクションバッファに対して複数の並列処理ＣＰＵがアクセスすることになり、排他処理が必要となってしまう。そこで、互いに対応する制御コネクションおよびデータコネクションに関しては、同一の並列処理ＣＰＵに処理を担当させる必要がある。【００９０】
これを実現するためには、メモリ２００に記憶されるコネクション情報テーブル２５０を例えば図１１に示すようなものにする。すなわち、並列処理ＣＰＵ１２０−１〜１２０−ｎが使用するコネクションバッファ２２０のバッファ領域の位置として、関連コネクションバッファポインタを追加する。これは、並列処理ＣＰＵ１２０−１〜１２０−ｎに対応する制御コネクションおよびデータコネクションの双方のコネクション情報を参照させるための処置である。したがって、ＦＴＰ以外の通常のコネクションに関しては、関連コネクションバッファポインタが登録されることはない。【００９１】
さらに、並列処理ＣＰＵ１２０−１〜１２０−ｎのＦＩＦＯ部１２１−１〜１２１−ｎにそれぞれ関連コネクション通知用のＦＩＦＯを新たに配置する。そして、制御コネクションに対応する処理を振り分けられた並列処理ＣＰＵ１２０−１〜１２０−ｎが、制御コネクションによって伝送される制御情報からデータコネクションのＩＰアドレスおよびポートを把握すると、並列処理ＣＰＵ１２０−１〜１２０−ｎは、互いに対応する制御コネクションおよびデータコネクションのＩＰアドレスおよびポートの情報を関連コネクション通知用のＦＩＦＯに格納する。【００９２】
このような構成にした場合、振分ＣＰＵ１１０のＦＩＦＯ監視部１１３は、関連コネクション通知用のＦＩＦＯを監視し、関連コネクションのＩＰアドレスおよびポートの情報が格納されていれば、この情報を読み出し、制御コネクションに対応する振分先ＣＰＵをコネクション情報テーブル２５０から確認する。そして、ＦＩＦＯ監視部１１３は、データコネクションに対応付けて振分先ＣＰＵ、コネクションバッファポインタ、関連コネクションバッファポインタ、およびその他バッファポインタをコネクション情報テーブル２５０に登録するが、このとき、データコネクションの振分先ＣＰＵを、制御コネクションに対応する振分先ＣＰＵと同一の並列処理ＣＰＵとする。また、データコネクションの関連コネクションバッファポインタを、制御コネクションに対応するコネクションバッファポインタとする。【００９３】
これにより、以降は、データコネクションに関する処理が対応する制御コネクションに関する処理を担当する並列処理ＣＰＵに振り分けられることになる。また、振分ＣＰＵ１１０がデータコネクションに関する処理を振り分ける際には、コネクション情報テーブル２５０の関連コネクションバッファポインタを参照することにより、データコネクションに対応する制御コネクションのコネクション情報を格納するコネクションバッファ２２０のバッファ領域を特定することができる。したがって、制御コネクションおよびデータコネクションの双方の処理が振り分けられた並列処理ＣＰＵは、双方のコネクションのコネクション情報を参照しながら処理を実行することができる。また、互いに対応する制御コネクションおよびデータコネクションに関する処理が同一の並列処理ＣＰＵに振り分けられるため、制御コネクションおよびデータコネクションのコネクション情報に対して複数のＣＰＵがアクセスすることがない。結果として、複数の並列処理ＣＰＵ間での排他処理が不要になる。
【産業上の利用可能性】
【００９４】
本発明は、パケットに対する処理を複数のＣＰＵが並列して実行する場合に、複数のＣＰＵの間における排他処理の頻度を低減して処理性能を向上する際などに適用することができる。
【図１】
2009096029.tif 000003
【図２】
2009096029.tif 000004
【図３】
2009096029.tif 000005
【図４】
2009096029.tif 000006
【図５】
2009096029.tif 000007
【図６】
2009096029.tif 000008
【図７】
2009096029.tif 000009
【図８】
2009096029.tif 000010
【図９】
2009096029.tif 000011
【図１０】
2009096029.tif 000012
【図１１】
2009096029.tif 000013
【手続補正書】
【提出日】平成22年3月29日(2010.3.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
パケットの伝送に利用される通信の種別に対応する複数の領域を有する記憶手段と、
前記通信の種別に対応して設けられ、パケットに対する処理を実行する複数の処理手段と、
処理対象パケットを該処理対象パケットの伝送に利用された通信の種別に対応する前記処理手段に振り分ける振分手段と、
前記処理対象パケットが振り分けられた前記処理手段に対して、該処理対象パケットの伝送に利用された通信の種別に対応する前記領域を割り当てる割当手段と、
前記割当手段によって割り当てられた領域に、前記処理対象パケットの処理に関する情報と該処理対象パケットの伝送に利用された種別の通信に関する情報とを格納する格納手段と
を有することを特徴とするパケット処理装置。
【請求項２】
処理対象パケットの伝送に利用されるコネクションに、処理対象パケットの振り分け先の処理手段および当該処理手段が使用中の領域を対応付けて記憶するとともに、いずれの処理手段にも使用されていない空き領域を記憶する空き領域記憶手段をさらに有し、
前記割当手段は、
既存のコネクションに対応する処理手段には当該処理手段が使用中の領域を割り当てる一方、新規のコネクションに対応する処理手段には空き領域を割り当てることを特徴とする請求項１記載のパケット処理装置。
【請求項３】
前記空き領域記憶手段は、
処理対象パケットの伝送に利用されるコネクションに、当該コネクションに関連する関連コネクションに対応する処理手段が使用中の関連領域をさらに対応付けて記憶し、
前記振分手段は、
処理対象パケットの伝送に利用されるコネクションが関連コネクションを有する場合に、処理対象パケットを関連コネクションに対応する処理手段に振り分け、
前記割当手段は、
関連コネクションに対応する処理手段に関連領域を割り当てることを特徴とする請求項２記載のパケット処理装置。
【請求項４】
前記複数の処理手段は、
使用を終了した領域の位置を示す位置情報を格納するキューをそれぞれ備えることを特徴とする請求項１記載のパケット処理装置。
【請求項５】
前記振分手段は、
前記複数の処理手段に備えられたキューを監視する監視手段と、
前記監視手段による監視の結果、キューに位置情報が格納されている場合に、当該位置情報をキューから読み出して位置情報が示す領域を解放する解放手段と
を含むことを特徴とする請求項４記載のパケット処理装置。
【請求項６】
前記キューは、
前記複数の処理手段がそれぞれ位置情報を格納する位置を示すライトポインタと、
前記振分手段が位置情報を読み出す位置を示すリードポインタと
を備えることを特徴とする請求項４記載のパケット処理装置。
【請求項７】
パケットの伝送に利用される通信の種別に対応する複数の領域を有する記憶手段と、前記通信の種別に対応して設けられ、パケットに対する処理を実行する複数の処理手段とを有するコンピュータによって実行されるパケット処理プログラムであって、前記コンピュータに、
処理対象パケットを該処理対象パケットの伝送に利用された通信の種別に対応する前記処理手段に振り分ける振分ステップと、
処理対象パケットが振り分けられた処理手段に対して、該処理対象パケットの伝送に利用された通信の種別に対応する領域を割り当てる割当ステップと、
前記割当ステップにて割り当てられた領域に、前記処理対象パケットの処理に関する情報と該処理対象パケットの伝送に利用された種別の通信に関する情報とを格納する格納ステップと
を実行させることを特徴とするパケット処理プログラム。
【請求項８】
パケットの伝送に利用される通信の種別に対応する複数の領域を有する記憶手段と、前記通信の種別に対応して設けられ、パケットに対する処理を実行する複数の処理手段とを有するパケット処理装置におけるパケット処理方法であって、
処理対象パケットを該処理対象パケットの伝送に利用された通信の種別に対応する前記処理手段に振り分ける振分ステップと、
処理対象パケットが振り分けられた処理手段に対して、該処理対象パケットの伝送に利用された通信の種別に対応する領域を割り当てる割当ステップと、
前記割当ステップにて割り当てられた領域に、前記処理対象パケットの処理に関する情報と該処理対象パケットの伝送に利用された種別の通信に関する情報とを格納する格納ステップと
を有することを特徴とするパケット処理方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
本願が開示するパケット処理装置は、１つの態様において、パケットの伝送に利用される通信の種別に対応する複数の領域を有する記憶手段と、前記通信の種別に対応して設けられ、パケットに対する処理を実行する複数の処理手段と、処理対象パケットを該処理対象パケットの伝送に利用された通信の種別に対応する前記処理手段に振り分ける振分手段と、前記処理対象パケットが振り分けられた前記処理手段に対して、該処理対象パケットの伝送に利用された通信の種別に対応する前記領域を割り当てる割当手段と、前記割当手段によって割り当てられた領域に、前記処理対象パケットの処理に関する情報と該処理対象パケットの伝送に利用された種別の通信に関する情報とを格納する格納手段とを有する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】削除
【補正の内容】
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】削除
【補正の内容】
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１７
【補正方法】削除
【補正の内容】
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００１８
【補正方法】削除
【補正の内容】
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】削除
【補正の内容】
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】削除
【補正の内容】
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００２１
【補正方法】削除
【補正の内容】
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】削除
【補正の内容】
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００２３
【補正方法】削除
【補正の内容】
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００２４
【補正方法】削除
【補正の内容】
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００２５
【補正方法】削除
【補正の内容】
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】削除
【補正の内容】
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００２７
【補正方法】削除
【補正の内容】
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】削除
【補正の内容】
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００２９
【補正方法】削除
【補正の内容】
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】削除
【補正の内容】
【国際調査報告】
2009096029.tif 000014
2009096029.tif 000015
2009096029.tif 000016
2009096029.tif 000017