(57)【特許請求の範囲】
【請求項１】
異なる優先順位を有するデータに関連付けられた複数のメモリ（１０２ａ、１０２ｂ）に順にサービスすることによって、通信リンク（１３０）を介した伝送についてデータをスケジューリングする方法であって、
該方法は、
該複数のメモリのうちの第１のメモリに、第１の優先順位を有するデータを記述する第１の組の記述子を格納することであって、該第１のメモリは、データの第１の閾値量に対応する第１の動的重みを有する、ことと、
該複数のメモリのうちの第２のメモリに、第２の優先順位を有するデータを記述する第２の組の記述子を格納することであって、該第２のメモリは、データの第２の閾値量に対応する第２の動的重みを有する、ことと、
該複数のメモリにサービスすることと
を包含し、
該複数のメモリのうちの１つにサービスすることは、
（ａ）該重みのうちの１つ以上が変更されたか否かを決定することと、
（ｂ）該サービスされるメモリから記述子を受信することと、
（ｃ）該受信された記述子によって記述されたデータを取り出すことであって、該取り出されたデータの量は該閾値量を超え得る、ことと、
（ｄ）該通信リンクを介した伝送について該データをスケジューリングすることと、
（ｅ）該通信リンクを介した伝送について該サービスの間にスケジューリングされたデータの量が、該サービスされるメモリに対する該重みに対応する該データの閾値量を超えるか否かを決定することと、
（ｆ）該伝送についてスケジューリングされた該データの量が該データの閾値量よりも少ない場合には、ステップ（ａ）〜（ｅ）を該サービスされるメモリ内の次の記述子に対して繰り返すことと、
（ｇ）該伝送についてスケジューリングされた該データの量が該データの閾値量を超える場合には、第１の不足量を維持して、該サービスされるメモリに対する該重みに対応する該データの閾値量よりどのくらい少ないデータ量が該サービスされるメモリの次回のサービスの回の間にスケジューリングされ得るかを決定することと
を包含する、方法。
【請求項２】
前記重みのうちの１つが変更された場合、前記第１の不足量はゼロに設定される、請求項１に記載の方法。
【請求項３】
前記重みのうちの１つが変更された場合、前記複数のメモリのそれぞれに対する不足量はゼロに設定される、請求項１に記載の方法。
【請求項４】
前記複数のメモリのうちの１つにサービスすることは、前記サービスされるメモリが空であるか否かを決定することをさらに包含する、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
サービスの回は、該サービスの回の間に、前記サービスされるメモリが空であると決定されるか、または伝送についてスケジューリングされた優先データの量が該サービスされるメモリに対する前記重みに対応する前記データの閾値量を超えるかのいずれかの場合に、終了する、請求項４に記載の方法。
【請求項６】
前記決定することは、
伝送についてスケジューリングされたデータの各単位についてデータカウンタをインクリメントすることと、
該データカウンタと、前記サービスされるメモリに対する前記重みに対応する前記データの閾値量とを比較することと
を包含する、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
前記データの単位はバイトである、請求項６に記載の方法。
【請求項８】
さらなる回において前記複数のメモリのうちのさらなるメモリにサービスすることをさらに包含し、
該さらなるメモリにサービスすることは、
該さらなるメモリが空であると決定されることと、
前記重みのうちの１つが変更されることと、
前記通信リンクを介した伝送について該さらなる回の間にスケジューリングされたデータの量が、該さらなるメモリに対する動的重みに対応するデータの閾値量と、該さらなるメモリに対する動的重みに対応する該データの閾値量からさらなる不足量を減算した値とのうちの小さい方の値を超えることであって、該さらなる不足量は、該さらなるメモリの１回以上前のサービスの回において、該さらなるメモリに対する動的重みに対応する該データの閾値量が超えたデータの量に対応する、ことと
のうちの少なくとも１つが満たされるまで、
該さらなるメモリから、さらなる優先順位を有するさらなる組のデータを記述する記述子を受信することと、
該さらなる組のデータを取り出すことと、
該通信リンクを介した伝送について該さらなる組のデータをスケジューリングすることと、
該さらなる回の間に以前にスケジューリングされたデータの測定値に該さらなる組のデータのサイズを加算することによって、該さらなる回の間にスケジューリングされたデータの量を追跡することと
を繰返し行うことを包含する、請求項１〜７のうちのいずれか１項に記載の方法。
【請求項９】
前記第１のメモリは、最も高い優先順位を有するデータに対応し、
前記重みのうちの１つが変更されたために、メモリにサービスすることが終了する場合には、該第１のメモリは次のサービスされるメモリである、請求項８に記載の方法。
【請求項１０】
前記方法は、ネットワークインターフェース回路内で実行され、前記通信リンクはネットワークである、請求項１〜９のいずれか１項に記載の方法。
【請求項１１】
前記第１の動的重みは、前記通信リンクの最大パケットサイズにほぼ等しい、請求項１〜１０のいずれか１項に記載の方法。
【請求項１２】
前記第２の動的重みは、１にほぼ等しい、請求項１〜１１のいずれか１項に記載の方法。
【請求項１３】
命令を格納するコンピュータ読み出し可能記憶媒体であって、該命令は、コンピュータによって実行される場合に、該コンピュータに、請求項１〜１２のいずれか１項に記載の異なる優先順位を有するデータに関連付けられた複数のメモリに順にサービスすることによって、通信リンクを介した伝送についてデータをスケジューリングする方法を実行させる、コンピュータ読み出し可能記憶媒体。
【請求項１４】
優先順位を付けられたデータを通信リンク（１３０）を介して伝送する通信インターフェースデバイス（１００）であって、
該通信インターフェースデバイスは、
第１の優先順位を有するデータを記述する第１の組の記述子を格納するように構成されている複数のメモリのうちの第１のメモリ（１０２ａ）であって、該第１のメモリは、第１の動的重みを有し、該第１の重みは、データの第１の閾値量に対応する、第１のメモリと、
第２の優先順位を有するデータを記述する第２の組の記述子を格納するように構成されている該複数のメモリのうちの第２のメモリ（１０２ｂ）であって、該第２のメモリは、第２の重みを有し、該第２の重みは、データの第２の閾値量に対応する、第２のメモリと、
伝送キュー（１２０）であって、該伝送キューに、該通信リンクを介した伝送のためにデータが配置される、伝送キューと、
該第１のメモリおよび該第２のメモリにサービスすることを容易にするように構成されているアービタ（１１０）と
を備え、
該複数のメモリのうちの１つにサービスすることは、
（ａ）該重みのうちの１つ以上が変更されたか否かを決定することと、
（ｂ）該サービスされるメモリから記述子を受信することと、
（ｃ）該受信された記述子によって記述されたデータを取り出すことであって、該取り出されたデータの量は該閾値量を超え得る、ことと、
（ｄ）該通信リンクを介した伝送について該データをスケジューリングすることと、
（ｅ）該通信リンクを介した伝送について該サービスの間にスケジューリングされたデータの量が、該サービスされるメモリに対する該重みに対応する該データの閾値量を超えるか否かを決定することと、
（ｆ）該伝送についてスケジューリングされた該データの量が該データの閾値量よりも少ない場合には、ステップ（ａ）〜（ｅ）を該サービスされるメモリ内の次の記述子に対して繰り返すことと、
（ｇ）該伝送についてスケジューリングされた該データの量が該データの閾値量を超える場合には、第１の不足量を維持して、該サービスされるメモリに対する該重みに対応する該データの閾値量よりどのくらい少ないデータ量が該サービスされるメモリの次回のサービスの回の間にスケジューリングされ得るかを決定することと
を包含する、通信インターフェースデバイス。
【請求項１５】
前記サービスされるメモリの前記サービスの間に、前記伝送キュー内に配置するために前記伝送についてスケジュールされた前記データを取り出すように構成されているローダをさらに備える、請求項１４に記載の通信インターフェースデバイス。
【請求項１６】
前記ローダは、前記複数のメモリのうちの１つに格納する次の記述子をロードするようにさらに構成されている、請求項１５に記載の通信インターフェースデバイス。
【請求項１７】
前記第１の不足量は、前記サービスされるメモリに対する前記重みに対応する前記データの閾値量を超えた分のデータの量に対応し、該超えた分のデータの量は、前記サービスの回の間に前記伝送キュー内に配置される、請求項１４〜１６のいずれか１項に記載の通信インターフェースデバイス。
【請求項１８】
前記サービスの回の間に、１組の記述子を、前記アービタおよび前記ローダに伝達するように構成されているマルチプレクサ（１０４）をさらに備える、請求項１５に記載の通信インターフェースデバイス。
【発明の詳細な説明】
【０００１】
（背景）
本発明は、コンピュータシステム通信の分野に関する。具体的には、通信リンクを介して、種々のデータの所望される異なるクラスのサービスに基づいて、伝送するデータを動的スケジューリング、適合スケジューリング、横取りスケジューリングする方法および装置を提供する。
【０００２】
複数のアプリケーションおよび／またはユーティリティを動作するコンピュータシステムにおいて、異なるプログラムによって生成されるデータに対して、異なる質または優先順位を有するサービスを提供することが望ましい場合が多い。データを別のコンピュータシステムに伝送する場合、例えば、ある種類またはあるクラスのデータは、別の種類または別のクラスのデータより、処理の遅れに対する反応が良くなり得る。したがって、この種類のデータに、サービスの比較的高い優先順位または質を割り当て得る。例えば、あるコンピュータ上で実行するリアルタイムのアプリケーションは、別のコンピュータシステムからの音声データまたは視覚データの一定した供給に依存し得る。この供給がない場合、性能の低下が非常に明白である。対照的に、電子メールアプリケーション用のデータを、著しい影響、または気づき得ないほどわずかな影響さえも有さずに遅らせ得る。
【０００３】
複数のアプリケーションを動作し、そして１つ以上の接続されたコンピュータシステムに伝送されるデータを生成するホストコンピュータシステムは、アプリケーションによって共有されるべき通信リンクを１つのみ有する場合が多い。したがって、すべての発信トラフィックは、この情報に所望されるサービスの優先順位または質とは無関係に、１つの接続部またはポートを通る必要がある。１つのポートが潜在的な難所として機能するため、それぞれの種類の情報に対して所望のレベルのサービスを保証することがより困難になっている。
【０００４】
発信情報（例えば、プロセッサによってサービスする情報、またはネットワークプロトコルスタックを介して処理するための情報）に優先順位を付ける現在の方法は通常、ソフトウェアでの解決策を含む。これらの種類の方法は、例えば、発信データがホストコンピュータから通信リンクを制御するデバイス（例えば、ネットワークインターフェース回路またはネットワークインターフェースカード（ＮＩＣ））に伝達される順序に影響を及ぼし得る。例えば、種々のアプリケーションからの情報／データは、ある種類またはあるクラスの情報に別の種類または別のクラスの情報より多くのリソース（例えば、プロセッサ時間）を割り付けるスケジュールによって、異なるホストキュー内に置かれて、デバイスに伝えられ得る。
【０００５】
このような方法は不十分である。特に、これらのスキームは単に、ホストコンピュータと通信インターフェースデバイスとの間のインターフェースからデバイス自体に、潜在的な輻輳を移動させる際に役立つだけである。例えば、アウトバウンドデータ（例えば、パケット）がＮＩＣで受信されると、トラフィックは通常、ホストコンピュータが所望するサービスの質、またはホストコンピュータがデータに割り当てたサービスの質とは無関係に、受信された順序で処理および発送される。ホスト上のソフトウェア機構は、発信データがその通信デバイスで受信された順序に影響を与えるだけである。そして、ホストコンピュータがその発信キューそれぞれの中にある発信データのレベルをモニタリングすることが可能であり得るが、ホストコンピュータはデバイス内のいかなる輻輳も直接にはモニタリングすることができない。これにより必然的に、ホストコンピュータが輻輳を緩和させ、所望のサービスの質を実施し得る様態および効果が制限される。
【０００６】
より詳細には、サービスの質を提供するソフトウェアの方法に依存するデータ伝送スキームは、データが通信インターフェースデバイスに伝達された後には発信データの横取りを可能にしない。したがって、優先順位が高いデータに続いて、比較的優先順位が低いデータを過度にデバイスに伝達した場合、優先順位が高いデータに必要なサービスの質を保証することが必要な場合でも、優先順位が低いデータを横取りし得ない。通信デバイス内でこのような横取りを可能にすると、種々のサービスの質をより正確に与えることが可能になる。結果、ネットワークに適時に伝達することを必要とするネットワークトラフィック（例えば、リアルタイムのデータ）はその要件を満たす可能性が高くなる。
【０００７】
したがって、必要なのは、ホストコンピュータシステム上で動作する複数のアプリケーションが共有する通信リンクを介して、伝送するパケットをキューまたはスケジューリングするハードウェアベースのシステムを提供する方法および装置である。有利なことに、このような方法を、ネットワークインターフェース回路またはネットワークインターフェースカードなどのホストの通信デバイス内で実現し得る。さらに、異なるクラスのデータに付与されるサービスの質に影響を与える優先順位または基準を動的に交替することが可能であることが望ましい。
【０００８】
（要旨）
本発明の一実施形態において、パケットに割り当てられたサービスの優先順位またはクラスに基づいて、共有通信リンクを介して上記パケットを伝送する方法および装置を提供する。一実施形態において、上記装置は、ホストコンピュータシステムとネットワークとの間でインターフェースを取るネットワークインターフェース回路またはネットワークインターフェースカード（ＮＩＣ）として機能する。
【０００９】
本発明の一実施形態において、重みが、上記ネットワークを介して伝送される情報パケットに動的に割り当てられる。上記割り当てられた重みは、上記パケットに付与されたクラスまたはサービスまたは優先順位を示す。特に、上記重みは、パケットの各クラスに与えられた利用可能な通信帯域幅の一部または割合を示し得る。あるいは、上記重みをあるクラスがサービスされる前に伝送され得る別のクラスのデータの量（例えば、バイト数またはパケット数）を示すように構成し得る。この実施形態において、複数のキャッシュまたは他のメモリ構造は上記装置上で維持され、そして各キャッシュはサービスの異なる優先順位またはクラスごとに構成される。
【００１０】
したがって、動作の一方法において、上記装置は、ホストコンピュータ（例えば、本発明の一実施形態によって構成されたデバイスドライバ）からアウトバウンドパケットの記述子を受信する。例示するように、各記述子はホストメモリ内に格納されたパケットまたはパケットの一部分を識別する。記述子が上記装置において受信された場合、上記記述子は上記関連付けられたパケットに割り当てられた優先順位に対応するキャッシュ内に配置される。
【００１１】
次いで、各キャッシュがその関連付けられた重みによって順番にサービスされる。キャッシュがサービスされている間、記述子は受信された順番で上記キャッシュから取り出される。上記記述子に関連付けられた上記パケット（単数または複数）はホストメモリから取り出されて、上記通信リンクを介して伝送されるように転送される。一実施形態において、上記キャッシュの重みに対応するデータの量（例えば、パケット数またはバイト数）が伝送されるように転送される場合、上記次のキャッシュがサービスされ得る。
【００１２】
この実施形態において、あるキャッシュの１回のサービスはパケットの最中に終了されない。具体的には、キャッシュ内の各記述子はデータパケットの一部分のみに対応し得、そうでない場合、上記１回のサービスが特定の記述子の後に終了する場合でさえ（例えば、キャッシュの重みのため）、上記１回のサービスは、上記最後のパケットのデータすべてが伝送されるまで、または伝送されるようにスケジューリングされるまで、延長される（例えば、必要な場合、より多くの記述子が処理される）。しかし、１回のサービスの間に伝送されるまたは伝送されるようにスケジューリングされたデータの量が所定の量（例えば、上記キャッシュの重みに比例する）を超えると、上記キャッシュの不足量が注目される。キャッシュが０でない不足量を有すると、上記キャッシュの１回のサービスの間に伝送され得るまたは伝送されるようにスケジューリングされ得るデータの量が低減される。この結果、データの異なるクラスまたは優先順位の間の通信帯域幅の所定の割り付けは経時的に概算され得る。
【００１３】
本発明の一実施形態において、上記パケットに関連付けられた重みおよび上記装置上の上記記述子のキャッシュを動的に改変し得る。例えば、サービスの比較的高い優先順位またはクラスに関連付けられたパケットが十分な速度でサービスされていない場合、各キャッシュを、恐らく、優先順位がより低いパケットを犠牲にして、優先順位が最も高いパケットに有利になるように、キャッシュの重みを調整し得る。
【００１４】
（詳細な説明）
以下の説明を提示して、当業者が本発明を製造および用いることを可能にする。さらに、以下の説明を、本発明特定の用途および本発明の要件とのコンテキストにおいて提供する。開示する実施形態に対する種々の改変は当業者に容易に明らかであり、本明細書において規定する一般的な原理は、本発明の意図および範囲から逸脱せずに、他の実施形態および用途に適用され得る。したがって、本発明は、図示する実施形態に限定されることは意図されず、本明細書において開示する原理および特徴と一致する最大の範囲に従うことが意図される。
【００１５】
本発明のこの実施形態が例示するように実行されるプログラム環境は、汎用コンピュータまたは特殊目的デバイス（例えば、手持ち式コンピュータ）を組み込む。このようなデバイス（例えば、プロセッサ、メモリ、データ記憶装置、ディスプレイ）の詳細は、説明を明確にするために省略する。
【００１６】
特に、以下に説明する装置の実施形態は、ホストコンピュータシステムから、ネットワーク、モデムまたは他のデバイスなどの共有通信リンクに伝送されるデータを受信するように構成されている。データは、関連付けられた優先順位またはホストコンピュータによって割り当てられたサービスの質を有する。情報が、要求されたサービスまたはデータに必要な種々のサービスの優先順位または質に従って、伝送または伝送されるようにスケジューリングされる、装置を動作させる種々の方法を説明する。
【００１７】
本発明の技術は種々の技術を用いて実現され得ることを理解されたい。例えば、本明細書に説明する方法を、マイクロプロセッサまたは他の特別に設計した特定用途集積回路の組み合わせ、プログラム可能な論理デバイス、またはこれらの種々の組み合わせを用いて、ハードウェア内に実現し得る。特に、本明細書において説明する方法は、キャリア波またはコンピュータ読み出し可能記憶デバイスなどの格納媒体上に常駐する一連のコンピュータ上で実行可能な命令によて実現され得る。キャリア波の例示的な形態は、電気信号、電磁信号または光信号の形態を取り得、これらの信号は、ローカルネットワーク、またはインターネットなどの公的にアクセス可能なネットワークに沿ってデジタルデータストリームを送る。
【００１８】
（導入）
本発明の一実施形態において、ホストコンピュータシステムと通信リンク（例えば、ネットワーク）との間でインターフェースを取るネットワークインターフェース回路またはネットワークインターフェースカード（ＮＩＣ）などの通信デバイスを提供する。ホストコンピュータシステムからリンクを介して伝送されるすべての通信（例えば、データ）はＮＩＣを横断する。ＮＩＣは、ホストコンピュータから複数のクラスの情報を受信して認識するように構成されている。サービスの優先順位または質という用語を、本明細書において、ホストコンピュータシステムによって通信リンクを介して伝送されるように提示された１セットのデータに要求されたサービス、所望されたサービス、または割り当てられたサービスの優先順位、クラスまたは質を指す際に用い得る。以下に説明する本発明の方法は、全二重通信および半二重通信の両方と互換性がある。
【００１９】
この実施形態において、ホストコンピュータシステムから受信されたデータは、その優先順位（これは、ホストコンピュータ上で動作するプログラムによって割り当てられ得る）によって分けられる。例示するように、キャッシュまたは他のメモリ領域などの複数の記憶装置はデバイス上で維持され、各キャッシュは、複数のデータの優先順位のうちの１つに対応する、割り当てられた重みまたは割合（ｍｅａｓｕｒｅ）を有する。データ（例えば、パケット、パケットの一部分）は、割り当てられた優先順位によって、ＮＩＣによって伝送されるようにスケジューリングされる。したがって、一実施例において、ある優先順位を有する複数のデータパケットを、別の優先順位のパケットをスケジューリングする前に、伝送されるようにスケジューリングし得る。
【００２０】
各キャッシュに順番にサービスするようにラウンドロビン（ｒｏｕｎｄ−ｒｏｂｉｎ）スキームを適用し得る。各キャッシュの１回に処理される情報量はキャッシュに割り当てられた重みに依存する。重みは、ＮＩＣが動作を継続している間、調整され得るように動的であり得る。したがって、特定の優先順位を有するデータが十分なリソース（例えば、伝送帯域幅）を付与されない場合、キャッシュの重みを動的に改変して、特定のクラスのデータのサービスを向上させ得る。一実施形態において、重みは、キャッシュごとに、処理され得るデータ量または伝送されるようにスケジューリングされ得るデータの量を反映する。
【００２１】
本発明のこの実施形態において、発信パケットは、記述子と呼ばれるデータ構造によってキャッシュ内に表示され得る。例示するように、各記述子は、データおよび／またはフラグを含み、これは、中でも、関連付けられたデータパケットまたはパケットの一部分の位置（例えば、ホストメモリ内）を識別し、関連付けられたパケットの一部分がパケットの始めまたは終わりであるかを示し、パケットに割り当てられたサービスの優先順位または質などを示す。
【００２２】
本発明の一実施形態のシステムおよび方法は、１９９９年３月１日に出願された「Ａ  Ｈｉｇｈ−Ｓｐｅｅｄ  Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ」という名称の米国特許出願第０９／２５９，７６５号に記載されるようなネットワークインターフェース回路と組み合わされ得る。同文献を本明細書において参考として援用する。
【００２３】
（本発明の１実施形態によるネットワークインタフェース回路）
図１は、本発明の１実施形態に従って構築されたネットワークインタフェース回路（ＮＩＣ）のブロック図である。ＮＩＣ１００は、ホストコンピュータ１５０が共有通信リンク１３０とインターフェースをとるように構築されている。共有通信リンク１３０は、図示される実施形態ではネットワークであり得る。ホストコンピュータ１５０は、デスクトップ、ラップトップ、携帯型コンピュータまたは任意の他のコンピュータ、または、リンク１３０を介して伝送するためのデータを生成可能な計算デバイスであり得る。ネットワーク１３０は、ＮＩＣ１００およびホスト１５０と互換性のある任意のトポロジーおよびプロトコルに従い得る。特に、ＮＩＣ１００は、本実施形態では、ＴＣＰ／ＩＰ（伝送制御プロトコル／インターネットプロトコル）およびＥｔｈｅｒｎｅｔ（Ｒ）用に構築されている。別の実施形態では、ＮＩＣ１００は、実質的に任意の通信プロトコル（単数または複数）用に構築されてもよいし、実質的に任意の通信プロトコル（単数または複数）と互換性があるように構築されてもよい。本発明のこの実施形態は、ネットワークインタフェース回路とともに使用される例を説明しているが、本発明の別の実施形態は、通信デバイスおよびインタフェースの他の形態で実現されてもよい。
【００２４】
上述したように、ＮＩＣ１００は、ホスト１５０からデータを受け取り、データに関連付けられた優先順位に基づいて、共有リンク１３０上を伝送キュー１２０を介して伝送するようにデータをスケジューリングする。データは、ホスト１５０からパケット形式で受け取られ得るか、または、ＮＩＣ１００においてパケットに変形され得る。特定の１実施形態では、発信データを集めたもの（例えば、アクティブな通信プロトコルによって規定される、１パケットに十分な量）を複数の部分に分割して、ＮＩＣ１００に伝送し、ＮＩＣ１００が処理してもよい。
【００２５】
図１に示されるように、ＮＩＣ１００には、複数のメモリ（例えば、キャッシュ）が組み込まれている。この特定の実施形態では、ＮＩＣ１００は発信データに割り当てられ得る優先順位レベルに対してメモリを一つずつ含む。このように、図１はホスト１５０によって提供された特性および優先順位が異なる４つのサービスに対応するキャッシュ１０２ａ、１０２ｂ、１０２ｃおよび１０２ｄを示す。本発明の別の実施形態では、実質的に任意の数のサービスのキャッシュおよび特性が組み込まれてもよい。
【００２６】
ここで示された本発明の実施形態において、ＮＩＣ１００に転送される準備の整ったホストデータは、共有リンク１３０を介する転送のために、ＮＩＣ１００がホストデータをスケジューリングするまで、ホストメモリに格納される。転送のための修正の前に、ホストデータは記述子と呼ばれるデータ構造によってＮＩＣ１００のキャッシュに記される。各々の記述子は転送されるデータの一部（例えば、１パケットまたはパケットの一部）に関する情報を格納する。その情報とは、ポインタ、データの格納場所を特定するホストメモリアドレス、データの格納場所のデータ総量、そのデータがパケットの始まりか、または終わりかを指し示すフラッグなどである。
【００２７】
図示された実施形態において、発信パケットまたは発信パケットの一部に関連した記述子は、パケットに割り当てられたサービスの優先順位または特性に基づいてキャッシュ１０２ａ−１０２ｄに受け止められ、格納される。パケットの優先順位は、発信データを生成したアプリケーションプログラムまたはユーティリティープログラムにより割り当てられ得、ホストコンピュータ上で機能するＮＩＣのためのデバイスドライバにより割り当てられ得る。もしくは、他の方法で割り当てられ得る。
【００２８】
さらに、図示された実施形態において、各々のキャッシュ１０２ａ−１０２ｄはホスト１５０上に保持されたクラスベースキューに一致する。例証するように、ホストコンピュータは各々の優先順位レベルに対して、個別のキューを保持し得る。従って、ＮＩＣキャッシュの一つが記述子を受け入れるまで、クラスベースキューはホスト上の発信データおよび／または記述子を格納する。
【００２９】
本発明の一つの実施形態において、各々のキャッシュエントリーはサイズが６４ビットであり、記述子のサイズと正確に合っている。さらに、各々のキャッシュは一度に４つまで記述子を格納し得る。それらのキャッシュはＦＩＦＯ（ｆｉｒｓｔ−ｉｎ，ｆｉｒｓｔ−ｏｕｔ）基板上で取り除かれる。あるいは、記述子は実質的に任意のサイズであり得、各キャッシュは４個より小さいまたは４個より大きい任意の適切な数の入力を格納し得る。別の実施形態において、各キャッシュは一度に８個までの入力を格納する。（例えば、少しだけ説明したローダ１１２によって）処理するためにキャッシュから記述子を取り除く動作は、新しい記述子を要求し、そしてこれをキャッシュ内で受信するより相当速い動作であり得る。したがって、各キャッシュが十分な数の記述子を格納することで、キャッシュが（例えば、ローダ１１２によって）空にされることを防止し、ホストコンピュータ上で同じ優先順位の記述子が待っている状態が有利である。
【００３０】
例示するように、ホストメモリからキャッシュ１０２ａ〜１０２ｄに記述子をロードする、または受信するように、キャッシュ制御器（これはローダ１１２の一部分であり得る）を構成する。したがって、キャッシュ制御器は、ＮＩＣ１００の他の素子にキャッシュが空であることおよび／またはホストメモリ内で待っている特定の優先順位の記述子が残っていないことを通知することを担う場合があり得る。
【００３１】
マルチプレクサ１０４は、アービタ１１０およびローダ１１２に対するキャッシュ１０２ａ〜１２０ｄからの記述子を多重化する。記述子がキャッシュから取り出されてローダ１１２によって処理された場合、ローダは関連付けられたデータを（例えば、ホストメモリから）接続部１１４を用いて要求する。要求されたデータは受信されて（例えば、ホスト１５０から）、接続部１２２を介してキュー１２０に供給され得る。接続部１１４をさらに用いて、１つ以上の記述子をキャッシュ内にロードするように要求し得る。
【００３２】
ホスト１５０と通信するために、ローダ１１２はＤＭＡ（ダイレクトメモリアクセス）制御器を組み込むか、またはＤＭＡ制御器と相互通信する。次いで、ＤＭＡ制御器は、ホストコンピュータ上の制御器（例えば、ＰＣＩ（周辺コンポーネント相互接続）制御器）とインターフェースを取り得る。例えば、ホスト１５０上のＰＣＩ制御器は、ＤＭＡ制御器からＤＭＡ要求を受け取り、そしてＰＣＩバスを介して所望のパケットを取り出し得る。本発明の範囲は、データがホストコンピュータから取り出され、または準備され、そしてリンク１３０を介して伝送される様態または手段によって制限されない。
【００３３】
本発明の一実施形態において、伝送キュー１２０は、ＲＡＭ（ランダムアクセスメモリ）を含み、そしてＦＩＦＯ（先入れ先出し）方式で動作する。本発明の別の実施形態において、キュー１２０は、パケットを一時的に格納して、リンク１３０を介して伝送する、実質的に任意の形態のメモリデバイスを含み得る。本発明の一実施形態において、伝送キュー１２０内に格納されたデータを、媒体アクセス制御（ＭＡＣ）または適用可能なネットワークプロトコルスタックの物理リンク層において動作する適切なデバイスによって、処理し（例えば、パケット化し）そして伝送する。例えば、伝送キュー内に置かれたデータは、データの完全なパケットがキューされるまで蓄積され得、このキューされた時点で、パケットが物理リンク層プロトコルによってフォーマット化され、そしてリンクを介して伝送される。次に、本発明の一実施形態において、ＤＭＡ帯域幅が十分である場合、パケットの伝送は、全パケットが伝送キュー１２０内に格納される前に開始し得る。例えば、伝送キュー内にすでに格納されているパケットの一部分が特定の閾値（例えば、データの量またはパケット率として測定される）を超えると、パケットの伝送が開始し得る。閾値をＤＭＡ帯域幅およびリンク１３０の帯域幅を考慮して決定し得る。
【００３４】
アービタ１１０は、キャッシュ１０２ａ〜１０２ｄからの記述子の取り出しを管理する。アービタ１１０は、これを行う際、各キャッシュおよび／または記述子に関連付けられた対応する重みを与えることによって、各データクラスに対するサービスの所望の優先順位または質を保証しようとする。本発明の例示の実施形態において、アービタ１１０は、記述子が受信され、ローダ１１２によって処理されるキャッシュを決定するだけでなく、どの種類（例えば、どの優先順位のレベル）の記述子がホストコンピュータから次に取り出されて、適切なキャッシュ内に配置されるかということも決定し得る。
【００３５】
例示するように、ローダ１１２は、接続部１１４を介してホスト１５０に接触することによって、新しい記述子をＮＩＣ１００内にロードし始める。特に、アービタ１１０は、どの種類の記述子が（例えば、関連付けられたサービスの優先順位または質によって）次にロードされるかを識別し得る。上述したように、ローダ１１２はさらに、キャッシュ１０２ａ〜１０２ｄのうちの１つから取り出された記述子に対応するパケットデータを取り出す。ローダ１１２は、キャッシュを管理するためにキャッシュ制御器（図１に別個には示さない）を含み得る。
【００３６】
したがって、本発明の一実施形態において、アービタ１１０の機能は、キャッシュ１０２ａ〜１０２ｄに順にサービスすること（例えば、ラウンドロビン方式）を含む機能として考えられ得る。１セットのキャッシュは、どのぐらいの期間にキャッシュがサービスされるか、または１回のキャッシュの間、どのぐらいのデータ（例えば、何パケット）が伝送されるようにスケジューリングされ得るかに影響を与え得る。対照的に、ローダ１１２の機能は、キャッシュ１０２ａ〜１０２ｄを記述子で満たし続け、そして伝送するデータをロードすることを含み得る。
【００３７】
図１に示す種々のモジュールおよび機能を組み合わせて、１つのＡＳＩＣ（特定用途集積回路）内で実現してもよいし、またはＮＩＣ１５０の複数のコンポーネント間で分割してもよい。さらに、図１はＮＩＣ１００などのネットワークインターフェース回路内に含まれ得る種々の他のコンポーネントおよびモジュールを省略し得る。
【００３８】
（動的重みによって伝送するパケットのスケジューリングする）
本発明の好適な実施形態において、ホストコンピュータ上で動作する複数のアプリケーション間で共有される通信リンクを介して伝送されるデータは、優先順位によって分けられ、その優先順位によって伝送されるようにスケジューリングされ、次いで、伝送される前にパケットの形態にされる。例えば、１つの電子メールメッセージまたは映像フレームは、複数のデータ部分にセグメント化され得、このデータ部分はそれぞれ、キャッシュ１０２ａ〜１２０ｄ（図１に示す）のうちの１つのキャッシュ内の別個の記述子によって表され、次いで、１つ以上のネットワークパケットに形成される。前のセクションで説明したように、ある種類のデータ（例えば、特定のアプリケーションからのデータ）に関連付けられた優先順位は、ＮＩＣ１００内のデータのキャッシュに関連付けられた重みに反映され得る。例示するように、キャッシュの重みは、この種類のデータに付与された伝送の帯域幅（すなわち、オーバーリンク１３０）の相対部分または１回のキャッシュの間に、伝送され得るまたは伝送されるようにスケジューリングされ得るデータの量を示し得る。
【００３９】
各データ部分は、ホストメモリ内に格納されており、そしてそのネットワークインターフェースデバイスの優先順位のキャッシュ内で記述子によって表される。しかし、記述子は、ＮＩＣへの転送を待っている間、その関連付けられたデータのサービスの優先順位または質によって分けられ得る。特に、ＮＩＣ上の各記述子のキャッシュ（例えば、図１のキャッシュ１０２ａ〜１０２ｄ）に関して、別個のキューがホストコンピュータ上で維持され得る。
【００４０】
したがって、本発明の一実施形態において、リアルタイムの音声データまたは視覚データに、ネットワークインターフェースデバイス内で優先的な処理を受けることを示す比較的高い優先順位を割り当て得てる。リアルタイムのデータのパケットの記述子を第１のホストキュー（すなわち、ネットワークインターフェースデバイスへの転送用）内に置く。この第１のホストキューは、キュー１と呼ばれ得、リアルタイムのデータがホストコンピュータから送信される優先順位が最も高いデータであることを反映している。例示するように、次に高いサービスの質は、ウェブまたはインターネットトラフィックによって表され得る。例えば、ホストコンピュータは、インターネットなどのネットワークを介して、データをユーザに提供するウェブサーバであり得る。したがって、ウェブトラフィックのパケットの記述子は、キュー２という名のホストキュー内に配置される。同様に、第３のサービスの質は、「ベストエフォート」の種類のトラフィックに適切であり得、この種類のトラフィックは、（あるとしても）ほとんど時間に対して反応しない。この種類のデータ（例えば、電子メール、ファイルバックアップ）の記述子は、キュー３という名のホストキュー内に格納され得る。最後に、優先順位が低いパケット（例えば、ネットワーク管理データを含むパケット）は、キュー４という名のキュー内に配置される記述子によって表され得る。特定のサービスの質が割り当てられていないデータに関しては、デフォルトのホストキュー（例えば、ベストエフォート、すなわちキュー３）を用い得る。
【００４１】
本発明のこの実施形態において、１対１のマッピングが、ホストコンピュータ上のクラスベースキューとネットワークインターフェースデバイスまたは他の通信デバイス上の記述子のキャッシュとの間で存在する。したがって、図１において、キャッシュ１０２ａ〜１０２ｄがそれぞれ、ホストキューのキュー１からキュー４までに対応する場合、キャッシュ１０２ａは通常最も高い重みを有し、そしてキャッシュ１０２ｄは最も低い重みを有する。しかし、記述子がその関連付けられたデータの優先順位によって分けられ得、そして対応するデバイス上の記述子のキャッシュ内に置かれ得る限り、１対１の構成は必要ではない。したがって、関連付けられたデータの優先順位が容易に確かめられる限り、実質的にいかなるメモリ構造を用いてもネットワークインターフェースデバイスへの伝達を待っている記述子を格納し得る。
【００４２】
ネットワークインターフェースデバイス上の各記述子のキャッシュは、動的重みを割り当てられ、この動的重みは、データのサービスおよび伝送の間に調整され得る。特に、各重みはキャッシュ内に格納された記述子によって表されるデータの優先順位に対応する。例示するように、各重みは、あるキャッシュ内のいくつの記述子が、次のキャッシュがサービスされる前に、処理され得る（例えば、伝達されるようにスケジュールされたりまたはキューされる）かを決定する。したがって、重みは、複数またはある範囲の記述子、データの一部分またはデータパケット、ネットワークトラフィックの量（例えば、バイトまたは他の寸法の点で）時間率、処理サイクルまたは帯域幅などを識別し得る。本発明の一実施形態において、各キャッシュの重みは、１回のキャッシュの間に伝送され得る（または、伝送されるようにスケジューリングされ得る）データのバイト数を表す。
【００４３】
本発明の一実施形態において、通信デバイス（例えば、図１のＮＩＣ１００）は、リセットまたは初期化された場合に、優先順位が最も高いキャッシュからの記述子を受信および処理し始める。したがって、ＮＩＣ１００のローダ１１２は、伝送されるようにキューされたキャッシュ１０２ａ内の記述子によって表されるデータのバイト数が許容された最大値（例えば、キャッシュの重み）に達したことまたはこれを超えたことをアービタ１１０が示すまで、キャッシュ１０２ａから記述子を取り出して処理する。次いで、ローダ１１２は、その最大量のデータが処理されてしまうまでにキャッシュ１０２ｂへのサービスを開始し、この後、キャッシュ１０２ｃがサービスされ、次いでキャッシュ１０２ｄ、次いでキャッシュ１０２ａなどがサービスされる。サービスされるキャッシュの１回はさらに、キャッシュに記述子が無くなった場合、特に、ホストメモリ内で準備完了となっているキャッシュのサービスの優先順位または質に関連付けられた記述子が無い場合に、終了し得る。
【００４４】
この実施形態において、キャッシュの不足量は、キャッシュ内の記述子からある回に伝送されるようにスケジューリングされたまたはキューされたデータのバイト数が許容された最大値を超した場合に生成される。例示するように、不足量の大きさは、キャッシュの重みまたは許容可能なバイト数を超えている分のバイト数によって決定される。例示するように、キャッシュが次回にサービスされる際に、処理される最大のバイト数から不足量分だけ低減される。不足量は、１回以上のサービスにわたって持ち越されて、ある時間期間にわたってデータの優先順位を実施する。
【００４５】
したがって、キャッシュの重みを、そのキャッシュの１回のサービスの間に伝送されるようにスケジューリングされ得たデータの最大量（例えば、最大バーストサイズ）を示すものとしてみなし得る。本発明の例示の実施形態において、あるキャッシュからの記述子の処理はパケットの終わりにおいてのみ終了する。パケットに関連付けられた第１および／または最後の記述子は、対応する記述子（単数または複数）内のフラグによって識別され得る。伝送するパケットのスケジューリングを終了するために、キャッシュの最大バーストサイズ（例えば、キャッシュの重み）を超えた場合、そのキャッシュの次回に許容されるバーストが少なくなる。例示するように、次回に許容されるバーストは、最大バースト（例えば、キャッシュの重み）から前に許容されていたバースト量を超えた量だけ減算した値に設定される。不足量は累積的であり、伝送されるようにスケジュールされたデータの量が最大バーストサイズを超えているかまたはこれより少ないかに依存して、各回において増えたりまたは減ったりし得る。例示するように、キャッシュの重みが、ネットワークインターフェースデバイスの動作の間に改変された場合、その不足量および恐らくすべての不足量が０にリセットされ得る。
【００４６】
本発明の一実施形態において、キャッシュの重みは通信デバイス上のプログラム可能なレジスタ内に格納され、このレジスタは、ホストコンピュータ上で動作するソフトウェアドライバによって改変可能であり得る。したがって、ドライバがさらなる伝送の帯域幅が特定のクラスまたは優先順位のデータに必要であると決定した場合、ドライバはレジスタを動的に再度プログラムして、重みを調整し得る。以下に説明するように、キャッシュの重みを変更した場合、キャッシュにサービスする現在のスキームが終了され得、そしてサービスが、優先順位が最も高いデータに関連付けられたキャッシュから再度開始される。例示するように、キャッシュの１回は、パケットの伝送または伝送されるようにスケジューリングされている間に終了しない。あるパケットは、そのキャッシュの１回が終わる前に完了する。
【００４７】
本発明の一実施形態において、キャッシュの重みは各キャッシュの１回においてスケジューリングされ得るデータの量を（例えば、バイトで）示し、比較的優先順位が高いデータに関しては、例示的なキャッシュの重みは、最大、平均、中間または他の適切な測定値において、パケットサイズ（例えば、適用可能なネットワークプロトコルスタックによって決定される）のバイト数の１倍以上であり得る。優先順位が低いキャッシュのキャッシュ重みは、例えば１など非常に低い場合があり、優先順位が低いデータは、優先順位が高いデータが実質的に利用可能でない場合にのみ送信される必要があることを示す。本発明の一実施形態において、小さくとも１である完全なデータパケットがキャッシュから伝送されるようにスケジューリングされており、このパケットサイズより小さい任意の重みは、キャッシュがサービスされる各回の間に１つのデータパケットのみが送信されることを保証する。したがって、本明細書において説明する重みのスキームにおいて、優先順位が高いキャッシュに比較的高い重みを有させることによって、不足量が進展しおよび／またはこのキャッシュに対する１回のサービスが終了する前に、より多くのデータを伝送するようにスケジューリングし得る。逆に、優先順位が低いキャッシュに低い重みを有させることによって、低い重みが急速に超過し、したがって、優先順位が低いキャッシュのサービスが比較的早期に終了する。
【００４８】
図１に示す本発明の実施形態において、アービタ１１０は異なるキャッシュのサービスを管理する。したがって、アービタ１１０は、レジスタまたは他の格納領域を含み、これらのレジスタまたは他の格納領域は、各キャッシュを順番に処理されるデータの量（例えば、記述子の数またはデータのバイト数）を追跡し、キャッシュの不足量および重みならびにデータの横取りスケジューリングを促進し得る任意の他の情報を格納する。アービタ１１０はさらに、ローダ１１２または別個のキャッシュ制御器に、ホストから取り出され、そして（例えば、キャッシュが枯渇しないように）対応するキャッシュ内に配置される記述子のクラスまたは優先順位を通知し得る。
【００４９】
図２Ａ〜図２Ｂは、本発明の一実施形態による、アービタ１１０が通信リンクを介して伝送するクラスベースまたは優先順位を付けられたデータを適応的にスケジューリングする一方法を示す。例示する方法は、図１のＮＩＣ１００などの通信デバイスとの使用が意図されている。
【００５０】
図２Ａ〜図２Ｂは、ＮＩＣ１００上の複数のキャッシュのうちの１つのサービスを示す。したがって、例示する方法をあるキャッシュに対して実行した後、同じまたは同様の方法を次のキャッシュ、そしてその次のキャッシュなどに実行する。すでに上述したように、本発明の一実施形態において、優先順位が最も高いキャッシュは、ネットワークインターフェースデバイスがリセットまたは初期化された後にまず自動的にサービスされる。その後、各キャッシュは、その割り当てられた重みまたは優先順位によって、ラウンドロビン方式でサービスされ得る。
【００５１】
図２Ａ〜図２Ｂにおいて、状態２００は開始状態であり、この状態またはこの状態の前に、最初の重みがネットワークインターフェースデバイス内の各キャッシュに割り当てられる。本発明のこの実施形態において、キャッシュの重みは、ある優先順位のデータをスケジューリングする前に、伝送するようにスケジューリングされ得る別の優先順位の最大バーストサイズ、すなわち最大データの量（例えば、バイト数）を反映する。すでに上述したように、パケットの処理を終了させるために、最大バーストサイズを超えさせる場合がある。この実施例における最初のセットの重みは、優先順位が最も高いキャッシュに対する最大パケットサイズ（例えば、Ｘ＊１５１６）、優先順位が２番目のキャッシュに対する最大パケットサイズ（例えば、１５１６）、優先順位が３番目のキャッシュに対する最大パケットサイズ（例えば、７５８）、および優先順位が最も低いキャッシュに対する最大パケットサイズよりかなり低い所定の低い数値（例えば、１〜８）の所定の倍数であり得る。
【００５２】
さらに、状態２００において、１つ以上のＮＩＣ１００のコンポーネントは、カウンタ、レジスタ、または記述子の処理および関連付けられた伝送するデータのスケジューリングを促進するために用いられる他のデータ構造を初期化またはリセットし得る。例えば、本発明の一実施形態において、アービタ１１０は、各１回のキャッシュの間、伝送されるようにキューされたデータの量（例えば、バイト数またはパケット数）の追跡を続ける。状態２００において、現在の１回のキャッシュの間にこの目的で用いられるカウンタを０にリセットする。
【００５３】
状態２０２において、アービタがキャッシュの重みが変更されたか否かを決定する。例示するように、アービタは、ホストドライバが１つ以上のキャッシュの重みを変えたか否かを示すフラグを調べる。フラグが設定されている場合、アービタはプログラム可能なレジスタから新しい重みを読み出し、そしてフラグをクリアする。重みが変更されていない場合、例示の手順が状態２０６において続行する。もしくは、１つ以上の重みが変更されている場合、状態２０４において、各キャッシュの不足量が０にリセットされて、古い不足量が新しいスケジューリングスキームに影響を及ぼすことを阻止する。
【００５４】
状態２０４の後、例示の手順は戻って、優先順位が最も高いデータに関連付けられたキャッシュ（単数または複数）のサービスを開始する。したがって、比較的優先順位が低いキャッシュがサービスされた場合、これは横取りされ得、そして優先順位が最も高いキャッシュに注意が再度向けられる。しかし、本発明の別の実施形態において、キャッシュの重みが変化した後、新しいサービススキームが、優先順位が最も高いキャッシュ以外のキャッシュで開始し得る。
【００５５】
状態２０６において、現在のキャッシュが空であるか否かが判定される。本発明の一実施形態において、キャッシュ制御器（これはローダの一部分であり得る）は、キャッシュが空であることをアービタに通知し得る。レジスタを維持して、ホストメモリ内の記述子の数または記述子の存在（例えば、上述のクラスベースキュー）を示し得る。例示するように、ホストメモリからキャッシュに記述子を受信または伝達するようにキャッシュ制御器を構成する。記述子がキャッシュから取り出されて処理される場合において、キャッシュが空に近づく場合、またはキャッシュがホストから記述子を取り出し得る場合はいつでも、キャッシュ制御器はホストから記述子を取り出し得る。現在のキャッシュが空である場合、手順は状態２１０において続行する。
【００５６】
そうでない場合（キャッシュが空でない場合）、状態２０８において、アービタは、キャッシュの重みが現在のキャッシュの不足量より大きいか否かを判定する。これにより、このキャッシュの不足量が、この回のキャッシュの間にいかなる記述子も処理しないように十分に大きくなっているか否かが明らかになる。重みが不足量より大きい場合、この方法は状態２１２において続行する。そうでない場合、データはこの回には伝送されるようにスケジューリングされず、例示する方法が状態２１０において続行する。
【００５７】
状態２１０において、記述子はこの回のキャッシュの間に処理されず、現在のキャッシュの不足量は既存の不足量とキャッシュの重みとの差（すなわち、不足量から重みを減算したもの）まで減少する。不足量から重みを減算したものが０より小さい場合、不足量は０に設定される。
【００５８】
データが現在の回のキャッシュの間に取り出されず、そして伝送されるようにスケジューリングされていない場合、状態２１０に達したことが分かり得る。これは、例えば、キャッシュが空であるか、キャッシュの不足量がキャッシュの重みを超えた場合に起こり得る。例えば、優先順位が低いキャッシュ重みが比較的小さい場合、少数の優先順位が低いパケットのサイズ（または、ジャンボイーサネット（Ｒ）パケットなどにおいては１でさえある）が重みを超え得ることがあり得る。この結果、同じ優先順位の記述子のみが、不足量がキャッシュの重みより下のレベルに減るまで、処理されるかまたは伝送されるようにスケジューリングされたデータを有する。
【００５９】
状態２１０の後、アービタは現在のキャッシュを終了し、そして次のキャッシュのサービスに進む。例示するように、図１の実施形態において、キャッシュ１０２ａ〜１０２ｄはラウンドロビン方式でサービスされ、キャッシュ１０２ａはキャッシュ１０２ｄの後にサービスされる。
【００６０】
状態２１２において、現在の回のキャッシュの間に伝送される（または伝送されるようにキューされる）実際のデータの量（例えば、バイト数）は、キャッシュの重みからキャッシュの不足量を減算することによって決定される。この値をバーストサイズと呼び得る。不足量が０である場合、バーストサイズは、キャッシュの重みに等しいことが分かり、これはキャッシュの最大バーストサイズと考えられ得る。
【００６１】
状態２１４において、現在のキャッシュからの１つ以上の記述子が、マルチプレクサ１０４を介してアービタ１１０およびローダ１１２によって受信される。特に、アービタ１１０は、マルチプレクサ１０４に、完全なデータパケットを記述する１セットの記述子を受け入れるように命令する。例えば、記述子がパケットの始めおよび終わりを示すフラグを含む場合、アービタは第１のパケット（パケットフラグの始めが設定されたパケット）が受信されることを可能にし、そして、マルチプレクサに、パケットフラグの終わりが設定されたパケットが受信されるまでさらなる記述子を受け入れるように指示する。状態２１４は、複数の個々の状態を含み得る。この状態において、マルチプレクサは記述子を受け入れ、次いで、この記述子はアービタによって調べられて、別の記述子を受け入れるか否かを決定する。
【００６２】
状態２１６において、ローダ１１２は記述子（単数または複数）を構文解析して、記述子（単数または複数）によって表されるパケットデータを識別する情報（例えば、メモリアドレスまたはバッファ識別子）を取り出す。次いで、ローダ１１２は、パケットデータの要求をホスト１５０に伝える。これは、別個の記述子に関連付けられた個々のパケット部分に対する一連の要求を含み得るか、または単一の要求であり得る。上述したように、要求（単数または複数）を、図１に示さない種々のコンポーネント（例えば、ＤＭＡ制御器、ＰＣＩ制御器）によって処理し得る。あるいは、ローダ１１２は、ＮＩＣ１００がホストコンピュータにデータ取り出し要求（単数または複数）を提出するために必要なコンポーネント（単数または複数）（例えば、ＤＭＡ制御器）を組み込み得る。状態２１６の間、キャッシュ制御器（これはローダ１１２の一部分であり得る）は、１つ以上の記述子をホストメモリからキャッシュ内にロードさせるように動作し得る。
【００６３】
状態２１８において、ホスト１５０はＮＩＣ１００に要求されたデータを提供し、この要求されたデータは伝送キュー１２０内に配置される。本発明の一実施形態において、ローダ１１２はホストコンピュータとインターフェースを取るように（例えば、ＤＭＡ制御器を組み込むことによって）構成され、データは伝送キューに置くために、ローダによって（例えば、接続部１１４を介して）受信され得る。パケットデータは、一度に一部分（各部分は１つの記述子によって識別される）をキュー内にロードしてもよいし、一度にすべてをロードしてもよい。例示するように、パケットデータを、必要に応じて、通信リンクを介して伝送するためにコード化する。
【００６４】
状態２２０において、アービタ１１０は、受信された記述子（単数または複数）に関連付けられたデータの量（例えば、バイト数）によって、現在のキャッシュのカウンタをインクリメントする。例示するように、各記述子はデータの量を報告するフィールドを含む。したがって、アービタ１１０は、この１回のキャッシュの間に伝送されるようにスケジューリングされたデータの量を追跡する。
【００６５】
状態２２２において、アービタは、この１回のキャッシュの間に処理されて伝送されるようにキューされた記述子に関連付けられたデータの量が、その回に許容されたバーストのサイズより小さいか否かを判定する。小さい場合、例示する手順は状態２２６に進んでその回を続行する。そうでない場合、バーストサイズを超えて、方法は状態２２４において続行する。
【００６６】
状態２２４において、現在のキャッシュの不足量は、許容されたバーストサイズを超えた分の量（例えば、この回の間にキューされたデータの量からバーストサイズを減算した値）に設定される。状態２２４の後、アービタ１１０およびローダ１１２は次のキャッシュのサービスを開始する。
【００６７】
状態２２６において、アービタ１１０またはローダ１１２は、キャッシュの重みが動的に改変されたか否かを再度判定する。改変されている場合、手順は状態２０４に戻って、すべてのキャッシュの不足量をリセットし、そして優先順位の最も高いキャッシュのサービスを再開する。そうでない場合、例示する方法は状態２２８で続行する。したがって、例示する手順において、データパケットが伝送されるようにスケジューリングされる場合はいつでも、ＮＩＣ１００が、キャッシュの重みが変更されたか否かを判定することが理解され得る。これにより、横取りが促進され、そして新しいスケジューリングスキームが可能な限り早く実現されることが保証される。
【００６８】
状態２２８において、現在のキャッシュが空であるか否かが判定される。空である場合、この１回のキャッシュの間に処理する記述子はすでに無く、例示の方法が状態２３０に進む。もしくは、処理する記述子が少なくとももう１つある場合には、方法は状態２１４に戻る。
【００６９】
例示するように、サービス中のキャッシュのサービスの優先順位または質を照合する記述子がホストメモリ（例えば、ホストキュー）内で利用可能である限り、記述子が連続的にキャッシュ内にロードされることをキャッシュ制御器は保証する。アービタがキャッシュの１回が終わったことを（例えば、伝送されるようにキューされたデータの量に基づいて）判定する前に対応するホストキューが空になった場合、キャッシュ制御器は、もはや記述子は利用可能ではなく、この場合のキャッシュの１回は終了したことをアービタに通知する。
【００７０】
状態２３０において、現在のキャッシュの不足量は、この回の間に伝送されるようにキューされたデータの量がバーストサイズより小さいため減る。すなわち、現在のキャッシュは、伝送されるようにキューされたデータの量（例えば、バイトカウント）がバーストサイズに等しくなる前に記述子が無くなる。本発明のこの実施形態において、不足量は、許容されたバーストのサイズだけ低減される。例示するように、バーストサイズの部分が不足量より大きい場合、不足量は０にリセットされる。しかし、本発明の別の実施形態において、状態２３０において、不足量はバーストサイズの未使用の部分だけ減少するのみであり得る。状態２３０の後、現在のキャッシュのサービスが終了し、次のキャッシュのサービスが開始する。
【００７１】
図２Ａ〜図２Ｂに示す方法は、１つのキャッシュを１回サービスする例示的な手順を一つのみ示す。多数の同様の方法は、本発明の範囲を超えることなく、この方法から得られ得る。例えば、状態２１６から２２０までが実行される順番を、手順に著しい影響を与えることなく変え得る。
【００７２】
さらに、図２Ａ〜図２Ｂに示す方法を改変して、サービス中でない１つ以上の他のキャッシュが空であるか否かを決定し得る。空である場合、空でないキャッシュ（例えば、サービス中のキャッシュ）が１つより多い回を受信し得る。これは、ＮＩＣ１００が、空のキャッシュを連続的に循環し、そして空でないキャッシュ内で待つ記述子の処理を遅らせることを阻止する際に役立つ。
【００７３】
（ホストコンピュータの動作）
このセクションは、本発明の一実施形態において、ホストコンピュータシステム上の発信データの互換性のあるクラスベースキューを説明する。この実施形態において、ホストはその特性によってデータを分ける複数のクラスベースキューを維持する。例示するように、先のセクションで説明したように、クラスベースキューの数は、互換性のある通信インターフェースデバイス上に維持される記述子のキャッシュ数に等しい場合がある。
【００７４】
互換性のあるホストコンピュータシステムは、複数のプロセッサを組み込み得、プロセッサはそれぞれ、データを複数のクラスベースキューのそれぞれに挿入する一連の命令を実行する一つのスレッドを維持する。しかし、通常、通信インターフェースデバイスを制御するソフトウェアドライバが、通信インターフェースデバイスと複数のクラスベースキューとの間のインターフェースを管理するように構成され得る。ホストコンピュータ上で動作する個々のアプリケーション／ユーティリティープログラムは、通信リンクを介して伝送されるデータを生成し得る。データは互換性のあるプロトコルスタックを介して所定の初期処理を受信し、次いでドライバに伝えられ、ドライバは、通信インターフェースデバイスとプロトコルスタックのホスト常駐層（例えば、層３および層４）との間で例示するように動作する。特に、本発明の一実施形態において、通信リンクがインターネット（または、ネットワークへの接続部）などのワイド領域ネットワークである場合、ソフトウェアドライバを介して、通信インターフェースデバイスに転送される前に、トランスポート制御プロトコル（ＴＣＰ）およびインターネットプロトコル（ＩＰ）などのプロトコルによってデータを処理し得る。しかし、この実施形態において、インターフェースデバイスが層２（例えば、データリンク層）において動作するため、より高い層のプロトコルは本発明の動作または範囲を制限しない。
【００７５】
クラスベースキュー内に置かれたデータは、記述子リングから抜き取られた記述子によって分割および記載される。例示するように、複数の記述子からなる１つの記述子リングは、各クラスベースキューに対して維持される。各記述子は、種々のフィールドおよび／またはフラグを含み、データの関連付けられた部分の伝送を促進する。例えば、本発明の一実施形態において、各記述子は１つ以上の以下のアイテムを含み得る。これらのアイテムとは、データ部分が格納されるメモリ領域（例えば、バッファ）へのポインタ、バッファの長さまたはデータ部分のサイズ、データがパケットの始めであるか終わりであるかを示すフラグである。
【００７６】
本発明の一実施形態において、ユーザのメモリ空間からカーネル（例えば、オペレーティングシステム）のメモリ空間まで発信ユーザデータを伝達するコピーオンライト方法を用いることによって、アウトバウンドデータの操作の効率を上げ、このカーネルメモリ空間から、データが通信インターフェースデバイスに伝達される。特に、この方法により、ハードウェア（例えば、ＮＩＣ）がデータを取り出すことを可能にする前に、ユーザメモリバッファからカーネルバッファにユーザデータをコピーする必要が無くなる。代わりに、この方法において、ハードウェア（例えば、ＮＩＣ１００）はユーザのバッファからデータを直接ＤＭＡし得る。
【００７７】
発信データを壊さないようにするため、バッファ（または、バッファを含むメモリページ）に書き込むユーザの許可は、ハードウェアがデータを取り出す後まで拒否される。書き込み許可は、データ伝達が完了した後にユーザに返される。複数のユーザメモリバッファを実現して、プロテクトメモリが利用可能になる前に、ユーザまたはアプリケーションがプロテクトメモリを改変しようとする状況を避ける。さらに、ハードウェアへのデータ伝達が遅れた場合、またはユーザ／アプリケーションが書き込み失敗になる場合が多いと判定された場合、この方法は、このユーザまたはアプリケーションに対して一時停止され得る。
【００７８】
この方法において、ユーザメモリバッファを用いて発信データを格納するため、プロトコルヘッダ（例えば、ＴＣＰおよびＩＰ用）が別個のバッファ内に格納される。
【００７９】
さらに向上させると、アウトバウンドデータをセグメント化して、データのフローをさらに促進し得る。セグメント化の第１の工程において、発信アプリケーションデータ（例えば、１ページまたはデータの１つのユーザバッファ）を集めたものがユーザ空間からカーネル空間内にマッピングまたはページフリップされ、このページ／バッファへのユーザの書き込み許可は一時的に無効にされる。有利にも、元のメモリバッファのサイズは１つのメモリページであり、これにより、より容易なデータ伝達が可能になる。上述したように、この処理により、データフローを遅くするデータコピー動作が無くなる。次いで、データはバッファ内の所定のサイズ（例えば、最大パケットサイズ）の部分に分割される。プロトコル情報（例えば、ヘッダ）がプロトコルスタックを介して処理される場合に、プロトコル情報をデータ部分に付加する代わりに、ヘッダを別個のメモリ領域またはブロック内に蓄積する。したがって、通信インターフェースデバイス（例えば、ＮＩＣ）がパケットデータを要求し、そしてこれを（例えば、ＤＭＡを介して）取り出す場合、パケットデータは、１つのバッファまたはメモリ領域から一度にすべて取り出され得る。プロトコルヘッダは、その別個の位置からデータと共に取り出される。
【００８０】
図２Ａ〜図２Ｂに示す本発明の実施形態と共に説明したように、アービタ１１０およびローダ１１２（図１に示す）がＮＩＣ１００上のキャッシュにサービスする場合、アービタ１１０およびローダ１１２はデータの１つの完全なパケットの値を一度に処理する。説明したばかりのアウトバウンドデータを処理する方法は、完全なデータパケットを一度に取り出すことを促進する。
【００８１】
図３は、本発明の一実施形態における、ユーザ空間から通信リンクに伝達するための通信インターフェースデバイスへの１セットのユーザデータのフローを示す。この実施形態において、アウトバウンドデータトラフィックのプロトコルスタックは、層４においてＴＣＰそして層３においてＩＰを含む。本発明の別の実施形態は、他のプロトコルおよびプロトコルスタックとの使用に適している。
【００８２】
図３において、ユーザまたはアプリケーションデータ３０２は、ユーザまたはアプリケーションプログラムによって生成され、そしてユーザメモリ空間３２２内でマッピングされる。次いで、データバッファはカーネル空間３２４内にマッピングされ、元のデータは複数のデータ部分３０４ａ〜３０４ｄにセグメント化される。さらに、メモリブロック３２０ａはプロトコルヘッダを格納するために確保されている。
【００８３】
発信データがプロトコルスタックの層３および層４（例えば、ＴＣＰおよびＩＰ）を介して処理される場合、メモリブロックが、まずデータ部分３０４ａ〜３０４ｄ（参照符号３２０ｂ）に必要なＴＣＰヘッダを含み、次いで、ＩＰヘッダ（参照符号３２０ｃ）および必要とされ得る他の任意のプロトコル情報またはヘッダ（例えば、ＭＡＣ）を含むように改変する。
【００８４】
次いで、デバイスドライバおよび通信インターフェースデバイス（例えば、ＮＩＣ１００）は、データがデバイスに提供される場合に、協同してヘッダをデータ部分と組み合わせる。
【００８５】
本発明の上述の説明は、例示および説明を目的としてのみ提示してきた。上述の説明は、包括的、または開示する形態に本発明を限定することが意図されない。したがって、上述の開示は本発明を限定することを意図されず、本発明の範囲は上掲の特許請求の範囲によって規定される。
【図面の簡単な説明】
【図１】    図１は、本発明の一実施形態による、通信リンクを介して伝送する、異なる優先順位を有するデータパケットのスケジューリングするデバイスを示すブロック図である。
【図２Ａ】  図２Ａは、本発明の１実施形態による、通信リンクを介して伝送するデータを、データの優先順位によってスケジューリングする一方法を示すフローチャートである。
【図２Ｂ】  図２Ｂは、本発明の１実施形態による、通信リンクを介して伝送するデータを、データの優先順位によってスケジューリングする一方法を示すフローチャートである。
【図３】  図３は、本発明の一実施形態による、発信データのセグメント化を示すブロック図である。
【図１】
0004636583.tif 000002
【図２Ａ】
0004636583.tif 000003
【図２Ｂ】
0004636583.tif 000004
【図３】
0004636583.tif 000005