(57)【要約】【課題】ケーブル長が長くなった場合のデータ転送効率の低下を、バッファサイズにかかわりなく低減することができるを通信デバイスを提供する。【解決手段】通信デバイスは、受信データを格納する受信バッファ部と、フロー制御の初期化時に通信先に送信可能なデータ容量として通知される初期クレジットの値であり、前記受信バッファの容量を示すクレジットの値よりも大きな値である仮想初期クレジットの値を通知するフロー制御部と、を有する。【選択図】図３
2014230072.tif 000002
【特許請求の範囲】
【請求項１】
受信データを格納する受信バッファ部と、
フロー制御の初期化時に通信先に送信可能なデータ容量として通知される初期クレジットの値であり、前記受信バッファ部の容量を示すクレジットの値よりも大きな値である仮想初期クレジットの値を通知するフロー制御部と、
を有する通信デバイス。
【請求項２】
通信ケーブルで発生する遅延時間の大きさの情報又は前記通信ケーブルの長さの情報に基づいて、前記仮想初期クレジットの値を算出する仮想初期クレジット演算部を有する請求項１に記載の通信デバイス。
【請求項３】
前記仮想初期クレジット演算部は、パケットの伝送速度に応じて前記仮想初期クレジットの値を算出する請求項２に記載の通信デバイス。
【請求項４】
前記仮想初期クレジット演算部は、受信したパケットの処理に係る時間を加味して前記仮想初期クレジットの値を算出する請求項２又は３に記載の通信デバイス。
【請求項５】
前記仮想初期クレジットの値および前記受信バッファ部の容量を示すクレジットの値の差分である追加クレジットの値は、所定の値に設定可能である請求項１に記載の通信デバイス。
【請求項６】
前記フロー制御部は、前記受信バッファ部がオーバーフローした場合に、前記通信先にＮａｋを送信する請求項１乃至５のいずれか一項に記載の通信デバイス。
【請求項７】
前記フロー制御部は、ＰＣＩ Ｅｘｐｒｅｓｓ規格のフロー制御用パケットであるＩｎｉｔＦＣを用いて、前記仮想初期クレジットの値を前記通信先に通知する請求項１乃至６のいずれか一項に記載の通信デバイス。
【請求項８】
受信データを格納する受信バッファ部と、
フロー制御の初期化時に、通信先に送信可能なデータ容量として通知される初期クレジットの値であり、前記受信バッファ部の容量を示すクレジットの値よりも大きな値である仮想初期クレジットの値を通知するフロー制御部と、
を有する通信装置。
【請求項９】
通信ケーブルで発生する遅延時間の大きさ、前記通信ケーブルの長さのうちの少なくとも１つに基づいて、前記仮想初期クレジットの値を設定する手段を有する請求項８に記載の通信装置。
【請求項１０】
受信データを格納する受信バッファ部の容量を取得するステップと、
前記受信バッファ部の容量に応じたクレジットの値よりも大きな値である仮想初期クレジットの値を算出するステップと、
フロー制御の初期化時に通信先に前記仮想初期クレジットの値を通知するステップと、
を有する通信装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ通信デバイス、データ通信装置及びデータ通信方法に関する。
【背景技術】
【０００２】
近年、高速に機器間やボード間を通信するために、高速シリアルインタフェースが利用されている。このような、高速シリアルインタフェースの標準規格の一つに、ＰＣＩ Ｅｘｐｒｅｓｓ（以下、ＰＣＩｅと称す）がある。
ＰＣＩｅの標準規格は、通常のＰＣＩｅスロットとカードエッジを直結した接続形態に対応するＰＣＩｅの基本仕様である PCI Express Base が制定された後、拡張規格としてケーブル仕様である PCI Express Cabling が制定された。この規格によって、ＰＣＩｅケーブルによる延長接続形態が可能になった。
ＰＣＩｅでは、受信側のバッファのオーバーフローを防ぐためにフロー制御が行われる。しかし、受信側のバッファの空きを確認してからパケットの送信を行うため、ケーブル長が長くなるとフロー制御用のパケットの待ち時間により、データ転送効率が低下してしまうという問題がある。また、これを回避するためには、ケーブルが長くなると、大きなサイズの受信バッファを実装しなければならないという問題がある。
【０００３】
なお、通信速度の高速化のために、受信バッファからパケットデータの取り出しが完了したことを意味するフロー制御パケット「ＵｐｄａｔｅＦＣ」を、実際に受信バッファに空き容量が存在するよりも前の時刻で返信する技術が知られている（例えば、特許文献１参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来の技術では、ケーブル長が長くなった場合のデータ転送効率の低下を、バッファサイズを大きくすることなく防止することには困難を伴っていた。
本発明の実施の形態は、上記問題点を鑑みてなされたものであって、ケーブル長が長くなった場合のデータ転送効率の低下を、バッファサイズにかかわりなく低減することができる通信デバイスを提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記課題を解決するため、一実施の形態に係る通信デバイスは、受信データを格納する受信バッファ部と、フロー制御の初期化時に通信先に送信可能なデータ容量として通知される初期クレジットの値であり、前記受信バッファの容量を示すクレジットの値よりも大きな値である仮想初期クレジットの値を通知するフロー制御部と、を有する。
【発明の効果】
【０００６】
本実施の形態によれば、ケーブル長が長くなった場合のデータ転送効率の低下を、バッファサイズにかかわりなく低減することができる通信デバイスを提供することができる。
【図面の簡単な説明】
【０００７】
【図１】一実施形態に係る通信システムの構成例である。
【図２】一実施形態に係るフロー制御の流れの概要を示す図である。
【図３】第１の実施の形態に係る通信装置の構成図である。
【図４】第1の実施の形態に係るフロー制御部の機能構成を示す図である。
【図５】送信フロー制御部の動作の一例を示すタイミングチャートである。
【図６】第１の実施の形態に係るフロー制御の初期化処理のフローチャートである。
【図７】第１の実施の形態に係る仮想初期クレジットを説明するための図である。
【図８】第１の実施の形態に係る仮想初期クレジットによるフロー制御のタイミングチャートである。
【図９】第１の実施の形態に係るＴＬＰ受信処理のフローチャートである。
【図１０】第２の実施の形態に係る通信装置の構成図である。
【発明を実施するための形態】
【０００８】
以下に、本発明の実施の形態について、添付の図面を参照して説明する。
【０００９】
＜システムの構成＞
図１は、一実施形態に係る通信システム１００の構成例である。通信システム１００は、通信装置１０１と、通信装置１０１に高速シリアルケーブル１０７を介して接続された通信装置１０２を有する。
【００１０】
通信装置１０１、１０２は、ＰＣＩ(Peripheral Component Interconnect) Ｅｘｐｒｅｓｓ（以下、ＰＣＩｅと称す）による高速シリアル通信が可能な装置である。
【００１１】
通信装置１０１、１０２は、それぞれ、データ処理等を行うアプリケーション部１０３、１０６とＰＣＩｅ部１０４、１０５を有している。アプリケーション部１０３、１０６は、例えば、ＣＰＵ（Central Processing Unit）、メモリ、及びＣＰＵで動作するプログラム等を有し、通信装置１０１、１０２の所定の機能を実現する。ＰＣＩｅ部１０４、１０５は、ＰＣＩｅによる通信を行う通信デバイスである。
【００１２】
上記構成により、通信装置１０１は、高速シリアルケーブル１０７を介して、通信装置１０２とＰＣＩｅによるパケット通信が可能である。
【００１３】
尚、ＰＣＩｅでは、事前に受信側のバッファの空き容量を確認し、十分な空き容量が確保されている場合に、パケット送信を行うフロー制御を行う。
【００１４】
図２に、一実施形態に係るフロー制御の流れの概要を示す。ここでは、通信装置１０２から通信装置１０１へＴＬＰ（Transaction Layer Packet）を送信する場合の例について説明する。通信装置１０１は、通信開始前に初期化用のフロー制御パケットであるＩｎｉｔＦＣを使って、通信装置１０２へ仮想初期クレジットの値を通知する（ステップＳ２０１）。仮想初期クレジットの値は、通信装置１０１の受信バッファの容量を示すクレジットの値に追加クレジットの値を加えたものである。尚、仮想初期クレジットについては、後で詳しく説明する。
【００１５】
ＩｎｉｔＦＣで通知した仮想初期クレジットは、通信装置１０２にクレジットとして記憶される。ここで、クレジットとは、通信装置１０２が通信装置１０１に送信可能なデータの容量を示しており、通信装置１０２は、送信するＴＬＰのサイズより大きいクレジットがある場合にパケットの送信が可能である。通信装置１０２は、送信するＴＬＰ１よりもクレジットの値が大きい場合、ＴＬＰ１を通信装置１０１へ送信する（ステップＳ２０２）。このとき、通信装置１０２のクレジットの値は、ＴＬＰ１送信前のクレジットからＴＬＰ１のサイズを引いた値となる。
【００１６】
通信装置１０１は、ＴＬＰ１を受信すると、受信したＴＬＰ１を受信バッファに格納する（ステップＳ２０３）。通信装置１０２は、次に送信するＴＬＰ２よりもクレジットの値が大きい場合、ＴＬＰ２を通信装置１０１へ送信し（ステップＳ２０４）、クレジットの値からＴＬＰ２のサイズを減算する。同様にして、通信装置１０１は、送信するＴＬＰの値よりのクレジットの値が小さくなるまで、続けてＴＬＰを送信することができる。また、送信するＴＬＰよりもクレジットの値が小さい場合には、クレジットの値が大きくなるまでＴＬＰを送信せずに待機する。
【００１７】
一方、通信装置１０１は、ＴＬＰ１を受信バッファから読み出して、受信バッファに空きができると（ステップＳ２０６）、フロー制御用のパケットであるＵｐｄａｔｅＦＣを使ってクレジット値の更新を行う（ステップＳ２０７）。ここでは、ＴＬＰ１のサイズだけバッファの空きが増えるので、更新クレジット量としてＴＬＰ１のサイズが通知される。ＵｐｄａｔｅＦＣを受信した通信装置１０２では、通知された更新クレジット量をクレジットに加算する。同様にして、装置１０２は、ＴＬＰ２を読み出すと（ステップＳ２０８）、ＵｐｄａｔｅＦＣでＴＬＰ２の更新クレジット量を通信装置１０２に通知する（ステップＳ２０９）。ＵｐｄａｔｅＦＣを受信した通信装置１０２では、通知された更新クレジット量をクレジットに加算する。
【００１８】
このようにして、送信側の通信装置１０２は、受信側から通知された仮想初期クレジット及び更新クレジットに基づいて、受信側の通信装置１０１へＴＬＰを送信可能か否かを判断する。
【００１９】
［第１の実施の形態］
図３は、第１の実施の形態に係る通信装置１０１の構成図である。尚、通信装置１０２は、ＰＣＩｅの規格に準拠した通信装置であれば、必ずしも通信装置１０１と同じ構成である必要はない。
【００２０】
通信装置１０１は、アプリケーション部１０３及びＰＣＩｅ部１０４を有する。
【００２１】
アプリケーション部１０３は、ＰＣＩｅで定義されているソフトウェア層に相当し、例えば、ＢＩＯＳ（Basic Input/Output System）、ＯＳ（Operating System）、ファームウェア、ドライバ、アプリケーション等を含む。アプリケーション部１０３は、ＰＣＩｅ部１０４に対して、例えば、メモリリードやメモリライト等のコマンドとデータを送信することによって、通信先へのデータ送信等を要求する。また、通信先から送られてきたデータを、ＰＣＩｅ部１０４からコマンドやデータの形で受信する。
【００２２】
ＰＣＩｅ部１０４は、トランザクション層３０３、データリンク層３０２及び物理層３０１からなる３層のレイヤ構造を有している。
【００２３】
トランザクション層３０３は、パケット生成部３０４、送信バッファ３０５、受信バッファ部３１２、データ生成部３１３、及び仮想初期クレジット演算部３１４を有している。パケット生成部３０４は、アプリケーション部１０３からコマンドとデータを受信して、ヘッダとペイロードを有するトランザクション層パケットであるＴＬＰを生成する。送信バッファ３０５は、パケット生成部３０４で生成されたＴＬＰを一時的に記憶する。
【００２４】
受信バッファ部３１２は、データリンク層３０２から送られてきたＴＬＰを一時的に記憶する。データ生成部３１３は、受信バッファ部３１２からＴＬＰを読出し、コマンド、データに変換し、アプリケーション部１０３へ出力する。
【００２５】
仮想初期クレジット演算部３１４は、受信バッファ部３１２の記憶容量と、アプリケーション部１０３から通知された通信ケーブルで発生する遅延時間の大きさ又は通信ケーブルの長さ等に基づいて、仮想初期クレジットの値を算出する。尚、仮想初期クレジットについては後述する。
【００２６】
データリンク層３０２は、フロー制御部３０６、再送バッファ３０７、アービタ３０８、ルータ３１１を有する。
【００２７】
フロー制御部３０６は、フロー制御用のパケットであるＤＬＬＰ（Data Link Layer Packet）を使ってＰＣＩｅのフロー制御を行う。また、フロー制御部３０６は、送信バッファ３０５から取得したＴＬＰの先頭にシーケンス番号、末尾にＣＲＣ（Cyclic Redundancy Check）を付加して、ＬＬＴＰ（Link Layer Transaction Packet）を生成する。さらに、フロー制御部３０６は、通信先から受信したＬＬＴＰのシーケンス番号とＣＲＣのチェックを行い、正常に受信できたＴＬＰを受信バッファ部３１２に格納する。尚、フロー制御部３０６ついては、後でさらに詳しく説明する。
【００２８】
再送バッファ３０７は、通信先から、送信したＬＬＴＰの受信が正常に行われたことを示すＡｃｋ（Acknowledgement）ＤＬＬＰを受信するまで、送信したＬＬＴＰを一時的に記憶する。通信先から送信したＬＬＴＰの受信が正常に行われたことを示すＡｃｋ ＤＬＬＰを受信した場合には、受信したＡｃｋ ＤＬＬＰに対応するＬＬＴＰを破棄する。一方、通信先から送信したＬＬＴＰの受信が正常に行われなかったことを示すＮａｋ（Negative Acknowledgement）ＤＬＬＰを受信した場合には、一時的に記憶したＬＬＴＰを再送する。
【００２９】
アービタ３０８は、フロー制御部３０６から送られてくるＬＬＴＰとＤＬＬＰのパケットの優先度を調停し、物理層３０１に送信する。優先度の設定は、例えば、ＤＬＬＰ送信の優先度を高く設定しても良いし、所定の間隔でＤＬＬＰが送信されるような設定であっても良い。
【００３０】
ルータ３１１は、物理層３０１から受信したパケットの種別に応じて、フロー制御部３０６、再送バッファ３０７等に受信したパケットを転送する。
【００３１】
物理層３０１は、トランスミッタ３０９、レシーバ３１０を有する。トランスミッタ３０９は、データリンク層３０２から受け取ったパケットデータをシリアル化して、高速シリアルケーブル１０７等へアナログ信号を出力する。レシーバ３１０は、高速シリアルケーブル１０７等から受信したアナログ信号を、シリアルデータ化して、さらにパケットデータに復元して、ルータ３１１へ転送する。
【００３２】
続いて、フロー制御部３０６について、さらに詳しく説明する。図４は、フロー制御部３０６の機能構成を示す図である。フロー制御部３０６は、送信フロー制御部４０１、送信ＬＬＴＰ処理部４０２、受信フロー制御部４０３、受信ＬＬＴＰ処理部４０４を有する。
【００３３】
送信フロー制御部４０１は、受信フロー制御部４０３から送られてくる、通信先の初期クレジットの値及び更新クレジットの値に基づいて送信データのフロー制御を行う。
【００３４】
図５は、送信フロー制御部４０１の動作の一例を示す図である。ここでは、通信先の初期クレジットの値（初期値）を４とする。また、ＴＬＰを１パケット送信する毎に、クレジットの値を１ずつ減算し、クレジットの値が０よりも大きい場合に、次のパケットを送信できるものとする。さらに、通信先から、送信済みのパケットに対する応答であるＵｐｄａｔｅＦＣを受信するたびに、送信フロー制御部４０１は、クレジットの値を１ずつ加算するものとする。
【００３５】
図５の時刻Ｔ１において、送信フロー制御部４０１は、ＴＬＰ（１）を送信し、初期クレジットの値４から１を減算する。ここでは、クレジットの値が３なので、次のパケットを続けて送信可能である。同様にして、時刻Ｔ２にＴＬＰ（２）を、時刻Ｔ３にＴＬＰ（３）を、時刻Ｔ４にＴＬＰ（４）を連続して送信することができる。しかし、時刻Ｔ４において、クレジットの値が０になるので、送信フロー制御部４０１は、次のパケットであるＴＬＰ（５）を連続して送信することができない。
【００３６】
一方、時刻Ｔ５において、最初に送信したＴＬＰ（１）に対応する応答であるＵｐｄａｔｅＦＣ（１）を受信すると、クレジットの値が１となり、再びパケットの送信が可能となる。時刻Ｔ６において、送信フロー制御部４０１がＴＬＰ（５）を送信すると、再びクレジットの値が０となるが、時刻Ｔ７には、ＴＬＰ（２）に対応する応答であるＵｐｄａｔｅＦＣ（２）を受信するため、時刻Ｔ８において、ＴＬＰ（６）を送信可能である。このような制御により、送信フロー制御部４０１は、クレジットの値に基づいてＴＬＰの送信を行う。
【００３７】
尚、ここで、ＴＬＰ（１）を送信してから、ＵｐｄａｔｅＦＣ（１）を受信するまでの遅延時間は、主に、通信ケーブルによる遅延時間と、通信先がＴＬＰ（１）を受信してからＵｐｄａｔｅＦＣ（１）を送信するまでの処理時間であると考えられる。
【００３８】
ここで、図４に戻って、フロー制御部３０６の説明を続ける。送信ＬＬＴＰ処理部４０２は、送信フロー制御部４０１から入力されたＴＬＰの先頭にシーケンス番号、末尾にＣＲＣを付加して、ＬＬＴＰを生成する。シーケンス番号はＴＬＰの送信毎にインクリメントされ、送達確認及びリトライの制御に使用される。ＣＲＣは、誤り検出符号であり、通信先でＴＬＰが正しく受信できたか否かを確認するために使用される。また、生成されたＬＬＴＰは、アービタ３０８及び再送バッファ３０７に送られる。
【００３９】
受信ＬＬＴＰ処理部４０４は、ルータ３１１から受信したＬＬＴＰのシーケンス番号の確認と、ＣＲＣの検証を行う。受信ＬＬＴＰ処理部４０４は、例えば、受信データからＣＲＣを計算し、末尾に付加されたＣＲＣと一致した場合に、ＴＬＰを正常に受信したと判断する。ＣＲＣの検証結果がＯＫだった場合には、ＬＬＴＰからシーケンス番号とＣＲＣを削除したＴＬＰを受信フロー制御部４０３へ転送する。また、シーケンス番号及びＣＲＣの検証結果（ＯＫ／ＮＧ）を受信フロー制御部４０３へ通知する。
【００４０】
受信フロー制御部４０３は、フロー制御の初期化処理、受信フロー制御、及び通信先から送られてきたフロー制御用のＤＬＬＰに応じて通信先の初期クレジット及び更新クレジットを送信フロー制御部４０１へ通知する処理を行う。
【００４１】
尚、ＰＣＩｅでは、通信前にフロー制御の初期化を行う。この初期化処理の中で、初期クレジット値をＩｎｉｔＦＣ ＤＬＬＰを使って通信先に通知する。そして、この初期クレジット値と、ＵｐｄａｔｅＦＣ ＤＬＬＰによって通知された更新クレジット値に基づいて、フロー制御を行う。
【００４２】
図６は、本実施の形態に係るフロー制御の初期化処理のフローチャートである。仮想初期クレジット演算部３１４は、初期化時に受信バッファ部３１２からバッファの容量を取得する（ステップＳ６０１）。次に、アプリケーション部１０３から、通信ケーブルの遅延時間に関する情報を取得する（ステップＳ６０２）。遅延時間に関する情報は、通信ケーブルで発生する遅延時間そのものであっても良いし、通信ケーブルの長さであっても良い。
【００４３】
次に、仮想初期クレジット演算部３１４は、取得したバッファの容量と、通信ケーブルで発生する遅延時間の大きさ又は前記通信ケーブルの長さ等の遅延時間に関する情報とに基づいて、仮想初期クレジットの値を算出する（ステップＳ６０３）。算出された仮想初期クレジットの値は、受信フロー制御部４０３に通知され、受信フロー制御部４０３は、仮想初期クレジットの値をＩｎｉｔＦＣ ＤＬＬＰの初期クレジットとして、通信先に通知する（ステップＳ６０４）。
【００４４】
ここで、仮想初期クレジットについて説明する。仮想初期クレジット演算部３１４は、例えば、図７に示すグラフのような関係に基づいて、仮想初期クレジットの値を算出する。ここで、「仮想初期クレジットの値」＝「受信バッファサイズに応じたクレジットの値」＋「追加クレジットの値」である。追加クレジットの値は、パケットを転送するために要する時間と、ケーブルを伝播するために要する時間に基づいて、ケーブルの長さが長くなった場合のデータ転送効率の低下を防止するために適した値を計算する。計算例を以下に示す。
【００４５】
まず、条件として、パケット伝播には、通信ケーブル１ｍあたり５ｎｓを要するものとする。尚、この値は光や電子が媒体を１ｍ進むのに要する時間の概算値より示した値で、信号レート等に依らず一定となる。
【００４６】
また、１つのＴＬＰを伝送するために、１５２ｎｓ要するものとする。例えば、ＰＣＩｅ Ｇｅｎｅｒａｔｉｏｎ１の２．５Ｇｂｐｓのレーンを４本使ったｘ４リンクでは、１シンボル（＝１バイトに相当）を送るのに１ｎｓを要する。ここで、ＴＬＰが１２８バイトのペイロードを持つと想定すると、パケットサイズは１２８バイトのペイロードと２４バイトのヘッダ情報で、合せて１５２バイトとなる。このため、ＴＬＰ１個を伝送するために１５２ｎｓを要する。
【００４７】
ここで、通信ケーブルの長さが１００ｍとすると、ＴＬＰを送信してから、当該ＴＬＰに対応する更新クレジット値を通知するＵｐｄａｔｅＦＣが戻るまでの時間は、１００ｍ×５ｎｓ＋１００ｍ×５ｎｓ＝１０００ｎｓとなる。
【００４８】
１０００ｎｓ連続でＴＬＰを送るためには、１０００ｎｓ／１５２ｎｓ＝６．５７なので、７個以上の初期クレジットがあれば、ＵｐｄａｔｅＦＣ待ちが発生することなく、パケットを連続的に送信することができる。
【００４９】
また、１パケットの伝送に要する時間１５２ｎｓを、通信ケーブル１ｍ当たりの往復遅延時間５ｎｓ×２＝１０ｎｓで割ると、１５２ｎｓ／１０ｎｓ＝１５．２となり、通信ケーブル１５．２ｍ毎に、仮想初期クレジットの値が１必要であることが判る。従って、仮想初期クレジットの値は、通信ケーブルの長さに基づいて算出することもできる。例えば、通信ケーブルの長さが１００ｍの場合には、１００ｍ／１５．２ｍ＝６．５７となり、仮想初期クレジットの値を７とすれば良い。
【００５０】
尚、上記の計算例は、ＰＣＩｅ Ｇｅｎｅｒａｔｉｏｎ１（２．５Ｇｂｐｓ）の例であり、１パケットの伝送にかかる時間はシステムによって異なる。例えば、さらに高速なＰＣＩｅ Ｇｅｎｅｒａｔｉｏｎ３（８Ｇｂｐｓ）では、１パケットの伝送に要する時間が約１／８になるので、（１５２ｎｓ／８）／１０ｎｓ＝１．９となる。このため、通信ケーブルが１．９ｍ毎に、仮想初期クレジットが１必要となる。さらに、使用するレーンの数によっても、１パケットの伝送にかかる時間が変わってくる。
【００５１】
従って、より好適な例として、仮想初期クレジット演算部３１４は、通信ケーブルで発生する遅延時間の情報又は長さ等の情報に加えて、パケットの伝送速度の情報に応じて仮想初期クレジットの値を算出可能であると良い。
【００５２】
図８に、仮想初期クレジットによるフロー制御のタイミングチャートを示す。ここで、受信バッファのクレジットの値を４とし、通信先には、本実施の形態に係る仮想初期クレジット７を通知するものとする。通信先は、時刻Ｔ１にＴＬＰ（１）、時刻Ｔ２にＴＬＰ（２）、時刻Ｔ３にＴＬＰ（３）、時刻Ｔ４にＴＬＰ（４）と、ＴＬＰを連続送信することができる。時刻Ｔ４において、初期クレジットが４の場合には、クレジットが０となり、ＵｐｄａｔｅＦＣ(１)を受信する時刻Ｔ７までパケットを送信することができなくなる。しかし、本実施の形態では、通信先に仮想初期クレジット７を通知しているため、通信先は、時刻Ｔ５にＴＬＰ（５）、時刻Ｔ６にＴＬＰ（６）とパケットを連続して送信することができる。
【００５３】
尚、図８において、通信装置１０１は、時刻Ｔ１に受信したＴＬＰ（１）を、遅くとも時刻Ｔ４までに処理して受信バッファ部３１２の空きを確保する必要があるが、通信装置１０１の処理速度は、ＰＣＩｅの転送速度よりも速いので十分に処理が可能である。
【００５４】
以上、フロー制御の初期化時に、通信先に通知する初期クレジットとして、上記算出方法による仮想初期クレジットの値を使用することにより、ケーブルの長さが長くなった場合のデータ転送効率の低下を、バッファサイズにかかわりなく低減することができる。
【００５５】
尚、上記仮想初期クレジットの計算方法は一例であって、本発明の範囲を限定するためのものではない、例えば、仮想初期クレジット追加クレジットの値を、通信ケーブルで発生する遅延時間に基づいて計算するものとしたが、さらに、ＴＬＰを受信してから対応するＵｐｄａｔｅＦＣ ＤＬＬＰを送信するまでのパケットの処理時間等を加味して追加クレジットを算出しても良い。また、算出した仮想初期クレジットの値が、受信バッファのクレジットの値よりも小さい場合には、受信バッファのクレジット値を初期クレジットとして、通信先に通知しても良いことは言うまでもない。
【００５６】
次に、受信フロー制御部４０３のＴＬＰ受信に係る動作について説明する。図９は、本実施の形態に係るＴＬＰ受信処理のフローチャートである。ＬＬＴＰ（ＴＬＰ）を受信すると（ステップＳ８０１）、受信ＬＬＴＰ処理部４０４から、受信したＬＬＴＰ（ＴＬＰ）のシーケンス番号及びＣＲＣの検証結果が通知される。受信フロー制御部４０３は、ＣＲＣの検証結果を確認し（ステップＳ８０２）、検証結果がＯＫの場合には、受信バッファ部３１２に空きがあるかどうかを確認する（ステップＳ８０３）。受信バッファ部３１２に空きが有る場合には、ＴＬＰを受信バッファ部３１２に書込む（ステップＳ８０５）。その後、受信フロー制御部４０３は、ＴＬＰを正常に受信したことを示すＡｃｋ ＤＬＬＰを送信先へ送信する（ステップＳ８０７）。尚、Ａｃｋ ＤＬＬＰは、必ずしもＴＬＰを受信する度に送信する必要は無く、他のＡｃｋ ＤＬＬＰとまとめて送信しても良い。
【００５７】
一方、ステップＳ９０２において、ＣＲＣの検証結果がＯＫ以外の場合には、受信フロー制御部４０３は、Ｎａｋ ＤＬＬＰを送信して、通信先にＴＬＰの再送を要求する。また、ステップＳ９０３において、受信バッファの空きが無い場合には、受信フロー制御部４０３は、受信したＴＬＰを破棄し、Ｎａｋ ＤＬＬＰを送信する。
【００５８】
尚、上記説明では、受信フロー制御部４０３が、受信バッファ部３１２のバッファの空きの有無の確認と、バッファの空きが無い場合のＴＬＰの破棄を行うものとしたが、これらの処理は、例えば、受信バッファ部３１２が行っても良い。この場合、受信バッファ部３１２のオーバーフローが発生すると、受信バッファ部３１２は、受信フロー制御部４０３にオーバーフロー通知を使ってオーバーフローが発生したことを通知する。
【００５９】
上記、Ａｃｋ/Ｎａｃｋ ＤＬＬＰの制御により、例えば、アプリケーション部１０３の突発的な遅延により受信バッファ部３１２のオーバーフローが発生した場合でも、ＴＬＰの喪失を防ぐことができる。
【００６０】
続いて、受信フロー制御部４０３の、ＵｐｄａｔｅＦＣ ＤＬＬＰ送信処理に係る動作について説明する。データ生成部３１３が受信バッファ部３１２からデータを取得すると、受信バッファ部３１２に空き容量が生じる。受信バッファ部３１２は、データ生成部３１３によって読み出されたデータ出力量と、データリンク層３０２から書き込まれたデータ入力量を受信フロー制御部４０３に通知する。受信フロー制御部４０３は、受信バッファ部３１２から通知された、データ入力量とデータ出力量の差分から、受信バッファ部３１２に新たな空き容量が発生したことを検出できる。受信フロー制御部４０３は、受信バッファ部３１２に新たな空き容量が発生した場合には、新たな空き容量をＵｐｄａｔｅＦＣ ＤＬＬＰで通信先に通知する。
【００６１】
以上、上記、本実施の形態によれば、通信装置１０１は、フロー制御の初期化時に通信先に送信可能なデータ容量として通知される初期クレジットの値であり、受信データを格納する受信バッファ容量よりも大きな値である仮想初期クレジットの値を通知する。これにより、ケーブル長が長くなった場合のデータ転送効率の低下を、バッファサイズにかかわりなく低減することができる。
【００６２】
また、通信先との通信に使用する通信ケーブルで発生する遅延時間又は通信ケーブルの長さに基づいて、上記仮想初期クレジットの値を算出する仮想初期クレジット演算部３１４を有する。これにより、仮想初期クレジットの値をより適した値に設定することができる。
【００６３】
また、本実施の形態に係る通信装置１０１では、実装する受信バッファのサイズを小さくしても、データ転送効率の低下が発生し難いので、通信デバイスの回路実装規模やコストを低減することもできる。
［第２の実施の形態］
第１の実施の形態では、ＰＣＩｅ部１０４が仮想初期クレジット演算部３１４を有していた。一方、本実施の形態に係るＰＣＩｅ部１０４は、仮想初期クレジットの値および受信バッファ部３１２の容量に応じたクレジットの値の差分である追加クレジットの値を所定の値に設定可能に構成されている。
【００６４】
図１０は、本実施の形態に係る通信装置１０１の構成図である。基本的な構成は、第１の実施の形態と同じなので、ここでは、差分を中心に説明を行う。
【００６５】
本実施の形態に係るＰＣＩｅ部１０４は、例えば、追加クレジットの値を記憶する設定レジスタ１００１を有する。設定レジスタ１００１は、例えば、アプリケーション部１０３から値を設定することができる。ＰＣＩｅ部１０４は、通信先に通知する初期クレジットとして、受信バッファ部３１２の容量に応じたクレジットの値に、設定レジスタ１００１に設定された追加クレジットの値を加えた仮想初期クレジットの値を通知する。
【００６６】
また、アプリケーション部１０３は、データ入力手段１００２、追加クレジット設定手段１００３を有する。データ入力手段１００２は、例えば、ユーザ等から、通信ケーブルで発生する遅延時間の情報、通信ケーブルの長さの情報、又は追加クレジット値等を取得する手段である。また、追加クレジット設定手段１００３は、データ入力手段１００２が取得した情報に基づいて、設定レジスタ１００１に追加クレジットの値を設定する手段である。
【００６７】
追加クレジット設定手段１００３は、例えば、仮想初期クレジット演算部３１４のように、受信バッファ部３１２から取得したバッファ容量と、通信ケーブルの遅延時間又は長さの情報に基づいて、追加クレジットの値を算出するものであっても良い。また、追加クレジット設定手段１００３は、データ入力手段１００２が取得した追加クレジットの値を設定レジスタ１００１に設定するものであっても良い。また、予め定められた値を設定レジスタ１００１に設定するものであっても良い。
【００６８】
上記構成により、ＰＣＩｅ部１０４は、設定レジスタ１００１に適切な値を設定することにより、第１の実施の形態と同様の効果を得ることができる。
【００６９】
尚、上記構成は一例であって、本発明の範囲を限定するものではない。例えば、追加クレジットの設定を記憶する設定レジスタ１００１は、フロー制御部３０６が参照できれば良く、フロー制御部３０６以外の場所に設けられていても良い。また、設定レジスタ１００１は、初期値として適当な値を有していているものであっても良い。例えば、図７の例において、受信バッファの容量に応じたクレジットの量が４であり、通信装置１０１で利用できる通信ケーブルの最大長が１００ｍで有る場合には、設定レジスタ１００１の初期値を３に設定しておけば、設定を省略することができる。
【符号の説明】
【００７０】
１００    通信システム
１０１    通信装置
１０３    アプリケーション部
１０４    ＰＣＩｅ部（通信デバイス）
３１２    受信バッファ部
３１４    仮想初期クレジット演算部
３０６    フロー制御部
【先行技術文献】
【特許文献】
【００７１】
【特許文献１】特開２０１２−６４０９０号公報
【図１】
2014230072.tif 000003
【図２】
2014230072.tif 000004
【図３】
2014230072.tif 000005
【図４】
2014230072.tif 000006
【図５】
2014230072.tif 000007
【図６】
2014230072.tif 000008
【図７】
2014230072.tif 000009
【図８】
2014230072.tif 000010
【図９】
2014230072.tif 000011
【図１０】
2014230072.tif 000012