(57)【要約】【課題】許容された転送遅延の範囲で転送スループットをより向上させる。【解決手段】実施形態の転送装置は、制御部と第１転送部とを備える。制御部は、データの転送が発生するタイミングの予定を示すスケジューリング情報を参照して、読出完了通知の受信を待たずに、第１記憶部から第２記憶部へデータの転送を要求可能な最大データ要求サイズを動的に制御する。第１転送部は、第１記憶部からデータを読み出し、データを最大データ要求サイズ以下の最大データ転送サイズ毎に第２記憶部へ転送する。【選択図】図２
2019054350.tif 000002
【特許請求の範囲】
【請求項１】
データの転送が発生するタイミングの予定を示すスケジューリング情報を参照して、読出完了通知の受信を待たずに、第１記憶部から第２記憶部へ前記データの転送を要求可能な最大データ要求サイズを動的に制御する制御部と、
前記第１記憶部から前記データを読み出し、前記データを前記最大データ要求サイズ以下の最大データ転送サイズ毎に前記第２記憶部へ転送する第１転送部と、
を備える転送装置。
【請求項２】
前記スケジューリング情報は、前記データの転送優先度を示す情報を含み、
前記制御部は、第１の前記データの転送割り込みが、前記第１のデータよりも前記転送優先度が低い第２の前記データの転送中に発生する可能性があるタイミングでは、前記第２のデータの最大データ要求サイズを閾値未満の値に制御し、前記転送割り込みが発生する可能性がないタイミングでは、前記第２のデータの最大データ要求サイズを前記閾値以上の値に制御する、
請求項１に記載の転送装置。
【請求項３】
前記転送割り込みにより転送が中断された前記第２のデータの状態を示す状態情報を記憶する状態記憶部を更に備え、
前記第１転送部は、前記第１のデータの転送が終了した後、前記状態情報を参照して、中断された前記第２のデータの転送を再開する、
請求項２に記載の転送装置。
【請求項４】
前記第１記憶部から前記第２のデータを読み出し、前記第２のデータを前記第２のデータの前記最大データ転送サイズ毎に分割して、第３記憶部へ転送する第２転送部を更に備え、
前記第１転送部は、前記第１記憶部から前記第１のデータを読み出し、前記第１のデータを前記第１のデータの前記最大データ転送サイズ毎に分割して、前記第２記憶部へ転送し、
前記制御部は、前記スケジューリング情報を参照して、読出完了通知の受信を待たずに、第１記憶部から第３記憶部へ前記第２のデータの転送を要求可能な最大データ要求サイズを動的に制御し、前記第２転送部により前記第２のデータが転送されているときに、前記第１転送部による前記第１のデータの転送割り込みが発生した場合、前記第２転送部による前記第２のデータの転送を中断させる、
請求項２に記載の転送装置。
【請求項５】
前記制御部は、前記スケジューリング情報を参照して、読出完了通知の受信を待たずに、第１記憶部から第３記憶部へ前記第２のデータの転送を要求可能な最大データ要求サイズを動的に制御し、
前記第１転送部は、前記第１記憶部から前記第１のデータを読み出した場合、前記第１のデータを前記第１のデータの前記最大データ転送サイズ毎に分割して、前記第２記憶部へ転送し、前記第１記憶部から前記第２のデータを読み出した場合、前記第２のデータを前記第２のデータの前記最大データ転送サイズ毎に分割して、前記第３記憶部へ転送し、
前記第２記憶部に記憶された前記第１のデータと、前記第３記憶部に記憶された前記第２のデータとは、第１機器へ出力される、
請求項２に記載の転送装置。
【請求項６】
前記制御部は、前記スケジューリング情報を参照して、更に、読出完了通知の受信を待たずに、第１記憶部から第４記憶部へ第３の前記データの転送を要求可能な最大データ要求サイズを動的に制御し、
前記第１記憶部から前記第３のデータを読み出し、前記第３のデータを前記第３のデータの前記最大データ転送サイズ毎に分割して、前記第４記憶部へ転送する第２転送部を更に備え、
前記第４記憶部に記憶された前記第３のデータは、第２機器へ出力される、
請求項５に記載の転送装置。
【請求項７】
前記スケジューリング情報は、ＩＥＥＥ  ８０２．１Ｑｂｖのゲートコントロールリストである、
請求項１に記載の転送装置。
【請求項８】
前記データは、通信機器へ送信されるフレームであり、
前記制御部は、フレーム毎に前記最大データ要求サイズを決定する、
請求項１に記載の転送装置。
【請求項９】
前記データは、通信機器へ送信されるフレームであり、
前記制御部は、前記フレームが属するストリーム毎に前記最大データ要求サイズを決定する、
請求項１に記載の転送装置。
【請求項１０】
前記データは、通信機器へ送信するフレームであり、
前記制御部は、前記フレームが属するトラフィッククラス毎に前記最大データ要求サイズを決定する、
請求項１に記載の転送装置。
【請求項１１】
データの転送が発生するタイミングの予定を示すスケジューリング情報を参照して、読出完了通知の受信を待たずに、第１記憶部から第２記憶部へ前記データの転送を要求可能な最大データ要求サイズを動的に制御するステップと、
前記第１記憶部から前記データを読み出し、前記データを前記最大データ要求サイズ以下の最大データ転送サイズ毎に前記第２記憶部へ転送するステップと、
を含む転送方法。
【請求項１２】
コンピュータを、
データの転送が発生するタイミングの予定を示すスケジューリング情報を参照して、読出完了通知の受信を待たずに、第１記憶部から第２記憶部へ前記データの転送を要求可能な最大データ要求サイズを動的に制御する制御部と、
前記第１記憶部から前記データを読み出し、前記データを前記最大データ要求サイズ以下の最大データ転送サイズ毎に前記第２記憶部へ転送する第１転送部、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は転送装置、転送方法及びプログラムに関する。
【背景技術】
【０００２】
工場内の各産業用機器間を接続する産業用ネットワーク、及び、車内の制御コントローラを接続する車載ネットワーク等の分野では、高いリアルタイム性が求められる。近年、産業用ネットワーク及び車載ネットワーク等では、イーサネット（登録商標）の利用が進んでおり、様々なリアルタイムイーサネット規格が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第５２９３５１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の技術では、リアルタイム性が要求されるトラフィックと、ベストエフォート型のトラフィックとが混在する場合に、許容された転送遅延の範囲で転送スループットをより向上させることが難しかった。
【課題を解決するための手段】
【０００５】
実施形態の転送装置は、制御部と第１転送部とを備える。制御部は、データの転送が発生するタイミングの予定を示すスケジューリング情報を参照して、読出完了通知の受信を待たずに、第１記憶部から第２記憶部へ前記データの転送を要求可能な最大データ要求サイズを動的に制御する。第１転送部は、前記第１記憶部から前記データを読み出し、前記データを前記最大データ要求サイズ以下の最大データ転送サイズ毎に前記第２記憶部へ転送する。
【図面の簡単な説明】
【０００６】
【図１Ａ】アクセス粒度、遅延及びスループットの関係性を説明するための図。
【図１Ｂ】アクセス粒度、遅延及びスループットの関係性を説明するための図。
【図２】第１実施形態の通信装置の機能構成の例を示す図。
【図３】第１実施形態の転送方法の例を示すフローチャート。
【図４】ステップＳ２の処理の詳細フローチャート。
【図５】ステップＳ１１の処理の詳細フローチャート。
【図６】第１実施形態の最大データ要求サイズ及び最大データ転送サイズの例を説明するための図。
【図７】第１実施形態の最大データ要求サイズの計算例を説明するための図。
【図８】ステップＳ１２の処理の詳細フローチャート。
【図９】第２実施形態の通信装置の機能構成の例を示す図。
【図１０】第２実施形態の転送方法の例を示すフローチャート。
【図１１】第２実施形態の第２制御部の処理の例を示すフローチャート。
【図１２】第２実施形態の第１及び第２転送部の転送処理の例を示すフローチャート。
【図１３】第２実施形態の第１転送部の読み出しリクエスト発行処理の例を示すフローチャート。
【図１４】第２実施形態の第２転送部の読み出しリクエスト発行処理の例を示すフローチャート。
【図１５】第２実施形態の第１及び第２転送部のデータ受信処理及び書き込み処理の例を示すフローチャート。
【図１６】第３実施形態の通信装置の機能構成の例を示す図。
【図１７】第４実施形態の通信装置の構成の例を示す図。
【図１８】第４実施形態の変形例のスケジューリング方法の例を説明するための図。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、転送装置、転送方法及びプログラムの実施形態を詳細に説明する。
【０００８】
（第１実施形態）
はじめに、高いリアルタイム性が求められる産業用ネットワーク及び車載ネットワーク等の分野で利用されている規格の例について説明する。
【０００９】
例えば、イーサネット（登録商標）上でリアルタイム性を実現する規格として、ＴＳＮ（Ｔｉｍｅ−Ｓｅｎｓｉｔｉｖｅ  Ｎｅｔｗｏｒｋｉｎｇ）の規格化が、ＩＥＥＥ  ８０２．１  ＴＳＮ  Ｔａｓｋで進んでいる。ＴＳＮは複数の規格から構成される。ＴＳＮは、プロオーディオ等で用いられている低遅延性を実現するＡＶＢ（Ａｕｄｉｏ／Ｖｉｄｅｏ  Ｂｒｉｄｇｉｎｇ）を拡張した規格である。ＴＳＮは、産業用ネットワーク及び車載ネットワーク等にも適用できるようにするため、ＡＶＢよりも高いリアルタイム性に加えて、高信頼性の実現を目指す規格である。
【００１０】
ＴＳＮ規格の１つであるＩＥＥＥ  ８０２．１Ｑｂｕ／８０２．３ｂｒは、優先度の高いフレームの送信処理が発生した場合に、送信中のフレームの処理を中断して、高優先度のフレームの送信処理を割り込ませる。また、ＴＳＮ規格の１つであるＩＥＥＥ  ８０２．１Ｑｂｖは、複数の送信キューを制御することで、トラフィッククラス毎にフレームの送信タイミングを制御する。このように、ＴＳＮ等のリアルタイムイーサネットを利用することで、リアルタイム性が求められるデータの送信に関わるネットワーク遅延を小さくすることが可能になる。
【００１１】
一方で、ＴＳＮ等のリアルタイムイーサネット規格が規定としている範囲は、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）、及び、ネットワーク間のネットワーク処理である。しかし、実際にシステムを構築する際には、ホスト及びＮＩＣ間の処理も考慮する必要がある。
【００１２】
図１Ａ及び１Ｂはアクセス粒度、遅延及びスループットの関係性を説明するための図である。図１Ａ及び１Ｂを参照して、ホスト側のメモリから、ＮＩＣ側のキュー（バッファ）へデータを転送するＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）等のアクセス粒度（アクセスサイズ）の違いによる影響を説明する。
【００１３】
図１ＡのキューＡのアクセス粒度は、図１ＢのキューＡのアクセス粒度よりも大きい。図１ＡのキューＡのように、アクセス粒度が大きいと、一度に転送を要求できるデータサイズが大きくなるため、ＤＭＡ制御等の時間を含むオーバヘッド１０１が減少する。そのため、スループットは増大する。しかし、一回の要求に対する処理時間が長くなるため、後続のキューＢのデータ転送の遅延（待ち時間）が長くなる。
【００１４】
逆に、図１ＢのキューＡのように、アクセス粒度が小さいと、一度の要求に対する処理時間は短くなるため、後続のキューＢのデータ転送の遅延が短くなる。しかし、一度に転送を要求できるデータサイズは小さくなるため、スループットは低下する。
【００１５】
単純に遅延を最小化するだけであれば、アクセス粒度を最小化すればよい。しかしながら、ＴＳＮ等のリアルタイムイーサネット規格では、リアルタイム性が要求されるトラフィックと共に、ベストエフォート型のトラフィックも同一のネットワーク上で送受信される。そのため、許容された転送遅延の範囲でスループットを最大化することが求められる。
【００１６】
［機能構成の例］
図２は第１実施形態の通信装置１００の機能構成の例を示す図である。第１実施形態の通信装置１００は、転送装置１、第１記憶部２、第２記憶部３、第３記憶部４、状態記憶部５及び出力部６を備える。転送装置１は、制御部１１、転送部１２及びスケジューリング情報記憶部１３を備える。
【００１７】
通信装置１００は、例えば出力部６に接続された機器へデータを転送する。出力部６と機器との接続方式は、有線方式であっても無線方式であってもよい。出力部６に接続される機器は、例えば通信機器である。第１実施形態の通信装置１００では、転送部１２が、制御部１１から指示を受けると、第１記憶部２のデータを第２記憶部３または第３記憶部４にコピーする。そして、出力部６が、スケジューリング情報記憶部１３に記憶されたスケジューリング情報に基づいて、第２記憶部３または第３記憶部４に書き込まれたデータを機器へ出力する。スケジューリング情報の詳細は後述する。
【００１８】
通信装置１００の具体的な形態は任意でよい。通信装置１００は、例えばパーソナルコンピュータ、サーバ装置、専用ＬＳＩ（Ｌａｒｇｅ−Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）、及び、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）等である。
【００１９】
制御部１１は、通信装置１００全体を制御する。具体的には、制御部１１は、例えば転送部１２を制御（初期化及びデータ転送指示等）する。また例えば、制御部１１は、出力部６に接続された通信機器へ送信されるフレーム（パケット）等のデータを生成する。また例えば、制御部１１は、スケジューリング情報を生成する。
【００２０】
制御部１１の具体的な形態は任意でよい。制御部１１は、例えばソフトウェア、専用ＬＳＩ及びＦＰＧＡ等である。制御部１１をソフトウェアにより実現する場合、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、及び、ＭＰＵ（Ｍｉｃｒｏ−ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等に当該ソフトウェアが実行されることにより、制御部１１を実現する。
【００２１】
第１記憶部２はデータを記憶する。第１記憶部２は、例えば出力部６に接続された通信機器に転送されるフレームを記憶する。また例えば、第１記憶部２は、制御部１１により実行されるプログラム、転送部１２の制御に使用される制御情報、及び、外部の通信機器と通信するためのセッション情報等を記憶する。
【００２２】
第２記憶部３及び第３記憶部４は、外部の通信機器に送信されるデータを一時的に格納する送信バッファ領域を有する。
【００２３】
第２記憶部３に記憶されるデータは、第３記憶部４に記憶されるデータよりも転送優先度の高いデータ（Ｅｘｐｒｅｓｓ）が記憶される。第２記憶部３に記憶されるデータは、例えば周期的に送る必要がある制御信号、及び、ストリーミングデータ等のリアルタイム通信データである。ストリーミングデータは、例えば動画データ及び音声データ等である。
【００２４】
第３記憶部４に記憶されるデータは、第２記憶部３に記憶されるデータよりも転送優先度の低いデータ（Ｐｒｅ−ｅｍｐｔａｂｌｅ）が記憶される。第３記憶部４に記憶されるデータは、ログ情報等のベストエフォート通信データである。
【００２５】
スケジューリング情報記憶部１３は、スケジューリング情報を記憶する。スケジューリング情報は、データの転送が発生するタイミングの予定を示す。具体的には、スケジューリング情報には、第２記憶部３及び第３記憶部４に記憶されたデータが、外部の通信機器へ送信されるタイミングが定義されている。スケジューリング情報の具体例は、例えばＩＥＥＥ  ８０２．１Ｑｂｖのゲートコントロールリストである。
【００２６】
なお、第１記憶部２、第２記憶部３、第３記憶部４及びスケジューリング情報記憶部１３の具体的な形態は任意でよい。第１記憶部２、第２記憶部３、第３記憶部４及びスケジューリング情報記憶部１３は、例えばＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、及び、ＳＤカード等の記憶装置である。また、第１記憶部２、第２記憶部３、第３記憶部４及びスケジューリング情報記憶部１３は、物理的に複数の記憶装置から構成されてもよい。また、第１記憶部２、第２記憶部３、第３記憶部４及びスケジューリング情報記憶部１３は、同一の記憶装置の領域を論理的に分離することにより実現されてもよい。
【００２７】
転送部１２は、制御部１１により指定された情報に基づいて、第１記憶部２により記憶されたデータを、第２記憶部３又は第３記憶部４に転送する。制御部１１により指定された情報は、例えば読み出し元のアドレス、宛先アドレス、及び、転送されるデータのサイズ等を含む。
【００２８】
転送部１２の具体的な形態は任意でよい。転送部１２は、例えばＤＭＡＣである。第１実施形態では、転送部１２がＤＭＡＣである場合を例にして説明する。転送部１２は、実行中のデータ転送処理を中断して、別のデータ転送処理を割り込ませることができる。
【００２９】
状態記憶部５は、転送割り込みにより転送が中断されたデータの状態を示す状態情報を記憶する。状態情報は、例えば転送部１２（例えばＤＭＡＣ）の制御情報、及び、転送済みのデータのサイズ等を含む。転送部１２は、転送割り込みにより開始されたデータの転送が終了した後、状態情報を参照して、中断されたデータの転送を再開する。
【００３０】
出力部６は、上述のスケジューリング情報に定義されたタイミングで、第２記憶部３及び第３記憶部４に記憶されたデータを送出する。これにより、通信装置１００から送信されたデータを、決められた時刻に外部の通信機器へ送ることが可能になる。すなわち、リアルタイム通信が必要なデータの送信タイミングを保証することが可能になる。
【００３１】
具体的には、出力部６は、例えばイーサネット（登録商標）のＭＡＣ処理、ＰＨＹ、及び、ＴＣＰ／ＩＰ等の処理を実行する。出力部６は、第３記憶部４のデータを転送中に、優先度のより高い第２記憶部３のデータの転送準備ができたら、第３記憶部４のデータ転送処理を一旦中断し、第２記憶部３のデータ転送を割り込ませる。
【００３２】
出力部６の制御（初期化及び出力指示等）は、例えば制御部１１により行われる。
【００３３】
上述の図２の通信装置１００で動作させる具体的なアプリケーションは任意でよい。上述の図２の通信装置１００で動作させる具体的なアプリケーションは、例えば車載システム及びファクトリーオートメーションシステム等である。
【００３４】
車載システムでは、例えば自動運転及びブレーキ制御等に係わるリアルタイム性が求められるデータが第２記憶部３に記憶される。一方、例えばカーナビ等のインフォテイメント、及び、走行記録等のデータは、第３記憶部４に記憶される。
【００３５】
ファクトリーオートメーションでは、例えばＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）、及び、Ｉ／Ｏ機器等の各制御機器の制御信号等のリアルタイム性が求められるデータが第２記憶部３に記憶される。一方、例えば各機器の動作状況、及び、生産管理等のデータは、第３記憶部４に記憶される。
【００３６】
なお、上述のスケジューリング情報は、データ転送が発生する可能性があることを示しており、実際にデータの転送処理が発生するか否かは、第２記憶部３または第３記憶部４にデータが書き込まれているか否かによって決まる。つまり、実際にデータの転送が発生するか否かは、制御部１１、及び、制御部１１の上位に位置するアプリケーションの動作等によって決定される。
【００３７】
［転送方法の例］
図３は第１実施形態の転送方法の例を示すフローチャートである。はじめに、制御部１１が、第１記憶部２に記憶されたデータを、第２記憶部３又は第３記憶部４へ転送する指示を発行する（ステップＳ１）。具体的には、制御部１１は、転送情報を転送部１２に通知することにより、転送部１２にデータの転送を指示する。転送情報は、転送されるデータのサイズ、第１記憶部２の読み出しアドレス、並びに、第２記憶部３又は第３記憶部４の書き込みアドレス等を含む。
【００３８】
なお、転送情報は、ディスクリプタを用いて通知されてもよいし、レジスタインタフェースを用いて通知されてもよい。ここで、書き込み先を指定する方法としては、アドレスを指定する方法の他に、優先度により指定する方法がある。
【００３９】
高優先度（第１優先度）のデータは、第２記憶部３の送信バッファへ書き込み、低優先度（第２優先度）のデータは、第３記憶部４の送信バッファへ書き込むことが予めわかっている。このため、制御部１１は書き込み先アドレスではなく、転送優先度を含む転送情報を転送部１２へ通知してもよい。転送部１２は、制御部１１から、転送優先度を含む転送情報を受け付けた場合、当該転送優先度を基に書き込み先を決定する。
【００４０】
また、転送部１２は、制御部１１から転送優先度を通知されるのではなく、転送されるデータのヘッダに付加された優先度を基に書き込み先を決定してもよい。ヘッダに付加された優先度は、例えばＩＥＥＥ  ８０２．１ＱフレームのＰＣＰ（Ｐｒｉｏｒｉｔｙ  Ｃｏｄｅ  Ｐｏｉｎｔ）等である。
【００４１】
ここで、第１記憶部２のデータは、例えば制御部１１及びアプリケーション等によって事前に書き込まれている。第１記憶部２のデータは、例えばファイルデータ及び制御データ等のアプリケーションにより生成されたデータである。また例えば、第１記憶部２のデータは、アプリケーションにより生成されたデータに、外部の通信機器と通信を行うためのヘッダ情報等を加えたフレーム（パケット）の形態でもよい。
【００４２】
次に、転送部１２が、制御部１１から転送指示を受け付けると、転送処理を実行する（ステップＳ２）。ステップＳ２の処理の詳細は、図４を参照して後述する。
【００４３】
次に、出力部６が、スケジューリング情報を参照して、第２記憶部３又は第３記憶部４のデータを、送信が許可されているタイミングで、外部の通信機器へ送信する（ステップＳ３）。出力部６は、例えば第２記憶部３の送信処理が許可されているタイミングで、第２記憶部３を参照し、データが存在していれば、当該データを外部ネットワークへ出力する。この時、出力部６は、第２記憶部３にデータが存在しなければ、第３記憶部４に記憶されているデータを送信してもよい。
【００４４】
次に、ステップＳ２の転送処理の詳細について説明する。
【００４５】
図４はステップＳ２の処理の詳細フローチャートである。図４に示すように、転送部１２は、第１記憶部２に読み出しリクエストを発行する読み出し処理（ステップＳ１１）と、第１記憶部２から受信されたデータを第２記憶部３又は第３記憶部４へ書き込む書き込み処理（ステップＳ１２）とを非同期に実行する。それぞれの処理を図５及び図８を用いて説明する。
【００４６】
＜読み出し処理の例＞
図５はステップＳ１１の処理の詳細フローチャートである。はじめに、転送部１２が、第１優先度の転送指示があるか否かを判定する（ステップＳ２１）。
【００４７】
第１優先度の転送指示がある場合（ステップＳ２１，Ｙｅｓ）、転送部１２は、当該転送指示を示す転送情報を取得する（ステップＳ２４）。
【００４８】
第１優先度の転送指示がない場合（ステップＳ２１，Ｎｏ）、転送部１２は、中断中の転送指示があるか否かを判定する（ステップＳ２２）。
【００４９】
中断中の転送指示がある場合（ステップＳ２２，Ｙｅｓ）、転送部１２は、状態記憶部５から状態情報を取得する（ステップＳ２５）。
【００５０】
中断中の転送指示がない場合（ステップＳ２２，Ｎｏ）、転送部１２は、第２優先度の転送指示があるか否かを判定する（ステップＳ２３）。第２優先度の転送指示がある場合（ステップＳ２３，Ｙｅｓ）、転送部１２は、当該転送指示を示す転送情報を取得する（ステップＳ２４）。
【００５１】
第２優先度の転送指示がない場合（ステップＳ２３，Ｎｏ）、処理を終了する（スタートに戻る）。
【００５２】
ここで、図５のフローチャートの例では、転送部１２は、第１優先度、中断中、第２優先度の順で転送指示があるか否かを判定するが、連続して第１優先度の処理が続かないように制御してもよい。
【００５３】
また、図５のフローチャートの処理の開始は、転送指示があるか否かを監視する形態としているが、制御部１１からの転送指示を受信したことをトリガーとして処理を開始してもよい。この場合は、必ず１つは転送指示が存在することになるので、ステップＳ２３でＮｏに進むことはない。また、転送指示を受信したことをトリガーにする場合は、第１優先度のリクエスト発行処理完了時に、中断中の転送指示があるか否かを判定し、中断中の転送指示があれば、中断中の転送指示を再開させる動作が必要になる。
【００５４】
また、第１実施形態では、簡単のため、転送優先度の種類が、第１優先度（Ｅｘｐｒｅｓｓ）、及び、第２優先度（Ｐｒｅ−ｅｍｐｔａｂｌｅ）の２つである場合を例にして説明しているが、転送優先度の種類は、３つ以上でもよい。３つ以上の転送優先度がある場合の構成でも、転送優先度の順番に転送処理が実施される。
【００５５】
次に、転送部１２は、転送指示がある場合、最大データ要求サイズを決定（設定）し、ＤＭＡ転送を開始する（ステップＳ２６）。転送指示には、転送されるデータのサイズ、データの読み出しアドレス、書き込みアドレス、及び、データの転送優先度等が含まれる。
【００５６】
転送部１２は、第１及び第２優先度の転送指示を処理する場合、制御部１１から転送情報を取得し、当該転送情報から転送指示を特定する（上述のステップＳ２４）。
【００５７】
一方、転送部１２は、中断中の転送指示を再開する場合、状態記憶部５から状態情報を取得し、当該状態情報から中断中の転送指示を特定する（上述のステップＳ２５）。転送部１２は、中断中の転送指示を再開する場合、どの位置までのデータの転送が完了しているか等を示す情報も状態情報から追加で取得する。
【００５８】
ここで、最大データ要求サイズについて説明する。転送部１２は、データ転送の際に、読み出しアドレスと読み出しサイズとが指定されたリクエストを第１記憶部２に発行する。そしてリクエストにより指定されたデータの転送は、第１記憶部２から当該リクエストに対応したレスポンス（読出完了通知）を受信することにより完了する。最大データ要求サイズは、読出完了通知の受信を待たずに、第１記憶部２から第２記憶部３又は第３記憶部４へデータの転送を要求可能なデータのサイズである。最大データ要求サイズの最大値は、第１記憶部２、転送部１２（ＤＭＡＣ）、及び、第１記憶部２と転送部１２とを接続するバスの仕様等によって決まる。
【００５９】
図６は第１実施形態の最大データ要求サイズ及び最大データ転送サイズの例を説明するための図である。図６は、１回の要求で転送可能なデータのサイズを示す最大データ転送サイズが１２８Ｂｙｔｅであり、上述の最大データ要求サイズが５１２Ｂｙｔｅである場合に、転送部１２が１０２４Ｂｙｔｅのデータを転送する例を示す。
【００６０】
図６は、簡単のため、転送部１２と第１記憶部２との間の処理のみを記載しており、それ以外の処理については省略している。まず、制御部１１は、第１記憶部２に記憶された１０２４Ｂｙｔｅのデータを転送する転送指示（転送要求）を転送部１２に入力する。転送部１２は、制御部１１から転送指示を受け付けると、１２８Ｂｙｔｅの読み出しリクエストを第１記憶部２に順次発行する。
【００６１】
図６の例では、４つのリクエストが発行された時点で最大データ要求サイズの５１２Ｂｙｔｅに到達する。そのため、転送部１２は、リクエストの発行により要求したデータを第１記憶部２からレスポンスとして受け取るまでは、後続のリクエストを発行しない待ち状態になる。待ち状態になると以降、転送部１２は、第１記憶部２からレスポンスを受け取るたびに、後続のリクエストを発行する。図６の例では、例えば、転送部１２は、１つ目のリクエストのレスポンスを受け取ってから、５つ目のリクエストを発行する。
【００６２】
最大データ要求サイズが大きいほど、第１記憶部２からのデータ転送を待たずに後続の読み出しリクエストを発行できるため、転送効率は高くなる。しかし、第３記憶部４へのデータ転送処理中に、第２記憶部３へのデータ転送処理を割り込ませる場合、既にリクエストを発行しているデータ転送が完了するまで、第２記憶部３へ転送されるデータを第１記憶部２から読み出すことができない。
【００６３】
つまり、最大データ要求サイズが大きいほど、第２記憶部３へのデータ転送処理を割り込ませるまでのレイテンシが増加する。
【００６４】
このため、図５のステップＳ２６で、転送部１２は、最大データ要求サイズを決定する際に、スケジューリング情報を参照して、データ転送中に別の転送指示が割り込む可能性があるか否かを判定する。そして転送部１２は、判定結果に基づいて最大データ要求サイズを調整する。
【００６５】
例えば、転送部１２は、第２記憶部３へのデータ転送割り込みが、第３記憶部４へのデータ転送中に発生する可能性があるタイミングでは、最大データ要求サイズを小さくする（例えば閾値未満の値に制御する）。これにより、データ転送割り込みが発生した場合に、即座に転送処理が切り替えることができる。
【００６６】
一方、転送部１２は、データ転送割り込みが発生する可能性がないタイミングでは、最大データ要求サイズを大きくする（例えば閾値以上の値に制御する）。これにより、データ転送の効率（スループット）を最大化することができる。なお、最大データ要求サイズを大きくする場合に参照される閾値と、最大データサイズを小さくする場合に参照される閾値は、同じであっても異なっていてもよい。
【００６７】
ここで、ステップＳ２６の処理により決定される最大データ要求サイズは、事前に決めておく方法や、その都度計算する方法等が考えられる。
【００６８】
事前に決めておく方法では、例えば割り込みが発生する可能性がある場合に使用される値Ａと、割り込みが発生しない場合に使用される値Ｂとが、転送部１２（ＤＭＡＣ）の初期化時等にあらかじめ指定される。すなわち、転送部１２は、ＤＭＡ処理中に、より高い優先度のフレームの送信処理が発生する可能性があるタイミングでは、最大データ要求サイズとして値Ａを使用し、それ以外の場合は値Ｂを使用して、ＤＭＡ処理を実行する。
【００６９】
最大データ要求サイズをその都度計算する方法としては、例えば、転送部１２が、スケジューリング情報から優先度が高いデータ転送が発生する可能性が生じるまでの時間を特定し、使用されている記憶装置、及び、当該記憶装置が接続されたバスの帯域を基に最大データ要求サイズを計算する方法がある。
【００７０】
なお最大データ要求サイズの決定（指定及び計算等）は、転送部１２ではなく、制御部１１により行われてもよい。
【００７１】
図７は第１実施形態の最大データ要求サイズの計算例を説明するための図である。制御部１１又は転送部１２は、スケジューリング情報を参照することで、ＤＭＡ処理中のフレームよりも高い優先度のフレーム送信処理が発生する可能性が生じるまでの時間Ｘを算出することが可能である。また、制御部１１又は転送部１２は、使用されている記憶装置及びバスの帯域がわかれば、図５のステップＳ２４の処理により取得された転送情報で指定されたデータサイズのＤＭＡ処理が完了するまでの時間Ｙを算出することも可能である。
【００７２】
時間Ｘよりも時間Ｙが小さい場合は、ＤＭＡ処理中に優先度の高いフレームの送信処理が発生する可能性はない。そのため、制御部１１又は転送部１２は、例えば最大データ要求サイズを転送情報で指定されたデータサイズ以上の値に決定することにより、スループットを最大化できる。
【００７３】
時間Ｘよりも時間Ｙが大きい場合は、ＤＭＡ転送中に優先度の高いフレームの送信処理が発生する可能性がある。そのため、制御部１１又は転送部１２が、例えばＤＭＡ転送開始時は、最大データ転送サイズを大きい値（例えば閾値以上の値）に決定し、読み出しリクエストを発行するたびに最大データ転送サイズを小さくしていく（図７参照）。この場合、時間Ｚ経過時に最大データ転送サイズが、設定可能な最小値（遅延が最小化する設定）になることが望ましい。そのため、制御部１１又は転送部１２は、例えばＤＭＡ転送開始から時間Ｚが経過した後は、最大データ要求サイズを最小値に決定する。
【００７４】
なお最小値は、転送部１２（ＤＭＡＣ）の仕様、及び、バスの仕様による。また、時間Ｚは、処理のオーバヘッド等が考慮された任意の計算式によって算出される。最大データ要求サイズを再決定する場合の処理は、例えば後述のステップＳ３２の処理で行われる。
【００７５】
また、最大データ要求サイズを再決定する別の方法として、制御部１１又は転送部１２は、例えばＤＭＡ転送開始から時間Ｚ（Ｚ＜Ｘ≦Ｙ）までの間は、最大データ要求サイズを帯域（記憶部及びバス等）×時間Ｚで算出される値に決定してもよい。そして、制御部１１又は転送部１２は、例えばＤＭＡ転送開始から時間Ｚが経過した後は、最大データ要求サイズを最小値に決定してもよい。この場合、例えば後述のステップＳ３２の処理で、時間Ｚ経過時に最大データ要求サイズが再決定される。
【００７６】
上記の最大データ要求サイズの決定方法は、あくまで一例であり、これらに限定されない。また、最大データ要求サイズを決定する際に参照されるスケジューリング情報は、出力部６がデータを外部機器へ送出するタイミングを決定するためのスケジューリング情報を使用しているが、これに限らない。例えばＣＰＵ及び仮想マシンのリソーススケジューリング情報等が用いられてもよい。また、複数のスケジューリング情報が参照されてもよい。
【００７７】
第１実施形態では、転送優先度が第１及び第２優先度の２つだけであるので、割り込みが発生する可能性があるのは第２優先度のデータ転送処理のみである。このため、第１優先度のデータ転送処理の場合は、最大データ要求サイズを設定可能な最大値にすることが望ましい。
【００７８】
また、中断中から再開した転送指示の場合、転送部１２は、例えばスケジューリング情報を参照して、最大データ要求サイズを再決定してもよい。また例えば、転送部１２は、中断前に決定された最大データ要求サイズの値を状態記憶部５に格納しておいて、再開後に、その値を使用してもよい。
【００７９】
第１実施形態の転送優先度の種類は、第１及び第２優先度の２つだけであるが、転送優先度の種類は３つ以上でもよい。この場合、転送部１２は、転送優先度毎に最大データ要求サイズを決定してもよい。例えば、転送部１２は、転送優先度が高くなるほど最大データ要求サイズを大きくするなどの制御をしてもよい。
【００８０】
図５に戻り、次に、転送部１２は、転送中のデータよりも転送優先度の高い転送指示が存在するかを判定する（ステップＳ２７）。図５の例では、第２優先度のデータの転送中、または、中断後に再開されたデータ転送中に、転送優先度の高いデータ（第１優先度）の転送指示がある可能性がある。
【００８１】
転送中のデータよりも転送優先度の高い転送指示がある場合（ステップＳ２７，Ｙｅｓ）、転送部１２は、現在の転送情報を状態情報として、状態記憶部５へ書き込み（ステップＳ２８）、処理を終了する（スタートに戻る）。これにより、転送部１２の転送処理が再度開始され、割り込ませた第１優先度のデータ転送処理が、上述のステップＳ２１の処理により開始される。第１優先度の転送処理が終了すると、中断されていた転送処理が、上述のステップＳ２２の処理により再開される。
【００８２】
転送中のデータよりも転送優先度の高い転送指示がない場合（ステップＳ２７，Ｎｏ）、転送部１２は、第１記憶部２に読み出しリクエストを発行する（ステップＳ２９）。次に、転送部１２は、全データ（転送情報で指定されたデータサイズ分のデータ）のリクエストの発行を完了したか否かを判定する（ステップＳ３０）。
【００８３】
全データのリクエストの発行を完了した場合（ステップＳ３０，Ｙｅｓ）、処理を終了する（スタートに戻る）。
【００８４】
全データのリクエストの発行を完了していない場合（ステップＳ３０，Ｎｏ）、転送部１２は、リクエスト発行処理を継続する。この時、転送部１２は、要求中のデータサイズ（第１記憶部２にリクエストは発行したが、レスポンスを未受信なデータのサイズ）が、最大データ要求サイズよりも小さいか否かを判定する（ステップＳ３１）。
【００８５】
要求中のデータサイズが最大データ要求サイズよりも小さい場合（ステップＳ３１，Ｙｅｓ）、転送部１２は、次のリクエスト発行処理を実行する。具体的には、転送部１２は、最大データ要求サイズを再決定し（ステップＳ３２）、ステップＳ２７の処理を実行する。なお、ステップＳ３２の処理は、最大データ要求サイズを再決定するための条件（例えば上述の時間Ｚが経過しているか否か等）を満たしていない場合、省略される。
【００８６】
要求中のデータサイズが最大データ要求サイズ以上の場合（ステップＳ３１，Ｎｏ）、転送部１２は、ステップＳ２９の処理で発行されたリクエストのレスポンスがあったか否かを判定する（ステップＳ３３）。レスポンスがない場合（ステップＳ３３，Ｎｏ）、転送部１２は、レスポンスがあるまで待機する。レスポンスがあった場合（ステップＳ３３，Ｙｅｓ）、ステップＳ３１に戻る。
【００８７】
なお、レスポンス（リクエストで指定されたデータ）の受信処理（後述の図８に示す第１記憶部２から受信したデータを第２記憶部３又は第３記憶部４へ書き込む処理）は、非同期に実行される。このため、図５に示すリクエスト発行処理においても、データ受信処理の情報をステップＳ３３の処理で参照できるようにする必要がある。
【００８８】
＜書き込み処理の例＞
次に、図８を用いて、第１記憶部２から受信したデータを第２記憶部３又は第３記憶部４へ書き込む処理について説明する。
【００８９】
図８はステップＳ１２の処理の詳細フローチャートである。はじめに、転送部１２が、第１記憶部２からレスポンス（リクエストにより指定されたデータ）を受信する（ステップＳ４１）。次に、転送部１２は、ステップＳ４１の処理により受信されたデータの書き込み先を判定する（ステップＳ４２）。転送部１２は、例えば受信されたデータに対応するリクエストを参照することにより、書き込み先を判定する。
【００９０】
書き込み先が第２記憶部３の場合（ステップＳ４２，第２記憶部）、転送部１２は、ステップＳ４１の処理により受信されたデータを第２記憶部３に書き込む（ステップＳ４３）。書き込み先が第３記憶部４の場合（ステップＳ４２，第３記憶部）、転送部１２は、ステップＳ４１の処理により受信されたデータを第３記憶部４に書き込む（ステップＳ４４）。
【００９１】
次に、転送部１２は、転送指示により指定された全データの転送が完了したか否かを判定する（ステップＳ４５）。転送指示により指定された全データの転送が完了していない場合（ステップＳ４５，Ｎｏ）、処理はステップＳ４１に戻る。
【００９２】
転送指示により指定された全データの転送が完了した場合（ステップＳ４５，Ｙｅｓ）、転送部１２は、完了通知を制御部１１に通知し（ステップＳ４６）、処理を終了する（スタートに戻る）。
【００９３】
制御部１１への完了通知の通知方法は任意でよい。完了通知の通知方法としては、例えば割り込み信号によって通知する方法、及び、ディスクリプタの受け渡しによって通知する方法等がある。
【００９４】
また、転送部１２は出力部６に対しても、データ転送が完了し、送信データが送信バッファ（第２記憶部３又は第３記憶部４）に準備できたことを明示的に通知してもよい。出力部６へ通知する方法は任意でよい。出力部６へ通知する方法としては、例えば転送部１２が出力部６へコマンドを発行することによって直接通知する方法、及び、送信バッファに送信データが存在するか否かを示すフラグ情報を設けて、出力部６が当該フラグ情報を参照する方法等がある。
【００９５】
以上説明したように、第１実施形態の通信装置１００（転送装置１）では、制御部１１又は転送部１２が、スケジューリング情報を基に上述の最大データ要求サイズを変更する。これにより第１実施形態の通信装置１００（転送装置１）によれば、低優先度のデータ転送処理中に、高優先度のデータ転送処理が発生した場合には、即座に処理を割り込ませることを可能にしつつ、全体的な転送効率を最大化することが可能になる。
【００９６】
（第２実施形態）
次に第２実施形態について説明する。第２実施形態の説明では、第１実施形態と同様の説明については省略し、第１実施形態と異なる箇所について説明する。
【００９７】
［機能構成の例］
図９は第２実施形態の通信装置１００−２の機能構成の例を示す図である。第２実施形態の通信装置１００−２は、転送装置１−２、第１記憶部２、第２記憶部３、第３記憶部４及び出力部６を備える。転送装置１−２は、第１制御部１１ａ、第２制御装置１１ｂ、第１転送部１２ａ、第２転送部１２ｂ及びスケジューリング情報記憶部１３を備える。
【００９８】
第２実施形態の通信装置１００−２では、第２制御部１１ｂが、第１制御部１１ａからの指示を受けて、第１転送部１２ａ及び第２転送部１２ｂを制御して、第１記憶部２のデータを第２記憶部３または第３記憶部４にコピーする。そして、出力部６が、上述のスケジューリング情報を基に、第２記憶部３または第３記憶部４にコピーされたデータを外部の通信機器へ出力する。
【００９９】
具体的には、第２制御部１１ｂは、第１制御部１１ａにより指定された情報に基づいて、第１記憶部２により記憶されたデータを、第２記憶部３（第３記憶部４）に転送するように第１転送部１２ａ（第２転送部１２ｂ）を制御する。第１制御部１１ａにより指定された情報は、例えば読み出し元のアドレス、宛先アドレス、及び、転送されるデータのサイズ等を含む。第２制御部１１ｂは、第２転送部１２ｂにより実行中のデータ転送処理を一時停止させることが可能である。
【０１００】
第１転送部１２ａは、第２制御部１１ｂからの指示に従い、第１記憶部２のデータを第２記憶部３へコピーする。
【０１０１】
第２転送部１２ｂは、第２制御部１１ｂからの指示に従い、第１記憶部２のデータを第３記憶部４へコピーする。第２転送部１２ｂは、第２制御部１１ｂからの停止指示によって、一時的に転送処理を停止することが可能である。
【０１０２】
［転送方法の例］
図１０は第２実施形態の転送方法の例を示すフローチャートである。はじめに、第１制御部１１ａが、第１記憶部２に記憶されたデータを、第２記憶部３又は第３記憶部４へ転送する指示を発行する（ステップＳ５１）。具体的には、第１制御部１１ａは、転送情報を第２制御部１１ｂに通知することにより、第２制御部１１ｂにデータの転送を指示する。転送情報は、転送されるデータのサイズ、第１記憶部２の読み出しアドレス、並びに、第２記憶部３又は第３記憶部４の書き込みアドレス等を含む。
【０１０３】
次に、第２制御部１１ｂは、第１制御部１１ａから転送指示を受け付けると、第１記憶部２のデータを第２記憶部３又は第３記憶部４へ転送する転送制御処理を実行する（ステップＳ５２）。第２制御部１１ｂは、第２記憶部３へデータを転送する場合、第１転送部１２ａに転送処理を実行させ、第３記憶部４へデータを転送する場合、第２転送部１２ｂに転送処理を実行させる。ステップＳ５２の処理の詳細は、図１１及び１２を参照して後述する。
【０１０４】
ステップＳ５３の処理は、上述の図３のステップＳ３の説明と同じなので説明を省略する。
【０１０５】
＜転送制御処理の例＞
図１１は第２実施形態の第２制御部１１ｂの処理の例を示すフローチャートである。はじめに、第２制御部１１ｂが、第１優先度の転送指示があるか否かを判定する（ステップＳ６１）。
【０１０６】
第１優先度の転送指示がある場合（ステップＳ６１，Ｙｅｓ）、第２制御部１１ｂは、当該転送指示を示す転送情報を取得する（ステップＳ６４）。転送情報は、例えば転送されるデータのサイズ、当該データの読み出しアドレス、及び、当該データの書き込みアドレス等を含む。ただし、第１転送部１２ａによる転送の場合は、書き込み先の送信バッファは第２記憶部３になるため、書き込みアドレスは省略してもよい。次に、第２制御部１１ｂは、ステップＳ６４の処理により取得された転送情報を第１転送部１２ａに入力することにより、第１転送部１２ａに転送を指示する（ステップＳ６５）。次に、第２制御部１１ｂは、第１転送部１２ａから転送完了通知を受信したか否かを判定する（ステップＳ６６）。転送完了通知を受信していない場合（ステップＳ６６，Ｎｏ）、第２制御部１１ｂは、第１転送部１２ａから転送完了通知を受信するまで待機する。転送完了通知を受信した場合（ステップＳ６６，Ｙｅｓ）、第２制御部１１ｂは、転送が完了したことを示す完了通知を第１制御部１１ａに送信する（ステップＳ７３）。なお、完了通知の通知方法は任意でよい。完了通知の通知方法としては、例えば割り込み信号による通知、及び、ディスクリプタの受け渡しによる通知等がある。
【０１０７】
第１優先度の転送指示がない場合（ステップＳ６１，Ｎｏ）、第２制御部１１ｂは、中断中の転送指示があるか否かを判定する（ステップＳ６２）。
【０１０８】
中断中の転送指示がある場合（ステップＳ６２，Ｙｅｓ）、第２制御部１１ｂは、上述のスケジューリング情報を参照して、上述の最大データ要求サイズを決定し、第２転送部１２ｂの転送を再開させる（ステップＳ６７）。次に、第２制御部１１ｂは、第２転送部１２ｂから転送完了通知を受信したか否かを判定する（ステップＳ７０）。転送完了通知を受信していない場合（ステップＳ７０，Ｎｏ）、第２制御部１１ｂは、転送中のデータよりも優先度の高い転送指示があるか否かを判定する（ステップＳ７１）。転送中のデータよりも優先度の高い転送指示がない場合（ステップＳ７１，Ｎｏ）、処理はステップＳ７０に戻る。転送中のデータよりも優先度の高い転送指示がある場合（ステップＳ７１，Ｙｅｓ）、第２制御部１１ｂは、第２転送部１２ｂの動作を一時停止させ（ステップＳ７２）、処理を終了する（スタートに戻る）。転送完了通知を受信した場合（ステップＳ７０，Ｙｅｓ）、第２制御部１１ｂは、転送が完了したことを示す完了通知を第１制御部１１ａに送信する（ステップＳ７３）。
【０１０９】
中断中の転送指示がない場合（ステップＳ６２，Ｎｏ）、第２制御部１１ｂは、第２優先度の転送指示があるか否かを判定する（ステップＳ６３）。第２優先度の転送指示がある場合（ステップＳ６３，Ｙｅｓ）、第２制御部１１ｂは、当該転送指示を示す転送情報を取得する（ステップＳ６８）。次に、第２制御部１１ｂは、スケジューリング情報を参照して、最大データ要求サイズを決定し、第２転送部１２ｂの転送を指示する（ステップＳ６９）。以降は、上述のステップＳ７０〜ステップＳ７３の処理を実行する。
【０１１０】
第２優先度の転送指示がない場合（ステップＳ６３，Ｎｏ）、処理を終了する（スタートに戻る）。
【０１１１】
ここで、図１１のフローチャートの例では、第２制御部１１ｂは、第１優先度、中断中、第２優先度の順で転送指示があるか否かを判定するが、連続して第１優先度の処理が続かないように制御してもよい。
【０１１２】
また、図１１のフローチャートの処理の開始は、転送指示があるか否かを監視する形態としているが、第１制御部１１ａからの転送指示を受信したことをトリガーとして処理を開始してもよい。この場合は、必ず１つは転送指示が存在することになるので、ステップＳ６３でＮｏに進むことはない。また、転送指示を受信したことをトリガーにする場合は、第１優先度のリクエスト発行処理完了時に、中断中の転送指示があるか否かを判定し、中断中の転送指示があれば、中断中の転送指示を再開させる動作が必要になる。
【０１１３】
また、第２実施形態では、簡単のため、転送優先度の種類が、第１優先度（Ｅｘｐｒｅｓｓ）、及び、第２優先度（Ｐｒｅ−ｅｍｐｔａｂｌｅ）の２つである場合を例にして説明しているが、転送優先度の種類は、３つ以上でもよい。３つ以上の転送優先度がある場合の構成も、転送優先度の順番に転送処理が実施される。
【０１１４】
図１２は第２実施形態の第１転送部１２ａ及び第２転送部１２ｂの転送処理の例を示すフローチャートである。図１２に示すように、第１転送部１２ａ（第２転送部１２ｂ）は、第１記憶部２に読み出しリクエストを発行する読み出し処理（ステップＳ８１）と、第１記憶部２から受信されたデータを第２記憶部３（第３記憶部４）へ書き込む書き込み処理（ステップＳ８２）とを非同期に実行する。
【０１１５】
図１３は第２実施形態の第１転送部１２ａの読み出しリクエスト発行処理の例を示すフローチャートである。はじめに、第１転送部１２ａは、第２制御部１１ｂから転送指示を受け付けると、第１記憶部２に読み出しリクエストを発行する（ステップＳ９１）。次に、第１転送部１２ａは、全データ（転送情報で指定されたデータサイズ分のデータ）のリクエストの発行を完了したか否かを判定する（ステップＳ９２）。
【０１１６】
全データのリクエストの発行を完了した場合（ステップＳ９２，Ｙｅｓ）、処理は終了する（スタートに戻る）。
【０１１７】
全データのリクエストの発行を完了していない場合（ステップＳ９２，Ｎｏ）、リクエスト発行処理を継続する。この時、第１転送部１２ａは、要求中のデータサイズ（第１記憶部２にリクエストは発行したが、レスポンスを未受信なデータのサイズ）が最大データ要求サイズよりも小さいか否かを判定する（ステップＳ９３）。
【０１１８】
要求中のデータサイズが最大データ要求サイズよりも小さい場合（ステップＳ９３，Ｙｅｓ）、第１転送部１２ａは、次のリクエスト発行処理を実行する（ステップＳ９１に戻る）。
【０１１９】
要求中のデータサイズが最大データ要求サイズ以上の場合（ステップＳ９３，Ｎｏ）、第１転送部１２ａは、ステップＳ９１の処理で発行されたリクエストのレスポンスがあったか否かを判定する（ステップＳ９４）。レスポンスがない場合（ステップＳ９４，Ｎｏ）、第１転送部１２ａは、レスポンスがあるまで待機する。レスポンスがあった場合（ステップＳ９４，Ｙｅｓ）、ステップＳ９３に戻る。
【０１２０】
図１４は第２実施形態の第２転送部１２ｂの読み出しリクエスト発行処理の例を示すフローチャートである。はじめに、第２転送部１２ｂが、第２制御部１１ｂから一時停止指示があるか否かを判定する（ステップＳ１０１）。
【０１２１】
一時停止指示がある場合（ステップＳ１０１，Ｙｅｓ）、処理は終了する（スタートに戻り、第２制御部１１ｂからの再開指示を待つ）。第２転送部１２ｂは、状態情報を保持し、第２制御部１１ｂからの再開指示を受け付けると、当該状態情報を使用して、一時停止した状態からリクエスト発行処理を再開する。
【０１２２】
一時停止指示がない場合（ステップＳ１０１，Ｎｏ）、ステップＳ１０２の処理に進む。ステップＳ１０２〜ステップＳ１０５の処理は、上述の図１３のステップＳ９１〜ステップＳ９４の処理と同様であるため、説明を省略する。ただし、ステップＳ１０４でＹｅｓの場合、ステップＳ１０１の処理に戻り、第２制御部１１ｂから一時停止指示があるか否かを判定する点が、第１転送部１２ａの読み出しリクエスト発行処理とは異なる。
【０１２３】
図１５は第２実施形態の第１転送部１２ａ及び第２転送部１２ｂのデータ受信処理及び書き込み処理の例を示すフローチャートである。はじめに、第１転送部１２ａ（第２転送部１２ｂ）が、第１記憶部２からデータを受信する（ステップＳ１１１）。次に、第１転送部１２ａ（第２転送部１２ｂ）が、ステップＳ１１１の処理により受信されたデータを送信バッファに書き込む（ステップＳ１１２）。なお、第１転送部１２ａの送信バッファは第２記憶部３であり、第２転送部１２ｂの送信バッファは第３記憶部４である。
【０１２４】
次に、第１転送部１２ａ（第２転送部１２ｂ）は、転送指示により指定された全データの転送が完了したか否かを判定する（ステップＳ１１３）。転送指示により指定された全データの転送が完了していない場合（ステップＳ１１３，Ｎｏ）、処理はステップＳ１１１に戻る。
【０１２５】
転送指示により指定された全データの転送が完了した場合（ステップＳ１１３，Ｙｅｓ）、第１転送部１２ａ（第２転送部１２ｂ）は、完了通知を第２制御部１１ｂに通知し（ステップＳ１１４）、処理を終了する（スタートに戻る）。
【０１２６】
以上説明したように、第２実施形態の通信装置１００−２（転送装置１−２）では、第２制御部１１ｂが、スケジューリング情報を基に上述の最大データ要求サイズを変更する。これにより第１実施形態の通信装置１００（転送装置１）の場合と同様の効果を得ることができる。
【０１２７】
（第３実施形態）
次に第３実施形態について説明する。第３実施形態の説明では、第１実施形態と同様の説明については省略し、第１実施形態と異なる箇所について説明する。
【０１２８】
［機能構成の例］
図１６は第３実施形態の通信装置１００−３の機能構成の例を示す図である。第３実施形態の通信装置１００−３は、転送装置１−３、第１記憶部２、第２記憶部３、第３記憶部４、状態記憶部５、第１出力部６ａ、第２出力部６ｂ及び第４記憶部７を備える。転送装置１−３は、制御部１１ｃ、第１転送部１２ｃ、第２転送部１２ｄ及びスケジューリング情報記憶部１３を備える。
【０１２９】
制御部１１ｃは、通信装置１００−３全体を制御する。具体的には、制御部１１ｃは、例えば第１転送部１２ｃ及び第２転送部１２ｄを制御（初期化及びデータ転送指示等）する。また例えば、制御部１１ｃは、第１出力部６ａに接続された第１機器、及び、第２出力部６ｂに接続された第２機器へ送信されるフレーム（パケット）等のデータを生成する。また例えば、制御部１１ｃは、スケジューリング情報を生成する。
【０１３０】
第１転送部１２ｃの動作は、第１実施形態の転送部１２の動作と同じなので説明を省略する。
【０１３１】
第２転送部１２ｄは、第１記憶部２と第４記憶部７との間のデータ転送を制御する。第２転送部１２ｄは、上述のスケジューリング情報を参照して、第１記憶部２への読み出しリクエストの発行処理、及び、第１記憶部２への書き込みリクエストの発行処理で使用される上述の最大データ要求サイズを決定する。
【０１３２】
第４記憶部７は、第２機器とのデータの受け渡しを行うためのバッファ領域を有する。第４記憶部７の具体的な形態は任意でよい。第４記憶部７は、例えばＳＲＡＭ、ＳＤＲＡＭ、ＳＳＤ、ＨＤＤ及びＳＤカード等の記憶装置である。
【０１３３】
第１出力部６ａは、第１機器とのデータの受け渡し処理を実行する。第１出力部６ａに接続される第１機器は、例えば通信機器である。
【０１３４】
第２出力部６ｂは、第２機器とのデータの受け渡し処理を実行する。第２機器は任意でよい。第２機器は、例えば通信機器、ストレージ装置及びグラフィック処理装置等である。
【０１３５】
第１機器へ出力されるデータの転送処理の説明は、第１実施形態と同様なので省略する。以下、第２機器へ出力されるデータの転送処理について説明する。
【０１３６】
はじめに、制御部１１ｃが、第２機器とのデータの転送処理及び出力処理を、第２転送部１２ｄ及び第２出力部６ｂに指示する。第２転送部１２ｄは、制御部１１ｃから指示された転送情報を基に、第１記憶部２と第４記憶部７との間のデータ転送処理を実行する。転送情報は、例えば転送データサイズ、読み出し元のアドレス、及び、宛先アドレス等を含む。
【０１３７】
第２出力部６ｂからデータが出力される場合は、読み出し元が第１記憶部２になり、書き込み先が第４記憶部７になる。第２出力部６ｂからデータが取得される場合は、読み出し元が第４記憶部７になり、書き込み先が第１記憶部２になる。
【０１３８】
ここで、第２機器とのデータ転送処理は、第１機器とのデータ転送処理と非同期に実行される。第１及び第２機器は、第１記憶部２及びバスを共有している。そのため、第２機器とのデータ転送処理によって第１記憶部２及びバスのアクセス負荷が高くなると、第１機器の高優先度（第１優先度）のデータの送信タイミングに影響を与えてしまう可能性がある。
【０１３９】
前述のとおり、高優先度のデータには、機器の制御信号等のリアルタイム通信が必要なデータが想定される。第２機器とのデータ転送処理の負荷が高くなり、これらのリアルタイム通信の送信タイミングに影響を与えてしまうと、システム全体に重大な問題を発生する可能性がある。このため、第２転送部１２ｄは、スケジューリング情報を参照して、第１出力部６ａの処理タイミングを特定し、当該処理タイミングを考慮して、第１記憶部２へアクセスする際の上述の最大データ要求サイズを決定する。具体的には、第２転送部１２ｄは、第１実施形態と同様に、高優先度なデータ転送が発生する可能性があれば、最大データ要求サイズに小さい値（例えば閾値未満の値）を設定し、発生する可能性がなければ大きな値（例えば閾値以上の値）を設定する。また、第１機器へのデータ転送のために第２記憶部３へ高優先度データの書き込み処理が発生している時は、第２転送部１２ｄが、第１記憶部２へリクエストを発行しないようにする制御をしてもよい。
【０１４０】
以上説明したように、第３実施形態の通信装置１００−３（転送装置１−３）では、第２転送部１２ｄが、スケジューリング情報を参照して、第１出力部６ａの処理タイミングを特定し、当該処理タイミングを考慮して、第１記憶部２へアクセスする際の上述の最大データ要求サイズを決定する。これにより、第１機器とのデータ転送処理とは非同期に動作する第２機器とのデータ転送処理が、第１機器とのデータ転送処理に与える影響を最小化できる。例えば、第１機器とのデータ転送において、低優先度のデータ転送処理中に高優先度のデータ転送処理が発生した場合には、即座に処理を割り込ませることを可能にしつつ、全体的な転送効率を最大化することが可能になる。
【０１４１】
（第４実施形態）
次に第４実施形態について説明する。第４実施形態の説明では、第１実施形態と同様の説明については省略し、第１実施形態と異なる箇所について説明する。第４実施形態の説明では、より具体的な構成を例示して説明する。
【０１４２】
図１７は第４実施形態の通信装置１００−４の構成の例を示す図である。第４実施形態の通信装置１００−４は、ホスト２０１及びＮＩＣ２０２を備える。ホスト２０１は、ＣＰＵ２１１及びメモリ２１２を備える。ＣＰＵ２１１、メモリ２１２及びＰＣＩｅ２１３は、バス２１４を介して接続される。
【０１４３】
ホスト２０１及びＮＩＣ２０２は、ＰＣＩｅ２１３を介して接続される。なおホスト２０１及びＮＩＣ２０２の接続方法は、ＰＣＩｅ２１３に限られず、他の方式でもよい。
【０１４４】
ＮＩＣ２０２は、ＤＭＡＣ２２１、ＤＭＡ状態情報２２２、８０２．１Ｑｂｖ処理部２２０、及び、８０２．１Ｑｂｕ／８０２．３ｂｒ処理部２３０を備える。
【０１４５】
ＣＰＵ２１１は、通信装置１００−４全体の様々な処理を実行する。ＣＰＵ２１１は、例えば各アプリケーションの処理、通信プロトコル処理、ＮＩＣ２０２の初期化処理及び制御処理等を実行する。ＣＰＵ２１１は、例えば上述の制御部１１に対応する。
【０１４６】
メモリ２１２は、アプリケーションプログラム、アプリケーションデータ、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、及び、プロトコルスタック等を記憶する。
【０１４７】
８０２．１Ｑｂｖ処理部２２０は、ＩＥＥＥ  ８０２．１Ｑｂｖの処理を実行する。
【０１４８】
具体的には、送信キュー２２４及び２２５ａ〜２２５ｃは、転送対象のデータを記憶する。送信キュー２２４（Ｓｃｈｅｄｕｌｅｄ  Ｑｕｅｕｅ）は、例えばリアルタイム性が要求されるトラフィックのデータを記憶する。送信キュー２２４は、例えば上述の第２記憶部３に対応する。送信キュー２２５ａ〜２２５ｃ（Ｂｅｓｔ  Ｅｆｆｏｒｔ  Ｑｕｅｕｅ）は、例えばベストエフォート型のトラフィックのデータが記憶される。送信キュー２２５ａ〜ｃは、例えば上述の第３記憶部４に対応する。転送対象のデータは、例えば転送対象のデータが属するトラフィッククラスに基づいて、送信キュー２２４及び２２５ａ〜２２５ｃのいずれかに記憶される。
【０１４９】
ゲートドライバー２２６は、ＩＥＥＥ  ８０２．１Ｑｂｖのゲートコントロールリスト２２３に設定されたタイミングで、各送信キュー２２４及び２２５ａ〜２２５ｃのゲート２２７ａ〜２２７ｄの開閉処理を制御する。これにより、スケジューリングされたタイミングで各トラフィッククラスの送信タイミングを制御することが可能になる。ゲートドライバー２２６は、例えば上述の出力部６に対応する。ゲートコントロールリスト２２３は、例えば上述のスケジューリング情報記憶部１３に記憶されたスケジューリング情報に対応する。
【０１５０】
ゲートコントロールリスト２２３に設定されるゲートの開閉情報（スケジューリング情報）は、ＣＰＵ２１１上で動作する制御アプリケーションが設定してもよいし、ＩＥＥＥ  ８０２．１Ｑｃｃ（Ｓｔｒｅａｍ  Ｒｅｓｅｒｖａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）等によって外部機器から設定されてもよい。ここで、各トラフィッククラスのうち、送信キュー２２４はｅＭＡＣに接続され、送信キュー２２５ａ〜２２５ｃはｐＭＡＣに接続される。
【０１５１】
８０２．１Ｑｂｕ／８０２．３ｂｒ処理部２３０は、ＩＥＥＥ  ８０２．１Ｑｂｕ／ＩＥＥＥ  ８０２．３ｂｒの処理を実行する。具体的には、８０２．１Ｑｂｕ／８０２．３ｂｒ処理部２３０は、ｐＭＡＣが、送信キュー２２５ａ〜２２５ｃに記憶されたデータ（Ｐｒｅｅｍｐｔａｂｌｅ）の送信中に、送信キュー２２４にデータ（Ｅｘｐｒｅｓｓ）が書き込まれると、ｐＭＡＣの処理を停止し、ｅＭＡＣの処理を割り込ませる。そして、８０２．１Ｑｂｕ／８０２．３ｂｒ処理部２３０は、ｅＭＡＣの処理が終了すると、ｐＭＡＣの処理を再開する。これにより、高優先度なデータを低レイテンシで送信することが可能になる。
【０１５２】
ＤＭＡＣ２２１は、例えば上述の転送部１２に対応する。ＤＭＡ状態情報２２２は、例えば上述の状態記憶部５に記憶された状態情報に対応する。ＤＭＡＣ２２１は、ゲートコントロールリスト２２３を参照して、メモリ２１２へアクセスする際の最大データ要求サイズを決定する。これにより８０２．１Ｑｂｖの送信制御と連動して最大データ要求サイズを決定することができる。そのため、メモリ２１２に用意されたバッファ（アプリケーションバッファ及びプロトコルスタックのバッファ等）から、高優先度データを即座に送信キュー２２４（Ｓｃｈｅｄｕｌｅｄ  Ｑｕｅｕｅ）へ投入することが可能になる。
【０１５３】
以上説明したように、第４実施形態の通信装置１００−４では、ＣＰＵ２１１又はＤＭＡＣ２２１が、ゲートコントロールリスト２２３を用いて、上述の最大データ要求サイズを変更する。これによりＩＥＥＥ  ８０２．１Ｑｂｕ／ＩＥＥＥ  ８０２．３ｂｒのＥｘｐｒｅｓｓデータを、送信キュー２２４（Ｓｃｈｅｄｕｌｅｄ  Ｑｕｅｕｅ）に即座に書き込むことを可能にしつつ、送信キュー２２５ａ〜２２５ｃ（Ｂｅｓｔ  Ｅｆｆｏｒｔ  Ｑｕｅｕｅ）に記憶されたデータの送信効率をより高くすることが可能になる。
【０１５４】
（第４実施形態の変形例）
なお、データ転送のスケジューリング方法として、パケット毎のスケジューリング方法、及び、ストリーム毎のスケジューリング方法を使用してもよい。
【０１５５】
図１８は第４実施形態の変形例のスケジューリング方法の例を説明するための図である。図１８では、通信相手の宛先アドレス及び優先度等によって、ストリーム単位でメモリ２１２上にバッファが保持される。各ストリームは、トラフィッククラス（ＴＣ）のどれか１つに属する。
【０１５６】
各アプリケーションＡ〜Ｃは、パケット毎に送信タイミングを制御して、該当するストリームのバッファにパケットを書き込む。図１８の例では、例えばプロトコルスタック等の通信処理により、ストリーム毎にトラフィッククラスのキューに書き込むタイミングが制御される。このため、上述の図１７のＣＰＵ２１１又はＤＭＡＣ２２１は、アプリケーションＡ〜Ｃが制御するパケット毎の送信スケジューリング情報、及び、プロトコルスタック等が制御するストリーム毎の送信スケジューリング情報等を参照して、上述の最大データ要求サイズを決定する。また、ＣＰＵ２１１又はＤＭＡＣ２２１は、これらの複数のスケジューリング情報を参照して、最大データ要求サイズを決定してもよい。また、ＣＰＵ２１１又はＤＭＡＣ２２１は、パケット毎、ストリーム毎又はトラフィッククラス毎に最大データ要求サイズを決定してもよい。
【０１５７】
なお、上述の第１乃至第４実施形態の通信装置１００（転送装置１）は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、上述の第１乃至第４実施形態の通信装置１００の機能構成のうち、プログラムにより実現させることができる機能を、コンピュータ装置に搭載されたプロセッサに当該プログラムを実行させることにより実現させることができる。このとき、通信装置１００は、例えばプログラムをコンピュータ装置にあらかじめインストールすることで実現されてもよい。また例えば、通信装置１００は、ＣＤ−ＲＯＭ等の記憶媒体に記憶されたプログラムをコンピュータ装置に適宜インストールすることで実現されてもよい。また例えば、通信装置１００は、ネットワークを介して配布されたプログラムをコンピュータ装置に適宜インストールすることで実現されてもよい。
【０１５８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１５９】
１  転送装置
２  第１記憶部
３  第２記憶部
４  第３記憶部
５  状態記憶部
６  出力部
７  第４記憶部
１１  制御部
１２  転送部
１３  スケジューリング情報記憶部
１００  通信装置
２０１  ホスト
２０２  ＮＩＣ
２１１  ＣＰＵ
２１２  メモリ
２１３  ＰＣＩｅ
２１４  バス
２２０  ８０２．１Ｑｂｖ処理部
２２１  ＤＭＡＣ
２２２  ＤＭＡ状態情報
２２３  ゲートコントロールリスト
２２４  送信キュー
２２５  送信キュー
２２６  ゲートドライバー
２２７  ゲート
２３０  ８０２．１Ｑｂｕ／８０２．３ｂｒ処理部
【図１Ａ】
2019054350.tif 000003
【図１Ｂ】
2019054350.tif 000004
【図２】
2019054350.tif 000005
【図３】
2019054350.tif 000006
【図４】
2019054350.tif 000007
【図５】
2019054350.tif 000008
【図６】
2019054350.tif 000009
【図７】
2019054350.tif 000010
【図８】
2019054350.tif 000011
【図９】
2019054350.tif 000012
【図１０】
2019054350.tif 000013
【図１１】
2019054350.tif 000014
【図１２】
2019054350.tif 000015
【図１３】
2019054350.tif 000016
【図１４】
2019054350.tif 000017
【図１５】
2019054350.tif 000018
【図１６】
2019054350.tif 000019
【図１７】
2019054350.tif 000020
【図１８】
2019054350.tif 000021