説明

パケット処理方法及びパケット処理装置

【課題】パケット処理の並列化によるパケット処理性能の向上を図りつつ、帯域使用率の低いフローにおけるパケット破棄を減らすことが可能なパケット処理方法及びパケット処理装置を提供する。
【解決手段】それぞれが処理待ちキュー103を有する複数のパケット処理部104と、外部から受信した受信パケットをいずれかの処理待ちキュー103に振り分けるパケット振分け部102と、を備えるパケット処理装置100において、受信パケットのヘッダ情報から当該パケットが含まれるフローを特定して処理待ちキュー103に振り分けるときに、振り分け先の処理待ちキュー103のパケット数が所定の閾値を超え、かつ、当該処理待ちキュー103に含まれる当該振り分け対象パケットと同じフローに属するパケットの数が所定のフロー閾値以上である場合に、当該振り分け対象パケットを所定のアルゴリズムによって確率的に破棄する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、パケット処理装置におけるパケット処理方法に係り、特に、低トラフィックのフローに対するパケット破棄を減らしつつ、ネットワークの輻輳回避を行う技術に関する。
【背景技術】
【0002】
近年、インターネットを用いた通信サービスの高度化とユーザの増加に伴い、ネットワークトラフィック量が増加し続けている。そのため、トラフィックが集中する箇所では輻輳が発生する可能性が高まり、エンドユーザに多大な影響を及ぼすことが懸念される。このような問題を解決するために、通信装置の多くはパケット処理性能の向上対策や輻輳制御機能を実装する等の対策を施している。
【0003】
前者の例として、特許文献1には、複数のハードウェアでパケット処理を並列化する方式が開示されている。この方式では、パケット振分け部がすべてのパケットを一旦受信し、受信したパケットを複数のパケット処理部に振り分けることでパケット処理を並列化する。
【0004】
後者の例としては、パケット破棄による輻輳制御方式があり、中でも最も簡易的なものはTail Drop方式である。このTail Drop方式では、受信したパケットを到着順にキューに蓄積し、このキューが満杯になっているときに到着して溢れたパケットをすべて破棄するものである。しかし、この方式ではパケット破棄が連続的に行われることが多いため、パケットの再送が頻発してパケット間の衝突が起こったときに、ネットワークのスループットが低下するという問題がある。
【0005】
このTail Drop方式におけるパケットの連続的な破棄を緩和するものとして、非特許文献1には、アクティブキュー管理方式が提案されている。その代表的な方式であるRED(Random Early Detection)アルゴリズムにおいては、キュー溢れによる連続的なパケット破棄を抑止するために、キューに格納されているパケット数が所定の閾値を超えると、パケットを統計的(確率的)に破棄することで、キューが溢れないようにする。これにより、Tail Drop方式よりも高いスループットを得ることができる。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2010−161546号公報
【非特許文献】
【0007】
【非特許文献1】IETF RFC2309: Recommendations on Queue Management and Congestion Avoidance in the Internet, April 1998.
【発明の概要】
【発明が解決しようとする課題】
【0008】
前記のようなパケット処理の並列化とREDアルゴリズムとを組み合わせて、パケット振分け部が各パケット処理部の処理待ちキューにパケットを振り分けるときにREDアルゴリズムを適用することにより、パケット処理性能の向上を図りつつパケットの連続的な破棄に伴うスループットの低下を防ぐことが可能である。
【0009】
しかし、一つのパケット処理部には複数のフローが割り当てられるのが一般的である。そのため、帯域使用率の高いフローと帯域使用率の低いフローとが同じパケット処理部に割り当てられた場合、REDアルゴリズムによるキュー管理のみでは、帯域使用率の低いフローのパケットであっても同じ確率で破棄されることになる。つまり、自身のフローの帯域使用率が低いのにも関わらず、帯域使用率の高いフローの影響によってパケット破棄が発生してしまうという問題がある。これは、ベストエフォート型ネットワークサービスにとって好ましくない。
【0010】
本発明は、前記のような問題に鑑みてなされたものであり、パケット処理の並列化によるパケット処理性能の向上を図りつつ、帯域使用率の低いフローにおけるパケット破棄を減らすことが可能なパケット処理方法及びパケット処理装置を提供することを目的とする。
【課題を解決するための手段】
【0011】
前記の目的を達成するために、本発明は、それぞれが処理待ちキューを有する複数のパケット処理部と、外部から受信したパケットをキューイングする受信キューと、この受信キューから取り出した受信パケットをいずれかの前記処理待ちキューに振り分けるパケット振分け部と、各処理待ちキューの状態を表すキュー管理情報、及び、各パケットが属するフローの振り分け先と処理待ちのパケット数とを含むフロー管理情報を保持する情報保持部とを備えるパケット処理装置において、前記パケット振分け部は、前記受信パケットのヘッダ情報から当該パケットが含まれるフローを特定して、前記フロー管理情報を参照して同じフローに属するすべてのパケット群を同じ処理待ちキューに振り分け、前記キュー管理情報を参照することにより、振り分け先の前記処理待ちキューにキューイングされているパケットの数が所定の閾値を超えていると判定した場合は、さらに、前記フロー管理情報を参照することにより、当該処理待ちキューに含まれる当該振り分け対象パケットと同じフローに属するパケットの数であるフロー別パケット数が所定のフロー閾値以上であるか否かを判定し、前記フロー別パケット数が前記フロー閾値以上である場合に、当該振り分け対象パケットを所定のアルゴリズムによって確率的に破棄するものとした。
【発明の効果】
【0012】
本発明によれば、パケット処理の並列化によるパケット処理性能の向上を図りつつ、帯域使用率の低いフローにおけるパケット破棄を減らすことが可能なパケット処理方法及びパケット処理装置を提供することができる。
【図面の簡単な説明】
【0013】
【図1】パケット処理装置の機能構成例を示す図ある。
【図2】パケット処理装置のハードウェア構成例を示す図である。
【図3】キュー管理テーブルの構成及びデータ例である。
【図4】フロー管理テーブルの構成及びデータ例である。
【図5】統計情報テーブルの構成及びデータ例である。
【図6】パケット振分け部の動作例を示すフローチャートである。
【図7】パケット振分け部におけるパケット振分け及び破棄処理の詳細を示すフローチャートである。
【図8】パケット処理部の動作例を示すフローチャートである。
【図9】パケット振分け部におけるフロー閾値初期化処理の詳細を示すフローチャートである。
【図10】コンフィグファイルにおけるシステムパラメータの記述例である。
【発明を実施するための形態】
【0014】
以下、本発明を実施するための形態を適宜図面を参照しながら説明するが、本発明の実施態様はこれに限定されるものではなく、本発明の趣旨を逸脱しない範囲内において各種変形が可能である。
【0015】
図1は、本発明の実施形態に係るパケット処理装置の機能構成例を示す図である。図1に示すように、パケット処理装置100は、受信キュー101と、パケット振分け部102と、複数の処理待ちキュー103と、複数のパケット処理部104と、送信キュー105と、情報保持部106とを備えて構成されている。また、情報保持部106は、キュー管理テーブル300、フロー管理テーブル400、及び統計情報テーブル500を備え、さらに、装置の動作に必要な各種システムパラメータなどを記憶する。
【0016】
パケット処理装置100が中継すべきパケットを受信すると、当該受信パケットは受信キュー101に一時保存される。パケット振分け部102は、受信キュー101に一時保存されている受信パケットを1つずつ取り出して、複数のパケット処理部104のなかのいずれか1つに当該パケットを振り分ける。より詳しくは、パケット振分け部102は、受信パケットのヘッダ情報から当該パケットのフロー種別及びフローIDを抽出し、キュー管理テーブル300を参照して振分け先の処理待ちキュー103(及び対応するパケット処理部104)を特定したのち、特定した処理待ちキュー103に当該パケットをキューイングする。このとき、キュー管理テーブル300において、抽出したフローIDに対してすでに特定の処理待ちキュー103(及びパケット処理部104)が割り当てられていれば、当該割り当て済みの処理待ちキュー103に当該パケットを振り分け、まだ処理待ちキュー103(及びパケット処理部104)が割り当てられていなければ、新たにいずれか1つを割り当てる。割り当ての方法は特に限定されないが、例えば、その時点で最も負荷が小さいパケット処理部104(及び対応する処理待ちキュー103)を割り当てるものとしてもよいし、その時点で最もキューイングされているパケット数が少ない処理待ちキュー103(及びパケット処理部104)を割り当てるものとしてもよい。
【0017】
各パケット処理部104は、自身に対応する処理待ちキュー103からパケットを1つずつ取り出して、ルーティング処理やプロトコル処理など当該パケット処理装置100に要求されるパケット処理を行ったのち、処理済みのパケットである送信パケットを送信キュー105にキューイングする。送信キュー105にキューイングされた各送信パケットは、不図示のパケット送信部によって所定の送信先に順次送信される。
【0018】
続いて、図2を参照して、パケット処理装置のハードウェア構成を説明する。図2は、パケット処理装置のハードウェア構成例を示す図である。図2に示すように、パケット処理装置100は、バス200で相互接続されたマルチコアCPU(Central Processing Unit)201と、入力IF(Interface)202と、出力IF203と、メモリ204とを備えて構成されている。さらに、マルチコアCPUのなかのコア#0(符号205)は、パケット振分け部として動作し、コア#1からコア#N(符号206)は、それぞれパケット処理部として動作する。ここでは、図1に示したパケット振分け部102及びパケット処理部104は、各コアが所定のプログラムを実行することで具現化されるものとするが、それぞれの処理部をハードウェアで実現するものとしてもよい。
【0019】
入力IF202は、不図示の通信回線を介して外部から受信した信号を、装置内部で扱うデータ形式に変換し、受信パケットとして受信キュー101(図1参照)にキューイングする。出力IF203は、送信キュー105(図1参照)から送信パケットを取り出し、外部が扱う信号形式に変換して不図示の通信回線を介して送信する。また、RAM(Random Access Memory)などによって構成されるメモリ204には、受信キュー101と、複数の処理待ちキュー103と、送信キュー105と、情報保持部106との各領域が、それぞれ割り当てられる。
【0020】
図3は、キュー管理テーブルの構成及びデータ例である。図3に示すように、キュー管理テーブル300には、コア番号301、フロー種別302、DROP閾値303、RED閾値304、初期フロー閾値305、RED適用フロー数306、処理待ちパケット数307、フロー数308、及びフローリスト309を属性としてもつレコードが、パケット処理部104として機能するコア206(コア#1〜N)の数だけ登録される。
【0021】
コア番号301は、当該レコードに対応付けられているコア206及び対応するパケット処理部104の識別番号である。フロー種別302は、当該コア206に割り当てられるフローの種別を表すものであり、例えば、送信元のIP(Internet Protocol)アドレス毎にフローを区別する「送信元IP」、宛先ポート毎にフローを区別する「宛先ポート」、宛先のIPアドレス毎にフローを区別する「宛先IP」などの値が設定される。
【0022】
DROP閾値303は、Tail Drop方式を適用してそれぞれの処理待ちキュー103から溢れたパケットを破棄するか否かを判定するための基準となるパケット数であり、それぞれの処理待ちキュー103にキューイング可能な最大パケット数に相当する。RED閾値304は、それぞれの処理待ちキュー103に対してREDアルゴリズムを適用するか否かを判定するための基準となるパケット数である。初期フロー閾値305は、図4の説明にて後記するフロー閾値404の初期値である。RED適用フロー数306は、当該コア206に割り当てられているフローの数が少ないときにはREDアルゴリズムを適用しないようにするための基準となるフローの数である。
【0023】
処理待ちパケット数307は、当該パケット処理部104に対応する処理待ちキュー103にキューイングされているパケットの数であり、この値がRED閾値304よりも大きくDROP閾値よりも小さいときに、REDアルゴリズムの適用可否の判定が行われる。フロー数308は、当該パケット処理部104に割り当てられているフローの数であり、この値がRED適用フロー数306よりも大きくなければREDアルゴリズムは適用されない。フローリスト309は、当該パケット処理部104に割り当てられているすべてのフローのフロー番号のリストであり、例えば図3の1行目のレコードは、コア#1に対応するパケット処理部104に、フロー番号#1,#9,#26,#38,#46の5つのフローが割り当てられている状態を示している。これらのフローリスト309は、新たなフローの発生やフローの消滅に伴って動的にデータが更新される。
【0024】
図4は、フロー管理テーブルの構成及びデータ例である。図4に示すように、フロー管理テーブル400には、フロー番号401、コア番号402、パケット数403、フロー閾値404、及び閾値初期化カウンタ405を属性としてもつレコードが、パケット処理部104に割り当てられているフローの数だけ登録される。
【0025】
フロー番号401は、当該レコードに対応付けられているフローに対して付与されるユニークな識別番号である。各受信パケットが属するフローのフロー番号は、当該パケットのヘッダ情報を解析することにより一意に特定される。コア番号402は、当該フローが割り当てられたパケット処理部104に該当するコア206の識別番号である。パケット数403は、当該コア206に対応する処理待ちキュー103にキューイングされているパケットのうち当該フローに属するパケットの数である。フロー閾値404は、当該フローに対してREDアルゴリズムを適用するか否かを判定するための基準となるパケット数であり、当該フローのパケット数403の値がこのフロー閾値を超えている場合に、当該フローに対してREDアルゴリズムが適用されることになる。後記にて説明するように、フロー閾値404の値は、当該フローに対してREDアルゴリズムが適用される度に減少していく。閾値初期化カウンタ405は、減少したフロー閾値404の値を所定の初期フロー閾値305(図3)に戻すために用いるカウンタである。
【0026】
なお、図4に示したデータ例は、フロー番号#1,#9,#46のフローが、フロー閾値404の初期値(=初期フロー閾値305)が「100」であるコア#1に割り当てられており、フロー#9のフローに対してREDアルゴリズムが適用されたことで該当するフロー閾値404が「95」にまで減少した状態を表している。フロー閾値404の減少の単位は、システムパラメータとして設定可能であり、この値を0とすれば、フロー閾値404を減少させないようにすることも可能である。
【0027】
図5は、統計情報テーブルの構成及びデータ例である。図5に示すように、統計情報テーブル500には、コア番号501、総受信パケット数502、総送信パケット数503、総破棄パケット数504、前回総受信パケット数505、及び前回受信パケット数506を属性としてもつレコードが、パケット処理部104として機能するコア206(コア#1〜N)の数だけ登録される。
【0028】
コア番号501は、当該レコードに対応付けられているコア206及び対応するパケット処理部104の識別番号である。総受信パケット数502は、統計情報の収集を開始してから当該コア206(パケット処理部104)が受信した(当該コアに振り分けられた)パケットの総数であり、総送信パケット数503は、当該コア206(パケット処理部104)が送信した(送信キュー105にキューイングした)パケットの総数である。総破棄パケット数504は、当該コア206(パケット処理部104)に振り分けられたパケットのうち破棄されたパケットの総数であり、総受信パケット数502から総送信パケット数503と処理待ちパケット数307(図3)との和を引いた値に等しい。
【0029】
前回総受信パケット数505は、所定の単位時間(例えば5秒)毎にその時点における総受信パケット数502の値を記憶したものであり、単位時間毎に値が上書きされて更新される。つまり、前回総受信パケット数505は、前回の上書き更新時における総受信パケット数502の値を示している。前回受信パケット数506は、前回総受信パケット数505の前々回の上書き更新時から前回の上書き更新時までの単位時間に受信したパケットの数を記憶したものである。
【0030】
例えば、図5に例示した状態にて今回の上書き更新が行われるときには、コア番号が1である1行目のレコードについては、総受信パケット数502の値である「1340」が前回総受信パケット数505に上書きされて記憶され、前回受信パケット数506には、総受信パケット数502の値「1340」から前回総受信パケット数505の値「1220」を引いた値である「120」が上書きされて記憶される。
【0031】
この統計情報テーブル500を参照することによって、パケット処理部104として機能する各コア206におけるパケット破棄率や受信パケット数の増減を把握し、パケット処理装置100の動作を規定する各種システムパラメータを自動または手動で適宜調整することが可能となる。
【0032】
続いて、図6及び図7を参照して、パケット振分け部の動作を説明する。図6は、パケット振分け部の動作例を示すフローチャートであり、図7は、パケット振分け部におけるパケット振分け及び破棄処理の詳細を示すフローチャートである。
【0033】
図6に示すように、パケット振分け部102の振分け処理部は、まず、入力IF202が受信して受信キュー101にキューイングした受信パケットを、受信キュー101から1つ取り出す(ステップ601)。このとき、パケットに優先度が付されていれば、最も優先度の高いパケット群のなかから優先して受信パケットを取り出すようにしてもよい。次に、振分け処理部は、受信パケットのヘッダ情報を解析することによって当該パケットのフロー種別とフローの識別情報であるフロー番号とを特定し(ステップ602)、当該フロー番号がフロー管理テーブル400に登録されてパケット処理部104が割当て済みであるか否かを判定する(ステップ603)。
【0034】
パケット処理部104が割当て済みである場合には(ステップ603で「Yes」)、ステップ606に処理を進めて割当て済みのパケット処理部104へのパケット振分け処理を行い、パケット処理部104が割り当てられていない新たなフローである場合には(ステップ603で「No」)、ステップ604に処理を進める。
【0035】
ステップ604では、振分け処理部は、キュー管理テーブル300を参照することにより、特定したフロー種別に適合するパケット処理部104を1つ選択し、当該パケット処理部104に対して当該フローを割り当てる(ステップ605)。具体的には、フロー管理テーブル400に当該フローのフロー番号を有する新たなレコードを生成して追加登録するとともに、キュー管理テーブル300の当該パケット処理部104に該当するレコードのフロー数308に1を加算し、フローリスト309に当該フロー番号を追加登録する。適合するパケット処理部104が複数存在するときには、例えば、処理待ちパケット数307が最小のパケット処理部104を選択するようにしてもよいし、フロー数308が最小のパケット処理部104を選択するようにしてもよい。そののち、ステップ606に処理を進めて新規に割り当てたパケット処理部104へのパケット振分け処理を行う。
【0036】
図7に示すように、パケット振分け及び破棄処理においては、パケット振分け部102の破棄処理部は、まず、振分け先のパケット処理部104に対応するキュー管理情報及び当該パケットが属するフローのフロー管理情報を取得する(ステップ701)。具体的には、キュー管理テーブル300から当該パケット処理部104に該当するコア番号を有するレコードを読み出し、フロー管理テーブル400から当該パケットに該当するフロー番号を有するレコードを読み出す。次に、破棄処理部は、受信パケット数の加算を行う(ステップ702)。具体的には、統計情報テーブル500において、当該パケット処理部104に該当するコア番号を有するレコードの総受信パケット数502の値に1を加算する。
【0037】
次に、破棄処理部は、キュー管理テーブル300から読み出したレコードを参照することにより、振分け対象のパケットを当該処理待ちキュー103にキューイングすると処理待ちパケット数(処理待ちパケット数307に1を加算した値)がDROP閾値303を超えるか否かを判定する(ステップ703)。
【0038】
処理待ちパケット数>DROP閾値 となる場合(ステップ703で「Yes」)、ステップ714に処理を進め、フロー管理テーブル400から読み出したレコードを参照することにより、当該パケットを当該処理待ちキュー103にキューイングするとフロー別のパケット数(パケット数403に1を加算した値)がフロー閾値404を超えるか否かを判定する。
【0039】
フロー別パケット数>フロー閾値 の場合(ステップ714で「Yes」)、ステップ715に処理を進めてフロー閾値404を引き下げる。ここで閾値を引き下げる単位は、システムパラメータやコマンドラインインタフェースによる入力などによって事前に与えられるものとする。続いて、閾値初期化カウンタ405の値を所定値に設定し(ステップ716)、当該パケットを破棄し(ステップ717)、統計情報テーブル500の該当する総破棄パケット数504を1だけ加算したのち(ステップ718)、処理を終了する。フロー別パケット数≦フロー閾値 の場合(ステップ714で「No」)、ステップ717に処理を進めて当該パケットを破棄し(ステップ717)、統計情報テーブル500の該当する総破棄パケット数504を1だけ加算したのち(ステップ718)、処理を終了する。
【0040】
また、処理待ちパケット数≦DROP閾値 となる場合(ステップ703で「No」)、ステップ704に処理を進め、フロー管理テーブル400から読み出したレコードを参照することにより、当該パケットを当該処理待ちキュー103にキューイングすると処理待ちパケット数(処理待ちパケット数307に1を加算した値)がRED閾値304を超えるか否かを判定する。
【0041】
処理待ちパケット数≦RED閾値 となる場合(ステップ704で「No」)、ステップ711に処理を進めて当該パケットを当該処理待ちキュー103にキューイングする。続いて、フロー管理テーブル400の該当するフローのパケット数403を1だけ加算し(ステップ712)、キュー管理テーブル300の該当する処理待ちパケット数307を1だけ加算したのち(ステップ713)、処理を終了する。
【0042】
他方、処理待ちパケット数>RED閾値 となる場合(ステップ704で「Yes」)、ステップ705に処理を進めて、さらに、フロー管理テーブル400から読み出したレコードを参照することにより、当該パケットを当該処理待ちキュー103にキューイングするとフロー別のパケット数(パケット数403に1を加算した値)がフロー閾値404を超えるか否かを判定する。
【0043】
フロー別パケット数≦フロー閾値 の場合(ステップ705で「No」)、ステップ711に処理を進める。ステップ711以降の処理は、前記の処理待ちパケット数≦RED閾値のときと同様である。他方、フロー別パケット数>フロー閾値 の場合(ステップ705で「Yes」)、ステップ706に処理を進めて、さらに、フロー管理テーブル400から読み出したレコードを参照することにより、当該処理待ちキュー103に割り当てられているフロー数308がRED適用フロー数306を超えているか否かを判定する。
【0044】
フロー数≦RED適用フロー数 の場合(ステップ706で「No」)、ステップ711に処理を進める。ステップ711以降の処理は、前記の処理待ちパケット数≦RED閾値のときと同様である。フロー数>RED適用フロー数 の場合(ステップ706で「Yes」)、ステップ707に処理を進めてフロー閾値404を引き下げたのち、閾値初期化カウンタ405の値を所定値に設定する(ステップ708)。続いて、ステップ709と710とによって当該フローに対してREDアルゴリズムを適用する。
【0045】
この例では、まず、当該処理待ちキュー103のRED閾値304とDROP閾値303との間のランダム値を算出し(ステップ709)、現在の処理待ちパケット数307が算出したランダム値よりも大きいか否かを判定する(ステップ710)。そして、処理待ちパケット数>ランダム値 の場合(ステップ710で「Yes」)、ステップ717に処理を進めて当該パケットを破棄し、統計情報テーブル500の該当する総破棄パケット数504を1だけ加算したのち(ステップ718)、処理を終了する。また、処理待ちパケット数≦ランダム値 の場合は(ステップ710で「No」)、ステップ711に処理を進めて当該パケットを当該処理待ちキュー103にキューイングしたのち、該当するフロー別のパケット数403と処理待ちパケット数307を1ずつ加算して(ステップ712,713)処理を終了する。
【0046】
以上がパケット振分け部102の振分け処理部と破棄処理部とが実行する一連の処理であり、パケット振分け部102は、受信キュー101に順次キューイングされる受信パケットについて、上記処理を繰り返す。
【0047】
続いて、図8を参照して、パケット処理部の動作を説明する。図8は、パケット処理部の動作例を示すフローチャートである。
【0048】
図8に示すように、パケット処理部104は、まず、自身に対応する処理待ちキュー103にキューイングされているパケットを1つ取り出す(ステップ801)。次に、パケット処理部104は、キュー管理テーブル300の該当する処理待ちパケット数307とフロー管理テーブル400の該当するフロー別のパケット数403とをそれぞれ1ずつ減算する(ステップ802,803)。次に、パケット処理部104は、そのパケットに対してルーティング処理やプロトコル処理等の所定のパケット処理を行う(ステップ804)。パケット処理が成功した場合(ステップ805で「Yes」)、パケット処理部104は、ステップ806に処理を進めて送信キュー105にパケットをキューイングしたのち、統計情報テーブル500の該当する総送信パケット数503を1だけ加算して(ステップ807)処理を終了する。他方、パケット処理が失敗した場合は(ステップ805で「No」)、ステップ808に処理を進めて統計情報テーブルの該当する総破棄パケット数を1だけ加算したのち、処理を終了する。
【0049】
以上がパケット処理部104が実行する一連の処理であり、パケット処理部104は、自身の処理待ちキュー103に順次キューイングされるパケットについて、上記処理を繰り返す。
【0050】
続いて、図9を参照してフロー閾値初期化処理について説明する。図9は、パケット振分け部におけるフロー閾値初期化処理の詳細を示すフローチャートである。図9に示す処理は、統計情報テーブル500の上書き更新を行う所定の単位時間(例えば5秒)毎に起動され、それぞれのパケット処理部104について個別に実行される。
【0051】
図9に示すように、パケット振分け部102の閾値初期化処理部は、まず、統計情報テーブル500の対象となるパケット処理部104のレコードから総受信パケット数502など一連の統計情報を取得する(ステップ901)。次に、閾値初期化処理部は、総受信パケット数502から前回総受信パケット数505を減算することによって、現時点の単位時間前(前回の上書き更新時)以降に受信して振り分けた受信パケットの数である今回の受信パケット数を算出する(ステップ902)。次に、閾値初期化処理部は、算出した今回の受信パケット数が前回受信パケット数506よりも小さいか否かを判定し(ステップ903)、今回の受信パケット数が前回受信パケット数よりも小さい(図9では、「今回<前回」と表記)場合は(ステップ903で「Yes」)ステップ904に処理を進め、今回の受信パケット数が前回受信パケット数以上の場合は(ステップ903で「No」)ステップ907に処理を進める。
【0052】
ステップ904では、閾値初期化処理部は、当該パケット処理部104に割り当てられているフローをフロー管理テーブル400からすべて検索し、該当する閾値初期化カウンタ405の値が0でないものがあればその値を1だけ減算する。次に、減算後に閾値初期化カウンタ405の値が0となったか否かを判定し(ステップ905)、0となった場合は(ステップ905で「Yes」)ステップ906に処理を進め、フロー管理テーブル400の該当するフローのフロー閾値404の値をキュー管理テーブル300の該当する初期フロー閾値305の値に初期化する。
【0053】
ステップ907では、閾値初期化処理部は、当該パケット処理部104に該当する統計情報のうち、前回総受信パケット数505及び前回受信パケット数506を更新したのち、処理を終了する。このとき、前回総受信パケット数505には、その時点の総受信パケット数502の値を上書きして更新し、前回受信パケット数506には、ステップ902にて算出した今回の受信パケット数の値を上書きして更新する。
【0054】
以上の処理により、フロー別のパケット数が対応するフロー閾値を超えて当該フロー閾値が引き下げられたのちに、当該フローが割り当てられているパケット処理部104に振り分けられる単位時間当たりのパケット数が所定の回数だけ減少した場合に、引き下げられたフロー閾値の再設定が行われる。
【0055】
最後に、装置の動作に必要な各種システムパラメータの設定について説明する。図10は、コンフィグファイルにおけるシステムパラメータの記述例である。コンフィグファイルは、パケット処理装置100の起動時に不図示の不揮発性メモリなどから読み込まれる。図10に示したコンフィグファイルには、図3に例示したキュー管理テーブル300の初期設定に使用されるシステムパラメータとして、各パケット処理部104のコア番号、フロー種別、DROP閾値、RED閾値、初期フロー閾値、RED適用フロー数が記述されている。これらのシステムパラメータは、コマンドラインインタフェースのような方法により利用者などによって動的に変更されるものとしてもよい。
【0056】
以上にて、本発明の実施形態の説明を終える。なお、前記の実施形態においては、アクティブキュー管理方式としてREDアルゴリズムを適用する例について説明したが、例えば重み付きREDアルゴリズムのようにREDアルゴリズムを拡張したアルゴリズムを適用してもよいし、REDアルゴリズムとは異なる他のアクティブキュー管理アルゴリズムを適用してもよい。また、前記の実施形態においては、高トラフィックのフローのフロー閾値を動的に引き下げるものとしたが、フロー閾値を引き下げずに固定値としてもよく、その場合にはフロー管理テーブル400におけるフロー閾値404と閾値初期化カウンタ405とを省略することができる。また、フロー毎に優先度を付与してもよく、その場合には、優先度の高いフローには通常の初期フロー閾値よりも大きいフロー閾値を設定することにより、処理待ちキューにキューイング可能なパケット数を増やして優先度の高いフローのパケットを破棄しにくくするようにしてもよい。
【符号の説明】
【0057】
100 パケット処理装置
101 受信キュー
102 パケット振分け部(振分け処理部、破棄処理部)
103 処理待ちキュー
104 パケット処理部
105 送信キュー
106 情報保持部
200 バス
201 マルチコアCPU
202 入力IF
203 出力IF
204 メモリ
205 コア(コア#0)
206 コア(コア#1〜N)
300 キュー管理テーブル(キュー管理情報)
301 コア番号
302 フロー種別
303 DROP閾値
304 RED閾値
305 初期フロー閾値
306 RED適用フロー数(最小フロー数)
307 処理待ちパケット数
308 フロー数
309 フローリスト
400 フロー管理テーブル(フロー管理情報)
401 フロー番号
402 コア番号
403 パケット数(フロー別パケット数)
404 フロー閾値
405 閾値初期化カウンタ
500 統計情報テーブル
501 コア番号
502 総受信パケット数
503 総送信パケット数
504 総破棄パケット数
505 前回総受信パケット数
506 前回受信パケット数

【特許請求の範囲】
【請求項1】
それぞれが処理待ちキューを有する複数のパケット処理部と、
外部から受信したパケットをキューイングする受信キューと、
この受信キューから取り出した受信パケットをいずれかの前記処理待ちキューに振り分けるパケット振分け部と、
各処理待ちキューの状態を表すキュー管理情報、及び、各パケットが属するフローの振り分け先と処理待ちのパケット数とを含むフロー管理情報を保持する情報保持部と
を備えるパケット処理装置のパケット処理方法であって、
前記パケット振分け部は、
前記受信パケットのヘッダ情報から当該パケットが含まれるフローを特定して、前記フロー管理情報を参照して同じフローに属するパケット群を同じ処理待ちキューに振り分け、
前記キュー管理情報を参照することにより、振り分け先の前記処理待ちキューにキューイングされているパケットの数が所定の閾値を超えていると判定した場合は、さらに、前記フロー管理情報を参照することにより、当該処理待ちキューに含まれる当該振り分け対象パケットと同じフローに属するパケットの数であるフロー別パケット数が所定のフロー閾値以上であるか否かを判定し、前記フロー別パケット数が前記フロー閾値以上である場合に、当該振り分け対象パケットを所定のアルゴリズムによって確率的に破棄する
ことを特徴とするパケット処理方法。
【請求項2】
請求項1に記載のパケット処理方法において、
前記所定のアルゴリズムは、REDアルゴリズムまたはそれから派生した類似のアルゴリズムである
ことを特徴とするパケット処理方法。
【請求項3】
請求項1または請求項2に記載のパケット処理方法において、
前記所定のアルゴリズムを適用するための最小フロー数が規定され、
前記パケット振分け部は、
前記処理待ちキューに割り当てられているフロー数が前記最小フロー数に満たないものと判定した場合に、前記所定のアルゴリズムを適用しない
ことを特徴とするパケット処理方法。
【請求項4】
請求項1から請求項3のいずれか一項に記載のパケット処理方法において、
前記パケット振分け部は、
前記フロー別パケット数が前記フロー閾値以上であると判定する毎に、当該フロー閾値を段階的に引き下げ、当該フローに属するパケットが振り分けられる前記処理待ちキューに新たにキューイングされる単位時間当たりの受信パケット数が減少する回数をカウントし、当該回数が、所定の回数に達した場合に、当該フロー閾値を所定の初期値に再設定する
ことを特徴とするパケット処理方法。
【請求項5】
それぞれが処理待ちキューを有する複数のパケット処理部と、
外部から受信したパケットをキューイングする受信キューと、
この受信キューから取り出した受信パケットをいずれかの前記処理待ちキューに振り分けるパケット振分け部と、
各処理待ちキューの状態を表すキュー管理情報、及び、各パケットが属するフローの振り分け先と処理待ちのパケット数とを含むフロー管理情報を保持する情報保持部と
を備え、
前記パケット振分け部は、
前記受信パケットのヘッダ情報から当該パケットが含まれるフローを特定して、前記フロー管理情報を参照して同じフローに属するパケット群を同じ処理待ちキューに振り分ける振分け処理部と、
前記キュー管理情報を参照することにより、振り分け先の前記処理待ちキューにキューイングされているパケットの数が所定の閾値を超えていると判定した場合は、さらに、前記フロー管理情報を参照することにより、当該処理待ちキューに含まれる当該振り分け対象パケットと同じフローに属するパケットの数であるフロー別パケット数が所定のフロー閾値以上であるか否かを判定し、前記フロー別パケット数が前記フロー閾値以上である場合に、当該振り分け対象パケットを所定のアルゴリズムによって確率的に破棄する破棄処理部とを有する
ことを特徴とするパケット処理装置。
【請求項6】
請求項5に記載のパケット処理装置において、
前記所定のアルゴリズムは、REDアルゴリズムまたはそれから派生した類似のアルゴリズムである
ことを特徴とするパケット処理装置。
【請求項7】
請求項5または請求項6に記載のパケット処理装置において、
前記所定のアルゴリズムを適用するための最小フロー数が規定され、
前記パケット振分け部は、
前記処理待ちキューに割り当てられているフロー数が前記最小フロー数に満たないものと判定した場合に、前記所定のアルゴリズムを適用しない
ことを特徴とするパケット処理装置。
【請求項8】
請求項5から請求項7のいずれか一項に記載のパケット処理装置において、
前記パケット振分け部は、
前記フロー別パケット数が前記フロー閾値以上であると判定する毎に、当該フロー閾値を段階的に引き下げ、当該フローに属するパケットが振り分けられる前記処理待ちキューにキューイングされる単位時間当たりの受信パケット数が減少する回数をカウントし、当該回数が所定の回数に達した場合に、当該フロー閾値を所定の初期値に再設定する閾値初期化処理部を有する
ことを特徴とするパケット処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2013−98815(P2013−98815A)
【公開日】平成25年5月20日(2013.5.20)
【国際特許分類】
【出願番号】特願2011−240829(P2011−240829)
【出願日】平成23年11月2日(2011.11.2)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】