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