(57)【要約】【課題】ＤＭＡデータ転送中にチェックサムを演算する場合に通信速度が低下することを防ぐ。【解決手段】ＤＭＡ（Direct Memory Access）転送装置は、受信した転送命令に基づいて転送元アドレスと転送先アドレスとを含む情報を取得し、該転送元アドレスに応じたメモリの領域からのデータに対して、第１のチェックサムの演算を行う第１の演算手段と、該転送元アドレスに応じたメモリの領域からのデータに対して、該第１のチェックサムの演算と異なる第２のチェックサムの演算を行う第２の演算手段とを有する。ＤＭＡ転送装置は、該第１の演算手段または該第２の演算手段を選択し、該選択された演算手段による演算を介して得られたデータを該転送先アドレスに応じたメモリの領域に転送する。  を有することを特徴とするＤＭＡ転送装置。【選択図】図１
2019106063.tif 000002
【特許請求の範囲】
【請求項１】
ＤＭＡ（Direct Memory Access）転送装置であって、
受信した転送命令に基づいて転送元アドレスと転送先アドレスとを含む情報を取得する取得手段と、
前記転送元アドレスに応じたメモリの領域からのデータに対して、第１のチェックサムの演算を行う第１の演算手段と、
前記転送元アドレスに応じたメモリの領域からのデータに対して、前記第１のチェックサムの演算と異なる第２のチェックサムの演算を行う第２の演算手段と、
前記第１の演算手段または前記第２の演算手段を選択する選択手段と、
前記選択手段により選択された、前記第１の演算手段または前記第２の演算手段による演算を介して得られたデータを前記転送先アドレスに応じたメモリの領域に転送する転送手段と、
を有することを特徴とするＤＭＡ転送装置。
【請求項２】
前記選択手段は、前記転送命令の発行元に基づいて、前記第１の演算手段または前記第２の演算手段を選択することを特徴とする請求項１に記載のＤＭＡ転送装置。
【請求項３】
前記選択手段は前記転送元アドレスと前記転送先アドレスの組み合わせに基づいて、前記第１の演算手段または前記第２の演算手段を選択することを特徴とする請求項１に記載のＤＭＡ転送装置。
【請求項４】
前記第１のチェックサムの演算は、前記第２のチェックサムの演算より計算量が少ないことを特徴とする請求項１から３のいずれか１項に記載のＤＭＡ転送装置。
【請求項５】
前記第１のチェックサムの演算は、１６ビットワードごとの１の補数和であり、前記第２のチェックサムの演算は、１６ビットワードごとの１の補数和の１の補数であることを特徴とする請求項１から４のいずれか１項に記載のＤＭＡ転送装置。
【請求項６】
請求項１から５のいずれか１項に記載のＤＭＡ転送装置と、少なくとも１つのプロセッサと、データグラムの分割または連結を行うことが可能な制御ハードウェアを有し、データグラムをパケット化して送信する通信装置であって、
前記ＤＭＡ転送装置の前記選択手段は、前記プロセッサから前記転送命令を受信した場合に前記第１の演算手段を選択し、前記制御ハードウェアから前記転送命令を受信した場合に前記第２の演算手段を選択することを特徴とする通信装置。
【請求項７】
前記プロセッサにより前記データグラムを他のデータグラムと連結可能でないと判断された場合、前記プロセッサが前記転送命令を前記ＤＭＡ転送装置に対して発行し、前記プロセッサにより前記データグラムを他のデータグラムと連結可能であると判断された場合、前記制御ハードウェアが前記転送命令を前記ＤＭＡ転送装置に対して発行することを特徴とする請求項６に記載の通信装置。
【請求項８】
前記プロセッサにより前記データグラムをパケット化して伝送可能な最大データサイズが変更されていないと判断された場合、前記プロセッサが前記転送命令を前記ＤＭＡ転送装置に対して発行し、前記プロセッサにより前記最大データサイズが変更されていると判断された場合、前記制御ハードウェアが前記転送命令を前記ＤＭＡ転送装置に対して発行することを特徴とする請求項６に記載の通信装置。
【請求項９】
前記データグラムがパケット化された通信パケット送信後において、
前記プロセッサにより当該通信パケットを再送すると判断された場合、前記プロセッサが前記転送命令を前記ＤＭＡ転送装置に対して発行し、前記プロセッサにより当該通信パケットの一部を含む通信パケットを再送すると判断された場合、前記制御ハードウェアが前記転送命令を前記ＤＭＡ転送装置に対して発行することを特徴とする請求項６に記載の通信装置。
【請求項１０】
前記データグラムを、前記転送手段が前記転送先アドレスに応じたメモリの領域にコピーする必要がある場合、前記プロセッサが前記転送命令を前記ＤＭＡ転送装置に対して発行し、当該コピーの必要が無い場合、前記制御ハードウェアが前記転送命令を前記ＤＭＡ転送装置に対して発行することを特徴とする請求項６から９のいずれか１項に記載の通信装置。
【請求項１１】
ＤＭＡ（Direct Memory Access）転送装置の制御方法であって、
受信した転送命令に基づいて転送元アドレスと転送先アドレスとを含む情報を取得する取得工程と、
前記転送元アドレスに応じたメモリの領域からのデータに対して、第１のチェックサムの演算を行うか、または、前記第１のチェックサムの演算と異なる第２のチェックサムの演算を行うかを選択する選択工程と、
前記選択工程により選択されたチェックサムの演算を介して得られたデータを前記転送先アドレスに応じたメモリの領域に転送する転送工程と、
を有することを特徴とするＤＭＡ転送装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、チェックサム演算を行うことが可能なＤＭＡ転送装置に関する。
【背景技術】
【０００２】
インターネットやイントラネット上でデータ通信を行う際に最も多く利用されている通信プロトコルとして、ＴＣＰ／ＩＰやＵＤＰ／ＩＰがある。ＴＣＰ／ＩＰは、通信パケットの順序保証とパケット紛失時の再送制御を規定する通信プロトコルである。一方、ＵＤＰ／ＩＰは、通信パケットの順序保証や紛失に対するリカバリ処理を規定しない通信プロトコルである。なお、ＴＣＰ／ＩＰは、Transmission Control Protocol／Internet Protocolを示す。また、ＵＤＰ／ＩＰは、User Datagram Protocol／Internet Protocolを示す。
【０００３】
これらの通信プロトコルでは、通信パケットの整合性を検査するために、チェックサムが利用される。チェックサムとは、単純には、送信側で演算されるデータ列の総和である。送信側は、チェックサムを送信データに添付して送信し、受信側は、受信データ列の総和を演算して、当該総和が添付されたチェックサムと不一致の場合に、エラーと判定する。
【０００４】
上記各通信プロトコルでは、チェックサムとして、ＩＰヘッダとＴＣＰ／ＵＤＰヘッダの特定フィールドと、ペイロードとを利用して演算されるインターネットチェックサムが利用されている。ＰＣ（Personal Computer）や組込み機器におけるインターネットチェックサム演算は、ＣＰＵ（Central Processing Unit）によるソフトウェア処理や、ＮＩＣ（Network Interface Card）やチップ内通信部のハードウェアにより実現化される。
【０００５】
チェックサム演算は処理負荷が大きいため、ＣＰＵの処理能力が低い組込み機器により演算される場合は、通信速度が低下してしまう可能性がある。そのため、以前より、通信処理専用のＮＰＵ（Network Processing Unit）やハードウェア演算器がチェックサムを演算することが提案されている。これにより、ＣＰＵの処理負荷の低減と演算処理の高速化が図られる。また、ＰＣにおいても、ＣＰＵへの負荷低減を目的に、ＮＩＣ等のハードウェアによりチェックサムが演算されてきた。例えば、特許文献１には、ネットワークパケットを記憶装置からネットワークアダプタ中のパケットバッファへ転送する際にチェックサムを計算することで、システムにおけるプロセッサへの負荷低減を実現する方法が提案されている。
【０００６】
また、チェックサム演算器とＤＭＡ（Direct Memory Access）転送装置を組み合わせ、ＤＭＡデータ転送中にチェックサムを演算することで、機器内部のシステム全体を通じて通信処理を高速化させる技術が提案されている。例えば、特許文献２には、アプリケーション層からのデータグラムを格納するバッファと通信部のバッファとの間でＤＭＡ転送を行う際に、２つのチェックサムを計算する方法が提案されている。ここで、２つのチェックサムは、ＩＰのヘッダ・チェックサム、および、ＵＤＰまたはＴＣＰのチェックサムである。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平６−７８０２４号公報
【特許文献２】特開２００６−３０３７６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
アプリケーション層からのデータグラム（ペイロード）をＤＭＡ転送中に、当該ペイロードの総和（ペイローサム）を演算することにより、当該ペイロードサムを利用したインターネットチェックサムを演算できることから、通信速度の高速化が図れる。しかしながら、ＤＭＡ転送中にペイロード長が変更される場合には、インターネットチェックサムを演算する際に当該ペイロードサムを利用することができず、通信速度が低下するという課題がある。
【０００９】
本発明は上記課題に鑑みてなされたものであり、ＤＭＡデータ転送中にチェックサムを演算する場合に通信速度が低下することを防ぐことを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明の一態様による通信装置は、以下の構成を有する。すなわち、ＤＭＡ（Direct Memory Access）転送装置であって、受信した転送命令に基づいて転送元アドレスと転送先アドレスとを含む情報を取得する取得手段と、前記転送元アドレスに応じたメモリの領域からのデータに対して、第１のチェックサムの演算を行う第１の演算手段と、前記転送元アドレスに応じたメモリの領域からのデータに対して、前記第１のチェックサムの演算と異なる第２のチェックサムの演算を行う第２の演算手段と、前記第１の演算手段または前記第２の演算手段を選択する選択手段と、前記選択手段により選択された、前記第１の演算手段または前記第２の演算手段による演算を介して得られたデータを前記転送先アドレスに応じたメモリの領域に転送する転送手段と、を有する。
【発明の効果】
【００１１】
ＤＭＡデータ転送中にチェックサムを演算する場合に通信速度が低下することを防ぐことが可能となる。
【図面の簡単な説明】
【００１２】
【図１】通信装置１００の概略構成図である。
【図２】第１のチェックサム演算部１１２使用時のＤＭＡ転送例を示す。
【図３】第２のチェックサム演算部１１３使用時のＤＭＡ転送例を示す。
【図４】第１の実施形態におけるＣＰＵ１０１の処理フローチャートである。
【図５】第１の実施形態におけるＤＭＡ転送部１１０の処理フローチャートである。
【図６】第１の実施形態におけるペイロード長の変更無しの場合の各処理ブロックのシーケンスチャートを示す。
【図７】第１の実施形態におけるペイロード長の変更有りの場合の各処理ブロックのシーケンスチャートを示す。
【図８】第２の実施形態におけるＣＰＵ１０１の処理フローチャートである。
【図９】第２の実施形態におけるペイロード変更有りの場合の各処理ブロックのシーケンスチャートを示す。
【発明を実施するための形態】
【００１３】
以下、添付の図面を参照して、本発明をその実施形態の一例に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
【００１４】
［第１の実施形態］
（通信装置１００の構成）
図１に、以下に説明する実施形態における通信装置１００の概略構成図を示す。ＣＰＵ１０１は、通信装置１００に含まれる各機能ブロック、各ソフトウェア、各ハードウェアを制御する。本実施形態では、ＣＰＵ１０１は、アプリケーションとプロトコルスタックの２つのソフトウェアを制御する。アプリケーションは、通信装置１００としてカメラやカムコーダを想定する場合に、撮像した画像や動画像のデータをインターネットやメディアサーバにアップロードする際に動作するソフトウェアである。プロトコルスタックは、ＴＣＰ（ＵＤＰ）／ＩＰ等の通信プロトコル処理を行うソフトウェアである。具体的には、プロトコルスタックは、ＴＣＰ（ＵＤＰ）／ＩＰ通信における再送制御やパケットの順序保証、チェックサムを使用した通信パケットの整合性検査を行う。また、プロトコルスタックは、これらの機能を実現するための通信ヘッダであるＴＣＰ（ＵＤＰ）ヘッダ、ＩＰヘッダを生成する。
【００１５】
メモリ１０６は、アプリケーションが利用するメモリ領域である。メモリ１０６には、例えば、アプリケーションから出力される動画像等のデータが格納される。一方、メモリ１０７はプロトコルスタックが利用するメモリ領域である。メモリ１０７は、例えば、プロトコルスタックが動画像データからパケットを生成するための一時的なデータコピー領域や、通信ヘッダを生成する領域として使用される。なお、図１ではメモリ１０６とメモリ１０７は別々に構成されているが、これらのメモリは同一のメモリで構成され、メモリアドレスで各ソフトウェアの利用領域が管理されても良い。
【００１６】
アプリケーションが利用もしくは出力するデータは、システムバス１０２を介してメモリ１０６へ入出力される。また、各記憶領域（メモリ１０６、メモリ１０７、シーケンサ１０３内の内部メモリ１０５、通信部１０８内の送信バッファ１０９）間のデータのやり取り（データの転送／コピー）は、システムバス１０２を介して、ＣＰＵ１０１、または、ＤＭＡ転送部１１０内のＤＭＡコントローラ１１１により実行される。また、通信装置１００内の各ハードウェアブロック間のデータのやり取りは、システムバス１０２を介して行われるものとする。
【００１７】
ＤＭＡ転送部１１０は、第１のチェックサム演算部１１２と、第２のチェックサム演算部１１３と、ＤＭＡコントローラ１１１から構成される。第１のチェックサム演算部１１２は、データグラムの総和（以下、ペイロードサム）を演算する。また、第２のチェックサム演算部１１３は、インターネットチェックサムを演算する。ペイロードサムの計算に伴う計算量は、インターネットチェックサムの計算に伴う計算量より少ない。具体的には、ペイロードサムとは、入力されたデータグラムの１６ビットワードごとの１の補数和である。インターネットチェックサムとは、ＩＥＴＦ（Internet Engineering Task Force）で規定されるＲＦＣ (Request for Comments)７９１、ＲＦＣ７９３、ＲＦＣ２４６０およびＲＦＣ１０７１における１６ビットワードごとの１の補数和の１の補数である。より詳細には、本実施形態におけるインターネットチェックサムは、疑似ヘッダとＴＣＰヘッダとペイロード（すべてのヘッダとテキスト）の合計（１６のビットワードの１の補数合計）の反転（１６ビットの１の補数）である。ここで、疑似ヘッダは、ＳＲＣ（送信元）アドレス、ＤＳＴ（宛先）アドレス、プロトコルＮｏ．（番号）、ＴＣＰ長から構成され得る。
【００１８】
ＤＭＡ転送部１１０は、このような構成を有することにより、ＤＭＡ転送中にペイロードサムとインターネットチェックサムを演算することが可能となる。また、ＤＭＡ転送部１１０は、チェックサム演算を行わずに、単純にＤＭＡ転送器としても動作することも可能である。
【００１９】
ＤＭＡ転送部１１０は、ＣＰＵ１０１またはシーケンサ１０３から設定されるレジスタの値等に基づいて、第１のチェックサム演算部１１２または第２のチェックサム演算部１１３のいずれかを選択する。また、ＤＭＡ転送部１１０は、当該レジスタの値により指定されるメモリ領域からデスクリプタを読み出し、当該デスクリプタに基づいてＤＭＡ転送またはチェックサム演算を伴うＤＭＡ転送を行う。なお、以下の説明において、ＤＭＡ転送を行うためのレジスタ設定を転送命令といい、チェックサム演算を伴うＤＭＡ転送を演算転送命令という。ＤＭＡ転送部１１０に設定されるレジスタの値には、メモリの領域が指定される。ＤＭＡ転送部１１０は、当該指定されたメモリの領域に格納されるデスクリプタにしたがって動作する。デスクリプタとは、ＤＭＡ転送部１１０においてＤＭＡ転送を行う際に必要な情報であり、少なくとも転送元アドレス、転送先アドレス、データ長が含まれる。すなわち、ＤＭＡ転送部は、受信した演算転送命令または転送命令に基づいて、転送元アドレスと転送先アドレスを含む情報を取得する。
【００２０】
シーケンサ１０３は、後述するように、演算転送命令の代行の依頼と共に所定の指示を受けたことに応じて、データ連結またはデータ分割を行うことが可能な制御ハードウェアである。例えば、シーケンサ１０３は、演算転送命令の代行の依頼と共に、データ分割を行う指示を受けた場合、データグラムをＭＳＳ（Maximum Segment Size）に分割する。なお、ＭＳＳとは、アプリケーションが出力するデータグラムを通信パケット化する際に通信プロトコル上で伝送可能であるサイズに分割する際の最大データサイズである。続いて、シーケンサ１０３内のヘッダ生成ロジック１０４が、分割／連結データの各々に対する通信ヘッダを生成する。シーケンサ１０３は、分割／連結データの各々に対する通信ヘッダを生成後、各分割／連結データと生成した通信ヘッダを送信バッファ１０９にＤＭＡ転送して通信パケット化するためのデスクリプタを生成する。生成したデスクリプタは、メモリ１０６に格納される。シーケンサ１０３は、デスクリプタをメモリ１０６に格納後、転送命令をＤＭＡ転送部１１０に対して発行する。
【００２１】
通信部１０８は、外部機器と通信を行う。具体的には、通信部１０８は、通信に必要なＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｏｒｏｌ）層およびＰＨＹ層の処理を行う。
【００２２】
（第１のチェックサム演算部１１２使用時のＤＭＡ転送動作）
図２に、本実施形態における第１のチェックサム演算部１１２使用時のＤＭＡ転送例を示す。以下、ＤＭＡ転送部１１０が、アプリケーションがメモリ１０６に出力したデータグラムをプロトコルスタックが使用するメモリ１０７へＤＭＡ転送する際に、第１のチェックサム演算部１１２を利用してペイロードサムを計算することを含む動作について説明する。
【００２３】
ＣＰＵ１０１では、アプリケーションがメモリ１０６にデータグラム２０１を出力した後、プロトコルスタックへタスクが切り替わる。プロトコルスタックは、メモリ１０６に格納されたデータグラム２０１をＤＭＡ転送するためにデスクリプタ２０２を生成する。データグラムがＭＳＳよりも小さい場合は、プロトコルスタックは、デスクリプタ２０２として、転送長がデータグラム２０１と同じサイズのデスクリプタと、ペイロードサム用に転送長が２バイトのデスクリプタを生成する。プロトコルスタックは、生成したデスクリプタ２０２をメモリ１０６に格納する。
【００２４】
一方、データグラム２０１がＭＳＳよりも大きい場合は、ＭＳＳ毎にペイロードサムを計算する必要があるため、プロトコルスタックはＭＳＳ毎にデータグラムを分割する。続いて、プロトコルスタックは、デスクリプタ２０２として、転送長がＭＳＳである複数のデスクリプタと、転送長がＭＳＳで分割した余りのデータサイズであるデスクリプタ、各分割データのペイロードサム用のデスクリプタを生成する。プロトコルスタックは、生成したデスクリプタ２０２をメモリ１０６に格納する。
【００２５】
なお、プロトコルスタックは、読み込み用のデスクリプタ２０２と書き込み用のデスクリプタ２０２を別々に生成してもよい。例えば、プロトコルスタックは、読み込み用のデスクリプタ２０２として、上記分割データ用のデスクリプタを生成してもよい。また、プロトコルスタックは、書き込み用のデスクリプタ２０２として、上記分割用のデスクリプタとペイロードサム用のデスクリプタを生成してもよい。ここで、プロトコルスタックは、書き込み用のデスクリプタ２０２として、分割データ用のデスクリプタとペイロードサム用のデスクリプタの転送長を加算して、１つのデスクリプタとしてまとめてもよい。
【００２６】
プロトコルスタックは、デスクリプタ２０２の生成後、演算転送命令をＤＭＡ転送部１１０に対して発行する。すなわち、プロトコルスタックは、第１のチェックサム演算部１１２を使用すること、および、デスクリプタを格納するメモリ領域、を示した値を、ＤＭＡ転送部１１０のレジスタに設定する。ＤＭＡ転送部１１０は、レジスタに設定された値に応じて、第１のチェックサム演算部１１２を使用することを決定する。なお、レジスタに設定された値を判定する以外の手法で、ＤＭＡ転送部１１０が第１のチェックサム演算部１１２を使用することを決定してもよい。例えば、ＤＭＡ転送部１１０は、システムバス１０２におけるトランザクションＩＤやレジスタアクセス元のアドレス等により、プロトコルスタックからの演算転送命令であることを検出して、第１のチェックサム演算部１１２を使用することを決定してもよい。また、ＤＭＡ転送部１１０は、デスクリプタ２０２の転送元アドレスと転送先アドレスの組み合わせから、第１のチェックサム演算部１１２を使用することを判断してもよい。
【００２７】
ＣＰＵ１０１（プロトコルスタック）から演算転送命令を受けたＤＭＡ転送部１１０において、内部のＤＭＡコントローラ１１１は、レジスタに設定された値から、メモリ１０６に格納されているデスクリプタ２０２を読み込む。続いて、ＤＭＡコントローラ１１１は、デスクリプタ２０２に記載される転送長の分割データ２０３を、メモリ１０６からを読み出す。第１のチェックサム演算部１１２は、読み出された分割データのペイロードサム２０４を計算する。ペイロードサム２０４は、分割データ２０３の後ろに付加され、ＤＭＡ転送部１１０は、デスクリプタ２０２に従って、これをメモリ１０７に書き込む。
【００２８】
次に、プロトコルスタックは、メモリ１０７に格納されるペイロードサム２０４からインターネットチェックサムを計算する。その後、プロトコルスタックは、各分割データ２０３に対応するインターネットチェックサムを含む通信ヘッダ２０５を生成し、メモリ１０７に格納する。さらに、プロトコルスタックは、メモリ１０７から送信バッファ１０９へ、分割データ２０３と通信ヘッダ２０５をＤＭＡ転送するためのデスクリプタを生成する。デスクリプタを生成後、プロトコルスタックは、転送命令をＤＭＡ転送部１１０に対して発行する。これに応じて、ＤＭＡ転送部１１０は、分割データ２０３と通信ヘッダ２０５を通信部１０８の送信バッファ１０９に転送する。
【００２９】
通信部１０８は、送信バッファ１０９に書き込まれた分割データ２０３と通信ヘッダ２０５からなる通信パケット１２１を、外部機器へ送信する。
【００３０】
（第２のチェックサム演算部１１３使用時のＤＭＡ転送動作）
図３に、本実施形態における第２のチェックサム演算部１１３使用時のＤＭＡ転送例を示す。ここでは、アプリケーションからのデータグラムが、メモリ１０６からメモリ１０７へペイロードサム演算を伴ってＤＭＡ転送された後、プロトコルスタック（ＣＰＵ１０１）がペイロード長を変更すると判断する場合を想定する。この場合、当該ペイロードサムを用いてインターネットチェックサムを計算することができなくなる。ペイロード長が変更される場合とは、例えば、データグラムを連結する場合や、ＭＳＳが変更される場合である。このような場合に、ＤＭＡ転送部１１０が第２のチェックサム演算部１１３を利用してインターネットチェックサムを演算する動作について説明する。
【００３１】
まず、アプリケーションからのデータグラムが、メモリ１０６からメモリ１０７へＤＭＡ転送された後、プロトコルスタックは、ペイロード長を変更すると判断した場合に、演算転送命令の代行をシーケンサ１０３に通知する。プロトコルスタックは、演算転送命令の代行の依頼と共に、データ分割／連結に関する指示を、シーケンサ１０３に対して通知する。例えば、プロトコルスタックは、アプリケーションからのデータグラムがＭＳＳよりも小さい場合に、次データと連結可能か否かを判断する。連結可能と判断した場合は、プロトコルスタックは、シーケンサ１０３に対して、データ連結の指示を、演算転送命令の代行の依頼と共に通知する。また、アプリケーションからデータグラムを転送した時点からＭＳＳが変更になった場合に、プロトコルスタックは、シーケンサ１０３に対して、新たなＭＳＳでのデータ分割を行うための指示を、演算転送命令の代行の依頼と共に通知する。
【００３２】
シーケンサ１０３は、プロトコルスタックからの通知に応じて、データの連結またはデータ分割を行う。続いて、シーケンサ１０３は、ヘッダ生成ロジック１０４において、インターネットチェックサム３０３のフィールドが未計算の通信ヘッダ１２０を生成し、内部メモリ１０５に格納する。シーケンサ１０３はさらに、通信ヘッダ１２０と、メモリ１０７に格納されるペイロード３０２および（第２のチェックサム演算部１１３により生成される）インターネットチェックサム３０３を送信バッファへＤＭＡ転送するためのデスクリプタ３０１を生成する。ここで、インターネットチェックサム３０３に対する転送先アドレスは、ＤＭＡ転送後の通信ヘッダにおけるチェックサムフィールドを参照させ、通信部１０８の送信バッファ１０９への転送完了時に通信パケット１２１が完成するように設定される。
【００３３】
プロトコルスタックは、デスクリプタ３０１の生成後、演算転送命令をＤＭＡ転送部１１０に対して発行する。すなわち、プロトコルスタックは、第２のチェックサム演算部１１３を使用すること、および、デスクリプタ３０１を格納するメモリ領域、を示した値をＤＭＡ転送部１１０のレジスタに設定する。ＤＭＡ転送部１１０は、レジスタに設定された値に応じて、第２のチェックサム演算部１１３を使用することを決定する。ここで、第１のチェックサム演算部１１２の使用時と同様に、ＤＭＡ転送部１１０は、システムバスにおけるトランザクションＩＤやレジスタアクセス元のアドレス等により、シーケンサ１０３からの演算転送命令であることを検出して、第２のチェックサム演算部１１３を使用することを決定しても良い。また、ＤＭＡ転送部１１０が、デスクリプタ３０１の転送元アドレスと転送先アドレスの組み合わせにより、第２のチェックサム演算部１１３を使用することを判断してもよい。
【００３４】
通信部１０８は、送信バッファ１０９に書き込まれたインターネットチェックサム３０３を含む通信ヘッダ１２０と、ペイロード３０２からなる通信パケット１２１を、外部機器へ送信する。
【００３５】
（ＣＰＵ１０１の動作）
図４に、本実施形態におけるＣＰＵ１０１（プロトコルスタック）の処理フローチャートを示す。ここでは、アプリケーションからのデータグラムが、メモリ１０６からメモリ１０７へペイロードサム演算を伴ってＤＭＡ転送された後、ペイロード長を変更するか否かに応じて動作を切り替えるフローチャートに関して説明を行う。
【００３６】
Ｓ４００では、プロトコルスタックは、アプリケーションからのデータグラムを、メモリ１０６から、プロトコルスタックが利用するメモリ１０７へ、ペイロードサム演算を伴って転送（コピー）する演算転送命令を、ＤＭＡ転送部１１０に対して発行する。データグラムの転送時に、データサイズがＭＳＳ以上である場合は、ＭＳＳ単位で分割してＤＭＡ転送が行われるものとする。すなわち、ＭＳＳ単位で分割された分割データに各々に対して、ペイロードサムが計算される。データサイズがＭＳＳ以下の場合には、アプリケーションから通知されるデータグラムのサイズで転送が行われる。
【００３７】
Ｓ４０１では、プロトコルスタックは、Ｓ４００で発行した演算転送命令に対する、ＤＭＡ転送部１１０からの演算転送完了の通知を待つ。例えば、プロトコルスタックは、ＤＭＡ転送部１１０からの割りこみを待つ。なお、プロトコルスタックは、演算転送完了を、ＤＭＡコントローラ１１１のレジスタをポーリングすることにより、判断してもよい。
【００３８】
Ｓ４０２では、プロトコルスタックは、アプリケーションからのデータグラムの長さとＭＳＳを比較し、データグラムの長さがＭＳＳ以下である場合に、アプリケーションからの次のデータグラムと連結可能か否かを判断する。次のデータグラムと連結してもＭＳＳ以下である場合には、プロトコルスタックは、連結可能と判断し（Ｓ４０２でＹｅｓ）、Ｓ４０６の処理に進む。データグラムの長さがＭＳＳと等しい、もしくは、データグラムの長さがＭＳＳ以下であるが次データグラムと連結した場合ＭＳＳ以上となる場合には、プロトコルスタックは、連結不可と判断して（Ｓ４０２でＮｏ）、Ｓ４０３の処理に進む。
【００３９】
Ｓ４０３では、プロトコルスタックは、通信状況が変化し、アプリケーションからのデータグラム転送前とＭＳＳに変更があるか否かを判断する。例えば、プロトコルスタックは、受信したＳＹＮ（同期）パケットにおいて、ＴＣＰでＭＳＳの変更があるか否かを判断する。ＭＳＳの変更があった場合には（Ｓ４０３でＹｅｓ）、Ｓ４０７の処理に進み、ＭＳＳの変更が無い場合には（Ｓ４０３でＮｏ）、Ｓ４０４の処理に進む。
【００４０】
Ｓ４０４では、図２で説明したように、プロトコルスタックは、メモリ１０６からのデータ転送時に第１のチェックサム演算部１１２により計算されたペイロードサムを利用して、通信ヘッダ上の各フィールド値を参照して、インターネットチェックサムを計算する。また、プロトコルスタックは、インターネットチェックサムを計算後、通信ヘッダのチェックサムフィールドに書き戻す。Ｓ４０５では、プロトコルスタックは、ＤＭＡ転送部１１０に対して、転送命令を発行する。続いて、Ｓ４０８では、プロトコルスタックは、転送命令に対する、ＤＭＡ転送部１１０からの転送完了通知を待つ。ここで、プロトコルスタックは、転送完了を、割り込み、ポーリングのいずれにより検出してもよい。
【００４１】
一方、Ｓ４０２でデータグラムが連結可能と判断された場合（Ｓ４０２でＹｅｓ）、および、ＭＳＳに変更がある場合（Ｓ４０３でＹｅｓ）、プロトコルスタックは、インターネットチェックサムを計算するために、計算されたペイロードサムが利用できない。これらの場合、プロトコルスタックは、シーケンサ１０３に対して代行を通知する（Ｓ４０６、Ｓ４０７）。すなわち、プロトコルスタックは、シーケンサ１０３に対して、演算転送命令の代行を依頼し、第２のチェックサム演算部１１３を利用して、インターネットチェックサムを演算させる。Ｓ４０６またはＳ４０７からのＳ４０８では、プロトコルスタックは、シーケンサ１０３からの転送演算命令に対する、ＤＭＡ転送部１１０からの演算転送完了の通知を待つ。ここで、プロトコルスタックは、演算転送完了を、割り込み、ポーリングのいずれにより検出してもよい。
【００４２】
（ＤＭＡ転送部１１０の動作）
図５に、本実施形態におけるＤＭＡ転送部１１０の処理フローチャートを示す。図５は、ＤＭＡ転送部１１０が、ＣＰＵ１０１（プロトコルスタック）もしくはシーケンサ１０３から、演算転送命令または転送命令を受信した場合の処理を示すフローチャートである。
【００４３】
Ｓ５００では、ＤＭＡ転送部１１０は、受信した命令が演算転送命令か転送命令かを判断する。例えば、ＤＭＡ転送部１１０は、第１のチェックサム演算部１１２と第２のチェックサム演算部１１３をバイパス設定するレジスタをもち、レジスタに設定された設定値から転送命令か演算転送命令かを判断する。ここで、ＤＭＡ転送部１１０は、読み込みのデスクリプタおよび書き込みのデスクリプタにおいて、転送長が２バイト異なる場合に演算転送命令とし、転送長が同じ場合に転送命令と判断してもよい。また、ＤＭＡ転送部１１０は、第１のチェックサム演算部１１２と第２のチェックサム演算部１１３に対して設定される演算サイズが０となっている場合に、転送命令と判断しても良い。
【００４４】
転送命令の場合には（Ｓ５００でＮｏ）、ＤＭＡ転送部１１０は、デスクリプタに基づいて各メモリ領域（メモリ１０６、メモリ１０７、シーケンサ１０３内の内部メモリ１０５、通信部１０８内の送信バッファ１０９）間でＤＭＡ転送を行う（Ｓ５０１）。一方、演算転送命令の場合には（Ｓ５００でＹｅｓ）、Ｓ５０２において、ＤＭＡ転送部１１０は、プロトコルスタックまたはシーケンサ１０３のいずれからの演算転送命令であるか（すなわち、演算転送命令の発行元）を判断する。ＤＭＡ転送部１１０は、例えば、レジスタ設定値、システムバスにおけるトランザクションＩＤやレジスタアクセス元のアドレス、デスクリプタの転送元、転送先アドレスの組み合わせから、演算転送命令の発行元を判断する。シーケンサ１０３が演算転送命令の発行元である場合には（Ｓ５０２でＮｏ）、Ｓ５０３において、ＤＭＡ転送部１１０は、第２のチェックサム演算部１１３を使用して、インターネットチェックサムを計算する。続いて、Ｓ５０４では、ＤＭＡ転送部１１０は、通信ヘッダ、ペイロード、および、計算したインターネットチェックサムを送信バッファ１０９へ転送する。一方、プロトコルスタックが演算転送命令の発行元である場合には（Ｓ５０２でＹｅｓ）、Ｓ５０５において、ＤＭＡ転送部１１０は、第１のチェックサム演算部１１２を使用して、ペイロードサムを計算する。続くＳ５０６では、ＤＭＡ転送部１１０は、ペイロードとペイロードサムを、プロトコルスタックが利用するメモリ１０７へ転送する。Ｓ５０７において、ＤＭＡ転送部１１０は、転送命令または演算転送命令の発行元に対して、転送完了または演算転送完了を通知する。
【００４５】
（各処理ブロックのシーケンスチャート（ペイロード長の変更無しの場合））
図６に、ペイロード長の変更無しの場合の各処理ブロックのシーケンスチャートを示す。Ｓ６００では、ＣＰＵ１０１で動作するプロトコルスタックが、アプリケーションからのデータを転送するためのデスクリプタを生成する。Ｓ６０１では、ＣＰＵ１０１が生成したデスクリプタをメモリ１０６に格納する。Ｓ６０２では、ＣＰＵ１０１で動作するプロトコルスタックが、ＤＭＡ転送部１１０に対して演算転送命令を発行する。Ｓ６０３では、ＤＭＡ転送部１１０が演算転送命令を受信し、続くＳ６０４で、メモリ１０６からデスクリプタを読み込む。次に、ＤＭＡ転送部１１０は、読み込んだデスクリプタを解析し、メモリ１０６における、転送元アドレスに一致するアドレスからデータを読み込む。続いて、ＤＭＡ転送部１１０の第１のチェックサム演算部１１２が、読み込まれたデータを用いてペイロードサムを計算する。ペイロードサムの計算が終了すると、Ｓ６０５において、ＤＭＡ転送部１１０は、メモリ１０７における、デスクリプタ内の転送先アドレスに一致するアドレスに、データおよびペイロードサムを書き込む。データ転送が完了すると、Ｓ６０６において、ＤＭＡ転送部１１０は、ＣＰＵ１０１に対して、演算転送命令に対する演算タ転送完了を通知する。
【００４６】
Ｓ６０７では、プロトコルスタックは、ペイロード長が変更しないことを確認する。すなわち、プロトコルスタックは、インターネットチェックサムを計算するためにペイロードサムが利用可能であることを判断し、Ｓ６０７、Ｓ６０８において、ペイロードサムをメモリ１０７から読み込む。プロトコルスタックは、Ｓ６０９において、読み込んだペイロードサムから通信ヘッダ上の各フィールド値を参照してインターネットチェックサムを計算する。続いて、プロトコルスタックは、Ｓ６１０において、計算したインターネットチェックサムを通信ヘッダのチェックサムフィールドに挿入し、Ｓ６１１において、通信パケットをメモリ１０７へ書き込む。さらに、プロトコルスタックは、Ｓ６１２において、通信パケットを、通信部１０８の送信バッファ１０９に転送するためのデスクリプタを生成し、メモリ１０６に格納する。デスクリプタを生成後、プロトコルスタックは、Ｓ６１４において、ＤＭＡ転送部１１０に対して転送命令を発行する。Ｓ６１５において、転送命令を受信したＤＭＡ転送部１１０は、Ｓ６１６において、デスクリプタをメモリ１０６より読み込む。続いて、ＤＭＡ転送部１１０は、Ｓ６１７において、デスクリプタに従いメモリ１０７からから通信パケットを読み込み、Ｓ６１８において、通信部１０８内の送信バッファ１０９に通信パケットを書き込む。最後に、Ｓ６１９において、ＤＭＡ転送部１１０は、ＣＰＵ１０１（プロトコルスタック）に対して、転送完了を通知する。
【００４７】
（各処理ブロックのシーケンスチャート（ペイロード長の変更有りの場合））
図７に、ペイロード長の変更有りの場合の各処理ブロックのシーケンスチャートを示す。Ｓ７００〜Ｓ７０６の処理シーケンスは、図６におけるＳ６００〜Ｓ６０６と同様であるため、説明を省略する。すなわち、Ｓ７００〜Ｓ７０６において、第１のチェックサム演算部１１２により、ペイロードサムが演算される。
【００４８】
Ｓ７０７において、プロトコルスタックは、アプリケーションからの複数のデータグラムが連結できるか否かを判断する。複数データグラムの連結が可能な場合に、プロトコルスタックは、Ｓ７０８において、シーケンサ１０３に対して演算転送命令の代行の依頼と共に、データ連結の指示を通知する。Ｓ７０９において、シーケンサ１０３はデータ連結の指示を含む演算代行通知を受信し、通信ヘッダを内部メモリ１０５に生成する。続いて、シーケンサ１０３は、Ｓ７１０において、生成した通信ヘッダとメモリ１０７にＳ７０５において格納されたペイロードからインターネットチェックサムを演算しつつ、ＤＭＡ転送するためのデスクリプタを生成する。Ｓ７１１において、シーケンサ１０３は、生成したデスクリプタをメモリ１０６に格納する。
【００４９】
Ｓ７１２において、シーケンサ１０３は、ＤＭＡ転送部１１０に対して、演算転送命令を発行する。Ｓ７１３では、ＤＭＡ転送部１１０は、演算転送命令により、チェックサム演算、および、メモリ１０６に格納されたデスクリプタのアドレス、および、ＤＭＡ転送の開始が指示される。ＤＭＡ転送部１１０は、Ｓ７１４において、メモリ１０６に対してアクセスし、Ｓ７１５において、メモリ１０６からデスクリプタを読み込む。ＤＭＡ転送部１１０は、Ｓ７１５において、読み込んだデスクリプタに従って、ＤＭＡ転送を開始する。ＤＭＡ転送部１１０は、Ｓ７１７において、シーケンサ１０３の内部メモリ１０５に格納された通信ヘッダを読み込み、Ｓ７１６において、メモリ１０７に格納されたデータを読み込む。ＤＭＡ転送部１１０は、読み込んだ通信ヘッダとデータから、インターネットチェックサムを計算する。
【００５０】
Ｓ７１８では、ＤＭＡ転送部１１０は、通信パケットとして、通信ヘッダ、データ（ペイロード）、および、インターネットチェックサムを、通信部１０８内の送信バッファ１０９に書き込む。この際、ＤＭＡ転送部１１０は、インターネットチェックサムを、通信ヘッダ内のチェックサムフィールドに挿入した後に、送信バッファ１０９に書き込んでもよい。または、ＤＭＡ転送部１１０は、送信バッファ１０９上で、通信ヘッダが書き込まれた後にインターネットチェックサムをチェックサムフィールドに上書きしても良い。
【００５１】
Ｓ７１８の書き込み処理の完了後、ＤＭＡ転送部１１０は、シーケンサ１０３に対して、演算転送完了を通知し、Ｓ７１９において、シーケンサ１０３が当該通知を受信する。さらに、シーケンサ１０３は、演算転送完了の通知の受信に伴い、ＣＰＵ１０１に対して、演算転送命令の代行完了を通知する。最後に、Ｓ７２０において、ＣＰＵ１０１は、演算転送命令の代行完了の通知を受信する。
【００５２】
このように、本実施形態によれば、ペイロード長が変更される場合であっても、ハードウェアでインターネットチェックサムの計算を代行することができ、ＤＭＡ転送中における通信速度の低下を防ぐことが可能となる。
【００５３】
［第２の実施形態］
第１の実施形態では、ペイロード長がプロトコルスタックの処理時に変更される場合に、シーケンサ１０３がインターネットチェックサムの演算をＣＰＵ１０１に代わって行うことを説明した。第２の実施形態では、ペイロード長がプロトコルスタックの処理時に変更される場合に加えて、通信パケットの再送時にも変更され得る場合について説明する。以下、第１の実施形態と異なる点について説明する。
【００５４】
（ＣＰＵ１０１の動作）
図８に、本実施形態におけるＣＰＵ１０１（プロトコルスタック）の処理フローチャートを示す。Ｓ８００において、プロトコルスタックは、通信パケット送信後の通信パケット再送時のペイロード変更があるかどうかを判断する。ペイロード変更が発生する場合は、送信時のペイロードの途中までは正しく受信されており、送信時のペイロードの途中から再送パケット（最初に送信した通信パケットの一部を含む通信パケット）を生成する場合である。この場合、ペイロードが変更となるため、送信時に計算したペイロードサムは利用できなくなる。ここで、再送発生時にどこまで正しく受信できたかは、送信先からの確認応答パケットのＡＣＫ番号を解析すること等により確認することができる。
【００５５】
Ｓ８００において、ペイロードに変更がある場合には（Ｓ８００でＹｅｓ）Ｓ８０１に進む。Ｓ８０１において、プロトコルスタックは、シーケンサ１０３に対して、演算転送命令の代行を通知し、インターネットチェックサムをＤＭＡ転送部１１０における第２のチェックサム演算部１１３で演算させる。一方、再送時に送信時と同じペイロードを含む通信パケットを送信する場合には（Ｓ８００でＮｏ）、ペイロードサムが利用可能であるため、プロトコルスタックは、Ｓ４０４において、ペイロードサムを利用してインターネットチェックサムを計算する。続くＳ４０５では、プロトコルスタックは、通信パケットを送信バッファ１０９へＤＭＡ転送するための転送命令を発行する。
【００５６】
（各処理ブロックのシーケンスチャート（ペイロードの変更有りの場合））
図９に、ペイロード変更有りの場合の各処理ブロックのシーケンスチャートを示す。Ｓ９００は、第１の実施形態において説明した図６および図７に示す通信パケットの送信シーケンスである。当該通信シーケンス後、Ｓ９０１で通信部１０８は、送信パケットに対する確認応答パケットを受信する。Ｓ９０２では、ＣＰＵ１０１で動作するプロトコルスタックが、通信部１０８で受信した確認応答パケットを解析する。そして、プロトコルスタックは、通信相手先が送信パケットに含まれるデータの途中から正しく受信できていないことを検出し、ペイロード変更が生じる再送を行うことを決定する。続いて、プロトコルスタックは、Ｓ９０３において、再送時のデータ開始位置を確認応答パケットのＡＣＫ番号から決定する。再送時のデータ開始位置を決定後、プロトコルスタックは、Ｓ９０４において、シーケンサ１０３に対して演算転送命令の代行を依頼する。この際、プロトコルスタックは、通信相手先で正しく受信できなかったデータの開始位置を、シーケンサ１０３に通知する。Ｓ９０５において、シーケンサ１０３は演算代行通知を受信し、通信ヘッダを内部メモリ１０５に生成する。続いて、シーケンサ１０３は、Ｓ９０６において、生成した通信ヘッダとメモリ１０７に格納されたペイロードからインターネットチェックサムを演算しつつ、ＤＭＡ転送するためのデスクリプタを生成する。Ｓ９０７において、シーケンサ１０３は、生成したデスクリプタをメモリ１０６に格納する。ここで、デスクリプタにおける転送元アドレスには、ＣＰＵ１０１から通知されるデータ開始位置に一致するメモリ１０６におけるアドレスが記載される。デスクリプタ格納後、シーケンサ１０３は、Ｓ９０８において、ＤＭＡ転送部１１０に対して、演算転送命令を発行する。
【００５７】
ＤＭＡ転送部１１０は、Ｓ９０８において、演算転送命令を受信する。ＤＭＡ転送部１１０は、Ｓ９１０において、メモリ１０６に対してアクセスし、Ｓ９１１において、メモリ１０６からデスクリプタを読み込む。ＤＭＡ転送部１１０は、Ｓ９１２において。読み込んだデスクリプタに従って、ＤＭＡ転送を開始する。ＤＭＡ転送部１１０は、Ｓ９１２において、シーケンサ１０３の内部メモリ１０５に格納された通信ヘッダを読み込み、Ｓ９１３において、メモリ１０７にペイロードを読み込む。ここで、デスクリプタにより指定されるペイロードの読み込みを開始するアドレスは、通信相手先において、正しく受信できなかった途中のデータの開始アドレスである。ＤＭＡ転送部１１０の第２のチェックサム演算部１１３は、読み込んだ通信ヘッダとペイロードから、演算転送命令の発行時のレジスタ設定に従い、インターネットチェックサムを計算する。
【００５８】
Ｓ９１３では、ＤＭＡ転送部１１０は、通信パケットとして、通信ヘッダ、データ（ペイロード）、および、インターネットチェックサムを、通信部１０８内の送信バッファ１０９に書き込む。Ｓ９１３の書き込み処理の完了後、ＤＭＡ転送部１１０は、シーケンサ１０３に対して、演算転送命令の完了を通知し、Ｓ９１４において、シーケンサ１０３が当該通知を受信する。さらに、シーケンサ１０３は、演算転送命令の通知の受信に伴い、ＣＰＵ１０１に対して、演算転送命令の代行完了を通知する。最後に、Ｓ９１５において、ＣＰＵ１０１は、演算転送命令の代行完了の通知を受信する。
【００５９】
このように、本実施形態では、再送時にペイロードの変更があった場合に、ＤＭＡ転送部１１０がインターネットチェックサムを演算し、再送パケットを生成することにより、ＤＭＡ転送中における通信速度の低下を防ぐことが可能となる。なお、ＤＭＡ転送部１１０に替えて、プロトコルスタックがインターネットチェックサムを計算して再送パケットを生成するように構成することも可能である。
【００６０】
［第３の実施形態］
第１の実施形態では、メモリ１０６からメモリ１０７にデータをＤＭＡ転送する際に、ペイロードサムを演算することを前提として説明を行った。しかしながら、再送を伴わないＵＤＰプロトコルにおいては、ＤＭＡ転送部１１０が、メモリ１０６から送信バッファ１０９にＤＭＡ転送を行う際に、第２のチェックサム演算部１１３を用いてインターネットチェックサムを計算し、通信パケットを生成してもよい。また、ＴＣＰプロトコルにおいては、アプリケーションとプロトコルスタック間におけるメモリ領域の管理により、メモリ１０６において再送のためのデータ管理が行える場合には、メモリ１０７への転送（コピー）なしに通信パケットを構成してもよい。また、データ転送が必要なアプリケーションか否かの種別に応じて、通信パケットを送信バッファ１０９に生成する（第１の実施形態）か、上記のようにメモリ１０７へのデータコピーなしに通信パケットを生成するかを切り替えてもよい。
【００６１】
［その他の実施形態］
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００６２】
１００  通信装置、１０１  ＣＰＵ、１０２  システムバス、１０３  シーケンサ、１０４  ヘッダ生成ロジック、１０５  内部メモリ、１０６  メモリ、１０７  メモリ、１０８  通信部、１０９  送信バッファ
【図１】
2019106063.tif 000003
【図２】
2019106063.tif 000004
【図３】
2019106063.tif 000005
【図４】
2019106063.tif 000006
【図５】
2019106063.tif 000007
【図６】
2019106063.tif 000008
【図７】
2019106063.tif 000009
【図８】
2019106063.tif 000010
【図９】
2019106063.tif 000011