(57)【要約】【課題】ネットワークハードウェア内のメモリの使用量を抑制しつつ、通信の高速化を図ることを課題とする。【解決手段】通信システム１のホストコンピュータ１０は、ＮＩＣ２０上に仮想的な通信経路（以下、コネクションという）の確立時において、コネクションごとに、通信先端末４０との間の応答時間であるＲＴＴを測定する。その結果、ホストコンピュータ１０は、ＲＴＴが所定の閾値より大きいと判定された場合には、ホストコンピュータ内のＯＳ再送バッファ１３ｄへ送信データの格納を開始し、ＮＩＣ２０に送信データの転送を開始する。また、ＲＴＴが所定の閾値より小さいと判定された場合には、ＮＩＣ２０へ送信データの転送を開始し、その転送された送信データをＮＩＣ２０内のＮＩＣ再送バッファ２４ａに格納させることを開始する。【選択図】        図１
2008005315.tif 000002
【特許請求の範囲】
【請求項１】
送信データを格納する再送バッファを備えたホストメモリから同じく送信データを格納する再送バッファを備えたネットワークハードウェアに前記送信データを転送し、送受信ホスト間もしくは当該ネットワークハードウェア上に確立された仮想的な通信経路であるコネクションを通して前記送信データを通信先端末に送信するデータ通信方法をコンピュータに実行させるデータ通信プログラムであって、
前記コネクションごとに、前記通信先端末との間の応答時間を測定する測定手順と、
前記測定手順によって測定された前記応答時間が所定の遅延閾値より大きいかを判定する判定手順と、
前記判定手順によって前記応答時間が前記所定の遅延閾値より大きいと判定された場合には、送信データをホストメモリ内の再送バッファに格納し、前記応答時間が前記所定の遅延閾値より小さいと判定された場合には、前記送信データを前記ネットワークハードウェア内の再送バッファに格納する格納手順と、
をコンピュータに実行させることを特徴とするデータ通信プログラム。
【請求項２】
前記測定手順は、前記コネクションごとに、前記送信データによって使用される再送バッファの使用量をさらに測定し、
前記判定手順は、前記応答時間が前記所定の遅延閾値より大きいと判定したコネクションについて、前記測定手順によって測定された前記再送バッファの使用量が所定の使用量閾値より小さいかをさらに判定し、
前記格納手順は、前記応答時間が前記所定の遅延閾値より大きいが、前記判定手順によって前記再送バッファの使用量が前記所定の使用量閾値より小さいと判定された場合にも、前記コネクションの送信データを前記ネットワークハードウェア内の再送バッファに格納することを特徴とする請求項１に記載のデータ通信プログラム。
【請求項３】
前記測定手順は、前記通信先端末からの確認応答のデータに付与されたシーケンス番号から現に送信しようとしているデータのシーケンス番号を引いた値に応じて、前記再送バッファの使用量を測定することを特徴とする請求項２に記載のデータ通信プログラム。
【請求項４】
前記測定手順は、前記送信データの転送および格納を開始した後においても、前記応答時間を測定し、
前記判定手順は、前記送信データの転送および格納を開始した後においても、前記測定手順によって測定された前記応答時間が所定の遅延閾値より大きいかを判定し、
前記ホストメモリの再送バッファに格納が開始されているコネクションについて、転送および格納を開始した後における前記応答時間が所定の遅延閾値より小さいと判定された場合には、当該コネクションにおける送信データの格納先を前記ネットワークハードウェア内の再送バッファに切り替え、前記ネットワークハードウェアの再送バッファに格納が開始されているコネクションについて、転送および格納を開始した後における前記応答時間が所定の遅延閾値より大きいと判定された場合には、当該コネクションにおける送信データの格納先を前記ホストメモリ内の再送バッファに切り替える切替手順をさらに備えることを特徴とする請求項１〜３のいずれか一つに記載のデータ通信プログラム。
【請求項５】
前記測定手順は、前記送信データの転送および格納を開始した後においても、前記再送バッファの使用量をさらに測定し、
前記判定手順は、前記送信データの転送および格納を開始した後においても、前記応答時間が前記所定の遅延閾値より大きいと判定したコネクションについて、前記測定手順によって測定された前記再送バッファの使用量が所定の使用量閾値より小さいかをさらに判定し、
前記ホストメモリの再送バッファに格納が開始されているコネクションについて、前記応答時間が前記所定の遅延閾値より大きいが、転送および格納を開始した後における前記再送バッファの使用量が前記所定の使用量閾値より小さいと判定されたコネクションについても、当該コネクションにおける送信データの格納先を前記ネットワークハードウェア内の再送バッファに切り替える切替手順をさらに備えることを特徴とする請求項１〜３のいずれか一つに記載のデータ通信プログラム。
【請求項６】
前記切替手順は、前記送信データを前記ネットワークハードウェア内の再送バッファに格納されているコネクションと、前記送信データを前記ネットワークハードウェア内の再送バッファに格納されているコネクションとで、前記送信データの格納先を切り替える条件である切替条件が異なるようにして前記送信データの格納先を切り替えることを特徴とする請求項４または５に記載のデータ通信プログラム。
【請求項７】
前記切替手順は、前記送信データを前記ネットワークハードウェア内の再送バッファに格納することを中止されて前記ホストメモリ内の再送バッファに格納されたコネクションを除いて、前記格納先を切り替えることを特徴とする請求項４または５に記載のデータ通信プログラム。
【請求項８】
前記測定手順は、前記コネクションの確立時において、前記応答時間を測定することを特徴とする請求項１〜３のいずれか一つに記載のデータ通信プログラム。
【請求項９】
前記測定手順は、前記コネクションの確立後において、前記応答時間を測定することを特徴とする請求項１〜３のいずれか一つに記載のデータ通信プログラム。
【請求項１０】
前記ネットワークハードウェア内の再送バッファによって格納可能なデータ容量を示す再送バッファ上限値を設定する上限値設定手順をさらに備え、
前記格納手順は、前記上限値設定手順によって設定された前記再送バッファ上限値から現在使用されている前記ネットワークハードウェア内の再送バッファの容量を引いた値である再送バッファの空き容量が残存している場合にのみ、前記送信データを前記ネットワークハードウェア内の再送バッファに格納することを特徴とする請求項１〜３のいずれか一つに記載のデータ通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、送信データを格納する再送バッファを備えたホストメモリから同じく送信データを格納する再送バッファを備えたネットワークハードウェアに送信データ転送し、送受信ホスト間もしくはネットワークハードウェア上に確立された仮想的な通信経路であるコネクションを通して送信データを通信先端末に送信するデータ通信プログラムに関する。
【背景技術】
【０００２】
従来より、コンピュータ間の通信において信頼性を確保した通信を行う方法において、通信がエラーしたとき、もしくはエラーしたと考えられるときに、既に送ったデータを再転送する方法がある。この方法では、送信側に送信されたデータを再転送用に格納するための再送バッファが必要になる。
【０００３】
このようなコンピュータ間通信で広く使われているＳｏｃｋｅｔ−ＡＰＩ（Application Program Interface）とＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）による通信システムでは、この再送バッファをホストコンピュータのＯＳ（Operating System）内部に設けることが一般的である。例えば、ＯＳ内の再転送バッファに再転送用のデータをプロセッサでコピーしておき、通信先端末からの通信確認がとれず再転送が必要となった場合には、ＯＳ内部の再転送用データを再転送する。
【０００４】
また、ＣＯＥ(Copy Offload Engine)方式では、このコピー動作を削減するＺｅｒｏ−Ｃｏｐｙ通信を行う。このＺｅｒｏ−Ｃｏｐｙ通信では、再転送バッファをＮＩＣ（Network Interface Card）内のメモリに置き、アプリケーションから送信する際にＯＳ内メモリにコピーせず、ＮＩＣメモリに直接データを転送して格納し、再転送が必要となった場合には、ＮＩＣメモリ内部の再転送用データを再転送する。なお、ＮＩＣ内メモリを再送バッファとして使うことは、ＮＩＣ上でＴＣＰ／ＩＰ処理の一部またはすべてを行うＴＯＥ(TCP/IP Offload Engine)と呼ばれる方式でも使用可能な方法である。
【０００５】
【特許文献１】特開２００４−２７４３７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、上記した再送バッファをホストコンピュータのＯＳ（Operating System）内部に設ける通信方法では、ＯＳ内の再転送バッファにデータをプロセッサでコピーしてからネットワークカードにデータを転送するので、再転送バッファへのプロセッサのデータコピーの負荷が問題となって高速通信が実現しにくいという課題がある。
【０００７】
また、上記した再転送バッファをＮＩＣ（Network Interface Card）内のメモリに通信方法では、通信先端末によってはＮＩＣに大容量のメモリが必要になり、ＮＩＣのコストダウンにとって大きな障壁になるという課題がある。
【０００８】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、ネットワークハードウェア内のメモリの使用量を抑制しつつ、通信の高速化を図ることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、請求項１に係る発明は、送信データを格納する再送バッファを備えたホストメモリから同じく送信データを格納する再送バッファを備えたネットワークハードウェアに前記送信データを転送し、送受信ホスト間もしくは当該ネットワークハードウェア上に確立された仮想的な通信経路であるコネクションを通して前記送信データを通信先端末に送信するデータ通信方法をコンピュータに実行させるデータ通信プログラムであって、前記コネクションごとに、前記通信先端末との間の応答時間を測定する測定手順と、前記測定手順によって測定された前記応答時間が所定の遅延閾値より大きいかを判定する判定手順と、前記判定手順によって前記応答時間が前記所定の遅延閾値より大きいと判定された場合には、送信データをホストメモリ内の再送バッファに格納し、前記応答時間が前記所定の遅延閾値より小さいと判定された場合には、前記送信データを前記ネットワークハードウェア内の再送バッファに格納する格納手順と、をコンピュータに実行させることを特徴とする。
【００１０】
また、請求項２に係る発明は、上記の発明において、前記測定手順は、前記コネクションごとに、前記送信データによって使用される再送バッファの使用量をさらに測定し、前記判定手順は、前記応答時間が前記所定の遅延閾値より大きいと判定したコネクションについて、前記測定手順によって測定された前記再送バッファの使用量が所定の使用量閾値より小さいかをさらに判定し、前記格納手順は、前記応答時間が前記所定の遅延閾値より大きいが、前記判定手順によって前記再送バッファの使用量が前記所定の使用量閾値より小さいと判定された場合にも、前記コネクションの送信データを前記ネットワークハードウェア内の再送バッファに格納することを特徴とする。
【００１１】
また、請求項３に係る発明は、上記の発明において、前記測定手順は、前記通信先端末からの確認応答のデータに付与されたシーケンス番号から現に送信しようとしているデータのシーケンス番号を引いた値に応じて、前記再送バッファの使用量を測定することを特徴とする。
【００１２】
また、請求項４に係る発明は、上記の発明において、前記測定手順は、前記送信データの転送および格納を開始した後においても、前記応答時間を測定し、前記判定手順は、前記送信データの転送および格納を開始した後においても、前記測定手順によって測定された前記応答時間が所定の遅延閾値より大きいかを判定し、前記ホストメモリの再送バッファに格納が開始されているコネクションについて、転送および格納を開始した後における前記応答時間が所定の遅延閾値より小さいと判定された場合には、当該コネクションにおける送信データの格納先を前記ネットワークハードウェア内の再送バッファに切り替え、前記ネットワークハードウェアの再送バッファに格納が開始されているコネクションについて、転送および格納を開始した後における前記応答時間が所定の遅延閾値より大きいと判定された場合には、当該コネクションにおける送信データの格納先を前記ホストメモリ内の再送バッファに切り替える切替手順をさらに備えることを特徴とする。
【００１３】
また、請求項５に係る発明は、上記の発明において、前記測定手順は、前記送信データの転送および格納を開始した後においても、前記再送バッファの使用量をさらに測定し、前記判定手順は、前記送信データの転送および格納を開始した後においても、前記応答時間が前記所定の遅延閾値より大きいと判定したコネクションについて、前記測定手順によって測定された前記再送バッファの使用量が所定の使用量閾値より小さいかをさらに判定し、前記ホストメモリの再送バッファに格納が開始されているコネクションについて、前記応答時間が前記所定の遅延閾値より大きいが、転送および格納を開始した後における前記再送バッファの使用量が前記所定の使用量閾値より小さいと判定されたコネクションについても、当該コネクションにおける送信データの格納先を前記ネットワークハードウェア内の再送バッファに切り替える切替手順をさらに備えることを特徴とする。
【００１４】
また、請求項６に係る発明は、上記の発明において、前記切替手順は、前記送信データを前記ネットワークハードウェア内の再送バッファに格納されているコネクションと、前記送信データを前記ネットワークハードウェア内の再送バッファに格納されているコネクションとで、前記送信データの格納先を切り替える条件である切替条件が異なるようにして前記送信データの格納先を切り替えることを特徴とする。
【００１５】
また、請求項７に係る発明は、上記の発明において、前記切替手順は、前記送信データを前記ネットワークハードウェア内の再送バッファに格納することを中止されて前記ホストメモリ内の再送バッファに格納されたコネクションを除いて、前記格納先を切り替えることを特徴とする。
【００１６】
また、請求項８に係る発明は、上記の発明において、前記測定手順は、前記コネクションの確立時において、前記応答時間を測定することを特徴とする。
【００１７】
また、請求項９に係る発明は、上記の発明において、前記測定手順は、前記コネクションの確立後において、前記応答時間を測定することを特徴とする。
【００１８】
また、請求項１０に係る発明は、上記の発明において、前記ネットワークハードウェア内の再送バッファによって格納可能なデータ容量を示す再送バッファ上限値を設定する上限値設定手順をさらに備え、前記格納手順は、前記上限値設定手順によって設定された前記再送バッファ上限値から現在使用されている前記ネットワークハードウェア内の再送バッファの容量を引いた値である再送バッファの空き容量が残存している場合にのみ、前記送信データを前記ネットワークハードウェア内の再送バッファに格納することを特徴とする。
【発明の効果】
【００１９】
請求項１の発明によれば、コネクションごとに、通信先端末との間の応答時間を測定し、測定された応答時間が所定の遅延閾値より大きいかを判定し、応答時間が所定の遅延閾値より大きいと判定された場合には、送信データをホストメモリ内の再送バッファに格納し、応答時間が所定の遅延閾値より小さいと判定された場合には、送信データをネットワークハードウェア内の再送バッファに格納するので、応答時間が大きい（送信データをネットワークハードウェア内の再送バッファに格納することによる通信高速化の効果が薄い）コネクションについては、送信データをホストメモリ内の再送バッファに格納してネットワークハードウェア内のメモリの使用量を抑制し、一方、応答時間が小さい（送信データをネットワークハードウェア内の再送バッファに格納することによる通信高速化の効果が高い）コネクションについては、送信データをネットワークハードウェア内の再送バッファに格納して、通信の高速化を図る結果、ネットワークハードウェア内のメモリの使用量を抑制しつつ、通信の高速化を図ることが可能である。
【００２０】
また、請求項２の発明によれば、コネクションごとに、送信データによって使用される再送バッファの使用量をさらに測定し、応答時間が所定の遅延閾値より大きいと判定したコネクションについて、測定された再送バッファの使用量が所定の使用量閾値より小さいかをさらに判定し、応答時間が所定の遅延閾値より大きいが、再送バッファの使用量が所定の使用量閾値より小さいと判定された場合にも、コネクションの送信データをネットワークハードウェア内の再送バッファに格納するので、応答時間は長いが再送バッファの使用量は小さい（送信データをネットワークハードウェア内の再送バッファに格納することによる通信高速化の効果が高い）コネクションについては、送信データをネットワークハードウェア内の再送バッファに格納して、通信の高速化を図ることが可能である。
【００２１】
また、請求項３の発明によれば、通信先端末からの確認応答のデータに付与されたシーケンス番号から現に送信しようとしているデータのシーケンス番号を引いた値に応じて、再送バッファの使用量を測定するので、シーケンス番号を用いて、精度良く再送バッファの使用量を測定することが可能である。
【００２２】
また、請求項４の発明によれば、送信データの転送および格納を開始した後においても、応答時間を測定し、送信データの転送および格納を開始した後においても、測定された応答時間が所定の遅延閾値より大きいかを判定し、ホストメモリの再送バッファに格納が開始されているコネクションについて、転送および格納を開始した後における応答時間が所定の遅延閾値より小さいと判定された場合には、そのコネクションにおける送信データの格納先を前記ネットワークハードウェア内の再送バッファに切り替え、ネットワークハードウェアの再送バッファに格納が開始されているコネクションについて、転送および格納を開始した後における応答時間が所定の遅延閾値より大きいと判定された場合には、そのコネクションにおける送信データの格納先を前記ホストメモリ内の再送バッファに切り替えるので、送信データをネットワークハードウェア内の再送バッファに格納しているコネクションにおける応答時間が大きくなった場合には、送信データの格納先を切り替えて、ホストメモリ内の再送バッファに格納する結果、ネットワークハードウェア内のメモリの使用量を抑制することが可能である。
【００２３】
また、請求項５の発明によれば、送信データの転送および格納を開始した後においても、再送バッファの使用量をさらに測定し、送信データの転送および格納を開始した後においても、応答時間が所定の遅延閾値より大きいと判定したコネクションについて、測定された再送バッファの使用量が所定の使用量閾値より小さいかをさらに判定し、ホストメモリの再送バッファに格納が開始されているコネクションについて、応答時間が所定の遅延閾値より大きいが、転送および格納を開始した後における再送バッファの使用量が前記所定の使用量閾値より小さいと判定されたコネクションについても、そのコネクションにおける送信データの格納先をネットワークハードウェア内の再送バッファに切り替えるので、送信データをネットワークハードウェア内の再送バッファに格納しているコネクションにおける再送バッファの使用量が大きくなった場合には、送信データの格納先を切り替えて、ホストメモリ内の再送バッファに格納する結果、ネットワークハードウェア内のメモリの使用量を抑制することが可能である。
【００２４】
また、請求項６の発明によれば、送信データをネットワークハードウェア内の再送バッファに格納されているコネクションと、送信データをネットワークハードウェア内の再送バッファに格納されているコネクションとで、送信データの格納先を切り替える条件である切替条件が異なるようにして送信データの格納先を切り替えるので、送信データをホストメモリ内の再送バッファに格納するように切り替える閾値と、送信データをネットワークハードウェア内の再送バッファに格納するように切り替える閾値が異なる結果、例えば、送信データをネットワークハードウェア内の再送バッファに格納する場合に通信速度が上がって再送バッファ量が増えることがあり、送信データを格納する再送バッファを切り替える条件が頻繁に起きるような場合でも、切り替えの頻度を適切に抑制しシステムの挙動を安定化させることが可能である。
【００２５】
また、請求項７の発明によれば、送信データをホストメモリ内の再送バッファに格納することを中止されてネットワークハードウェア内の再送バッファに格納されたコネクションを除いて、格納先を切り替えるので、送信データを格納する再送バッファを切り替える条件が頻繁に起きるような場合でも、切り替えの頻度を適切に抑制しシステムの挙動を安定化させることが可能である。
【００２６】
また、請求項８の発明によれば、コネクションの確立時において、応答時間を測定するので、例えば、ハンドシェイク時における通信先端末とのデータの送受信に応じて、簡略かつ精度良く応答時間を測定することが可能である。
【００２７】
また、請求項９の発明によれば、コネクション確立後において、応答時間を測定するので、リアルタイムに精度良く応答時間を測定することが可能である。
【００２８】
また、請求項１０の発明によれば、ネットワークハードウェア内の再送バッファによって格納可能なデータ容量を示す再送バッファ上限値を設定し、設定された再送バッファ上限値から現在使用されているネットワークハードウェア内の再送バッファの容量を引いた値である再送バッファの空き容量が残存している場合にのみ、送信データをネットワークハードウェア内の再送バッファに格納するので、ネットワークハードウェア内のメモリの使用量を任意に設定することが可能である。
【発明を実施するための最良の形態】
【００２９】
以下に添付図面を参照して、この発明に係るデータ通信プログラムの実施例を詳細に説明する。
【実施例１】
【００３０】
以下の実施例では、実施例１に係る通信システムの概要および特徴、通信システムの構成および処理の流れを順に説明し、最後に実施例１による効果を説明する。
【００３１】
［実施例１に係る通信システムの概要および特徴］
まず最初に、図１を用いて、実施例１に係る通信システムの概要および特徴を説明する。図１は、実施例１に係る通信システムの概要および特徴を説明するための図である。なお、以下の実施例１では、ＴＣＰ／ＩＰ通信を適用した場合を説明し、受信側はパケットを受信すると受信確認応答を送信側に返し、送信側が受信確認応答を受け取ると、再送バッファ領域のうち確認応答がされたデータ領域部分を解放する。
【００３２】
実施例１の通信システム１では、送信データを格納するＯＳ再送バッファ１３ｄを備えたホストコンピュータ１０から同じく送信データを格納するＮＩＣ再送バッファ２４ａを備えたＮＩＣ２０に送信データを転送し、そのホストコンピュータ１０上もしくはＮＩＣ２０上に確立された仮想的な通信経路であるコネクションを通して送信データを通信先端末４０に送信することを概要とする。そして、この通信システム１では、ＮＩＣ２０内のメモリの使用量を抑制しつつ、通信の高速化を図る点に主たる特徴がある。
【００３３】
この主たる特徴について説明すると、通信システム１は、図１に示すように、ホストコンピュータ１０およびＮＩＣ（Network Interface Card）２０から成っている。かかるホストコンピュータ１０は、ホストメモリ１０ａに記憶されるアプリケーション（図１では、「アプリ」と記載）１０ｂおよびＯＳ（Operating System）１０ｃで構成され、ＯＳ１０ｃ内部に再送用の送信データを格納するＯＳ再送バッファ１３ｄを備える。また、ＮＩＣ２０は、ＮＩＣメモリ２０ａを備え、そのＮＩＣメモリ２０ａ内に再送用の送信データを格納するＮＩＣ再送バッファ２４ａを備える。
【００３４】
そして、通信システム１のホストコンピュータ１０は、ホストコンピュータ１０上もしくはＮＩＣ２０上に仮想的な通信経路（以下、コネクションという）の確立時において、コネクションごとに、通信端末４０との間の応答時間であるＲＴＴ（Round Trip Time）を測定する。具体的には、ホストコンピュータ１０は、アプリケーション１０ｂのＡＰＩ（Application Program Interface）が通信に先立ってコネクションの確立をＯＳ１０ｃに指示すると、各コネクションが確立する時のＲＴＴを測定する。
【００３５】
続いて、ホストコンピュータ１０は、測定されたＲＴＴが所定の閾値より大きいかを判定する。その結果、ホストコンピュータ１０は、ＲＴＴが所定の閾値より大きいと判定された場合には、ホストコンピュータ内のＯＳ再送バッファ１３ｄへ送信データの格納を開始し、ＮＩＣ２０に送信データの転送を開始する（図１の（ａ）参照）。具体的には、ホストコンピュータ１０は、ＲＴＴが所定の閾値より大きいと判定された場合には、アプリケーション１０ｂのメモリ空間からＯＳ再送バッファ１３ｄに再転送用のデータをプロセッサでコピーし、ＯＳ１０ｃ内部のＴＣＰ／ＩＰプロトコルスタックによってデータをパケット化し、そのパケット化されたデータをＮＩＣ２０に転送することを開始する。その後、ＮＩＣ２０は、このパケット化されたデータをネットワーク３０を介して通信先端末４０に送信することを開始する（以上のように、ＯＳ再送バッファ１３ｄへ送信データを格納しつつ、ＮＩＣ２０に送信データを転送することを「通常通信」という）。
【００３６】
一方、ホストコンピュータ１０は、ＲＴＴが所定の閾値より小さいと判定された場合には、ＮＩＣ２０へ送信データの転送を開始し、その転送された送信データをＮＩＣ２０内のＮＩＣ再送バッファ２４ａに格納させることを開始する（図１の（ｂ）参照）。具体的には、ホストコンピュータ１０は、ＲＴＴが所定の閾値より小さいと判定された場合には、送信データをＯＳ１０ｃによってアプリケーション１０ｂのメモリ領域からＮＩＣ２０内部のＮＩＣ再送バッファ２４ａに直接ＤＭＡ（Direct Memory Access）転送し、また、ＯＳ１０ｃがＤＭＡ転送データに対応するパケットヘッダを作成し、ＮＩＣ２０に転送することを開始する。その後、ＮＩＣ２０は、ＤＭＡ転送されたデータとパケットヘッダを組み合わせてパケットを作成し、この作成されたパケットをネットワーク３０を介して通信先端末４０に送信することを開始する（以上のように、ＮＩＣ２０へ送信データを転送しつつ、送信データをＮＩＣ再送バッファ２４ａに格納することを「ゼロコピー通信」という）。
【００３７】
このように、通信システム１は、ＲＴＴが小さい送信データについては、ＮＩＣ再送バッファ２４ａに格納してＯＳによるデータコピーを省略する結果、また再送バッファの使用量が大きい送信データについては、ホストメモリに格納してメモリの使用量を抑制する結果、上記した主たる特徴のごとく、ネットワークハードウェア内のメモリの使用量を抑制しつつ、通信の高速化を図ることが可能である。
【００３８】
［ホストコンピュータの構成］
次に、図２を用いて、図１に示したホストコンピュータ１０の構成を説明する。図２は、実施例１に係るホストコンピュータ１０の構成を示すブロック図である。同図に示すように、このホストコンピュータ１０は、ＮＩＣ制御ＩＦ１１、制御部１２、記憶部１３を備え、ＮＩＣ２０と接続される。以下にこれらの各部の処理を説明する。
【００３９】
このうち、ＮＩＣ制御ＩＦ１１は、接続されるＮＩＣ２０との間でやり取りする各種情報に関する通信を制御する手段である。具体的には、ＮＩＣ制御ＩＦ１１は、ＮＩＣ２０へ送信データを転送し、またＮＩＣ２０から応答確認を受信する。
【００４０】
記憶部１３は、制御部１２による各種処理に必要なデータおよびプログラムを格納する格納手段であり、特に本発明に密接に関連するものとしては、ＲＴＴ記憶部１３ａ、コネクション記憶部１３ｂ、上限値記憶部１３ｃ、ＯＳ再送バッファ１３ｄを備える。
【００４１】
このうち、ＲＴＴ記憶部１３ａは、コネクションごとのＲＴＴを記憶する手段である。具体的には、ＲＴＴ記憶部１３ａは、図３に例示するように、後述するＲＴＴ測定部１２ｂによって測定されるコネクション確立時における各コネクションのＲＴＴを記憶する。
【００４２】
コネクション記憶部１３ｂは、コネクションごとのＲＴＴが閾値より大きいか小さいかの判定結果を記憶する手段である。具体的には、コネクション記憶部１３ｂは、図４に例示するように、各コネクションのＲＴＴが閾値よりも大きかったのか、小さかったのかを記憶する。なお、ＲＴＴが閾値よりも「大」の場合は、通常通信を行い、ＲＴＴが閾値よりも「小」の場合は、ゼロコピー通信を行う。
【００４３】
上限値記憶部１３ｃは、ＮＩＣ再送バッファ２４ａによって格納可能なデータ容量の上限値を記憶する手段である。具体的には、図示しない上限値設定部によって、ＮＩＣ２０の通信速度と、後述するコネクション判定部１２ｃによって用いられるＲＴＴの閾値との積の値以上が設定され、再送バッファの上限値として記憶する。
【００４４】
ＯＳ再送バッファ１３ｄは、送信データを記憶する手段であり、具体的には、「通常通信」の場合には、後述する再送バッファ格納部１２ｄによって送信データを格納される。
【００４５】
制御部１２は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する処理部であり、特に本発明に密接に関連するものとしては、ＡＰＩ呼び出し部１２ａ、ＲＴＴ測定部１２ｂ、コネクション判定部１２ｃ、再送バッファ格納部１２ｄ、データ転送部１２ｅを備える。なお、ＲＴＴ測定部１２ｂは、特許請求の範囲に記載の「測定手段」に対応し、コネクション判定部１２ｃは、特許請求の範囲に記載の「判定手段」に対応し、再送バッファ格納部１２ｄは、特許請求の範囲に記載の「格納手段」に対応する。
【００４６】
このうち、ＡＰＩ呼び出し部１２ａは、送信ＡＰＩを呼び出し、データの送信をＯＳ１０ｃに指示する処理部であり、具体的には、アプリケーション１０ｂのＡＰＩによってデータの送信をＯＳ１０ｃに指示する。
【００４７】
ＲＴＴ測定部１２ｂは、コネクションごとに、通信端末４０との間の応答時間であるＲＴＴ（Round Trip Time）を測定する処理部であり、具体的には、ホストコンピュータ１０のアプリケーション１０ｂが通信に先立ってコネクションの確立をＯＳ１０ｃに指示すると、各コネクションが確立する時のＲＴＴを測定し、測定結果をＲＴＴ記憶部１３ａに記憶させる。
【００４８】
コネクション判定部１２ｃは、コネクションごとに、ＲＴＴが所定の閾値より大きいかを判定する処理部である。具体的には、コネクション判定部１２ｃは、ＲＴＴ記憶部１３ａからコネクションごとのＲＴＴを読み出し、その読み出されたコネクションごとのＲＴＴが所定の閾値より大きいかを判定する。その結果、コネクション判定部１２ｃは、ＲＴＴが所定の閾値より大きい場合には、その判定結果をコネクション記憶部１３ｂに記憶し、そのコネクションについて、「通常通信動作」に設定する。一方、コネクション判定部１２ｃは、ＲＴＴが所定の閾値より小さい場合には、その判定結果をコネクション記憶部１３ｂに記憶し、そのコネクションについて、「ゼロコピー通信動作」に設定する。
【００４９】
再送バッファ格納部１２ｄは、送信データを再送バッファに格納する処理部である。具体的には、再送バッファ格納部１２ｄは、ＡＰＩ呼び出し部１２ａによって送信ＡＰＩが呼び出されると、コネクション記憶部１３ｂからコネクションごとの判定結果を読み出し、ＲＴＴが所定の閾値より大きいコネクション（ゼロコピー不可のコネクション）である場合には、ホストコンピュータ１０内のＯＳ再送バッファ１３ｄへ送信データの格納を開始し、格納された送信データをＮＩＣ２０へ転送することを後述するデータ転送部１２ｅに開始するように指示する。
【００５０】
一方、再送バッファ格納部１２ｄは、ＲＴＴが所定の閾値より小さいコネクション（ゼロコピー可能なコネクション）である場合には、メッセージサイズおよびメモリの空きを考慮してゼロコピー通信を行うかを決定する。その結果、再送バッファ格納部１２ｄは、ゼロコピー通信を行うと決定した場合には、後述するデータ転送部１２ｅに送信データをＮＩＣ２０へ転送することを開始するように指示し、通常通信を行うと決定した場合には、ホストコンピュータ内のＯＳ再送バッファ１３ｄへ送信データの格納を開始し、送信データをＮＩＣ２０へ転送することを後述するデータ転送部１２ｅに開始するように指示する。
【００５１】
ここで、メッセージサイズおよびメモリの空きを考慮してゼロコピー通信を行うかを判定する処理について、詳しく説明する。つまり、再送バッファ格納部１２ｄは、ＲＴＴが所定の遅延閾値より大きいと判定したコネクションについて、メッセージサイズを測定し、コネクションにおける送信データのメッセージサイズが所定のサイズよりも大きい場合にのみ、ゼロコピー通信を行うことを決定する。また、再送バッファ格納部１２ｄは、上限値記憶部１３ｃからＮＩＣ再送バッファ２４ａによって格納可能なデータ容量の上限値を読み出し、その上限値から現在使用されているＮＩＣ内の再送バッファの容量を引いた値である再送バッファの空き容量が残存している場合にのみ、ゼロコピー通信を行うことを決定する。
【００５２】
データ転送部１２ｅは、送信データをＮＩＣ２０に転送する処理部である。具体的には、データ転送部１２ｅは、送信データをＮＩＣ２０へ転送することを開始する指示を受け付けると送信データをＮＩＣ２０に転送する。
【００５３】
［ＮＩＣの構成］
次に、図５を用いて、図１に示したＮＩＣ２０の構成を説明する。図５は、実施例１に係るＮＩＣ２０の構成を示すブロック図である。同図に示すように、このＮＩＣ２０は、ホストコンピュータ制御ＩＦ２１、通信制御ＩＦ２２、制御部２３、記憶部２４を備え、ホストコンピュータ１０およびネットワーク３０と接続される。以下にこれらの各部の処理を説明する。
【００５４】
このうち、ホストコンピュータ制御ＩＦ２１は、接続されるＮＩＣ２０との間でやり取りする各種情報に関する通信を制御する手段である。具体的には、ホストコンピュータ制御ＩＦ２１は、ホストコンピュータ１０から送信データを受信し、またホストコンピュータ１０へ応答確認を送信する。
【００５５】
通信制御ＩＦ２２は、ネットワーク３０を介して接続される通信先端末４０との間でやり取りする各種情報に関する通信を制御する手段である。具体的には、通信制御ＩＦ２２は、ネットワーク３０を介して通信先端末４０へ送信データを送信する。
【００５６】
記憶部２４は、制御部２３による各種処理に必要なデータおよびプログラムを格納する格納手段であり、特に本発明に密接に関連するものとしては、ＮＩＣ再送バッファ２４ａを備える。このＮＩＣ再送バッファ２４ａは、送信データを記憶する手段であり、具体的には、ＲＴＴが所定の閾値より小さい場合には、後述する再送バッファ格納部２３ａによって送信データを格納される。
【００５７】
制御部１２は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する処理部であり、特に本発明に密接に関連するものとしては、再送バッファ格納部２３ａおよびデータ送信部２３ｂを備える。
【００５８】
このうち、再送バッファ格納部２３ａは、送信データをＮＩＣ再送バッファ２４ａに格納する処理部であり、具体的には、ホストコンピュータ１０の再送バッファ格納部１２ｄによってＲＴＴが所定の閾値より小さいと判定され、ホストコンピュータ１０から送信データを受信すると、その送信データをＮＩＣ再送バッファ２４ａに格納することを開始する。
【００５９】
データ送信部２３ｂは、送信データを送信する処理部である。具体的には、データ送信部２３ｂは、ゼロコピー通信において、ＮＩＣ再送バッファ２４ａに送信データの格納した後に、送信データを送信先端末４０に送信することを開始する。また通常通信において、データ送信部２３ｂは、ホストコンピュータから転送された送信データを送信先端末４０に送信することを開始する。
【００６０】
［通信処理］
次に、図６および図７を用いて、実施例１に係る通信システムによる通信処理を説明する。図６は、実施例１に係る通信システム１の通信処理を説明するためのシーケンス図であり、図７は、格納先設定処理を説明するためのフローチャートである。
【００６１】
図６に示すように、通信システム１のホストコンピュータ１０は、アプリケーション１０ｂが通信に先立ってコネクションの確立をＯＳ１０ｃに指示すると、コネクションごとに送信データの格納先を設定する処理を行う（ステップＳ１０１）。
【００６２】
ここで、図７を用いて、コネクションごとに送信データの格納先を設定する処理について詳しく説明する。ホストコンピュータ１０のＲＴＴ測定部１２ｂは、アプリケーション１０ｂが通信に先立ってコネクションの確立をＯＳ１０ｃに指示すると（ステップＳ２０１）、各コネクションが確立する時のＲＴＴを測定し、測定結果をＲＴＴ記憶部１３ａに記憶させる（ステップＳ２０２）。コネクション判定部１２ｃは、ＲＴＴ記憶部１３ａからコネクションごとのＲＴＴを読み出し、その読み出されたコネクションごとのＲＴＴが所定の閾値より大きいかを判定する（ステップＳ２０３）。その結果、コネクション判定部１２ｃは、ＲＴＴが所定の閾値より大きい場合には（ステップＳ２０３肯定）、その判定結果をコネクション記憶部１３ｂに記憶し、そのコネクションについて、「通常通信動作」に設定する（ステップＳ２０４）。一方、コネクション判定部１２ｃは、ＲＴＴが所定の閾値より小さい場合には（ステップＳ２０３否定）、その判定結果をコネクション記憶部１３ｂに記憶し、そのコネクションについて、「ゼロコピー通信動作」に設定する（ステップＳ２０５）。
【００６３】
図６の説明に戻ると、再送バッファ格納部１２ｄは、ＡＰＩ呼び出し部１２ａによって送信ＡＰＩが呼び出されると（ステップＳ１０２）、コネクション記憶部１３ｂからコネクションごとの判定結果を読み出し、ゼロコピー可能であるかを判定する。（ステップＳ１０３）、再送バッファ格納部１２ｄは、ＲＴＴが所定の閾値より大きいコネクション（ゼロコピー不可のコネクション）である場合には（ステップＳ１０３否定）、ＯＳ再送バッファ１３ｄへ送信データの格納を開始する（ステップＳ１０６）。そして、データ転送部１２ｅは、格納された送信データをＮＩＣ２０へ転送することを開始する（ステップＳ１０７）。その後、データ送信部２３ｂは、送信データを送信先端末４０に送信することを開始する（ステップＳ１０９）。なお、格納処理、転送処理、送信処理は、それぞれの処理が終了するまで継続する。
【００６４】
一方、再送バッファ格納部１２ｄは、ＲＴＴが所定の閾値より小さいコネクション（ゼロコピー可能なコネクション）である場合には（ステップＳ１０３肯定）、メッセージサイズおよびメモリの空きを考慮してゼロコピー通信を行うかを決定する（ステップＳ１０４）。その結果、通常通信を行うと決定した場合には（ステップＳ１０４否定）、上記と同様に、ＯＳ再送バッファ１３ｄへ送信データの格納を開始し（ステップＳ１０６）、格納された送信データをＮＩＣ２０へ転送することを開始し（ステップＳ１０７）、その後、送信データを送信先端末４０に送信することを開始する（ステップＳ１０９）。
【００６５】
一方、データ転送部１２ｅは、ゼロコピー通信を行うと決定した場合には（ステップＳ１０４肯定）、送信データをＮＩＣ２０へ転送することを開始する（ステップＳ１０５）。そして、ＮＩＣ２０の再送バッファ格納部２３ａは、ホストコンピュータ１０から送信データを受信し、その送信データをＮＩＣ再送バッファ２４ａに格納することを開始する（ステップＳ１０８）。その後、データ送信部２３ｂは、送信データを送信先端末４０に送信することを開始する（ステップＳ１０９）。なお、格納処理、転送処理、送信処理は、それぞれの処理が終了するまで継続する。
【００６６】
［実施例１の効果］
上述してきたように、通信システム１は、コネクションごとに、通信先端末４０との間の応答時間を測定し、測定された応答時間が所定の遅延閾値より大きいかを判定し、応答時間が所定の遅延閾値より大きいと判定された場合には、送信データをホストメモリ１０ａ内の再送バッファに格納し、応答時間が所定の遅延閾値より小さいと判定された場合には、送信データをＮＩＣ２０内の再送バッファに格納するので、応答時間が大きい（送信データをＮＩＣ２０内の再送バッファに格納することによる通信高速化の効果が薄い）コネクションについては、送信データをホストメモリ１０ａ内の再送バッファに格納してネットワークハードウェア内のメモリの使用量を抑制し、一方、応答時間が小さい（送信データをネットワークハードウェア内の再送バッファに格納することによる通信高速化の効果が高い）コネクションについては、送信データをネットワークハードウェア内の再送バッファに格納して、通信の高速化を図る結果、ネットワークハードウェア内のメモリの使用量を抑制しつつ、通信の高速化を図ることが可能である。
【００６７】
また、実施例１によれば、コネクションの確立時において、応答時間を測定するので、例えば、ハンドシェイク時における通信先端末とのデータの送受信に応じて、簡略かつ精度良く応答時間を測定することが可能である。
【００６８】
また、実施例１によれば、ＮＩＣ２０内の再送バッファによって格納可能なデータ容量を示す再送バッファ上限値を設定し、設定された再送バッファ上限値から現在使用されているＮＩＣ２０内の再送バッファの容量を引いた値である再送バッファの空き容量が残存している場合にのみ、送信データをＮＩＣ２０内の再送バッファに格納するので、ＮＩＣ２０内のメモリの使用量を任意に設定することが可能である。
【００６９】
また、実施例１によれば、応答時間が所定の遅延閾値より大きいと判定したコネクションについて、そのコネクションにおける送信データのメッセージサイズが所定のサイズよりも大きい場合にのみ、送信データをＮＩＣ２０内の再送バッファに格納するので、メッセージサイズが非常に小さい（送信データをＮＩＣ２０内の再送バッファに格納することによる通信高速化の効果が薄い）送信データについては、ＮＩＣ２０内の再送バッファに格納せず、一方、メッセージサイズが所定のサイズよりも大きい（送信データをＮＩＣ２０内の再送バッファに格納することによる通信高速化の効果が高い）送信データについては、ＮＩＣ２０内の再送バッファに格納する結果、ＮＩＣ２０内のメモリの使用量を抑制することが可能である。
【実施例２】
【００７０】
ところで、上記の実施例１では、コネクション確立時のＲＴＴに応じて、送信データの格納先を設定していたが、本発明はこれに限定されるものではなく、コネクション確立後のＲＴＴに応じて、送信データの格納先を設定するようにしてもよい。
【００７１】
そこで、以下の実施例２では、コネクション確立後のＲＴＴに応じて、コネクションごとに送信データの格納先を設定する場合として、図８を用いて、実施例２に係る通信システムによる通信処理を説明する。図８は、実施例２に係る通信システムの通信処理を説明するためのシーケンス図である。
【００７２】
図８に示すように、ホストコンピュータ１０は、アプリケーション１０ｂが通信に先立ってコネクションの確立をＯＳ１０ｃに指示すると（ステップＳ３０１）、通常通信を開始する（ステップＳ３０２、ステップＳ３０３、ステップＳ３１０）。つまり、ホストコンピュータ１０の再送バッファ格納部１２ｅがＯＳ再送バッファ１３ｄへ送信データの格納を開始した後（ステップＳ３０２）、データ転送部１２ｅは、格納された送信データをＮＩＣ２０へ転送することを開始する（ステップＳ３０３）、ＮＩＣ２０のデータ送信部２３ｂは、転送された送信データを送信先端末４０に送信する（ステップＳ３１０）。
【００７３】
続いて、ホストコンピュータのＲＴＴ測定部１２ｂは、通常通信時のＲＴＴを測定する（ステップＳ３０４）。そして、コネクション判定部１２ｃは、その測定されたＲＴＴを用いて、格納先設定処理を上記の実施例１と同様に行う（ステップＳ３０５、図７参照）。
【００７４】
そして、再送バッファ格納部１２ｄは、コネクション記憶部１３ｂからコネクションごとの判定結果を読み出してゼロコピー通信が可能であるかを確認し（ステップＳ３０６）、ＲＴＴが所定の閾値より大きいコネクション（ゼロコピー不可のコネクション）である場合には（ステップＳ３０６否定）、通常通信を継続する（つまり、ステップＳ３０２、ステップＳ３０３、ステップＳ３１０がそれぞれ終了するまで継続する）。
【００７５】
一方、再送バッファ格納部１２ｄは、ＲＴＴが所定の閾値より小さいコネクション（ゼロコピー可能なコネクション）である場合には（ステップＳ３０６肯定）、メッセージサイズおよびメモリの空きを考慮してゼロコピー通信を行うかを決定する（ステップＳ３０７）。その結果、再送バッファ格納部１２ｄは、通常通信を行うと決定した場合には（ステップＳ３０７否定）、上記と同様、通常通信を継続する。
【００７６】
一方、データ転送部１２ｅは、ゼロコピー通信を行うと決定した場合には（ステップＳ３０７肯定）、ＯＳ再送バッファにデータを格納すること（ステップＳ３０２、ステップＳ３０３、ステップＳ３１０で開始された処理）を中止して送信データをＮＩＣ２０へ転送する（ステップＳ３０８）。そして、ＮＩＣ２０の再送バッファ格納部２３ａは、ホストコンピュータ１０から送信データを受信し、その送信データをＮＩＣ再送バッファ２４ａに格納することを開始する（ステップＳ３０９）。その後、データ送信部２３ｂは、送信データを送信先端末４０に送信する（ステップＳ３１０）。なお、格納処理、転送処理、送信処理は、それぞれの処理が終了するまで継続する。
【００７７】
このように、コネクション確立後において、応答時間を測定するので、リアルタイムに精度良く応答時間を測定することが可能である。
【実施例３】
【００７８】
ところで、上記の実施例２では、ＲＴＴに応じて、送信データの格納先を設定しているが、本発明はこれに限定されるものではなく、ＲＴＴとともに、再送バッファの使用量に応じて、送信データの格納先を設定するようにしてもよい。
【００７９】
そこで、以下の実施例３では、ＲＴＴとともに、再送バッファの使用量に応じて、コネクションごとに送信データの格納先を設定する場合として、図９〜図１２を用いて、実施例３におけるホストコンピュータ１０ａの構成と、実施例３に係る通信システム１による通信処理とについて説明する。図９は、実施例３に係るホストコンピュータ１０ａの構成を示すブロック図であり、図１０は、再送バッファ使用量の測定について説明するための図であり、図１１は、コネクション判定処理の一例を説明するための図であり、図１２は、格納先設定処理を説明するためのフローチャートである。
【００８０】
図９に示すように、ホストコンピュータ１０ａは、図２に示したホストコンピュータ１０と比較して、制御部１２が再送バッファ使用量測定部１２ｆを新たに備え、記憶部１３が再送バッファ使用量記憶部１３ｅを新たに備える点が相違する。
【００８１】
かかるホストコンピュータ１０ａにおいて、再送バッファ使用量記憶部１３ｅは、再送バッファの使用量を記憶する手段であり、具体的には、再送バッファ使用量測定部１２ｆによって測定された再送バッファの使用量を記憶する。
【００８２】
再送バッファ使用量測定部１２ｆは、コネクションごとに、送信データよって使用される再送バッファの使用量を測定する処理部であり、具体的には、コネクションごとに、通信速度と応答確認の遅延であるＲＴＴ（Round Trip Time）との積を算出して再送バッファの使用量を測定し、測定結果を再送バッファ使用量記憶部１３ｅに記憶させる。
【００８３】
ここで、図１０を用いて再送バッファの使用量を測定する処理を詳しく説明する。同図に示すように、例えば、所定のコネクションにおいて、通信速度が１ＧＢ／ｓ（１０Ｇｂｐｓ）、応答確認の遅延（ＲＴＴ）が２００ｍｓである場合には、両者の積（２００ｍｓ×１ＧＢ）である２００ＭＢを再送バッファの使用量として測定する。
【００８４】
また、実施例３におけるコネクション判定部１２ｃは、ＲＴＴが所定の閾値より大きいかを判定し、ＲＴＴが所定の遅延閾値より大きいと判定したコネクションについて、再送バッファの使用量が所定の閾値より小さいかをさらに判定する処理部である。具体的には、コネクション判定部１２ｃは、ＲＴＴ記憶部１３ａからコネクションごとのＲＴＴを読み出し、その読み出されたコネクションごとのＲＴＴが所定の閾値より大きいと判定した後に、再送バッファ使用量記憶部１３ｅからコネクションごとの再送バッファの使用量を読み出し、その読み出されたコネクションごとの再送バッファの使用量が所定の閾値より大きいかを判定する。
【００８５】
その結果、コネクション判定部１２ｃは、再送バッファの使用量が所定の閾値より大きい場合には、その判定結果をコネクション記憶部１３ｂに記憶し、そのコネクションについて、「通常通信動作」に設定する。また、コネクション判定部１２ｃは、再送バッファの使用量が所定の閾値より小さい場合には、その判定結果をコネクション記憶部１３ｂに記憶し、そのコネクションについて、「ゼロコピー通信動作」に設定する。
【００８６】
ここで、図１１を用いてコネクション判定処理の一例を説明する。同図に示すように、４通りの通信（ＣａｓｅＡ〜Ｄ）を例にして説明する。かかる４通りの通信は、Ｂａｎｄｗｉｄｔｈ（通信速度）が１０Ｇｂｐｓと１００Ｍｂｐｓの場合で、それぞれＲＴＴが１ｍｓと２００ｍｓの場合のコネクションである。図１１では、これらのコネクションあたりの再送バッファの使用量（Ｂａｎｄｗｉｄｔｈ×ＲＴＴの積＝ＢＴ積）を４列目に示し、また、それぞれのコネクションが１０Ｇｂｐｓの物理帯域を使い切るだけの数だけあるとした場合に、全コネクションの再送バッファ量の合計を５列目に示す。
【００８７】
ＣａｓｅＡやＣのコネクションについては、ＲＴＴが少ないので、ゼロコピー通信の対象にする。なお、こうしたＲＴＴが小さい場合の通信は、クラスタ間やブレードサーバのブレード間の通信等で起こる。
【００８８】
また、ＣａｓｅＢのコネクションについては、ＲＴＴが大きく、かつ再送バッファ量が大きいので、ゼロコピー通信の対象から除外する。また、ＣａｓｅＤのコネクションについては、ＲＴＴが大きいが、再送バッファの使用量（ＢＴ積）が小さいので、ゼロコピー通信の対象とするが、たくさんのコネクションがある場合は、ＮＩＣ再送バッファ２４ａに空きがある限りゼロコピーの対象にする。この場合、ＮＩＣ再送バッファ２４ａに空きがなくなった時点で、新たなコネクションは通常通信とする。
【００８９】
次に、実施例３にかかる格納先設定処理について説明する。なお、通信処理は、図８と同様に行われるが、その詳細な説明を省略し、そのなかの格納先設定処理について説明する。実施例３の格納先設定処理は、図７に示した実施例１にかかる格納先設定処理と比較して、ＲＴＴが所定の閾値より大きいと判定した後に、再送バッファの使用量が閾値より大きいかをさらに判定する処理を新たに行う点が相違する。
【００９０】
すなわち、図１２に示すように、ＲＴＴ記憶部１３ａからコネクションごとのＲＴＴを読み出し（ステップＳ４０１）、その読み出されたコネクションごとのＲＴＴが所定の閾値より大きいと判定した後に（ステップＳ４０２肯定）、コネクション判定部１２ｃは、再送バッファ使用量記憶部１３ｅからコネクションごとの再送バッファの使用量を読み出し（ステップＳ４０３）、その読み出されたコネクションごとの再送バッファの使用量が所定の閾値より大きいかを判定する（ステップＳ４０４）。
【００９１】
その結果、コネクション判定部１２ｃは、再送バッファの使用量が所定の閾値より大きい場合には（ステップＳ４０４肯定）、その判定結果をコネクション記憶部１３ｂに記憶し、そのコネクションについて、通常通信動作に設定する（ステップＳ４０５）。また、コネクション判定部１２ｃは、再送バッファの使用量が所定の閾値より小さい場合には（ステップＳ４０４否定）、その判定結果をコネクション記憶部１３ｂに記憶し、そのコネクションについて、ゼロコピー通信動作に設定する（ステップＳ４０６）。
【００９２】
このように、コネクションごとに、送信データによって使用される再送バッファの使用量をさらに測定し、応答時間が所定の遅延閾値より大きいと判定したコネクションについて、測定された再送バッファの使用量が所定の使用量閾値より小さいかをさらに判定し、応答時間が所定の遅延閾値より大きいが、再送バッファの使用量が所定の使用量閾値より小さいと判定された場合にも、コネクションの送信データをＮＩＣ２０内の再送バッファに格納するので、応答時間は長いが再送バッファの使用量は小さい（送信データをＮＩＣ２０内の再送バッファに格納することによる通信高速化の効果が高い）コネクションについては、送信データをＮＩＣ２０内の再送バッファに格納して、通信の高速化を図ることが可能である。
【実施例４】
【００９３】
ところで、本発明では、送信データの転送および格納を開始した後に、送信データの格納先を切り替えるようにしてもよい。
【００９４】
そこで、以下の実施例４では、送信データの転送および格納を開始した後に、送信データの格納先を切り替える場合として、図１３〜図１５を用いて、実施例４におけるホストコンピュータ１０ｂの構成と、実施例４に係る通信システム１による通信処理とについて説明する。図１３は、実施例４に係るホストコンピュータ１０ｂの構成を示すブロック図であり、図１４は、実施例４に係る通信システムによる通信処理を説明するためのシーケンス図であり、図１５は、切替処理を説明するためのフローチャートである。
【００９５】
図１３に示すように、ホストコンピュータ１０ｂは、図９に示したホストコンピュータ１０ａと比較して、制御部１２が事後ＲＴＴ測定部１２ｇ、事後再送バッファ使用量測定部１２ｈ、事後コネクション判定部１２ｉ、切替部１２ｊを新たに備える点が相違する。
【００９６】
かかるホストコンピュータ１０ｂにおいて、事後ＲＴＴ測定部１２ｇは、コネクションごとに送信データの転送および格納を開始した後のＲＴＴを測定する手段であり、具体的には、測定した転送および格納を開始した後のＲＴＴを測定してＲＴＴ記憶部１３ａに記憶する。
【００９７】
事後再送バッファ使用量測定部１２ｈは、コネクションごとに送信データの転送および格納を開始した後の再送バッファの使用量を測定する手段であり、具体的には、測定した転送および格納を開始した後の再送バッファの使用量をバッファ使用量記憶部１３ｅに記憶する。
【００９８】
事後コネクション判定部１２ｉは、コネクションごとに、送信データの転送および格納を開始した後のＲＴＴおよび再送バッファの使用量が所定の閾値より大きいかを判定する処理部である。具体的には、事後コネクション判定部１２ｉは、事後ＲＴＴ測定部１２ｇによって測定された転送および格納後のＲＴＴを読み出し、その転送および格納後のＲＴＴが所定の閾値より大きいかを判定する。
【００９９】
一方、転送および格納後のＲＴＴが所定の閾値より大きいと判定した場合には、事後コネクション判定部１２ｉは、事後再送バッファ使用量測定部１２ｈによって測定された転送および格納後の再送バッファの使用量を読み出し、その転送および格納後の再送バッファの使用量が所定の閾値より小さいかを判定する。
【０１００】
切替部１２ｊは、コネクションについて、送信データの格納先を切り替える手段である。具体的には、事後コネクション判定部１２ｉによって転送および格納後のＲＴＴが所定の閾値より小さいと判定された場合には、切替部１２ｊは、現在通常通信であるかを判定する。その結果、切替部１２ｊは、現在通常通信である場合には、そのコネクションをゼロコピー通信に切り替える。また、切替部１２ｊは、現在通常通信でない場合には、切り替えを行わずに、そのまま処理を終了する。
【０１０１】
また、切替部１２ｊは、事後コネクション判定部１２ｉによって転送および格納後の再送バッファの使用量が所定の閾値より小さいと判定された場合には、現在通常通信であるかを判定する。その結果、切替部１２ｊは、事後測定すると、現在通常通信である場合には、そのコネクションをゼロコピー通信に切り替える。また、切替部１２ｊは、現在通常通信でない場合には、切り替えを行わずに、そのまま処理を終了する。
【０１０２】
次に、実施例４にかかる通信システムによる通信処理について説明する。実施例４の通信処理は、図８に示した実施例２にかかる格納先設定処理と比較して、転送および格納を開始した後に送信データの格納先を切り替える点が相違する。
【０１０３】
すなわち、図１４に示すように、ホストコンピュータ１０は、送信データの転送および格納を開始した後に（ステップＳ５０１〜ステップＳ５１０）、送信データの格納先の切替処理を行う（ステップＳ５１１）。
【０１０４】
ここで、図１５を用いて、切替処理について詳しく説明する。同図に示すように、事後コネクション判定部１２ｉは、事後ＲＴＴ測定部１２ｇによって測定された転送および格納後のＲＴＴを読み込み（ステップＳ６０１）、その転送および格納後のＲＴＴが所定の閾値より大きいかを判定する（ステップＳ６０２）。その結果、事後コネクション判定部１２ｉによって転送および格納後のＲＴＴが所定の閾値より小さいと判定された場合には（ステップＳ６０２否定）、切替部１２ｊは、現在通常通信であるかを判定する（ステップＳ６０７）。その結果、切替部１２ｊは、現在通常通信である場合には（ステップＳ６０７肯定）、そのコネクションをゼロコピー通信に切り替える。また、切替部１２ｊは、現在通常通信でない場合には（ステップＳ６０７否定）、切り替えを行わずに、そのまま処理を終了する。
【０１０５】
一方、転送および格納後のＲＴＴが所定の閾値より大きいと判定した場合には（ステップＳ６０２肯定）、事後コネクション判定部１２ｉは、事後再送バッファ使用量測定部１２ｈによって測定された転送および格納後の再送バッファの使用量を読み込み（ステップＳ６０３）、その転送および格納後の再送バッファの使用量が所定の閾値より大きいかを判定する（ステップＳ６０４）。その結果、事後コネクション判定部１２ｉによって転送および格納後の再送バッファの使用量が所定の閾値より小さいと判定された場合には（ステップＳ６０４否定）、切替部１２ｊは、現在通常通信であるかを判定する（ステップＳ６０７）。その結果、切替部１２ｊは、現在通常通信である場合には（ステップＳ６０７肯定）、そのコネクションをゼロコピー通信に切り替える（ステップＳ６０８）。また、切替部１２ｊは、現在通常通信でない場合には（ステップＳ６０７否定）、切り替えを行わずに、そのまま処理を終了する。
【０１０６】
また、事後コネクション判定部１２ｉによって転送および格納後の再送バッファの使用量が所定の閾値より大きいと判定された場合には（ステップＳ６０４肯定）、切替部１２ｊは、現在ゼロコピー通信であるかを判定する（ステップＳ６０５）。その結果、切替部１２ｊは、現在ゼロコピー通信である場合には（ステップＳ６０５肯定）、そのコネクションを通常通信に切り替える（ステップＳ６０６）。また、切替部１２ｊは、現在ゼロコピー通信でない場合には（ステップＳ６０５否定）、切り替えを行わずに、そのまま処理を終了する。
【０１０７】
このように、送信データの転送および格納を開始した後においても、応答時間を測定し、送信データの転送および格納を開始した後においても、測定された応答時間が所定の遅延閾値より大きいかを判定し、ホストメモリ１０ａの再送バッファに格納が開始されているコネクションについて、転送および格納を開始した後における応答時間が所定の遅延閾値より小さいと判定された場合には、そのコネクションにおける送信データの格納先をＮＩＣ２０内の再送バッファに切り替え、ＮＩＣ２０の再送バッファに格納が開始されているコネクションについて、転送および格納を開始した後における応答時間が所定の遅延閾値より大きいと判定された場合には、そのコネクションにおける送信データの格納先をホストメモリ１０ａ内の再送バッファに切り替えるので、送信データをＮＩＣ２０内の再送バッファに格納しているコネクションにおける応答時間が大きくなった場合には、送信データの格納先を切り替えて、ホストメモリ内の再送バッファに格納する結果、ＮＩＣ２０内のメモリの使用量を抑制することが可能である。
【０１０８】
また、送信データの転送および格納を開始した後においても、再送バッファの使用量をさらに測定し、送信データの転送および格納を開始した後においても、応答時間が所定の遅延閾値より大きいと判定したコネクションについて、測定された再送バッファの使用量が所定の使用量閾値より小さいかをさらに判定し、ホストメモリ１０ａの再送バッファに格納が開始されているコネクションについて、応答時間が所定の遅延閾値より大きいが、転送および格納を開始した後における再送バッファの使用量が所定の使用量閾値より小さいと判定されたコネクションについても、そのコネクションにおける送信データの格納先をＮＩＣ２０内の再送バッファに切り替えるので、送信データをＮＩＣ２０内の再送バッファに格納しているコネクションにおける再送バッファの使用量が大きくなった場合には、送信データの格納先を切り替えて、ホストメモリ１０ａ内の再送バッファに格納する結果、ＮＩＣ２０内のメモリの使用量を抑制することが可能である。
【実施例５】
【０１０９】
ところで、本発明では、ゼロコピー通信から通常通信に切り替えられたことがあるコネクションについては、以後送信データの格納先を切り替えないようにしてもよい。
【０１１０】
そこで、以下の実施例５では、ゼロコピー通信から通常通信に切り替えられたことがあるコネクションについては、送信データの格納先を切り替えない場合として、図１６を用いて、実施例５における切替処理について説明する。図１６は、実施例５に係る切替処理を説明するためのフローチャートである。
【０１１１】
図１６に示すように、実施例５の通信処理は、図１５に示した実施例４にかかる切替処理と比較して、ゼロコピー通信から通常通信に切り替えられたことがあるコネクションについては、以後送信データの格納先を切り替えない点が相違する。
【０１１２】
つまり、同図に示すように、事後コネクション判定部１２ｉによって転送および格納後のＲＴＴが所定の閾値より小さいと判定された場合（ステップＳ７０２否定）、または事後コネクション判定部１２ｉによって転送および格納後の再送バッファの使用量が所定の閾値より小さいと判定された場合には（ステップＳ７０４否定）、切替部１２ｊは、ゼロコピー通信から通常通信に切り替えられたことがあるかを判定する（ステップＳ７０７）。その結果、ゼロコピー通信から通常通信に切り替えられたことがない場合には（ステップＳ７０７否定）、切替部１２ｊは、現在通常通信であるかを判定する（ステップＳ７０８）。その結果、切替部１２ｊは、現在通常通信である場合には（ステップＳ７０８肯定）、そのコネクションをゼロコピー通信に切り替える（ステップＳ７０９）。また、切替部１２ｊは、現在通常通信でない場合には（ステップＳ７０８否定）、切り替えを行わずに、そのまま処理を終了する。
【０１１３】
また、切替部１２ｊは、ゼロコピー通信から通常通信に切り替えられたことがある場合には（ステップＳ７０７肯定）、切替処理を行わずに処理を終了する。
【０１１４】
このように、送信データをＮＩＣ２０内の再送バッファに格納することを中止されてホストメモリ１０ａ内の再送バッファに格納されたコネクションを除いて、格納先を切り替えるので、送信データを格納する再送バッファを切り替える条件が頻繁に起きるような場合でも、切り替えを適切に抑制しシステムの挙動を安定化させることが可能である。
【実施例６】
【０１１５】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例６として本発明に含まれる他の実施例を説明する。
【０１１６】
（１）切替時の閾値
また、上記の実施例では、コネクションを通常通信からゼロコピー通信へ、またはゼロコピー通信から通常通信へ切り替える場合には、同じ所定の閾値を用いる場合を説明したが、本発明はこれに限定されるものではなく、コネクションを通常通信からゼロコピー通信へ切り替える場合と、ゼロコピー通信から通常通信へ切り替える場合とでは、異なる閾値を用いるようにしてもよい。
【０１１７】
具体的には、切替処理時の事後再送バッファ使用量測定部１２ｈによって測定された転送および格納後の再送バッファの使用量を読み込んだ後に（図１５のステップＳ６０３参照）、事後コネクション判定部１２ｉは、コネクションについて、現在通常通信を行っているのか、またはゼロコピー通信を行っているのかを判定する。そして、事後コネクション判定部１２ｉは、判定の結果、現在ゼロコピー通信である場合には、現在通常通信である場合よりも大きい閾値を用いて、転送および格納後の再送バッファの使用量がその閾値より大きいかを判定する（図１５のステップＳ６０４参照）。
【０１１８】
このように、送信データをＮＩＣ２０内の再送バッファに格納されているコネクションと、送信データをＮＩＣ２０内の再送バッファに格納されているコネクションとで、送信データの格納先を切り替える条件である切替条件が異なるようにして送信データの格納先を切り替えるので、送信データをホストメモリ１０ａ内の再送バッファに格納するように切り替える閾値と、送信データをＮＩＣ２０内の再送バッファに格納するように切り替える閾値が異なる結果、例えば、送信データをＮＩＣ２０内の再送バッファに格納する場合に通信速度が上がって再送バッファ量が増えることがあり、送信データを格納する再送バッファを切り替える条件が頻繁に起きるような場合でも、切り替えの頻度を適切に抑制しシステムの挙動を安定化させることが可能である。
【０１１９】
（２）再送バッファの上限値
また、上記の実施例では、通常通信を行っているコネクションと、ゼロコピー通信を行っているコネクションとでは、再送バッファの格納可能なデータ容量の上限値を異なるように、設定してもよい。
【０１２０】
具体的には、再送バッファ格納部１２ｄは、メッセージサイズおよびメモリの空きを考慮してゼロコピー通信を行うかを決定する場合に（図６のステップＳ１０４参照）、コネクションについて、ＲＴＴの判定でゼロコピー通信の許可がえられたのか、再送バッファの使用量の判定でゼロコピー通信の許可が得られたのかを判定する。そして、再送バッファ格納部１２ｄは、判定の結果、再送バッファの使用量の判定でゼロコピー通信の許可が得られた場合には、ＲＴＴの判定でゼロコピー通信の許可がえられた場合よりも小さい上限値を用いて、ゼロコピー通信を行うことを決定する。
【０１２１】
このように、ＲＴＴが所定の遅延閾値より大きいと判定したコネクションと、再送バッファの使用量が所定の使用量閾値より大きいと判定したコネクションとでは、再送バッファの上限値を異なるように、設定するので、ＲＴＴでゼロコピー通信の許可が得られた場合のＮＩＣ２０上の再送バッファ量の上限と、再送バッファ量でゼロコピー通信の許可が得られた場合のＮＩＣ２０の再送バッファ量の差の分だけ、ＲＴＴでゼロコピー通信の許可がえられたコネクションにとってはＮＩＣ２０上の再送バッファに常に余裕があるように見える結果、ＲＴＴでゼロコピー通信の許可が得られるコネクションについては既にシステムが最大の通信速度で通信していても、新たなコネクションにゼロコピー通信を許可することが可能である。
【０１２２】
（３）シーケンス番号
また、上記の実施例では、通信速度と応答時間であるＲＴＴ（Round Trip Time）との積を算出して再送バッファの使用量を測定する場合を説明したが、本発明はこれに限定されるものではなく、送信シーケンス番号および確認応答シーケンス番号を用いて再送バッファの使用量を測定するようにしてもよい。具体的には、図１７に示すように、通信先端末からの確認応答のデータに付与されたシーケンス番号（例えば、「１６５」）から現に送信しようとしているデータのシーケンス番号（例えば、「１６２」）を引いた値を再送バッファの使用量として測定する。
【０１２３】
このように、通信先端末からの確認応答のデータに付与されたシーケンス番号から現に送信しようとしているデータのシーケンス番号を引いた値に応じて、再送バッファの使用量を測定するので、シーケンス番号を用いて、精度良く再送バッファの使用量を測定することが可能である。
【０１２４】
（４）ＴＯＥ方式
また、上記の実施例では、通信システム１にＣＯＥ方式を適用する場合を説明したが、本発明はこれに限定されるものではなく、通信システム１にＴＯＥ方式を適用するようにしてもよい。つまり、送信データのプロトコル処理をホストコンピュータ１０のＯＳが行う代わりに、ＮＩＣ２０が送信データのプロトコル処理を行う。
【０１２５】
（５）システム構成等
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ＡＰＩ呼び出し部１２ａと再送バッファ測定部１２ｂを統合してもよい。また、データ転送部１２ｅは、ホストコンピュータとＮＩＣの両方にあってもよく、ＮＩＣ上のデータ転送部はハードウェアで実現されていてもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１２６】
（付記１）送信データを格納する再送バッファを備えたホストメモリから同じく送信データを格納する再送バッファを備えたネットワークハードウェアに前記送信データを転送し、送受信ホスト間もしくは当該ネットワークハードウェア上に確立された仮想的な通信経路であるコネクションを通して前記送信データを通信先端末に送信するデータ通信方法をコンピュータに実行させるデータ通信プログラムであって、
前記コネクションごとに、前記通信先端末との間の応答時間を測定する測定手順と、
前記測定手順によって測定された前記応答時間が所定の遅延閾値より大きいかを判定する判定手順と、
前記判定手順によって前記応答時間が前記所定の遅延閾値より大きいと判定された場合には、送信データをホストメモリ内の再送バッファに格納し、前記応答時間が前記所定の遅延閾値より小さいと判定された場合には、前記送信データを前記ネットワークハードウェア内の再送バッファに格納する格納手順と、
をコンピュータに実行させることを特徴とするデータ通信プログラム。
【０１２７】
（付記２）前記測定手順は、前記コネクションごとに、前記送信データによって使用される再送バッファの使用量をさらに測定し、
前記判定手順は、前記応答時間が前記所定の遅延閾値より大きいと判定したコネクションについて、前記測定手順によって測定された前記再送バッファの使用量が所定の使用量閾値より小さいかをさらに判定し、
前記格納手順は、前記応答時間が前記所定の遅延閾値より大きいが、前記判定手順によって前記再送バッファの使用量が前記所定の使用量閾値より小さいと判定された場合にも、前記コネクションの送信データを前記ネットワークハードウェア内の再送バッファに格納することを特徴とする付記１に記載のデータ通信プログラム。
【０１２８】
（付記３）前記測定手順は、前記通信先端末からの確認応答のデータに付与されたシーケンス番号から現に送信しようとしているデータのシーケンス番号を引いた値に応じて、前記再送バッファの使用量を測定することを特徴とする付記２に記載のデータ通信プログラム。
【０１２９】
（付記４）前記測定手順は、前記送信データの転送および格納を開始した後においても、前記応答時間を測定し、
前記判定手順は、前記送信データの転送および格納を開始した後においても、前記測定手順によって測定された前記応答時間が所定の遅延閾値より大きいかを判定し、
前記ホストメモリの再送バッファに格納が開始されているコネクションについて、転送および格納を開始した後における前記応答時間が所定の遅延閾値より小さいと判定された場合には、当該コネクションにおける送信データの格納先を前記ネットワークハードウェア内の再送バッファに切り替え、前記ネットワークハードウェアの再送バッファに格納が開始されているコネクションについて、転送および格納を開始した後における前記応答時間が所定の遅延閾値より大きいと判定された場合には、当該コネクションにおける送信データの格納先を前記ホストメモリ内の再送バッファに切り替える切替手順をさらに備ることを特徴とする付記１〜３のいずれか一つに記載のデータ通信プログラム。
【０１３０】
（付記５）前記測定手順は、前記送信データの転送および格納を開始した後においても、前記再送バッファの使用量をさらに測定し、
前記判定手順は、前記送信データの転送および格納を開始した後においても、前記応答時間が前記所定の遅延閾値より大きいと判定したコネクションについて、前記測定手順によって測定された前記再送バッファの使用量が所定の使用量閾値より小さいかをさらに判定し、
前記ホストメモリの再送バッファに格納が開始されているコネクションについて、前記応答時間が前記所定の遅延閾値より大きいが、転送および格納を開始した後における前記再送バッファの使用量が前記所定の使用量閾値より小さいと判定されたコネクションについても、当該コネクションにおける送信データの格納先を前記ネットワークハードウェア内の再送バッファに切り替える切替手順をさらに備えることを特徴とする付記１〜３のいずれか一つに記載のデータ通信プログラム。
【０１３１】
（付記６）前記切替手順は、前記送信データを前記ネットワークハードウェア内の再送バッファに格納されているコネクションと、前記送信データを前記ネットワークハードウェア内の再送バッファに格納されているコネクションとで、前記送信データの格納先を切り替える条件である切替条件が異なるようにして前記送信データの格納先を切り替えることを特徴とする付記４または５に記載のデータ通信プログラム。
【０１３２】
（付記７）前記切替手順は、前記送信データを前記ネットワークハードウェア内の再送バッファに格納することを中止されて前記ホストメモリ内の再送バッファに格納されたコネクションを除いて、前記格納先を切り替えることを特徴とする付記４または５に記載のデータ通信プログラム。
【０１３３】
（付記８）前記測定手順は、前記コネクションの確立時において、前記応答時間を測定することを特徴とする付記１〜３のいずれか一つに記載のデータ通信プログラム。
【０１３４】
（付記９）前記測定手順は、前記コネクションの確立後において、前記応答時間を測定することを特徴とする付記１〜３のいずれか一つに記載のデータ通信プログラム。
【０１３５】
（付記１０）前記ネットワークハードウェア内の再送バッファによって格納可能なデータ容量を示す再送バッファ上限値を設定する上限値設定手順をさらに備え、
前記格納手順は、前記上限値設定手順によって設定された前記再送バッファ上限値から現在使用されている前記ネットワークハードウェア内の再送バッファの容量を引いた値である再送バッファの空き容量が残存している場合にのみ、前記送信データを前記ネットワークハードウェア内の再送バッファに格納することを特徴とする付記１〜３のいずれか一つに記載のデータ通信プログラム。
【０１３６】
（付記１１）前記上限値設定手順は、前記ネットワークハードウェアの通信速度と前記所定の閾値との積の値以上を前記再送バッファの上限値として設定することを特徴とする付記１０に記載のデータ通信プログラム。
【０１３７】
（付記１２）前記上限値設定手順は、前記応答時間が前記所定の遅延閾値より大きいと判定したコネクションと、前記再送バッファの使用量が前記所定の使用量閾値より大きいと判定したコネクションとでは、前記再送バッファの上限値を異なるように、設定することを特徴とする付記１０に記載のデータ通信プログラム。
【０１３８】
（付記１３）前記格納手順は、前記応答時間が前記所定の遅延閾値より大きいと判定したコネクションについて、当該コネクションにおける送信データのメッセージサイズが所定のサイズよりも大きい場合にのみ、前記送信データを前記ネットワークハードウェア内の再送バッファに格納することを特徴とする付記１〜１２のいずれか一つに記載のデータ通信プログラム。
【０１３９】
（付記１４）送信データを格納する再送バッファを備えたホストメモリから同じく送信データを格納する再送バッファを備えたネットワークハードウェアに送信データを転送し、ホストコンピュータ上もしくは当該ネットワークハードウェア上に確立された仮想的な通信経路であるコネクションを通して前記送信データを通信先端末に送信するデータ通信装置であって、
前記コネクションごとに、前記通信先端末との間の応答時間を測定する測定手段と、
前記測定手段によって測定された前記応答時間が所定の遅延閾値より大きいかを判定する判定手段と、
前記判定手段によって前記応答時間が前記所定の遅延閾値より大きいと判定された場合には、送信データをホストメモリ内の再送バッファに格納し、前記応答時間が前記所定の遅延閾値より小さいと判定された場合には、前記送信データを前記ネットワークハードウェア内の再送バッファに格納する格納手段と、
を備えたことを特徴とするデータ通信装置。
【産業上の利用可能性】
【０１４０】
以上のように、本発明に係るデータ通信プログラムは送信データを格納する再送バッファを備えたホストメモリから同じく送信データを格納する再送バッファを備えたネットワークハードウェアに送信データ転送し、そのネットワークハードウェア上に確立された仮想的な通信経路であるコネクションを通して送信データを通信先端末に送信する場合に有用であり、特に、ネットワークハードウェア内のメモリの使用量を抑制しつつ、通信の高速化を図ることに適する。
【図面の簡単な説明】
【０１４１】
【図１】実施例１に係る通信システムの概要および特徴を説明する。
【図２】実施例１に係るホストコンピュータ１０の構成を示すブロック図である。
【図３】ＲＴＴ記憶部１３ａによって記憶されるＲＴＴ測定値の一例を説明するための図である。
【図４】コネクション記憶部１３ｂによって記憶される判定結果の一例を説明するための図である。
【図５】実施例１に係るＮＩＣ２０の構成を示すブロック図である。
【図６】実施例１に係る通信システム１の通信処理を説明するためのシーケンス図である。
【図７】格納先設定処理を説明するためのフローチャートである。
【図８】実施例２に係る通信システムの通信処理を説明するためのシーケンス図である。
【図９】実施例３に係るホストコンピュータ１０ａの構成を示すブロック図である。
【図１０】再送バッファ使用量の測定について説明するための図である。
【図１１】コネクション判定処理の一例を説明するための図である。
【図１２】実施例３に係る格納先設定処理を説明するためのフローチャートである。
【図１３】実施例４に係るホストコンピュータ１０ｂの構成を示すブロック図である。
【図１４】実施例４に係る通信システムによる通信処理を説明するためのシーケンス図である。
【図１５】実施例４に係る切替処理を説明するためのフローチャートである。
【図１６】実施例５に係る切替処理を説明するためのフローチャートである。
【図１７】シーケンス番号により再送バッファの使用量を測定することを説明するための図である。
【符号の説明】
【０１４２】
１  通信システム
１０  ホストコンピュータ
１１  ＮＩＣ制御ＩＦ
１２  制御部
１２ａ  ＡＰＩ呼び出し部
１２ｂ  ＲＴＴ測定部
１２ｃ  コネクション判定部
１２ｄ  再送バッファ格納部
１２ｅ  データ転送部
１３  記憶部
１３ａ  ＲＴＴ記憶部
１３ｂ  コネクション記憶部
１３ｃ  上限値記憶部
１３ｄ  ＯＳ再送バッファ
２０  ＮＩＣ
２１  ホストコンピュータ制御ＩＦ
２２  通信制御ＩＦ
２３  制御部
２３ａ  再送バッファ格納部
２３ｂ  データ送信部
２４  記憶部
２４ａ  ＮＩＣ再送バッファ
３０  ネットワーク
４０  通信先端末
【図１】
2008005315.tif 000003
【図２】
2008005315.tif 000004
【図３】
2008005315.tif 000005
【図４】
2008005315.tif 000006
【図５】
2008005315.tif 000007
【図６】
2008005315.tif 000008
【図７】
2008005315.tif 000009
【図８】
2008005315.tif 000010
【図９】
2008005315.tif 000011
【図１０】
2008005315.tif 000012
【図１１】
2008005315.tif 000013
【図１２】
2008005315.tif 000014
【図１３】
2008005315.tif 000015
【図１４】
2008005315.tif 000016
【図１５】
2008005315.tif 000017
【図１６】
2008005315.tif 000018
【図１７】
2008005315.tif 000019