(57)【要約】【課題】受信した複数の通信パケットをグループ化して適切な順序で受信処理する。【解決手段】 通信装置は、アプリケーション情報を含む複数のパケットを受信し、該複数のパケットそれぞれに含まれる情報を解析し、該解析の結果に基づいて、該複数のパケットをグループ化し、該複数のパケットの各々に含まれる該アプリケーション情報に基づいて、各グループに対する優先度を設定し、該優先度に従って、該グループ化されたパケットに対して所定のプロトコル処理を行う。【選択図】図３
2019213059.tif 000002
【特許請求の範囲】
【請求項１】
通信装置であって、
アプリケーション情報を含む複数のパケットを受信する受信手段と、
前記複数のパケットそれぞれに含まれる情報を解析する解析手段と、
前記解析手段による解析結果に基づいて、前記複数のパケットをグループ化するグループ化手段と、
前記複数のパケットの各々に含まれる前記アプリケーション情報に基づいて、前記グループ化手段によりグループ化された各グループに対する優先度を設定する設定手段と、
前記設定手段により設定された優先度に従って、前記グループ化されたパケットに対して所定のプロトコル処理を行う処理手段と
を有することを特徴とする通信装置。
【請求項２】
前記解析手段は、前記複数のパケットのそれぞれのヘッダ情報を解析することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記解析手段は、解析により前記複数のパケットそれぞれの前記アプリケーション情報を取得し、
前記グループ化手段は、同一の前記アプリケーション情報を有するパケットが同じグループに属するように、前記複数のパケットをグループ化することを特徴とする請求項１または２に記載の通信装置。
【請求項４】
前記設定手段は、所定の優先度が前記アプリケーション情報に対応して指定されている場合、前記処理の優先度が指定されている前記アプリケーション情報を有するグループに対して、前記所定の優先度を設定することを特徴とする請求項３に記載の通信装置。
【請求項５】
前記アプリケーション情報は、トランスポート層のプロトコルに関する情報、アドレスに関する情報、および、ポート番号に関する情報のいずれかを含むことを特徴とする請求項３または４に記載の通信装置。
【請求項６】
前記解析手段は、前記複数のパケットそれぞれに前記アプリケーション情報または他の情報が含まれるか否かについて解析し、前記グループ化手段は、同一の前記アプリケーション情報を有するパケット、同一の前記他の情報を有するパケット、および前記アプリケーション情報と前記他の情報を有さないパケットが、それぞれ別のグループに属するように、前記複数のパケットをグループ化することを特徴とする請求項１または２に記載の通信装置。
【請求項７】
前記設定手段は、所定の優先度が前記アプリケーション情報または前記他の情報に対応して指定されている場合、前記アプリケーション情報または前記他の情報を有するグループに対して、前記所定の優先度を設定することを特徴とする請求項６に記載の通信装置。
【請求項８】
前記アプリケーション情報は、トランスポート層のプロトコルに関する情報、アドレスに関する情報、および、ポート番号に関する情報のいずれかを含み、前記他の情報は、パケット転送のための特定のプロトコルを使用していることを示す情報を含むことを特徴とする請求項６または７に記載の通信装置。
【請求項９】
前記特定のプロトコルは、Ｅｔｈｅｒｎｅｔ  ＡＶＢプロトコルであることを特徴とする請求項８に記載の通信装置。
【請求項１０】
前記設定手段は、スロースタートで通信を行っているグループに対して、より高い優先度を設定することを特徴とする請求項３から９のいずれか１項に記載の通信装置。
【請求項１１】
前記設定手段は、前記プロトコル処理を迅速に行うことを示す情報が紐付けられているグループに対して、より高い優先度を設定することを特徴とする請求項３から１０のいずれか１項に記載の通信装置。
【請求項１２】
前記解析手段により、前記複数のパケットのうち、即時処理が指定されている即時処理パケットが存在すると解析された場合、前記処理手段は、前記複数のパケットの中で、前記即時処理パケットに対して前記所定のプロトコル処理を先に行うことを特徴とする請求項３から１１のいずれか１項に記載の通信装置。
【請求項１３】
前記処理手段は、前記設定手段から設定の完了が通知されたことを受けて、前記所定のプロトコル処理を行うことを特徴とする請求項１から１２のいずれか１項に記載の通信装置。
【請求項１４】
前記複数のパケットの複数のグループが存在する場合、前記複数のパケットの各グループに対する、前記解析手段、前記グループ化手段、前記設定手段の前記処理が行われた毎に、前記設定手段は前記設定の完了を前記処理手段に通知することを特徴とする請求項１３に記載の通信装置。
【請求項１５】
前記複数のパケットの複数のグループが存在する場合、前記複数のパケットの複数のグループに対する、前記解析手段、前記グループ化手段、前記設定手段の前記処理が行われた後に、前記設定手段は前記設定の完了を前記処理手段に通知することを特徴とする請求項１４に記載の通信装置。
【請求項１６】
通信装置の制御方法であって、
アプリケーション情報を含む複数のパケットを受信する受信工程と
前記複数のパケットそれぞれに含まれる情報を解析する解析工程と、
前記解析工程における解析結果に基づいて、前記複数のパケットをグループ化するグループ化工程と、
前記複数のパケットの各々に含まれる前記アプリケーション情報に基づいて、前記グループ化工程においてグループ化された各グループに対する優先度を設定する設定工程と、
前記設定工程において設定された優先度に従って、前記グループ化されたパケットに対して所定のプロトコル処理を行う処理工程と
を有することを特徴とする通信装置の制御方法。
【請求項１７】
コンピュータを、請求項１から１５のいずれか１項に記載の通信装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信パケットの受信処理技術に関する。
【背景技術】
【０００２】
近年、急速に増加するスマートデバイスなどの多機能端末による高解像度動画（８Ｋ／４Ｋ）のネットワーク経由による閲覧のニーズ増加に伴い、データトラフィックが増大している。また、Ｅｔｈｅｒｎｅｔ（登録商標）による１０Ｇｂｐｓ通信、移動体通信の５Ｇ通信などのネットワーク高速化に伴って、ＴＣＰ／ＵＤＰ／ＩＰなどの通信プロトコル処理のＣＰＵにかかる負荷が大きくなっている。これらの高速データ通信を実現するために、ＣＰＵによる通信プロトコル処理負荷を低減させる施策が提案されている。
【０００３】
ネットワークインターフェースで受信された通信パケットは、デバイスドライバの割り込み処理により引き取られる。デバイスドライバは、受信した通信パケットをカーネルの受信キューに格納し、受信処理用のソフト割り込みハンドラの起動要求を出す。デバイスドライバでは、受信キューに通信パケットを格納するにとどめ、受信処理をソフトウェアの割り込み処理で実装することにより、システムのレスポンスを向上させている。そして、ソフトウェアの割り込み処理により受信キューに格納されている通信パケットが取り出され、通信パケットのヘッダに応じて該当するプロトコルの処理が開始される。受信キューに格納する毎にソフト割り込みを発生させていてはオーバーヘッドの影響を無視できなくなるため、デバイスドライバが複数の通信パケットを受信キューに溜めてからソフト割り込みを発生させる実装手法も普及している。
【０００４】
受信した通信パケットに対して効率よく受信処理を行うための技術として、Ｌａｒｇｅ  Ｒｅｃｅｉｖｅ  Ｏｆｆｌｏａｄ（以後、ＬＲＯとする）と呼ばれる技術がある。通常、受信キューから取り出された通信パケットは、通信ヘッダを解析しながら１つずつ受信処理が行われる。しかし、ＬＲＯでは、同一アプリケーションの１つ以上の通信パケットを１つのジャンボパケットに統合し、ジャンボパケットに対して受信処理が行われる。これにより、受信した通信パケット数あたりの受信処理実施回数を減らすことにより、効率的かつ高速に通信パケットを受信することができる。一般的に、ＬＲＯは、ネットワークインターフェースカード（以後ＮＩＣとする）に実装されている場合が多い。また、ＬＲＯを行うためには、受信した通信パケットを受信キューから取り出し、ジャンボパケットを生成するまで一時的に格納するための潤沢なバッファ総量が必要となる。
【０００５】
ＬＲＯを実装した技術が、特許文献１に記載されている。この技術では、ＮＩＣよりも上のレイヤでＬＲＯを具備し、ジャンボパケット生成を開始するための条件をアプリケーションごとに設定することにより、受信処理の効率化だけでなく、即応性を要求するアプリケーションにも対応している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１５−３２８６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載した受信処理方法は、受信キューに格納されている通信パケットの通信ヘッダを確認し、所定の条件を満たす場合はジャンボパケットを生成して後続の受信処理を実施し、所定の条件を満たさない場合は一時バッファに格納する。一方で、受信キューには様々なアプリケーションのパケットが格納される。そのため、優先して受信処理を行うべきアプリケーションの通信パケットが受信キューの後方にある場合は、当該アプリケーションの通信パケットの受信処理が遅れ得る。また、ジャンボパケットの受信処理では、結合する通信パケットの数が多いほど、ジャンボパケットのサイズは大きくなるため、受信処理で発生するコピー処理やチェックサム演算に多くの処理時間を必要とする。そのため、優先すべきアプリケーションが即応性を要求するようなものであれば、その通信パケットの受信処理の開始が遅れることで、アプリケーションが求めるタイミングでデータを受信できない場合が起こり得る。
【０００８】
本発明は、上記課題に鑑みて為されたものであり、受信した複数の通信パケットに対して適切な順序で受信処理を行うことを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するための一手段として、本発明の通信装置は以下の構成を有する。すなわち、通信装置であって、アプリケーション情報を含む複数のパケットを受信する受信手段と、前記複数のパケットそれぞれに含まれる情報を解析する解析手段と、前記解析手段による解析結果に基づいて、前記複数のパケットをグループ化するグループ化手段と、前記複数のパケットの各々に含まれる前記アプリケーション情報に基づいて、前記グループ化手段によりグループ化された各グループに対する優先度を設定する設定手段と、前記設定手段により設定された優先度に従って、前記グループ化されたパケットに対して所定のプロトコル処理を行う処理手段と、を有する。
【発明の効果】
【００１０】
本発明によれば、受信した複数の通信パケットに対して適切な順序で受信処理を行うことが可能となる。
【図面の簡単な説明】
【００１１】
【図１】実施形態１における通信装置１００の機能ブロック図。
【図２】実施形態１におけるサブＣＰＵ１０６の処理フロー図。
【図３】実施形態１におけるグループ化処理部１１１の処理フロー図。
【図４】実施形態１におけるグループ登録処理の処理フロー図。
【図５】実施形態１におけるグループ優先順位決定処理の処理フロー図。
【図６】実施形態１における受信処理の処理フロー図。
【図７】実施形態２における通信装置１００の機能ブロック図。
【図８】実施形態２におけるサブＣＰＵ１０６の処理フロー図。
【図９】実施形態２におけるグループ化処理部１１１の処理フロー図。
【図１０】実施形態２におけるグループ登録処理の処理フロー図。
【図１１】実施形態２におけるグループ優先順位決定処理の処理フロー図。
【図１２】実施形態２における受信処理の処理フロー図。
【図１３】実施形態３におけるサブＣＰＵ１０６の処理フロー図。
【図１４】実施形態３におけるグループ化処理部１１１の処理フロー図。
【図１５】実施形態４におけるサブＣＰＵ１０６の処理フロー図。
【図１６】実施形態４におけるグループ化処理部１１１の処理フロー図。
【発明を実施するための形態】
【００１２】
以下、添付の図面を参照して、本発明をその実施形態の一例に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
【００１３】
［実施形態１］
（通信装置１００の構成）
図１は、実施形態１における通信装置１００の内部構成について機能ブロック単位で示した図である。通信装置１００は、主に、メインＣＰＵ（Central Processing Unit）１０２と、メインメモリ１０３と、通信プロトコル処理を実行するサブシステム１０４で構成される。メインＣＰＵ１０２と、メインメモリ１０３と、サブシステム１０４は、システムバス１０１を介して相互に接続されている。
【００１４】
メインＣＰＵ１０２は、アプリケーションソフトウエアを実行し、同時に通信装置１００全体の制御も実行する。アプリケーションソフトウエアを実行する上で必要となるデータやプログラムなどは、メインメモリ１０３に記憶され、メインＣＰＵ１０２は、必要に応じてシステムバス１０１を介して読み出しや書き込みを行う。メインメモリ１０３は、通信装置内の各機能ブロックが共有して利用可能なメモリとなっており、主にＤＲＡＭ（Dynamic Random Access Memory）に代表されるような半導体メモリで構成されている。メインメモリ１０３の内部の領域は、プログラムを格納する領域やアプリケーションソフトウエアが使用するアプリケーションバッファ領域などに分けられる。
【００１５】
サブシステム１０４は、主に、サブＣＰＵ１０６とローカルメモリ１０７とＤＭＡコントローラ１０８と通信インターフェース１０９とグループ化処理部１１１で構成される。これらの機能ブロックは、ローカルバス１０５によって相互に接続されている。サブシステム１０４は、通信プロトコル処理を実行するサブシステムであり、特に、ＴＣＰ／ＩＰプロトコルといった通信プロトコル処理に特化して、外部機器とネットワークを介したデータ転送処理を担っている。サブシステム１０４はまた、通信プロトコル処理専用のハードウエアを装備して高速な通信プロトコル処理をメインＣＰＵ１０２に代わって実行する。なお、ＴＣＰ／ＩＰプロトコルは、説明を行うために示した一例であり、その他の通信プロトコルであってもよい。
【００１６】
サブＣＰＵ１０６は、通信プロトコル処理を実行する。具体的には、サブＣＰＵ１０６は、ＩＰｖ４（ＩＰバージョン４）、ＩＰｖ６（ＩＰバージョン６）、ＵＤＰ、ＴＣＰの各通信プロトコル処理（送信シーケンス制御や輻輳制御、通信エラー制御等）を行う。なお、サブＣＰＵ１０６は、１つのプロセッサとして構成されてもよいし、複数のプロセッサによるマルチプロセッサ構成であってもよい。さらに、サブＣＰＵ１０６は、プロセッサと一部の機能をアクセラレートするハードウエア構成であってもよい。
【００１７】
ローカルメモリ１０７は、サブシステム１０４のサブＣＰＵ１０６が利用可能なメモリであり、主にＳＲＡＭ（Static Random Access Memory）に代表されるような半導体メモリで構成されている。また、メインＣＰＵ１０２も、システムバス１０１とローカルバス１０５を経由して、ローカルメモリ１０７にアクセス可能となっている。ローカルメモリ１０７は、通信プロトコル処理を実行する上で必要となる送受信データや各種の設定情報などを記憶し、必要に応じてローカルバス１０５を介して読み出しや書き込みが行われる。
【００１８】
ＤＭＡコントローラ１０８は、デスクリプタに記載された内容に従って、ソース側からディスティネーション側へデータ転送を実行する。デスクリプタとは、データ転送元となるソース側のメモリ等のアドレス情報、データ転送先となるディスティネーション側のメモリ等のアドレス情報、そしてデータ転送の転送サイズ等の情報が記載された、転送のための情報である。また、デスクリプタには、次に実行するデスクリプタの有無とそのデスクリプタのアドレス情報を記載する領域があり、ＤＭＡコントローラ１０８への一度の転送開始指示により、複数のデスクリプタを使用した転送が可能となる。
【００１９】
サブＣＰＵ１０６等の、ローカルバス１０５に対してマスターとなる機能ブロックが、ローカルメモリ１０７にデスクリプタを書き込み、その後ＤＭＡコントローラ１０８に対してＤＭＡ転送開始指示を通知する。当該通知は、例えば、最初のデスクリプタを保存しているローカルメモリ１０７のアドレス情報を設定することにより行われる。
【００２０】
そして、ＤＭＡ転送開始指示を受けたＤＭＡコントローラ１０８は、ソース側からディスティネーション側へ（例えば、メインメモリ１０３とローカルメモリ１０７間、内部メモリ１１３とローカルメモリ１０７間）ＤＭＡ転送を実行する。また、ＤＭＡコントローラ１０８は、転送されるデータについて１６ｂｉｔ単位で１の補数和を計算する演算機能や、複数の演算領域を指定して１つの補数和を算出する演算機能を装備している。また、ＤＭＡコントローラ１０８は、演算結果を、転送されるデータの末尾に付加して転送する機能、あるいは演算結果だけを出力する機能も装備している。これら機能の指示については、デスクリプタにより指示する構成としてもよいし、ＤＭＡコントローラ内のレジスタで指示する構成としてもよい。
【００２１】
通信インターフェース１０９は、ＬＡＮ（Local Area Network）に代表されるようなネットワーク１１０とのインターフェースである。通信インターフェース１０９は、通信における物理層（ＰＨＹ層）とデータリンク層（ＭＡＣ層）の通信制御を担っており、内部に送受信情報を一時的に蓄積するバッファメモリを装備している。また、通信インターフェース１０９は、ＤＭＡコントローラを内蔵しており、そのＤＭＡコントローラを使用して外部へのデータ送信と外部からのデータ受信を行う。
【００２２】
グループ化処理部１１１は、通信インターフェース１０９を介して受信した通信パケットを、アプリケーション毎にグループ化（グルーピング）する処理部である。グループ化処理部１１１は、コア部１１２と内部メモリ１１３で構成される。コア部１１２は、更に、レジスタ部１１２１、パケット解析部１１２２、グループ管理部１１２３、優先度管理部１１２４で構成される。
【００２３】
コア部１１２内のレジスタ部１１２１には、グループ化処理部１１１を制御するための設定情報を登録する領域（設定情報領域）と、グループ化処理部１１１のステータス情報（処理実行中の状態、アイドル状態、処理完了の状態など）を登録する領域と、処理結果を登録する領域（処理結果領域）が存在する。また、レジスタ部１１２１は、グループ化処理部１１１の処理が完了したときに割込み信号をアサートする機能も装備している。ここで、設定情報領域と、処理結果領域について説明する。
【００２４】
設定情報領域に登録される設定情報には、グループ化の処理を行う通信パケット数、通信パケットの先頭アドレス、優先度を設定するアプリケーション情報とその優先度、優先度の変更を行う閾値（詳細は後述）が含まれる。ここで、アプリケーション情報は、例えば、ＩＰバージョン情報（ＩＰｖ４もしくはＩＰｖ６）、トランスポート層のプロトコル情報（ＴＣＰもしくはＵＤＰ）、ＩＰアドレス（Ｓｒｃ（送信元）とＤｓｔ（送信先））、ポート番号（ＳｒｃとＤｓｔ）から構成される。また、優先度は、０〜７の８段階（３ビット）で設定される。設定情報領域は、複数のアプリケーションに対して優先度を指定できるように、相応の領域を設計時に用意する必要がある。さらに、設定情報領域には、グループ化処理部１１１に対して処理開始を指示するための開始命令領域も存在する。サブＣＰＵ１０６は、グループ化の処理を行う通信パケット数や通史パケットの先頭アドレスなどの情報をセットしてから開始命令領域への書き込みを行うことで、グループ化処理部１１１に対して処理開始を命令する（処理開始命令を発行する）ことができる。なお、設定情報は、一度セットされればグループ化処理部１１１がリセットされるまで残り続ける。したがって、処理開始を命令するたびに、優先度を設定するアプリケーション情報とその優先度、閾値などを入力する必要はない。
【００２５】
処理結果領域は、生成されたグループ数と後述するグループ情報とが格納されている内部メモリ１１３における先頭アドレスで構成される。レジスタ部１１２１は先頭アドレスを格納する領域を複数具備することで、一度の処理命令により複数のグループが生成されても、各グループ情報にたどることが可能となる。さらに、複数ある先頭アドレスを格納する領域の先頭から優先度の高いグループを配置することで、ソフトウェアは意識せずとも優先度が高い順に受信処理を開始することが可能となる。
【００２６】
コア部１１２内のパケット解析部１１２２は、レジスタ部１１２１に入力された通信パケットのアドレスの情報をもとに、メインメモリ１０３またはローカルメモリ１０７から通信パケットを読み出し、読み出した通信パケットに対する解析を行う。通信パケットの解析処理については後述する。
【００２７】
コア部１１２内のグループ管理部１１２３は、パケット解析部１１２２からの解析結果を元に、同一アプリケーション毎に通信パケットをグループ化し、各グループに対するグループ情報とパケット情報を紐付けて内部メモリ１１３に格納する。グループ情報は、アプリケーション情報とそのグループに所属する通信パケットの数で構成される。また、パケット情報は、パケット毎にＩＰｖ４チェックサム値、ＴＣＰ／ＵＤＰチェックサム値、ＴＣＰシーケンス番号値、通信パケットの先頭アドレスで構成される。本実施形態では、解析結果によらず、通信パケットのパケット情報は、常に同一サイズとする。すなわち、ＩＰｖ６のグループであっても、ＩＰｖ４チェックサムの領域は未使用領域として使用される。同様に、ＩＰｖ４とＩＰｖ６ではＩＰアドレスのデータサイズが異なるが、各グループは同一サイズとする。すなわち、ＩＰｖ４とＩＰｖ６の場合でも、ＩＰアドレスのデータサイズが大きいＩＰｖ６のサイズが確保される。
【００２８】
パケット情報とグループ情報を紐付ける方法として、たとえば内部メモリ１１３上にグループ情報とアドレス情報を連続領域で格納する方法がある。グループ化処理部１１１のレジスタ部１１２１には、グループ情報が格納されている先頭アドレス情報と各グループに含まれる通信パケット数が示されている。これらの情報により、各グループに所属する通信パケットとその情報を識別することが可能となる。
【００２９】
コア部１１２内の優先度管理部１１２４は、グループ管理部１１２３によってグループ化された各グループの優先度の設定や変更を行う。また、レジスタ部１１２１にグループ化処理部１１１の処理結果を書き込む機能も有する。優先度管理部１１２４の処理の詳細については後述する。
【００３０】
（通信装置１００の処理フロー）
続いて、図２を参照して、本実施形態における通信装置１００の動作フローについて説明する。図２は、通信装置１００がネットワーク１１０を介して外部機器と接続し、その外部機器から通信パケットを受信する際の、サブＣＰＵ１０６による処理フローである。本フローは、サブＣＰＵ１０６がメインメモリ１０３に記憶されている制御プログラムを実行することにより実現され得る。
【００３１】
Ｓ２０１は、このフローのスタートである。通信装置１００が、ネットワーク１１０から通信パケットを受信して、通信インターフェース１０９によるドライバ処理が終了し、サブＣＰＵ１０６が受信キュー（不図示）に格納された通信データを受け取ったところから開始する。Ｓ２０２では、サブＣＰＵ１０６は、受信した通信パケットの一時解析を行う。一時解析とは、サブＣＰＵ１０６が、受信キュー（不図示）に格納されている通信パケットの数、通信パケットの先頭アドレスなどを取得することを意味する。つまり、本ステップでは、サブＣＰＵ１０６は、グループ化処理部１１１に処理させるために必要な情報を取得する。
【００３２】
Ｓ２０３では、サブＣＰＵ１０６は、Ｓ２０２で取得した情報をグループ化処理部１１１に入力し、処理開始命令を発行する。命令発行後、処理はＳ２０４へ進む。処理開始命令を受け取ったグループ化処理部１１１は、図３を用いて後述する処理を開始する。サブＣＰＵ１０６のリセットが解除された後初めてのＳ２０３の処理では、サブＣＰＵ１０６は、優先度を設定するアプリケーション情報とその優先度、優先度の変更を行う閾値もグループ化処理部１１１に入力する。また、システムやアプリケーションの状況変化による優先度の追加や変更、閾値変更の必要性が発生していれば、サブＣＰＵ１０６は、追加や変更された値も併せて入力する。
【００３３】
Ｓ２０４では、サブＣＰＵ１０６は、グループ化処理部１１１の処理終了を検知したか、すなわち、命令した処理をグループ化処理部１１１が完了したかどうかを判定する。Ｓ２０４における判定は、グループ化処理部１１１からの割り込み信号の受信の有無や、グループ化処理部１１１のステータス情報のポーリングに基づいて行われる。グループ化処理部１１１からの割り込み信号を待つ方が、割り込み信号を待つ間に他の処理を行うことができることから、処理の並列性が向上するというメリットがある。サブＣＰＵ１０６が、グループ化処理部１１１の処理終了を検知した場合は（Ｓ２０４でＹｅｓ）、処理はＳ２０５へ移行し、そうでない場合は（Ｓ２０４でＮｏ）、現在の状態を維持する。Ｓ２０５では、サブＣＰＵ１０６は、グループ化処理部１１１の結果を用いて通信パケットの受信処理を行う。受信処理の詳細は図６を用いて後述する。受信処理が終了後、処理はＳ２０６へ進み本フローは終了する。
【００３４】
次に、図３を参照して、図２のＳ２０３で発行された処理開始命令を受け取ったグループ化処理部１１１が行う処理について説明する。図３は、本実施形態におけるグループ化処理部１１１の処理フロー図である。本フローは、グループ化処理部１１１がメインメモリ１０３に記憶されている制御プログラムを実行することにより実現され得る。
【００３５】
Ｓ３０１は、本フローのスタートであり、サブＣＰＵ１０６から処理開始命令（図２のＳ２０３）を受け取った際に開始する。Ｓ３０２では、グループ化処理部１１１のパケット解析部１１２２は、レジスタ部１１２１に格納されている設定情報に含まれる通信パケットの先頭アドレスを使用して、通信パケットのリード処理を行う。リード処理では、少なくともＳ２０２のヘッダ解析やＳ３０６のグループ優先順位決定処理で使用される領域を読み込む必要があり、必ずしも通信パケット全体を読み込む必要はない。さらに、パケット解析部１１２２は、通信パケットが、メインメモリ１０３とローカルメモリ１０７のどちらにあるか事前に識別できないため、効率よくリード処理が行えるようにアウトスタンディング要求や、長いバースト長を設定してもよい。パケット解析部１１２２は、Ｓ３０２でリードしたデータを、内部バッファ（不図示）に格納する。
【００３６】
Ｓ３０３では、グループ化処理部１１１のパケット解析部１１２２は、アプリケーション毎に通信パケットをグループ化するための処理として、Ｓ３０２でリードされた通信パケットのヘッダ解析処理を行う。例えば、パケット解析部１１２２は、（１）リードしたパケットのアプリケーション情報（プロトコル種別）の判定、（２）チェックサムの演算、（３）優先度の取得、（４）プロトコル制御情報の取得を実施する。
【００３７】
（１）リードしたパケットのアプリケーション情報（プロトコル種別）の判定
Ｅｔｈｅｒｎｅｔヘッダ（以下、イーサヘッダ）は、１４バイトのうち、最後の２バイトはネットワーク層のプロトコルが指定されている（ＩＰｖ４であれば０ｘ０８００、ＩＰｖ６であれば０ｘ８６ｄｄ）。さらに、ＩＰｖ４ヘッダ（全長２０バイト）の先頭４ビット、ＩＰｖ６ヘッダ（全長４０バイト）の先頭４ビットも、ＩＰバージョンを示している（前者は０ｂ０１００、後者は０ｂ０１１０）。ネットワーク層のプロトコル種別の判定は、イーサヘッダや各ＩＰヘッダを利用して行われ得る。トランスポート層のプロトコル種別の判定には、ＩＰｖ４パケットの場合は８ビットのプロトコル領域、ＩＰｖ６パケットの場合は８ビットのネクストヘッダ領域が使用され得る（ＴＣＰの場合０ｘ６、ＵＤＰの場合０ｘ１１である）。
【００３８】
（２）チェックサムの演算
ＩＰｖ４のチェックサム計算は、パケット解析部１１２２が内部バッファ（不図示）から該当部分を読み取って計算することにより行われ得る。ＴＣＰやＵＤＰのチェックサムに関しては、ＩＰｖ４と同じように、パケット解析部１１２２が内部バッファ（不図示）から該当部分を読み取って計算してもよいし、ＤＭＡコントローラ１０８に計算させてもよい。前者の場合、Ｓ３０３でパケット全体をリードする必要があるため、Ｓ３０２でのリードは１パケット分しておくことが望ましい。後者の場合、パケット解析部１１２２は、ＤＭＡコントローラ１０８の制御機構とデスクリプタ生成機能を実装する必要がある。例えば、パケット解析部１１２２、ＤＭＡコントローラ１０８によるチェックサムの計算結果を、内部メモリ１１３に書き込むようデスクリプタを生成する。
【００３９】
（３）優先度の取得
パケット解析部１１２２は、優先度を、ＩＰｖ４パケットの場合はＴＯＳ（Ｔｙｐｅ  Ｏｆ  Ｓｅｒｖｉｓｅ）フィールド、ＩＰｖ６パケットの場合はトラフィッククラスフィールドを用いて取得する。どちらの領域も、８ビットのうち３ビットが優先度として規定されている。コア部１１２内のレジスタ部１１２１の設定情報で指定される優先度も３ビットの入力としており、これらの優先度はすべて同じ尺度として扱われる（数字が大きいほど高優先とする）。
【００４０】
（４）プロトコル制御情報の取得
プロトコル制御情報とは、例えば、ＴＣＰヘッダに設定されるフラグである。ＴＣＰヘッダに、ＰＳＨやＵＲＧといったフラグが設定されている場合、迅速にアプリケーション層にデータを渡すことが求められるため、後述する優先順位決定処理（Ｓ３０６）において、優先度を高くするような処理が行われる（詳しくは図５にて説明）。ＴＣＰでは、パケット受信において、対向端末が送信した順番で受信できるとは限らない。特に、ＴＣＰでは、受信時にデータ順序が入れ替わると、上位層（例えば、アプリケーション層）で正しくデータを展開することができない。したがって、例えば、プロトコル制御情報つきの、アプリケーションに関連するパケットを検知した時点で、そのパケットに対するプロトコル処理を開始しても、即時にアプリケーションに渡すことができるとは限らない。なぜならば、受信キューに残っている通信パケットの中に当該プロトコル制御情報つきのパケットよりもシーケンス順序が前の通信パケットが存在し得るからである。また、プロトコル制御情報つきのパケットを検知した時点で、そのパケットの優先度を上げ、その通信パケットのみを即座にプロトコル処理を開始しても、同様の理由により即時にアプリケーションに渡すことができるとは限らない。このようなことを考慮すると、優先度はパケット単体ではなく、グループ全体（アプリケーション）に付加させることが好ましい。そして、受信キューに格納されているすべての通信パケットの解析とアプリケーションごとの振り分けを実施したうえで優先度にしたがって受信処理が行われることにより、効率的な受信処理が実現され得る。
【００４１】
なお、プロトコル制御情報は、トランスポート層やネットワーク層の情報である必要はない。上位アプリケーションの種類は、ポート番号から推測することができる。たとえば、トランスポート層のヘッダからポート番号が識別できるため、例えば、ポート番号が８０であれば、上位アプリケーションはＨＴＴＰであることが判断できる。ここで、ＨＴＴＰヘッダで「ＧＥＴ」メソッドが使用されている場合は、クライアント端末からデータ要求が行われている。通信装置１００の受信処理が遅れるほど、クライアント端末へのレスポンスが遅れてしまう。特に、ＨＴＴＰはＷｅｂブラウザで使用されているプロトコルのため、レスポンスの遅れはそのままユーザエクスペリエンスに直結する。そのため、他のアプリケーションよりも優先度を上げることで、応答性を上げることが可能となる。近年、ＨＴＴＰヘッダの総量は増加傾向にあり、１つのＴＣＰパケットにリクエストが収まるとは限らない。したがって、１つのパケットに対して優先度を与えるのではなく、そのグループ（今回の例では、ある１つのＨＴＴＰアプリケーション）全体に優先度を与えることにより、効率的な受信処理が実現され得る。また、ＨＴＴＰ以外にも動画や音声のデータ伝送で使用されるＲＴＰにおけるヘッダ情報を利用しても良いし、独自プロトコルの情報を利用してもかまわない。
【００４２】
図３の説明に戻り、Ｓ３０４では、グループ化処理部１１１のグループ管理部１１２３は、Ｓ３０３での解析結果を元に通信パケットのグループ登録を行う。この処理により、入力される通信パケットは、いずれかのグループと紐付けられる。Ｓ３０４の処理は、図４を用いて後述する。
【００４３】
Ｓ３０５では、グループ化処理部１１１のグループ管理部１１２３は、Ｓ３０４でグループ登録した通信パケットが、入力された最後の通信パケットかどうかを判定する。最後の通信パケットであれば（Ｓ３０５でＹｅｓ）、処理はＳ３０６へ進み、そうでない場合は（Ｓ３０５でＮｏ）、処理はＳ３０２へ進む。グループ化処理部１１１に入力される通信パケットの数は事前にレジスタ部に設定されていることから、グループ化処理部１１１は、当該通信パケットの数から、Ｓ３０４における判定を行うことが可能となる。
【００４４】
Ｓ３０６では、グループ化処理部１１１の優先度管理部１１２４は、通信パケットが紐付けられているグループの優先順位を決定（設定）する。詳細は図５にて説明する。処理終了後、処理はＳ３０７へ進む。Ｓ３０７では、グループ化処理部１１１のグループ管理部１１２３は、グループの優先度順にサブＣＰＵ１０６が受信処理を実行できるようにグループ順序を入れ替える。例えば、グループ管理部１１２３は、決定した優先順位の順で、レジスタ部１１２１の処理結果領域に、グループ情報が格納されている先頭アドレスを書き込む。続いて、グループ化処理部１１１は、サブＣＰＵ１０６に対して処理が終了したことを通知する。この通知方法は、先に説明したように割り込み信号でもよいし、レジスタ部１１２１に、処理が完了したことを示すステータス情報を登録するなどの方法が挙げられる。処理終了後、Ｓ３０８へ進み、本フローは終了する。
【００４５】
次に、図４を参照して、図３のＳ３０４の処理を説明する。図４は、グループ化処理部１１１のグループ管理部１１２３によるグループ登録処理の処理フロー図である。本フローは、Ｓ３０４のフローに到達したときに開始する（Ｓ４０１）。Ｓ４０２では、グループ管理部１１２３は、Ｓ３０３で解析した通信パケットのアプリケーション情報と同じアプリケーション情報を有するグループが、すでに内部メモリ１１３に存在するかどうかを判定する。当該判定は、以下に説明するような、内部バッファ（不図示）に記憶された、グループ生成数とグループ情報を参照することにより行われ得る。Ｓ３０２で解析した通信パケットのアプリケーション情報と同じアプリケーション情報を有するグループが存在しない場合は（Ｓ４０２でＮｏ）、処理はＳ４０３へ進み、存在する場合は（Ｓ４０２でＹｅｓ）、処理はＳ４０４へ進む。
【００４６】
Ｓ４０３では、グループ管理部１１２３は、新規のグループを作成し、当該新規のグループに通信パケットを登録する。新規のグループ作成する際は、グループ管理部１１２３は、グループ情報を内部メモリ１１３に書き出す。グループ情報は、上述したように、アプリケーション情報とそのグループに所属する通信パケットの数で構成される。また、グループ管理部１１２３は、現在のグループ数とグループ情報を書き出した先頭アドレス、プロトコル制御情報の有無を、内部バッファ（不図示）に記憶しておく。さらに、グループ管理部１１２３は、優先度として、通信パケットがＩＰｖ４パケットであればＴＯＳフィールド値、ＩＰｖ６パケットであればトラフィッククラスフィールド値も内部バッファ（不図示）に保存しておく。内部バッファ（不図示）に書き出すこれらの情報は、グループ毎に管理される。グループ管理部１１２３は、これらの情報の書き出し終了後、パケット情報も内部メモリ１１３へ書き出す。そして処理はＳ４０５へ進み、本フローは終了する。
【００４７】
Ｓ４０４では、グループ管理部１１２３は、通信パケットを、該当するグループに追加する。ここでの追加は、パケット情報を内部メモリ１１３に書き込むことを意味する。さらに、通信パケットの優先度の値がグループ情報の優先度よりも高い場合は、グループ管理部１１２３は、内部バッファ（不図示）に保存してあるグループの優先度を、通信パケットの優先度に書き換える。すなわち、各グループの優先度は、そのグループに所属する通信パケットの中で一番高い値が採用される。また、その通信パケットにプロトコル制御情報が含まれている場合、グループ管理部１１２３は、内部バッファ（不図示）に保存してあるプロトコル制御情報の有無も更新する。そして、グループ管理部１１２３は、内部バッファ（不図示）で管理しているグループに所属する通信パケットの数を更新する。なお、これらの更新が終わってから、グループ管理部１１２３は、そのグループのトランスポート層のプロトコルがＴＣＰであればシーケンス番号の若い順にパケット情報の並べ替えを実施する。パケット情報の並べ替えは、Ｓ４０４のフローに到達したときに行わなくても、後述するＳ５１０にて実施してもかまわない。以上の処理により、グループ化処理部１１１は、入力された通信パケットのアプリケーション情報を利用して、通信パケットをグループ毎に分類と管理を行う。
【００４８】
次に、図５を参照して、図３のＳ３０６の処理を説明する。図５は、優先度管理部１１２４によるグループ優先順位決定処理の処理フロー図である。本フローは、Ｓ３０６のフローに到達したときに開始する（Ｓ５０１）。Ｓ５０２では、優先度管理部１１２４は、グループの優先順位を決定するために、内部メモリ１１３から１つのグループ情報を、対象のグループ情報として取得する。上述したように、グループ情報は、アプリケーション情報とそのグループに所属する通信パケットの数で構成される。対象のグループ情報の取得後、処理はＳ５０２へ進む。Ｓ５０３では、優先度管理部１１２４は、対象のグループ情報に含まれるアプリケーション情報と一致するアプリケーション情報がレジスタ部１１２１に保存されているかを判定する。レジスタ部１１２１に保存されているアプリケーション情報は、それぞれ優先度が指定されている。対象のグループ情報に含まれるアプリケーション情報と一致するアプリケーション情報がレジスタ部１１２１に保存されている場合（Ｓ５０３でＹｅｓ）、処理はＳ５０４へ進み、そうでない場合（Ｓ５０３でＮｏ）、処理はＳ５０４へ進む。
【００４９】
Ｓ５０４では、優先度管理部１１２４は、まず、対象のグループ情報に含まれるアプリケーション情報と一致するアプリケーション情報に指定されている優先度を特定する。続いて、優先度管理部１１２４は、対象のグループ情報に紐付くグループの優先度を、当該特定した優先度に変更する。グループの優先度は内部バッファ（不図示）に格納されているため、当該優先度の変更は、その値を変更することにより実現する。優先度の変更後、処理はＳ５０６へ進む。
【００５０】
Ｓ５０５では、優先度管理部１１２４は、対象のグループ情報に紐付くグループの優先度が０かどうかを判定する。優先度が０でない場合は（Ｓ５０５でＹｅｓ）、処理はＳ５０６へ進み、優先度が０である場合は（Ｓ５０５でＮｏ）、処理はＳ５１０へ進む。優先度が０であることは、送信側においてこのアプリケーションの通信はベストエフォートであることを示している。したがって、優先度管理部１１２４は、対象のグループ情報に紐付く優先度の制御を行わずに、図５に示すフローを終了する。
【００５１】
Ｓ５０６では、優先度管理部１１２４は、対象のグループ情報に紐付くグループの優先度がレジスタ部で登録された所定の閾値よりも高いかどうかを判定する。対象のグループ情報に紐付くグループの優先度が閾値より高い場合は（Ｓ５０６でＹｅｓ）、処理はＳ５０７へ進み、そうでない場合は（Ｓ５０６でＮｏ）、処理はＳ５１０に進む。Ｓ５０７では、優先度管理部１１２４は、対象のグループ情報に対応するパケットがスロースタートで通信中かどうかを判定する。
【００５２】
ここでＳ５０７の処理について詳細に説明する。スロースタートとは、ＴＣＰプロトコルにおけるアルゴリズムの一種である。スロースタート中は、ＴＣＰのウィンドウサイズを少しずつ増加させるように制御される。例えば、通信開始直後にウィンドウサイズ限界までのパケットを通信ネットワークに送出しないように制御される。このようなアルゴリズムにより、輻輳の発生を抑制することが可能となる。スロースタート中は通信速度が低く、高速通信を行うためにはより多くの通信パケットのやり取りが必須となる。したがって、スロースタート中のアプリケーションの優先度を上げることでより早く受信処理開始が可能となり、ＡＣＫ送信やデータ送信までの遅延時間を短縮できる。それにより、ＴＣＰのスループットが向上して、より効率的な通信を実現することが可能となる。スロースタート中かどうかを判定する方法として、例えば、サブＣＰＵ１０６からのレジスタ部１１２１を介する通知により判定する方法がある。通知方法は単純にスロースタート中かどうかを示す領域をアプリケーション毎に事前に設ける方法と、ＴＣＢ（ＴＣＰ  Ｃｏｎｔｒｏｌ  Ｂｌｏｃｋ）とよばれるアプリケーション毎に生成されるＴＣＰプロトコルにおける各種制御情報をスヌープする方法が挙げられる。本実施形態ではどちらの方法でも問題ないが、どちらともレジスタ部１１２１にアプリケーション毎に専用領域を必要とする。前者の方法のほうがＨＷの資源をよりコンパクトにすることが可能となる。後者の場合、サブＣＰＵ１０６からのＴＣＢが格納されるアドレスの入力が必要となる。スロースタート中である場合は（Ｓ５０７でＹｅｓ）、処理はＳ５０９へ進み、そうでない場合は（Ｓ５０７でＮｏ）、処理はＳ５０８へ進む。
【００５３】
Ｓ５０８では、優先度管理部１１２４は、対象のグループ情報に紐付くグループにプロトコル制御情報があるかどうかを判定する。プロトコル制御情報がある場合は（Ｓ６０８でＹｅｓ）、処理はＳ５０９に進み、そうでない場合は（Ｓ５０８でＮｏ）、処理はＳ５１０へ進む。先に説明したプロトコル制御情報（ＴＣＰヘッダに設定されるＰＳＨやＵＲＧといったフラグ）では、上位のアプリケーションへすばやく渡すことが求められる。そのため、Ｓ５０９では、優先度管理部１１２４は、対象のグループ情報に紐づく優先度を現在の優先度より上げて、受信処理が行われるタイミングを早くする。優先度を上げる量は一定である必要はなく、アプリケーションの内容やプロトコル制御情報の内容などの情報に基づいて変更してもかまわない。さらに、同一の優先度における優先順は単純にグループが生成された順番でもよいし、Ｓ５０７もしくはＳ５０８のパスを通ったものを高い優先度や低い優先度としてもよい。
【００５４】
Ｓ５１０では、優先度管理部１１２４は、生成したグループすべてに対して優先順位を決定したかどうかを判定する。グループすべてに対して優先順位を決定した場合は（Ｓ５１０でＹｅｓ）、処理はＳ５１１へ進み本フローは終了し、そうでない場合は（Ｓ５１０でＮｏ）、処理はＳ５０１へ進んで次の対象のグループの優先順位決定処理を開始する。グループ管理部１１２３は、先に述べたように、ここで、グループ内のパケット情報をシーケンス番号順に入れ替え処理を行ってもよい。
【００５５】
次に、図６を参照して、図２のＳ２０５の処理を説明する。図６は、サブＣＰＵ１０６による通信パケットの受信処理の処理フロー図である。本フローは、Ｓ２０５のフローに到達したときに開始する（Ｓ６０１）。Ｓ６０２では、サブＣＰＵ１０６は、グループ化処理部１１１のレジスタ部１１２１の処理結果領域から、グループ情報が格納されている先頭アドレスを取得し、グループ情報とパケット情報の取得を行う。グループ情報とパケット情報の取得後、処理はＳ６０２へ進む。Ｓ６０３では、サブＣＰＵ１０６は、Ｓ６０２で取得したグループ情報とパケット情報を解析して、取得したグループ情報を有するグループに所属する通信パケットを連結することができるかどうかを判定する。連結できる場合は（Ｓ６０３でＹｅｓ）、処理はＳ６０４へ進み、連結できない場合は（Ｓ６０３でＮｏ）、処理はＳ６０５へ進む。
【００５６】
Ｓ６０３の判定処理の一例を説明する。まず、取得したグループ情報に含まれるＩＰバージョン情報がＩＰｖ４である場合、サブＣＰＵ１０６は、各パケット情報のＩＰｖ４チェックサム値を確認して、その通信パケットに誤りがあるかどうかを確認する。誤りがある場合は、サブＣＰＵ１０６は、連結できないと判定する。誤りがない場合、もしくはＩＰｖ６である場合は、サブＣＰＵ１０６は、取得したグループ情報に含まれるトランスポート層のプロトコル情報を確認する。ＵＤＰの場合は、サブＣＰＵ１０６は、ＵＤＰチェックサムの値を確認し、その通信パケットに誤りがあるかどうかを確認する。誤りがある場合は、サブＣＰＵ１０６は、連結できないと判定する。そして、ＵＤＰチェックサムで誤りがない場合は、サブＣＰＵ１０６は、パケットの連結処理を行う。ＴＣＰの場合も同様に、サブＣＰＵ１０６は、ＴＣＰチェックサムの値を確認し、その通信パケットに誤りがあるかどうかを確認する。誤りがある場合は、サブＣＰＵ１０６は、連結できないと判定する。さらにＴＣＰの場合では、サブＣＰＵ１０６は、ＴＣＰチェックサムだけでなく、シーケンス番号の連続性についても確認する。
【００５７】
上述のように、パケット情報にはその通信パケットの先頭アドレスが含まれるので、サブＣＰＵ１０６は、当該先頭アドレスをもとに通信パケットのペイロード長を取得できる。そして、サブＣＰＵ１０６は、シーケンス番号とペイロード長からそのグループに所属する通信パケットは連続性があることが確認できた場合は、連結可能と判定する。連続性がない、つまり通信パケット間で歯抜けが生じている場合は、サブＣＰＵ１０６は、連結不可と判定する。
【００５８】
Ｓ６０４では、サブＣＰＵ１０６は、取得したグループ情報を有するグループに所属する通信パケットを連結し、連結されたパケットに対してプロトコル処理を開始する。ここで、通信パケットの連結について説明する。連結する方法として、例えば、そのグループに所属する複数の通信パケットからジャンボパケットと呼ばれる１つの通信パケットを生成することが挙げられる。すなわち、サブＣＰＵ１０６は、複数の通信パケットのペイロード部分を連結してジャンボパケットのペイロード部分を生成し、ラージパケットのヘッダ部分は新規作成する。ペイロードを連結する際は、サブＣＰＵ１０６は、新規にバッファを確保したところにメモリコピーしてもよいし、バッファチェーンを利用して連結してもよい。通信パケットを格納するバッファはｓｋ＿ｂｕｆｆやｍｂｕｆと呼ばれる構造体が一般的に使用される。いずれの構造体も、ポインタを使用して通信パケットの先頭データ位置や次の通信パケットの位置などを示すことが可能であるため、これらのポインタを修正することによりペイロード連結を実現してもかまわない。上位のアプリケーションに渡す際は、ＤＭＡコントローラ１０８を利用することでメモリコピーを効率的に実行することが可能である。もちろん、ＣＰＵのコマンド（たとえばｍｅｍｃｐｙ）を利用してもよい。連結後のプロトコル処理は一般的なものを指しているので、ここでの説明は省略する。Ｓ６０４の処理終了後、処理はＳ６０６へ進む。
【００５９】
Ｓ６０５では、取得したグループ情報を有するグループに所属する通信パケットを連結できないので、サブＣＰＵ１０６は、各通信パケットに対してプロトコル処理を実施する。なお、Ｓ６０４と同様の理由により、プロトコル処理の説明は省略する。Ｓ６０５の処理終了後、処理はＳ６０６へ進む。Ｓ６０６では、サブＣＰＵ１０６は、取得したグループ情報が、グループ化処理部１１１の処理結果の最後のグループ情報であるかどうかを判定する。最後のグループ情報である場合は（Ｓ６０６でＹｅｓ）、処理はＳ６０７へ進み本フローは終了し、そうでない場合は（Ｓ６０６でＮｏ）、サブＣＰＵ１０６は、別のグループ情報とパケット情報を取得するために、Ｓ６０２の処理を実行する。なお、レジスタ部１１２１の処理結果領域には、グループ情報が格納されている先頭アドレスが書き込まれている（Ｓ３０７）ため、図６のＳ６０２からＳ６０６のループの処理では、その順番にグループ情報を取得することができる。
【００６０】
このように、本実施形態によれば、グループ化処理部１１１は、アプリケーション毎に、通信パケットをグループ化し、各グループに対する受信処理の優先度を決定する。そして、サブＣＰＵ１０６は、グループ化処理部１１１の処理結果を利用して受信処理を行い、効率的かつ優先度順に上位アプリケーションにデータを渡すことが可能となる。
【００６１】
［実施形態２］
実施形態２では、通信パケットのグループ化の途中で最高優先度のパケットの受信処理を開始し、さらに通信パケットの解析結果に応じてより詳細なグループの分類を行う。
【００６２】
（通信装置１００の構成）
図７は、本実施形態における通信装置１００内部について機能ブロック単位で示した図である。実施形態１で説明した図１の構成と同一部分は同一符号を使用し、差分について説明する。本実施形態では、実施形態１と比較して、グループ化処理部１１１内にＦＩＦＯ７０１が追加されている。実施形態１では、通信パケットのアプリケーション情報をもとにグループ化を行い、内部メモリ１１３へパケット情報とグループ情報を、内部バッファ（不図示）へその他の管理情報を格納していた。本実施形態では、後述する条件に当てはまる通信パケットは内部メモリ１１３や内部バッファ（不図示）に情報を格納せず、ＦＩＦＯ７０１にその通信パケットの先頭アドレスのみを格納する構成としている。なお、ＦＩＦＯ７０１に格納されている情報は、外部からレジスタ部１１２１を介して取得および開放できるものとする。
【００６３】
ＦＩＦＯ７０１は、一例として、２段以上のシフトレジスタで構成され、開放されるたびに最古の情報が削除され、次に古い情報（開放される前の段階では、２番目に古かった情報）が取得できるような実装になっている。また、このＦＩＦＯ７０１が完全に満たされている状態では、新しく情報を書き込むことはできないものとする。本実施形態では、通信パケットのグループ化の途中でサブＣＰＵ１０６が受信処理を開始することを可能にするために、ＦＩＦＯ７０１に情報が格納されていることや、内部メモリ１１３にグループ化の結果（アプリケーション情報／パケット情報）が格納されていることがＣＰＵ１０６等に通知される。通知には、レジスタ部１１２１のステータス情報が使用される。ステータス情報は、（ａ）リセット中、（ｂ）アイドル中、（ｃ）処理中、（ｄ）即時処理パケット有り、（ｅ）処理完了、の全５つの状態のいずれかを示す。
【００６４】
（ａ）「リセット中」の状態は、リセット信号がアサートされている状態を指す。この状態では、サブＣＰＵ１０６は、グループ化処理部１１１を動作させることはできない。グループ化処理部１１１を動作させるためには、サブＣＰＵ１０６は、まず、リセット信号のデアサートを行う必要がある。リセット信号は、例えば、通信装置１００の外部リセットボタンと接続され、ユーザがボタンを押している間はリセット信号がアサートされ、離している場合はリセット信号がデアサートされる。リセット信号がデアサートされると、グループ化処理部１１１はアイドル中の状態へ移行する。
（ｂ）「アイドル中」は、グループ化処理部１１１が処理要求待ちの状態を指す。サブＣＰＵ１０６から処理要求を受け取ると、グループ化処理部１１１はアイドル中から処理中の状態に移行する。
（ｃ）「処理中」の状態では、グループ化処理部１１１は、図９（後述）のフローを開始することができる。図１０のフローにおけるＳ１００５（後述）の処理が行われると、グループ化処理部１１１は即時処理パケットありの状態へ移行する。即時処理パケットありの状態であっても、グループ化処理部１１１は、後述する図９や図１０のフローを継続して実施する。
（ｄ）「即時処理パケット有り」の状態では、サブＣＰＵ１０６がレジスタ部１１２１を介してＦＩＦＯ７０１に格納されている通信パケットの先頭アドレスの開放を行うと、グループ化処理部１１１の実行状態に応じてステータス情報は変化する。第一に、開放後ＦＩＦＯ７０１に別の通信パケットの先頭アドレスが格納されている場合は、ステータス情報は即時処理パケットありのままから変化しない。第二に、開放後ＦＩＦＯ７０１に別の通信パケットの先頭アドレスが格納されておらず、図９のフローも終了していない場合、ステータス情報は処理中に変化する。最後に、開放後ＦＩＦＯ７０１に別の通信パケットの先頭アドレスが格納されておらず、図９のフローが終了している場合、ステータス情報は処理完了に変化する。
（ｅ）「処理完了」では、グループ化処理部１１１が内部メモリ１１３にグループ化の結果が出力していると同時に、次の処理要求を受け付けることが可能な状態を指す。
グループ化処理部１１１は、これら５つのステータス情報をレジスタ部に表示することで、サブＣＰＵ１０６は、ステータス情報から適宜適切な処理を実施することが可能となる。
【００６５】
次に、グループの優先度の設定について説明する。実施形態１では、優先度を指定する場合、アプリケーション毎に３ビットの情報をサブＣＰＵ１０６がレジスタ部１１２１に設定した。実施形態２でもレジスタ部１１２１に指定する構成とするが、本実施形態では、新たに即時処理を行うかどうかを示す情報として１ビット追加し、優先度に関する情報は合計４ビット使用する。優先度は９段階とし、最高優先度である優先度８は、即時処理用の設定として、優先度７〜０は、実施形態１と同様である。また、実施形態１と同様に条件に応じて優先度を変化させるフローが存在するが、本実施形態では、優先度７以下から８へ優先度を上げることはしない。すなわち、優先度の変更は７〜０の間で変化するものとする。なお、ネットワーク層がＩＰｖ４もしくはＩＰｖ６で、トランスポート層がＴＣＰもしくはＵＤＰのプロトコルを使用している場合に、優先度を指定できるとは限らない。通信パケットのイーサヘッダのタイプフィールドの値毎にも優先度を設定できようにレジスタ部１１２１を構成してもよい。コア部１１２内のグループ管理部１１２３は、同一アプリケーション毎に通信パケットのグループ化を行うだけでなく、高優先度パケットのＦＩＦＯ７０１への格納や、アプリケーション情報がないパケットのグループ化処理も行う。
【００６６】
（通信装置１００の処理フロー）
続いて、図８を参照して、本実施形態における通信装置１００の動作フローについて説明する。図８は、通信装置１００がネットワーク１１０を介して外部機器と接続し、その外部機器へ通信パケットを受信する際の、サブＣＰＵ１０６による処理フローである。この処理フローは、サブＣＰＵ１０６がメインメモリ１０３に記憶されている制御プログラムを実行することにより実現され得る。なお、図２のフローと同等の処理を行う部分に関しては同一符号を付与し、説明を省略する。
【００６７】
Ｓ８０１は、このフローのスタートである。通信装置１００が、ネットワーク１１０から通信パケットを受信して、通信インターフェース１０９によるドライバ処理が終了し、サブＣＰＵ１０６が受信キュー（不図示）に格納された通信データを受け取ったところから開始する。Ｓ８０２では、サブＣＰＵ１０６は、Ｓ２０３と同様の処理を実施し、処理開始命令を発行する。なお、処理開始命令を受けとったグループ化処理部１１１は、図９を用いて後述する処理を開始する。Ｓ８０４では、サブＣＰＵ１０６は、グループ化処理部１１１のレジスタ部１１２１からステータス情報を取得する。ステータス情報の取得後、処理はＳ８０５へ進む。Ｓ８０５では、Ｓ８０４で取得したステータス情報によって、以降の処理が分岐される。ステータス情報が「即時処理パケット有り」を示す場合は、処理はＳ８０６へ進み、それ以外の状態であれば、処理はＳ８０８へ進む。
【００６８】
Ｓ８０６では、Ｓ８０４で取得したステータス情報から即時処理を行うパケットが存在することが判明したので、サブＣＰＵ１０６は、レジスタ部１１２１を介して通信パケットの先頭アドレスを取得し、プロトコル処理を開始する。なお、実施形態１と同様にここでのプロトコル処理は一般的なものを指しているため、説明を省略する。プロトコル処理終了後、処理はＳ８０７へ進む。Ｓ８０７では、Ｓ８０６で取得した通信パケットのプロトコル処理が完了したので、サブＣＰＵ１０６は、レジスタ部１１２１を介してＦＩＦＯ７０１の最古の情報を開放する。なお、Ｓ８０６における先頭アドレスの取得直後に、サブＣＰＵ１０６は、開放処理を実施してもかまわない。開放処理を行わなければ、ＦＩＦＯ７０１が更新されず、なおかつ、ステータス情報も更新されない。開放処理終了後、処理はＳ８０４へ進み、もう一度、サブＣＰＵ１０６は、グループ化処理部１１１のステータス確認を行う。
【００６９】
Ｓ８０８では、Ｓ８０４で取得したステータス情報によって、以降の処理が分岐される。ステータス情報が「処理完了」を示す場合は、処理はＳ８０９へ進み、それ以外の状態であれば、処理はＳ８０４へ進む。Ｓ８０９では、Ｓ８０４で取得したステータス情報によりグループ化処理部１１１の処理が終了している（すなわち、サブＣＰＵ１０６に処理終了が通知される）ので、サブＣＰＵ１０６は、受信処理を開始する。受信処理終了後、処理はＳ８１０へ進み、本フローは終了する。受信処理の詳細は、図１２を用いて後述する。
【００７０】
次に、図９を参照して、図８のＳ８０３で発行された処理開始命令を受け取ったグループ化処理部１１１が行う処理について説明する。図９は、本実施形態におけるグループ化処理部１１１の処理フロー図である。この処理フローは、グループ化処理部１１１がメインメモリ１０３に記憶されている制御プログラムを実行することにより実現され得る。なお、図３のフローと同等の処理を行う部分に関しては同一符号を付与し、説明を省略する。
【００７１】
Ｓ９０１は、本フローのスタートであり、サブＣＰＵ１０６から処理開始命令（図８のＳ８０２）を受け取った際に開始する。Ｓ３０２の処理後、ステータス情報は「処理中」に移行する。Ｓ９０２では、グループ化処理部１１１のパケット解析部１１２２は、Ｓ３０２でリードした通信パケットのヘッダ解析を実施する。実施形態１では、ＴＣＰやＵＤＰ、ＩＰｖ４やＩＰｖ６を前提とした実装であるが、本実施形態では、パケット解析部１１２２は、これらのプロトコルに該当するかどうかについて判定も行う。例えば、通信パケットがＡＲＰパケットであれば、イーサヘッダのタイプフィールドは０ｘ０８０６を示すので、パケット解析部１１２２は、この情報を用いてプロトコルに関する判定を行う。ＡＲＰパケットは、ＴＣＰ／ＩＰパケットやＵＤＰ／ＩＰパケットではないため、実施形態１で定義したアプリケーション情報を持たない。ＡＲＰパケットに限らず、ＩＣＭＰやＲＳＶＰといったプロトコルも同様に、実施形態１で定義したアプリケーション情報を持たない。後述するが、アプリケーション情報を持たず、優先度も指定されていないと判定された通信パケットは、グループ管理部１１２３は、すべて同一グループにまとめる。
【００７２】
Ｓ９０３では、グループ化処理部１１１のグループ管理部１１２３は、Ｓ９０２での通信パケットの解析結果を元にグループ登録を行う。Ｓ９０３の処理は、図１０を用いて後述する。Ｓ９０４では、優先度管理部１１２４は、通信パケットが紐付けられているグループの優先順位を決定する。Ｓ９０４の処理は、図１１を用いて後述する。Ｓ９０５では、グループ化処理部１１１のグループ管理部１１２３は、Ｓ３０７と同様に優先度にしたがってグループ順序の入れ替えを行う。Ｓ９０６では、グループ化処理部１１１は、ＦＩＦＯ７０１が空かどうかを判定する。空の場合は（Ｓ９０６でＹｅｓ）、処理はＳ９０７へ進み本フローは終了し、空ではない（情報が格納されている）場合は（Ｓ９０６でＮｏ）、処理はもう一度Ｓ９０６に進む。ＦＩＦＯ７０１に情報が格納されている場合は、ステータス情報は「即時処理パケット有り」を示したままである一方で、ＦＩＦＯ７０１が空である場合は、ステータス情報は「処理完了」へ移行する。
【００７３】
次に、図１０を参照して、図９のＳ９０３の処理を説明する。図１０は、グループ化処理部１１１のグループ管理部１１２３によるグループ登録処理の処理フロー図である。本フローは、Ｓ９０３に到達した時点で開始する（Ｓ１００１）。なお、図４のフローと同等の処理を行う部分に関しては同一符号を付与し、説明を省略する。
【００７４】
Ｓ１００２では、グループ管理部１１２３は、図９のＳ３０２でリードした通信パケットが、即時処理を指定されている通信パケットかどうかを判定する。即時処理を指定されている場合は（Ｓ１００２でＹｅｓ）、処理はＳ１００４へ進み、そうでない場合は（Ｓ１００２でＮｏ）、処理はＳ１００３へ進む。指定方法は、前述したように、グループ化処理部１１１のレジスタ部１１２１を介して、事前にサブＣＰＵ１０６により行われ得る。Ｓ１００２の判定は、例えば、Ｓ９０１での解析結果とレジスタ部１１２１の情報を比較することにより行われる。また、別の例として、グループ管理部１１２３が自立的に即時処理を行うべきパケットを判定しても良い。例えば、グループ管理部１１２３が、通信相手のＩＰアドレスを用いてアプリケーション情報を特定し、当該アプリケーション情報から即時処理を行うアプリケーションかどうかを判定しても良い。なお、この場合、通信装置１００は、通信相手のＩＰアドレスを事前に知ることはできないため、ＳＩＰサーバへＩＮＶＩＴＥメソッドを送信することで、通信相手のＩＰアドレスを取得することができる。なお、ＩＰ電話のトランスポート層のプロトコルはＵＤＰが一般的であるため、アプリケーション情報における各情報は取得したＩＰアドレスが記載されている通信パケットからたどることが可能である。
【００７５】
Ｓ１００３では、グループ管理部１１２３は、Ｓ９０１でのヘッダ解析によりアプリケーション情報があるかどうかを判定する。アプリケーション情報がある場合は（Ｓ１００３でＹｅｓ）、処理はＳ４０２へ進み、アプリケーション情報がない場合は（Ｓ１００３でＮｏ）、処理はＳ１００８へ進む。なお、アプリケーション情報は、実施形態１と同等のものを指す。
【００７６】
Ｓ１００４では、グループ管理部１１２３は、ＦＩＦＯ７０１に空きがあるかどうかを判定する。空きがある場合は（Ｓ１００４でＹｅｓ）、処理はＳ１００５へ進み、空きがない場合は（Ｓ１００４でＮｏ）、Ｓ１００４の状態のまま状態遷移しない。ＦＩＦＯ７０１に通信パケットが格納されていると、レジスタ部１１２１のステータス情報に「即時処理パケット有り」が示されているので、サブＣＰＵ１０６は、その情報を頼りに、通信パケットの先頭アドレスの取得後、取得と開放を行う。開放が行われば、ＦＩＦＯ７０１に格納されていた最古の情報が削除され、新しく情報を格納できる状態となる。Ｓ１００５では、グループ管理部１１２３は、ＦＩＦＯ７０１へその通信パケットの先頭アドレスの値を格納する。格納後、処理はＳ１０１４へ進み、本フローは終了する。
【００７７】
Ｓ４０２では、グループ管理部１１２３は、図９のＳ９０２で解析した通信パケットのアプリケーション情報と同じアプリケーション情報を有するグループが、すでに内部メモリ１１３に存在するかどうかを判定する。Ｓ９０２で解析した通信パケットのアプリケーション情報と同じアプリケーション情報を有するグループが存在しない場合は（Ｓ４０２でＮｏ）、処理はＳ１００６へ進み、存在する場合は（Ｓ４０２でＹｅｓ）、処理はＳ１００７へ進む。
【００７８】
Ｓ１００６では、グループ管理部１１２３は、新規にグループを生成し、当該新規のグループに通信パケットを登録する。ここで、グループ管理部１１２３は、図４のＳ４０３で述べた情報に加えて、グループ種別情報も内部メモリ１１３に書き出す。本実施形態では、グループ種別情報もグループ情報を構成する１つとする。グループ種別として、「通常グループ」、「特定プロトコルグループ」、「その他グループ」が設定される。「通常グループ」は、アプリケーション情報が同一のグループを指し、実施形態１と同様です。アプリケーション情報を持たない通信パケットは「特定プロトコルグループ」もしくは「その他グループ」に分類される。「特定プロトコルグループ」は、指定されるプロトコルを使用されていれば、そのプロトコルごとにグループ化されるグループを指す。一方、「その他グループ」は、様々なプロトコルを持つ通信パケット群がまとめられるグループを指す。「特定プロトコルグループ」は、プロトコルごとにまとまっているため、そのプロトコル専用のプロトコルスタックにまとめて渡すことで、タスクスイッチの発生を抑えることで効率的な処理が可能となる。一方、「その他グループ」は、必然的にひとつひとつプロトコル判定を行って、必要に応じたプロトコル処理を実施する必要がある。なお、「その他グループ」は優先的に処理をする必要はなく（つまり、即時性があまりない）、それほど効率性を求めない通信パケットが登録されるようにサブＣＰＵ１０６が制御してもよい。例えば、ＡＲＰやＩＣＭＰなどがそれに該当する。「その他グループ」と「特定プロトコルグループ」は、アプリケーション情報がないので、グループ管理部１１２３は、グループ情報において、アプリケーション情報の領域をブランクとして扱う（領域は確保されているが、有効な情報が格納されていない状態）。また、この２つのグループでは、パケット情報には通信パケットの先頭アドレスのみが有効となり、そのほかの領域はブランクとして扱われる。Ｓ１００７では、グループ管理部１１２３は、通信パケットを、該当するグループに追加する。Ｓ１００７の処理は、図４のＳ４０４と同様である。
【００７９】
Ｓ１００８では、グループ管理部１１２３は、通信パケットが、パケット転送のための特定のプロトコルを使用しているかどうかを判定する。この判定の前提の一例として、特定プロトコルは、レジスタ部１１２１に設定されるイーサヘッダのタイプフィールド値により、指定できるものとする。なお、レジスタ部１１２１には、複数のイーサヘッダのタイプフィールド値が設定され得る。この例の場合では、通信パケットのイーサヘッダのタイプフィールド値が、レジスタ部１１２１に設定されているイーサヘッダのタイプフィールド値と一致しない場合は（Ｓ１００８でＮｏ）、処理はＳ１００９へ進み、一致する場合は（Ｓ１００８でＹｅｓ）、処理はＳ１０１２へ進む。
【００８０】
特定プロトコルの例として、例えば、ＥｔｈｅｒｎｅｔＡＶＢプロトコルがある。ＥｔｈｅｒｎｅｔＡＶＢプロトコルは、同期通信を行うためのプロトコルである。ＥｔｈｅｒｎｅｔＡＶＢプロトコルを使用する場合、ネットワーク層でのＩＰプロトコルを使用せずに、ＡＶＢ  Ｔｒａｎｓｐｏｒｔ  Ｐｒｏｔｏｃｏｌ（以後ＡＶＴＰとする）を使用し、イーサヘッダのタイプフィールド値として０ｘ８８Ｂ５を使用する。また、ＡＶＴＰを規定する仕様では、伝送するデータ種類や同期通信を実現する端末グループを限定するために、ｓｔｒｅａｍＩＤと呼ばれるフィールドが存在する。この仕様を受けて、イーサヘッダのタイプフィールド値とｓｔｒｅａｍＩＤの組み合わせを使用して、グループ化処理部１１１は、Ｓ１００８での判定を行っても良い。
【００８１】
Ｓ１００９では、グループ管理部１１２３は、「その他グループ」がすでに生成されているかどうかを判定する。生成されている場合は（Ｓ１００９でＹｅｓ）、処理はＳ１０１１へ進み、そうでない場合は（Ｓ１００９でＮｏ）、処理はＳ１０１０へ進む。Ｓ１０１０では、グループ管理部１１２３は、新規に「その他グループ」を生成し、当該その他のグループに通信パケットを登録する。グループ作成時には、グループ管理部１１２３は、グループ情報とパケット情報を内部メモリ１１３に書き出す。また、グループ管理部１１２３は、グループ情報を書き出した先頭アドレスと、「その他グループ」に登録された通信パケット数（Ｓ１０１０に来るときは、かならず１となる）を内部バッファ（不図示）に記憶しておく。処理終了後、処理はＳ１０１５へ進み、本フローは終了する。Ｓ１０１１では、「その他グループ」が作られているので、グループ管理部１１２３は、当該その他のグループへ通信パケットを登録する。グループ管理部１１２３は、登録時にはパケット情報を内部メモリ１１３に書き出し、「その他グループ」に登録された通信パケット数を更新する。処理終了後、処理はＳ１０１５へ進み、本フローは終了する。
【００８２】
Ｓ１０１２では、グループ管理部１１２３は、使用している特定のプロトコルのグループが生成されているかどうかを判定する。まだ、使用している特定のプロトコルのグループが生成されていない場合は（Ｓ１０１２でＮｏ）、処理はＳ１０１３へすすみ、生成されている場合は（Ｓ１０１２でＹｅｓ）、処理はＳ１０１４へ進む。Ｓ１０１３では、グループ化処理部１１１は、新規に「特定プロトコルグループ」のグループを生成し、当該特定プロトコルグループへ通信パケットを登録する。グループ作成時には、グループ化処理部１１１は、グループ情報とパケット情報を内部メモリ１１３に書き出す。また、グループ化処理部１１１は、グループ情報を書き出した先頭アドレスと、その「特定プロトコルグループ」グループに登録された通信パケット数（Ｓ１０１３に来るときは、かならず１となる）を内部バッファ（不図示）に記憶しておく。さらに、その際も、グループ化処理部１１１は、イーサヘッダのタイプフィールド値も内部バッファ（不図示）へ書き出しておくことで、グループの優先度で並び換えを行いやすくなる。登録後、処理はＳ１０１５へ進み、本フローは終了する。Ｓ１０１４では、該当する「特定プロトコルグループ」があるので、グループ管理部１１２３は、当該特定プロトコルグループへ通信パケットを登録する。登録する際は、グループ化処理部１１１は、パケット情報を内部メモリ１１３に書き出し、該当する「特定プロトコルグループ」に登録された通信パケット数を更新する。処理終了後、処理はＳ１０１５へ進み、本フローは終了する。
【００８３】
次に、図１１を参照して、図９のＳ９０４の処理を説明する。図１１は、優先度管理部１１２４によるグループ優先順位決定処理のフローである。本フローは、Ｓ９０４のフローに到達したときに開始する（Ｓ５０１）。図５のフローと同様の処理を行う部分は符号を統一し、説明を省略する。Ｓ１１０１では、優先度管理部１１２４は、対象のグループ情報に対して優先度が設定されているかどうかを判定する。優先度が指定されている場合は（Ｓ１１０１でＹｅｓ）、処理はＳ５０４へ進み、指定されていない場合は（Ｓ１１０１でＮｏ）、処理はＳ５０５へ進む。本実施形態では、「通常グループ」と「特定プロトコルグループ」と「その他グループ」の３種類が存在する。まず、「通常グループ」と「特定プロトコルグループ」はレジスタ部１１２１にて優先度をあらかじめ指定されているものがあるため、指定されているか確認を行う。一方、「その他グループ」は必ずＳ５０５に進むように制御される。以上により、本実施形態で定義される各グループに対して優先順位が設定される。
【００８４】
次に、図１２を参照して、図８のＳ８０９の処理を説明する。図１２は、サブＣＰＵ１０６による受信処理のフローである。本フローは、Ｓ８０９のフローに到達したときに開始する（Ｓ１２０１）。図６のフローと同様の処理を行う部分は符号を統一し、説明を省略する。Ｓ１２０２では、サブＣＰＵ１０６は、Ｓ６０２で取得したグループ情報においてグループ種別情報が通常グループであるかどうかを判定する。通常グループである場合（Ｓ１２０２でＹｅｓ）、処理はＳ６０３へ進み、そうでない場合は（Ｓ１２０２でＮｏ）、処理はＳ６０５へ進む。なお、実施形態１と同様に、レジスタ部１１２１の処理結果領域には、グループ情報が格納されている先頭アドレスが書き込まれている（Ｓ３０７）ため、図６のＳ６０２からＳ６０６のループの処理では、その順番にグループ情報を取得することができる。
【００８５】
このように本実施形態によれば、グループ化処理部は、定義する複数のグループのそれぞれに対して、受信処理の優先度を決定する。そして、サブＣＰＵ１０６は、グループ化処理部１１１の処理結果を利用して受信処理を行い、効率的かつ優先度順に上位アプリケーションにデータを渡すことが可能となる。なお、実施形態１における通信装置１００は、本実施形態のようにＦＩＦＯ７０１を有する構成となっていないが、本実施形態のように即時処理すべきのパケットに対して個別にプロトコル処理を行う構成とすることも可能である。
【００８６】
［実施形態３］
実施形態１では、サブＣＰＵ１０６が一度グループ化処理部１１１に対して処理開始命令を発行し、当該命令に対する処理終了の検知に応じて受信処理を行う構成であった。実施形態３では、サブＣＰＵ１０６が必要に応じて、グループ化処理部１１１に対して複数の処理開始命令を発行し、当該複数の命令に対する最終的な処理終了の検知に応じて、受信処理を行う構成について説明する。
【００８７】
（通信装置１００の構成）
本実施形態における通信装置１００の構成を、実施形態１と実施形態２と異なる点について説明し、一致する点については説明を省略する。実施形態１と実施形態２では、サブＣＰＵ１０６がグループ化処理部１１１に対して処理開始の命令を行う際、パケット数やパケットの先頭アドレスなどの設定情報をセットした。本実施形態では、サブＣＰＵ１０６が設定情報におけるパケット数とパケットの先頭アドレスをローカルメモリ１０７やメインメモリ１０３などの連続領域に格納し、その先頭アドレスをレジスタ部１１２１にセットする構成とする。グループ化処理部１１１は、処理開始時にそのアドレスからたどってパケット数やパケットの先頭アドレスを読み取る。当該先頭アドレスアドレスを格納するレジスタ部１１２１はＦＩＦＯで構成され得る。
【００８８】
（通信装置１００の処理フロー）
続いて、図１３を参照して、本実施形態における通信装置１００の動作フローについて説明する。図１３は、本実施形態における通信装置１００のサブＣＰＵ１０６におけるパケット受信に関する処理フローである。本フローは、サブＣＰＵ１０６がメインメモリ１０３に記憶されている制御プログラムを実行することにより実現され得る。本フローは、サブＣＰＵ１０６のリセットが解除された場合に開始し、さらに本フローが終了した場合も再度開始する（Ｓ１３０１）。なお、実施形態１と同等の処理を行うものは同一符号を用いており、説明を省略する。
【００８９】
Ｓ１３０２では、サブＣＰＵ１０６は、受信キューの中に未処理の（すなわち、グループ化処理部１１１へ渡していない）パケットが存在するかどうかを判定する。存在する場合は（Ｓ１３０２でＹｅｓ）、処理はＳ２０２へ進み、そうでない場合は（Ｓ１３０２でＮｏ）、処理はＳ２０４に進む。なお、グループ化処理部１１１の制約において、一度の処理命令で入力できるパケット数に上限がある場合は、Ｓ２０２での一時解析は、その上限までの解析を行う。Ｓ１３０３では、サブＣＰＵ１０６は、Ｓ２０２での一時解析を元に、グループ化処理部１１１へ処理開始命令を発行する。サブＣＰＵ１０６は、パケット数とパケットの先頭アドレスの情報を、所定のフォーマットでローカルメモリ１０７もしくはメインメモリ１０３に記載して、その先頭アドレスをレジスタ部１１２１へ入力する。それ以外はＳ２０３と同等の処理を行う。処理終了後、処理はＳ２０４へ進む。Ｓ１３０４では、サブＣＰＵ１０６が、Ｓ２０５にて受信処理が完了して本フローが終了する。なお、前述したように、再度本フローは開始する。
【００９０】
次に、図１４を参照して、図１３のＳ１３０３で発行された処理開始命令を受け取ったグループ化処理部１１１が行う処理について説明する。図１４は、本実施形態におけるグループ化処理部１１１の処理フロー図である。なお、グループ化処理部１１１は、本フロー処理中に新しく処理開始命令を受け取った場合は、新しく本フローの処理が開始するのではなく、すでに開始しているフローの中で新しい処理命令に対する処理も実施する。本フローは、グループ化処理部１１１がメインメモリ１０３に記憶されている制御プログラムを実行することにより実現され得る。また、実施形態１と同等の処理を行うものは同一符号を用い、説明を省略する。
【００９１】
Ｓ１４０１は、本フローのスタートを示している。Ｓ１４０２では、グループ化処理部１１１のパケット解析部１１２２は、レジスタ部１１２１に設定された先頭アドレスを使用してパケット数とパケットの先頭アドレスを取得する。なお、のパケット解析部１１２２は、取得した情報を内部のバッファ（不図示）に一時保存する。取得後、処理はＳ３０２へ進む。
【００９２】
Ｓ１４０３では、グループ化処理部１１１のグループ管理部１１２３は、次の処理開始の命令があるかどうかを判定する。次の処理開始の命令がある場合は（Ｓ１４０３でＹｅｓ）、処理はＳ１４０２へ進み、ない場合は（Ｓ１４０３でＮｏ）、処理はＳ３０６へ進む。Ｓ１４０３における判定は、パケット数とパケットの先頭アドレスが格納されているローカルメモリ１０７やメインメモリ１０３の先頭アドレスがまだ存在するか（ＦＩＦＯ構造であれば空かどうか）を判定することにより行われる。先頭アドレスが存在しない場合は、サブＣＰＵ１０６が次の処理開始の命令を発行していないことを意味する。Ｓ１４０４は、本フローの終了を示している。
【００９３】
このように本実施形態によれば、実施形態１に述べた効果に加えて、複数の処理開始命令に対する最終的な処理終了を受けて受信処理を行うことにより、より効率的な受信処理が実現される。
【００９４】
［実施形態４］
実施形態３では、実施形態１をベースとした構成であった。実施形態４では実施形態２をベースとし、グループ化処理部１１１が複数回処理を行い、当該複数回の処理をまとめて受信処理する構成について説明する。なお、本実施形態における通信装置１００は、図７記載の通信装置１００と同等の構成とする。なお、機能ブロックにおける実施形態２との機能の差分については、実施形態３で説明した実施形態１からの機能ブロックにおける差分と同じのため、説明を省略する。
【００９５】
（通信装置１００の処理フロー）
続いて、図１５を参照して、本実施形態における通信装置１００の動作フローについて説明する。図１５は、本実施形態における通信装置１００のサブＣＰＵ１０６におけるパケット受信に関する処理フローである。本フローは、サブＣＰＵ１０６のリセットが解除された場合に開始し、さらに本フローが終了した場合も再度開始する（Ｓ１５０１）。本フローは、サブＣＰＵ１０６がメインメモリ１０３に記憶されている制御プログラムを実行することにより実現され得る。また、実施形態１から実施形態３と同等の処理を行うものは同一符号を用い、説明を省略する。
【００９６】
Ｓ１５０２では、サブＣＰＵ１０６は、グループ化処理部１１１に処理開始命令を発行したかどうかを判定する。処理開始命令を発行した場合は（Ｓ１５０２でＹｅｓ）、処理はＳ８０４へ進み、そうでない場合は（Ｓ１５０２でＮｏ）、処理はＳ１３０２へ進む。なお、Ｓ１５０１から本フローが開始するたびに処理開始命令を発行したかどうかを記憶する変数は初期化されるものとする。したがって、Ｓ１５０４で一度本フローが終了する際にその変数は「発行した」を示すが、再度Ｓ１５０１で開始するときにはその変数は「発行していない」を示す。
【００９７】
Ｓ１５０３では、サブＣＰＵ１０６は、Ｓ１３０３と同等の処理を行い、Ｓ１５０２で説明した変数を「発行した」へ変更を行う。処理完了後、Ｓ１５０２へ進む。Ｓ１５０４では、受信処理が完了して本フローが終了する。なお、前述したように、再度本フローは開始するものとする。
【００９８】
次に、図１６を参照して、図１５のＳ１５０３で発行された命令を受け取ったグループ化処理部１１１が行う処理について説明する。図１６は、本実施形態におけるグループ化処理部１１１の処理フロー図である。なお、グループ化処理部１１１が動作中に新しい処理開始命令を受け取った場合は、新しく本フローが開始するのではなく、すでに開始しているフローの中で、新しい処理開始命令に対する処理も実施する。なお、本フローは、グループ化処理部１１１がメインメモリ１０３に記憶されている制御プログラムを実行することにより実現され得る。また、実施形態１から実施形態３と同等の処理を行うものは同一符号を用い、説明を省略する。なお、本フロー内のＳ３０７における処理完了の通知は、受け取ったすべての処理命令が完了したことを意味する。本フローのＳ１６０１からＳ１５０２に遷移するときにステータス情報は「処理中」へ移行する。
【００９９】
Ｓ１６０１とＳ１６０２は、本フローの開始と終了を示している。グループ管理部１１２３は、複数の通信パケットに対して、アプリケーションごとに通信パケットのグループ化を行い、そのアプリケーション間での優先度に従って受信処理を実行するグループの順番を適切に入れ替える。そして、グループ化処理部１１１は、各グループに所属する通信パケットをまとめて上位アプリケーションに渡す。
【０１００】
このように本実施形態によれば、実施形態２に述べた効果に加えて、複数の処理開始命令に対する最終的な処理終了を受けて受信処理を行うことにより、より効率的な受信処理が実現される。
【０１０１】
以上に説明した各実施形態によれば、グループ単位で優先度を設定することにより、ＬＲＯのメリットである処理効率を維持しながら、優先度の高いグループのパケットに対して受信処理をより早いタイミングで実施することが可能となる。これにより、例えば、単一のパケットに優先度を設定して受信処理を行う場合と比較して、即応性を要求するパケットのグループに対してより早いタイミングで実施することが可能となる。
【０１０２】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１０３】
１００  通信装置、１０２  メインＣＰＵ、１０４  サブシステム、１０６  サブＣＰＵ、１０８  ＤＭＡコントローラ、１１０  グループ化処理部
【図１】
2019213059.tif 000003
【図２】
2019213059.tif 000004
【図３】
2019213059.tif 000005
【図４】
2019213059.tif 000006
【図５】
2019213059.tif 000007
【図６】
2019213059.tif 000008
【図７】
2019213059.tif 000009
【図８】
2019213059.tif 000010
【図９】
2019213059.tif 000011
【図１０】
2019213059.tif 000012
【図１１】
2019213059.tif 000013
【図１２】
2019213059.tif 000014
【図１３】
2019213059.tif 000015
【図１４】
2019213059.tif 000016
【図１５】
2019213059.tif 000017
【図１６】
2019213059.tif 000018