(57)【要約】【課題】ＬＲＯ処理の効率を向上させる【解決手段】通信装置は、過去に受信したパケットに関する情報を履歴情報として管理し、該履歴情報に基づいて、複数の受信パケットの各々に対して、ＬＲＯ（Large Receive Offload）処理を行うか否かを決定し、該複数の受信パケットのうち、該ＬＲＯ処理を行うと決定された複数のパケットに対して、該ＬＲＯ処理を行う。【選択図】図２
2019220791.tif 000002
【特許請求の範囲】
【請求項１】
通信装置であって、
過去に受信したパケットに関する情報を履歴情報として管理する管理手段と、
前記履歴情報に基づいて、複数の受信パケットの各々に対して、ＬＲＯ（Large Receive Offload）処理を行うか否かを決定する決定手段と、
前記複数の受信パケットのうち、前記決定手段により前記ＬＲＯ処理を行うと決定された複数のパケットに対して、前記ＬＲＯ処理を行うＬＲＯ処理手段と、
を有することを特徴とする通信装置。
【請求項２】
前記ＬＲＯ処理手段は、前記ＬＲＯ処理として、
前記決定手段により前記ＬＲＯ処理を行うと決定された複数のパケットに対してグルーピングを行って１つ以上のグループを生成し、当該生成されたグループ毎にラージパケットを生成することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記管理手段は、前記履歴情報として、前記通信装置におけるポート毎に、  前記１つ以上の項目は、前記過去に受信したパケットについて、パケットの受信頻度、リンクアップ時の通信速度、フラグメントパケットであるか否かを示す情報、ペイロード長がＭＳＳ（Maximum Segment Size）以下か否かを示す情報のうち少なくともいずれかを管理することを特徴とする請求項１または２に記載の通信装置。
【請求項４】
前記履歴情報に基づいて、前記通信装置におけるＬＲＯ対象のポートを決定する決定手段を更に有し、
前記決定手段は、前記決定手段により決定された前記ＬＲＯ対象のポートからのパケットに対して前記ＬＲＯ処理を行うと決定することを特徴とする請求項１から３のいずれか１項に記載の通信装置。
【請求項５】
前記管理手段は、前記履歴情報として、前記過去に受信したパケットそれぞれに含まれるアドレス情報毎に、前記過去に受信したパケットについて、パケットの受信頻度、リンクアップ時の通信速度、フラグメントパケットであるか否かを示す情報、ペイロード長がＭＳＳ（Maximum Segment Size）以下か否かを示す情報のうち少なくともいずれかを管理することを特徴とする請求項１または２に記載の通信装置。
【請求項６】
前記履歴情報に基づいて、ＬＲＯ対象のアドレス情報を決定する決定手段を更に有し、
前記決定手段は、前記決定手段により決定された前記ＬＲＯ対象のアドレス情報を含むパケットに対して前記ＬＲＯ処理を行うと決定することを特徴とする請求項１から５のいずれか１項に記載の通信装置。
【請求項７】
前記アドレス情報は、ＩＰ（Internet Protocol）アドレスまたはＭＡＣ（Media Access Control）アドレスの情報であることを特徴とする請求項５または６に記載の通信装置。
【請求項８】
前記管理手段は、所定のタイミングで前記履歴情報を更新することを特徴とする請求項１から６のいずれか１項に記載の通信装置。
【請求項９】
前記管理手段は、前記所定のタイミングとして、前記通信装置と通信相手装置とのコネクションが切断された場合、前記コネクションが確立された場合、前記ＬＲＯ処理としてのグルーピングの回数が規定値に達した場合、前記複数の受信パケットのいずれかを利用するアプリケーションが終了した場合、または、前記アプリケーションが開始した場合に、前記履歴情報を更新することを特徴とする請求項８に記載の通信装置。
【請求項１０】
前記決定手段により前記ＬＲＯ処理を行うと決定された複数のパケットに対しては、前記ＬＲＯ処理手段による前記ＬＲＯ処理後のパケットに対して所定の受信プロトコル処理を行い、
前記決定手段により前記ＬＲＯ処理を行わないと決定された１つ以上のパケットに対しては、前記ＬＲＯ処理手段による前記ＬＲＯ処理なしに前記所定の受信プロトコル処理を行う処理手段を更に有することを特徴とする請求項１から９のいずれか１項に記載の通信装置。
【請求項１１】
通信装置の制御方法であって、
過去に受信したパケットに関する情報を履歴情報として管理する管理工程と、
前記履歴情報に基づいて、複数の受信パケットの各々に対して、ＬＲＯ（Large Receive Offload）処理を行うか否かを決定する決定工程と、
前記複数の受信パケットのうち、前記決定工程において前記ＬＲＯ処理を行うと決定された複数のパケットに対して、前記ＬＲＯ処理を行うＬＲＯ処理工程と、
を有することを特徴とする通信装置の制御方法。
【請求項１２】
コンピュータを、請求項１から１０のいずれか１項に記載の通信装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケットの受信処理技術に関する。
【背景技術】
【０００２】
近年、Ｗｅｂサービスを取り巻く環境は、クラウド・コンピューティングやＩｏＴ（Internet of Things）プロダクト、サービスの台頭による通信情報の多様化、トラフィック容量の増加が進み、ネットワークの高速化が加速している。一方、このようなＷｅｂサービス上でデータ通信を行う場合には、通信プロトコルとしてＴＣＰ／ＩＰ（Transmission Control Protocol／Internet Protocol）やＵＤＰ／ＩＰ（User Datagram Protocol／Internet Protocol）が最も広く利用されている。ＴＣＰ／ＩＰは、通信パケットの順序保証とパケット紛失時の再送制御を行う通信プロトコルである。一方、ＵＤＰ／ＩＰは、通信パケットの順序保証や紛失に対するリカバリ処理は行わない通信プロトコルである。
【０００３】
Ｗｅｂサービスにおけるネットワークの高速化を背景に、上述の通信プロトコルにおける処理速度の向上に対して、ソフト処理の一部をハード処理で実現するハードオフロード技術がＮＩＣ（Network Interface Card）機能を中心に取り組まれてきた。昨今では、ネットワーク環境に接続する機器が急増し、ＣＰＵ（Central Processing Unit）の処理能力が低い組込み製品においても、ホストＣＰＵの処理負荷の低減を目的としたプロトコル処理の高速化として、ハードオフロード技術が搭載されている。以前より、ハードオフロード技術として、例えば、受信したＴＣＰセグメントの再構築処理をハードで実現する技術であるＬＲＯ（Large Receive Offload）と呼ばれる技術がある。
【０００４】
特許文献１には、受信したＭＴＵ（Maximum Transmission Unit）以下の複数パケットをコネクション単位で集約、ペイロードを連結し、連結したペイロードに対するヘッダを生成して分割前のパケットへの再構築を行うＬＲＯの実現方法が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２６６７５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＬＲＯの実現方法として、ソケット毎に受信パケットをまとめるグルーピング処理を行い、グループ毎に複数パケットのペイロードを連結、ヘッダを集約し、１つのパケットに統合するラージパケット生成処理を行う場合には、以下の課題があった。すなわち、既定数の受信パケットに対し、グルーピング処理を実施する場合に、単一で完結するパケットが多数含まれると、ラージパケット生成処理の効率が低下し、通信速度が低下するという課題があった。
【０００７】
本発明は、上記課題に鑑みてなされたものであり、ＬＲＯ処理の効率を向上させることを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明の一態様による通信装置は、以下の構成を有する。すなわち、過去に受信したパケットに関する情報を履歴情報として管理する管理手段と、前記履歴情報に基づいて、複数の受信パケットの各々に対して、ＬＲＯ（Large Receive Offload）処理を行うか否かを決定する判定手段と、前記複数の受信パケットのうち、前記決定手段により前記ＬＲＯ処理を行うと決定された複数のパケットに対して、前記ＬＲＯ処理を行うＬＲＯ処理手段と、を有する。
【発明の効果】
【０００９】
本発明によれば、ＬＲＯ処理の効率を向上させることが可能となる。
【図面の簡単な説明】
【００１０】
【図１】通信システムの構成図。
【図２】通信ノード１０３の概略構成図。
【図３】ＬＲＯ処理部１５０の処理を表すフローチャート
【図４】ポート／アドレス決定部２１２の処理を示すフローチャート。
【図５】履歴情報の一例を示す図。
【図６】履歴管理部２１３による履歴情報の更新処理を示すフローチャート。
【図７】通信ノード１０３のＬＲＯ処理のシーケンスチャート。
【発明を実施するための形態】
【００１１】
以下、添付の図面を参照して、本発明をその実施形態の一例に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
【００１２】
［実施形態１］
（通信システム１００の構成）
図１に、実施形態における通信システム１００の構成図を示す。通信システム１００は、オフィスにおいてネットワークプリンタが複数ユーザからアクセスされることを想定したものであり、通信ノード１０１〜１０３から構成される。ここで、通信ノード１０１と通信ノード１０２は、ユーザが作業を行うためのＰＣであり、通信ノード１０３は、ネットワークプリンタであるものとする。ここでは、上記構成をネットワークの一例として以下説明を行うが、機器構成はこの限りではない。
【００１３】
通信ノード１０１では、アプリケーション１１１とアプリケーション１１２が実行され、通信ノード１０２では、アプリケーション１１３が実行される。アプリケーション１１１〜１１３は、例えば、カメラ等の撮像機器（不図示）から動画像を取得して閲覧、印刷を行うソフトウェアである。アプリケーション１１１は、プロトコルスタック１２０との界面に２つのソケットを形成し、ポート１３０を介して印刷用データ１４０を、ポート１３１を介して制御データ１４１を、通信ノード１０３へ無線ＬＡＮ等により無線で送信するための制御を行う。ここで、制御データ１４１は、単一で完結するパケットで構成されるものとする。また、アプリケーション１１２、１１３は、ポート１３２、１３３を介して印刷用データ１４２、１４３を通信ノード１０３へ有線ＬＡＮ等により有線で送信するための制御を行う。
【００１４】
通信ノード１０３では、通信相手装置である各通信ノード１０１、１０２からポート１３４〜１３７を介して受信したパケットを対象に、ＬＲＯ処理部１５０においてＬＲＯ処理が行われる。本実施形態では、ＬＲＯ処理は、グルーピング処理及びラージパケット生成処理を含むものとする。グルーピング処理とは、ソケット毎（コネクション毎）に受信パケットをまとめる処理である。また、ラージパケット生成処理とは、グルーピング処理により生成されたグループ毎に複数パケットのペイロードを連結し、連結したペイロートに対するヘッダを生成して１つのパケットに統合する処理である。ＬＲＯ処理（グルーピング処理及びラージパケット生成処理）は、ヘッダの解析によりソケットを特定し、ソケット毎に受信パケットをまとめる為のヘッダ解析用のバッファと、パケットを保持するためのメモリ領域とを必要とする。そのため、ＬＲＯ処理部１５０は、ハードウェアのリソースに応じた既定のパケット数毎に、ＬＲＯ処理を行うものとする。以下では、簡素に説明を行うため、１６パケット毎にＬＲＯ処理を行うものとするが、ハードウェアリソースとシステム性能を考慮し、１度にＬＲＯ処理を行うパケット数を増減することも可能である。
【００１５】
このように、ＬＲＯ処理部１５０は、ＬＲＯ処理として、既定数のパケット毎にグルーピング処理を行った後に、ラージパケット化処理を行う。しかしながら、このようなＬＲＯ処理を行う場合に、制御データ１４１を含むパケットのように単一で完結するパケット（以下、単一パケットと称す）を多数含むと、連結できる他のＴＣＰセグメントの数が少なくなる。よって、ラージパケットを生成する効率が低下するという問題が生じる。そこで、本実施形態では、ＬＲＯ処理部１５０は、単一パケットで構成される制御データ１４１に対しては、ＬＲＯ処理を行わず、そのままプロトコルスタック１２２に入力するように動作する。すなわち、ＬＲＯ処理部１５０は、各アプリケーション１１４〜１１６に対して単一で完結するようなパケットについてはＬＲＯ処理を行わず、そのままプロトコルスタック１２２に入力する。
【００１６】
また、ＩＰフラグメントパケットについては、全て揃わないとリアセンブルできないため、ＬＲＯ処理部１５０は、そのままプロトコルスタック１２２に入力するように動作する。これは、ＬＲＯ処理部１５０におけるグルーピング処理において、ヘッダの解析を行う際に使用するバッファが長時間解放されない状況を防ぐためである。さらに、リアセンブルに耐えうる大容量の解析用のバッファを設ける場合においても、再送が発生するようなケースでは、解析用バッファの解放が長時間できないため、ＬＲＯ処理部１５０におけるリアセンブルは実施しないものとする。ただし、ＵＤＰ通信におけるリアセンブル処理については再送が発生しないため、解析バッファの容量に応じてＬＲＯ処理部１５０で実施しても良いものとする。
【００１７】
プロトコルスタック１２２は、ＴＣＰ（ＵＤＰ）／ＩＰ通信における再送制御やパケットの順序保証、チェックサムを使用した通信パケットの整合性検査を行うソフトウェアである。プロトコルスタック１２２では、ＬＲＯ処理部１５０で生成されたラージパケットや、ＬＲＯ処理部１５０を通過した単一パケットやＩＰフラグメントパケット等に対する受信プロトコル処理が行われ、各アプリケーション１１４〜１１６へ入力される。
【００１８】
（通信ノード１０３の構成）
本実施形態における通信ノード１０３の構成について説明する。図２に、通信ノード１０３の概略構成図を示す。ここでは、受信パケットに対してＬＲＯ処理を行うか否かを判定するための仕組みを中心に説明する。
【００１９】
ＣＰＵ２０４は、各機能ブロックの制御、各種ソフトウェアとしてアプリケーション１１４〜１１６やＴＣＰ（ＵＤＰ）／ＩＰ等の通信プロトコル処理を行うプロトコルスタック１２２、各ハードウェアブロックのドライバを実行する。メモリ２０６は、ＣＰＵ２０４で実行されるアプリケーションが利用するメモリ領域である。例えば、メモリ２０６にはアプリケーションへ入力される動画像等のデータや、以下に説明する処理を可能とする制御プログラムが格納される。また、メモリ２０７は、プロトコルスタック１２２が利用するメモリ領域である。
【００２０】
通信ノード１０１または通信ノード１０２から送信されたパケットは、Ｅｔｈｅｒ  ＰＨＹ２００により受信される。受信されたパケットは、Ｅｔｈｅｒ  ＭＡＣ２０１における受信バッファ２０２に格納される。Ｅｔｈｅｒ  ＭＡＣ２０１は、パケットを受信したことをＣＰＵ２０４に通知する。この時、Ｅｔｈｅｒ  ＭＡＣ２０１は、１パケットの受信毎にＣＰＵ２０４へ通知しても良いし、複数のパケットを受信する毎にＣＰＵ２０４へ通知しても良いものとする。さらに、ＣＰＵ２０４がＥｔｈｅｒ  ＭＡＣ２０１に対してのポーリングを行い、受信を検出しても良いものとする。
【００２１】
ＬＲＯ処理部１５０におけるグルーピング処理部２１４及びラージパケット生成部２１５は、上述のグルーピング処理とラージパケット生成処理をそれぞれ行う。履歴管理部２１３は、過去に受信したパケットに関する情報を履歴情報として管理する。具体的には、履歴管理部２１３は、グルーピング処理部２１４による過去のグルーピング処理において、ＭＡＣ（Media Access Control）ヘッダ、ＩＰヘッダ、ＴＣＰ／ＵＤＰヘッダを解析した結果として、リンク速度やパケットの受信頻度、受信エラー数等を、履歴情報として管理して保持する。履歴情報については、図５を用いて後述する。
【００２２】
ポート／アドレス決定部２１２は、履歴管理部２１３で保持されている履歴情報に基づいて、ＬＲＯ非対象ポートもしくはＬＲＯ非対象アドレス／ＬＲＯ対象ポートもしくはＬＲＯ対象アドレスを決定する。パケット分類部２１１は、ポート／アドレス決定部２１２により決定されたＬＲＯ非対象ポートもしくはＬＲＯ非対象アドレスや、その他の情報に基づいて、ＬＲＯ処理を行わないパケット（以下、特定パケットとも称す）とＬＲＯ処理を行うパケット（以下、非特定パケットとも称す）とを分類する。パケット分類部２１１の処理（特定パケットか否かの判定処理）については、図３を用いて後述する。
【００２３】
パケット分類部２１１は、特定パケットを分類できた場合、特定パケットが存在することを、制御線２１６を介してＣＰＵ２０４に通知する。特定パケットに対しては、ＬＲＯ処理は行われず、プロトコルスタック１２２で受信処理が行われるため、ＣＰＵ２０４からプロトコルスタック１２２に、特定パケットが存在することが通知される。ＣＰＵ２０４からプロトコルスタック１２２への特定パケットの通知を行うタイミングは、受信パケット毎であっても良いし、１回のＬＲＯ処理後もしくは、複数のＬＲＯ処理後にまとめて通知してもよいものとする。また、ＬＲＯ処理部１５０のレジスタ（不図示）において特定パケットの存在を示すことができる場合は、ＣＰＵ２０４は、特定パケットが発生したことを、ＬＲＯ処理部１５０のレジスタをポーリングすることにより判断しても良いものとする。
【００２４】
プロトコルスタック１２２が特定パケットを識別するための方法として、例えば、メモリ２０７におけるパケット格納先頭アドレス、パケット受信順序番号等をＬＲＯ処理部１５０がメモリ２０７及び／またはＬＲＯ処理部１５０内のレジスタ（不図示）に出力し、これを参照することで実現する。また、ＬＲＯ処理部１５０が、特定パケットの一部のヘッダ情報のみ既定のアドレスに書き出し、これをプロトコルスタック１２２が参照することにより特定パケットを識別するなど、他の方法を利用しても良いものとする。
【００２５】
パケット分類部２１１により、非特定パケットに分類されたパケットは、グルーピング処理部２１４とラージパケット生成部２１５によりＬＲＯ処理が施される。ＬＲＯ処理により生成されたラージパケット、もしくは、ラージパケット化できなかったものはそのまま、ＣＰＵ２０４で動作するプロトコルスタック１２２に渡される。
【００２６】
ラージパケット生成部２１５は、ＬＲＯ処理の結果として、連結するペイロード（ラージパケットを構成する複数のペイロード）に関する情報を生成し、メモリ２０７に書き込む。具体的には、ラージパケット生成部２１５は、連結するペイロードに関する情報として、連結するペイロードのチェーン情報を有するデスクリプタを、コネクション毎に生成する。チェーン情報とは、ＤＭＡＣ２０３において、非連続なメモリ領域格納される複数のデータを一度の転送開始命令で実行するための情報である。なお、チェーン情報は、初回または次回の転送データ、もしくは、デスクリプタの先頭アドレス等で構成されても良いし、上記機能を実現できる他の情報で構成されても良いものとする。また、ラージパケット生成部２１５は、連結するペイロードに対するヘッダ情報を生成し、メモリ２０７に書き込む。なお、ラージパケット生成部２１５は、他の手法でＬＲＯ処理の結果を出力しても良い。例えば、ラージパケット生成部２１５は、メモリ２０７における、複数のペイロードの先頭アドレスとの情報、生成したラージパケットのヘッダが格納される先頭アドレスの情報を出力しても良い。また、ラージパケット生成部２１５は、ラージパケット化できなかったパケットの先頭アドレス情報をコネクション毎にメモリ２０７に出力しても良い。
【００２７】
その後、ラージパケット生成部２１５は、ＣＰＵ２０４に対してＬＲＯ処理の終了を通知する。ＬＲＯ処理終了通知のタイミングは、１回のＬＲＯ処理毎、もしくは、複数のＬＲＯ処理毎であっても良いものとする。また、ＬＲＯ処理部１５０のレジスタ（不図示）においてＬＲＯ処理終了を示すことができる場合は、ＣＰＵ２０４がＬＲＯ処理部１５０のレジスタ（不図示）をポーリングし、ＬＲＯ処理終了を判断しても良いものとする。ＣＰＵ２０４は、ＬＲＯ処理終了通知を受信した後、上述のＬＲＯ処理の結果をメモリ２０７において参照することにより、プロトコルスタック１２２における受信処理を開始する。受信処理は、例えば、ＭＡＣ、ＩＰ、ＴＣＰといった順に、下位の階層から順に解析して、最終的にアプリケーションに対して必要なデータを抽出し、抽出したデータをアプリケーションが用意した、アプリケーションからアクセス可能な所定のメモリ領域（ソケットバッファ）にコピーすることを含む。当該コピー後に、アプリケーションに通知することで、受信処理が完了し得る。
【００２８】
受信処理が完了したペイロードは、ＤＭＡＣ２０３により、アプリケーション１１４〜１１６が利用するメモリ２０６に転送される。ＤＭＡＣ２０３の転送は、プロトコルスタック１２２とアプリケーション１１４〜１１６のいずれかが制御しても良いものとする。続いて、画像形成部２０８は、アプリケーション１１４〜１１６の指示に従い、ペイロードの画像データ部分から印刷データを生成し、印刷処理を実行する。
【００２９】
なお、パケット分類部２１１、履歴管理部２１３、ポート／アドレス決定部２１２は、ＬＲＯ処理部１５０内部に配置されることを前提に説明を行ったが、構成はこれに限定されない。例えば、これらの３つの構成要素から構成される機能ブロックがシステムバス２０５に接続され、グルーピング処理部２１４とラージパケット生成部２１５のみからなるＬＲＯ処理部１５０とやり取りを行うことで上記と同等の機能を達成する構成であっても良い。また、ＬＲＯ処理部１５０における各構成要素は、それぞれハードウェア又はソフトウェアによって構成され得る。ソフトウェアとして構成される場合には、各機能（以下に示すフローチャートの処理を実現する機能を含む）を実現するための制御プログラムがメモリ２０６に記憶され、ＣＰＵ２０４が当該プログラムを実行することによって該機能が実現される。
【００３０】
（ＬＲＯ処理部１５０の処理）
続いて、図３を参照して、通信ノード１０３のＬＲＯ処理部１５０の処理について説明する。図３は、ＬＲＯ処理部１５０の処理を示すフローチャートである。本フローチャートの処理の前に、通信ノード１０３のＥｔｈｅｒ  ＭＡＣ２０１は複数のパケットを受信し、当該受信パケットはメモリ２０７に格納されているものとする。また、上記において、ＬＲＯ処理部１５０は、１６パケット毎に処理を行うと説明したが、受信パケットへの即時応答性を考慮して一定のタイムアウト時間を設け、１６パケットに満たない場合にも処理を開始しても良いものとする。
【００３１】
Ｓ３００〜Ｓ３０５の処理は、各パケットに対して行われる処理である。すなわち、例えば、受信した１６パケットのそれぞれ、または、一定のタイムアウト時間内に受信された１つ以上のパケットのそれぞれに対して行われる処理である。Ｓ３００では、パケット分類部２１１は、受信パケットのＩＰヘッダを解析する。Ｓ３０１では、パケット分類部２１１は、Ｓ３００におけるＩＰヘッダの解析結果に応じて、受信パケットがＴＣＰ／ＵＤＰパケットか否かを判定する。受信パケットがＴＣＰ／ＵＤＰパケットでない場合には（Ｓ３０１でＮｏ）、処理はＳ３０３へ進み、それ以外の場合は（Ｓ３０１でＹｅｓ）、処理はＳ３０２へ進む。
【００３２】
Ｓ３０２では、パケット分類部２１１は、受信パケットに含まれるポート情報もしくはアドレス情報が、ＬＲＯ非対象ポートもしくはＬＲＯ非対象アドレスであるか（対応するか）どうかを判定する。ＬＲＯ非対象ポートもしくはＬＲＯ非対象アドレスである場合は（Ｓ３０２でＹｅｓ）、処理はＳ３０３へ進み、それ以外の場合は（Ｓ３０２でＮｏ）、処理はＳ３０４へ進む。
【００３３】
Ｓ３０４では、グルーピング処理部２１４は、ＴＣＰ／ＵＤＰヘッダを解析し、同じソケット（同じコネクション種別）のパケットを分類する。Ｓ３０５では、グルーピング処理部２１４は、Ｓ３０４での解析（分類）に従って、ソケット毎（同じコネクション種別毎）に受信パケットをグルーピングする。受信した１６パケットのそれぞれ、または、一定のタイムアウト時間内に受信された１つ以上のパケットのそれぞれに対するＳ３００〜Ｓ３０５の処理後、Ｓ３０６では、ラージパケット生成部２１５は、グループ毎でヘッダのシーケンス番号を参照し、並べ替えを行った後、各ペイロードを連結する。また、ラージパケット生成部２１５は、連結したペイロードに対するヘッダ情報を生成する。ここで、各ペイロードの連結は、対象の受信データをメモリ２０７内で移動して連結しても良いし、アプリケーション１１４〜１１６にデータを渡す際にＤＭＡＣ２０３におけるギャザー転送を利用して行っても良い。すなわち、上述したように、各ペイロードの先頭アドレスのチェーン情報を生成することにより、各ペイロードの連結は実現され得る。
【００３４】
Ｓ３０１でＮｏまたはＳ３０２でＮｏの場合に進むＳ３０３では、パケット分類部２１１は、受信パケットを、ＬＲＯ処理を行わないパケット（特定パケット）と分類し、特定パケットの存在をプロトコルスタック１２２に通知する。
【００３５】
続いて、ポート／アドレス決定部２１２による、図３のＳ３０２の判定に用いられるＬＲＯ非対象ポートもしくはＬＲＯ非対象アドレス／ＬＲＯ対象ポートもしくはＬＲＯ対象アドレスを決定する処理について、図４を参照して説明する。図４は、ポート／アドレス決定部２１２の処理を示すフローチャートである。ポート／アドレス決定部２１２は、図５に示す履歴情報に基づいて（履歴情報を参照して）、ＬＲＯ非対象ポートもしくはＬＲＯ非対象アドレス／ＬＲＯ対象ポートもしくはＬＲＯ対象アドレスを決定する。本フローチャートの処理は、図３のＳ３０２の判定前の任意のタイミングで行われ得る。
【００３６】
図４の説明にあたり、対象とする、過去にパケット受信した通信ポートもしくは過去に受信したパケットの（送信元）アドレス情報を、対象ポート／アドレスと称す。Ｓ４００では、ポート／アドレス決定部２１２は、対象ポート／アドレスに対して、リンクアップ時の速度が１０／１００Ｍｂｐｓかどうかを判定する。リンクアップ時の速度が１０／１００Ｍｂｐｓでない場合は（Ｓ４００でＮｏ）、処理はＳ４０１へ進み、それ以外の場合は（Ｓ４００でＹｅｓ）、処理はＳ４０７へ進む。
【００３７】
Ｓ４０１では、ポート／アドレス決定部２１２は、対象ポート／アドレスから受信されるパケットのＭＣＳ（Modulation and Coding Scheme）の値（レベル）が規定値以下かどうかを判定する。ＭＣＳは、変調方式と符号化率の組み合わせをインデックス化したものであり、各値（レベル）は、規格により定められている。ＭＣＳの値が規定値以下である場合（Ｓ４０１でＹｅｓ）、すなわち、速度の遅い通信ポートもしくはアドレスから受信されるパケットの場合は、ＬＲＯ処理は不要のため、処理はＳ４０７へ進む。それ以外の場合は（Ｓ４０１でＮｏ）、処理はＳ４０２へ進む。
【００３８】
Ｓ４０２では、ポート／アドレス決定部２１２は、対象ポート／アドレスから受信されるパケットに対する１回のＬＲＯ処理におけるパケットの受信頻度が規定値より低いかどうかを判定する。これは、パケットの受信頻度が低い場合は、１回のＬＲＯ処理においてグルーピングできるパケット数が少なくなる可能性が高く、ラージパケット化の効率が悪くなり得るからである。パケットの受信頻度が規定値よりも低い場合は（Ｓ４０２でＹｅｓ）、処理はＳ４０７へ進み、それ以外の場合は（Ｓ４０２でＮｏ）、処理はＳ４０３へ進む。
【００３９】
Ｓ４０３では、ポート／アドレス決定部２１２は、対象ポート／アドレスから受信されるパケットがフラグメントパケットかどうかを判定する。これは、受信パケットがフラグメントパケットの場合に、全てのパケットが揃うまでグルーピング処理部２１４が有するヘッダ解析用のバッファが解放できないため、当該受信パケットをＬＲＯ処理の対象としないためである。受信パケットがフラグメントパケットの場合は（Ｓ４０３でＹｅｓ）、処理はＳ４０７へ進み、それ以外の場合は（Ｓ４０３でＮｏ）、処理はＳ４０４へ進む。
【００４０】
Ｓ４０４では、ポート／アドレス決定部２１２は、対象ポート／アドレスから受信されるパケットのチェックサムエラーの頻度が規定値よりも高いかどうかを判定する。これは、チェックサムエラーを含むコネクションでは、ラージパケットを生成する場合に分割生成となり、効率が下がるため、ＬＲＯ処理から除外するためである。チェックサムエラーの頻度が規定値よりも高い場合は（Ｓ４０４でＹｅｓ）、処理はＳ４０７へ進み、それ以外の場合は（Ｓ４０４でＮｏ）、処理はＳ４０５へ進む。
【００４１】
Ｓ４０５では、ポート／アドレス決定部２１２は、対象ポート／アドレスから受信されるパケットが連結可能なパケットかどうかを判定する。ここで、連結可能かどうかは、各コネクションにおいて各受信パケットのペイロード長がＭＳＳ（Maximum Segment Size)以下のパケットの数や、ＭＳＳ以下のパケットの受信頻度が規定値よりも高いかどうかにより判定する。連結可能なパケットである場合には（Ｓ４０５でＹｅｓ）、処理はＳ４０６へ進み、それ以外の場合は（Ｓ４０５でＮｏ）、処理はＳ４０７へ進む。
【００４２】
Ｓ４０６では、ポート／アドレス決定部２１２は、対象ポート／アドレスから受信されるパケットにおいて、ＴＣＰセグメントの抜けの発生頻度が規定値よりも高いかどうかを判定する。これは、例えばＴＣＰヘッダのシーケンス番号を使用して判定される。ＴＣＰセグメント抜けの発生頻度が規定値よりも高い場合は（Ｓ４０６でＹｅｓ）、処理はＳ４０７へ進み、それ以外の場合は（Ｓ４０６でＮｏ）、処理はＳ４０８へ進む。
【００４３】
Ｓ４０７では、ポート／アドレス決定部２１２は、対象ポート／アドレスに対応するポート番号もしくはアドレス情報を、ＬＲＯ非対象ポートもしくはＬＲＯ非対象アドレスとして登録する。Ｓ４０８では、ポート／アドレス決定部２１２は、対象ポート／アドレスに対応するポート番号もしくはアドレス情報を、ＬＲＯ対象ポートもしくはＬＲＯ対象アドレスとして登録する。
【００４４】
続いて、履歴管理部２１３により管理される履歴情報について図５を参照して説明する。図５は、履歴情報の一例を示す図である。ここでは、説明の簡略化のために、ポート毎に管理される履歴情報として、通信ノード１０３におけるポート１３４〜１３７に対応するポート番号３００１、４００１、５００１、６００１（図１を参照）に対する履歴情報に関してのみ説明を行う。なお、送信元（ＳＲＣ）のＩＰアドレス、ＭＡＣアドレス等のアドレス情報毎に対して履歴情報を生成し、記憶されても良い。また、履歴情報は、初回のＬＲＯ処理として１６パケットの解析後に生成されるものを想定して説明を行うが、履歴情報はＬＲＯ処理毎に累計情報として更新されるものとする。
【００４５】
リンク速度・ＭＣＳ５０１は、各ポートにおける通信Ｉ／Ｆのドライバから収集される速度に関する情報である。有線通信の場合にはリンク速度、無線通信の場合にはＭＣＳが利用され得る。パケットの受信頻度５０２は、グルーピング処理部２１４によりグルーピングされた、ソケット毎（同じコネクション種別毎）のパケットの数である（図５の例では全ポートで合わせて１６パケット）。ＴＣＰセグメンテーション５０３は、ペイロードがＭＳＳ以下のパケットの数である。受信エラー数５０４は、ＩＰチェックサム、ＴＣＰチェックサムでエラーしたパケット数である。ＩＰフラグメントの有無５０５は、フラグメントパケット数である。フラグメントパケット数は、ＩＰヘッダのフラグフィールド値で判定される。セグメント抜け発生数５０６は、ＴＣＰヘッダのシーケンス番号が非連続なパケットの数である。なお、図５に示す履歴情報は６つの履歴項目が管理されているが、履歴情報はこれに限定されない。例えば、これらの６つの履歴項目のうちの一部で履歴情報が構成されても良いし、ＬＲＯ処理を行うかどうかを判定可能な他の情報を、履歴情報に含めても良い。
【００４６】
図４のフローチャートに従ってポート／アドレス決定部２１２がＬＲＯ非対象ポートを決定する場合に、Ｓ４０１の規定値（ＭＣＳ）を７、Ｓ４０２における規定値（パケット受信頻度）を３、Ｓ４０４の規定値（チェックサムエラーの頻度）を１、Ｓ４０５の規定値（ＴＣＰセグメンテーション（ペイロードがＭＳＳ以下のパケットの数））を１、Ｓ４０６の規定値（セグメント抜け発生数（発生頻度））を１とする。この条件の場合には、ポート／アドレス決定部２１２は、ポート１３４及びポート１３６をＬＲＯ対象ポートと決定し、ポート１３５及びポート１３７をＬＲＯ非対象ポートと決定することができる。
【００４７】
また、履歴管理部２１３は、ポート／アドレス決定部２１２が適切にＬＲＯ非対象ポート／ＬＲＯ非対象アドレスを決定するために、履歴情報を更新することができる。この履歴情報の更新処理について図６を参照して説明する。図６は、履歴管理部２１３による履歴情報の更新処理を示すフローチャートを示す。
【００４８】
Ｓ６００では、履歴管理部２１３は、プロトコルスタック１２２においてコネクションの再確立が発生したかどうかを判定する。コネクションの再確立が発生した場合は（Ｓ６００でＮｏ）、処理はＳ６０６進み、それ以外の場合は（Ｓ６００でＮｏ）、処理はＳ７０１へ進む。
【００４９】
Ｓ６０１では、履歴管理部２１３は、ＭＳＳが変更されたかどうかを判定する。ＭＳＳが変更されると、ＴＣＰセグメントの発生確率（ペイロードがＭＳＳ以下のパケットの数）が変わる可能性があるからである。ＭＳＳが変更された場合は（Ｓ６０１でＹｅｓ）、処理はＳ６０６へ進み、それ以外の場合は（Ｓ６０１でＮｏ）、処理はＳ６０２へ進む。
【００５０】
Ｓ６０２では、履歴管理部２１３は、ＣＰＵ２０４において、アプリケーション１１４〜１１７のうち終了しているアプリケーションがあるかどうかを判定する。アプリケーションが終了すると、コネクションが切断されるためである。終了しているアプリケーションがある場合は（Ｓ６０２でＹｅｓ）、処理はＳ６０６へ進み、それ以外の場合は（Ｓ６０２でＮｏ）、処理はＳ６０３へ進む。
【００５１】
Ｓ６０３では、履歴管理部２１３は、新規に開始されるアプリケーションがあるかどうかを判定する。新規に開始されるアプリケーションがある場合は（Ｓ６０３でＹｅｓ）、処理はＳ６０６へ進み、それ以外の場合は（Ｓ６０３でＮｏ）、処理はＳ６０４へ進む。
【００５２】
Ｓ６０４では、履歴管理部２１３は、グルーピングの処理回数が規定値に達したかどうかを判定する。グルーピングの処理回数が規定値に達した場合は（Ｓ６０４でＹｅｓ）、処理はＳ６０６へ進み、それ以外の場合は（Ｓ６０４でＮｏ）、処理はＳ６０５へ進む。
【００５３】
Ｓ６０５では、履歴管理部２１３は、現行の履歴情報を引き続き用いることを決定する。すなわち、履歴情報は更新されない。一方、Ｓ６０６では、履歴管理部２１３は、履歴情報の１つ以上の項目を更新または追加する。ここで、Ｓ６０６において更新し得る項目は、対象のコネクション（ポート番号）に対応する項目（図５のリンク速度・ＭＣＳ５０１〜セグメント抜け発生数５０６）であっても良いし、全てのコネクション（ポート番号）に対応する項目であっても良いものとする。また、新規アプリケーションが確立された場合は（Ｓ６０３でＹｅｓ）、履歴情報に新たなコネクションに関する情報が追加される。なお、図６に示す条件は一例であり、履歴管理部２１３は、例えば、図６に示す複数の判定（Ｓ６００〜Ｓ６０４）のうちの１つ以上の判定を行っても良い。
【００５４】
図７に、本実施形態における通信ノード１０３のＬＲＯ処理のシーケンスチャートを示す。ここでは、通信ノード１０３がパケットを受信した後、ＬＲＯ処理を実施し、プロトコルスタック１２２が受信処理を行い、アプリケーション１１４〜１１６にデータを渡すまでの一連の動作が表されている。
【００５５】
Ｓ７００では、Ｅｔｈｅｒ  ＰＨＹ２００がパケットを受信し、Ｓ７０１ではＥｔｈｅｒ  ＭＡＣ２０１の受信バッファ２０２にパケットを転送する。Ｓ７０２では、Ｅｔｈｅｒ  ＭＡＣ２０１は割り込みをＣＰＵ２０４に通知し、Ｓ７０３ではＣＰＵ２０４が割り込みを検知する。Ｓ７０４では、ＣＰＵ２０４がＥｔｈｅｒ  ＭＡＣ２０１の受信バッファ２０２から受信パケットを引く抜くためのＤＭＡ転送の開始指示をＤＭＡＣ２０３に通知する。
【００５６】
Ｓ７０５では、ＤＭＡＣ２０３がＤＭＡ転送の開始指示を受信する。Ｓ７０６及びＳ７０７では、ＤＭＡＣ２０３は、予めメモリ２０７に用意されたデスクリプタを読み込む。ここで、デスクリプタを使用せず、ＳＲＣ及びＤＳＴ（宛先）アドレスと転送長をＤＭＡＣ２０３にＣＰＵ２０４が通知し、ＤＭＡ転送が開始しても良いものとする。Ｓ７０８、Ｓ７０９では、ＤＭＡＣ２０３がＥｔｈｅｒ  ＭＡＣ２０１からパケットを読み込み、Ｓ７１０では、ＤＭＡＣ２０３がメモリ２０７にパケットを書き込む。Ｓ７１１では、ＤＭＡＣ２０３は、ＤＭＡ転送の完了をＣＰＵ２０４に通知する。Ｓ７１２では、ＣＰＵ２０４がＤＭＡ転送の完了を受信する。
【００５７】
Ｓ７１３では、ＣＰＵ２０４は、ＬＲＯ処理部１５０に対してＬＲＯ処理の開始指示を通知する。Ｓ７１４では、ＬＲＯ処理部１５０がＬＲＯ処理の開始指示を受信し、特定パケット（ＬＲＯ処理を行わないパケット）かどうかを判定する。Ｓ７１６では、ＬＲＯ処理部１５０は、特定パケットをＣＰＵ２０４に対して通知する。Ｓ７１５では、ＣＰＵ２０４は特定パケットを記憶する。Ｓ７１７では、ＬＲＯ処理部１５０においてグルーピング処理を実施するためのヘッダ情報をＳ７１８でメモリ２０７から読み込み、１６パケットをコネクション毎に分類する。Ｓ７１９では、ＬＲＯ処理部１５０は、コネクション毎にラージパケットを生成する処理を行う。ここでは、ＬＲＯ処理部１５０は、コネクション毎にシーケンス番号に従い、受信パケットを並び替えて、各連結するペイロードのチェーン情報を有するデスクリプタを生成する。
【００５８】
Ｓ７２０では、ＬＲＯ処理部１５０は、連結するペイロードに対するヘッダ情報を生成し、メモリ２０７に書き込む。Ｓ７２１では、ＬＲＯ処理部１５０は、生成したデスクリプタをメモリ２０７に書き込む。Ｓ７２２では、ＬＲＯ処理部１５０がＬＲＯ処理の終了としてラージパケットの生成完了を通知し、ＣＰＵ２０４はこれを受信する。またＣＰＵ２０４では、プロトコルスタック１２２がラージパケットの受信処理を行う。
【００５９】
Ｓ７２３では、ＣＰＵ２０４においてプロトコルスタック１２２は、Ｓ７１５で受信した特定パケットの情報をもとにＳ７２４でメモリからヘッダ情報を参照し、受信処理を行う。なお、ここでは、特定パケットの受信プロトコル処理はラージパケットの受信プロトコル処理後に行ったが、ＬＲＯ処理と並行してラージパケット生成処理前に行っても良いものとする。
【００６０】
Ｓ７２５では、ＣＰＵ２０４は、受信プロトコル処理が完了したパケットをメモリ２０６に転送する為のＤＭＡ転送の開始指示を通知し、Ｓ７２６で、ＤＭＡＣ２０３がこれを受信する。Ｓ７２７、Ｓ７２８では、ＬＲＯ処理部１５０が生成したデスクリプタをメモリ２０７から読み込む。Ｓ７２９、Ｓ７３０では、メモリ２０７からグループ１のラージパケットがＤＭＡＣ２０３に読み込まれ、Ｓ７３１では、メモリ２０６にグループ１のラージパケットのペイロードが書き込まれる。
【００６１】
Ｓ７３２〜Ｓ７３６においても同様に、ＬＲＯ処理部１５０が生成したグループ２のラージパケットに対応するデスクリプタをＤＭＡＣ２０３が読み込み、ＤＭＡＣ２０３がペイロードをメモリ２０７からメモリ２０６へ転送する。Ｓ７３７では、ラージパケットの転送完了がＤＭＡＣ２０３からＣＰＵ２０４へ通知され、Ｓ７３８でＣＰＵ２０４がこれを受信する。
【００６２】
図示されていないが、同様に特定パケットにおいても、ＣＰＵ２０４がＤＭＡＣ２０３にＤＭＡ転送の開始指示を通知し、ペイロードがメモリ２０６からメモリ２０７へ転送される。転送されたペイロードは、ＣＰＵ２０４においてアプリケーション１１４〜１１６で処理され印刷開始の制御や印刷を行う画像が形成される。
【００６３】
このように、上記に述べた実施形態によれば、グルーピング処理を行う受信パケットを制限することにより、ラージパケット生成処理の効率を向上できる。また、単一で完結するパケットが増加しても、通信速度を低減させないことが可能となる。
【００６４】
［その他の実施形態］
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００６５】
１０１〜１０３  通信ノード、１１１〜１１６  アプリケーション、１２０〜１２２  プロトコルスタック、１３０〜１３７  ポート、１４０〜１４３  印刷データ、１４１  制御データ、１５０  ＬＲＯ処理部
【図１】
2019220791.tif 000003
【図２】
2019220791.tif 000004
【図３】
2019220791.tif 000005
【図４】
2019220791.tif 000006
【図５】
2019220791.tif 000007
【図６】
2019220791.tif 000008
【図７】
2019220791.tif 000009