(57)【特許請求の範囲】
【請求項１】
ネットワーク越しに接続される第一および第二のホストであって、前記第二のホストは記憶装置に接続されている、第一および第二のホストと、
受信したデータを前記記憶装置に書き込む前にリングバッファに保存するように構成された受信プロセスに任意の時刻ｔに特定の可変データ転送速度x(t)にてデータを送信するように構成された送信プロセスであって、受信プロセスが前記記憶装置に前記データを書き込むように前記第二のホストで実行可能な受信プロセスにデータを通信するための前記第一のホストで実行可能な送信プロセスと、
前記受信プロセスに組み込まれた記憶速度制御器であって、１）前記リングバッファの現在の占有率の測定；２）前記現在のデータ転送速度x(t)、前記測定された現在の占有率、前記リングバッファの全体のサイズ、および特定の目標占有率値、の関数としての更新されたデータ転送速度x'(t）の算出；および３）前記更新されたデータ転送速度の前記送信プロセスへの通信、を行うように構成された記憶速度制御器、を含み、
前記記憶速度制御器は、現在測定されているネットワークの往復時間RTT(t)の関数として計算された周期的なインターバルにおける短時間スケールの更新されたデータ転送速度および各書き込み動作が終了した後の長時間スケールの更新されたデータ転送速度を計算し、通信するように構成され、
前記送信プロセスは前記データ転送速度x(t)を前記更新されたデータ転送速度x'(t）に調整するように構成された、
システム。
【請求項２】
前記測定された現在の占有率が特定の目標占有率値より高い場合、前記更新されたデータ転送速度x'(t）が前記現在のデータ転送速度x(t）の低下を表すように前記記憶速度制御器が構成された、
請求項１に記載のシステム。
【請求項３】
前記記憶速度制御器は、前記記憶装置への書込み動作が終了した後に、前記更新されたデータ転送速度x'(t）を算出するように構成された、
請求項１に記載のシステム。
【請求項４】
前記記憶速度制御器は、周期的なインターバルにて前記更新されたデータ転送速度x'(t）を算出するように構成された、
請求項１に記載のシステム。
【請求項５】
前記記憶速度制御器は、１）前記記憶装置への書込み動作の終了後の、前記現在のデータ転送速度x(t）、前記測定された現在のバッファ占有率、前記リングバッファの前記全体のサイズ、および特定の目標占有率値の第一の関数からの、前記更新されたデータ転送速度x'(t）の算出；および２）定期的なインターバルにての、前記現在のデータ転送速度x(t）、前記測定された現在のバッファ占有率、前記リングバッファの前記全体のサイズ、および特定の目標占有率値の第二の関数からの、前記更新されたデータ転送速度x'(t）の算出、を行うように構成された、
請求項１に記載のシステム。
【請求項６】
前記周期的なインターバルは、現在測定されているネットワークの往復時間ＲＴＴ（ｔ）に対応する、
請求項４に記載のシステム。
【請求項７】
ＲＴＴ（ｔ）が特定の閾値未満であるか、そうでなければ特定のデフォルトの値に対応する場合、前記周期的なインターバルは現在測定されているネットワークの往復時間ＲＴＴ（ｔ）に対応する、
請求項４に記載のシステム。
【請求項８】
前記現在の占有率ρ(t)が予め決められた値ρmin以上である場合にρ'は特定の目標占有率、γｄｉｓｋは重み付け係数、Ｂは前記リングバッファの前記全体のデータ容量への制約（ｍｅａｓｕｒｅ ｔｏ）および、Ｔ（ｔ）は前記現在のデータ転送速度が最後に更新されてからの期間を示す下記の数式
【数７】
0005342658.tif 000008
としての第一の関数から、前記記憶速度制御器は前記更新されたデータ転送速度x'(t）を算出するように構成された、
請求項５に記載のシステム。
【請求項９】
前記現在の占有率ρ(t)が予め決められた値ρmin以上である場合にρ'は特定の目標占有率、γｄｉｓｋは重み付け係数、Ｂは前記リングバッファの前記全体のデータ容量への制約であって、「ｗｒｉｔｅ−ｓｉｚｅ」が最も最近の書込み動作中に書きこまれたデータの量の測定量であってw(t)が最も最近の書込み動作の期間であるτ(t)= ( B / write_size ) * w(t)を満たし、T(t)は前記現在のデータ転送速度が最後に更新されてからの期間を示す下記の数式
【数８】
0005342658.tif 000009
としての第一の関数から、前記記憶速度制御器は前記更新されたデータ転送速度x'(t）を算出するように構成された、
請求項５に記載のシステム。
【請求項１０】
前記現在の占有率ρ(t)が予め決められた値ρmin以上だった場合にρ'は特定の目標占有率である、下記の数式
【数９】
0005342658.tif 000010
としての第二の関数から、前記記憶速度制御器は前記更新されたデータ転送速度x'(t）をＲＴＴ（ｔ）に等しい周期的インターバルにて算出するように構成された、
請求項５に記載のシステム。
【請求項１１】
複数の送信プロセスと、複数の受信プロセスであって、各々の受信プロセスが、自己の各送信プロセスの前記データ転送速度を更新するために、前記記憶装置に接続されかつ記憶速度制御器およびリングバッファを組み込む、複数の送信プロセスおよび受信プロセスを更に含む、
請求項１に記載のシステム。
【請求項１２】
前記受信プロセスは、ネットワーク輻輳の度合を測定し当該測定された輻輳に基づいたネットワーク速度xnet(t)を算出するように構成されたネットワーク速度制御器を更に組込み、前記送信プロセスは、xnet(t)、および前記受信プロセスによって送信された前記更新されたデータ転送速度の関数として前記現在のデータ転送速度を更に調整する、
請求項１に記載のシステム。
【請求項１３】
ネットワーク輻輳の前記測定量は測定された往復の遅延時間に由来するキューイング遅延である、
請求項１２に記載のシステム。
【請求項１４】
前記送信プロセスおよび受信プロセスは、仮想キューを維持し前記仮想キューの占有率をそれらのデータ転送速度の総計に基づいて算出することによって、共同で自らのデータ転送速度の総計を制限し、各受信プロセスは、仮想キュー占有率に基づいて仮想リンク速度xvl(t)を算出する仮想リンク制御器を更に組み込み、各送信プロセスは、仮想リンク速度xvl(t)および前記受信プロセスによって送信された前記更新されたデータ転送速度x'(t）の関数としてのデータ転送速度を調整する類似するプロセスの集団に属する、
請求項１に記載のシステム。
【請求項１５】
前記受信プロセスは、ネットワーク輻輳の度合を測定するように構成されたネットワーク速度制御器を更に組込み、前記送信プロセスは、前記測定されたネットワーク輻輳から計算されたネットワーク速度xnet(t)、仮想キュー占有率から計算された仮想リンク制御速度xvl(t)、および、下記数式
【数１０】
0005342658.tif 000011
としての最小選択基準を用いて前記受信プロセスによって送信された前記更新されたデータ転送速度x'(t)の関数として自身のデータ転送速度を更に調整する、
請求項１に記載のシステム。
【請求項１６】
前記記憶速度制御器は、前記現在の占有率ρ(t)が予め決められた値ρmin以上である場合にρ'は特定の目標占有率、γｄｉｓｋは重み付け係数、Ｂは前記リングバッファの前記全体のデータ容量への制約、およびＴ（ｔ）は前記現在のデータ転送速度が最後に更新されてからの期間を示す下記の数式
【数１１】
0005342658.tif 000012
として前記更新されたデータ転送速度x'(t）を算出するように構成された、
請求項１に記載のシステム。
【請求項１７】
前記記憶速度制御器は、前記現在の占有率ρ(t)が予め決められた値ρmin以上である場合にρ'は特定の目標占有率、γｄｉｓｋは重み付け係数、Ｂは前記リングバッファの前記全体のデータ容量への制約であって、「ｗｒｉｔｅ−ｓｉｚｅ」が最も最近の書込み動作中に書きこまれたデータの量の測定量であってw(t)が最も最近の書込み動作の期間であるτ(t)=( B / write_size ) * w(t)を満たし、Ｔ（ｔ）は前記現在のデータ転送速度が最後に更新されてからの期間を示す下記の数式
【数１２】
0005342658.tif 000013
として前記更新されたデータ転送速度x'(t）を算出するように構成された、
請求項１に記載のシステム。
【請求項１８】
第一のホストから、当該第一のホストとネットワーク越しに接続されている第二のホストであって記憶装置に接続されている第二のホストに、データを転送する方法であって、
受信したデータを前記記憶装置に書き込む前にリングバッファに保存する受信プロセスに任意の時刻ｔに特定の可変データ転送速度x(t）にてデータを送信する送信プロセスを、受信プロセスが前記記憶装置に前記データを書き込むように前記第二のホストで実行中の受信プロセスにデータを通信するための前記第一のホストで実行すること、
前記受信プロセスに組み込まれた記憶速度制御器であって、１）前記リングバッファの前記現在の占有率の測定；２）前記現在のデータ転送速度x(t）、前記測定された現在の占有率、および特定の目標占有率値、の関数としての更新されたデータ転送速度x'(t）の算出；および３）前記更新されたデータ転送速度の前記送信プロセスへの通信、を行う記憶速度制御器を実行すること、
前記記憶速度制御器の実行は、現在測定されているネットワークの往復時間RTT(t)の関数として計算された周期的なインターバルにおける短時間スケールの更新されたデータ転送速度および各書き込み動作が終了した後の長時間スケールの更新されたデータ転送速度を計算し、通信することを有し、
前記データ転送速度x(t）を前記更新されたデータ転送速度x'(t）に調整すること、
を含む、方法。
【請求項１９】
前記記憶装置への書込み動作が終了した後に、前記現在のデータ転送速度x(t）、前記測定された現在のバッファ占有率、前記リングバッファの前記全体のサイズ、および特定の目標占有率値、の第一の関数から前記更新されたデータ転送速度x'(t）を算出すること、および、
周期的なインターバルにて、前記現在のデータ転送速度x(t）、前記測定された現在のバッファ占有率、前記リングバッファの前記全体のサイズ、および特定の目標占有率値の第二の関数から、前記更新されたデータ転送速度x'(t）を算出すること、
を更に含む、請求項１８に記載の方法。
【請求項２０】
前記現在の占有率ρ(t)が予め決められた値ρmin以上である場合にρ'は特定の目標占有率、γｄｉｓｋは重み付け係数、Ｂは前記リングバッファの前記全体のデータ容量への制約、およびＴ（ｔ）は前記現在のデータ転送速度が最後に更新されてからの期間を示す下記の数式
【数１３】
0005342658.tif 000014
として第一の関数から前記更新されたデータ転送速度x'(t）を算出することを含む、
請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（本文中に技術分野に該当する記載なし）
＜関連出願＞本出願は、２００９年３月６日に出願された仮出願シリアル番号６１／１５８，０００に対する優先権を主張し、かつこの出願を参照によって組み込む。この出願はまた、以下の出願の明細書の全体に関連し、かつこれらを参照によって組み込む。以下の出願とは、すなわち、２００５年１２月２３日に出願され“ＢＵＬＫＤＡＴＡＴＲＡＮＳＦＥＲ”とタイトルされた米国特許出願１１／３１７，６６３、および、２００７年９月４日に出願され“ＭＥＴＨＯＤＡＮＤＳＹＳＴＥＭＦＯＲＡＧＧＲＥＧＡＴＥＢＡＮＤＷＩＤＴＨＣＯＮＴＲＯＬ”とタイトルされた米国特許出願１１／８４９，７８２である。
【背景技術】
【０００２】
データ転送用途の典型的な動作の流れは、データを送信側から読み出すこと、ネットワークの端から端まで（ａｃｒｏｓｓ）データを送信すること、最後に受信側の記憶装置にデータを書き込むことを含む。このデータパスに沿って、スループットに対する複数のボトルネックが出現する。転送セッションは、考えられる全てのボトルネックに応じて速度を調整することが可能であることが理想的である。適合しないことは、ボトルネックとなっている装置にセッションが過度の負荷が掛けることになり得、これが長い待ち時間とパケット損失を招き得る。
【０００３】
転送パスに沿ったネットワークリンクは、その限られた能力のために、ボトルネックになり得ることは良く知られている。文献としては、利用可能なリンクの能力を効率的に利用するための適応メカニズムを設計することに重点的に取り組む多くの文献が存在する（例えば、Ｌａｗｒｅｎｃｅ  Ｓ．  Ｂｒａｋｍｏ  ａｎｄ  Ｌａｒｒｙ  Ｌ．  Ｐｅｔｅｒｓｏｎ．  ＴＣＰ  Ｖｅｇａｓ：  ｅｎｄ−ｔｏ−ｅｎｄ  ｃｏｎｇｅｓｔｉｏｎ  ａｖｏｉｄａｎｃｅ  ｏｎ  ａ  ｇｌｏｂａｌ  Ｉｎｔｅｒｎｅｔ．  ＩＥＥＥ  Ｊｏｕｒｎａｌ  ｏｎ  Ｓｅｌｅｃｔｅｄ  Ａｒｅａｓ  ｉｎ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ，  １３（８）：１４６５-８０，  Ｏｃｔｏｂｅｒ  １９９５；Ｍ．  Ａｌｌｍａｎ，  Ｖ．  Ｐａｘｓｏｎ，  ａｎｄ  Ｗ．  Ｓｔｅｖｅｎｓ．  ＴＣＰ  ｃｏｎｇｅｓｔｉｏｎ  ｃｏｎｔｒｏｌ．  ＲＦＣ  ２５８１，  Ａｐｒｉｌ  １９９９；  ａｎｄ  Ｆｒａｎｋ  Ｐ．  Ｋｅｌｌｙ，  Ａｍａｎ  Ｍａｕｌｌｏｏ，  ａｎｄ  Ｄａｖｉｄ  Ｔａｎ．  Ｒａｔｅ  ｃｏｎｔｒｏｌ  ｆｏｒ  ｃｏｍｍｕｎｉｃａｔｉｏｎ  ｎｅｔｗｏｒｋｓ：  Ｓｈａｄｏｗ  ｐｒｉｃｅｓ，  ｐｒｏｐｏｒｔｉｏｎａｌ  ｆａｉｒｎｅｓｓ  ａｎｄ  ｓｔａｂｉｌｉｔｙ．  Ｊｏｕｒｎａｌ  ｏｆ  Ｏｐｅｒａｔｉｏｎｓ  Ｒｅｓｅａｒｃｈ  Ｓｏｃｉｅｔｙ，  ４９（３）：２３７-２５２，  Ｍａｒｃｈ  １９９８．を参照）。しかし、高速のネットワーキングギアがますます展開されるにつれ、ボトルネックはネットワーク内では生じず、エンドシステムで生じることがあるようになる。実際には、受信端の記憶装置がデータの転送速度に追い付かないことが見られることがしばしばある。このために、データを書き込むときの記憶装置のＩ／Ｏの速度を考慮したアプリケーションレベルのメカニズムが求められる。
【発明の概要】
【０００４】
（本文中に発明の概要に該当する記載なし。）
【図面の簡単な説明】
【０００５】
【図１】Ｉ／Ｏ駆動の速度制御を実施するためのシステムの例を示す。
【図２（ａ）】長時間単位適応メカニズムおよび短時間単位適応メカニズムを示す。
【図２（ｂ）】長時間単位適応メカニズムおよび短時間単位適応メカニズムを示す。
【図３】Ｉ／Ｏ駆動の速度制御メカニズムを使う場合と使わない場合での転送性能の比較テストの結果を示す表である。
【図４】Ｉ／Ｏ駆動の速度制御のためのシステムの例を示す。
【発明を実施するための形態】
【０００６】
本明細書には送信先の記憶装置の速度に応じて転送速度の自己調整を転送セッションが行うことを可能とする、Ｉ／Ｏ駆動による、フィードバックに基づく速度制御メカニズムが記載される。同様の問題に取り組む既存の提案はアロケーションに基づくアプローチを主に採用する（例えば、  Ｐ．  Ｓｈｅｎｏｙ  ａｎｄ  Ｈ  Ｍ．  Ｖｉｎ．  Ｃｅｌｌｏ：  Ａ  Ｄｉｓｋ  Ｓｃｈｅｄｕｌｉｎｇ  Ｆｒａｍｅｗｏｒｋ  ｆｏｒ  Ｎｅｘｔ  Ｇｅｎｅｒａｔｉｏｎ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍｓ．  Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＡＣＭ  ＳＩＧＭＥＴＲＩＣＳ  Ｃｏｎｆｅｒｅｎｃｅ，  Ｍａｄｉｓｏｎ，  ＷＩ，  ｐａｇｅｓ  ４４−５５，  Ｊｕｎｅ，  １９９８；    Ｊｏｅｌ  Ｃ  Ｗｕ，  Ｓｃｏｔｔ  Ａ．  Ｂａｎａｃｈｏｗｓｋｉ，  Ｓｃｏｔｔ  Ａ．  Ｂｒａｎｄｔ：  Ｈｉｅｒａｒｃｈｉｃａｌ  ｄｉｓｋ  ｓｈａｒｉｎｇ  ｆｏｒ  ｍｕｌｔｉｍｅｄｉａ  ｓｙｓｔｅｍｓ：  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＮＯＳＳＤＡＶ，  １８９−１９４，  ２００５；ａｎｄ  Ｄｉｓｃ  Ｎｉｃｅ：  Ｕｓｅｒ−ｌｅｖｅｌ  ｒｅｇｕｌａｔｉｏｎ  ｏｆ  ｄｉｓｋ  ｂａｎｄｗｉｄｔｈ，  ＩＰＳＪ  Ｄｉｇｉｔａｌ  Ｃｏｕｒｉｅｒ，  Ｄｅｃ．  ２００７．を参照。ｈｔｔｐ：／／ｗｗｗ．ｊｓｔａｇｅ．ｊｓｔ．ｇｏ．ｊｐ／ａｒｔｉｃｌｅ／ｉｐｓｊｄｃ／３／０／３＿８００／＿ａｒｔｉｃｌｅにて入手可能である）。具体的には、これらの提案では、受信器で作動中のプロセスの間で、ディスクＩ／Ｏ帯域幅を系統立ててアロケートするかまたは予約し、プロセスのリソース使用率がある閾値を越えないようにする。しかし、アロケーションに基づくメカニズムにとって適切な閾値を選択することはしばしば困難である。アプリケーションの立脚点から見ると、「全ての」利用可能なディスクリソースを利用することが理想であろう。しかし、ある瞬間にそのディスクがどれだけ多くのスループットを扱えるのかは不明確であり時間によってまちまちであることがしばしばある。さらに、アロケーションに基づく方法は通常、オペレーティングシステム（ＯＳ）内の変更を必要とする。結果として、これらの解決方法はプラットフォーム次第であることがしばしばあり、バルクデータ転送といったクロスプラットフォームな用途がこれを採用することは難しい。対照的に、本明細書に記載されるシステムは、アプリケーション層で作動し得、このことによってクロスプラットフォームでの展開は容易なタスクになる。出願人は、我々のＩ／Ｏ駆動による設計（Ｉ／Ｏ  ｄｒｉｖｅｎ  ｄｅｓｉｇｎ）を下記に提供し、また、それが、例えばＦＡＳＰ適応速度制御（ＦＡＳＰ  ａｄａｐｔｉｖｅ  ｒａｔｅ  ｃｏｎｔｒｏｌ）およびＦＡＳＰ仮想リンク制御（ＦＡＳＰ  ｖｉｒｔｕａｌ  ｌｉｎｋ  ｃｏｎｔｒｏｌ）（米国特許出願１１／８４９，７４２号を参照）といったＦＡＳＰプロトコル（米国特許出願１１／３１７，６６３号を参照）内で他の既存の速度制御メカニズムとのどのような組み合わせが可能であるか、を論じる。
＜Ｉ／Ｏ駆動の速度適応の説明＞
【０００７】
図１はＩ／Ｏ駆動の速度制御および、これがデータ転送セッション１００によってどのように用いられることが可能かを示す、システムレベルの概要である。この主要な構成要素は、速度制御器１０１、受信器側リングバッファ１０２、およびメッセージングベースのフィードバックモジュール１０３を含む。特に、リングバッファは、データがネットワークインターフェースに到着した後であり、記憶装置１０４に書き込まれる前に一時的にデータを保存するために、転送アプリケーションによって維持されているバッファスペースを表す。記憶装置１０４はローカルハードドライブ、遠隔装着されたディスク、またはクラスターストレージシステムのいずれかであることが可能である。
【０００８】
通常の状況では、受信器側の記憶装置は「書込み」動作を十分に高速に行うことが可能であり、そのため、リングバッファは空か、いっぱいである度合は低い（ｓｌｉｇｈｔｌｙ  ｆｕｌｌ）かのどちらかである。しかし、負荷の高い環境では、受信側の記憶装置はデータの到着速度に追いつくことができないことが有り得る。このことは、転送セッションが超高速目標速度（ｕｌｔｒａ−ｈｉｇｈ  ｔａｒｇｅｔ  ｒａｔｅ）をもって構成されるとき、または、記憶装置そのものが同時に多くの転送を扱っていること、もしくは予め決められたシステムタスクを行っていることで使用状態になっているとき、に起こり得る。記憶装置のＩ／Ｏ速度が追いつけないときはいつでも、データはリングバッファ内に蓄積されることになる。いったんリングバッファがいっぱいになると、ある数のパケットは廃棄されなければならない。パケット損失が起きると、状況は悪化し得る。理由は、再送信の要求のオーバーヘッドが大量のＣＰＵサイクルを消費する場合があり、これによって、到来するデータの受け入れにおいて受信器側の記憶装置がさらに低速になる場合があるからである。このことはまた、さらなる損失を招く場合がある。結果として記憶装置のＩ／Ｏの速度低下にともなって、深刻な（通常は２０％より高い）損失および転送スループットの大幅な低下が発生する。
【０００９】
過度に負担を掛けることを避けるため、記憶装置のＩ／Ｏがボトルネックになる場合にデータ送信器がゆるやかに低速化するためのフィードバックメカニズムがデータ送信器のために開発される必要がある。一方、このメカニズムは、また、セッションが記憶装置のＩ／Ｏのスループットを監視し十全に利用することを、そのセッションがどこか別の箇所でボトルネックを抱えた場合は別として、可能としなければならない。先の文献は転送パスのボトルネックとなったリンク速度に適応することを提案している。しかし、これらの提案はネットワーク内のボトルネックを考慮するのみであり、エンドシステムのボトルネックには注意を向けていない。
【００１０】
ここに記載されているメカニズムの鍵となる部分は、記憶装置のＩ／Ｏがボトルネックとなっている度合を示すものとしてのリングバッファの占有率を使用することである。リングバッファは転送セッションそのものによって維持されるため、速度制御器にとって所与の瞬間においてリングバッファの占有率ρ(t)を測定することは容易である。割り当てられたリングバッファのトータルのサイズをＢバイトとして、リングバッファ占有率を３つの領域に分割する。具体的には、ρ(t)Ｂが、ρｍｉｎＢ（０≦ρｍｉｎ≦１）よりも小さい場合、そのリングバッファはいっぱいである度合は低く、その記憶装置はボトルネックではないということを暗示する。そのような場合、低速化の必要はない。ρ(t)ＢがρｍｉｎＢとρ'Ｂ （０≦ρｍｉｎ＜ρ'≦１）の間にある場合、そのバッファ内にデータが蓄積され始めている兆候である。転送速度の絶対値は依然として上昇することがあるが、そのペースは低下するはずである。いったんリングバッファ占有率が閾値ρ'Ｂを超えると、転送セッションは、バッファのオーバーフローを避けるためにその速度を低下させなければならない。
【００１１】
以下では、上記目的を実現する、２タイムスケール速度適応設計が記載される。長時間スケールでは、ρ'Ｂの目標レベルでリングバッファ占有率を安定させるために、速度制御器はＩ／Ｏスループットの全体の傾向を継続的に監視する。短時間スケールでは、対応する速度適応は突然のリングバッファ占有率の上昇に対して即座に作動し、これはリングバッファがオーバーフローすることを防ぐ助けになり、従ってオーバーフローに伴うパケット廃棄を最小限にする。どちらの速度適応メカニズムも、図１に示される速度制御器１０１にて実施され得る。
＜長時間スケール速度適応＞
【００１２】
以前に記載されたように、測定されたバッファ占有率ρ(t)が最小閾値ρminを超えたときはいつでもＩ／Ｏ駆動の速度制御は起動される。Ｉ／Ｏ駆動の速度制御がアクティブであると、長時間スケール適応メカニズムは、リングバッファがデータのチャンクの記憶装置（１０４）への書き込みを終了させるたびに転送速度を継続的に更新する。（データのチャンクは、１ブロックからリングバッファの全体までの範囲に及ぶ場合がある）。本実施例ではデータのチャンクはリングバッファの全体のサイズ、すなわち２０４８データブロックの１／３６（２．８％）に等しい。言い換えれば、受信器が書き込み動作を終了させればいつでも、それは速度制御器をトリガし、長時間スケールの速度の更新を行わせる。
【００１３】
有効速度更新期間、すなわち最後の速度更新（書込み完了）とｔの間の期間、をT(t)として、長時間スケールの速度制御器は、新しい転送速度x(t)'を、現在の転送速度x(t)、T(t)、目標リングバッファ占有率ρ'Ｂ、および測定されたリングバッファ占有率ρ(t)Bにもとづいて算出する。計算されたx(t)'はその後、速度更新メッセージ（１０３）を通してデータ送信器に送り返され、次の速度更新イベントが発生するまで使用されることになる。
【数１】
0005342658.tif 000002
この等式に基づいて、いったんρ(t)がρ’を超えると転送速度x(t)は、リングバッファのオーバーフローを避けるために、低下する。速度の変化の量は、重み付け係数γｄｉｓｋによって重み付けされたそれらの差分に比例する。実際には、γｄｉｓｋは経験的に０．５に設定可能である。記憶装置のＩ／Ｏが受信器でボトルネックになっている限り、適応メカニズムは、リングバッファ占有率に従って定期的に転送速度を調整する。測定されたリングバッファ占有率がいったんρ’Bを超えると転送速度は下方へ調整され、Ｉ／Ｏスループットがもはやボトルネックではなくなる（ρ(t)<ρmin）まで、バッファ占有率をバッファの最大のサイズＢ未満に維持するためにさらに積極的に下方へ調整される。
【００１４】
ここで留意すべきはリングバッファが「書込み」動作を終了させた後に速度更新を行うことは、リングバッファ占有率の正確な傾向の監視に役立つということである。通常、書込みサイズはパケットのサイズよりはるかに大きく、「書込み」動作の最中に複数のパケットが受信器に到来することがある。このことは、Ｉ／Ｏが深刻に速度低下している間に特に当てはまる。結果として、「書込み」動作が完了する前に一時的なリングバッファ占有率はたやすく上昇し得る。書込み動作中に速度更新を複数回行うことは、Ｉ／Ｏ装置がリングバッファからデータを捨てる能力にはつながらず、したがって、過剰に高く見込まれたバッファ占有率のために過度に抑えた転送速度を提示することになりかねない。
【００１５】
上記の設計は、測定されたリングバッファ占有率ρ(t)Bと目標バッファ占有率ρ’Bを直接的に比較する。代替の設計は、リングバッファ占有率の予測を算出し、予測された占有率と目標占有率を比較することである。具体的には、直近の動作期間、すなわち、最後の速度更新とｔの間の期間をｗ（ｔ）すると、τ(t)で表される、記憶装置にリングバッファの全体を書き込む期間はτ(t)= B / write_size * w(t)によって見積もることが可能である。ここで、x(t) ρ(t) τ(t)は、リングバッファ占有率の現在の転送速度x(t)、リングバッファ占有率ρ(t)、および直近の期間w(t)に基づく次の書込み動作が完了するときの予測を表す。別の実施形態では、速度更新メカニズムは、この値と目標リングバッファ占有率を比較し、それに従って後続の更新インターバルで転送速度を低下させるかどうかを決定する。
【数２】
0005342658.tif 000003
【００１６】
どちらの設計でも、長時間スケールのメカニズムの目的地は、いったん全体のＩ／Ｏスループットがボトルネックとなった場合に全体のＩ／Ｏスループットを監視し、リングバッファ占有率を目標レベルρ’Bにて安定させることである。これは複数転送（ｍｕｌｔｉｐｌｅ  ｔｒａｎｓｆｅｒ）だけでなく単一転送（ｓｉｎｇｌｅ  ｔｒａｎｓｆｅｒ）にも当てはまる。複数転送を行う場合、各転送セッションはそれ自身のリングバッファを維持し、変化していくバッファ占有率に、同じ調整方法（ｆｏｒｍｕｌａ）に基づいて対応する。従って、各セッションは、有効Ｉ／Ｏ帯域幅を等しく割り当てられる。
＜短時間スケール速度適応＞
【００１７】
長時間スケールの設計は、Ｉ／Ｏの速度低下の全体的な傾向の監視において有効である。しかし、Ｉ／Ｏスループットにおける突然の低下を処理しバッファ占有率の突然の上昇によるパケット損失を回避することには長時間スケールの設計のみでは不十分であり得る。特に、Ｉ／Ｏ書込み動作の期間は劇的に変動する。突然のディスクストールの場合、書込み動作の期間は、しばしば、数秒オーダーであり、この間にリングバッファはその最大のサイズＢに向かって急速に単調に上昇する。このような場合、長時間スケールの速度適応が作動し転送速度を低下させる前にリングバッファはしばしばオーバーフローする。これは図２（ａ）に示される。オーバーフロー期間中（赤線）、受信器は到来するパケットを廃棄しなければならない。
【００１８】
長引いたディスクストールとリングバッファ占有率の突然の上昇に対応するために、ある速度低下メカニズムが、二つの連続する長時間スケールの速度更新の間により短い時間スケールで動作するために必要とされる。一つの特定の実施形態では、短時間スケールの速度が、以下の公式の組に基づいて、ＲＴＴ（ｔ）ごとに調整される。ＲＴＴ（ｔ）は現在測定されているネットワーク往復時間である。
【数３】
0005342658.tif 000004
上記公式において、ρ(t)がρminから１に上昇するにつれ、α(t)は(1- ρmin)/(1- ρ’)から０に低下する。すなわち、
【数４】
0005342658.tif 000005
である。
【００１９】
長時間スケールのメカニズムと対照的に、短時間スケールのメカニズムの第一義的な目的地は、リングバッファのオーバーフローを避けるためにバッファ占有率に対して厳格な制御を適用することである。上記等式によれば、リングバッファ占有率がρ’より大きい限りは短時間スケールのメカニズムは転送速度に対して何倍もの低下を課す。さらに、倍率α(t)は、リングバッファ占有率ρ(t)の減少関数であり、このことは、速度制御器はリングバッファが大きくなるほどより積極的に転送速度を低下させなければならないということを意味する。特に、いったんバッファが最大占有率に近づくと、転送セッションはゼロに近い速度にて殆ど完全に自己加速する。
＜組み合わされた２時間スケール設計＞
【００２０】
図２（ｂ）は２時間スケール設計の協同動作を示す。最初の長時間スケールのメカニズムが開始される前に、転送速度を低下させるために複数の短時間スケールの速度更新が既に作動していることに気付かれたい。これによってリングバッファ占有率の上昇は徐々に収まり、またそれゆえ、図２（ａ）とは対照的に、その後のリングバッファのオーバーフローが避けられる。長時間スケールのメカニズムが、各書込み動作の最後にＩ／Ｏスループットの全体の傾向を監視し、短時間スケールのメカニズムは、書込み動作の間のリングバッファ占有率を活発に低減する。書き込み動作が十分に長い（書込み動作の間の測定されたＲＴＴ（ｔ）よりも長い）場合は、２つ以上の短時間スケールの速度更新が行われることが可能である。
＜複数のボトルネックへの対応＞
【００２１】
記憶装置のＩ／Ｏボトルネックに加えて、他のスループットボトルネックが終端間の転送パスに沿って出現することがある。既に述べられたように、転送はネットワークリンクにてボトルネック化されることがある。提案に係るＩ／Ｏ駆動の制御は、そのようなボトルネックに継続的に適応するあらゆる制御メカニズムと共存することが可能である。例えば、提案に係るＩ／Ｏ駆動の制御は、ＦＡＳＰプロトコル［７］の適応速度制御メカニズムと組み合わされ、共同で速度を計算することが可能である。ボトルネックの別のタイプは、ユーザの集団に課せられる「仮想の」帯域制限である。米国特許出願１１／８４９，７４２号において、集団の全てのユーザが、その転送速度の総計が「仮想の」帯域制限に従うように自分の転送速度を自己調整することが可能であるような仮想のリンク制御フレームワークが記載されている。Ｉ／Ｏ駆動の速度制御メカニズムはそのようなメカニズムとも組み合わせが可能である。
【００２２】
転送セッションが３つのメカニズム全てを組み込む一般的な場合では、３つの全ての速度制御器は同時に稼動し、自己の転送速度を独立的に更新することが可能である。所与の時刻ｔでの全体の転送速度は、ネットワーク速度制御器、仮想リンク速度制御器、およびＩ／Ｏ駆動の制御器によってそれぞれ算出された個々の転送速度からその後選択される。例えば、個別の速度制御器によって算出された最小の速度を選択する最小選択基準を使用可能であり、この算出は下記の式によってなされる。
【数５】
0005342658.tif 000006
【００２３】
特に、Ｉ／Ｏ駆動の速度制御が起動されない場合、算出されたその速度が無限である、すなわちxdisk(t+T)=∞  ρ(t)≦ρminであると想定する。
これは、記憶装置のＩ／Ｏという観点からは転送速度に制限が無いことを事実上意味し、転送速度はネットワークまたは仮想リンクの輻輳の度合に基づいて決定される。
【００２４】
最小の速度基準の根本的理由は、最も輻輳しているボトルネックに従って転送速度を限定することにある。このことによって、いくつものボトルネックをまたぐ転送セッションが、一つ一つのボトルネックにおける輻輳のために不利益を複数回に渡って受けることが避けられる。先行技術によってこの種の輻輳制御スキームは最大−最小適正速度割り当て（ｍａｘ−ｍｉｎ  ｆａｉｒ  ｒａｔｅ  ａｌｌｏｃａｔｉｏｎ）を達成するということが示されている（Ｂａｒｔｅｋ  Ｗｙｄｒｏｗｓｋｉ，  Ｌａｃｈｌａｎ  Ｌ．Ｈ．  Ａｎｄｒｅｗ，  Ｍｏｓｈｅ  Ｚｕｋｅｒｍａｎ  による、“ＭａｘＮｅｔ：  Ａ  Ｃｏｎｇｅｓｔｉｏｎ  Ｃｏｎｔｒｏｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｓｃａｌａｂｌｅ  Ｎｅｔｗｏｒｋｓ”，  ＩＥＥＥ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｌｅｔｔｅｒｓ，  ｖｏｌ．  ７，  ｎｏ．  １０  ，  Ｏｃｔ．  ２００３を参照）。
【００２５】
上記された２時間スケールのＩ／Ｏ速度制御は既存のＦＡＳＰプロトコルの拡張として実施され得る。図３はこの速度制御メカニズムを使う場合と使わない場合での転送能力の比較を示す表である。特に、そのような制御を使わなかった場合は、ＦＡＳＰ転送は、大量のパケット損失とスループットの低下によって、終了まで長時間かかる。Ｉ／Ｏ駆動の速度制御が使用状態の場合、パケット損失の量は５％未満まで低減されることが可能であり、全体のスループットはディスクの容量のスループットのピークに匹敵する程度に十分に高い。一方、稼働中の転送が複数ある場合、それら転送のうちのそれぞれは有効ディスク帯域幅を概ね等しく割り当てられる。
＜例示的実施形態＞
【００２６】
図４に示される、Ｉ／Ｏ駆動の速度制御のためのシステムおよび方法の例示的実施形態において、システムは、ネットワーク４３０越しに互いに接続される第一のホスト４１０および、記憶装置４４０に接続されている第二のホスト４２０、受信プロセスが記憶装置にデータを書き込むために、第二のホストにて実行可能な受信プロセス４２１とデータの通信を行うための、第一のホストにて実行可能な送信プロセス４１１を有する。送信プロセスはデータを受信プロセスに、任意の時刻ｔに特定の可変データ転送速度ｘ（ｔ）にて送信するように構成されており、その受信プロセスは、受信したデータを記憶装置に書き込む前にリングバッファに保存するように構成されている。保存速度制御器は受信プロセスに組み込まれており、その保存速度制御器は：
１）リングバッファの現在の占有率を測定する；
２）現在のデータ転送速度x(t)、測定された現在の占有率、リングバッファの全体のサイズ、および特定の目標占有率値の関数として、更新されたデータ転送速度x'(t)を算出する；
３）更新されたデータ転送速度を送信プロセスに通信する；
ように構成されている。
送信プロセスはデータ転送速度x(t)を更新されたデータ転送速度x'(t)に調整するように構成されている。測定された現在の占有率が特定の目標占有率値より高い場合、記憶速度制御器は、更新されたデータ転送速度x'(t)が現在のデータ転送速度x(t)の低下を表すように構成され得る。
【００２７】
速度制御器は、記憶装置への書込み動作を終了させた後に、更新されたデータ転送速度x'(t)を算出するように、および／または、更新されたデータ転送速度x'(t)を定期的なインターバルにて算出するように、構成され得る。一つの特定の実施形態では、速度制御器は：
１）記憶装置への書込み動作を終了させた後に、現在のデータ転送速度x(t)、測定された現在の占有率、リングバッファの全体のサイズ、および特定の目標占有率値の第一の関数から、更新されたデータ転送速度x'(t)を算出する；
２）定期的なインターバルにて、現在のデータ転送速度x(t)、測定された現在の占有率、リングバッファの全体のサイズ、および特定の目標占有率値の第二の関数から、更新されたデータ転送速度x'(t)を算出する；
ように構成されている。第一の関数および第二の関数は上記された長時間単位の適応および短時間単位の適応のための更新関数に対応し得る。
【００２８】
システムは、複数の送信プロセスおよび受信プロセスを含み得、そのような受信プロセスのそれぞれは、記憶装置に接続され、その各々の送信プロセスのデータ転送速度を更新するための記憶速度制御器およびリングバッファを組み込む。送信プロセスおよび受信プロセスは、仮想キューを維持し仮想キューの占有率をそれらのデータ転送速度の総計に基づいて算出することによって、共同で自らのデータ転送速度の総計を制限する類似したプロセスの集団に属し得る。ここで、各受信プロセスは、仮想キュー占有率に基づいて仮想リンク速度xvl（t）を算出する仮想リンク制御器を更に組み込み、各送信プロセスは、仮想リンク速度xvl（t）、および受信プロセスによって送信された更新されたデータ転送速度x'(t)の関数としてのデータ転送速度を調整する。
【００２９】
受信プロセスは、ネットワーク輻輳の度合を測定しその計測された輻輳に基づいてネットワーク速度xnet（t）を算出するように構成されたネットワーク速度制御器を更に組み込み得る。ネットワーク輻輳の測定の例は、測定された往復の遅延時間に由来するキューイング遅延である。その後、送信プロセスはxnet（t）および受信プロセスから送信された更新されたデータ転送速度の関数としての現在のデータ転送速度を調整する。例えば、送信プロセスは、測定されたネットワーク輻輳、仮想キュー占有率から計算された仮想リンク制御速度xvl（t）および下記数式としての最小選択基準を用いて受信プロセスによって送信された、更新されたデータ転送速度x'(t)から計算されたネットワーク速度xnet（t）の関数として自身のデータ転送速度を調整し得る。
【数６】
0005342658.tif 000007
【００３０】
本発明は、上述の特定の実施形態と共に記載されてきた。当然のことながら、これらの実施形態は、有利と考えられる任意の方法と組み合わされることもあり得る。また、多くの代替、変形、修正が、当業者には自明である。そのような他の代替、変形、修正は添付の特許請求の範囲内にあるものと意図される。
【図１】
0005342658.tif 000015
【図２Ａ】
0005342658.tif 000016
【図２Ｂ】
0005342658.tif 000017
【図３】
0005342658.tif 000018
【図４】
0005342658.tif 000019