(57)【特許請求の範囲】
【請求項１】
ネットワークデバイスであって、
ネットワークカードと、
少なくとも１つのプロセッサと、
メモリと、
前記少なくとも１つのプロセッサ上で実行されるネットワークインターフェイスドライバとを含み、
前記ネットワークインターフェイスドライバは、
ソフトウェアアプリケーションによって生成され発送された第１の組のデータパケットを、前記ネットワークカードによる送信のために受信し、
受信された前記第１の組のデータパケットに関連付けられた記述子を第１の順序で一次送信キューに格納し、
受信された前記第１の組のデータパケットに関連付けられた前記記述子を、前記ネットワークカードおよび前記少なくとも１つのプロセッサのうちの一方上で実行されるデータトラフィックシェーピングモジュールに転送し、
受信された前記第１の組のパケットのうちの１つのパケットが前記ネットワークカードによって順調に送信されたという判断に応答して、パケット送信完了メッセージを前記ソフトウェアアプリケーションに通信するように構成され、前記ソフトウェアアプリケーションは、前記ネットワークインターフェイスドライバからのパケット送信完了メッセージの受信を待ってから、追加のデータパケットを前記ネットワークインターフェイスドライバに発送し、
前記データトラフィックシェーピングモジュールは、
複数のトラフィックシェーピングキューを維持するように構成され、各トラフィックシェーピングキューは少なくとも１つの関連付けられた送信速度規則を有し、前記データトラフィックシェーピングモジュールはさらに、
前記一次送信キューから、前記ネットワークインターフェイスドライバによって転送されたデータパケットの前記記述子を受信し、
受信された前記記述子に関連付けられた前記データパケットを分類し、
受信された第１の記述子に関連付けられた第１のデータパケットの、前記ネットワークカードによる送信が遅延されるべきであると判断し、そのような判断に応答して、前記第１のデータパケットに関連付けられた前記第１の記述子を前記一次送信キューから除去し、分類の結果に基づいて前記第１の記述子を対応するトラフィックシェーピングキューに格納し、
前記ネットワークカードに、前記トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットを、それぞれの前記トラフィックシェーピングキューに関連付けられた前記送信速度規則に従って送信させ、
前記ネットワークインターフェイスドライバに、前記第１の順序とは異なる第２の順序でのデータパケットの順調な送信を通知するように構成される、ネットワークデバイス。
【請求項２】
前記データトラフィックシェーピングモジュールは、前記ネットワークカード、および前記少なくとも１つのプロセッサ上で実行される実オペレーティングシステムのうちの一方の一部として含まれる、請求項１に記載のネットワークデバイス。
【請求項３】
前記ネットワークインターフェイスドライバは、前記少なくとも１つのプロセッサ上で実行される実オペレーティングシステム内に含まれており、ゲストオペレーティングシステムを介して前記ソフトウェアアプリケーションと通信するように構成される、請求項１に記載のネットワークデバイス。
【請求項４】
前記ネットワークインターフェイスドライバは、前記少なくとも１つのプロセッサ上で実行されるオペレーティングシステムの伝送制御プロトコル（ＴＣＰ）スタックの第１の層内に含まれており、前記ＴＣＰスタックの上位層に含まれるソフトウェアアプリケーションと通信するように構成される、請求項１に記載のネットワークデバイス。
【請求項５】
前記ネットワークカードは、
第１のリソースを使用することによって前記第１のデータパケットを送信し、
前記第１のデータパケットの送信に応答して、前記第１のリソースが前記ソフトウェアアプリケーションによってアクセス可能となるように前記第１のリソースを解放するように構成される、請求項１に記載のネットワークデバイス。
【請求項６】
前記第１のリソースは、メモリバッファの一部である、請求項５に記載のネットワークデバイス。
【請求項７】
前記データトラフィックシェーピングモジュールはさらに、
前記第１の記述子を受信した後で、第２のデータパケットに関連付けられた第２の記述子を受信し、
受信された前記第２の記述子に関連付けられた第２のデータパケットの、前記ネットワークカードによる送信が遅延されるべきであると判断し、そのような判断に応答して、前記第１のデータパケットを送信する前に、前記ネットワークカードに、前記一次送信キューに格納された前記第２の記述子に関連付けられた前記第２のデータパケットを送信させるように構成される、請求項１に記載のネットワークデバイス。
【請求項８】
前記ネットワークカードは、複数のパケットを、前記複数のパケットを前記一次送信キューに格納する順序とはバラバラの順序で送信するように構成される、請求項１に記載のネットワークデバイス。
【請求項９】
前記データトラフィックシェーピングモジュールはさらに、
第１のストリームにおけるデータパケットの、前記ネットワークカードによる送信が遅延されるべきであると判断し、そのような判断に応答して、前記第１のストリームにおける前記データパケットに関連付けられた記述子を、前記トラフィックシェーピングキューのうちの第１のトラフィックシェーピングキューに格納し、
前記第１のストリームとは異なる第２のストリームにおけるデータパケットの、前記ネットワークカードによる送信が遅延されるべきであると判断し、そのような判断に応答して、前記第２のストリームにおける前記データパケットに関連付けられた記述子を、前記トラフィックシェーピングキューのうちの第２のトラフィックシェーピングキューに格納するように構成される、請求項１に記載のネットワークデバイス。
【請求項１０】
前記ネットワークカードは、
前記第１のトラフィックシェーピングキューに格納された複数のパケットを、前記複数のパケットを前記第１のトラフィックシェーピングキューに格納した順序で送信し、
前記第２のトラフィックシェーピングキューに格納された複数のパケットを、前記複数のパケットを前記第２のトラフィックシェーピングキューに格納した順序で送信するように構成される、請求項９に記載のネットワークデバイス。
【請求項１１】
方法であって、
ソフトウェアアプリケーションによって生成され発送された第１の組のデータパケットを、ネットワークカードによる送信のために、少なくとも１つのプロセッサ上で実行されるネットワークインターフェイスドライバによって受信することと、
受信された前記第１の組のデータパケットに関連付けられた記述子を、前記ネットワークインターフェイスドライバによって、第１の順序で一次送信キューに格納することと、
受信された前記第１の組のデータパケットに関連付けられた前記記述子を、前記ネットワークインターフェイスドライバによって、前記ネットワークカードおよび前記少なくとも１つのプロセッサのうちの一方上で実行されるデータトラフィックシェーピングモジュールに転送することと、
受信された前記第１の組のパケットのうちの１つのパケットが前記ネットワークカードによって順調に送信されたという判断に応答して、前記ネットワークインターフェイスドライバによって、パケット送信完了メッセージを前記ソフトウェアアプリケーションに通信することとを含み、前記ソフトウェアアプリケーションは、前記ネットワークインターフェイスドライバからのパケット送信完了メッセージの受信を待ってから、追加のデータパケットを前記ネットワークインターフェイスドライバに発送し、前記方法はさらに、
前記データトラフィックシェーピングモジュールによって、複数のトラフィックシェーピングキューを維持することを含み、各トラフィックシェーピングキューは少なくとも１つの関連付けられた送信速度規則を有し、前記方法はさらに、
前記一次送信キューから、前記ネットワークインターフェイスドライバによって転送されたデータパケットの前記記述子を、前記データトラフィックシェーピングモジュールによって受信することと、
受信された前記記述子に関連付けられた前記データパケットを、前記データトラフィックシェーピングモジュールによって分類することと、
前記データトラフィックシェーピングモジュールによって、受信された第１の記述子に関連付けられた第１のデータパケットの、前記ネットワークカードによる送信が遅延されるべきであると判断し、そのような判断に応答して、前記第１のデータパケットに関連付けられた前記第１の記述子を前記一次送信キューから除去し、分類の結果に基づいて前記第１の記述子を対応するトラフィックシェーピングキューに格納することと、
前記データトラフィックシェーピングモジュールによって、前記ネットワークカードに、前記トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットを、それぞれの前記トラフィックシェーピングキューに関連付けられた前記送信速度規則に従って送信させることと、
前記データトラフィックシェーピングモジュールによって、前記ネットワークインターフェイスドライバに、前記第１の順序とは異なる第２の順序でのデータパケットの順調な送信を通知することとを含む、方法。
【請求項１２】
前記データトラフィックシェーピングモジュールは、前記ネットワークカード、および前記少なくとも１つのプロセッサ上で実行される実オペレーティングシステムのうちの一方の一部として含まれる、請求項１１に記載の方法。
【請求項１３】
前記ネットワークインターフェイスドライバは、前記少なくとも１つのプロセッサ上で実行される実オペレーティングシステム内に含まれており、ゲストオペレーティングシステムを介して前記ソフトウェアアプリケーションと通信するように構成される、請求項１１に記載の方法。
【請求項１４】
前記ネットワークインターフェイスドライバは、前記少なくとも１つのプロセッサ上で実行されるオペレーティングシステムの伝送制御プロトコル（ＴＣＰ）スタックの第１の層内に含まれており、前記ＴＣＰスタックの上位層に含まれるソフトウェアアプリケーションと通信するように構成される、請求項１１に記載の方法。
【請求項１５】
第１のリソースを使用することによって、前記第１のデータパケットを前記ネットワークカードによって送信することと、
前記第１のデータパケットの送信に応答して、前記第１のリソースが前記ソフトウェアアプリケーションによってアクセス可能となるように、前記第１のリソースを前記ネットワークカードによって解放することとをさらに含む、請求項１１に記載の方法。
【請求項１６】
前記第１のリソースは、メモリバッファの一部である、請求項１５に記載の方法。
【請求項１７】
前記第１の記述子を受信した後で、第２のデータパケットに関連付けられた第２の記述子を、前記データトラフィックシェーピングモジュールによって受信することと、
前記データトラフィックシェーピングモジュールによって、受信された前記第２の記述子に関連付けられた第２のデータパケットの、前記ネットワークカードによる送信が遅延されるべきであると判断し、そのような判断に応答して、前記第１のデータパケットを送信する前に、前記ネットワークカードに、前記一次送信キューに格納された前記第２の記述子に関連付けられた前記第２のデータパケットを送信させることとをさらに含む、請求項１１に記載の方法。
【請求項１８】
前記ネットワークカードによって、複数のパケットを、前記複数のパケットを前記一次送信キューに格納する順序とはバラバラの順序で送信することをさらに含む、請求項１１に記載の方法。
【請求項１９】
前記データトラフィックシェーピングモジュールによって、第１のストリームにおけるデータパケットの、前記ネットワークカードによる送信が遅延されるべきであると判断し、そのような判断に応答して、前記第１のストリームにおける前記データパケットに関連付けられた記述子を、前記トラフィックシェーピングキューのうちの第１のトラフィックシェーピングキューに格納することと、
前記データトラフィックシェーピングモジュールによって、前記第１のストリームとは異なる第２のストリームにおけるデータパケットの、前記ネットワークカードによる送信が遅延されるべきであると判断し、そのような判断に応答して、前記第２のストリームにおける前記データパケットに関連付けられた記述子を、前記トラフィックシェーピングキューのうちの第２のトラフィックシェーピングキューに格納することとをさらに含む、請求項１１に記載の方法。
【請求項２０】
前記ネットワークカードによって、前記第１のトラフィックシェーピングキューに格納された複数のパケットを、前記複数のパケットを前記第１のトラフィックシェーピングキューに格納した順序で送信することと、
前記ネットワークカードによって、前記第２のトラフィックシェーピングキューに格納された複数のパケットを、前記複数のパケットを前記第２のトラフィックシェーピングキューに格納した順序で送信することとをさらに含む、請求項１９に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
トラフィックシェーピングとは、優先されるトラフィックストリームほど重要ではない、または所望されないと判断されたトラフィックストリームを遅くすることによって、ネットワークデータトラフィックを調整する手法である。ストリームを遅くするための共通のメカニズムは２つあり、第１のメカニズムはいくつかのパケットを破棄または廃棄すること、第２のメカニズムはパケットを遅延させることである。パケット破棄メカニズムは広く使用されており、多くの場合、唯一の実行可能な解決策として考えてられている。たとえば、トラフィックシェーピングは、コンピュータが接続された別個のデバイスによって行なわれる場合、パケットを選択的に破棄することによって行なわれ得る。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
これに代えて、パケット遅延メカニズムは、パケット破棄なしで済ますこと、または破棄されるパケットの数を減少させることができる。たとえば、パケットが遅延されると、フィードバックメカニズムは、送信モジュール（たとえば、デバイスまたはソフトウエアコンポーネント）に「背圧」をかけ、すなわちフィードバックを送信して、送信モジュールに、それがパケットを送信する速度を減少させるようにすることができる。そのような「背圧」がなければ、トラフィックシェーピングモジュールは、より速い速度でパケットを受信し続ける必要があり、また、それが正しい速度でパケットを送信するできる時間までパケットをバッファに入れる必要があるであろう。そのような「背圧」の欠如は、アプリケーションがトラフィック輻輳をすぐ認識するのを妨げるだけではなく、パケット送信システムの全体的なスループットおよび性能を低下させるであろう。
【課題を解決するための手段】
【０００３】
概要
一局面では、ネットワークデバイスを含むシステムが提示される。ネットワークデバイスは、ネットワークインターフェイスドライバと、データトラフィックシェーピングモジュールと、ネットワークカードとを含む。ネットワークインターフェイスカードは、ソフトウェアアプリケーションによって生成され発送された第１の組のデータパケットを、ネットワークカードによる送信のために送信し、受信された第１の組のデータパケットに関連付けられた記述子を第１の順序で一次送信キューに格納し、受信された第１の組のデータパケットに関連付けられた記述子を、ネットワークカードおよび少なくとも１つのプロセッサのうちの一方上で実行されるデータトラフィックシェーピングモジュールに転送するように構成される。受信された第１の組のパケットのうちの１つのパケットがネットワークカードによって順調に送信されたという判断に応答して、ネットワークインターフェイスカードは、パケット送信完了メッセージをソフトウェアアプリケーションに通信するように構成され、ソフトウェアアプリケーションは、ネットワークインターフェイスドライバからのパケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバに発送する。データトラフィックシェーピングモジュールは、複数のトラフィックシェーピングキューを維持するように構成され、それらの各々は少なくとも１つの関連付けられた送信速度規則を有する。データトラフィックシェーピングモジュールはさらに、一次送信キューから、ネットワークインターフェイスドライバによって転送されたデータパケットの記述子を受信し、ネットワークカードによる送信が遅延される必要があると判断し、そのような判断に応答して記述子を一次送信キューから除去し、分類の結果に基づいてそれを対応するトラフィックシェーピングキューに格納するように構成される。データトラフィックシェーピングモジュールはさらに、ネットワークカードに、二次的なトラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットを、それぞれのトラフィックシェーピングキューに関連付けられた送信速度規則に従って送信させ、ネットワークインターフェイスドライバに、第１の順序とは異なる第２の順序でのデータパケットの順調な送信を通知するように構成される。
【０００４】
一局面では、ソフトウェアアプリケーションによって生成され発送された第１の組のデータパケットを、ネットワークカードによる送信のために、少なくとも１つのプロセッサ上で実行されるネットワークインターフェイスドライバによって受信することを含む方法が提示される。この方法はさらに、受信された第１の組のデータパケットに関連付けられた記述子を、ネットワークインターフェイスドライバによって、第１の順序で一次送信キューに格納することと、受信された第１の組のデータパケットに関連付けられた記述子を、ネットワークインターフェイスドライバによって、ネットワークカードおよび少なくとも１つのプロセッサのうちの一方上で実行されるデータトラフィックシェーピングモジュールに転送することとを含む。この方法はさらに、受信された第１の組のパケットのうちの１つのパケットがネットワークカードによって順調に送信されたという判断に応答して、ネットワークインターフェイスカードによって、パケット送信完了メッセージをソフトウェアアプリケーションに通信することを含み、ソフトウェアアプリケーションは、ネットワークインターフェイスドライバからのパケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバに発送する。この方法はさらに、データトラフィックシェーピングモジュールによって、複数のトラフィックシェーピングキューを維持することを含み、それらの各々は少なくとも１つの関連付けられた送信速度規則を有し、さらに、一次送信キューから、ネットワークインターフェイスドライバによって転送されたデータパケットの記述子を、データトラフィックシェーピングモジュールによって受信することを含む。この方法はさらに、受信された記述子に関連付けられたデータパケットを、データトラフィックシェーピングモジュールによって分類することと、データトラフィックシェーピングモジュールによって、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきであると判断し、そのような判断に応答して、第１のデータパケットに関連付けられた第１の記述子を一次送信キューから除去し、分類の結果に基づいて第１の記述子を対応するトラフィックシェーピングキューに格納することとを含む。この方法はさらに、データトラフィックシェーピングモジュールによって、ネットワークカードに、トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットを、それぞれのトラフィックシェーピングキューに関連付けられた送信速度規則に従って送信させることと、データトラフィックシェーピングモジュールによって、ネットワークインターフェイスドライバに、第１の順序とは異なる第２の順序でのデータパケットの順調な送信を通知することとを含む。
【０００５】
一局面では、コンピュータ読取可能媒体は命令を格納し、命令は、コンピューティングプロセッサによって実行されると、コンピューティングプロセッサが、ソフトウェアアプリケーションによって生成され発送された第１の組のデータパケットを、ネットワークカードによる送信のために、コンピューティングプロセッサ上で実行されるネットワークインターフェイスドライバを介して受信するようにする。コンピューティングプロセッサはさらに、受信された第１の組のデータパケットに関連付けられた記述子を、ネットワークインターフェイスドライバを介して、一次送信キューに格納するようにされる。コンピューティングプロセッサはさらに、受信された第１の組のデータパケットに関連付けられた記述子を、ネットワークインターフェイスドライバを介して、ネットワークカードおよびコンピューティングプロセッサのうちの一方上で実行されるデータトラフィックシェーピングモジュールに転送するようにされる。受信された第１の組のパケットのうちの１つのパケットがネットワークカードによって順調に送信されたという判断に応答して、コンピューティングプロセッサはさらに、ネットワークインターフェイスカードを介して、パケット送信完了メッセージをソフトウェアアプリケーションに通信するようにされ、ソフトウェアアプリケーションは、ネットワークインターフェイスドライバからのパケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバに発送する。コンピューティングプロセッサはさらに、データトラフィックシェーピングモジュールを介して、複数のトラフィックシェーピングキューを維持するようにされ、それらの各々は少なくとも１つの関連付けられた送信速度規則を有する。コンピューティングプロセッサはさらに、一次送信キューから、ネットワークインターフェイスドライバによって転送されたデータパケットの記述子を、データトラフィックシェーピングモジュールを介して受信し、受信された記述子に関連付けられたデータパケットを、データトラフィックシェーピングモジュールを介して分類するようにされる。コンピューティングプロセッサはさらに、データトラフィックシェーピングモジュールを介して、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきであると判断し、そのような判断に応答して、第１のデータパケットに関連付けられた第１の記述子を一次送信キューから除去し、分類の結果に基づいて第１の記述子を対応するトラフィックシェーピングキューに格納するようにされる。コンピューティングプロセッサはさらに、データトラフィックシェーピングモジュールを介して、ネットワークカードに、トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットを、それぞれのトラフィックシェーピングキューに関連付けられた送信速度規則に従って送信させる。コンピューティングプロセッサはさらに、データトラフィックシェーピングモジュールを介して、ネットワークインターフェイスドライバに、データパケットの順調な送信を通知するようにされる。
【０００６】
図面の簡単な説明
本開示の上述のおよび関連する目的、特徴、ならびに利点は、以下の詳細な説明を以下の図とともに参照することによって、より十分に理解されるであろう。
【図面の簡単な説明】
【０００７】
【図１】いくつかの実現化例に従ったデータトラフィックシェーピングシステムを有するネットワーク環境のブロック図である。
【図２】例示的な仮想マシン環境のブロック図である。
【図３】いくつかの実現化例に従ったネットワークインターフェイスドライバの動作を示すフローチャートである。
【図４】いくつかの実現化例に従ったデータトラフィックシェーピングモジュールの動作を示すフローチャートである。
【図５】いくつかの実現化例に従ったネットワークインターフェイスドライバの動作を示すフローチャートである。
【図６Ａ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図６Ｂ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図６Ｃ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図６Ｄ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図７Ａ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図７Ｂ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図７Ｃ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図７Ｄ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図８Ａ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図８Ｂ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図８Ｃ】いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である。
【図９】例示的なコンピューティングシステムのブロック図である。
【発明を実施するための形態】
【０００８】
詳細な説明
ネットワークデバイスにおけるトラフィックシェーピングに関するシステムおよび方法が提示される。いくつかの実現化例では、これらのシステムおよび方法は、受信されたパケットに関連付けられた記述子を送信キューに格納し、記述子をトラフィックシェーピングモジュールに転送するように構成された、ネットワークデバイスのネットワークインターフェイスドライバを含む。受信されたパケットは、コンピューティングデバイス上で、たとえば、コンピューティングデバイスによってホストされる１つ以上の仮想マシン上で実行されるアプリケーションから生じる。仮想マシンのゲストオペレーティングシステムは、以前に発送されたパケットが順調に送信されたことを確認するメッセージが受信されるまで、アプリケーションが追加のパケットをネットワークインターフェイスドライバに発送するのを妨げる。ここに説明されるように、いくつかの実現化例では、受信されたパケットの第１のパケットがネットワークカードによって順調に送信されたという判断に応答して、ネットワークインターフェイスドライバは、パケット送信完了メッセージをソフトウェアアプリケーションまたはゲストオペレーティングシステムに通信し、それは、パケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバに発送する。いくつかの実現化例では、受信されたパケットのうちの１つのパケットの、ネットワークカードによる送信が遅延されるべきであるという判断に応答して、トラフィックシェーピングモジュールは、そのパケットに関連付けられた記述子を送信キューから除去し、その記述子を対応するトラフィックシェーピングキューに格納する。この構成は、ネットワークインターフェイスドライバにおける単一の一次送信キューと、異なるトラフィックシェーピング規則を採用する（たとえばネットワークインターフェイスカードにおける）複数のトラフィックシェーピングキューとで実現可能であり、このため、ネットワークインターフェイスドライバにおける複数の送信キューを必要とせずに、フロー毎のトラフィックシェーピングを可能にする。さらに、この構成では、（仮想マシンのゲストＯＳ上ではなく）ネットワークデバイスの実ＯＳ上で作動するソフトウェアアプリケーション、もしくは、ハイパーバイザによって管理されるゲストＯＳにおけるソフトウェアアプリケーションまたはＴＣＰスタックの上位層、といったパケットソースは、ネットワークインターフェイスドライバにおいて、またはネットワークカード上で実現されるトラフィックシェーピングアルゴリズムを認識しなくてもよい。したがって、仮想マシン環境でネットワークインターフェイスドライバおよびゲストオペレーティングシステムを実現するコストを減少させることができる。また、この構成では、パケットソースは、トラフィックシェーピングアルゴリズムだけでなく、他の構成、たとえばパケット分類規則、および他のトラフィック調整ポリシーも認識しなくてもよい。したがって、トラフィックシェーピングシステム全体は、アプリケーションまたはユーザがそのような詳細な規則およびポリシー（たとえばキューの数）を構成できるシステムよりも、信頼性がより高くなり得る。
【０００９】
従来のシステムでは、パケットは、送信キュー、たとえば先入れ先出し（first-in-first-out：ＦＩＦＯ）キューから順に処理され、完了が順に返される。本開示におけるいくつかの実現化例では、トラフィックシェーピングモジュールは、（破棄のない）遅延された送信のためにいくつかのデータパケットを送信キューから除去することによって、完了メッセージがバラバラの順序で返されるようにすることができる。この「順序がバラバラの完了」の構成では、ネットワークインターフェイスドライバにすでに発送されたデータパケットについての完了メッセージが受信されるまで、アプリケーションはより多くのデータパケットを送信しないため、アプリケーションは、単一の送信キューを依然として有しながら、データパケットをより早くまたはより遅く送信するようにされ得る。すなわち、この構成は、遅延されるべきデータパケットがキューに残ることを妨げることによって、ライン先頭ブロッキング（head of line blocking）を避けることができる。さらに、いくつかの実現化例では、この「順序がバラバラの」完了構成を、アプリケーション、たとえば対応するフローまたはストリームのために開かれる何千もの接続を有するアプリケーション内のデータパケットの個々のフロー（またはストリーム）に当てはめることができ、そのため、各フローを選択的に遅くすることができる。
【００１０】
さらに、いくつかの実現化例では、「順序がバラバラの」完了構成は、一次送信キューがいくつあるか、またはパケットがどのように各キューに入れられるかにかかわらず、完了メッセージがバラバラの順序で返され得る限り、ライン先頭ブロッキングなしで「背圧」を送信モジュールにかけることができる。いくつかの実現化例では、「順序がバラバラの」完了構成を有するトラフィックシェーピングメカニズムが、特定のネットワーク／ハードウェア構成（たとえば、特定数の一次送信キューおよび特定のキュー割当て規則）で実現可能である。たとえば、トラフィックの千個のフロー／ストリームをシェーピングするために、トラフィックシェーピングメカニズムは、単一のキューのみで、または少数のキュー（たとえば１６〜３２個のキュー）で実現可能である。少数のキューを有するシステムにおいて実現される場合、トラフィックシェーピングメカニズムは、各パケットが予め定められたキュー割当て規則に基づいて正しいキューに入れられるか、またはパケットトラフィックがキュー中に「ランダムに」分散されるかにかかわらず、「順序がバラバラの」完了メッセージを返すことができる。たとえば、Ｌｉｎｕｘ（登録商標）システムから多数のハードウェアキュー中に分散されたパケットトラフィックをシェーピングするための「順序がバラバラの」完了トラフィックシェーピングシステムが、仮想マシンにおいて、ネットワーク／ハードウェア構成（たとえば、Ｌｉｎｕｘシステムのキュー割当て規則、またはハードウェアキューの数）の修正なしで実現可能である。いくつかの実現化例では、トラフィックシェーピングシステムは、トラフィックシェーピング層、フロー分類規則およびポリシーをアプリケーションまたはユーザから隠すことによって、そのようなネットワーク／ハードウェア互換性を提供することができる。
【００１１】
図１は、データトラフィックシェーピングシステム１６０を有する例示的なネットワーク環境１０００のブロック図である。広範な概観では、図示されたネットワーク環境は、相互接続されたネットワークノード７５０のネットワーク７００を含む。ネットワークノード７５０は、データソース、データ宛先（またはデータシンク）、およびデータをソースからネットワーク７００を通して宛先に伝搬する中間ノードとして、ネットワーク７００に関与する。ネットワーク７００は、さまざまな他の関与するネットワークノード７５０へのリンク６００を有するネットワークデバイス１１０のデータトラフィックシェーピングシステム１６０を含む。図１をより詳細に参照して、ネットワーク７００は、関与デバイス間のやりとりを容易にするネットワークである。図示された例示的なネットワーク７００はインターネットであるが、他の実現化例では、ネットワーク７００は、データセンター内のローカルネットワーク、ネットワークファブリック、もしくは任意の他のローカルエリアまたはワイドエリアネットワーク、といった別のネットワークであってもよい。ネットワーク７００は、複数の接続されたサブネットワークまたは自律的ネットワークからなっていてもよい。ネットワーク７００は、企業イントラネットなどのローカルエリアネットワーク（local-area network：ＬＡＮ）、メトロポリタンエリアネットワーク（metropolitan area network：ＭＡＮ）、ワイドエリアネットワーク（wide area network：ＷＡＮ）、インターネットなどのインターネットワーク、または、ピアツーピアネットワーク、たとえばアドホックＷｉＦｉピアツーピアネットワークであってもよい。任意のタイプおよび／または形のデータネットワークおよび／または通信ネットワークを、ネットワーク７００のために使用することができる。それは、公的ネットワーク、私的ネットワーク、または公的ネットワークと私的ネットワークとの組合せであってもよい。一般に、ネットワーク７００は、コンピューティングデバイス間、たとえばネットワークノード７５０間で情報を伝達するために使用され、データトラフィックシェーピングシステムのネットワークデバイス１１０は、その構成に従ってこの通信を容易にする。
【００１２】
図１を参照して、ネットワークデバイス１１０は、１つ以上の仮想マシンをホストするサーバである。ネットワークデバイス１１０は、データトラフィックシェーピングシステム１６０を含む。いくつかの実現化例では、ネットワークデバイス１１０は、メモリ１１２とネットワークカード１６８とを含む。ネットワークデバイス１１０は、データパケットを格納するためのパケットバッファ１６９を含み得る。いくつかの実現化例では、ネットワークデバイス１１０は、図９に示すようなコンピューティングシステム１４０の構成と同様の構成を有する。たとえば、メモリ１１２は、図９に示すようなメモリ１４４の構成と同様の構成を有し、ネットワークカード１６８は、図９に示すようなネットワークインターフェイス１４６またはネットワークインターフェイスコントローラ１４３の構成と同様の構成を有し得る。コンピューティングシステム１４０については、図９を参照して以下により詳細に説明する。図９に示すコンピューティングシステム１４０に示された要素のすべてが、図１に示すネットワークデバイス１１０のいくつかの実現化例に存在する必要はない。いくつかの実現化例では、ネットワークデバイス１１０は、ソフトウェアキュー、またはエミュレートされたネットワークデバイス、またはネットワークインターフェイスとして作用するソフトウェアであってもよい。
【００１３】
図１を再び参照して、いくつかの実現化例では、データトラフィックシェーピングシステム１６０は、１つ以上のアプリケーション１５０（たとえば、アプリケーション１５０Ａ、１５０Ｂ、および１５０Ｃ）と通信する。アプリケーション１５０Ａ〜１５０Ｃのうちの１つ以上は、ネットワークデバイス１１０の実オペレーティングシステム上で作動するソフトウェアアプリケーションであってもよい。加えて、ソフトウェアアプリケーション１５０Ａ〜１５０Ｃのうちの１つ以上は、仮想マシン環境でハイパーバイザによって管理されるゲストＯＳ上で作動するソフトウェアアプリケーション、または、仮想マシン環境のゲストＯＳのプロトコルスタック（たとえばＴＣＰスタック）の上位層であってもよい。たとえば、図２を参照して、アプリケーション１５０Ａ〜１５０Ｃは各々、図２における、実ＯＳ２２０上で作動するソフトウェアアプリケーション２３０、ハイパーバイザ２５０によって管理されるゲストＯＳ２６０上で作動するソフトウェアアプリケーション２６５、またはゲストＯＳ２６０のプロトコルスタック２６１の上位層であってもよい。ハイパーバイザ２５０およびそれに関する仮想マシン環境については、図２を参照して以下により詳細に説明する。
【００１４】
図１を依然として参照して、いくつかの実現化例では、ネットワークデバイス１１０は、ネットワークインターフェイスドライバ１６４とデータトラフィックシェーピングモジュール１６６とを含む。ネットワークインターフェイスドライバ１６４は、実ＯＳ上で作動するネットワークインターフェイスドライバモジュールであってもよい。ネットワークインターフェイスドライバ１６４は、ソフトウェアアプリケーション１５０Ａ〜１５０Ｃのうちの１つ（たとえば、図２のアプリケーション２６５）と、（ネットワークデバイス１１０の実ＯＳ上で動作する場合には）直接、（仮想マシン環境で動作する場合には）仮想マシンのゲストＯＳを介して、または、いくつかの実現化例ではハイパーバイザおよびゲストＯＳを通して、通信することができる。いくつかの実現化例では、ネットワークインターフェイスドライバ１６４は、ネットワークデバイス１１０の実ＯＳの伝送制御プロトコル（transmission control protocol：ＴＣＰ）スタックの第１の層内に含まれており、ＴＣＰスタックの上位層に含まれるソフトウェアモジュールまたはアプリケーションと通信する。一例では、ネットワークインターフェイスドライバ１６４は、ＴＣＰスタックのトランスポート層内に含まれており、ＴＣＰスタックのアプリケーション層に含まれるソフトウェアモジュールまたはアプリケーションと通信する。別の例では、ネットワークインターフェイスドライバ１６４は、ＴＣＰスタックのリンク層内に含まれており、ＴＣＰスタックのインターネット／トランスポート層に含まれるＴＣＰ／ＩＰモジュールと通信する。
【００１５】
図１を再び参照して、いくつかの実現化例では、データトラフィックシェーピングモジュール１６６は、実ＯＳ上で作動するネットワークインターフェイスドライバモジュールの一部として実現可能である。いくつかの実現化例では、データトラフィックシェーピングモジュール１６６は、ネットワークカード１６８の一部として含まれ得る。
【００１６】
図１を参照して、いくつかの実現化例では、パケットバッファ１６９は、ネットワークデバイス１１０の共有メモリに位置することができ、そのため、アプリケーション１５０、ネットワークカード１６８、ネットワークインターフェイスドライバ１６４、およびデータトラフィックシェーピングモジュール１６６のうちのいくつかまたはすべてが、パケットバッファ１６９に直接的にまたは間接的にアクセスできる。たとえば、パケットバッファ１６９は、ゲストＯＳ、実ＯＳ、ネットワークインターフェイスドライバ１６４、およびネットワークカード１６８によってアクセス可能な共有メモリに位置することができる。ネットワークを通してパケットを送信するために、ネットワークカード１６８への送信に先立って、データパケットをパケットバッファ１６９に格納することができ、そこでそれは、ネットワークインターフェイスドライバ１６４およびネットワークカード１６８によってアクセスされ得る。
【００１７】
図２は、仮想マシン環境を実現する例示的なサーバ２００のブロック図を示す。いくつかの実現化例では、サーバ２００は、ハードウェア２１０と、ハードウェア２１０上で作動する実オペレーティングシステム（operating system：ＯＳ）２２０と、ハイパーバイザ２５０と、ゲストオペレーティングシステム（ゲストＯＳ）２６０および２７０を有する２つの仮想マシンとを含む。ハードウェア２１０は、他のコンポーネントの中でも、ネットワークインターフェイスカード（network interface card：ＮＩＣ）２１５を含み得る。ハードウェア２１０は、図９に示すようなコンピューティングシステム１４０の構成と同様の構成を有し得る。ハードウェア２１０のＮＩＣ２１５は、図９に示すようなネットワークインターフェイスコントローラ１４３またはネットワークインターフェイス１４６の構成と同様の構成を有し得る。いくつかの実現化例では、実ＯＳ２２０は、プロトコルスタック２２５（たとえばＴＣＰスタック）を有し、実ＯＳ２２０上で作動するソフトウェアアプリケーションを有する。いくつかの実現化例では、ゲストＯＳ２６０および２７０は、プロトコルスタック２６１および２７１をそれぞれ有する。ゲストＯＳ２６０および２７０の各々は、さまざまなアプリケーション、たとえばソフトウェアアプリケーション２６５、２６６、２７５および２７６をホストすることができる。サーバ２００は、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、アプライアンス、ネットワークアプライアンス、ゲートウェイ、ゲートウェイサーバ、仮想化サーバ、デプロイメントサーバ、ＳＳＬ  ＶＰＮサーバ、またはファイアウォールであってもよい。
【００１８】
図２を再び参照して、サーバ２００はハイパーバイザ２５０を実行し、それは、第１のゲストＯＳ２６０および第２のゲストＯＳ２７０をインスタンス化して管理する。第１のゲストＯＳ２６０は、第１のソフトウェアアプリケーション２６５および第２のソフトウェアアプリケーション２６６をホストする。第２のゲストＯＳ２７０は、第３のソフトウェアアプリケーション２７５および第４のソフトウェアアプリケーション２７６をホストする。たとえば、アプリケーションは、データベースサーバ、データウェアハウジングプログラム、株式市場トランザクションソフトウェア、オンラインバンキングアプリケーション、コンテンツ発行および管理システム、ホストされたビデオゲーム、ホストされたデスクトップ、電子メールサーバ、旅行予約システム、顧客関係管理アプリケーション、在庫制御管理データベース、および企業リソース管理システムを含み得る。いくつかの実現化例では、ゲストＯＳは、他の種類のアプリケーションをホストする。サーバ２００のコンポーネント間のやりとりを、図３〜６に関連して以下にさらに説明する。
【００１９】
図３は、図１に示すネットワークインターフェイスドライバ１６４といったネットワークインターフェイスドライバによって行なわれる例示的な方法３００を使用して、ネットワークトラフィックをシェーピングするためのフローチャートである。広範な概観では、方法３００はステージ３１０で始まり、そこで、ネットワークインターフェイスドライバは、アプリケーションによって生成され発送された第１の組のデータパケットを、図１に示すネットワークカード１６８といったネットワークカードによる送信のために受信することができる。ステージ３２０で、ネットワークインターフェイスドライバは、受信された第１の組のデータパケットに関連付けられた記述子を一次送信キューに格納することができる。ステージ３３０で、ネットワークインターフェイスドライバは、受信された第１の組のデータパケットに関連付けられた記述子を、図１に示すデータトラフィックシェーピングモジュール１６６といったデータトラフィックシェーピングモジュールに転送することができる。
【００２０】
ここで、図３のフローチャートを、いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である図６Ａおよび図６Ｂを参照して、より詳細に説明する。
【００２１】
ステージ３１０で、ネットワークインターフェイスドライバは、アプリケーションによって生成され発送された第１の組のデータパケットを、ネットワークカードによる送信のために受信することができる。たとえば、図６Ａを参照して、ネットワークインターフェイスドライバ１６４は、一組のアプリケーション１５０Ａ〜１５０Ｃのうちの１つによって生成され発送された一組のデータパケットを、ネットワークカード１６８による送信のために受信する。いくつかの実現化例では、一組のデータパケットの受信に応答して、ネットワークインターフェイスドライバ１６４は、受信された一組のデータパケットをパケットバッファ（たとえば、図１および図６Ａ〜６Ｄのパケットバッファ１６９）に格納する。たとえば、パケットバッファ１６９は、共有リソースとして、ゲストＯＳとネットワークインターフェイスドライバ１６４との間の共有メモリに位置することができ、そのため、ゲストＯＳ上で作動するアプリケーション１５０から送信されたパケットをパケットバッファ１６９に格納することができ、それらのパケットに関連付けられた記述子は、共有リソース内の位置を指し示す。いくつかの実現化例では、パケットバッファ内のある特定のパケットへのポインタ（たとえばメモリアドレス）を含む記述子が、その特定のパケットに関連付けられる。いくつかの実現化例では、記述子は概して小さく（たとえば、３２バイトであるか、または数個の６４ビット整数を含む）、扱いが簡単であり、一方、パケットは概して最小でも数百バイトであり、しばしば１５００バイトである。
いくつかの実現化例では、データパケットは、ストリームの一部であってもよい。アプリケーション１５０は、各ストリームにおけるデータパケットを特定の順序で送信できる。各ストリームは、異なるアプリケーション（たとえば、異なるゲストＯＳ上で実行されるアプリケーション）から来ることができる。図６Ａに示す例では、アプリケーション１５０Ａは、記述子Ｓ１、Ｓ２およびＳ３に対応する第１のストリームの３つのパケットを順次送信する。アプリケーション１５０Ｂは、記述子Ｔ１、Ｔ２およびＴ３に対応する第２のストリームの３つのパケットを順次送信する。アプリケーション１５０Ｃは、記述子Ｕ１およびＵ２に対応する第３のストリームの２つのパケットを送信する。
【００２２】
ステージ３２０で、ネットワークインターフェイスドライバは、受信された第１の組のデータパケットに関連付けられた記述子を一次送信キュー１６１に格納することができる。図６Ａ〜６Ｄを参照して、ネットワークデバイス１１０は、アプリケーション１５０から受信されたデータパケットに関連付けられた記述子を含むための一次送信キュー１６１を含む。いくつかの実現化例では、一次送信キュー１６１は、単一のキューである。いくつかの実現化例では、一次送信キュー１６１は、ハードウェアキュー（たとえば、専用ハードウェアで実現されたキュー）、またはソフトウェアキューであってもよい。いくつかの実現化例では、一次送信キュー１６１は、一組の一次送信キューである。たとえば、一次送信キュー１６１は、マルチキューＮＩＣで実現された複数のキューである。いくつかの実現化例では、一組の一次送信キューの数は、速度リミッタ（たとえば、トラフィックシェーピングキュー）の数よりも少ない。たとえば、何千ものフローまたはストリームをシェーピングするために、ネットワークデバイス１１０は約１０〜約３２個のハードウェアキューを有していてもよく、一方、その何千ものフローをシェーピングするためにそこに設置されたより多くのトラフィックシェーピングキューを有していてもよい。アプリケーション１５０からのデータパケットの受信に応答して、ネットワークインターフェイスドライバ１６４は、データパケットに関連付けられた記述子を、単一のキュー、たとえば一次送信キュー１６１に書込む。いくつかの実現化例では、ネットワークインターフェイスドライバ１６４は、各ストリームにおけるデータパケットに関連付けられた記述子を、パケットがアプリケーション１５０によって送信された順序で一次送信キュー１６１に書込む。たとえば、図６Ａに示すように、ネットワークインターフェイスドライバ１６４は、アプリケーション１５０から８つのデータパケットを受信し、それらのパケットに関連付けられた記述子（たとえば、記述子Ｔ１、Ｕ１、Ｔ２、Ｓ１、Ｕ２、Ｓ２、Ｓ３、Ｔ３）を、ネットワークカード１６８を介したそれらのパケットの送信のために一次送信キュー１６１に書込む。いくつかの実現化例では、アプリケーション１５０からのデータパケットの受信に応答して、ネットワークインターフェイスドライバ１６４は、（受信されたパケットに関連付けられた記述子を格納する代わりに）受信されたパケットを単一の送信キューに書込むことができる。
【００２３】
ネットワークインターフェイスドライバ１６４は、アプリケーション１５０Ａから第１のストリームのパケットを受信し、記述子Ｓ１、Ｓ２およびＳ３を、それらが送信された順序で、すなわち、Ｓ１、次にＳ２、次にＳ３という順序で一次送信キュー１６１に書込む。同様に、ネットワークインターフェイスドライバ１６４は、アプリケーション１５０Ｂから第２のストリームのパケットを受信し、記述子Ｔ１、Ｔ２およびＴ３を、それらが受信された順序で一次送信キュー１６１に書込み、ネットワークインターフェイスドライバ１６４は、アプリケーション１５０Ｃから第３のストリームのパケットを受信し、記述子Ｕ１およびＵ２を一次送信キュー１６１に書込む。いくつかの実現化例では、一次送信キューにおいて、各ストリームにおけるパケットの受信順序を維持しながら、異なるストリームのパケットをインタリーブすることができる。たとえば、図６Ａに示す例では、一次送信キューにおいて、各ストリームのパケットの受信順序を維持しながら（たとえば、第１のストリームについてはＳ１→Ｓ２→Ｓ３という順序、第２のストリームについてはＴ１→Ｔ２→Ｔ３という順序、および第３のストリームについてはＵ１→Ｕ２という順序を維持しながら）、異なるストリームのパケットが（すなわち、Ｔ１、Ｕ１、Ｔ２、Ｓ１、Ｕ２、Ｓ２、Ｓ３、およびＴ３という順序で）インタリーブされている。
【００２４】
ステージ３３０で、ネットワークインターフェイスドライバは、受信された第１の組のデータパケットに関連付けられた記述子を、データトラフィックシェーピングモジュールに転送することができる。たとえば、図６Ｂを参照して、いくつかの実現化例では、ネットワークインターフェイスドライバ１６４は、受信されたデータパケットに関連付けられた記述子（たとえば、Ｔ１、Ｕ１、Ｔ２、Ｓ１、Ｕ２、Ｓ２、Ｓ３、およびＴ３）を、データトラフィックシェーピングモジュール１６６に転送する。
【００２５】
図４は、図１および図６Ａ〜６Ｄに示すデータトラフィックシェーピングモジュール１６６といったデータトラフィックシェーピングモジュールによって行なわれる例示的な方法４００を使用して、ネットワークトラフィックをシェーピングするためのフローチャートである。広範な概観では、方法４００はステージ４１０で始まり、そこで、データトラフィックシェーピングモジュールは、複数のトラフィックシェーピングキューを維持し、一次送信キューから、図１および図６Ａ〜６Ｄに示すネットワークインターフェイスドライバ１６４といったネットワークインターフェイスドライバによって転送されたデータパケットの記述子を受信する。ステージ４２０で、データトラフィックシェーピングモジュールは、受信された記述子に関連付けられたデータパケットを分類する。ステージ４３０で、データトラフィックシェーピングモジュールは、受信された第１の記述子に関連付けられた第１のデータパケットの、図１および図６Ａ〜６Ｄに示すネットワークカード１６８といったネットワークカードによる送信が遅延されるべきか判断する。ステージ４４０で、データトラフィックシェーピングモジュールが、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきであると判断すると、データトラフィックシェーピングモジュールは、第１のデータパケットに関連付けられた第１の記述子を一次送信キューから除去し、分類の結果に基づいて第１の記述子を対応するトラフィックシェーピングキューに格納する。次に、ステージ４５０で、データトラフィックシェーピングモジュールは、ネットワークカードに、トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットを、それぞれのトラフィックシェーピングキューに関連付けられた送信速度規則に従って送信させる。ステージ４６０で、データトラフィックシェーピングモジュールが、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきではないと判断すると、データトラフィックシェーピングモジュールは、ネットワークカードに、第１のデータパケットをすぐに送信させる。ステージ４７０で、データトラフィックシェーピングモジュールは、ネットワークインターフェイスドライバに、データパケットの順調な送信を通知する。なお、ここに使用されるように、データパケットの順調な送信は必ずしも、受信側によるデータパケットの順調な受信を必要としない。すなわち、パケット受信の受領確認（たとえばＴＣＰ  ＡＣＫメッセージ）の受信は、パケットが順調に送信されたとネットワークインターフェイスカードが判断するための必要条件ではない。
【００２６】
ここで、図４のフローチャートを、いくつかの実現化例に従ったデータトラフィックシェーピングシステムの例示的な動作を表わすブロック図である図６Ａ〜６Ｄを参照して、より詳細に説明する。
【００２７】
上述のように、ステージ４１０で、データトラフィックシェーピングモジュールは、複数のトラフィックシェーピングキューを維持し、一次送信キューから、ネットワークインターフェイスドライバによって転送されたデータパケットの記述子を受信する。たとえば、図６Ａ〜６Ｄを参照して、データトラフィックシェーピングモジュール１６６は、複数のトラフィックシェーピングキュー（たとえば、トラフィックシェーピングキュー１６２、１６３および１６５）を維持する。いくつかの実現化例では、各トラフィックシェーピングキューは、トラフィックシェーピングキューによって管理されるべきパケットの格納のための対応するパケットバッファ（図示せず）を維持することができる。いくつかの実現化例では、トラフィックシェーピングキューのうちの少なくともいくつかは、パケットバッファ１６９へのアクセスを共有し、このため、それら自体の別個のパケットバッファを有する必要はない。図６Ａおよび図６Ｂを参照して、ネットワークインターフェイスドライバ１６４が、受信されたデータパケットに関連付けられた記述子（たとえば、Ｔ１、Ｕ１、Ｔ２、Ｓ１、Ｕ２、Ｓ２、Ｓ３、およびＴ３）をデータトラフィックシェーピングモジュール１６６に転送することに応答して、データトラフィックシェーピングモジュール１６６は、一次送信キュー１６１から、データパケットの転送された記述子を受信する。
【００２８】
ステージ４２０で、データトラフィックシェーピングモジュールは、受信された記述子に関連付けられたデータパケットを分類する。いくつかの実現化例では、たとえば図６Ｂに示すように、データトラフィックシェーピングモジュール１６６は、各ストリームの特性を対応するトラフィックシェーピングキューにマッピングするための一組の分類規則に基づいて、受信された記述子に関連付けられたデータパケットを分類する。たとえば、トラフィックシェーピングモジュールは、ソースおよび宛先ＩＰアドレス、ソースおよび宛先ポート番号のうちの４つまたは５つ、ならびにタイプ・オブ・サービス・インジケータを含む、パケットヘッダにおける４タプルまたは５タプルのデータに基づいて、パケットを分類することができる。いくつかの実現化例では、パケットは、より少ないデータフィールドのヘッダを使用して、より広範に分類され得る。たとえば、いくつかの実現化例では、パケットは、（使用されているプロトコルおよびプロトコルバージョンに依存して）タイプ・オブ・サービス（type of service：ＴｏＳ）またはクオリティ・オブ・サービス（quality of service：ＱｏＳ）フィールドといった単一データフィールド、ファイルタイプフィールド、またはポート番号に基づいて分類されてもよく、それらの各々はしばしば、優先レベルと相関され得る。パケットの関連する特性を識別した後で、データトラフィックシェーピングモジュール１６６は、識別された特性を分類規則と比較し、分類規則が満たされたトラフィックシェーピングキューにパケットを割当てる。いくつかの実現化例では、トラフィックシェーピングモジュール１６６は、他のトラフィックシェーピングキューに割当てられないすべてのパケットを、それらの特定の特性に基づいて扱うための、「包括的」トラフィックシェーピングキューを維持する。
【００２９】
いくつかの実現化例では、各トラフィックシェーピングキューは、少なくとも１つの関連付けられた送信速度規則を有する。ある特定のトラフィックシェーピングキューについての送信速度規則は、その特定のトラフィックシェーピングキューに格納されたパケットをネットワークカードによって送信するためのフロー速度限界を特定することができる。図６Ａ〜６Ｄを参照して、データトラフィックシェーピングモジュール１６６は、ネットワークカード１６８に、その特定のトラフィックシェーピングキューに格納されたパケットを、そのキューについての送信速度規則に従って送信させる。いくつかの実現化例では、送信速度規則は、絶対的であってもよく、または条件付きであってもよい。同様に、送信速度規則は、パケットの数またはデータの量に基づいていてもよい。いくつかの例示的な絶対的送信速度規則は、１）無制限の送信、２）１秒あたり送信されるパケットの最大数、３）１秒あたり送信されるパケットの平均数、４）１秒あたり送信される最大ビット、または５）１秒あたり送信される平均ビットを含む。いくつかの実現化例では、送信速度規則は、上述のタイプの規則のうちのいずれかの組合せを含み得る。たとえば、送信速度規則は、トラフィックのバースト性を可能にし、および／またはそれに対処するように、１秒あたりの平均許容ビットまたはパケットを、１秒あたりのビットまたはパケットの最大数とともに特定してもよい。条件付き送信速度規則は、異なる状況における異なる絶対的送信速度規則を可能にする。たとえば、条件付き送信速度規則は、異なるトラフィックシェーピングキューが一杯である場合よりも、その異なるトラフィックシェーピングキューが空である状況で、１つの送信速度を許容してもよい。別の条件付き送信規則は、たとえばキューがあいにく一杯になりつつある状況でパケットのより迅速な処理を可能にするために、キューにおけるパケットの数に依存して異なる送信速度を許容してもよい。上述の規則は、それぞれのトラフィックシェーピングキューの各々のために実現され得る広範囲の規則の例である。特定の規則は、たとえばシステムアドミニストレータによって設定され得る。
【００３０】
ステージ４３０で、データトラフィックシェーピングモジュールは、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきか判断することができる。あるパケットの送信は、その分類の結果、それが、未送信パケット（またはそれらの記述子）をすでに格納しているトラフィックシェーピングキューに割当てられた場合、遅延される。
【００３１】
ステージ４４０で、データトラフィックシェーピングモジュールが、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきであると判断すると、データトラフィックシェーピングモジュールは、第１のデータパケットに関連付けられた第１の記述子を一次送信キューから除去し、分類の結果に基づいて第１の記述子を対応するトラフィックシェーピングキューに格納する。たとえば、図６Ａおよび図６Ｂを参照して、第２のストリームの記述子Ｔ１に関連付けられたデータパケットの、ネットワークカード１６８による送信が遅延されるべきであるという判断に応答して、データトラフィックシェーピングモジュール１６６は、記述子Ｔ１を一次送信キュー１６１から除去し、記述子Ｔ１をトラフィックシェーピングキュー１６５に格納する。同様に、データトラフィックシェーピングモジュール１６６は、第２のストリームの記述子Ｔ２およびＴ３を一次送信キュー１６１から除去し、記述子Ｔ２およびＴ３をトラフィックシェーピングキュー１６５に格納する。第１のストリームの記述子Ｓ１に関連付けられたデータパケットの、ネットワークカード１６８による送信が遅延されるべきであるという判断に応答して、データトラフィックシェーピングモジュール１６６は、記述子Ｓ１を一次送信キュー１６１から除去し、記述子Ｓ１をトラフィックシェーピングキュー１６３に格納する。同様に、データトラフィックシェーピングモジュール１６６は、第１のストリームの記述子Ｓ２およびＳ３を一次送信キュー１６１から除去し、記述子Ｓ２およびＳ３をトラフィックシェーピングキュー１６３に格納する。
【００３２】
遅延されるべきであると判断されたトラフィックストリームに関連付けられた記述子の、単一の送信キューからの除去は、「ライン先頭ブロッキング」と呼ばれるキューイング問題を解決することができる。先入れ先出し（ＦＩＦＯ）キューの先頭のパケットの送信が遅延されるものの、送信キューに残っている場合、そのパケットは、キューにおいてその後ろに格納された記述子に関連付けられた他のすべてのパケット（さもなければ、トラフィックシェーピングモジュールによって実現されたトラフィックシェーピング規則に基づいて遅延されなかったであろうパケットを含む）の処理をブロックし、「ライン先頭ブロッキング」問題を引き起こすであろう。対照的に、トラフィックシェーピング規則に基づいて送信が遅延されるべきであると判断されたデータパケットについては、データトラフィックシェーピングモジュール１６６は、パケットに関連付けられた記述子を送信キューの先頭から転送することができる。この除去は、キューに格納された記述子に関連付けられた他のパケットの継続的な処理を可能にすることができ、それにより、「先頭ラインブロッキング」問題を解決する。さらに、送信キューからの記述子の除去に応答して、データトラフィックシェーピングモジュール１６６は、記述子を対応するトラフィックシェーピングキューに移動させることができ、それにより、記述子またはその対応するパケットを破棄することなく、パケットの遅延された送信を可能にする。
【００３３】
図６Ｂを再び参照して、いくつかの実現化例では、データトラフィックシェーピングモジュール１６６が、第１のストリームにおけるデータパケット（たとえば、記述子Ｓ１に対応するデータパケット）の、ネットワークカード１６８による送信が遅延されるべきであると判断すると、データトラフィックシェーピングモジュール１６６は、第１のストリームにおけるデータパケットに関連付けられた記述子を、第１のトラフィックシェーピングキュー（たとえば、トラフィックシェーピングキュー１６３）に格納する。データトラフィックシェーピングモジュール１６６が、第１のストリームとは異なる第２のストリームにおけるデータパケット（たとえば、記述子Ｔ１に対応するデータパケット）の、ネットワークカードによる送信が遅延されるべきであると判断すると、データトラフィックシェーピングモジュール１６６は、第２のストリームにおけるデータパケットに関連付けられた記述子を、第２のトラフィックシェーピングキュー（たとえば、トラフィックシェーピングキュー１６５）に格納する。いくつかの実現化例では、異なるストリームに関連付けられたパケットが、同じトラフィックシェーピングキューに転送されてもよい。すなわち、トラフィックシェーピングモジュール１６６は、トラフィックシェーピングモジュール１６６が扱うストリームの数よりも少ない、多くの場合はるかに少ないトラフィックシェーピングキューを維持することができる。
【００３４】
ステージ４５０で、データトラフィックシェーピングモジュールは、ネットワークカードに、トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットを、それぞれのトラフィックシェーピングキューに関連付けられた送信速度規則に従って送信させる。たとえば、図６Ｂ〜６Ｄを参照して、データトラフィックシェーピングモジュール１６６は、ネットワークカード１６８に、トラフィックシェーピングキュー１６３に格納された記述子Ｓ１、Ｓ２およびＳ３に関連付けられたデータパケットを、トラフィックシェーピングキュー１６３に関連付けられた送信速度規則に従って、遅延された態様で送信させる。データトラフィックシェーピングモジュール１６６はまた、ネットワークカード１６８に、トラフィックシェーピングキュー１６５に格納された記述子Ｔ１、Ｔ２およびＴ３に関連付けられたデータパケットを、トラフィックシェーピングキュー１６５に関連付けられた送信速度規則に従って、遅延された態様で送信させる。
【００３５】
ステージ４６０で、データトラフィックシェーピングモジュールが、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきではないと判断すると、データトラフィックシェーピングモジュールは、ネットワークカードに、トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットをすぐに送信させることができる。たとえば、あるデータパケットが、それが無制限の送信速度を可能にする送信速度規則を有するトラフィックシェーピングキューに割当てられるように分類され、かつそのキューが空である場合、そのデータパケットは遅延なくすぐに送信されてもよい。図６Ａ〜６Ｄに示す例では、記述子Ｕ１およびＵ２に関連付けられたパケットが、そのようなものとして扱われる。同様に、あるパケットが、空であり、かつその対応する送信速度規則で識別された送信速度を上回らなかったトラフィックシェーピングキューに分類された場合、そのパケットはすぐに送信されてもよい。
【００３６】
いくつかの実現化例では、ネットワークカード１６８は、リソースを使用することによってデータパケットを送信する。いくつかの実現化例では、リソースは、アプリケーション１５０、ネットワークインターフェイスドライバ１６４、およびネットワークカード１６８のうちのいくつかまたはすべてによって共有されるメモリバッファ（たとえば、図１および図６Ａ〜６Ｄのパケットバッファ１６９）である。たとえば、ネットワークカード１６８は、（共有メモリにおける）パケットバッファ１６９におけるデータパケットのアドレスを、データパケットに関連付けられた記述子を使用して識別し、次に、パケットバッファ１６９からデータパケットを送信する。いくつかの実現化例では、パケットバッファ１６９を使用してデータパケットを送信することに応答して、ネットワークカード１６８は、パケットバッファが、送信されたパケットを格納するために使用されるメモリ空間を、その空間が新規パケットを格納するために使用できるように解放するようにすることができる。
【００３７】
ステージ４７０で、データトラフィックシェーピングモジュールは、ネットワークインターフェイスドライバに、データパケットの順調な送信を通知することができる。たとえば、図６Ｃを参照して、記述子Ｕ１およびＵ２に関連付けられたデータパケットの、ネットワークカード１６８を介した（即時）送信の順調な完了に応答して、データトラフィックシェーピングモジュール１６６は、ネットワークインターフェイスドライバ１６４に、データパケットの順調な送信を通知する。いくつかの実現化例では、データトラフィックシェーピングモジュール１６６は、記述子Ｕ１およびＵ２に関連付けられたデータパケットの順調な送信を示す、ネットワークカード１６８によって生成された単一のメッセージを、ネットワークインターフェイスドライバ１６４に発送することによって、ネットワークインターフェイスドライバ１６４にデータパケットの順調な送信を通知することができる。いくつかの実現化例では、データトラフィックシェーピングモジュール１６６は、パケット毎に別々の送信完了メッセージをネットワークインターフェイスドライバ１６４に発送することによって、ネットワークインターフェイスドライバ１６４に、記述子Ｕ１およびＵ２に関連付けられたデータパケットの各々の順調な送信を別々に通知することができる。
【００３８】
遅延された送信のために、同様の通信を生成し発送することができる。たとえば、図６Ｄを参照して、記述子Ｔ１、Ｓ１、Ｔ２、Ｓ２、Ｔ３およびＳ３に関連付けられたデータパケットの、ネットワークカード１６８を介した（遅延）送信の順調な完了に応答して、データトラフィックシェーピングモジュール１６６は、ネットワークインターフェイスドライバ１６４に、データパケットの順調な送信を通知する。いくつかの実現化例では、データトラフィックシェーピングモジュール１６６は、複数のデータパケットの順調な送信を示す、ネットワークカード１６８によって生成された単一のメッセージを、ネットワークインターフェイスドライバ１６４に発送することによって、ネットワークインターフェイスドライバ１６４にデータパケットの順調な送信を通知することができる。いくつかの実現化例では、データトラフィックシェーピングモジュール１６６は、ネットワークインターフェイスドライバ１６４に、個々のデータパケットの順調な送信を別々に通知することができる。
【００３９】
図５は、ネットワークインターフェイスドライバによって行なわれる例示的な方法５００を使用して、ネットワークトラフィックをシェーピングするためのフローチャートである。広範な概観では、方法５００はステージ５１０で始まり、そこで、図１および図６Ａ〜６Ｄに示すネットワークインターフェイスドライバ１６４といったネットワークインターフェイスドライバが、受信された第１の組のパケットのうちの１つのパケットが、ネットワークカード１６８といったネットワークカードによって順調に送信されたか判断する。ステージ５２０で、ネットワークインターフェイスドライバが、第１の組の受信されたパケットのうちの１つのパケットが順調に送信されたと判断すると、ネットワークインターフェイスドライバは、パケット送信完了メッセージをアプリケーションに通信し、アプリケーションは、ネットワークインターフェイスドライバからのパケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバに発送する。
【００４０】
図５のフローチャートに示す方法を、図６Ａ〜６Ｄを参照して以下により詳細に説明する。
【００４１】
図５をより詳細に参照して、ステージ５１０で、ネットワークインターフェイスドライバは、受信された第１の組のパケットのうちの１つのパケットが、ネットワークカードによって順調に送信されたか判断する。たとえば、図６Ｃを参照して、記述子Ｕ１およびＵ２に関連付けられたデータパケットの、ネットワークカード１６８による送信の順調な完了に応答して、データトラフィックシェーピングモジュール１６６は、単一のメッセージまたは複数のメッセージを通信することによって、ネットワークインターフェイスドライバ１６４にデータパケットの順調な送信を通知する。データトラフィックシェーピングモジュール１６６からのデータパケットの順調な送信の通知に基づいて、ネットワークインターフェイスドライバ１６４は、受信されたパケットのうちの各パケットがネットワークカード１６８によって順調に送信されたと判断する。
【００４２】
ステージ５２０で、ネットワークインターフェイスドライバが、受信された第１の組のパケットのうちの１つのパケットが順調に送信されたと判断することに応答して、ネットワークインターフェイスドライバは、パケット送信完了メッセージをアプリケーションに通信し、アプリケーションは、ネットワークインターフェイスドライバからのパケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバに発送する。たとえば、図６Ｃを参照して、元々アプリケーション１５０Ｃから送信された第３のストリームの記述子Ｕ１に関連付けられたパケットがネットワークカード１６８によって順調に送信されたという判断に応答して、ネットワークインターフェイスドライバ１６４は、記述子Ｕ１に対応するパケット送信完了メッセージ１６７（たとえば、図６ＣのＭ−Ｕ１）をアプリケーション１５０Ｃに通信する。同様に、元々アプリケーション１５０Ｃから送信された第３のストリームの記述子Ｕ２に関連付けられたパケットがネットワークカード１６８によって順調に送信されたという判断に応答して、ネットワークインターフェイスドライバ１６４は、記述子Ｕ２に対応するパケット送信完了メッセージ１６７（たとえば、図６ＣのＭ−Ｕ２）をアプリケーション１５０Ｃに通信する。いくつかの実現化例では、送信メッセージ１６７は小さくてもよい（たとえば、３２バイトであるか、または数個の６４ビット整数を含む）。いくつかの実現化例では、記述子Ｕ１およびＵ２に関連付けられたデータパケットの順調な送信を示す単一のメッセージ（図示せず）をデータトラフィックシェーピングモジュール１６６から受信することに応答して、ネットワークインターフェイスドライバ１６４は、２つの別々の送信完了メッセージ（たとえば、図６ＣのＭ−Ｕ１およびＭ−Ｕ２）を生成し、各メッセージを、対応するパケットソース、たとえばアプリケーション１５０Ｃに、データパケットの順調な送信の順序で通信する。いくつかの実現化例では、記述子Ｕ１およびＵ２に関連付けられたデータパケットの各々の順調な送信を示すメッセージ（図示せず）をデータトラフィックシェーピングモジュール１６６から受信することに応答して、ネットワークインターフェイスドライバ１６４は、受信されたメッセージを、送信完了メッセージとして、対応するパケットソース、たとえばアプリケーション１５０Ｃに発送することができる。
【００４３】
図６Ｄを参照して、元々アプリケーション１５０Ｂから送信された第２のストリームの記述子Ｔ１に関連付けられたパケットがネットワークカード１６８によって順調に送信されたという判断に応答して、ネットワークインターフェイスドライバ１６４は、記述子Ｔ１に対応するパケット送信完了メッセージ１６７（たとえば、図６ＤのＭ−Ｔ１）をアプリケーション１５０Ｂに通信する。同様に、元々アプリケーション１５０Ａから送信された第１のストリームの記述子Ｓ１に関連付けられたパケットがネットワークカード１６８によって順調に送信されたという判断に応答して、ネットワークインターフェイスドライバ１６４は、記述子Ｓ１に対応するパケット送信完了メッセージ１６７（たとえば、図６ＤのＭ−Ｓ１）をアプリケーション１５０Ｂに通信する。いくつかの実現化例では、記述子Ｔ１、Ｓ１、Ｔ２、Ｓ２、Ｔ３およびＳ３に関連付けられたデータパケットの順調な送信を示す単一のメッセージ（図示せず）をデータトラフィックシェーピングモジュール１６６から受信することに応答して、ネットワークインターフェイスドライバ１６４は、６つの別々の送信完了メッセージ（たとえば、図６ＣのＭ−Ｔ１、Ｍ−Ｓ１、Ｍ−Ｔ２、Ｍ−Ｓ２、Ｍ−Ｔ３およびＭ−Ｓ３）を生成し、各メッセージを、対応するパケットソース（たとえば、第１のストリームの記述子Ｔ１、Ｔ２、Ｔ３についてはアプリケーション１５０Ａ、第２のストリームの記述子Ｓ１、Ｓ２、Ｓ３についてはアプリケーション１５０Ｂ）に、データパケットの順調な送信の順序で（たとえば、Ｔ１、Ｓ１、Ｔ２、Ｓ２、Ｔ３およびＳ３という順序で）通信する。または、各メッセージがデータトラフィックシェーピングモジュール１６６から受信されると、各ソースへの１つだけのメッセージ（たとえば、アプリケーション１５０Ａへの１つのメッセージ、およびアプリケーション１５０Ｂへの１つのメッセージ）を送信することができ、各メッセージは、複数の順調に送信されたパケットを識別する。
【００４４】
いくつかの実現化例では、アプリケーション１５０の各々は、ネットワークインターフェイスドライバ１６４からのパケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバ１６４に発送するように構成可能である。いくつかの実現化例では、アプリケーション１５０の各々は、ネットワークインターフェイスドライバ１６４からの、ある特定のストリームのデータパケットについての送信完了メッセージの受信を待ってから、同じストリームの追加のデータパケットをネットワークインターフェイスドライバ１６４に発送するように構成可能である。たとえば、図６Ｃに示すように、アプリケーション１５０Ｃは、ネットワークインターフェイスドライバ１６４からの、記述子Ｕ１に対応する第３のストリームのデータパケットについての送信完了メッセージの受信を待つ。図６Ｄを参照して、アプリケーション１５０Ｃが記述子Ｕ１に対応する送信完了メッセージを受信することに応答して、アプリケーション１５０Ｃは、同じ第３のストリームの追加のデータパケット（たとえば、図６Ｄに示すような記述子Ｕ３およびＵ４に対応するデータパケット）をネットワークインターフェイスドライバ１６４に発送する。このように、アプリケーション１５０Ｃは、同じストリームのパケットがネットワークカード１６８によって送信されたというパケット送信完了メッセージを受信したときだけ、追加のパケットをネットワークインターフェイスドライバ１６４に送信することによって、一次送信キューに、ストリーム毎に少数のパケット（たとえば、１つ、２つ、または３つのパケット）を維持することができる。いくつかの実現化例では、ある特定のストリームの記述子に対応する送信完了メッセージを受信することに応答して、アプリケーションは、その特定のストリームとは異なるストリームの追加のデータパケットをネットワークインターフェイスドライバ１６４に発送することができる。
【００４５】
図３〜５のフローチャートに示す方法を、いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である図７Ａ〜７Ｄを参照して以下にさらに説明する。図７Ａ〜７Ｄでは、図６Ａ〜６Ｄと同じ参照番号が使用されており、同じ説明は省略される。図７Ａ〜７Ｄは、単一のアプリケーション１５０Ｄが異なるストリームまたはフローのパケット（たとえば、記述子Ｖ１、Ｖ２、Ｖ３に対応する第４のストリームのパケット、および記述子Ｗ１、Ｗ２、Ｗ３に対応する第５のストリームのパケット）をネットワークインターフェイスドライバ１６４に送信する場合のデータトラフィックシェーピングシステムの動作を示す。
【００４６】
図３のステージ３１０で、ネットワークインターフェイスドライバは、アプリケーションによって生成され発送された第１の組のデータパケットを、ネットワークカードによる送信のために受信することができる。たとえば、図７Ａを参照して、ネットワークインターフェイスドライバ１６４は、アプリケーション１５０Ｄによって生成され発送された一組のデータパケットを、ネットワークカード１６８による送信のために受信する。図７Ａに示す例では、アプリケーション１５０Ｄは、記述子Ｖ１、Ｖ２およびＶ３に対応する第４のストリームの３つのパケットを順次送信する。同じアプリケーション１５０Ｄは、記述子Ｗ１、Ｗ２およびＷ３に対応する第５のストリームの３つのパケットを順次送信する。
【００４７】
図３のステージ３２０で、ネットワークインターフェイスドライバは、受信された第１の組のデータパケットに関連付けられた記述子を一次送信キュー１６１に格納することができる。いくつかの実現化例では、ネットワークインターフェイスドライバ１６４は、各ストリームからのデータパケットに関連付けられた記述子を、パケットがアプリケーション１５０Ｄによって送信された順序で一次送信キュー１６１に書込む。たとえば、図７Ａに示すように、ネットワークインターフェイスドライバ１６４は、アプリケーション１５０Ｄから６つのデータパケットを受信し、それらのパケットに関連付けられた記述子（たとえば、記述子Ｗ１、Ｗ２、Ｖ１、Ｖ２、Ｖ３、Ｗ３）を、ネットワークカード１６８を介したそれらのパケットの送信のために一次送信キュー１６１に書込む。ネットワークインターフェイスドライバ１６４は、アプリケーション１５０Ｄから第４および第５のストリームのパケットを受信し、対応する記述子（たとえば、第４のストリームについてはＶ１、Ｖ２、Ｖ３、第５のストリームについてはＷ１、Ｗ２、Ｗ３）を、それらが送信された順序で、すなわち、Ｗ１、次にＷ２、次にＶ１、次にＶ２、次にＶ３、次にＷ３という順序で一次送信キュー１６１に書込む。いくつかの実現化例では、一次送信キューにおいて、各ストリームにおけるパケットの受信順序を維持しながら、異なるストリームのパケットをインタリーブすることができる。たとえば、図７Ａに示す例では、一次送信キューにおいて、各ストリームのパケットの受信順序を維持しながら（たとえば、第４のストリームについてはＶ１→Ｖ２→Ｖ３という順序、第５のストリームについてはＷ１→Ｗ２→Ｗ３という順序を維持しながら）、異なるストリームのパケットが（すなわち、Ｗ１、Ｗ２、Ｖ１、Ｖ２、Ｖ３、Ｗ３という順序で）インタリーブされている。
【００４８】
図３のステージ３３０で、ネットワークインターフェイスドライバは、受信された第１の組のデータパケットに関連付けられた記述子（たとえば、Ｗ１、Ｗ２、Ｖ１、Ｖ２、Ｖ３、Ｗ３）を、データトラフィックシェーピングモジュール１６６に転送することができる。
【００４９】
図４を参照して、ステージ４１０で、データトラフィックシェーピングモジュールは、複数のトラフィックシェーピングキューを維持し、一次送信キューから、ネットワークインターフェイスドライバによって転送されたデータパケットの記述子を受信する。図７Ａおよび図７Ｂを参照して、ネットワークインターフェイスドライバ１６４が、受信されたデータパケットに関連付けられた記述子（たとえば、Ｗ１、Ｗ２、Ｖ１、Ｖ２、Ｖ３、およびＷ３）をデータトラフィックシェーピングモジュール１６６に転送することに応答して、データトラフィックシェーピングモジュール１６６は、一次送信キュー１６１から、データパケットの転送された記述子を受信する。
【００５０】
図４のステージ４２０で、データトラフィックシェーピングモジュールは、受信された記述子に関連付けられたデータパケットを分類する。いくつかの実現化例では、たとえば図７Ｂに示すように、データトラフィックシェーピングモジュール１６６は、各ストリームの特性を対応するトラフィックシェーピングキューにマッピングするための一組の分類規則に基づいて、受信された記述子に関連付けられたデータパケットを分類する。
【００５１】
図４のステージ４３０で、データトラフィックシェーピングモジュールは、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきか判断することができる。あるパケットの送信は、その分類の結果、それが、未送信パケット（またはそれらの記述子）をすでに格納しているトラフィックシェーピングキューに割当てられた場合、遅延される。
【００５２】
図４のステージ４４０で、データトラフィックシェーピングモジュールが、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきであると判断すると、データトラフィックシェーピングモジュールは、第１のデータパケットに関連付けられた第１の記述子を一次送信キューから除去し、分類の結果に基づいて第１の記述子を対応するトラフィックシェーピングキューに格納する。たとえば、図７Ａおよび図７Ｂを参照して、第５のストリームの記述子Ｗ１およびＷ２に関連付けられたデータパケットの、ネットワークカード１６８による送信が遅延されるべきであるという判断に応答して、データトラフィックシェーピングモジュール１６６は、記述子Ｗ１およびＷ２を一次送信キュー１６１から除去し、記述子Ｗ１およびＷ２をトラフィックシェーピングキュー１６３に格納する。
【００５３】
図４のステージ４５０で、データトラフィックシェーピングモジュールは、ネットワークカードに、トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットを、それぞれのトラフィックシェーピングキューに関連付けられた送信速度規則に従って送信させる。たとえば、図７Ｂ〜７Ｄを参照して、データトラフィックシェーピングモジュール１６６は、ネットワークカード１６８に、トラフィックシェーピングキュー１６３に格納された記述子Ｗ１、Ｗ２およびＷ３に関連付けられたデータパケットを、トラフィックシェーピングキュー１６３に関連付けられた送信速度規則に従って、遅延された態様で送信させる。
【００５４】
図４のステージ４６０で、データトラフィックシェーピングモジュールが、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきではないと判断すると、データトラフィックシェーピングモジュールは、ネットワークカードに、トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットをすぐに送信させることができる。たとえば、あるデータパケットが、それが無制限の送信速度を可能にする送信速度規則を有するトラフィックシェーピングキューに割当てられるように分類され、かつそのキューが空である場合、そのデータパケットは遅延なくすぐに送信されてもよい。図７Ａ〜７Ｄに示す例では、記述子Ｖ１、Ｖ２およびＶ３に関連付けられたパケットが、そのようなものとして扱われる。
【００５５】
図４のステージ４７０で、データトラフィックシェーピングモジュールは、ネットワークインターフェイスドライバに、データパケットの順調な送信を通知することができる。たとえば、図７Ｃを参照して、記述子Ｖ１、Ｖ２およびＶ３に関連付けられたデータパケットの、ネットワークカード１６８を介した（即時）送信の順調な完了に応答して、データトラフィックシェーピングモジュール１６６は、ネットワークインターフェイスドライバ１６４に、データパケットの順調な送信を通知する。いくつかの実現化例では、図７Ｃに示すように、データトラフィックシェーピングモジュール１６６は、パケット毎に別々の送信完了メッセージをネットワークインターフェイスドライバ１６４に発送することによって、ネットワークインターフェイスドライバ１６４に、記述子Ｖ１、Ｖ２およびＶ３に関連付けられたデータパケットの各々の順調な送信を別々に通知することができる。
【００５６】
遅延された送信のために、同様の通信を生成し発送することができる。たとえば、図７Ｄを参照して、記述子Ｗ１、Ｗ２およびＷ３に関連付けられたデータパケットの、ネットワークカード１６８を介した（遅延）送信の順調な完了に応答して、データトラフィックシェーピングモジュール１６６は、ネットワークインターフェイスドライバ１６４に、データパケットの順調な送信を通知する。
【００５７】
図５のステージ５１０で、ネットワークインターフェイスドライバは、受信された第１の組のパケットのうちの１つのパケットが、ネットワークカードによって順調に送信されたか判断する。たとえば、図７Ｃを参照して、記述子Ｖ１、Ｖ２およびＶ３に関連付けられたデータパケットの、ネットワークカード１６８による送信の順調な完了に応答して、データトラフィックシェーピングモジュール１６６は、単一のメッセージまたは複数のメッセージを通信することによって、ネットワークインターフェイスドライバ１６４にデータパケットの順調な送信を通知する。データトラフィックシェーピングモジュール１６６からのデータパケットの順調な送信の通知に基づいて、ネットワークインターフェイスドライバ１６４は、受信されたパケットのうちの各パケットがネットワークカード１６８によって順調に送信されたと判断する。
【００５８】
図５のステージ５２０で、ネットワークインターフェイスドライバが、受信された第１の組のパケットのうちの１つのパケットが順調に送信されたと判断することに応答して、ネットワークインターフェイスドライバは、パケット送信完了メッセージをアプリケーションに通信し、アプリケーションは、ネットワークインターフェイスドライバからのパケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバに発送する。たとえば、図７Ｃを参照して、元々アプリケーション１５０Ｄから送信された第４のストリームの記述子Ｖ１に関連付けられたパケットがネットワークカード１６８によって順調に送信されたという判断に応答して、ネットワークインターフェイスドライバ１６４は、記述子Ｖ１に対応するパケット送信完了メッセージ１６７（たとえば、図７ＣのＭ−Ｖ１）をアプリケーション１５０Ｄに通信する。同様に、元々アプリケーション１５０Ｄから送信された第４のストリームの記述子Ｖ２およびＶ３に関連付けられたパケットがネットワークカード１６８によって順調に送信されたという判断に応答して、ネットワークインターフェイスドライバ１６４は、記述子Ｖ２およびＶ３に対応する２つのパケット送信完了メッセージ１６７（たとえば、図７ＣのＭ−Ｖ２およびＭ−Ｖ３）をアプリケーション１５０Ｄに通信する。いくつかの実現化例では、アプリケーション１５０Ｄは、ネットワークインターフェイスドライバ１６４からのパケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバ１６４に発送するように構成可能である。いくつかの実現化例では、アプリケーション１５０Ｄは、ネットワークインターフェイスドライバ１６４からの、ある特定のストリームのデータパケットについての送信完了メッセージの受信を待ってから、同じストリームの追加のデータパケットをネットワークインターフェイスドライバ１６４に発送するように構成可能である。たとえば、図７Ｃに示すように、アプリケーション１５０Ｄは、ネットワークインターフェイスドライバ１６４からの、記述子Ｖ１に対応する第４のストリームのデータパケットについての送信完了メッセージの受信を待つ。図７Ｄを参照して、アプリケーション１５０Ｄが記述子Ｖ１に対応する送信完了メッセージを受信することに応答して、アプリケーション１５０Ｄは、同じ第４のストリームの追加のデータパケット（たとえば、図７Ｄに示すような記述子Ｖ４およびＶ５に対応するデータパケット）をネットワークインターフェイスドライバ１６４に発送する。このように、アプリケーション１５０Ｄは、同じストリームのパケットがネットワークカード１６８によって送信されたというパケット送信完了メッセージを受信したときだけ、追加のパケットをネットワークインターフェイスドライバ１６４に送信することによって、一次送信キューに、ストリーム毎に少数のパケット（たとえば、１つ、２つ、または３つのパケット）を維持することができる。
【００５９】
図７Ａ〜７Ｄを参照して、一般に、ネットワークトラフィックは、複数のフローまたはストリームに属する（たとえば、記述子Ｖ１、Ｖ２、Ｖ３に対応する第４のストリームのパケット、およびＷ１、Ｗ２、Ｗ３に対応する第５のストリームのパケット）。各フロー／ストリームは、特定のアプリケーション（たとえば、アプリケーション１５０Ｄ）に属していてもよく、または特定のリモート位置に定められてもよい。たとえば、複数のフロー／ストリームは、同じアプリケーション（たとえば、図７Ａ〜７Ｄのアプリケーション１５０Ｄ）に属していてもよく、または異なるアプリケーション（たとえば、図６Ａ〜６Ｄのアプリケーション１５０Ａ〜１５０Ｃ）に属していてもよい。任意の所与の時間に、ネットワークデバイスは、何百または何千または何十億もの異なるフロー／ストリームを扱うかもしれず、時には、特定の宛先についてのトラフィック、または特定のアプリケーションについてのトラフィックを遅くする必要があるかもしれない。図７Ａ〜７Ｄを参照して、いくつかの実現化例では、データトラフィックシェーピングモジュール１６６は、フロー／ストリームに対応するキュー（たとえば、トラフィックシェーピングキュー１６２および１６３）を取付け、同じキューを通して送信されたすべてのトラフィックを遅くする（たとえば、トラフィックシェーピングキュー１６３を通して送信された記述子Ｗ１、Ｗ２、Ｗ３に関連付けられたすべてのパケットを遅くする）ことによって、同じアプリケーション１５０Ｄから送信された異なるフロー／ストリームを、ライン先頭ブロッキングなしで独立して速度制限し、またはトラフィックシェーピングすることができる。この構成では、フローがアプリケーションによってそれらのキューにどのように入れられるか（たとえば、複数のフローが、図６Ａ〜６Ｄに示すように対応する異なるアプリケーションから受信される場合、または図７Ａ〜７Ｄに示すように同じアプリケーションから受信される場合）にかかわらず、フローは、ライン先頭ブロッキングを引き起こしたりパケットを破棄することなく、また、各アプリケーションから送信されたトラフィックがどのように分類されトラフィックシェーピングされ得るかを各アプリケーションが認識する必要なく、選択的に遅くされ得る。
【００６０】
図３〜５のフローチャートに示す方法を、いくつかの実現化例に従ったデータトラフィックシェーピングシステムの動作の例を表わすブロック図である図８Ａ〜８Ｃを参照して以下にさらに説明する。図８Ａ〜８Ｃでは、図６Ａ〜６Ｄと同じ参照番号が使用されており、同じ説明は省略される。図８Ａ〜８Ｃは、一次送信キュー１６１が一組の一次送信キュー１６１Ａ〜１６１Ｃである場合のデータトラフィックシェーピングシステムの動作を示す。たとえば、一次送信キュー１６１は、マルチキューＮＩＣで実現された複数のキューであってもよい。いくつかの実現化例では、一組の一次送信キュー１６１Ａ〜１６１Ｃの数は、速度リミッタすなわちトラフィックシェーピングキュー１６２Ａ〜１６２Ｄの数よりも少ない。たとえば、何千ものフローまたはストリームをシェーピングするために、ネットワークデバイス１１０は１０〜３２個のハードウェアキューを有していてもよく、一方、その何千ものフローをシェーピングするためにそこに設置されたより多くのトラフィックシェーピングキューを有していてもよい。
【００６１】
図３のステージ３１０で、ネットワークインターフェイスドライバは、アプリケーション１５０によって生成され発送された一組のデータパケットを、ネットワークカードによる送信のために受信することができる。たとえば、図８Ａを参照して、ネットワークインターフェイスドライバ１６４は、アプリケーション１５０Ａ〜１５０Ｃによって生成され発送された一組のデータパケットを、ネットワークカード１６８による送信のために受信する。図８Ａに示す例では、アプリケーション１５０Ａは、記述子Ｓ１、Ｓ２およびＳ３に対応する第１のストリームの３つのパケットを順次送信する。アプリケーション１５０Ｂは、記述子Ｔ１、Ｔ２およびＴ３に対応する第２のストリームの３つのパケットを順次送信する。アプリケーション１５０Ｃは、記述子Ｕ１およびＵ２に対応する第３のストリームの２つのパケットを送信する。いくつかの実現化例では、ネットワークインターフェイスドライバ１６４は、データパケットを、パケットがアプリケーション１５０によって送信された順序で（たとえば、Ｔ１、次にＵ１、次にＴ２、次にＳ１、次にＵ２、次にＳ２、次にＳ３、次にＴ３という順序で）受信する。
【００６２】
図３のステージ３２０で、ネットワークインターフェイスドライバは、受信された第１の組のデータパケットに関連付けられた記述子を、一組の一次送信キュー１６１Ａ〜１６１Ｃに格納することができる。いくつかの実現化例では、ネットワークインターフェイスドライバ１６４は、受信されたデータパケット毎に一次送信キュー１６１Ａ〜１６１Ｃのうちの１つをランダムに選択し、対応する記述子を、一次送信キュー１６１のうちの選択された送信キューに書込む。たとえば、図８Ａを参照して、ネットワークインターフェイスドライバ１６４は、記述子Ｔ１、Ｓ１およびＳ３を（Ｔ１、Ｓ１およびＳ３の順序で）一次送信キュー１６１Ａに書込み、記述子Ｕ１、Ｔ２およびＵ２を（Ｕ１、Ｔ２およびＵ２の順序で）一次送信キュー１６１Ｂに書込み、記述子Ｓ２およびＴ３を（Ｓ２およびＴ３の順序で）一次送信キュー１６１Ｃに書込む。いくつかの実現化例では、各一次送信キューにおいて、各ストリームにおけるパケットの受信順序を維持しながら、異なるストリームのパケットをインタリーブすることができる。たとえば、図８Ａに示す例では、一次送信キュー１６１Ａにおいて、各ストリームのパケットの受信順序を維持しながら（たとえば、第３のストリームについてはＳ１→Ｓ３という順序という順序を維持しながら）、異なるストリームのパケットが（すなわち、Ｔ１、Ｓ１、Ｓ３という順序で）インタリーブされている。
【００６３】
図３のステージ３３０で、ネットワークインターフェイスドライバ１６４は、受信された第１の組のデータパケットに関連付けられ、各一次送信キューに格納された記述子（たとえば、一次送信キュー１６１Ａに格納されたＴ１、Ｓ１、Ｓ３）を、データトラフィックシェーピングモジュール１６６に転送することができる。
【００６４】
図４を参照して、ステージ４１０で、データトラフィックシェーピングモジュールは、複数のトラフィックシェーピングキューを維持し、一次送信キュー１６１Ａ〜１６１Ｃの各々から、ネットワークインターフェイスドライバによって転送されたデータパケットの記述子を受信する。図８Ａおよび図８Ｂを参照して、ネットワークインターフェイスドライバ１６４が、受信されたデータパケットに関連付けられた記述子をデータトラフィックシェーピングモジュール１６６に転送することに応答して、データトラフィックシェーピングモジュール１６６は、一次送信キュー１６１Ａからデータパケットの記述子（たとえば、記述子Ｔ１、Ｓ１、Ｓ３）を受信し、一次送信キュー１６１Ｂからデータパケットの記述子（たとえば、記述子Ｕ１、Ｔ２、Ｕ２）を受信し、一次送信キュー１６１Ｃからデータパケットの記述子（たとえば、記述子Ｓ２、Ｔ３）を受信する。いくつかの実現化例では、データトラフィックシェーピングモジュールは、複数のトラフィックシェーピングキューを維持し、各一次送信キューから、ネットワークインターフェイスドライバによって転送されたデータパケットの記述子を受信する。たとえば、図８Ａ〜８Ｃを参照して、データトラフィックシェーピングモジュール１６６は、複数のトラフィックシェーピングキュー（たとえば、トラフィックシェーピングキュー１６２Ａ〜１６２Ｄ）を維持する。
【００６５】
図４のステージ４２０で、データトラフィックシェーピングモジュール１６６は、各一次送信キューから受信された記述子に関連付けられたデータパケットを分類する。ステージ４３０で、データトラフィックシェーピングモジュール１６６は、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきか判断することができる。あるパケットの送信は、その分類の結果、それが、未送信パケット（またはそれらの記述子）をすでに格納しているトラフィックシェーピングキューに割当てられた場合、遅延される。
【００６６】
図４のステージ４４０で、データトラフィックシェーピングモジュールが、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきであると判断すると、データトラフィックシェーピングモジュールは、第１のデータパケットに関連付けられた第１の記述子を各一次送信キューから除去し、分類の結果に基づいて第１の記述子を対応するトラフィックシェーピングキューに格納する。たとえば、図８Ａおよび図８Ｂを参照して、一次送信キュー１６１Ａについて、データトラフィックシェーピングモジュールは、一次送信キュー１６１Ａに格納された記述子Ｔ１、Ｓ１、Ｓ３に関連付けられたデータパケットの、ネットワークカード１６８による送信が遅延されるべきであると判断する。第２のストリームの記述子Ｔ１に関連付けられたデータパケットの、ネットワークカード１６８による送信が遅延されるべきであるという判断に応答して、データトラフィックシェーピングモジュール１６６は、記述子Ｔ１を一次送信キュー１６１Ａから除去し、記述子Ｔ１をトラフィックシェーピングキュー１６２Ｃに格納する。同様に、データトラフィックシェーピングモジュール１６６は、第１のストリームの記述子Ｓ１を一次送信キュー１６１Ａから除去し、記述子Ｓ１をトラフィックシェーピングキュー１６２Ｂに格納する。データトラフィックシェーピングモジュール１６６はまた、記述子Ｓ３を一次送信キュー１６１Ａから除去し、記述子Ｓ３をトラフィックシェーピングキュー１６２Ｂに格納する。同様の態様で、図８Ａおよび図８Ｂに示すように、一次送信キュー１６１Ｂについて、データトラフィックシェーピングモジュール１６６は、第３のストリームの記述子Ｕ１を一次送信キュー１６１Ｂから除去し、記述子Ｕ１をトラフィックシェーピングキュー１６２Ａに格納し、第２のストリームの記述子Ｔ２を一次送信キュー１６１Ｂから除去し、記述子Ｔ２をトラフィックシェーピングキュー１６２Ｃに格納し、第３のストリームの記述子Ｕ２を一次送信キュー１６１Ｂから除去し、記述子Ｕ２をトラフィックシェーピングキュー１６２Ａに格納する。同様の態様で、図８Ａおよび図８Ｂに示すように、一次送信キュー１６１Ｃについて、データトラフィックシェーピングモジュール１６６は、第１のストリームの記述子Ｓ２を一次送信キュー１６１Ｃから除去し、記述子Ｓ２をトラフィックシェーピングキュー１６２Ｂに格納し、第２のストリームの記述子Ｔ３を一次送信キュー１６１Ｃから除去し、記述子Ｔ３をトラフィックシェーピングキュー１６２Ｃに格納する。
【００６７】
図４のステージ４５０で、データトラフィックシェーピングモジュールは、ネットワークカードに、トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットを、それぞれのトラフィックシェーピングキューに関連付けられた送信速度規則に従って送信させる。たとえば、図８Ｂ〜８Ｃを参照して、データトラフィックシェーピングモジュール１６６は、ネットワークカード１６８に、トラフィックシェーピングキュー１６２Ｂに格納された記述子Ｓ１、Ｓ２およびＳ３に関連付けられたデータパケットを、トラフィックシェーピングキュー１６２Ｂに関連付けられた送信速度規則に従って、遅延された態様で送信させる。データトラフィックシェーピングモジュール１６６はまた、ネットワークカード１６８に、トラフィックシェーピングキュー１６２Ｃに格納された記述子Ｔ１、Ｔ２およびＴ３に関連付けられたデータパケットを、トラフィックシェーピングキュー１６２Ｃに関連付けられた送信速度規則に従って、遅延された態様で送信させる。
【００６８】
図４のステージ４６０で、データトラフィックシェーピングモジュールが、受信された第１の記述子に関連付けられた第１のデータパケットの、ネットワークカードによる送信が遅延されるべきではないと判断すると、データトラフィックシェーピングモジュールは、ネットワークカードに、トラフィックシェーピングキューに格納された記述子に関連付けられたデータパケットをすぐに送信させることができる。たとえば、あるデータパケットが、それが無制限の送信速度を可能にする送信速度規則を有するトラフィックシェーピングキューに割当てられるように分類され、かつそのキューが空である場合、そのデータパケットは遅延なくすぐに送信されてもよい。図８Ａ〜８Ｃに示す例では、記述子Ｕ１およびＵ２に関連付けられたパケットが、そのようなものとして扱われる。
【００６９】
図４のステージ４７０で、データトラフィックシェーピングモジュールは、ネットワークインターフェイスドライバに、データパケットの順調な送信を通知することができる。たとえば、図８Ｂおよび図８Ｃを参照して、記述子Ｕ１およびＵ２に関連付けられたデータパケットの、ネットワークカード１６８を介した（即時）送信の順調な完了に応答して、データトラフィックシェーピングモジュール１６６は、ネットワークインターフェイスドライバ１６４に、データパケットの順調な送信を通知する。たとえば、図８Ｂおよび図８Ｃを参照して、記述子Ｔ１、Ｓ１、Ｔ２、Ｓ２、Ｔ３およびＳ３に関連付けられたデータパケットの、ネットワークカード１６８を介した（遅延）送信の順調な完了に応答して、データトラフィックシェーピングモジュール１６６は、ネットワークインターフェイスドライバ１６４に、データパケットの順調な送信を通知する。
【００７０】
図５を参照して、ステージ５１０で、ネットワークインターフェイスドライバは、受信された第１の組のパケットのうちの１つのパケットが、ネットワークカードによって順調に送信されたか判断する。
【００７１】
ステージ５２０で、ネットワークインターフェイスドライバが、受信された第１の組のパケットのうちの１つのパケットが順調に送信されたと判断することに応答して、ネットワークインターフェイスドライバは、パケット送信完了メッセージをアプリケーションに通信し、アプリケーションは、ネットワークインターフェイスドライバからのパケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバに発送する。たとえば、図８Ｃを参照して、元々アプリケーション１５０Ｃから送信された第３のストリームの記述子Ｕ１に関連付けられたパケットがネットワークカード１６８によって順調に送信されたという判断に応答して、ネットワークインターフェイスドライバ１６４は、記述子Ｕ１に対応するパケット送信完了メッセージ１６７（たとえば、図８ＣのＭ−Ｕ１）をアプリケーション１５０Ｃに通信する。同様に、元々アプリケーション１５０Ｃから送信された第３のストリームの記述子Ｕ２に関連付けられたパケットがネットワークカード１６８によって順調に送信されたという判断に応答して、ネットワークインターフェイスドライバ１６４は、記述子Ｕ２に対応するパケット送信完了メッセージ１６７（たとえば、図８ＣのＭ−Ｕ２）をアプリケーション１５０Ｃに通信する。同様に、いくつかの実現化例では、記述子Ｔ１、Ｓ１、Ｔ２、Ｓ２、Ｔ３およびＳ３に関連付けられたデータパケットの順調な送信を示すメッセージ（図示せず）をデータトラフィックシェーピングモジュール１６６から受信することに応答して、ネットワークインターフェイスドライバ１６４は、６つの別々の送信完了メッセージ（たとえば、図８ＣのＭ−Ｔ１、Ｍ−Ｓ１、Ｍ−Ｔ２、Ｍ−Ｓ２、Ｍ−Ｔ３およびＭ−Ｓ３）を生成し、各メッセージを、対応するパケットソースに、データパケットの順調な送信の順序で（たとえば、Ｔ１、Ｓ１、Ｔ２、Ｓ２、Ｔ３およびＳ３という順序で）通信する。
【００７２】
図８Ｃを参照して、いくつかの実現化例では、アプリケーション１５０の各々は、ネットワークインターフェイスドライバ１６４からのパケット送信完了メッセージの受信を待ってから、追加のデータパケットをネットワークインターフェイスドライバ１６４に発送するように構成可能である。いくつかの実現化例では、アプリケーション１５０の各々は、ネットワークインターフェイスドライバ１６４からの、ある特定のストリームのデータパケットについての送信完了メッセージの受信を待ってから、同じストリームの追加のデータパケットをネットワークインターフェイスドライバ１６４に発送するように構成可能である。
【００７３】
図８Ａ〜８Ｃを参照して、いくつかの実現化例では、アプリケーション１５０またはネットワークインターフェイスドライバ１６４は、フロー／ストリームおよびそれらの対応するパケットを、一組の一次送信キュー１６１Ａ〜１６１Ｃ中に、それらが構成される任意の態様（たとえば、キュー中へのランダム分散、またはキュー中へのラウンドロビン分散）で分散してもよい。いくつかの実現化例では、アプリケーション１５０またはネットワークインターフェイスドライバ１６４は、フロー／ストリームおよびそれらの対応するパケットを、一組の一次送信キュー中に、一次送信キューの数にかかわらず同じ態様で分散してもよい。いくつかの実現化例では、アプリケーション１５０またはネットワークインターフェイスドライバ１６４は、データトラフィックシェーピングモジュール１６６、トラフィックシェーピングキュー１６２Ａ〜１６２Ｄの実現詳細、および、トラフィックがそれらのキューにどのように分類されるかを認識しないように構成される。たとえば、仮想マシンで実行されるアプリケーションからのトラフィックは、ライン先頭ブロッキングなしで、また、仮想マシンのアドミニストレータにトラフィックシェーピングキューおよび各キューに対する分類規則の詳細を通知せずに、シェーピングされ、または速度制限され得る。図８Ａ〜８Ｃに示す構成では、パケットは、一次送信キューからできるだけ速く出ることができ、また、パケットが一次送信キューから出る際に完了メッセージを返すことなくトラフィックシェーピングキューに分類されることができる。いくつかの実現化例では、図８Ａ〜８Ｃに示すように、パケットがトラフィックシェーピングキューから出るまで完了メッセージは返されず、そのため、完了メッセージはバラバラの順序で、すなわち、パケットが一次送信キューに保存される順序とは異なる順序で、およびＦＩＦＯではない順序で返され、それにより、より速いフローを送信するアプリケーションが、より遅いフローを送信する別のアプリケーションよりも、多くの追加のパケットを送信できるようにする。図８Ａ〜Ｃを参照して、データトラフィックシェーピングモジュール１６６が、複数の一次送信キュー１６１Ａ〜１６１Ｃを有するシステムにおいて実現される場合、ネットワークインターフェイスドライバ１６４は、各パケットが予め定められたキュー割当て規則に基づいて正しいキューに入れられるか、またはパケットトラフィックがキュー中に「ランダムに」分散されるかにかかわらず、「順序がバラバラの」完了メッセージを返すことができる（たとえば、完了メッセージＭ−Ｕ１、Ｍ−Ｕ２、Ｍ−Ｔ２の順序は、対応するパケットが一次送信キュー１６１Ｂに保存される順序、すなわちＵ１、Ｔ２、Ｕ２とは異なっている；図８Ａおよび図８Ｃを参照）。
【００７４】
図９は、例示的なコンピューティングシステム１４０のブロック図である。例示的なコンピューティングシステム１４０は、ここに説明されたコンピュータ化されたコンポーネントを、図示された実現化例に従って実現する際の使用に好適である。広範な概観では、コンピューティングシステム１４０は、命令に従ってアクションを行なうための少なくとも１つのプロセッサ１４８と、命令およびデータを格納するための１つ以上のメモリデバイス１４４または１４９とを含む。図示された例示的なコンピューティングシステム１４０は、メモリ１４４、ネットワーク（図示せず）への接続のためのネットワークインターフェイスポート１４６を有する少なくとも１つのネットワークインターフェイスコントローラ１４３、および他のコンポーネント１４５、たとえば入力／出力（「Ｉ／Ｏ」）コンポーネント１４７と、バス１４２を介して通信している１つ以上のプロセッサ１４８を含む。一般に、プロセッサ１４８は、メモリから受信された命令を実行するであろう。図示されたプロセッサ１４８は、キャッシュメモリ１４９を組込み、またはキャッシュメモリ１４９に直接接続される。場合によっては、命令は、メモリ１４４からキャッシュメモリ１４９に読込まれ、キャッシュメモリ１４９からプロセッサ１４８によって実行される。
【００７５】
より詳細には、プロセッサ１４８は、命令、たとえばメモリ１４４またはキャッシュ１４９から取出された命令を処理する任意の論理回路であってもよい。多くの実現化例では、プロセッサ１４８は、マイクロプロセッサユニット、または専用プロセッサである。コンピューティングシステム１４０は、ここに説明されたように動作できる任意のプロセッサ、または任意の一組のプロセッサに基づいていてもよい。プロセッサ１４８は、シングルコアまたはマルチコアプロセッサであってもよい。プロセッサ１４８は、複数の別個のプロセッサであってもよい。
【００７６】
メモリ１４４は、コンピュータ読取可能なデータを格納するのに好適な任意のデバイスであってもよい。メモリ１４４は、固定ストレージを有するデバイス、またはリムーバブル記憶媒体を読取るためのデバイスであってもよい。例は、あらゆる形の不揮発性メモリ、媒体およびメモリデバイス、半導体メモリデバイス（たとえば、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＳＤＲＡＭ、およびフラッシュメモリデバイス）、磁気ディスク、光磁気ディスク、および光ディスク（たとえばＣＤ  ＲＯＭ、ＤＶＤ−ＲＯＭ、またはＢｌｕ−Ｒａｙ（登録商標）ディスク）を含む。コンピューティングシステム１４０は、任意の数のメモリデバイス１４４を有していてもよい。
【００７７】
キャッシュメモリ１４９は一般に、速い読取時間のためにプロセッサ１４８の近傍に配置された一種のコンピュータメモリである。いくつかの実現化例では、キャッシュメモリ１４９は、プロセッサ１４８の一部であり、またはプロセッサ１４８と同じチップ上にある。いくつかの実現化例では、キャッシュ１４９のレベルは複数あり、たとえば、Ｌ２およびＬ３キャッシュ層がある。
【００７８】
ネットワークインターフェイスコントローラ１４３は、（ネットワークインターフェイスポートとも呼ばれる）ネットワークインターフェイス１４６を介して、データ交換を管理する。ネットワークインターフェイスコントローラ１４３は、ネットワーク通信のためのＯＳＩモデルの物理層およびデータリンク層を扱う。いくつかの実現化例では、ネットワークインターフェイスコントローラのタスクのうちのいくつかは、プロセッサ１４８の１つ以上によって扱われる。いくつかの実現化例では、ネットワークインターフェイスコントローラ１４３は、プロセッサ１４８の一部である。いくつかの実現化例では、コンピューティングシステム１４０は、単一のコントローラ１４３によって制御される複数のネットワークインターフェイス１４６を有する。いくつかの実現化例では、コンピューティングシステム１４０は、複数のネットワークインターフェイスコントローラ１４３を有する。いくつかの実現化例では、各ネットワークインターフェイス１４６は、物理ネットワークリンク（たとえばｃａｔ−５イーサネット（登録商標）リンク）のための接続点である。いくつかの実現化例では、ネットワークインターフェイスコントローラ１４３は無線ネットワーク接続をサポートし、インターフェイスポート１４６は、（たとえば、ＩＥＥＥ  ８０２．１１プロトコル、近距離無線通信「ＮＦＣ」（near field communication）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ＡＮＴ、または任意の他の無線プロトコルのうちのいずれかのための）無線受信機／送信機である。いくつかの実現化例では、ネットワークインターフェイスコントローラ１４３は、イーサネットなどの１つ以上のネットワークプロトコルを実現する。一般に、コンピューティングシステム１４０は、ネットワークインターフェイス１４６を通して、物理リンクまたは無線リンクを介して、他のコンピューティングデバイスとデータを交換する。ネットワークインターフェイス１４６は、別のデバイスに直接リンクしてもよく、もしくは、インターネットなどのデータネットワークにコンピューティングシステム１４０を接続する、ハブ、ブリッジ、スイッチ、またはルータなどのネットワークデバイスといった中間デバイスを介して、別のデバイスにリンクしてもよい。
【００７９】
コンピューティングシステム１４０は、１つ以上の入力または出力（「Ｉ／Ｏ」）デバイスを含んでいてもよく、または当該入力または出力デバイスのためのインターフェイスを提供してもよい。入力デバイスは、キーボード、マイクロホン、タッチスクリーン、フットペダル、センサ、ＭＩＤＩデバイス、および、マウスまたはトラックボールなどのポインティングデバイスを、何ら限定されることなく含んでいてもよい。出力デバイスは、ビデオディスプレイ、スピーカ、再生可能な点字端末、ライト、ＭＩＤＩデバイス、および、２Ｄまたは３Ｄプリンタを、何ら限定されることなく含む。
【００８０】
他のコンポーネント１４５は、Ｉ／Ｏインターフェイス、外部シリアルデバイスポート、および任意の追加のコプロセッサを含んでいてもよい。たとえば、コンピューティングシステム１４０は、入力デバイス、出力デバイス、または追加のメモリデバイス（たとえば、ポータブルフラッシュドライブまたは外部メディアドライブ）を接続するためのインターフェイス（たとえば、ユニバーサルシリアルバス（universal serial bus：ＵＳＢ）インターフェイス）を含んでいてもよい。いくつかの実現化例では、コンピューティングデバイス１４０は、コプロセッサなどの追加のデバイス１４５を含み、たとえば、数値演算コプロセッサは、プロセッサ１４８が高精度のまたは複雑な計算を行なうのを支援できる。
【００８１】
この明細書で説明された主題および動作の実現化例は、デジタル電子回路で、もしくは、この明細書で開示された構造およびそれらの構造的等価物を含む有形の媒体、ファームウェア、またはハードウェア上で具現化されたコンピュータソフトウェアで、もしくは、それらのうちの１つ以上の組合せで実現可能である。この明細書で説明された主題の実現化例は、有形の媒体上で具現化された１つ以上のコンピュータプログラムとして、すなわち、データ処理装置による実行のために、またはデータ処理装置の動作を制御するために、１つ以上のコンピュータ記憶媒体上で符号化された、コンピュータプログラム命令の１つ以上のモジュールとして実現可能である。コンピュータ記憶媒体は、コンピュータ読取可能記憶装置、コンピュータ読取可能記憶基板、ランダムまたはシリアルアクセスメモリアレイまたはデバイス、もしくは、それらのうちの１つ以上の組合せであってもよく、またはそれに含まれていてもよい。コンピュータ記憶媒体はまた、１つ以上の別々のコンポーネントまたは媒体（たとえば、複数のＣＤ、ディスク、または他の記憶装置）であってもよく、もしくはそれに含まれていてもよい。コンピュータ記憶媒体は、有形で非一時的なものであってもよい。
【００８２】
この明細書で説明された動作は、１つ以上のコンピュータ読取可能記憶装置上に格納され、または他のソースから受信されたデータに対して、データ処理装置によって行なわれる動作として実現可能である。
【００８３】
（プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコードとしても知られる）コンピュータプログラムは、コンパイラ型言語またはインタープリタ型言語、宣言的言語または手続き型言語を含む任意の形のプログラミング言語で書くことができ、それは、スタンドアロンプログラムとして、もしくは、コンピュータ環境での使用に好適なモジュール、コンポーネント、サブルーチン、オブジェクト、または他のユニットとして、ということを含む任意の形でデプロイされ得る。コンピュータプログラムは、ファイルシステムのファイルに対応していてもよいが、対応する必要はない。プログラムは、他のプログラムまたはデータ（たとえば、マークアップ言語文書に格納された１つ以上のスクリプト）を保持するファイルの一部に格納されてもよく、当該プログラム専用の単一のファイルに格納されてもよく、もしくは、複数の連携ファイル（たとえば、１つ以上のモジュール、サブプログラム、またはコードの部分を格納するファイル）に格納されてもよい。コンピュータプログラムは、１つのコンピュータ上で、もしくは、１ヶ所に位置するかまたは複数箇所にわたって分散され、通信ネットワークによって相互接続された複数のコンピュータ上で、実行されるためにデプロイされ得る。通信ネットワークの例は、ローカルエリアネットワーク（local area network：「ＬＡＮ」）およびワイドエリアネットワーク（wide area network：「ＷＡＮ」）、インターネットワーク（たとえば、インターネット）、ならびに、ピアツーピアネットワーク（たとえば、アドホックピアツーピアネットワーク）を含む。
【００８４】
この明細書で説明されたプロセスおよび論理フローは、１つ以上のプログラマブルプロセッサが、入力データに対して動作して出力を生成することによってアクションを行なうように、１つ以上のコンピュータプログラムを実行することによって、行なわれてもよい。プロセスおよび論理フローはまた、専用論理回路、たとえばＦＰＧＡ（field programmable gate array：フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（application specific integrated circuit：特定用途向け集積回路）によって行なわれてもよく、装置も専用論理回路として実現されてもよい。そのような専用回路は、それが汎用プロセッサでなくても、コンピュータプロセッサと呼ばれてもよい。
【００８５】
この明細書は多くの特定の実現詳細を含んでいるが、これらは、任意の発明の、または請求され得ることの範囲に対する限定として解釈されるべきでなく、むしろ、特定の発明の特定の実現化例に特有の特徴の説明として解釈されるべきである。この明細書において別々の実現化例の文脈で説明されたある特徴はまた、単一の実現化例で組合されて実現されてもよい。反対に、単一の実現化例の文脈で説明されたさまざまな特徴も、複数の実現化例で別々に、または任意の好適な部分的組合せで実現されてもよい。さらに、特徴はある組合せで作用するとして上述されたかもしれず、さらにはそのように当初請求されたかもしれないが、請求された組合せからの１つ以上の特徴は、場合によっては、その組合せから削除されてもよく、請求された組合せは、部分的組合せ、または部分的組合せの変形に向けられてもよい。
【００８６】
同様に、動作はある特定の順序で図面に示されているが、これは、望ましい結果を達成するために、そのような動作が図示されたその特定の順序でまたは順次行なわれること、もしくは図示されたすべての動作が行なわれることを要求するとして理解されるべきではない。ある状況では、マルチタスク処理および並行処理が有利である場合がある。さらに、上述の実現化例におけるさまざまなシステムコンポーネントの分離は、すべての実現化例においてそのような分離を要求するとして理解されるべきではなく、説明されたプログラムコンポーネントおよびシステムは一般に、単一のソフトウェア製品にともに統合され、または複数のソフトウェア製品へとパッケージ化されてもよい、ということが理解されるべきである。
【００８７】
「または」への言及は、包括的であるとして解釈されてもよく、そのため、「または」を使用して説明されたどの用語も、単一の説明された用語、１つ以上の説明された用語、および説明された用語のすべて、のうちのいずれを示していてもよい。「第１」、「第２の」、「第３の」などといった表示は、必ずしも順序を示すよう意図されてはおらず、一般に、単に同じまたは同様の項目または要素を区別するために使用される。
【００８８】
このように、主題の特定の実現化例を説明してきた。他の実現化例は、請求項の範囲内にある。場合によっては、請求項に記載されたアクションは、異なる順序で行なわれてもよく、依然として望ましい結果を達成することができる。加えて、添付図面に示すプロセスは、望ましい結果を達成するために、図示された特定の順序または順次の順序を必ずしも必要としない。ある実現化例では、マルチタスク処理または並行処理が利用されてもよい。
【符号の説明】
【００８９】
１１０：ネットワークデバイス、１１２、１４４：メモリ、１４８：プロセッサ、１５０：アプリケーション、１６１：一次送信キュー、１６２、１６３、１６５：トラフィックシェーピングキュー、１６４：ネットワークインターフェイスドライバ、１６６：データトラフィックシェーピングモジュール、１６８：ネットワークカード。
【図１】
0006632966.tif 000002
【図２】
0006632966.tif 000003
【図３】
0006632966.tif 000004
【図４】
0006632966.tif 000005
【図５】
0006632966.tif 000006
【図６Ａ】
0006632966.tif 000007
【図６Ｂ】
0006632966.tif 000008
【図６Ｃ】
0006632966.tif 000009
【図６Ｄ】
0006632966.tif 000010
【図７Ａ】
0006632966.tif 000011
【図７Ｂ】
0006632966.tif 000012
【図７Ｃ】
0006632966.tif 000013
【図７Ｄ】
0006632966.tif 000014
【図８Ａ】
0006632966.tif 000015
【図８Ｂ】
0006632966.tif 000016
【図８Ｃ】
0006632966.tif 000017
【図９】
0006632966.tif 000018