(57)【要約】【課題】緊急の処理を必要とするパケットが高頻度に到着した場合でも、受信性能の低下を引き起こすことなく、安定した受信性能を発揮することが可能で、かつ、緊急パケット以外のパケットが到着した場合は、まとめＤＭＡ転送による高い受信性能を実現する。【解決手段】通信回線上のパケットを受け取るパケット処理装置において、通信回線から受信した複数のパケットを１つのデータブロックに結合するパケット結合部と、各々メモリ容量が異なる複数のパケットメモリと、前記結合中のデータブロックの大きさがある閾値を超えた場合、あるいは、前記結合中のデータブロックに緊急パケットが含まれる場合に、各々メモリ容量が異なる前記複数のパケットメモリの中から前記結合中のデータブロックの大きさに最も適したパケットメモリを一つ選択して、前記パケット結合部から前記選択したパケットメモリに前記結合中のデータブロックを転送する手段とを有する。【選択図】図３
2008011015.tif 000002
【特許請求の範囲】
【請求項１】
通信回線上のパケットを受け取るパケット処理装置において、
通信回線から受信した複数のパケットを１つのデータブロックに結合するパケット結合部と、
各々メモリ容量が異なる複数のパケットメモリと、
前記結合中のデータブロックの大きさがある閾値を超えた場合、あるいは、前記結合中のデータブロックに緊急パケットが含まれる場合に、各々メモリ容量が異なる前記複数のパケットメモリの中から前記結合中のデータブロックの大きさに最も適したパケットメモリを一つ選択して、前記パケット結合部から前記選択したパケットメモリに前記結合中のデータブロックを転送する手段とを有することを特徴とするパケット処理装置。
【請求項２】
ある一定の時間をカウントするタイマーを有し、
前記手段は、前記タイマーがタイムアウトした場合においても、各々メモリ容量が異なる前記複数のパケットメモリの中から前記結合中のデータブロックの大きさに最も適したパケットメモリを一つ選択して、前記パケット結合部から前記選択したパケットメモリに前記結合中のデータブロックを転送することを特徴とする請求項１に記載のパケット処理装置。
【請求項３】
前記通信回線上のデータを受け取る回線対応部と、
前記閾値を設定する結合閾値制御部と、
前記緊急パケットを判別する緊急パケット判別部と、
前記パケット結合部において、前記回線対応部から受信した複数のパケットを一つのデータブロックに結合中のデータブロックを保持する受信バッファと、
前記受信バッファの使用量を観測する受信バッファ使用量観測部と、
前記結合中のデータブロックの大きさが前記閾値を超えた場合、あるいは、前記結合中のデータブロックに緊急パケットが含まれる場合に、前記受信バッファ使用量観測部に保持された値を元に、各々メモリ容量が異なる前記複数のパケットメモリの中からパケットメモリを一つ選択するパケットメモリセレクタと、
前記パケットメモリセレクタにより選択されたパケットメモリに対して、前記パケット結合部で結合されたデータブロックを転送する結合パケット転送部と、
受信したパケットメモリのプロトコル処理を行うプロトコル処理部と、
前記プロトコル処理部へパケットメモリを転送し、同時に転送したパケットメモリ分のメモリ領域を新たに補充する受信処理部とを有することを特徴とする請求項１または請求項２に記載のパケット処理装置。
【請求項４】
受信したパケットから、特定の条件を満たすパケットを検出するパケットフラグ判別部と、
前記パケットフラグ判別部で検出されたパケットを抽出するマルチレイヤ分別部を有し、
前記パケット結合部において結合される複数のパケットは、前記マルチレイヤ分別部で抽出された前記特定の条件を満たす複数のパケットであることを特徴とする請求項１ないし請求項３のいずれか１項に記載のパケット処理装置。
【請求項５】
前記データブロックの大きさの閾値、前記タイマーでカウントする一定の時間、あるいは、前記パケットフラグ判別部で検出する条件は、ユーザの要求に応じて変更可能であることを特徴とする請求項４に記載のパケット処理装置。
【請求項６】
通信回線上のパケットを受け取るパケット処理方法において、
各々メモリ容量が異なる複数のパケットメモリを有し、
通信回線から受信した複数のパケットを１つのデータブロックに結合し、
前記結合中のデータブロックの大きさがある閾値を超えた場合、あるいは、前記結合中のデータブロックに緊急パケットが含まれる場合に、各々メモリ容量が異なる前記複数のパケットメモリの中から前記結合中のデータブロックの大きさに最も適したパケットメモリを一つ選択して、前記選択したパケットメモリに前記結合中のデータブロックを転送することを特徴とするパケット処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット処理方法およびパケット処理装置に係り、特に、通信システムの中で、通信データのプロトコル処理や、経路情報に基づきパケットデータの転送処理を行なうパケット処理装置に関する。
【背景技術】
【０００２】
図１は、従来のパケット処理装置の受信処理を説明するための図である。同図において、１１は回線対応部、１２はパケットメモリ、１３は受信処理部、１４はプロトコル処理部である。
通信回線からのパケット到着を契機として、回線対応部１１からＤＭＡ（Direct Memory Access）を用いたデータ転送を行い、到着したパケットをパケットメモリ１２に格納する。同時に、回線対応部１１は、パケットを受信したことをパケット処理装置のプロセッサに通知する為に、ハードウェア割り込みを発生し、受信処理部１３の起動要求を行う。
その後、起動した受信処理部１３は、パケットメモリ１２に転送された受信パケットをプロトコル処理部１４へ受渡す。
同時に、プロトコル処理部１４へ受け渡したパケットメモリ分を補充するために、パケット処理装置が持つメモリから新たなパケットメモリ１２を確保する。
受信パケットが受け渡されたプロトコル処理部１４は、必要なプロトコル処理が終了するとパケットメモリ１２の領域を開放する。
【０００３】
この様な一般的な受信処理では、特に、小さいパケットが高頻度に到着した場合、ハードウェアの割り込みの数が増大するために、パケット処理装置のプロセッサが高負荷となり、受信性能が低下することが知られている。また、ＤＭＡ転送が起動される回数が増加するために、ＤＭＡ転送制御に伴うオーバーヘッドの為に受信性能が低下することが知られている。（下記、非特許文献１参照）
このような問題に対処するために、回線対応部１１において設定された閾値に達するまで、複数の小さいパケットを一つの大きなデータブロックにまとめ、閾値に到達することを契機として、一括してパケットメモリ１２へデータブロックをＤＭＡ転送する技術が提案されている。（下記、非特許文献２、非特許文献３参照）
この技術を用いた場合、一つの大きなデータブロックにまとめている最中でも、緊急に受信処理が必要なパケットが到着した場合は、閾値に達していなくても強制的にパケットメモリ１２へＤＭＡ転送し、受信処理を行う必要がある。
このような、複数の小さなパケットを一つのデータブロックへまとめて転送するＤＭＡ転送方式（以降、まとめＤＭＡ転送）と、緊急パケットの受信処理（以降、緊急パケット受信処理）を組み合わせることで、小さなパケットが到着した場合でも、ハードウェア割り込みの回数が減少すると共に、ＤＭＡ転送のオーバーヘッドが削減されるため、高速な受信処理を行うことができる。
【０００４】
なお、本願発明に関連する先行技術文献としては以下のものがある。
【非特許文献１】K.Shimizu, T.Ogura, T.Kawano, H.Kimiyama,and M.Maruyama, "OC-48c High-speed Network PCI Card:Implementation and Evaluation,"IEICE Trans.Inf.and Syst.,vol.E86-D,no.11,pp.2380-2389,Nov.2003.
【非特許文献２】L.Grossman,"Large Receive Offload implementation in Neterion 10GbE Ethernet driver," Proc.The Linux Symposium,Ottawa,Canada, vol.1,pp.195-200, July 20nd-23th,2005.
【非特許文献３】Y.Ajima, S.Kobayashi, and T.Niinomi,"Implementation and Evaluation of Zero Copy Socket using NIC memory," IEICE Technical Report, vol.105,no.225,pp.37-42,2005.
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来のまとめＤＭＡ転送と緊急パケット受信処理が導入されたパケット処理装置では、パケットの受信時の動作は、図２にしめす構成で実現されるのが一般的である。
図２に示すパケット処理装置では、回線対応部１１において受信されたパケットはパケット結合用の受信バッファ１５に転送される。受信バッファ１５では、受信バッファ１５中に以前に存在していたパケットと結合され、一つのデータブロックとして保存される。
同時に、パケット結合部１６には、緊急パケット判別部１９と結合閾値制御部１８により、受信バッファ１５で結合されているデータブロックを、パケットメモリ１２へ転送するタイミングが与えられる。
つまり、緊急パケット判別部１９でパケットに緊急フラグが与えられていることが認定されるか、もしくは、受信バッファ１５中のデータブロックの大きさが、結合閾値制御部１８に設定された閾値を超えることを契機として、データブロックのパケットメモリ１２への転送要求が通知される。
結合パケット転送部１７は、複数のパケットが結合されたデータブロックを一度のＤＭＡ転送により、パケットメモリ１２に転送し、受信処理部１３の起動要求を行なう。受信処理部１３は、起動要求を検知すると、パケットメモリ内のデータブロックを、プロトコル処理部１４へと渡す。
【０００６】
図２に示す構成によって、受信処理の起動要求が、複数のパケットが結合したデータブロックが転送される毎に行われるようになるため、受信処理部１３の起動回数が減少し、パケット処理装置のプロセッサ負荷が軽減される。また、ＤＭＡ転送制御の回数も減少するためにオーバーヘッドの割合が低くなり、高い受信性能を発揮することが可能となる。
ただし、図２に示す構成においても、緊急に処理する必要があるパケットが到着した場合には、データブロックの結合をただちに停止して、パケットメモリ１２への転送を行なう必要がある。
図２に示す構成において、複数のパケットが結合されたデータブロックの転送先として指定するパケットメモリ１２は、受信パケットが到着する以前に前もって準備する必要がある。そのため、予め用意するパケットメモリ１２の大きさ（または、メモリ容量）は、考えうる最大の大きさ、つまり、結合閾値制御部１８で指定した閾値以上の大きさである必要がある。
この様な「まとめＤＭＡ転送」と「緊急パケット受信処理」が導入されたパケット処理装置では、以下のような問題が存在するために、導入されていないパケット処理装置と比較して、かえって受信性能が低下することが想定される。
【０００７】
（１）緊急に処理することが必要なパケットが頻繁に到着し、パケットの結合が十分におこなわれない状況でＤＭＡ転送が閲始される場合でも、パケットメモリ１２のサイズは考えうる最大の大きさで準備する必要がある。つまり、大きなパケットメモリ１２に対して、小さな緊急パケットを格納することが頻繁に行われ、パケット処理装置のメモリ使用効率の低下が引き起こされる。その結果メモリ不足となり、受信性能が低下する。
（２）考えうる最大の大きさでパケットメモリ１２を準備するために、パケットメモリ１２を新たに準備する処理が高負荷となる。つまり、パケット処理装置に用いられるオペレーティングシステム上では、通常メモリは比較的小さい単位で管理されており（２のべき乗システムや、スラブキャッシュを参照）、大きなメモリを確保する場合は、未使用で、かつ複数の小さいメモリを検索して一度に確保する必要がある。
また、パケット処理装置が持つ回線対応部１１がスキャターギャザーＤＭＡ機構に対応していない場合は、複数の領域に分割されたメモリを一つのパケットメモリ１２として使用することができず、大きな連続したメモリ領域を確保することが必要となり、さらにパケットメモリ１２を準備することが困難となる。その結果、パケットメモリ１２の準備が間に合わなくなり受信性能が低下する。
【０００８】
前述したような問題点をもつパケット処理装置に対して、例えば、緊急パケットを装ったパケットを多量に送りつけてくるネットワーク攻撃（ＤｏＳ：Denial of Service）が行われた場合は、まとめＤＭＡ転送や緊急パケット受信処理を備えていないパケット処理装置と比較して、受信性能の悪化がより顕著になる。
本発明は、前記従来技術の問題点を解決するためになされたものであり、本発明の目的は、まとめＤＭＡ転送や緊急パケット受信処理を備えたパケット処理装置において、緊急の処理を必要とするパケットが高頻度に到着した場合でも、受信性能の低下を引き起こすことなく、安定した受信性能を発揮することが可能であり、かつ、緊急パケット以外のパケットが到着した場合は、まとめＤＭＡ転送の効果による高い受信性能を実現することが可能となる技術を提供することにある。
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述及び添付図面によって明らかにする。
【課題を解決するための手段】
【０００９】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、下記の通りである。
本願発明は、通信回線上のパケットを受け取るパケット処理装置において、通信回線から受信した複数のパケットを１つのデータブロックに結合するパケット結合部と、各々メモリ容量が異なる複数のパケットメモリと、前記結合中のデータブロックの大きさがある閾値を超えた場合、あるいは、前記結合中のデータブロックに緊急パケットが含まれる場合に、各々メモリ容量が異なる前記複数のパケットメモリの中から前記結合中のデータブロックの大きさに最も適したパケットメモリを一つ選択して、前記パケット結合部から前記選択したパケットメモリに前記結合中のデータブロックを転送する手段とを有することを特徴とする。
【００１０】
より具体的には、通信回線上のデータを受けとる回線対応部と、回線対応部から受信した複数のパケットを一つのデータブロックに結合するパケット結合部と、前記データブロックへの結合を終了する契機を与える結合閾値制御部および緊急パケット判別部と、結合中のデータブロックを保持する受信バッファと、受信バッファの使用量を観測する受信バッファ使用量観測部と、各々メモリ容量が異なるパケットメモリと、受信バッファ使用量観測部に保持された値を元に、各々メモリ容量が異なる前記パケットメモリから一つのパケットメモリを選択するパケットメモリセレクタと、パケットメモリセレクタにより選択されたパケットメモリに対して、パケット結合部で結合されたデータブロックを転送する結合パケット転送部と、受信したパケットメモリのプロトコル処理を行うプロトコル処理部と、プロトコル処理部へパケットメモリを転送し、同時に、転送したパケットメモリ分のメモリ領域を新たに補充する機能を持つ受信処理部とから構成される。
【００１１】
本願発明のパケット処理装置は、第１の受信処理として、以下の処理を行う。
（１）パケット処理装置は、受信に先立って、各々メモリ容量が異なるパケットメモリを準備しておく。パケット処理装置が行うプロトコル処理は、各々メモリ容量が異なるパケットメモリのいずれにおいても行うことが可能である。
（２）各々メモリ容量が異なるパケットメモリの先頭アドレスやステータス情報を、回線対応部から受信したパケットをパケットメモリへ転送する役割を持つ結合パケット転送部に登録しておく。結合パケット転送部は、登録された各々メモリ容量が異なるパケットメモリの情報から、どのような大きさのパケットメモリが用意されているかを取得することができる。
（３）パケット結合部では、回線対応部から受信した複数のパケットを、受信バッファにおいて一つのデータブロックに結合する。
（４）受信バッファ使用量観測部は、受信バッファ中にどれくらいの量のデータが保持されているかを示す値を保持する。
【００１２】
（５）結合閾値制御部、もしくは緊急パケット判別部によりパケット結合部における結合処理を停止させる契機が与えられると、パケットメモリセレクタは、受信バッファ使用量観測部に保持された値と、あらかじめ用意されている各々メモリ容量が異なるパケットメモリのメモリ容量を比較し、結合されたデータブロックよりも大きく、かつ最小のメモリ容量を持つパケットメモリを選択する。
（６）結合パケット転送部では、パケットメモリセレクタにより選択されたパケットメモリに対して、受信バッファで結合されたデータブロックを転送する。
（７）受信処理部は、転送されたデータブロックをプロトコル処理部へと渡す。
（８）受信処理部は、転送されたデータブロック分のパケットメモリをパケット処理装置のもつメモリから補充する。
【００１３】
また、本願発明のパケット処理装置は、第２の受信処理として、以下の処理を行う。
（１）パケット処理装置が受信に先立って、各々メモリ容量が異なるパケットメモリを準備しておく。
（２）各々メモリ容量が異なるパケットメモリの先頭アドレスやステータス情報を、回線対応部から受信したパケットをパケットメモリへ転送する役割を持つ結合パケット転送部に登録しておく。
（３）パケット結合部では、回線対応部から受信した複数のパケットを、受信バッファにおいて一つのデータブロックに結合する。
（４）受信バッファ使用量観測部は、受信バッファ中にどれくらいの量のデータが保持されているかを示す値を保持する。
前述の（１）〜（４）の処理は、前述の第１の受信処理と同じである。
（５）パケット処理装置にパケットが到着すると、タイマーを起動し、パケット到着からタイマーがタイムアウトするまでの全てのパケットをひとつのデータブロックとして結合する。
（６）（Ａ）タイマーがタイムアウトする、（Ｂ）結合閾値制御部に設定した閾値を越える、あるいは、（Ｃ）緊急パケット判別部により緊急パケットと認定されるのＡ、Ｂ、Ｃのいずれかの条件が満たされると、パケット結合部における結合処理を停止させる契機が与えられる。
【００１４】
以降（７）〜（１０）の処理は、前述の第１の受信処理の（５）〜（８）の処理と同じである。
（７）パケットメモリセレクタは、受信バッファ使用量観測部に保持された値と、あらかじめ用意されている各々メモリ容量が異なるパケットメモリの大きさを比較し、結合されたデータブロックよりも大きく、かつ最小のメモリ容量を持つパケットメモリを選択する。
（８）結合パケット転送部では、パケットメモリセレクタにより選択されたパケットメモリに対して、受信バッファで結合されたデータブロックを転送する。
（９）受信処理部は、転送されたデータブロックをプロトコル処理部へと渡す。
（１０）受信処理部は、転送されたデータブロック分のパケットメモリをパケット処理装置の持つメモリから補充する。
【００１５】
また、本願発明のパケット処理装置は、第３の受信処理として、以下の処理を行う。
（１）パケット処理装置が受信に先立って、各々メモリ容量が異なるパケットメモリを準備しておく。
（２）各々メモリ容量が異なるパケットメモリの先頭アドレスやステータス情報を、回線対応部から受信したパケットをパケットメモリへ転送する役割を持つ結合パケット転送部に登録しておく。
前述の（１）、（２）の処理は、前述の第１の受信処理の（１）、（２）の処理と同じである。
（３）パケット処理装置にパケットが到着すると、複数のパケットフラグ判別部に対してパケットが入力され、マルチレイヤ分別部のどのレイヤにパケットが属するかが判別される。
（４）マルチレイヤ分別部は、受信バッファの中で各レイヤー毎に分類して受信パケットを保存する。
【００１６】
（５）パケット結合部では、マルチレイヤ分別部で分別された各レイヤー毎に、複数のパケットをひとつのデータブロックへ結合する。結合中のデータブロックは、前述の第１、第２の受信処理と同様、受信バッファ中で行われる。
（６）受信バッファ使用量観測部は、受信バッファ中で、各レイヤー毎にどれくらいの量のデータが保持されているかを示す値を保持する。
（７）各レイヤー毎に、結合閾値制御部に設定した閾値を越える、あるいは緊急パケット判別部により緊急パケットと認定されるのいずれかの条件が満たされるとパケット結合部における結合処理を停止させる契機が与えられる。
（８）パケットメモリセレクタは、各レイヤ毎の受信バッファ使用量観測部に保持された値と、あらかじめ用意されている各々メモリ容量が異なるパケットメモリの大きさを比較し、結合されたデータブロックよりも大きく、かつ最小のメモリ容量を持つパケットメモリを選択する。
【００１７】
以降（９）〜（１１）の処理は、前述の第１の受信処理の（６）〜（８）の処理と同じである。
（９）結合パケット転送部では、前記パケットメモリセレクタにより選択されたパケットメモリに対して、受信バッファで結合されたデータブロックを転送する。
（１０）受信処理部は、転送されたデータブロックをプロトコル処理部へと渡す。
（１１）受信処理部は、転送されたデータブロック分のパケットメモリをパケット処理装置のもつメモリから補充する。
なお、データブロックの大きさの閾値、タイマーでカウントする一定の時間、あるいは、パケットフラグ判別部で検出する条件は、ユーザの要求に応じて変更可能である。
【発明の効果】
【００１８】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば、下記の通りである。
本発明の、まとめＤＭＡ転送や緊急パケット受信処理を備えたパケット処理装置によれば、緊急の処理を必要とするパケットが高頻度に到着した場合でも、受信性能の低下を引き起こすことなく、安定した受信性能を発揮することが可能であり、かつ、緊急パケット以外のパケットが到着した場合は、まとめＤＭＡ転送の効果による高い受信性能を実現することが可能となる。
【発明を実施するための最良の形態】
【００１９】
以下、図面を参照して本発明の実施例を詳細に説明する。
なお、実施例を説明するための全図において、同一機能を有するものは同一符号を付け、その繰り返しの説明は省略する。
図３は、本発明の実施例のパケット処理装置の受信処理を説明するための図である。
本実施例では、各々メモリ容量が異なるパケットメモリの容量が、それぞれ、２５６バイト、１０２４バイト、４０９６バイトの３種類である場合の構成を示す。ただし、本発明の効果はこれらの大きさ、及び大きさの種類の数にのみ限定されるものではない。
図３において、１１は回線対応部、１３は転送されたデータブロックをプロトコル処理部へ渡したり、パケットメモリ（２０〜２１）を補充する処理を行う受信処理部、１４はプロトコル処理部、１５は結合中のデータブロックを保持する受信バッファ、１６はパケットの結合処理を行うパケット結合部、１７は受信バッファ中のデータブロックをパケットメモリ制御データを元にパケットメモリへと転送する結合パケット転送部、１８はパケットの結合終了の契機を与える結合閾値制御部、１９は緊急パケットを判別してパケット結合終了の契機を与える緊急パケット判別部、２０〜２２は各々メモリ容量が異なるパケットメモリ、２３〜２５は各々の大きさのパケットメモリ（２０〜２１）のアドレスを格納するパケットメモリ制御データ、２６は受信バッファ使用量観測部２７に保持された値を元に、複数のパケットメモリ制御データから一つを選択するパケットメモリ制御データセレクタ、２７は受信バッファ１５の使用量を保持する受信バッファ使用量観測部、２８はパケットメモリ（２０〜２１）のメモリ容量が列挙されているパケットサイズテーブルである。
【００２０】
なお、受信処理部１３、プロトコル処理部１４は、汎用パソコンやワークステーション上で動作するプログラムや、通信上でプログラムと協調して動作するＦＰＧＡ等のハードウェアで構成可能である。
パケットメモリ（２０〜２２）は、汎用パソコンや、通信機器、通信ボード上のメモリとして構成可能である。
パケットメモリ制御データ（２３〜２５）は、通信機器、通信ボード上のＤＭＡコントローラやＦＰＧＡが持つ汎用レジスタとして構成可能である。
結合閾値制御部１８、緊急パケット判別部１９、およびパケットメモリ制御データセレクタ２６は、通信機器、通信ボード上のＦＰＧＡ等の論理回路で構成された比較器や、マイクロコード等のソフトウェアプログラムにより構成可能である。
パケットサイズテーブル２８は、通信機器、通信ボード上のレジスタやメモリなどの記憶領域として構成可能である。
結合パケット転送部１７は、通信機器、通信ボード上のＤＭＡコントローラ等のメモリ間のデータ転送を制御する論理回路、及びプログラムにより構成可能である。
受信バッファ１５は、通信機器、通信ボード上のＦＰＧＡ等が持つ記憶領域や、ＦＩＦＯ等の記憶回路により構成可能である。
受信バッファ使用量観測部２７は、通信機器、通信ボード上のＦＰＧＡ等が持つレジスタや、ＦＩＦＯ等の記憶回路が持つ、レジスタの値として構成可能である。
パケット結合部１６は、通信機器、通信ボード上のＦＰＧＡ等の論理回路や、マイクロコード等のソフトウェアプログラムにより構成可能である。
【００２１】
次に、前述の構成を使用したパケット処理装置の動作を図４を用いて説明する。
図４は、パケット処理装置Ａ２９からパケット処理装置Ｂ３０に対して、回線３１と回線３２をそれぞれ送信用回線、受信用回線として使用し、パケットを転送しようとしている。
２つのパケット処理装置には、それぞれユニークなアドレスが付与される。使用するアドレスは、ＩＰ（Internet Protocol）準拠の３２ｂｉｔのアドレス体系を持つものとし、パケット処理装置Ａ２９が、10.1.2.3であるとする。またデータ転送先のパケット処理装置Ｂ３０は、アドレス10.1.2.4を持っている。
この時、パケット処理装置Ａ２９が送出したパケットは、パケット処理装置Ｂ３０において受信される。パケット処理装置Ｂ３０は、まとめＤＭＡ転送により、図５で示すように複数のパケットを一つのデータブロックとして結合して、パケットメモリに転送し、その後必要なプロトコル処理を行う。
【００２２】
［具体的な実装例と、論理構成図との対応］
まず、本実施例を、汎用パソコンの持つＰＣＩ拡張バスに搭載することで動作する通信カード（Network Interface Card；以下、ＮＩＣという。）と、ＮＩＣを駆動するために、汎用パソコン上で動作しているオペレーティングシステムのネットワークデバイスドライバに実装した具体例を図６に示す。
図６を用いて、ＮＩＣとネットワークデバイスドライバの動作を解説するとともに、その動作と図３の対応を明らかにする。図中の番号に従い、ネットワークデバイスドライバおよびＮＩＣは以下の用に動作する。
（１）オペレーティングシステムのカーネルは、通信カードを受信可能な状態に設定する前に、受信したパケットを格納する為のバッファ領域を確保する。ここでは、２５６バイト、１０２４バイト、４０９６バイトの３種類の大きさのバッファ（５７〜５９）を確保する。
（２）確保したバッファの受信状態や物理メモリアドレスを、バッファディスクリプタ（Buffer Descriptor for Reception；以下、ＲｘＢＤという。）（６０〜６２）と呼ばれるデータ構造体に記録する。ＲｘＢＤ（６０〜６２）は、一つのバッファに対して一つが対応して用いられ、複数のＲｘＢＤ（６０〜６２）はリング状（またはチェイン状）のデータ構造で管理されている。また、各サイズのバッファを管理しているＲｘＢＤ（６０〜６２）は、それぞれ別々のリングにより管理されている。
つまり、図中では、２５６バイト用のリング、１０２４バイト用のリング、４０９６バイト用のリングの３種類のリングが存在する。ＲｘＢＤ（６０〜６２）は、ＮＩＣに対してＤＭＡ転送先のアドレスを指定する時に使用される。また、ＲｘＢＤ内の転送済みフラグを確認することによって、どのパケットバッファに既にＤＭＡ転送されたデータブロックが格納されているかを確認することができる。
【００２３】
（３）各ＲｘＢＤリングに属するＲｘＢＤ（６０〜６２）を、通信カード上のＤＭＡ転送開始アドレスレジスタ５６に登録する。レジスタは、ＲｘＢＤのリング毎に一つずつ用意されている。
（４）ネットワークデバイスドライバは、通信カード上のＤＭＡコントローラ５３における、まとめＤＭＡ転送を制御するために、受信したパケットがどれくらいのサイズまで結合されたらＤＭＡ転送を開始するかを表す閾値をＤＭＡコントローラ内のレジスタに設定する。
（５）この時点で、ネットワークデバイスドライバは、通信ボードを受信可能状態にする為の操作を行う。例えば、ＤＭＡ転送機能をイネーブル状態にする。
（６）通信回線上からパケット５０が到着する。
（７）通信カード上のＭＡＣフレーマ５１が、到着したパケットを受信ＦＩＦＯメモリ５２へ保存する。また、同時に、ＤＭＡコントローラ５３に対して、パケットが受信ＦＩＦＯメモリ５１に保存されたことを通知する。
【００２４】
（８）受信ＦＩＦＯメモリ５２は、メモリ内のどれくらいの容量が、到着したパケットによって占められているかを、ＲｘＦＩＦＯメモリ使用量レジスタ５４に保持する。
（９）ＤＭＡコントローラ５３は、受信ＦＩＦＯメモリ５２に最後に蓄えられたパケットのヘッダを確認し、緊急パケットであるか否かを判別する。ここで、緊急パケットとは、ＴＣＰ／ＩＰを用いた通信で使用される応答確認要求（ＡＣＫパケット）であるとする。
（１０）ＡＣＫパケットでない場合、ＤＭＡコントローラ５３は、ＲｘＦＩＦＯメモリ使用量レジスタ５４を検査して、ステップ４で設定した閾値よりも大きいか否かを判別する。
閾値よりも小さいときはステップ６に戻り、再びパケットを受信するのを待つ。
（１１）ＡＣＫパケットであった場合、バッファディスクリプタ選択回路５５は、ＲｘＦＩＦＯメモリ使用量レジスタ５４に保持された値と、ステップ３でＤＭＡ転送開始アドレスレジスタ５６に登録されたＲｘＢＤ（５７〜５９）から得られる各パケットバッファのメモリ容量を比較し、ＲｘＦＩＦＯメモリ使用量レジスタ５４の値よりも大きく、かつ最小のメモリ容量を持つパケットバッファに対応するＤＭＡ転送開始アドレスを取得する。
【００２５】
（１２）ＤＭＡコントローラ５３は、バッファディスクリプタ選択回路５５で選択されたパケットバッファのアドレスに基づいて、受信ＦＩＦＯメモリ５２に蓄えられた全てのパケットを、ひとまとめのデータブロックとして一括して、パケットバッファ（５７〜５９）にＤＭＡ転送を行う。
（１３）それと共に、データブロックの転送先となるパケットバッファ（５７〜５９）を管理するＲｘＢＤ（６０〜６２）に、転送済みフラグを立てる。
（１４）ＤＭＡ転送が完了したことを示すハードウェア割り込みを発生する。
（１５）デバイスドライバは、ハードウェア割り込みを検知すると、ＲｘＢＤ（６０〜６２）の転送済みフラグを調査して、転送済みフラグの立ったパケットバッファ内のパケットを、ＯＳの受信パケットキュー６３に挿入し、必要なプロトコル処理を行わせる。
（１６）ＯＳに渡したパケットバッファ分だけ、新たにメモリから受信用のバッファ領域を確保し、その物理メモリアドレスをＲｘＢＤ（６０〜６２）に登録する。
（１７）ステップ６に戻る。
【００２６】
プロトコル処理された受信パケットのバッファ領域は、アプリケーションのバッファ領域へコピーされるか、必要な処理が終了すると解放される。
前述の動作を、模式的に表したのが図７である。
通信回線、通信カード、デバイスドライバ、オペレーティングシステムで行われる処理を示す。それぞれの直線において、上部から下部にしたがって時間が進んでいる様子を表している。
これにより、緊急パケットが届いて、受信ＦＩＦＯメモリ５２内に、十分大きなデータブロックが溜まっていなくても、大きなパケットメモリ領域を使用することなく、メモリを有効活用できる他、高負荷な、パケットメモリ再割り当て処理（未使用領域のサーチ）も必要がなくなる。
また、緊急パケットが届いていなければ、大きなメモリ容量のデータブロックで、まとめＤＭＡ転送を行うことによる高速転送が可能となる。
図６のうち、ＯＳ、およびデバイスドライバという四角で囲われている部分は、汎用パソコンのプロセッサ上で動作する。また、図６と、図３との対応関係は、以下の表１のようになる。
【００２７】
【表１】
2008011015.tif 000003
【００２８】
図３において、回線対応部１１から入力されたパケットは、受信バッファ１５へ転送される。受信バッファ１５に転送されるパケットは、プロトコルのヘッダ部分とコンテンツ部分の両方が入っているものとする。
パケット結合部１６は、受信バッファ１５に存在する複数のパケットを一つのデータブロックに結合する。同時に、受信バッファ使用量観測部２７の値を、受信バッファ１５に存在するデータ量の総数にアップデートする。
一方、結合閾値制御部１８は、受信バッファ使用量観測部２７が、設定された閾値を越えないか否かを判別する。また、緊急パケット判別部１９は、到着したパケットが緊急の処理を必要とするパケットであるか否かを判別する。
ここで、結合閾値判別部１８において閾値を越えたと判別される、或いは、緊急パケット判別部１９において緊急パケットが到着したことが判別されたとする。
この時、パケットメモリ制御データセレクタ２６は、各々メモリ容量が異なるパケットメモリ（２０〜２２）を管理する、パケットメモリ制御データ（２３〜２５）のうち、受信バッファ使用量観測部２７に保持された値よりも大きく、かつ最小のメモリ容量のパケットメモリを管理するパケットメモリ制御データを選択する。
結合パケット転送部１７は、選択されたパケットメモリ制御データ内に指定されているパケットメモリのアドレスに対して、受信バッファ１５に存在する全てのデータを一括して転送処理する。
受信処理部１３は、転送されたパケットメモリをプロトコル処理部１４に受け渡す。プロトコル処理部１４において、パケット処理装置において必要な処理が行われる。
また、受信処理部１３では、プロトコル処理部１４に渡したパケットメモリ１２を補充するために新たにメモリ領域を確保し、パケットメモリ制御データに登録する。
【００２９】
図８は、本実施例のデバイスを初期化するための処理手順を示すフローチャートである。
まず、デバイスを初期化し（ステップ１００）、結合閾値制御部１８の閾値の設定をＣｓとし（ステップ１０１）、Ｃｓが０より大きい（Ｃｓ＞０）か否かを判断する（ステップ１０２）。ステップ１０２において、Ｃｓが０より大きくない場合、Ｃｓの値としてデフォルト値を設定する（ステップ１０３）。また、ステップ１０２において、Ｃｓが０より大きい場合、緊急パケット判別部１９のフラグ制御を行う（ステップ１０４）。
図９は、本実施例をパケットメモリ１２を初期化するための処理手順を示すフローチャートである。
まず、パケットメモリを初期化し（ステップ１１０）、２５６バイトのパケットメモリ２０のメモリ容量の総量をＢ２５６、１０２４バイトのパケットメモリ２１のメモリ容量の総量をＢ１０２４、４０９６バイトのパケットメモリ２２のメモリ容量の総量をＢ４０９６とする（ステップ１１１）。
各パケットメモリ（２０〜２２）のメモリ容量の総量をＢｓとし（ステップ１１２）、Ｂｓをパケットサイズテーブル２８に登録する（ステップ１１３）。
次に、Ｂｓに登録されているサイズのパケットメモリをＯＳから確保し（ステップ１１４）、各パケットメモリ（２０〜２２）のアドレスをパケットメモリ制御データに登録する（ステップ１１５）。
【００３０】
図１０は、本実施例において、パケットを受信してから、受信処理部１３を呼び出すまでの処理手順を示すフローチャートである。
回線対応部１１においてパケットを受信すると（ステップ１２０）、当該受信したパケットを、受信バッファ中のデータブロックに結合し（ステップ１２１）、受信バッファ使用量観測部２７の値をアップデート（現在の値＋受信したパケットサイズ）する（ステップ１２２）。
次に、受信バッファ使用量観測部２７の値をＭｓとし（ステップ１２３）、パケットに緊急フラグが与えられているか否かを判別する（ステップ１２４）。
次に、緊急フラグが有効、あるいは、ＭｓがＢｓより大きい（Ｍｓ＞Ｂｓ）か否かを判断し（ステップ１２５）、ステップ１２５において、緊急フラグが無効、および、ＭｓがＢｓより小さい（Ｂｓ≦Ｃｓ）の場合、ステップ１２０〜ステップ１２５を繰り返す。
また、ステップ１２５において、緊急フラグが有効、あるいは、ＭｓがＢｓより大きい（Ｍｓ＞Ｂｓ）場合、パケットサイズテーブル２８とＭｓとの値を比較し、Ｍｓよりも大きく、かつ最小のメモリ容量を持つパケットメモリのパケットメモリ制御データを選択する（ステップ１２６）。
次に、選択したパケットメモリ制御データの使用済みフラグをＯＮとし（ステップ１２７）、選択したパケットメモリ制御データよりパケットメモリ（２０〜２２）のアドレス（Ｂａｄ）を取得する（ステップ１２８）。
アドレス（Ｂａｄ）を元に、結合中のデータブロックをパケットメモリに転送し（ステップ１２９）、割り込みを発生させる（ステップ１３０）。
【００３１】
図１１は、本実施例の受信処理部１３の、プロトコル処理部１４へのデータの受け渡しとパケットメモリ再割り当ての処理手順を示すフローチャートである。
受信処理部１３が、ハードウェア割り込みの発生を検知すると（ステップ１４０）、それぞれメモリ容量が異なるパケットメモリに対するパケットメモリ制御データを検査し（ステップ１４１）、使用済みフラグがＯＮとなっているか否かを、全パケットメモリ制御データに対して実施する（ステップ１４２、ステップ１４７）。
ステップ１４２において、使用済みフラグがＯＮとなっていると、パケットメモリ制御データ中のパケットメモリのアドレスをプロトコル処理部１４に渡す（ステップ１４３）。
次に、使用済みパケットメモリと同じサイズのパケットメモリを再割り当てを行い（ステップ１４４）、再割り当てを行ったパケットメモリのアドレスを、パケットメモリ制御データへ登録し（ステップ１４５）、再割り当てを行ったパケットメモリに対するパケットメモリ制御データの使用済みフラグを初期化する（ステップ１４６）。
【００３２】
ここで、パケットメモリの再割り当て処理において存在するトレードオフを図１２に示す。
パケットメモリが小さい場合、パケットメモリ制御データを用いて、結合パケット転送部１７を制御する回数が多くなるため、ＤＭＡ転送の効率は低くなる。また、プロトコル処理部１４において行われる処理回数も多くなるため、パケット処理装置のプロセッサの負荷が高くなる。しかし、パケットメモリの再割り当て処理においては、ＯＳ（オペレーティングシステム）の持つメモリは小さい単位で管理されており、サーチするパケットメモリのサイズが小さい程、未使用領域の発見は比較的容易になり、再割り当て処理負荷は低くなる。
対して、パケットメモリが大きい場合は、ＤＭＡ転送の効率が高く、プロトコル処理負荷も低いが、パケットメモリ１２の再割り当てにおける未使用メモリ領域の発見が困難となり、再割り当て処理負荷が高くなる。
【００３３】
なお、本実施例において、タイマーを用いることによって、パケット処理装置に到着した複数のパケットが結合される最大の時間を指定することも可能である。
これによって、長時間パケットが到着せず結合閾値制御部１８に設定された閾値に到達しなくても、あるいは、緊急パケット判別部１９によって緊急パケットと認定されるパケットが到着されなくても、ある時間後には必ずデータブロックへの結合が停止され、パケットメモリ１２への転送が行われる。
また、本実施例では、パケット処理装置に到着した複数のパケットを判別する複数のパケットフラグ判別部と、受信した複数のパケットを受信バッファ１５で異なるレイヤー毎に分別するマルチレイヤ分別部とを持つことによって、あらかじめパケットを一定の条件のもとに分類した後に、ひとつのデータブロックに結合することも可能である。
その場合に、パケットフラグ判別部で行われる判別条件としては、例えば、（１）ＴＣＰ／ＵＤＰフロー単位のような、一つの意味のある通信の単位で分類する方法、あるいは、（２）ＩＰフラグメントにより、元々１つのパケットが分割して転送されることがあるが、元々同一のパケットに属していたＩＰフラグメント化されたパケットを１つの分類単位として分類する方法がある。
【００３４】
なお、異なるＴＣＰフローと判別するには、一般的に、送信元ＩＰアドレス、送信先ＩＰアドレス、送信元ポート番号、送信先ポート番号の組み合わせにより判別される。受信バッファ１５中であらかじめフロー毎に分類することによって、フロー毎にパケットを結合することが可能となるため、パケット処理装置が行うプロトコル処理が容易になるという利点がある。
ＩＰフラグメントとは、パケットの送信側で、パケットの大きさが通信回線で伝送可能な最大の大きさ（ＭＴＵサイズ、Maximum transmission unit）よりも大きい場合、送信装置のＩＰ層においてパケットをＭＴＵサイズ毎の大きさに分割する処理である。分割した結果生成されるパケットをＩＰフラグメントと呼ぶ。
受信側のパケット処理装置では、各々のＩＰフラグメントに対して、再度元の大きさのＩＰパケットに再構築する処理を行う必要がある。この処理をデフラグメントと呼ぶ。そして、パケットフラグ判別部において、同一のＩＰパケットから分割された複数のＩＰフラグメントを、マルチレイヤ分別部の別々のレイヤに分別し、結合することによって、パケット処理装置で行われるデフラグメント処理が容易になるという利点がある。
【００３５】
以上説明したように、本実施例によれば、緊急パケットが高頻度で多量に到着した場合でも、結合されたデータブロックの大きさに最も適したパケットメモリを動的に選択してデータブロックを転送し、その後、最も適したパケットメモリの再割り当て処理を行うために、以下の問題点を解決することができる。
（１）まとめＤＭＡ転送では、緊急に処理することが必要なパケットが頻繁に到着し、パケットの結合が十分に行われないでＤＭＡ転送が開始される場合でも、パケットメモリのサイズは考えられる最大の大きさで準備する必要がある。つまり、大きなパケットメモリに対して、小さな緊急パケットを格納することになり、パケット処理装置のメモリ使用効率の低下が引き起こされる。その結果、メモリ不足となり、受信性能が低下する。
（２）まとめＤＭＡ転送では、必ず考えられる最大の大きさでパケットメモリを準備するために、パケットメモリを準備する処理が高負荷となる。つまり、パケット処理装置に用いられるＯＳ上では、通常メモリは比較的小さい単位で管理されており（２のべき乗システムや、スラブキャッシュを参照）、大きなメモリを確保する必要がある場合は、複数の未使用の小さい単位のメモリを検索して確保する必要がある。
また、パケット処理装置が持つ回線対応部がスキャターギャザーＤＭＡ機構に対応していない場合は、複数の領域に分割されたメモリを一つのパケットメモリとして使用することができず、大きな連続したメモリ領域を確保するために、さらにパケットメモリを準備する処理が高負荷となる。その結果、受信性能が低下する。
以上、本発明者によってなされた発明を、前記実施例に基づき具体的に説明したが、本発明は、前記実施例に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは勿論である。
【図面の簡単な説明】
【００３６】
【図１】従来のパケット処理装置の受信処理を説明するための図である。
【図２】従来の、まとめＤＭＡ転送と緊急パケット受信処理を備えたパケット処理装置の受信処理を説明するための図である。
【図３】本発明の実施例のパケット処理装置の受信処理を説明するための図である。
【図４】本発明の実施例のパケット処理装置の接続構成を説明するための図である。
【図５】本発明の実施例のパケット処理装置において、まとめＤＭＡ転送における複数のパケットの一つのデータブロックへの結合の様子を説明するための図である。
【図６】本発明の実施例のパケット処理装置を、汎用パソコンの持つＰＣＩ拡張バスに搭載することで動作する通信カード（Network Interface Card）と、通信カードを駆動するために、汎用パソコン上で動作しているオペレーティングシステムのネットワークデバイスドライバに実装した具体例を示す図である。
【図７】図６に示す具体的な実施例における動作を、通信回線、通信カード、デバイスドライバ、オペレーティングシステムの観点から模式的に表すための図である。
【図８】本発明の実施例のデバイスを初期化するための処理手順を示すフローチャートである。
【図９】本発明の実施例をパケットメモリを初期化するための処理手順を示すフローチャートである。
【図１０】本発明の実施例において、パケットを受信してから、受信処理部を呼び出すまでの処理手順を示すフローチャートである。
【図１１】本発明の実施例の受信処理部の、プロトコル処理部へのデータの受け渡しとパケットメモリ再割り当ての処理手順を示すフローチャートである。
【図１２】本発明の実施例において、パケットメモリの再割り当て処理において存在するトレードオフを示す図である。
【符号の説明】
【００３７】
１１  回線対応部
１２  パケットメモリ
１３  受信処理部
１４  プロトコル処理部
１５  受信バッファ
１６  パケット結合部
１７  結合パケット転送部
１８  結合閾値制御部
１９  緊急パケット判別部
２０〜２２，５７〜５９  パケットメモリ
２３〜２５  パケットメモリ制御データ
２６  パケットメモリ制御データセレクタ
２７  受信バッファ使用量観測部
２８  パケットサイズテーブル
２９  パケット処理装置Ａ
３０  パケット処理装置Ｂ
３１  パケット処理装置Ａからの送信回線
３２  パケット処理装置Ａの受信回線
５０  パケット
５１  ＭＡＣフレーマ
５２  受信ＦＩＦＯメモリ
５３  ＤＭＡコントローラ
５４  ＲｘＦＩＦＯメモリ使用量レジスタ
５５  バッファディスクリプタ選択回路
５６  ＤＭＡ転送開始アドレスレジスタ
６０〜６２  バッファディスクリプタ（Buffer Descriptor for Reception）
６３  受信パケットキュー
【図１】
2008011015.tif 000004
【図２】
2008011015.tif 000005
【図３】
2008011015.tif 000006
【図４】
2008011015.tif 000007
【図５】
2008011015.tif 000008
【図６】
2008011015.tif 000009
【図７】
2008011015.tif 000010
【図８】
2008011015.tif 000011
【図９】
2008011015.tif 000012
【図１０】
2008011015.tif 000013
【図１１】
2008011015.tif 000014
【図１２】
2008011015.tif 000015