(57)【特許請求の範囲】
【請求項１】
データの送信を適応可能に制御するためのコンピュータによって実行される方法であって、
ターゲットへのデータの送信を監視するステップと、
前記データの送信状態に関連した第１パラメータが第１閾値を超えるかどうかを決定する第１の決定ステップであって、前記第１の決定が、ターゲットに送られるべき更なるデータが存在する場合に、当該ターゲットに送られるべき更なるデータの量が前記第１閾値を超えるかどうかに関する決定である、前記第１の決定ステップと、
前記第１パラメータが前記第１閾値を超えることに応じて、適応性帯域幅制御プロセスを使用して、前記ターゲットにデータを送信するために使用される帯域幅を制御するステップであって、前記帯域幅の制御が前記ターゲットへ送ることができるデータの量に関する要求に対する応答を適応性帯域幅制御プロセスから受け取ることを含み、前記データの送信に対して最小量の帯域幅が保証される、前記制御するステップと、
前記データの送信状態に関連した第２パラメータが第２閾値よりも小さいか又は当該第２閾値に等しいかどうかを決定する第２の決定ステップであって、前記第２の決定が前記応答中に指定された前記ターゲットに送りうるデータの量が前記第２閾値よりも小さいか又は等しいかに関する決定である、前記第２の決定ステップと、
前記第２パラメータが前記第２閾値よりも小さいか又は当該第２閾値に等しいことに応じて、前記適応性帯域幅制御プロセスの使用を停止するステップと
を含む、前記方法。
【請求項２】
前記第２パラメータが前記第２閾値よりも大きいことに応じて、送ることができるデータの量に関する要求に対する応答において特定されている量までのみを使用して前記ターゲットにデータを送信するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記第２閾値が、データを送るために保証される帯域幅の最小値を設定するために使用される、請求項１に記載の方法。
【請求項４】
前記制御するステップがアプリケーション層又はトランスポート層において実施される、請求項１に記載の方法。
【請求項５】
データの送信を適応可能に制御するためのコンピュータ・プログラムであって、コンピュータに、請求項１〜４のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
【請求項６】
データ処理システムであって、
バスと、
前記バスに接続された通信ユニットと、
前記バスに接続され、コンピュータ使用可能プログラム・コードのセットを含むメモリと、
前記バスに接続されたプロセッサ・ユニットであって、
ターゲットへのデータの送信を監視し、
前記データの送信状態に関連した第１パラメータが第１閾値を超えるかどうかを決定し（以下、第１の決定）、ここで前記第１の決定が、ターゲットに送られるべき更なるデータが存在する場合に、当該ターゲットに送られるべき更なるデータの量が前記第１閾値を超えるかどうかに関する決定であり、
前記第１パラメータが前記第１閾値を超えることに応じて、適応性帯域幅制御プロセスを使用して、前記ターゲットにデータを送信するために使用される帯域幅を制御し、ここで前記帯域幅の制御が前記ターゲットへ送ることができるデータの量に関する要求に対する応答を適応性帯域幅制御プロセスから受け取ることを含み、
前記データの送信状態に関連した第２パラメータが第２閾値よりも小さいか又は当該第２閾値に等しいかどうかを決定し（以下、第２の決定）、ここで前記第２の決定が前記応答中に指定された前記ターゲットに送りうるデータの量が前記第２閾値よりも小さいか又は等しいかに関する決定であり、
前記第２パラメータが前記第２閾値よりも小さいか又は当該第２閾値に等しいことに応じて、前記適応性帯域幅制御プロセスの使用を停止する
ためのコンピュータ使用可能プログラム・コードのセットを実行し、前記データの送信に対して最小量の帯域幅が保証される、前記プロセッサ・ユニットと、
を含む、前記データ処理システム。
【請求項７】
前記プロセッサ・ユニットが、さらに、
前記第２パラメータが前記第２閾値よりも大きいことに応じて、送ることができるデータの量に関する要求に対する応答において特定されている量までのみを使用して前記ターゲットにデータを送信するためのコンピュータ使用可能プログラム・コードのセットを実行する、請求項６に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、総体的には、データ処理システムの改良に関し、詳しく云えば、データを転送するための、コンピュータによって実行される方法および装置に関するものである。更に詳しく云えば、本発明は、データを転送するために使用される帯域幅を適応可能に制御するためのコンピュータによって実行される方法、装置、およびコンピュータ使用可能プログラム・コードに関するものである。
【背景技術】
【０００２】
ネットワークおよびインターネットの共同使用によって、商業的な通信に革命的変化がもたらされた。ネットワークは、一般に、データを転送するために使用される。サービスの質を向上させるために、多くの分散アプリケーションが大きなバックグラウンド転送を利用する。これらのタイプのバックグラウンド転送によって、ユーザは、これらの転送が完了するのを待ってから他のアクションを取ることを必要としない。例えば、データ・バックアップ、プリフェッチ、企業データの配布、インターネット・コンテンツの配布、およびピア・ツー・ピアのストレージ等を含む広範囲のアプリケーションおよびサービスがバックグラウンド転送を使用している。これらのおよび他のタイプのアプリケーションはネットワーク帯域幅の消費を増大させる。これらのサービスのうちの或るものは帯域幅の要求を潜在的に無制限にされ、その場合、増分的に多くの帯域幅の使用が増分的に良好なサービスを提供する。これらのタイプのアプリケーションに伴う1つの問題点は、ネットワークがデータ転送のためには限定された量の帯域幅しか使用し得ないことである。或るアプリケーションは、他のアプリケーションが非臨界的なものであっても、臨界的な機能を遂行する。一般に、バックグラウンド転送は非臨界的であり、臨界的なネットワーク・トラフィックを減速してすべての使用可能な帯域幅を使用することが可能である。
【０００３】
ネットワークに対するインパクトを軽減するようネットワーク状態に自動的に適応させるために、適応性帯域幅制御が使用されてきた。現在、輻輳を回避するよう種々のアプリケーションによって使用される帯域幅の量を制御するために、種々の適応性帯域幅制御プロセスおよびアルゴリズムが使用される。現在使用可能な適応性帯域幅制御プロセスは、サーバまたはクライアントにおいてローカル・インターフェース・レベルでネットワーク状態を考慮するが、データの転送において存在し得る他の状態を考慮することはできない。
【０００４】
従って、データの転送において帯域幅の使用を適応可能に制御するために、改良されたコンピュータによって実行される方法、装置、およびコンピュータ使用可能プログラム・コードを有することは有利であろう。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、ターゲットへのデータの送信を監視するためのコンピュータによって実行される方法、装置、およびコンピュータ使用可能プログラム・コードを提供することにある。
【課題を解決するための手段】
【０００６】
データの送信状態が閾値を超えるかどうかに関する決定が行われる。データの送信が閾値を超える場合、適応性帯域幅制御プロセスを使用して、データをターゲットに送信するために使用される帯域幅が制御される。この場合、データの送信に関して最小量の帯域幅が保証される。
【発明を実施するための最良の形態】
【０００７】
図１および図２は、本発明の実施例を具現化し得るデータ処理環境の概略図として提供される。図１および図２が、単に例示的なものであること、および本発明の種々の局面または実施例を具現化し得る環境に関する如何なる限定も主張または暗示する意図がないことは当然である。本発明の真意および範囲から逸脱することなく、示された環境に対する多くの修正を施すことが可能である。
【０００８】
図面を参照すると、図１は、本発明の種々の局面を具現化し得るデータ処理システムのネットワークの概略表示を示す。ネットワーク・データ処理システム１００は、本発明の実施例を具現化し得るコンピュータのネットワークである。ネットワーク・データ処理システム１００はネットワーク１０２を含み、そのネットワーク１０２は、ネットワーク・データ処理システム１００内の相互接続された種々の装置及びコンピュータの間の通信リンクを提供するために使用される媒体である。ネットワーク１０２は、有線通信リンク、無線通信リンク、または光ファイバ・ケーブルのような接続機器を含む。
【０００９】
図示の例では、サーバ１０４及びサーバ１０６が記憶装置１０８と共にネットワーク１０２に接続している。更に、クライアント１１０、１１２、及び１１４がネットワーク１０２に接続している。これらのクライアント１１０、１１２、及び１１４は、例えば、パーソナル・コンピュータまたはネットワーク・コンピュータであってもよい。図示の例では、サーバ１０４は、ブート・ファイル、オペレーティング・システム・イメージ、及びアプリケーションのようなデータをクライアント１１０、１１２、及び１１４に提供する。クライアント１１０、１１２、及び１１４は、この例では、サーバ１０４に対するクライアントである。ネットワーク・データ処理システム１００は、図示されてない更なるサーバ、クライアント、及び他の装置を含んでもよい。
【００１０】
図示の例では、ネットワーク・データ処理システム１００は、ネットワーク１０２が、プロトコルのトランスミッション・コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）スイートを使って相互に通信を行うネットワーク及びゲートウェイの世界的な集合体を表す場合、インターネットである。インターネットの中心には、主要ノードまたはホスト・コンピュータ間の高速通信回線のバックボーンがあり、それは、データ及びメッセージを経路指定する数千の商業用、政府機関用、教育用、及びその他のコンピュータ・システムを含む。勿論、ネットワーク・データ処理システム１００は、例えば、イントラネット、ローカル・エリア・ネットワーク（ＬＡＮ）、または広域ネットワーク（ＷＡＮ）のような多数の種々のタイプのネットワークとして具現化することも可能である。図１は、本発明の種々の実施例に対する１つの例として意図されており、種々の実施例に対するアーキテクチャ上の限定として意図されるものではない。
【００１１】
次に図２を参照すると、本発明の種々の局面を具現化し得るデータ処理システムのブロック図が示される。データ処理システム２００は、図１におけるサーバ１０４またはクライアント１１０のようなコンピュータの一例であり、そこには、本発明の実施例に関するプロセスを具現化するコンピュータ使用可能コードまたは命令を設けることが可能である。
【００１２】
図示の例において、データ処理システム２００は、ノース・ブリッジ兼メモリ・コントローラ・ハブ（north bridge and memory controller hub - ＮＢ／ＭＣＨ）２０２及びサウス・ブリッジ兼入出力コントローラ・ハブ（southbridge and input/output controller hub - ＳＢ／ＩＣＨ）２０４を含むハブ・アーキテクチャを使用する。処理ユニット２０６、メイン・メモリ２０８、及びグラフィックス・プロセッサ２１０がノース・ブリッジ兼メモリ・コントローラ・ハブ２０２に接続される。グラフィックス・プロセッサ２１０はアクセラレーテッド・グラフィックス・ポート（acceleratedgraphics port &#8211; ＡＧＰ）を介してノース・ブリッジ兼メモリ・コントローラ・ハブ２０２に接続することも可能である。
【００１３】
図示の例では、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ２１２がサウス・ブリッジ兼入出力コントローラ・ハブ２０４に接続している。オーディオ・アダプタ２１６、キーボード及びマウス・アダプタ２２０、モデム２２２、リード・オンリ・メモリ（ＲＯＭ）２２４、ハード・ディスク・ドライブ（ＨＤＤ）２２６、ＣＤ−ＲＯＭドライブ２３０、ユニバーサル・シリアル・バス（ＵＳＢ）ポート兼他の通信ポート２３２、及びＰＣＩ／ＰＣＩｅデバイス２３４がバス２３８及びバス２４０を介してサウス・ブリッジ兼入出力コントローラ・ハブ２０４に接続している。ＰＣＩ／ＰＣＩｅデバイスは、例えば、イーサネット・アダプタ、アドイン・カード、及びノートブック・コンピュータ用ＰＣカードを含んでもよい。ＰＣＩは、カード・バス・コントローラを使用し、一方，ＰＣＩｅはそれを使用しない。ＲＯＭ２２４は、例えば、フラッシュ・バイナリ入出力システム（ＢＩＯＳ）であってもよい。
【００１４】
ハード・ディスク・ドライブ２２６及びＣＤ−ＲＯＭドライブ２３０はバス２４０を介してサウス・ブリッジ兼入出力コントローラ・ハブ２０４に接続している。ハード・ディスク・ドライブ２２６及びＣＤ−ＲＯＭドライブ２３０は、例えば、統合ドライブ電子機器（integrated drive electronics - ＩＤＥ）インターフェースまたはシリアル拡張テクノロジ接続機構（serialadvanced technology attachment &#8211; ＳＡＴＡ）インターフェースを使用してもよい。サウス・ブリッジ兼入出力コントローラ・ハブ２０４にスーパＩ／Ｏ（ＳＩＯ）デバイス２３６が接続されてもよい。
【００１５】
オペレーティング・システムが処理ユニット２０６において稼動し、図２におけるデータ処理システム２００内の種々のコンポーネントの制御を調整および提供する。クライアントとしてのオペレーティング・システムは、Microsoft Windows XP（Microsoft 及び Windows は、米国の Microsoft 社の商標である）のような商業的に入手可能なオペレーティング・システムであってもよい。Java（商標）プログラミング・システムのようなオブジェクト指向プログラミング・システムがオペレーティング・システムに関連して稼動することも可能であり、データ処理システム２００において実行されるJava プログラムまたはアプリケーションからオペレーティング・システムに対するコールを行うことも可能である（Java は、米国の Sun Microsystems社の商標である）。
【００１６】
サーバとしてのデータ処理システム２００は、例えば、拡張対話式エグゼクティブ（Advanced Interactive Executive &#8211; ＡＩＸ）オペレーティング・システムを稼動する IBM eServereSeries コンピュータ・システムまたは Linux オペレーティング・システムであってもよい（eServer、eSeries、及びＡＩＸは米国のインターナショナル・ビジネス・マシーンズ（ＩＢＭ）社の商標であり、Linuxは米国の Linus Torvalds の商標である）。データ処理システム２００は、処理ユニット２０６において複数のプロセッサを含む対称マルチプロセッサ（ＳＭＰ）システムであってもよい。それとは別に、単一プロセッサ・システムが使用されてもよい。
【００１７】
オペレーティング・システム、オブジェクト指向プログラミング・システム、及びアプリケーションまたはプログラムのための命令がハード・ディスク・ドライブ２２６のような記憶装置上に配置され、処理ユニット２０６による実行のためにメイン・メモリ２０８にロードされる。本発明の実施例に関するプロセスは、処理ユニット２０６がコンピュータ使用可能プログラム・コードを使うことによって遂行される。それらのプログラム・コードは、例えば、メイン・メモリ２０８、リード・オンリ・メモリ２２４のようなメモリに、或いは１つまたは複数の周辺装置２２６及び２３０内に配置される。
【００１８】
図１及び図２におけるハードウェアが実施方法次第で変り得るものであることは当業者には明らかであろう。図１及び図２に示されたハードウェアに加えて、またはそれに代わって、フラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブのような他の内部ハードウェアまたは周辺装置を使用することも可能である。更に、本発明のプロセスはマルチプロセッサ・データ処理システムにも適用することが可能である。
【００１９】
或る実施例では、データ処理システム２００は、オペレーティング・システム・ファイル、及び／又は、ユーザ生成のデータを保存するための不揮発性メモリを提供するようにフラッシュ・メモリと共に構成されるパーソナル・デジタル・アシスタント（ＰＤＡ）であってもよい。
【００２０】
システム・バスは、図２に示されるように、バス２３８またはバス２４０のような１つまたは複数のバスから構成されてもよい。勿論、バス・システムは、任意のタイプの通信ファブリックまたはアーキテクチャを使用して具現化することが可能であり、そのファブリックまたはアーキテクチャに接続された種々のコンポーネントまたはデバイス間のデータ転送を行う。通信ユニットは、図２のモデム２２２またはネットワーク・アダプタ２１２のような、データを送信または受信するために使用される１つまたは複数のデバイスを含んでもよい。メモリは、例えば、メイン・メモリ２０８、リード・オンリ・メモリ２２４、または図２におけるノース・ブリッジ兼メモリ・コントローラ・ハブ２０２において見られるようなキャッシュであってもよい。図１及び図２における図示の例及び上述の例は、アーキテクチャ上の限定を暗示することを意味するものではない。例えば、データ処理システム２００は、ＰＤＡの形態をとることに加えて、タブレット・コンピュータ、ラップトップ・コンピュータ、または電話装置であってもよい。
【００２１】
本発明の種々の局面は、データを転送する際に使用される帯域幅を適応可能に制御するためのコンピュータによって実行される方法、装置、及びコンピュータ使用可能プログラム・コードを提供する。本発明の種々の局面は、ネットワークを介してデータを送信するための或る最小量の帯域幅が保証されるようにデータの送信を適応可能に制御することができる。これらの例では、正規の高インパクトＴＣＰ／ＩＰプロセス対低インパクト適応性プロセスを使用してデータを送ることによって保証される。換言すれば、データは、ネットワークが最小量の帯域幅まで許容するように高速度で送られる。或る場合には、保証された量の帯域幅の場合でも、転送し得るデータの量はネットワーク状態のためにその最小量に達しないことがある。
【００２２】
本発明の種々の局面は、データを転送するための現在の適応性配布機構が如何なる程度の保証も与えないということを承知している。更に、本発明の種々の局面は、適応性帯域幅制御プロセスが使用されない期間が存在する或る最小レベルの帯域幅を与える。帯域幅がそのレベルを超えるとき、どのような帯域幅を最小レベルよりも高いデータ転送速度または率に適用し得るかを決定するために、適応性制御プロセスが使用される。これらの例は適応性帯域幅制御に関連するが、本発明の種々の局面は、１つまたは複数のターゲット・データ処理システムへの任意のタイプの大量データの転送に適用することが可能である。
【００２３】
次に図３に説明を転ずると、本発明の実施例に従って、適応性帯域幅制御において使用されるコンポーネントを示す図が示される。この例では、適応性センダ３００がレシーバ３０２、３０４、及び３０６にデータを送る。ルータ３１０のような経路指定機構にパケット３０８を送ることによってデータが送られる。ルータ３１０は、パケット３０８において見つかった経路指定データに基づいて適切なレシーバにパケット３０８を経路指定するようにまたは送るように働く装置である。ルータ３１０があまりに多くのパケットを処理するように強いられるとき、それはバックログを有する（backlogged）ルータと呼ばれる。換言すれば、バックログを有するルータは、それの待ち行列に最大量の負荷または最大数のパケットを有するルータである。センダとレシーバとの間にはゼロまたはそれ以上のルータが存在する。センダはパケットのソースであり、レシーバは肯定応答のソースである。これらのレシーバがパケット３０８を受信するとき、それらは肯定応答を適応性センダ３００に戻す。この例では、肯定応答は正規のＴＣＰ／ＩＰ通信の一部である。
【００２４】
これらの例では、適応性センダ３００は、図１におけるサーバ１０４のようなデータ処理システムにおけるプロセスとして具現化することが可能である。レシーバ３０２、３０４、及び３０６は、図１におけるクライアント１０８、１１０、及び１１２のような受信装置において実行し得るプロセスである。特に、これらの種々のプロセスは、図２におけるデータ処理システム２００のようなデータ処理システムにおいて具現化することが可能である。
【００２５】
適応性センダ３００は、各レシーバに送られたパケット３０８を追跡する。肯定応答３１２の受信も追跡され、ラウンド・トリップ時間のようなパラメータを識別するために使用される。ラウンド・トリップ時間は、パケットが送られた時間から、肯定応答が受信されるまでの時間である。この例では、ラウンド・トリップ時間は、適応性センダ３００の視点に基づいている。
【００２６】
更に、この情報は、ブロックを識別するためにも使用される。ブロックは、任意のパケットが送られる時に始まる。ブロックを開始させた最初のパケットがレシーバによって肯定応答されるまで、統計上のデータがそのブロック内のすべてのパケットに対して保持される。任意のパケットに対する肯定応答が戻されるとき、適応性センダ３００は、そのブロックのパケットに対する統計値を計算する。換言すれば、１つのブロックには１つ又は複数のパケットが存在するが、そのパケットの数は、ブロックの始めにおける任意の当該パケットに対する肯定応答が返送される前に送られたパケットの量に依存する。更に、適応性センダ３００はウィンドウも識別する。ウィンドウは、そのネットワークにおいて送られてしまったが肯定応答が受信されてないパケットの数である。
【００２７】
更に、適応性センダ３００はルータ３１０に配置されているパケットの数も見積もる。この情報は、「肯定応答されてないパケットの予測数」対「肯定応答されてないパケットの実際の数」を計算するために現在のラウンド・トリップ時間を使って決定される。例えば、現在のラウンド・トリップ時間のためには５個のパケットがネットワーク上に存在しなければならず、しかも８個の肯定応答されてないパケットが適応性センダ３００によって識別される場合、適応性センダ３００は、３個のパケットがルータ３１０に配置されていることを見積もることができる。
【００２８】
適応性センダ３００は、選択された数のパケットをルータ３１０において保つようにしながら、予測されたウィンドウのサイズを増加または減少させることによって速度を制御する。ルータ３１０は「適応性パケット」対「他のネットワーク・トラフィック」の処理において多くの時間を費やすので、大きいウィンドウはより攻撃的である。この場合、適応性センダ３００はルータ３１０に対するアルファ及びベータ・パラメータをチューニングすることが可能である。アルファは、ウィンドウが１パケットだけ増加する前の各接続当たりのルータ３１０におけるパケットの最小数を表す整数である。ベータは、ウィンドウが１パケットだけ減少する前の各接続当たりのバックログ・ルータにおけるパケットの最大数を表す整数である。これらのパラメータは、アルファ及びベータに基づいてウィンドウを調節することによって速度のわずかな増加または減少を可能にする。もう１つのパラメータである閾値は、１つのブロックにおけるパケットの５０％がこの閾値の条件に適合するとき、速度の急激な減少を可能にする。この例では、閾値は、基本ラウンド・トリップ時間から最大ラウンド・トリップ時間までの行程の設定可能なパーセンテージである。この例では、適応性センダ３００は、データが適応性帯域幅制御プロセスに基づいてエンド・ポイントまたはターゲットに送られる速度を変更する。これらの例では、この制御プロセスは、データ転送の或る閾値レベルを超えたデータを転送する場合に使うために使用される。データ転送の閾値設定及び測定は多くの種々の方法で行うことが可能である。例えば、測定は、或る期間にわたって転送されるデータの量であってもよく、リンク速度の合計量の或るパーセンテージであってもよい。
【００２９】
図４に説明を転ずると、本発明の実施例に従って、ＴＣＰ／ＩＰ及び同様のプロトコルが示される。ＴＣＰ／ＩＰ及び同様のプロトコルは通信アーキテクチャ４００によって利用される。この例では、通信アーキテクチャ４００は４層のシステムである。このアーキテクチャは、アプリケーション層４０２、トランスポート層４０４、ネットワーク層４０６、及びリンク層４０８を含む。各層は、種々の通信タスクを処理する責任を負っている。リンク層４０８は、データ・リンク層またはネットワーク・インターフェース層とも呼ばれ、通常は、オペレーティング・システムにおけるデバイス・ドライバ及びコンピュータにおける対応するネットワーク・インターフェース・カードを含む。この層は、光ケーブルまたはイーサネット・ケーブルのような使用されるネットワーク媒体と物理的にインターフェースすることに関するすべてのハードウェアの細部を処理する。
【００３０】
ネットワーク層４０６はインターネット層とも呼ばれ、ネットワークの周囲におけるデータ・パケットの移動を処理する。例えば、ネットワーク層４０６は、ネットワークを介して転送される種々のデータ・パケットの経路指定を処理する。ＴＣＰ／ＩＰスイートにおけるネットワーク層４０６は、インターネット・プロトコル（ＩＰ）、インターネット・コントロール・メッセージ・プロトコル（ＩＰＭＰ）、及びインターネット・グループ・マネージメント・プロトコル（ＩＧＭＰ）を含むいくつかのプロトコルから成る。
【００３１】
次に、トランスポート層４０４は、ネットワーク層４０６とアプリケーション層４０２との間のインターフェースを提供し、２つのホスト・コンピュータ間におけるデータの転送を促進する。トランスポート層４０４は、例えば、アプリケーションからそれに送られたデータをネットワーク層以下に対する適切なサイズのチャンクに分割すること、受信されたパケットに関して肯定応答すること、及び送られたパケットに関して他のエンドが肯定応答することを確実にするためにタイムアウトを設定することのようなものに関連している。ＴＣＰ／ＩＰプロトコル・スイートでは、２つの明らかに異なるデータグラム・トランスポート・プロトコルが存在し、それはＴＣＰデータグラム・プロトコルとユーザ・データグラム・プロトコル（ＵＤＰ）である。ＴＣＰは、データが２つのホストの間で適正に送信されることを保証するために、ドロップアウト検出及び再送信サービスを含む信頼性サービスを提供する。
【００３２】
逆に、ＵＤＰは、データが適正に転送されることを保証するための如何なる機構も設けることなく、データグラムと呼ばれるデータを１つのホストから他のホストに送るだけでずっと簡単なサービスをアプリケーション層に提供する。ＵＤＰを使用するとき、アプリケーション層は信頼性機能を遂行しなければならない。
【００３３】
アプリケーション層４０２は特定のアプリケーションの細部を処理する。リモート・ログインのための Telnet、ファイル転送プロトコル（ＦＴＰ）、電子メール用のシンプル・メール・トランスファ・プロトコル（ＳＭＴＰ）、シンプル・ネットワーク・マネージメント・プロトコル（ＳＮＭＰ）を含む多くの一般的なＴＣＰ／ＩＰアプリケーションがほとんどすべての具現化のために存在する。
【００３４】
これらの例では、ユーザ設定がユーザによって入力されることを可能にするようにデータの転送を適応可能に制御するために、本発明の種々の局面がアプリケーション層４０２において具現化される。このように、ユーザは、適応性帯域幅制御における使用のためにネットワークを介してパケットを送る方法を制御すべく種々の設定を変更することが可能である。ユーザ設定がアプリケーション・レベルから入力されるのを可能にすることによって、ユーザは、種々のタイプのネットワークに関する変更、及び一般には適応性帯域幅制御プロセスによって考慮されない種々のネットワーク状態に関する変更を行うことが可能である。
【００３５】
ユーザが設定し得る１つの設定は、データの転送のために使用されるべき最小量の帯域幅に対する閾値レベルである。データ転送がその閾値を超えるとき、データ転送の高い速度に対して適応性帯域幅制御プロセスが使用される。このように、クライアントに関する状態以外の状態を考慮することが可能である。例えば、本発明の種々の局面は、ユーザが、レシーバまでのパスにおけるホップの数及び大量のトラフィックまたは輻輳を有するレシーバまでのパスにおけるリンクの数のような識別要素に基づいて設定を変更することを可能にする。図示の例はアプリケーション層において具現化されるが、本発明の種々の局面は、トランスポート層４０４のような他の層においても具現化することが可能である。使用される特定の層が特定の実施方法に依存して変ることはあり得る。
【００３６】
次に図５の説明に転ずると、本発明の実施例に従って、適応性帯域幅制御を行うときに使用されるソフトウェア・プロセス及びコンポーネントを示す図が示される。この例では、適応性センダ５００は、図３における適応性センダ３００内のプロセスの更に詳細な図である。適応性センダ５００は、この例では、３つのスレッドを含む。送信スレッド５０２、輻輳スレッド５０４、及びパケット探知スレッド５０６が、１つまたは複数のレシーバにデータを適応可能に送るために使用されるコンポーネントである。送信スレッド５０２は、ソケットへのコールを行うことによってデータを送るために使用される。ソケットは、ＴＣＰ／ＩＰスタックにおけるＴＣＰ／ＩＰプロトコルのようなネットワーク・プロトコルにアプリケーションを接続するソフトウェア・オブジェクトである。送信スレッド５０２は、パケット５１２においてデータを転送する。接続またはリンクによって許容される転送の速度が帯域幅の閾値または最小レベルを超える場合、送信スレッド５０２は、如何に多くのデータをその送信スレッド５０２が送り得るデータの量を問合せるための要求５０８を輻輳制御スレッド５０４に送る。輻輳制御スレッド５０４は、送り得るデータの量を知らせる応答５１０を返送する。送信スレッド５０２は応答５１０を使って、送信のためのパケット５１２を送る。
【００３７】
応答５１０を使用する際、何らかの理由で、その送られるべきデータが、保証された量または閾値レベルよりも少ない場合、送信スレッド５０２はその応答を無視し、帯域幅の最小量が再び超えられるまで、最早輻輳制御スレッド５０４からのこの情報を要求しない。これらのパケットは、バックログ・ルータがパケットをそれらの宛先に経路指定するまで、バックログ・ルータ・キュー５１４に保存される。バックログ・ルータ・キュー５１４は、図３におけるルータ３１０のようなバックログ・ルータ上に設けられる。パケットが受信されるとき、肯定応答５１６が適応性センダ５００に返送される。この例では、説明の便宜上、保証された量に基づいてデータを送るためのプロセスまたはロジックが送信スレッド５０２によって実行される。勿論、この特定のプロセスは、輻輳制御スレッド５０４において具現化することも可能である。このタイプの具現化では、送信スレッド５０２は、送信し得るデータの量に関して、いつも輻輳制御スレッド５０４に問合せるであろう。
【００３８】
輻輳制御スレッド５０４は、適応性帯域幅制御プロセスを遂行することによって送信されるべきデータの量を識別する。これらの例における輻輳制御スレッド５０４は、ネットワーク状態における変化に応答して、ネットワークを介してデータ・パケットを送信するための送信速度を適応可能に識別するために、適応性帯域幅制御プロセスを使用する。これらのネットワーク状態は、例えば、適応性センダによって処理される輻輳の量に加えて、種々の他のデータ送信によるネットワーク上の輻輳の量を含む。換言すれば、データが送られる速度の割合はネットワーク状態に従って変化する。輻輳制御スレッド５０４は、ユーザによって設定される種々のパラメータに基づいて最小のネットワーク・インパクトを維持するためにスピード・アップまたはスロー・ダウンする種々の割合を識別する。このプロセスはキュー５１８に配置されている情報を使用する。特に、パケット探知スレッド５０６がネットワークからパケット及び肯定応答をグラブし、パケット情報５２０及び肯定応答情報５２２をキュー５１８に入れる。パケット探知スレッド５０６は、パケット及び肯定応答をフィルタし、輻輳制御スレッド５０４が必要とする適切なデータをキュー５１８に入れる。これとは別に、パケット及び肯定応答全体が輻輳制御スレッド５０４による処理のためにキュー５１８に入れられてもよい。キュー５１８における情報は、パケットが送られたときから、そのパケットに対する肯定応答が受信されるまでのラウンド・トリップ時間のようなパラメータを識別するために輻輳制御スレッド５０４によって使用される。輻輳制御スレッド５０４によって識別及び維持され得る、キュー５１８における情報からの他のパラメータはブロック、ウィンドウ、及びバックログ・ルータにおけるパケットを含む。
【００３９】
更に、本発明の種々の局面は、ユーザ定義されたパラメータ５２６を設定するために使用することが可能なユーザ・インターフェース５２４を含む。ユーザ・インターフェース５２４は、パラメータ・スレッド５２８によって提供される。一般に、パラメータは、適応性プロセスが最初にシステム上に設定されるときに設定される。これらのパラメータは、ユーザ・インターフェース５２４及びパラメータ・スレッド５２８を通して変更することが可能である。ユーザ定義されたパラメータ５２６は、ディスクのような不揮発性メモリに保存される。これらのパラメータは、その後、適応性帯域幅制御プロセスが開始するときに読み取ることができる。ユーザ・インターフェース５２４は、適応性帯域幅制御プロセスを遂行するとき、輻輳制御スレッド５０４による使用のためにユーザが種々のパラメータを選択または入力することを可能にする。
【００４０】
これらの例では、本発明の種々の局面は、適応制御プロセスを使用することなくデータを転送するための最小レベルまたは速度として使用される閾値を、ユーザが入力または選択することを可能にする。本発明の種々の局面は、データを宛先またはターゲットに送るための閾値を使用する。データ転送がこの閾値を超えるとき、データを転送するときに使用するための適応性帯域幅制御プロセスが開始される。何らかの理由で、転送されるデータの量が閾値よりも少ないことを適応性帯域幅制御プロセスが表示する場合、この表示は、そのプロセスがデータを送ることによって無視される。このように、本発明の種々の局面は、保証された転送速度でデータを送る場合、適応性帯域幅制御を提供する。これらの例において、設定することが可能な他のパラメータは、閾値、ラウンド・トリップ時間の最大変化、ベータ、ラウンド・トリップ時間の平滑化、及び最大待ち時間を含む。ラウンド・トリップ時間の最大変化は、前に測定されたラウンド・トリップ時間に関連する現在の測定されたラウンド・トリップ時間の変化の量を制限するために使用されるパラメータである。プロセスは、現在のラウンド・トリップ時間、最大ラウンド・トリップ時間、及び基本ラウンド・トリップ時間を追跡する。
【００４１】
輻輳制御スレッドは、ソケットごとのラウンド・トリップ時間及びそのシーケンスを追跡する。１つのパケットが１０のラウンド・トリップ時間を有し、第２のパケットが２０のラウンド・トリップ時間を有する場合、第２のパケットのラウンド・トリップ時間は、１.５のラウンド・トリップ時間最大変化値によって制限される。たとえ実際のラウンド・トリップ時間が２０であっても、そのラウンド・トリップ時間値は、１０ｘ１.５＝１５として記録される。従って、その後のパケットは、最大 １.５ｘ１５ のラウンド・トリップ時間を持ち得るし、第２のパケットに対してそのラウンド・トリップ時間が記録される。
【００４２】
一般に、ネットワークは或る量のランダム性を有する。このパラメータは、適応性帯域幅制御プロセスが過度に大きいまたは過度に小さいラウンド・トリップ時間を無視することを許容するが、それらがかなり頻繁に生じる場合には、大きいラウンド・トリップ時間を許容する。このパラメータは、どのくらいの大きさの変化が許容されるかをユーザが設定することを可能にする。
【００４３】
これらの例におけるラウンド・トリップ時間平均化パラメータは、ラウンド・トリップ時間の測定が指数型減衰によってどのくらい平滑化されるべきであるかを表すために使用される整数である。その指数型減衰は前の測定を平均化することによって行われる。このパラメータは、適応性帯域幅制御プロセスが、ラウンド・トリップ時間における変動を過剰補償することによって不規則に振舞うケースを助けることがある。一般に、平滑化は、最大変化パラメータが考慮される前に生じる。
【００４４】
最大待ち時間は、１つの接続が送信を断念してリ設定する前に最大ラウンド・トリップ時間の何倍の時間の間その送信を待つであろうということを表すパラメータである。時には、追加のデータを送る前にセンダを長期間の間待たせるネットワークでは、肯定応答が喪失されることがある。これは、データが送られる前にあまり多くの時間が経過した場合、適応性帯域幅制御のプロセスをリ設定するためのリセット値である。閾値パラメータに関しては、パケットのラウンド・トリップ時間がソケットを介して送られるとき、その時間は選択された範囲内に落着く傾向がある。この状況は、特に、ネットワークがアイドル中であるときに真である。
【００４５】
閾値は、最小ラウンド・トリップ時間から最大ラウンド・トリップ時間までの過程のパーセンテージである。例えば、２０％の閾値は、その閾値が基本ラウンド・トリップ時間から最大ラウンド・トリップ時間までの過程の２０％であることを意味する。ネットワークのタイプ次第で、ラウンド・トリップ時間は多少の変動を持つであろう。一般に、種々の変動が種々の閾値を必要とする。例えば、十分に作用するローカル・エリア・ネットワークは、低い閾値を可能にする非常に小さいラウンド・トリップ時間を有するであろう。広域ネットワークは、高いラウンド・トリップ時間変動を有するであろう。このタイプのネットワークの場合、高い閾値が必要である。この特定のパラメータは、データを送る際に遭遇し得る種々のタイプのネットワークを考慮するようにユーザ構成可能なものである。閾値パラメータに関して、パケットのラウンド・トリップ時間がソケットに送られるとき、その時間は或る選択された範囲内に落着く傾向がある。この状況は、特に、ネットワークがアイドル中であるときに真である。
【００４６】
パケットのラウンド・トリップ時間が閾値よりも遅い場合、このパケットは遅いと見なされる。１つのブロックにおけるパケットの５０％が遅いと見なされる場合、ウィンドウは半分にカットされ、配布速度をかなり減少させる。その結果、この値のユーザ構成を許容することは、種々のネットワーク・タイプ及び状態を考慮することを可能にする。
【００４７】
次に図６に説明を転ずると、本発明の実施例に従って、パラメータに関するユーザ設定を構成するためのプロセスのフローチャートが示される。図６に示されるプロセスは、図５における送信スレッド５０２において具現化することが可能である。このプロセスは、ユーザが、適応性帯域幅制御において使用されるパラメータを定義または変更することを可能にするために使用される。これらの例では、パラメータは、閾値、ラウンド・トリップ時間の最大変化、ラウンド・トリップ時間の平滑化、最大待ち時間、及びベータ閾値である。
【００４８】
プロセスは、ユーザ設定を提示することによって始まる（ステップ６００）。これらの設定は、図５におけるユーザ・インターフェース５２４のようなユーザ・インターフェースにおいて提示することが可能である。そこで、プロセスはユーザ入力を受ける（ステップ６０２）。ユーザ入力がパラメータにおける設定を変更するかどうかに関する決定が行われる（ステップ６０４）。ユーザ入力が設定を変更する場合、旧い設定が新しい設定でもって置換される（ステップ６０６）。しかる後、プロセスは、これらの設定をユーザに提示するためにステップ６００に戻る。
【００４９】
再びステップ６０４を参照すると、ユーザ入力が設定を変更しない場合、ユーザ入力がユーザ設定を変更するプロセスを終了すべきかどうかに関する決定が行われる（ステップ６０８）。ユーザ入力がそのプロセスを終了すべきでない場合、プロセスはステップ６００に戻る。そうでない場合、ユーザ設定が保存され（ステップ６１０）、しかる後、プロセスが終了する。これらの設定は、これらの例では、図５におけるユーザ定義されたパラメータ５２６として保存される。
【００５０】
次に図７に説明を転ずると、本発明の実施例に従って、送信スレッドに関するプロセスのフローチャートが示される。図７に示されたプロセスは、図５における送信スレッド５０２のような送信スレッドにおいて具現化することが可能である。
【００５１】
プロセスは、受信されるべきデータを送ることによって始まる（ステップ７００）。しかる後、レシーバに送られるべき更なるデータが存在するかどうかに関する決定が行われる（ステップ７０２）。送られるべき更なるデータが存在する場合、データの送信が第１閾値を超えるかどうかに関する決定が行われる（ステップ７０４）。ステップ７０４における決定は、多くの種々の方法で数量制限されることによって行うことも可能である。例えば、閾値を超えたかどうかを決定するために、その送られたデータの量及びデータを送るために必要な時間が使用されてもよい。閾値は、その接続に関する速度の或るパーセンテージよりも大きい速度が使用されるかどうかの決定であることもある。この閾値は、適応性帯域幅制御が行われるレベルを設定するために使用される。
【００５２】
データの送信状態が第１閾値を超える場合、プロセスは、送ることができるデータの量に関する要求を輻輳制御スレッドに送る（ステップ７０６）。しかる後、プロセスは応答を受ける（ステップ７０８）。この応答は、レシーバに送り得るデータの量を指定する。次に、そのデータの量が第２閾値よりも少ないかまたはそれに等しいかに関する決定が行われる（ステップ７１０）。この第２閾値は、データを送るために保証される帯域幅の最少量を設定するために使用される。第２閾値は、特定の実施方法次第で第１閾値と同じ値であることもある。
【００５３】
応答におけるデータの量が第２閾値よりも少なくないかまたはそれに等しくない場合、応答において指定されたデータの量までのみの量を使ってデータが送られる（ステップ７１２）。次に、送られるべき更なるデータが存在するかどうかに関する決定が行われる（ステップ７１４）。更なるデータが存在しない場合、プロセスは終了する。
【００５４】
更なるデータが存在する場合、プロセスは、別の要求を輻輳制御スレッドに送るためにステップ７０６に戻る。再び、ステップ７１０に関連して、応答におけるデータの量が第２閾値よりも少ないかまたはそれに等しい場合、その応答は無視され（ステップ７１６）、プロセスはデータを送るためにステップ７００に戻る。再びステップ７０２に関連して、更なるデータが存在しない場合、プロセスは終了する。
【００５５】
次に図８に説明を転ずると、本発明の実施例に従って、パケット探知スレッドに関するプロセスのフローチャートが示される。図８に示されたプロセスは、図５におけるパケット探知スレッド５０６において具現化することが可能である。
【００５６】
プロセスは、パケットが検出されたかどうかを決定することによって始まる（ステップ８００）。パケットが検出されている場合、プロセスはそのパケットからパケット識別子及びタイムスタンプを取り出す（ステップ８０２）。次に、プロセスはそのデータをキューに保存する（ステップ８０４）。このキューは、ラウンド・トリップ時間を決定するとき及び適応性帯域幅制御プロセスを遂行するときそのデータを使用し得るよう、輻輳制御スレッドによってアクセス可能である。
【００５７】
再びステップ８００に関連して、パケットが検出されてない場合、肯定応答が検出されたかどうかに関する決定が行われる（ステップ８０６）。肯定応答が検出されてない場合、プロセスはステップ８００に戻る。ステップ８０６において肯定応答が検出されていた場合、その肯定応答に対するパケット識別子及びタイムスタンプが取り出される（ステップ８０８）。そこで、プロセスは、上述のようにステップ８０４に進む。
【００５８】
次に図９に説明を転ずると、本発明の実施例に従って、輻輳制御スレッドに関するフローチャートが示される。この例では、図９に示されるプロセスを、図５における輻輳制御スレッド５０４において具現化することが可能である。
【００５９】
プロセスは、送信スレッドから要求を受けることによって始まる（ステップ９００）。この要求は、送ることが可能なデータの量に関する識別情報を要求する。しかる後、データがキューから引き出される（ステップ９０２）。このデータは到達時間及びパケット識別子を含む。しかる後、ラウンド・トリップ時間がキューにおけるデータから識別される（ステップ９０４）。次に、ユーザ定義されたパラメータが得られる（ステップ９０６）。これらのパラメータは図５におけるユーザ定義されたパラメータ５２６から生じる。しかる後、プロセスは適応性帯域幅制御プロセスを実行する（ステップ９０８）。このプロセスは、例えば、輻輳制御スレッドに含まれたステップであってもよい。それとは別に、そのスレッドはステップ９０８における機能または外部プロセスをコールしてもよい。そこで、プロセスは結果を得て（ステップ９１０）、送ることが可能なデータの量と共に応答が返送され（ステップ９１２）、しかる後、プロセスは終了する。
【００６０】
次に図１０に説明を転ずると、本発明の実施例に従って、適応性帯域幅制御を遂行するためのプロセスのフローチャートが示される。図１０に示されるプロセスは、図９におけるステップ９０８を更に詳細に説明したものである。
【００６１】
プロセスは、最小ラウンド・トリップ時間及び最大ラウンド・トリップ時間を識別することによって始まる（ステップ１０００）。しかる後、ウィンドウが識別される（ステップ１００２）。そこで、プロセスは、１つの肯定応答当たりの閾値の上及び下におけるパケットの数を識別する（ステップ１００４）。次に、プロセスは、１つのブロックにおけるパケットの５０％が閾値の上であるかどうかを決定する（ステップ１００６）。１つのブロックにおけるパケットの５０％が閾値の上でない場合、予想されるスループットが計算される（ステップ１００８）。ステップ１００８では、予想されるスループットは次式（１）によって計算される。
[数１]
Ｅ  ←  Ｗ／minRTT                                    （１）
【００６２】
上式（１）において、Ｅは予想されるスループットであり、Ｗはウィンドウであり、そして minRTT はキューから得られたラウンド・トリップ時間からわかった最小ラウンド・トリップ時間である。しかる後、プロセスは実際のスループットを識別する（ステップ１０１０）。実際のスループットは次式（２）を使って識別される。
[数２]
Ａ  ←  Ｗ／observedRTT（２）
【００６３】
上式（２）において、Ａは実際のスループットであり、Ｗはウィンドウであり、そして observedRTT は、パケットが送られるときおよび肯定応答が受信されるときからの時間の差を使って測定される値である。その結果、予想されるスループットは、アイドル・ネットワークでは最小ラウンド・トリップ時間がいつもパケットを送ることの結果であるという予想が存在するので、最小のラウンド・トリップ時間に基づいている。実際のスループットは、現在のラウンド・トリップ時間が最小ラウンド・トリップ時間よりも大きいという現在のネットワーク状態に基づいている。これらの例では、最小ラウンド・トリップ時間は基本ラウンド・トリップ時間と同じである。そこで、プロセスはバックログ・ルータにおけるパケットの数を計算する（ステップ１０１２）。パケットの実際の数は次式（３）を使って算定される。
[数３]
Diff  ←  （Ｅ−Ａ）・minRTT                          （３）
【００６４】
上式（３）において、Diff はバックログ・ルータにおけるパケットの数であり、Ｅは予想されるスループットであり、Ａは実際のスループットであり、そしてminRTT はわかっている最小ラウンド・トリップ時間である。
【００６５】
次に、バックログ・ルータにおけるパケットの数がアルファよりも少ないかどうかに関する決定が行われる（ステップ１０１４）。上述のように、アルファは、ウィンドウが１パケットだけ増加する前に１つの接続当たりのバックログ・ルータに存在すべきパケットの数を表す値である。バックログ・ルータにおけるパケットの数がアルファよりの少ない場合、プロセスは１だけウィンドウをインクリメントする（ステップ１０２２）。しかる後、プロセスは、ウィンドウ・サイズまでデータを送ることが承認され（ステップ１０１８）、しかる後、プロセスは終了する。
【００６６】
再び、ステップ１０１４に関連して、バックログ・ルータにおけるパケットの数がアルファよりも少なくない場合、パケットの数がベータよりも大きいかどうかに関する決定が行われる（ステップ１０１６）。パケットの数がベータよりも大きい場合、ウィンドウ・サイズが１だけ減少する（ステップ１０２４）。そこで、プロセスは、上述のようにステップ１０１８に進む。そうでない場合、プロセスは、ウィンドウ・サイズを変更することなくステップ１０１８に進む。
【００６７】
ステップ１００６に関連して、１つのブロックにおけるパケットの５０％が閾値を超える場合、ウィンドウは半分だけ減少する（ステップ１０２０）。そこで、プロセスは、上述のように、ステップ１０１８に進む。
【００６８】
図１０に示されたプロセスは、ACM SIGOPS Operating Systems Review 誌、Vol. 36、Issue SI Winter 2002、pp. 1-15 における“TCP Nice : A Mechanism for Background Transfers”と題したVenkataramani 氏他による記事に記載された Nice アルゴリズムのような現在使用可能な帯域幅制御アルゴリズムに対する修正に基づいている。
【００６９】
NICE_FAST_RETURN は、設定されたとき、EWOULDBLOCK の errno を伴う最初の失敗した send() 時に高速開始フェーズを抜け出す。これは、高速開始モードにおいて費やされる時間の量を最小にする。ソケットの出力キューを満たすことが非常に高速でなければならないので、この時間の量はゲートウェイにとって利するものではない。デフォルトが設定される。
【００７０】
NICE_INTERFACEは、nice によって使用されるべきインターフェース（ネットワーク・カード識別子）である。このとき、適応性帯域幅制御プロセスは正しいインターフェースを動的に決定することができない。従って、そのインターフェースは、それが第１アクティブ・インターフェースでない場合、相互に設定される必要がある。一般に、これは、“eth1”のようなものに設定されるであろう。デフォルトが設定解除される。
【００７１】
NICE_MAX_MULT は、maxRTT に対する最小値を baseRTT の倍数として指定する浮動小数点数である。それは、設定されるとき、maxRTTに対する過度に低い値及びそれに付随する傾向のある低いスループットを防ぐのを支援しなければならない。デフォルトは 0.0 である。
【００７２】
NICE_MIN_MSS は、使用されるべき最小ＭＳＳを表す整数である。効率に関しては、オペレーティング・システムによって提供された低い値がNICE_DEFAULT_MSS に利するように無視される。デフォルトは 1000 である。
【００７３】
NICE_MIN_PACKET は、１回に送られるべきデータの最小量を指定する整数である。これは、 ok_to_send がその指定された値よりも小さい場合にそれが０に設定されるという点でNICE_MIN_SEND とは異なる。これは、輻輳制御スレッドが１バイトのような非常に小さい値のものを送るよう送信スレッドに命じ続けるという状況を回避するためである。この値を１０に設定することによって、輻輳制御スレッドは、少なくとも１０バイトが送られるまで待つ（計算が１０を指定するまで０に戻る）であろう。デフォルトは０である。
【００７４】
NICE_MIN_SEND は、輻輳制御スレッドが少なくともこの量のデータを送るよう送信スレッドに常時命じていることを意味するok_to_send の最小値を指定する整数である。これを１０に設定することによって、たとえ適応性計算が３を指定しても、輻輳制御スレッドは１０に戻る。デフォルトは０である。
【００７５】
NICE_NANO_FIXED は、インターネット・コールバック機能、select_delay() が使用時には休眠しているマイクロ秒の数を指定する整数である。
【００７６】
NICE_NANO_FIXED は、コールバックが select_delay() 以外にものに設定されるときには効果はない。それが設定されない時、最終ブロックのスループット（最終ブロックにおける最速のパケットのＲＴＴおよびそのブロックのサイズによって決定される）によって表されるように、パケットを送るに十分な空きが存在するためにそれが取るべき長さに基づいて、遅延が動的に計算される。それが１２３４に設定されるとき、nanosleep()はコールされず、即ち、遅延がゼロに動的に計算され、nanosleep() が０の値でコールされるが、それは或るシステム１２３４では１０ms程度の遅延であってもよく、その他の場合はnanosleep() をコールせず、指定されたマイクロ秒の数（デフォルトは０である）でもって nanosleep() をコールする。
【００７７】
NICE_PCAP_TIMEOUT は、捕捉されたパケットのリストを戻すまえにオペレーティング・システムが待たなければならない長さを表す整数である。Linuxシステムは、それが必要とする長さに関係なく１つのパケットが使用可能になるまで待つだけなので、この変数は Linux システムに影響を与えない。Solaris のような、この変数が影響を与えるシステムでは、タイムアウトが低く設定されるときには正確なＲＴＴを得ること及びネットワークがアイドル中であるときにＣＰＵ時間を浪費することの間にはトレードオフが存在する。デフォルトは１０ms（Solarisにおける最低のサポートされた値）である。
【００７８】
NICE_QUEUE_LIMIT は、輻輳スレッドにより読み出された探知スレッドによって書き込まれたパケットのキューの最大長を指定する整数である。キューが長ければ長いほどnice の応答性は悪くなる。というのは、輻輳スレッドが作用している情報は、パケットがキューを通して自身の方向に進むために、如何に長くても遅延されるためである。デフォルトは１０である。
【００７９】
NICE_RTT_MAX_CHNGE は、基本及び最大のＲＴＴが前の値に関して変ることを許容される最大量を表す整数である。設定されるとき、適応性帯域幅制御プロセスは、擬似の極端なＲＴＴ値に関してより寛容でなければならない。デフォルトは１.５である。
【００８０】
NICE_RTT_MIN_STDSは、ＲＴＴが基本ＲＴＴよりも大きいと見なさなければならないので、基本ＲＴＴよりも大きい標準偏差の最小数を表す整数である。デフォルトは０である。
【００８１】
NICE_RTT_SMOOTHING は、前の測定値を平均化することによって行われる指数型減衰によって平滑化されなければならないＲＴＴ（ラウンド・トリップ時間）の測定値の量を表す整数である。これを設定することは、ＲＴＴにおける各変動を過剰補償することによってniceが不規則に振舞う場合の助けになり得る。デフォルトは５０である。
【００８２】
NICE_RTT_STD_SMOOTH は、 NICE_RTT_SMOOTHING と同じであるが標準偏差に対する整数である。標準偏差は、最近のＲＴＴ測定のウェート付けされた平均に基づいている。デフォルトは０である。
【００８３】
NICE_SEND_RTX_Q は、設定されるとき、送信スレッドは、ＲＴＴを計算するために使用される rtx_q に各出力パケットの見積もりを追加または更新するであろう。送信スレッドは、それがパケットを脱落しないという利点を有するが、出力時間の見積もりが不正確であることがある。デフォルトが設定される。
【００８４】
NICE_THROUGHPUT_AVG は、スループット計算に含まれるべき最近のパケットの量を表す整数である。大きな値はより正確なスループット計算を生じるが、しかし、低い応答性であることを犠牲にしなければならない。デフォルトは２０である。
【００８５】
NICE_THROUGHPUT_START は、スループット計算を始める前に送信されなければならないパケットの最小数を表す整数である。これは、低速リンク・キューが当初は空であったことを説明するためであり、従って、ソケットの初期部分中のスループットはソケットを代表するものではあり得ず、無視されなければならない。デフォルトは１００である。
【００８６】
NICE_WAIT_BASE は、１つの接続が、送信を断念して snd_nxt 及び snd_una をリ設定する前に、v_baseRTT（グローバル最小ＲＴＴ）の何倍の時間を送信のために待つかを表す整数である。計算されたタイムアウトは、NICE_WAIT_MAXに対するタイムアウトに加えられる。デフォルトはゼロである。
【００８７】
NICE_WAIT_MAX は、１つの接続が、送信を断念して リ設定する前に、何倍の v_maxRTT（グローバル最大ＲＴＴ）を送信するのを待っているかを表す整数である。デフォルトは優先順位に基づいている。
【００８８】
従って、本発明の種々の局面は、データ転送の速度を調節するためのコンピュータによって実行される方法、装置、およびコンピュータ使用可能プログラム・コードを提供する。
【００８９】
本発明は、全体的にハードウェアの実施例、全体的にソフトウェアの実施例、またはハードウェア要素及びソフトウェア要素の両方を含む実施例の形態を取ることが可能である。好適な実施例では、本発明は、ファームウェア、常駐ソフトウェア、マイクロコード等を含むがそれに限定されないソフトウェアにおいて具現化される。
【００９０】
更に、本発明は、コンピュータまたは任意の命令実行システムによってまたはそれに関連して使用するためのプログラム・コードを提供する、コンピュータ使用可能媒体またはコンピュータ可読媒体からアクセスし得るコンピュータ・プログラムの形態を取ることが可能である。この説明のために、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによってまたはそれに関連して使用するためのプログラムを含み、保存、通信、伝播、または搬送することが可能な任意の有形の装置であってもよい。
【００９１】
その媒体は、電子的、磁気的、光学的、電磁的、赤外線式、または半導体型システム（または装置またはデバイス）、或いは伝播媒体であってもよい。コンピュータ可読媒体の例は、半導体またはソリッド・ステート・メモリ、磁気テープ、取外し可能なコンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、固定磁気ディスク、及び光ディスクを含む。光ディスクの現在の例は、コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ）、コンパクト・ディスク・リード／ライト（ＣＤ−Ｒ／Ｗ）、及びＤＶＤを含む。
【００９２】
プログラム・コードを記憶及び／又は実行するに適したデータ処理システムは、システム・バスを介してメモリ素子に直接に又は間接的に接続された少なくとも１つのプロセッサを含むであろう。メモリ素子は、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量記憶装置、及び、実行中に大容量記憶装置からコードが検索されなければならない回数を少なくするために少なくとも幾つかのプログラム・コードの一時的記憶装置を提供するキャッシュ・メモリを含むことが可能である。
【００９３】
入出力またはＩ／Ｏ装置（キーボード、ディスプレイ、ポインティング・デバイス等を含むがそれに限定されない）は直接にまたは介在のＩ／Ｏコントローラを通してシステムに接続することも可能である。
【００９４】
ネットワーク・アダプタは、データ処理システムが介在の私設又は公衆ネットワークの介入を通して他のデータ処理システム或いはリモート・プリンタ又は記憶装置に結合されるのを可能にするために接続されてもよい。モデム、ケーブル・モデム、及びイーサネット・カードは幾つかの現在使用可能なタイプのネットワーク・アダプタである。
【００９５】
本発明に関する記述は、図解及び説明を目的として示されたが、網羅的であること又は開示された形式の発明に限定されることを意図するものではない。当業者にとって、多くの修正及び変更が明らかであろう。実施例は、本発明の原理を説明するために、及び意図された特定の用途に適するような種々の修正を持った種々の実施例に関して当業者が本発明を理解することを可能ならしめるために選択及び記述された。
【図面の簡単な説明】
【００９６】
【図１】本発明の局面を具現化し得るデータ処理システムのネットワークの概略図である。
【図２】本発明の局面を具現化し得るデータ処理システムのネットワークのブロック図である。
【図３】本発明の実施例に従って、適応性帯域幅制御において使用されるコンポーネントを示すブロック図である。
【図４】本発明の実施例に従って、ＴＣＰ／ＩＰ及び同様のプロトコルを表す概略図である。
【図５】本発明の実施例に従って、適応性帯域幅制御を行う場合に使用されるソフトウェア・プロセスおよびコンポーネントを示すブロック図である。
【図６】本発明の実施例に従って、パラメータに対するユーザ設定を行うためのプロセスのフローチャートである。
【図７】本発明の実施例に従って、送信スレッドのためのプロセスのフローチャートである。
【図８】本発明の実施例に従って、パケット探知スレッドのためのプロセスのフローチャートである。
【図９】本発明の実施例に従って、輻輳制御スレッドのためのプロセスのフローチャートである。
【図１０】本発明の実施例に従って、適応性帯域幅制御を遂行するためのプロセスのフローチャートである。
【図１】
0004791322.tif 000002
【図２】
0004791322.tif 000003
【図３】
0004791322.tif 000004
【図４】
0004791322.tif 000005
【図５】
0004791322.tif 000006
【図６】
0004791322.tif 000007
【図７】
0004791322.tif 000008
【図８】
0004791322.tif 000009
【図９】
0004791322.tif 000010
【図１０】
0004791322.tif 000011