(57)【要約】      （修正有）【課題】アグリゲーションパケットの受信処理の高速化を実現する通信装置を提供する。【解決手段】通信装置は、複数のパケットから構成されたアグリゲーションパケットを受信し、アグリゲーションパケットを構成する複数のパケットの各パケットを所定の基準に基づいて複数のグループに分類し、複数のグループそれぞれにあらかじめ設定された基準のアドレスに基づいて、複数のパケットの各パケットの転送先のアドレスを決定し、複数のパケットの各パケットを、決定された転送先のアドレスに応じてメモリに転送し、分類されたグループ毎に、グループ化されたパケット群に対する受信処理を行う。【選択図】図１
2018139376.tif 000002
【特許請求の範囲】
【請求項１】
通信装置であって、
複数のパケットから構成されたアグリゲーションパケットを受信する受信手段と、
前記受信手段によって受信されたアグリゲーションパケットを構成する複数のパケットの各パケットを、所定の基準に基づいて複数のグループに分類する分類手段と、
前記複数のグループそれぞれにあらかじめ設定された基準のアドレスに基づいて、前記複数のパケットの各パケットの転送先のアドレスを決定する決定手段と、
前記複数のパケットの各パケットを、前記決定された転送先のアドレスに応じてメモリに転送する転送手段と、
前記分類されたグループ毎に、グループ化されたパケット群に対する受信処理を行う受信処理手段と、
を有することを特徴とする通信装置。
【請求項２】
前記分類手段は、前記複数のパケットの各パケットに含まれる、前記通信装置と他の通信装置との通信のプロトコルの情報に基づいて、当該各パケットを前記複数のグループに分類することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記分類手段は、前記複数のパケットの各パケットに含まれる、前記通信装置と他の通信装置とを接続するために必要な情報に基づいて、当該各パケットを前記複数のグループに分類することを特徴とする請求項２に記載の通信装置。
【請求項４】
前記分類手段は、前記複数のパケットの各パケットに含まれる、前記受信処理のための優先度に基づいて、当該各パケットを前記複数のグループに分類することを特徴とする請求項１に記載の通信装置。
【請求項５】
前記決定手段は、前記設定された基準のアドレスと所定のオフセット値に基づいて、前記各パケットの前記転送先のアドレスを決定することを特徴とする請求項１から４のいずれか１項に記載の通信装置。
【請求項６】
前記所定のオフセットは、前記各パケットのサイズに基づいて定められる値であることを特徴とする請求項５に記載の通信装置。
【請求項７】
前記転送手段は、前記複数のパケットを前記メモリに転送したことに応じて、前記受信処理手段に対して転送完了通知を行い、前記受信処理手段は、前記転送完了通知を受けたことに応じて、前記受信処理を行うことを特徴とする請求項１から６のいずれか１項に記載の通信装置。
【請求項８】
前記受信処理手段は、前記グループ化されたパケット群の各パケットに対してＭＡＣヘッダの処理を行うことを特徴とする請求項１から７のいずれか１項に記載の通信装置。
【請求項９】
前記受信処理手段は、前記グループ化されたパケット群の各パケットに対してＴＣＰ／ＩＰに関する処理を行うことを特徴とする請求項１から８のいずれか１項に記載の通信装置。
【請求項１０】
前記受信処理手段は、前記分類されたグループに対する前記受信処理に必要な情報を、前記分類されたグループごとに前記メモリにロードし、当該ロードされた情報を用いて、前記分類されたグループ毎に、前記受信処理を行うことを特徴とする請求項１から９のいずれか１項に記載の通信装置。
【請求項１１】
前記受信処理が行われたパケットに対して所定のアプリケーション処理を行うアプリケーション処理部をさらに有し、
前記受信処理手段は、一つのグループに属するパケット群に対する前記受信処理が完了したことに応じて、前記アプリケーション処理部に対して受信完了通知を行うことを特徴とする請求項１から１０のいずれか１項に記載の通信装置。
【請求項１２】
通信装置の制御方法であって、
複数のパケットから構成されたアグリゲーションパケットを受信する受信工程と、
前記受信されたアグリゲーションパケットを構成する複数のパケットの各パケットを、所定の基準に基づいて複数のグループに分類する分類工程と、
前記複数のグループそれぞれにあらかじめ設定された基準のアドレスに基づいて、前記複数のパケットの各パケットの転送先のアドレスを決定する決定工程と、
前記複数のパケットの各パケットを、前記決定された転送先のアドレスに応じてメモリに転送する転送工程と、
前記分類されたグループ毎に、グループ化されたパケット群に対する受信処理を行う受信処理工程と、
を有することを特徴とする通信装置の制御方法。
【請求項１３】
コンピュータを、請求項１から１１のいずれか１項に記載の通信装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケットの受信処理のための技術に関する。
【背景技術】
【０００２】
近年、通信処理にかかる受信処理の高速化が望まれている。特許文献１では、複数の分散処理部を設け、各分散処理部に対して処理負荷が均等となるようにパケットを振り分け、受信処理を行う技術について開示されている。また、特許文献２では、ヘッダ情報を解析することによるパケットの振り分けを行う技術について開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−３２９７０号公報
【特許文献２】特開２０１４−１１２９７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記文献によれば、受信したパケットを高速に受信処理することが可能である。しかしながら、アグリゲーションされた（集約された）パケット群（以下、アグリゲーションパケット）をネットワークから受信して、当該アグリゲーションパケットを構成する各パケットに対して受信処理を行う場合の高速化については、特許文献１および２には開示されていない。
【０００５】
本発明は、上記課題に鑑みてなされたものであり、アグリゲーションパケットの受信処理の高速化を実現することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するための一手段として、本発明の通信装置は以下の構成を有する。すなわち、通信装置であって、複数のパケットから構成されたアグリゲーションパケットを受信する受信手段と、受信されたアグリゲーションパケットを構成する前記複数のパケットの各パケットを、所定の基準に基づいて複数のグループに分類する分類手段と、前記複数のグループそれぞれにあらかじめ設定された基準のアドレスに基づいて、前記複数のパケットの各パケットの転送先のアドレスを決定する決定手段と、前記複数のパケットの各パケットを、前記決定された転送先のアドレスに応じてメモリに転送する転送手段と、前記分類されたグループ毎に、グループ化されたパケット群に対する受信処理を行う受信処理手段と、を有する。
【発明の効果】
【０００７】
本発明によれば、アグリゲーションパケットの受信処理の高速化が実現される。
【図面の簡単な説明】
【０００８】
【図１】通信装置１０の概略的な構成を示すブロック図。
【図２】レジスタ部１０７に配置される各レジスタの名前と各レジスタの用途を示す図。
【図３】通信装置１０の受信処理のフロー図。
【図４】ベースアドレス／オフセット量を用いたデータ転送を説明するための図。
【図５】転送部１００によるデータ転送の結果を示す図。
【図６】プロトコル処理部１１２による処理のフローチャート。
【図７】転送部１００によるデータ転送の結果を示す図（変形例２）。
【発明を実施するための形態】
【０００９】
以下、添付の図面を参照して、本発明をその実施形態に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
【００１０】
図１を参照して、本発明の実施形態における通信装置１０の構成を説明する。図１は、通信装置１０の概略的な構成を示すブロック図である。通信装置１０は、スマートフォン等のモバイル端末、ＰＣ、デジタルカメラ、プリンタ、プロジェクタ、ディスプレイ装置等であってもよいし、これらの装置に取り付け可能な別体の装置であってもよい。
【００１１】
通信装置１０のバス１１１には、以下のモジュールが接続されている。すなわち、転送部１００、プロトコル処理部１１２、主制御部１１３、主記憶部１１４、補助記憶部１１５の５つのモジュールがバス１１１に接続されている。
【００１２】
主制御部１１３は、通信装置１０により実行される処理全般の処理・制御を担う。プロトコル処理部１１２は、通信装置１０が他機器とネットワーク１１６を介した通信を実行する際の通信処理の制御を担う。主記憶部１１４は、通信装置１０におけるメインの記憶領域であり、主に主制御部１１３が利用する。補助記憶部１１５は、通信装置１０における補助的なメモリである。補助記憶部１１５は、コスト面でサイズ／アクセスレイテンシをともに満足できるメモリの搭載が難しい場合に、高速なメモリをサイズ制限した（コストを抑えた）メモリとして、補助的に用意される。このようなメモリ構成により、受信したパケットの用途種別により補助記憶部１１５、主記憶部１１４を使い分けることができる。転送部１００は、インターフェース部１１０からのデータを主記憶部１１４、または、補助記憶部１１５へ転送する機能を持つ。また、転送部１００は、主記憶部１１４、または、補助記憶部１１５のデータをインターフェース部１１０に送る機能を持つ。転送部１００は、ＤＭＡ転送を実行するためのＤＭＡコントローラであってもよい。転送部１００の詳細については後述する。
【００１３】
インターフェース部１１０は、転送部１００からのデータをネットワーク１１６に送信する機能を持つ。また、インターフェース部１１０は、ネットワーク１１６からのデータを転送部１００に送る機能を持つ。
【００１４】
なお、図１に示す転送部１００、プロトコル処理部１１２、主制御部１１３は、それぞれハードウェア又はソフトウェアによって構成される。ソフトウェアとして構成される場合には、各機能を実現するためのコンピュータプログラムが主記憶部１１４（または補助記憶部１１５）に記憶され、通信装置１０が備えるＣＰＵ（Central Processing Unit）が当該プログラムを実行することによって該機能が実現される。
【００１５】
次に、転送部１００について詳細に説明する。転送部１００は、３つのサブモジュール（転送制御部１０１、転送実行部１０６、レジスタ部１０７）より構成される。転送制御部１０１は、転送部１００の全体を制御するサブモジュールである。転送制御部１０１は、レジスタ部１０７にセットされたコマンド（命令）、および、インターフェース部１１０から転送実行部１０６に転送されたデータを解析し、転送実行部１０６に対して必要な指示（転送開始指示や転送先の通知）を行う。また、転送制御部１０１は、転送実行部１０６による転送の進捗に応じて、転送部１００の外部へ転送部１００の状態を通知する。転送実行部１０６は、転送制御部１０１による転送指示に応じて、データの転送を行う。レジスタ部１０７は、転送部１００に係る処理のためのコマンドやパラメータ情報等をセット（設定）する複数のレジスタを有する。レジスタ部１０７については、図２を用いて後述する。
【００１６】
ここで、転送制御部１０１について詳細に説明する。転送制御部１０１は、解析部１０２、転送先決定部１０３、割り込み通知部１０４から構成される。解析部１０２は、インターフェース部１１０から転送実行部１０６に到着したパケットの解析（例えばパケットの種別の解析）を行う。転送先決定部１０３は、インターフェース部１１０から転送されるパケット（ヘッダとデータ）の転送先を決定する。転送先決定部１０３は、転送先決定部１０３により決定された転送先の情報を転送実行部１０６へ通知する。転送実行部１０６は転送先の情報が通知されたことに応じて、インターフェース部１１０から受信データを取り込んで、通知された転送先に従ってメモリ（主記憶部１１４や補助記憶部１１５）に転送する。ここで、転送実行部１０６によるインターフェース部１１０からのデータ転送時に、解析部１０２も同一データのスヌープが可能な構成にしても良い。割り込み通知部１０４は、レジスタ部１０７の設定に基づいて、転送部１００の外部（例えばプロトコル処理部１１２や主制御部１１３）へ転送部１００の状態通知を行う。
【００１７】
次に、レジスタ部１０７について説明する。図２に、レジスタ部１０７に配置される各レジスタの名前と当該各レジスタの用途を示す。なお、ここでは、解析部１０２が、インターフェース部１１０から転送実行部１０６に到着したパケットの種別をＡ〜Ｃ（パケット種別Ａ〜Ｃ）、またはそれら以外（パケット種別Ｘ）と判定する場合を想定する。
【００１８】
ＲＣＶ＿ＮＴＦ２０１は、プロトコル処理部１１２が、インターフェース部１１０のステータス（インターフェース部１１０にパケット（アグリゲーションパケットまたは単一のパケットであるシングルパケット）が到着したか否か）を表示するためのレジスタである。具体的には、インターフェース部１１０にパケットが到着した際に、レジスタ部１０７に対して受信通知を行うために、インターフェース部１１０がパケット到着を示す値（ステータス信号）をＲＣＶ＿ＮＴＦ２０１にセットする。
【００１９】
ＰＫＴＡ＿ＰＲＡＭＳ２０２は、パケット種別Ａのパラメータをセットするためのレジスタである。解析部１０２は、ＰＫＴＡ＿ＰＲＡＭＳ２０２にセットされたパラメータに基づいて、パケット種別の解析／判定を行う。ＰＫＴＡ＿ＰＲＡＭＳ２０２には、例えば、通信装置１０が他の特定の通信装置と接続するために必要な通信プロトコルの情報がセットされる。通信装置１０がＴＣＰ／ＩＰ（Transmission Control Protocol／Internet Protocol）で通信を行う場合は、ＰＫＴＡ＿ＰＲＡＭＳ２０２には、例えば、ソケット情報（ＩＰアドレスとＴＣＰポート番号）がセットされる。
【００２０】
ＰＫＴＡ＿ＡＤＤＲ２０３は、解析部１０２によりパケット種別Ａと解析されたパケットの転送先を転送先決定部１０３が決定するために、その転送先の基準となるアドレス（ベースアドレス）をプロトコル処理部１１２がセットするレジスタである。ベースアドレスの詳細については後述する。ＰＫＴＢ＿ＰＲＡＭＳ２０４、ＰＫＴＢ＿ＡＤＤＲ２０５、ＰＫＴＣ＿ＰＲＡＭＳ２０６、ＰＫＴＣ＿ＡＤＤＲ２０７もそれぞれ、パケット種別Ｂ／Ｃのパラメータ、および、転送先のベースアドレスをセットするレジスタである。これらのレジスタも同様に、プロトコル処理部１１２によりセットされる。
【００２１】
ＰＫＴＸ＿ＡＤＤＲ２０８は、パケット種別Ａ〜Ｃの何れにも分類されなかったパケットが転送される際のベースアドレスをセットするレジスタである。ＯＦＦＳＥＴ２０９は、分類されたパケットが実際に主記憶部１１４、または、補助記憶部１１５に転送される際に必要なオフセット量（オフセット位置）を設定するレジスタである。ＰＫＴＸ＿ＡＤＤＲ２０８とＦＦＳＥＴ２０９は、プロトコル処理部１１２によりセットされる。ベースアドレス／オフセット量を用いたデータ転送の詳細については後述する。
【００２２】
ＩＮＴ＿ＫＩＮＤ２１０は、割り込み通知部１０４による、プロトコル処理部１１２または主制御部１１３への割り込み通知（転送部１００の状態の通知）の方法をセットするレジスタである。ＩＮＴ＿ＫＩＮＤ２１０には、例えば、主制御部１１３またはプロトコル処理部１１２のいずれか、または両方に通知をする等、割り込みの通知先がセットされ得る。また、ＩＮＴ＿ＫＩＮＤ２１０には、通知タイミングがセットされてもよい。例えば、ＩＮＴ＿ＫＩＮＤ２１０に、インターフェース部１１０からのアグリゲーションパケットを構成するパケット群が主記憶部１１４または主制御部１１３に全て転送完了したタイミングで通知するとセットされ得る。また、例えば、アグリゲーションパケットの中に、早くプロトコル処理部１１２が受信処理を開始すべきパケット種別があれば、そのパケット種別、および当該パケット種別のパケットをいずれかの記憶部に転送完了したタイミングで通知するとセットされ得る。このように、リアルタイム性が要求されるようなパケットに対しても、レジスタ部１０７への設定により、早くプロトコル処理部１１２が受信処理を開始できるようになる。
【００２３】
ＳＴＡＲＴ２１１は、プロトコル処理部１１２により、転送部１００にデータ転送の開始を指示するためのコマンド（命令）をセットするためのレジスタである。
【００２４】
以上がレジスタ部１０７の例である。なお、本実施形態では、パケット種別３つまでレジスタに登録できる構成としたが（すなわち、パケット種別Ａ〜Ｃ）、システム要件に応じて増減させてもよい。
【００２５】
次に、通信装置１０の処理フローについて図３を参照して説明する。図３は、パケット群（ＰＫＴ１（パケット１）〜ＰＫＴｎ（パケットｎ））を含むアグリゲーションパケットを受信し、受信処理を行う処理フローである。
【００２６】
プロトコル処理部１１２は、アグリゲーションパケットの受信開始タイミングを検知するために、レジスタ部１０７のＲＤＶ＿ＮＴＦ２０１を定期的に確認する（Ｓ３０１）。インターフェース部１１０にパケットが到着したことを受けて、レジスタ部１０７に受信通知を行うために、インターフェース部１１０がＲＣＶ＿ＮＴＦ２０１にパケット到着を示す値（ステータス信号）をセットする（Ｓ３０２）。これにより、プロトコル処理部１１２は、インターフェース部１１０におけるパケットの受信を確認し、レジスタ部１０７のＳＴＡＲＴ２１１に、データ転送の開始を指示するためのコマンド（命令）をセットする（Ｓ３０３）。
【００２７】
ＳＴＡＲＴ２１１にデータ転送の開始を指示するためのコマンドがセットされたことを受けて、転送部１００は、転送部１００の初期化を行う（Ｓ３０４）。具体的には、転送制御部１０１が、レジスタ部１０７にセットされたコマンドの解析と、それによる割り込み通知の設定等を行う。そして、転送制御部１０１は、転送実行部１０６に対して、インターフェース部１１０からのデータ受信の開始を指示する（Ｓ３０５）。これを受けて、転送実行部１０６は、インターフェース部１１０に転送要求を送信する（Ｓ３０６）。転送要求を受信したインターフェース部１１０は、アグリゲーションパケットを構成するパケットのうちの先頭パケット（ＰＫＴ１（パケット１））のヘッダ（ＰＫＴ１  Ｈｅａｄｅｒ）を転送部１００へ転送する（Ｓ３０７）。
【００２８】
転送制御部１０１は、パケット１のヘッダの取り込みを完了した段階で、転送制御部１０１内の解析部１０２がパケット１のヘッダの解析を行う。続いて、転送制御部１０１内の転送先決定部１０３は、解析部１０２によるパケット１のヘッダ解析結果と、レジスタ部１０７にセットされた値に基づいて、パケット１の転送先を決定する（Ｓ３０８）。例えば、解析部１０２によりパケット１がパケット種別Ａと判定された場合は、転送先決定部１０３は、レジスタ部１０７におけるＰＫＴＡ−ＡＤＤＲ２０３に基づいて当該パケットの転送先を決定する。
【００２９】
転送制御部１０１は、パケット１の転送先を転送実行部１０６に通知し（Ｓ３０９）、転送実行部１０６は、所定のメモリ（例えば補助記憶部１１５）に対してパケット１のヘッダ転送を開始する（Ｓ３１２）。一方、転送制御部１０１は、パケット１のデータ（ＰＫＴ１  Ｄａｔａ）の取り込みの開始を行い（Ｓ３１１）、転送実行部１０６は、パケット１のヘッダに続いて、パケット１のデータの転送を行う（Ｓ３１２）。ここで、転送実行部１０６は、十分な容量のバッファを有している場合には、ヘッダ解析の完了タイミングによらず、パケット１のデータの転送を継続して行ってもよい。
【００３０】
続いて、転送実行部１０６は、パケット２のヘッダの取り込みを実行する（Ｓ３１３）。以後、パケット１と同様に、転送制御部１０１はパケットの解析・転送先の決定を行い（Ｓ３１４）、続いて、転送実行部１０６へ転送先の通知を行う（Ｓ３１５）。そして、転送実行部１０６は、パケット２の転送を行う（Ｓ３１６）。以後、パケット３〜パケットｎについても同様である（Ｓ３１７〜Ｓ３１８）。全てのパケットを転送した転送部１００は、転送完了通知をプロトコル処理部１１２に送信する（Ｓ３１９）。
【００３１】
転送完了通知を受け取ったプロトコル処理部１１２は、パケット種別ごとにグループ化された各グループ単位で受信処理を実行する。すなわち、プロトコル処理部１１２は、パケット種別Ａ、Ｂ、Ｃ、Ｘに分類されたグループＡ、Ｂ、Ｃ、Ｘに対して個別に受信処理を実行する。まず、プロトコル処理部１１２は、最初にパケット種別Ａにグループ化されたパケット群（グループＡのパケット群）の受信処理を行う（Ｓ３２０）。グループ化されたパケット群に対する受信処理の詳細については後述する。パケット種別Ａのパケット群の受信処理が全て完了すると、プロトコル処理部１１２は、パケット種別Ａのパケット群の受信処理の完了通知を、主制御部１１３に対して行う（Ｓ３２１）。以後、プロトコル処理部１１２は、グループＢ、Ｃ、Ｘに対しても同様の処理を行う（Ｓ３２２〜Ｓ３２７）。なお、プロトコル処理部１１２は、各パケット種別のパケット群の受信処理の完了通知を、当該受信処理が行われたパケットに対する所定のアプリケーション処理を行うアプリケーション処理部（不図示）に対して行っても良い。
【００３２】
次に、ベースアドレス／オフセット量を用いたデータ転送について図４を参照して説明する。図４は、ベースアドレス／オフセット量を用いたデータ転送を説明するための図である。上述したように、ベースアドレスは、図２を用いて説明したレジスタ部１０７の構成において、ＰＫＴＡ＿ＡＤＤＲ２０３、ＰＫＴＢ＿ＡＤＤＲ２０５、ＰＫＴＣ＿ＡＤＤＲ２０７、ＰＫＴＸ＿ＡＤＤＲ２０８にセットされている。また、オフセット量は、ＯＦＦＳＥＴ２０９にセットされている。
【００３３】
図４（Ａ）は、インターフェース部１１０が受信するアグリゲーションパケット４０の例示的な構成を示す。アグリゲーションパケット４０は、８個のパケット（ＰＫＴ１〜ＰＫＴ８）から構成されている。ここで、アグリゲーションパケットのうち、パケット１／５／６（ＰＫＴ１／５／６）がパケット種別Ａに分類され、パケット２／７（ＰＫＴ２／７）が種別Ｂにパケット分類され、パケット３／８（ＰＫＴ３／８）がパケット種別Ｃに分類されものとする。また、パケット４（ＰＫＴ４）は、パケット種別Ａ〜Ｃの何れにも分類されない（パケット種別Ｘ）ものとする。
【００３４】
図４（Ｂ）は、本実施形態におけるベースアドレス／オフセット量（レジスタ部１０７のＰＫＴＡ＿ＡＤＤＲ２０３、ＰＫＴＢ＿ＡＤＤＲ２０５、ＰＫＴＣ＿ＡＤＤＲ２０７、ＰＫＴＸ＿ＡＤＤＲ２０８、ＯＦＦＳＥＴ２０９）を示す。すなわち、パケット種別Ａの転送先ベースアドレス（ＰＫＴＡ＿ＡＤＤＲ２０３）は、0x00000000番地にセットされている。これは、パケット種別Ａに分類されたパケットは、0x00000000番地を基準に転送位置が決定されることを意味する。また、パケット種別Ｂ／Ｃ／Ｘの転送先ベースアドレスは、それぞれ、0x00004000番地、0x00008000番地、0x10000000番地とセットされている。ＯＦＦＳＥＴ２０９には、１パケットのデータが格納されるメモリのバッファ容量がセットされ得る。例えば、ネットワーク１１６のプロトコルにより、各パケットのサイズは、所定値を超えないと保証されている場合、ＯＦＦＳＥＴ２０９には、当該所定値がセットされ得る。図４（Ｂ）の例では、当該所定値は２ＫＢｙｔｅｓであるとし、ＯＦＦＳＥＴ２０９に２ＫＢｙｔｅｓのサイズである0x800がセットされている。
【００３５】
図４（Ｃ）は、補助記憶部１１５と主記憶部１１４の各メモリのサイズ／アドレスを示す。すなわち、補助記憶部１１５は、メモリ容量が６４ＫＢｙｔｅｓ実装され、バス１１１においてアドレスが0x0000000番地から６４ＫＢｙｔｅｓ分アサインされているものとする。また、主記憶部１１４は、同様に２５６ＭＢｙｔｅｓ分実装され、アドレスが、0x10000000から、２５６ＭＢｙｔｅｓ分アサインされているものとする。
【００３６】
次に、上記に説明した設定・構成において、補助記憶部１１５と主記憶部１１４にどのようにパケットが配置されるかについて、図５を参照して説明する。図５は、転送部１００によるデータ転送の結果を示す図である。
【００３７】
パケット種別Ａに分類されたパケット１／５／６は、“Ａ”グループに配置される（５０１）。また、図４（Ｂ）に示したように、“Ａ”グループの先頭アドレスは、ＰＫＴＡ＿ＡＤＤＲ２０３にセットされたアドレス（すなわち、0x00000000番地）に等しい（５０２）。また、パケット１／５／６のそれぞれは、ＯＦＦＳＥＴ２０９にセットされた値（0x800）だけ、オフセットされた状態で転送される（５０３）。パケット種別“Ｂ”／“Ｃ”／“Ｘ”に分類されたパケット（群）についても、同様に転送処理される（５０４、５０５、５０６）。なお、本例では、パケット種別Ａ〜Ｃに分類されたパケットは、補助記憶部１１５に転送され、パケット種別Ｘに分類されたパケットは、主記憶部１１４に転送されるものとしたが、転送先のメモリはこれに限定されない。転送先のメモリの種別は、例えば、レジスタ部１０７に、例えばベースアドレスの情報と共に設定され得る。
【００３８】
次に、本実施形態におけるプロトコル処理部１１２の処理について、図６のフローチャートを参照して説明する。図６は、プロトコル処理部１１２による処理のフローチャートである。本実施形態では、通信装置１０は、ＴＣＰ／ＩＰで通信を行うものとする。なお、図６に示す各処理について、図３の処理と対応する部分については、図３の処理の参照番号も付す。
【００３９】
まず、プロトコル処理部１１２は、インターフェース部１１０にパケットが到着しているか否かを確認するために、レジスタ部１０７のＲＤＶ＿ＮＴＦ２０１を確認する（Ｓ６０１、Ｓ３０１）。プロトコル処理部１１２は、ＲＤＶ＿ＮＴＦ２０１にセットされた値に基づいて、インターフェース部１１０から受信通知があった（Ｓ３０２）ことを検知すると（Ｓ６０２でＹｅｓ）、レジスタ部１０７のＳＴＡＲＴ２１１に、データ転送の開始を指示するためのコマンドをセットする（Ｓ６０３、Ｓ３０３）。その後、プロトコル処理部１１２は、転送部１００からの転送完了通知（Ｓ３１９）を検知するまで、転送完了通知を待つ（Ｓ６０４でＮｏ、Ｓ６０５）。プロトコル処理部１１２は、転送部１００からの転送完了通知（Ｓ３１９）を検知した場合（Ｓ６０４でＹｅｓ）、各グループ（“Ａ”、“Ｂ”、“Ｃ”、“Ｘ”）に属するパケットの受信処理を、グループ毎に実行する。
【００４０】
本実施形態では、プロトコル処理部１１２は、“Ｘ”グループ以外パケットの処理を先行して行うものとする。プロトコル処理部１１２は、“Ｘ”グループ以外パケットの処理を行う場合（Ｓ６０６でＮｏ）、最初に各グループ（“Ａ”、“Ｂ”、“Ｃ”）のパケットの受信処理を行うに当たり必要となるコンテキスト情報のロードを行う（Ｓ６０８）。
【００４１】
このロードは、例えば、プロトコル処理部１１２が一般的なデータ用キャッシュメモリ持つＣＰＵで構成される場合、当該キャッシュメモリに対して行われる。また、ロード処理は、暗示的に行われてもよいし、明示的に行われてもよい。データ用キャッシュメモリが無いＣＰＵ、または、ＣＰＵ以外のものでプロトコル処理部１１２が構成される場合には、コンテキスト情報は、プロトコル処理部１１２からのアクセスレイテンシの小さいメモリ（例えば補助記憶部１１５）にロードされても良い。
【００４２】
ここで、コンテキスト情報の一例を示す。コンテキスト情報は、例えば、ＴＣＢ（Transmission Control Block）を含む。ＴＣＢとは、ＴＣＰ／ＩＰの通信を行う際に送信側（通信装置１０）と受信側の特定の装置間で形成されるコネクション（論理的な通信路）を利用した通信の管理・制御に必要な情報であり、例えば、ソケット情報（ＩＰアドレスとＴＣＰポート番号）やバッファ送受信に必要なバッファの情報等である。また、転送部１００が上記のソケット情報を元にパケット種別の分類を行うと、プロトコル処理部１１２は、同一グループに振り分けられた各パケットは同一のＴＣＢで処理できるため、グループの処理において一度のロード処理で良い。
【００４３】
Ｓ６０８でコンテキスト情報をロード後、プロトコル処理部１１２は、ＴＣＰよりも下位層のヘッダについて処理を行う（Ｓ６０９）。下位層（ＭＡＣ（Media Access Control）層やＩＰ層）のヘッダとしては、一般的には、ＭＡＣヘッダやＩＰヘッダが挙げられる。ネットワークが無線の場合であれば、プロトコル処理部１１２は、無線のヘッダ処理を行っても良い。また、インターフェース部１１０で何か特別な制御ヘッダを付与している場合は、プロトコル処理部１１２は、その制御ヘッダの処理を行っても良い。
【００４４】
ここで、ＩＰヘッダ処理について詳しく言及する。通常、ＩＰヘッダの処理には、（１）ＩＰバージョンの確認、（２）ヘッダ長の確認、（３）ペイロード長の確認、（４）ＩＰチェックサムの確認、（５）宛先ＩＰアドレスの確認、（６）上位プロトコルの確認、等がある。ここで、転送部１００がソケット情報（ＩＰアドレスとＴＣＰポート番号）に基づいてパケットを分類するようにレジスタ部１０７に設定される場合は、上記（１）ＩＰバージョンの確認、（５）宛先ＩＰアドレスの確認、（６）上位プロトコルの確認については、転送部１００で解析対象となる。したがって、Ｓ６０９の処理から（１）、（５）、（６）の処理が省略でき、受信処理の高速化が可能になる。このことは、本実施形態による副次的な効果として挙げられる。
【００４５】
次に、プロトコル処理部１１２は、ＴＣＰヘッダの処理を行う（Ｓ６１０）。プロトコル処理部１１２は、ＴＣＰヘッダに含まれるフラグ情報等を参照し、当該フラグ情報等に従って、適切に受信処理を行う。Ｓ６１０の処理までにおいて、１パケットの受信処理が完了する。
【００４６】
受信処理を行ったパケットが、グループにおける末尾パケット（本実施形態では図５におけるパケット６、７、８に相当）ではない場合（Ｓ６１１でＮｏ）、プロトコル処理部１１２は、グループにおける次のパケットの検索を行う（Ｓ６１２）。これにより、次のパケットの受信処理が継続される。ここで、次のパケットが存在する場合は、レジスタ部１０７のＯＦＦＳＥＴ２０９にあらかじめセットしたオフセット量分アドレスが移動した先に次のパケットが格納されている。したがって、例えばポインタ／チェーン情報をたどりながら次のパケットを検索する方法と比較し、本実施形態では、検索処理の負荷が小さくなる。
【００４７】
一方、受信処理を行ったパケットが、グループにおける末尾パケットである場合（Ｓ６１１でＹｅｓ）、同一グループの全パケットに対する受信処理が完了したので、プロトコル処理部１１２は、主制御部１１３に受信完了通知を行う（Ｓ６１３）。このとき、プロトコル処理部１１２は、主制御部１１３に受信処理結果を通知しても良い。
【００４８】
そして、まだ未処理グループがある場合（Ｓ６１４でＹｅｓ）は、プロトコル処理部１１２は、次のグループの検索を行う（Ｓ６１５）。これにより、次のグループのパケットの受信処理が継続される。次のグループ位置の先頭は、図４（Ｂ）に示したように、レジスタ部１０７に設定されているので、特別な検索処理は必要ない。全てのグループに対する受信処理が完了した場合（Ｓ６１４でＮｏ）、プロトコル処理部１１２は本フローチャートによる処理を完了する。
【００４９】
続いて、Ｓ６０６でＹｅｓの場合の、グループ“Ｘ”のパケットに関する受信処理（Ｓ６１６）について説明する。グループ“Ｘ”のパケットは、Ａ〜Ｃの何れのグループにも所属されなかったものである。本実施形態では、レジスタ部１０７に、各グループに対するソケット情報がパケット種別のパラメータとしてセットされていることから、グループ“Ｘ”のパケットは、ＴＣＰ以外のパケット、自分宛以外のパケット、ＴＣＰのＳＹＮパケット（接続要求パケット）等であり得る。プロトコル処理部１１２は、各々のパケットに応じて適切な処理を行う（Ｓ６１６）。
【００５０】
このように、本実施形態における通信装置１０は、受信したアグリゲーションパケットに対して、所定の基準としてのソケット情報に基づいて複数のグループに分割し、各グループ単位で受信処理を行う。ここで、通信装置１０は、各グループに属するパケットに対する受信処理が全て完了した時点で、受信完了通知を行うため、アグリゲーションパケットに含まれる全パケットごとに受信完了通知を行い場合に比べて、受信完了通知の簡略化が図れる。また、同じグループに属するパケットに対して、受信処理のために使用するコンテキスト情報（例えばソケット情報）を共有することによって、受信処理の高速化が図れる。
【００５１】
なお、上記の説明では、グループＡ、Ｂ、Ｃ、Ｘの順に転送・受信処理を行うこととしたが、転送・受信処理の順序はこれに限定されない。また、上記の説明では、解析部１０２は、レジスタ部１０７における設定に基づいて、パケットの分類を行うとしたが、解析部１０２の内部等、レジスタ１０７部以外で、パケット分類の基準が設定されるように構成されても良い。また、上記の説明では、レジスタ部１０７における各レジスタの設定は、主にプロトコル処理部１１２によりなされるとしたが、これに限定されない。また、上記の説明では、通信装置が、受信したパケットに対して行う受信処理の具体例として、図６のＳ６０８、Ｓ６０９、Ｓ６１０、Ｓ６１６等である場合を説明したが、受信処理の具体例はこれらに限定されず、その他の処理が行われてもよい。
【００５２】
［変形例１］
上述の実施形態では、通信装置１０の解析部１０２は、ソケット情報に基づいて、アグリゲーションパケットに含まれる複数のパケットの分類を行った。変形例として、アグリゲーションパケット中で優先して処理を行うべきパケットがあれば、あらかじめそのパケットの性質に基づくパケット優先度情報をパケット種別のパラメータとしてレジスタ部１０７に登録しておくと良い。例えば、ＴＣＰヘッダにＵＲＧ（緊急）フラグがセットされていたら、あるグループに振り分けることが可能なように、レジスタ部１０７や解析部１０２を構成してもよい。
【００５３】
また、解析部１０２は、パケット優先度情報として、例えばＴＣＰヘッダのＴＯＳフィールドを参照し、グループ振り分けに使用してもよい。その際、高優先で処理したいパケットのメモリへのデータコピーが完了すると同時に、転送完了通知Ｓ３１９をアサートするように割り込み通知部１０４を構成してもよい。
【００５４】
更に、解析部１０２は、ＴＣＰパケット以外でグループ分けを実施してもよい。例えば、リアルタイム処理が要求されるＳＩＰ／ＲＴＰ等といったプロトコルの情報に基づいて、グループ振り分けを行ってもよい。この場合は、当該プロトコルの情報が、パケット種別のパラメータとして設定され得る。
【００５５】
［変形例２］
上述の実施形態では、オフセット量の設定を転送部１００の外部からセットする方法について説明したが、転送部１００がオフセット量を自動で決める構成にしても良い。また、オフセット量が設定されていない場合は、転送部１００にあらかじめ備わったデフォルトのオフセット量を使用しても良い。また、オフセット量が設定されていない場合は、転送実行部１０６は、同一グループにおけるパケット間については、隙間なく転送しても良い。
【００５６】
また、上述の実施形態では、各パケットのメモリへの格納に使用するオフセット量を（例では、ＯＦＦＳＥＴ２０９＝0x800と）プロトコル処理部１１２より設定し、全ての受信パケット間のオフセット量を固定として扱う例について説明した。このオフセット量を個別に設定できるような構成にすると、受信パケット格納用バッファを連続領域での確保が難しい場合にも本発明を適用することができる。
【００５７】
その例について図７を参照して説明する。図７は、本変形例における転送部１００によるデータ転送の結果を示す図である。図７（Ａ）には、本変形例におけるレジスタ部１０７の構成を示す。図７（Ａ）に示すように、本変形例では、各グループ（Ａ，Ｂ，Ｃ，Ｘ）の各パケットの格納先について、オフセット量をセットできるように変更している。すわなち、グループＡの最初のパケットを格納するためのオフセット値は、ＰＫＴＡ＿ＯＦＦＳＥＴ０（７０１）にセットされる。すなわち、転送先決定部１０３は、最初に受信したグループＡに所属するパケットを、
ＰＫＴＡ＿ＡＤＤＲ（２０３）＋ＰＫＴＡ＿ＯＦＦＳＥＴ０（７０１）
のアドレスに格納する。以下、同様に、ＰＫＴＡ＿ＯＦＦＳＥＴ１／２（７０２、７０３）と続く。さらにグループＢのオフセット設定レジスタもＰＫＴＢ＿ＯＦＦＳＥＴ０／１／２（７１１、７１２、７１３）と用意する。グループＣ，グループＸも同様である。
【００５８】
図７（Ａ）のように各レジスタの値をセットし、上記実施形態で説明した図４（Ａ）に示したアグリゲーションパケット４０を受信した時の各パケットのメモリへの格納の様子を図７（Ｂ）に示す。各グループに最初に受信格納されるパケットは、
ＰＫＴ[Ｋ]＿ＡＤＤＲ＋ＰＫＴ［Ｋ］＿ＯＦＦＳＥＴ０
（ただし、Ｋ＝Ａ，Ｂ，Ｃ，Ｘ）
の位置に格納され、２パケット目以降は、
２パケット目・・・ＰＫＴ[Ｋ]＿ＡＤＤＲ＋ＰＫＴ［Ｋ］＿ＯＦＦＳＥＴ１
３パケット目・・・ＰＫＴ[Ｋ]＿ＡＤＤＲ＋ＰＫＴ［Ｋ］＿ＯＦＦＳＥＴ２
（ただし、Ｋ＝Ａ，Ｂ，Ｃ，Ｘ）
に格納される。以上がオフセットを可変としたときの例である。
【００５９】
このように、以上に説明した実施形態／変形例によれば、アグリゲーションパケットの受信処理の高速化が図れる。すなわち、一つのグループに分類された、１つ以上の（類似の）パケットに対して受信処理の完了後に、主制御部１１３または不図示のアプリケーション処理部に対してまとめて受信処理完了通知を行うことにより、受信完了通知の効率化が図れる。また、同一種別のパケットの受信処理を行う際に使用するコンテキスト情報を高速なメモリにロードし再利用（共有）することにより、受信処理が共通化され、さらなる受信処理の高速化が図れる。
【００６０】
［その他の実施形態］
本発明は、上述の実施形態／変形例の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【図１】
2018139376.tif 000003
【図２】
2018139376.tif 000004
【図３】
2018139376.tif 000005
【図４】
2018139376.tif 000006
【図５】
2018139376.tif 000007
【図６】
2018139376.tif 000008
【図７】
2018139376.tif 000009