(58)【調査した分野】(Int.Cl.,DB名)
前記スケジューラモジュールは、前記階層型データ構造に含まれるアクティブキュービットマップに少なくとも部分的に基づいて前記次のアクティブなパイプを特定するようにさらに構成される、請求項1に記載のネットワーク装置。
前記クレジットを更新することは、最新の更新以後の経過時間間隔が最小時間間隔以上である場合に、前記現在のパイプに関連付けられた第1のTSトークンバケットに利用可能クレジットを追加すること、前記サブポートに関連付けられた第2のTSトークンバケットに利用可能クレジットを追加すること、及び前記の特定された次トラフィッククラスに関連付けられたクレジットカウンタを上限にリセットすることのうち、少なくとも1つを含む、請求項1に記載のネットワーク装置。
計量トークンバケット内で利用可能な計量クレジットの数に少なくとも部分的に基づいて、受信されたパケットをエンキューするかどうかを判定するように構成されたポリサモジュール、
をさらに含む請求項1に記載のネットワーク装置。
前記ポリサモジュールは、所望される計量精度に少なくとも部分的に基づいて、最小計量トークンバケット更新期間を設定し、プロセッサ周波数と前記回線レートとに少なくとも部分的に基づいて、各計量トークンバケット更新期間について、前記計量トークンバケットに追加すべき計量クレジットの数を決定するようにさらに構成され、前記計量トークンバケット更新期間は、前記最小計量トークンバケット更新期間以上である、請求項7に記載のネットワーク装置。
スケジューラモジュールが、次のアクティブなパイプ構造をプリフェッチするステップであり、前記次のアクティブなパイプ構造は階層型データ構造に含まれる、ステップと、
前記スケジューラモジュールが、現在のパイプと関連するサブポートとについてのクレジットを更新するステップと、
前記スケジューラモジュールが、現在のパイプデータ構造に少なくとも部分的に基づいて前記現在のパイプの中で次のアクティブなトラフィッククラスを特定するステップと、
前記スケジューラモジュールが、前記の特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択するステップと、
前記スケジューラモジュールが、利用可能トラフィックシェーピング(TS)トークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットクレジット以上である場合に、送信のために、前記の選択された次キューから次パケットをスケジュールするステップと、
を含む方法。
前記スケジューラモジュールが、前記階層型データ構造に含まれるアクティブキュービットマップに少なくとも部分的に基づいて前記次のアクティブなパイプを特定するステップ、
をさらに含む請求項9に記載の方法。
前記クレジットを更新するステップは、最新の更新以後の経過時間間隔が最小時間間隔以上である場合に、前記現在のパイプに関連付けられた第1のTSトークンバケットに利用可能クレジットを追加するステップ、前記サブポートに関連付けられた第2のTSトークンバケットに利用可能クレジットを追加するステップ、及び前記の特定された次トラフィッククラスに関連付けられたクレジットカウンタを上限にリセットするステップのうち、少なくとも1つを含む、請求項9に記載の方法。
ポリサモジュールが、計量トークンバケット内で利用可能な計量クレジットの数に少なくとも部分的に基づいて、受信されたパケットをエンキューするかどうかを判定するステップ、
をさらに含む請求項9に記載の方法。
1又は複数のプロセッサにより実行されると下記のオペレーションをもたらす命令を個々に又は組み合わせにおいて記憶した1又は複数の記憶媒体を含むシステムであって、前記オペレーションは、
次のアクティブなパイプ構造をプリフェッチするステップであり、前記次のアクティブなパイプ構造は階層型データ構造に含まれる、ステップと、
現在のパイプと関連するサブポートとについてのクレジットを更新するステップと、
現在のパイプデータ構造に少なくとも部分的に基づいて前記現在のパイプの中で次のアクティブなトラフィッククラスを特定するステップと、
前記の特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択するステップと、
利用可能トラフィックシェーピング(TS)トークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットクレジット以上である場合に、送信のために、前記の選択された次キューから次パケットをスケジュールするステップと、
を含む、システム。
前記クレジットを更新するステップは、最新の更新以後の経過時間間隔が最小時間間隔以上である場合に、前記現在のパイプに関連付けられた第1のTSトークンバケットに利用可能クレジットを追加するステップ、前記サブポートに関連付けられた第2のTSトークンバケットに利用可能クレジットを追加するステップ、及び前記の特定された次トラフィッククラスに関連付けられたクレジットカウンタを上限にリセットするステップのうち、少なくとも1つを含む、請求項17に記載のシステム。
【発明を実施するための形態】
【0011】
下記の詳細な説明は例示的な実施形態を参照して進められるが、これに対する多くの代替、変更及び変形が当業者において明らかになるであろう。
【0012】
概して、本開示は、イングレス制御を備えたトラフィック管理に関連する。本開示と調和するシステム及び方法は、プログラム可能ネットワーク装置を利用するプログラム可能出口トラフィック管理に、約数ギガビット毎秒、数十ギガビット毎秒又はこれを超える回線レートを提供するように構成される。本システム及び方法は、複数のユーザと複数のトラフィッククラスとに関連付けられたパケットの送信を、例えばサービスレベル合意(SLA)により規定されるポリシーに従って、優先度付けするように構成される。本システム及び方法は、さらに、数千(例えば、64k、ただしkは1024である)のパケットキュー(及び、各キューに関連付けられた(1又は複数の)パケットフロー)のサポートと複数のスケジューリングレベル(例えば、5)を備えた階層型スケジューリングとを提供するように構成される。本システム及び方法は、本明細書において説明されるとおり、エンキューオペレーションに関して複数のパケットを同時に操作し、デキューオペレーションに関して複数のパイプを同時に操作するように構成され、したがって、プリフェッチレイテンシを「隠ぺいする」ことになる。いくつかの実施形態において、本システム及び方法は、輻輳検出メカニズム(例えば、末尾廃棄、ランダム初期検知)を含むことができる。本システム及び方法は、さらに、本明細書で説明されるとおり、トラフィックシェーピング、絶対優先、重み付きラウンドロビンなどの特徴に関して比較的高いレベルの精度を提供するように構成される。
【0013】
同様にして、本開示と調和するイングレス制御は、プログラム可能ネットワーク装置上で実施されるように構成され、さらに、比較的低い帯域(例えば、およそMbps(メガビット毎秒))のパケットフローと比較的高い(例えば、およそGbps(ギガビット毎秒))帯域のパケットフローとの双方に対して比較的高い精度(例えば、約1%)を提供するように構成される。
【0014】
図1は、本開示の種々の実施形態と調和する一例示的ネットワークシステム100を示す。システム100は、概して、プロバイダネットワーク102と、それぞれのネットワークノード105a…105nによってプロバイダネットワーク102に結合された複数のクライアントシステム104a…104nと、1又は複数の他のネットワーク106とを含む。プロバイダネットワーク102は、複数のユーザ、すなわちクライアント(例えば、加入者、企業)にネットワーキングサービスを提供するように構成される。プロバイダネットワーク102は、複数のネットワーク装置108a…108nを含む。各ネットワーク装置108a…108nは、1又は複数の他のネットワーク装置108a…108nに結合され、少なくとも1つのネットワーク装置が、(1又は複数の)他のネットワーク106に結合されることができる。本明細書において、ネットワーク装置は、これらに限定されないが、ルータ、スイッチ及び/又はハブを含む。
【0015】
プロバイダネットワーク102は、各クライアントシステム104a…104nにネットワーク接続性及びネットワークサービスを提供するように構成される。例として、クライアントシステム、例えばクライアントシステム104aは、プロバイダネットワーク102を介して、(1又は複数の)他のネットワーク106及び/又は別のクライアントシステム104b…104nに結合することができる。各クライアントシステムには、コンピュータノード要素(例えば、ホストサーバシステム、デスクトップコンピュータ、ラップトップコンピュータ、タブレット型コンピュータなど)、スイッチ、ルータ、ハブ、ネットワークストレージ装置、ネットワーク接続された装置、不揮発性メモリ(NVM)記憶装置、クラウドベースのサーバ及び/又はストレージシステム、ブレード、オーディオビジュアル機器(例えば、テレビジョン、ラジオ受信機など)、スマートフォン、フィーチャーフォンなどのうち、1又は複数を含むことができる。各クライアントシステム104a…104nは、それぞれのネットワークノード105a…105nを介して、プロバイダネットワーク102への及びプロバイダネットワーク102からのデータを含むパケットを転送するように構成される。このパケットには、音声データ、ビデオデータ、及び/又は他のデータ、例えばファイル転送データを含み得るデータを含む。
【0016】
プロバイダネットワーク102((1又は複数の)ネットワーク装置108a…108nを含む)、(1又は複数の)クライアントシステム104a…104n及び/又は(1又は複数の)他のネットワーク106は、スイッチドファブリック通信プロトコル、例えば、イーサネット(登録商標)通信プロトコル、インフィニバンド通信プロトコルなどを用いて、互いに通信することができる。イーサネット(登録商標)通信プロトコルは、トランスミッションコントロールプロトコル/インターネットプロトコル(TCP/IP)を用いて通信を提供する能力を有し得る。イーサネット(登録商標)プロトコルは、2002年3月に発行され“IEEE 802.3 Standard”と題された、米国電気電子学会(IEEE)により発行されたイーサネット(登録商標)標準、及び/又はこの標準のこれ以降のバージョン、例えば2012年に発行されたIEEE 802.3 Standard for Ethernet(登録商標)に対して、準拠し、あるいは互換性を有し得る。インフィニバンドプロトコルは、インフィニバンドトレードアソシエーション(IBTA)により発行されたインフィニバンド仕様の、2001年6月に発行され“InfiniBand(商標)Architecture Specification”と題されたボリューム1リリース1.2.1、及び/又はこの仕様のこれ以降のバージョン、例えばインフィニバンド(商標)アーキテクチャの2008年1月に発行されたボリューム1(一般仕様)リリース1.2.1と2012年11月に発行されたボリューム2(物理仕様)リリース1.3とに対して、準拠し、あるいは互換性を有し得る。当然ながら、他の実施形態において、スイッチドファブリック通信プロトコルには、カスタムの及び/又は独占的なスイッチドファブリック通信プロトコルを含むことができる。
【0017】
ネットワーク102及び/又は(1若しくは複数の)他のネットワーク106には、例えば、IEEE802.3標準に記載のイーサネット(登録商標)ネットワーク、及び/又は例えばIEEE802.11標準などの無線ローカルエリアネットワークなどの、任意のパケット交換ネットワークを含むことができる。無線プロトコルは、2012年4月に発行され“802.11-2012 - IEEE Standard for Information technology--Telecommunications and information exchange between systems Local and metropolitan area networks--Specific requirements Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications”と題された、IEEEにより発行された無線標準、及び/又はこの標準のこれ以降のバージョンに対して、準拠し、あるいは互換性を有し得る。
【0018】
図2は、本開示の種々の実施形態と調和する一例示的ネットワーク装置200を示す。ネットワーク装置200は、
図1のネットワーク装置108a…108nの一例である。ネットワーク装置200は、概して、プロセッサ210、ブリッジチップセット212、システムメモリ214及びネットワークインタフェース216を含む。プロセッサ210は、ネットワーク装置200に関連付けられたオペレーションを実行するように構成される。プロセッサ210は、1又は複数の処理ユニット、例えば(1又は複数の)コア220a…220nと、各コア220a…220nに関連付けられたそれぞれのキャッシュメモリ222a…222nと、プロセッサキャッシュメモリ224とを含むことができる。ブリッジチップセット212は、プロセッサ210、システムメモリ及び/又はネットワークインタフェース216を結合するように構成される。
【0019】
ネットワークインタフェース216は、ネットワーク装置200を、1若しくは複数の他のネットワーク装置108a…108nに及び/又は(1若しくは複数の)他のネットワーク106に結合するように構成される。ネットワークインタフェース216は、プロセッサ228、ホストインタフェース210、媒体アクセス制御(MAC)回路232、物理層回路(PHY)233及びネットワークインタフェース記憶部234を含むことができる。プロセッサ228は、ネットワークインタフェース216に関連付けられたオペレーションを実行するように構成される。ホストインタフェース230は、ネットワークインタフェース216をブリッジチップセット212に結合するように構成される。
【0020】
MAC232及びPHY233は、ネットワーク装置200を、1又は複数の他のネットワーク装置108a…108nに及び/又は(1又は複数の)他のネットワーク106に、物理媒体を介して結合するように構成される。MAC232は、送信及び受信機能に関して媒体アクセス管理を実行するように構成される。PHY232は、1又は複数のポート235a…235nを含み、各ポート235a…235nは、本明細書に説明されるように、複数のトラフィックフローを運ぶ能力を有する。各ポート、例えばポート235aは、データ及び/又はメッセージのパケット及び/又はフレームを、1若しくは複数の他のネットワーク装置108a…108nに及び/又は(1若しくは複数の)他のネットワーク106に送信するように構成された送信回路236を含む。各ポート、例えば、ポート235aは、データ及び/又はメッセージのパケット及び/又はフレームを、1若しくは複数の他のネットワーク装置108a…108nから及び/又は(1若しくは複数の)他のネットワーク106から受信するように構成された受信回路237を含む。
【0021】
システムメモリ214は、オペレーティングシステムOS240と、ネットワークインタフェースコントローラ“NIC”ドライバ242と、複数のアプリケーションプログラミングインタフェースAPI243と、複数のイングレス(ingress)モジュール244と、複数のエグレス(egress)モジュール246と、複数のデータ構造248と、本明細書で説明されるようにパケット処理後かつ送信前にパケットを記憶するように構成された複数のキュー250とを記憶するように構成されることができる。
【0022】
システムメモリ214は、仮想マシンモニタ(VMM)252を記憶するように構成されることができ、そして、複数の仮想マシン(図示せず)を含むことができる。OS240は、効率的な、比較的速いパケット処理に対して構成されたソフトウェアフレームワークを利用するように構成されることができる。例えば、このソフトウェアフレームワークは、インテル(登録商標)アーキテクチャプロセッサ上のパケット処理を最適化するように構成されたインテル(登録商標)データプレーン開発キット(DPDK)に対して準拠し、あるいは互換性を有し得る。
【0023】
イングレスモジュール244は、複数の初期処理モジュール245、ポリサ(Policer)モジュール247及びロードバランサ249を含むことができる。エグレスモジュール246は、スケジューラ253(例えば、階層型スケジューラ)及びパケット入力/出力(I/O)モジュール255を含むことができる。いくつかの実施形態において、エグレスモジュール246は、本明細書で説明されるように、輻輳管理モジュール257を含むことができる。(1又は複数の)API243は、例えばスケジューラ253に対して、アプリケーションプログラミングインタフェースを提供するように構成されることができ、スケジューラ構成、エンキュー及び/又はデキューの機能性を含むことができる。(1又は複数の)API243を、例えばサービスプロバイダが利用して、各ネットワークノード及び関連付けられたユーザについてのSLAに関連するポリシーを実施することができる。
【0024】
ネットワーク装置200は、プロバイダネットワーク102によって運ばれるネットワークトラフィックに関するトラフィック管理機能を実行するように構成される。ネットワーク装置200は、複数のパケットフローの中の複数のパケットを例えばポート235aのRx237によって受信し、このパケットを処理し、処理されたパケットを例えばポート235aのTx236によって送信することができる。初期処理モジュール245は、パケットI/O受信モジュール272と、受信されたパケットを処理するように構成されたフロー分類モジュール274とを含んで、例えば、本明細書に説明されるように、関連付けられたトラフィックフローを特定し、送信元及び/又は宛先を特定し、かつ/あるいはトラフィッククラスを特定することができる。いくつかの実施形態において、ポリサモジュール247は、本明細書に説明されるように、ネットワーク装置200がさらに処理できるパケットの数を制限するように構成されることができる。ロードバランサ249は、プロセッサコアにわたって及び/又は複数のスレッドにわたってパケット処理アクティビティを分散するように構成される。
【0025】
エグレスモジュール246は、処理されたパケットの、ネットワーク装置200からの送信を管理するように構成される。スケジューラモジュール253は、送信の準備ができている処理されたパケットをエンキューし、次の送信用パケットを選択し、(1又は複数の)選択された次パケットをデキューするように構成される。パケットI/O Txモジュール255は、(1又は複数の)デキューされたパケットが送信の準備ができていることを、例えばネットワークインタフェース216に伝えるように構成される。輻輳管理モジュール257は、より多くのパケットが受信され、そしてある時間内に送信される可能性がある場合に、ポリシーに基づいて、パケットを選択的に廃棄する(drop)ように構成される。
【0026】
イングレスモジュール244及びエグレスモジュール246は、プロセッサ210アーキテクチャを生かすように構成される。イングレス、エグレス、及び他のパケット処理の機能性は、プロセッサコア220a…220n及び/又は複数のスレッドの間で分散されることができる。したがって、イングレス、エグレス、及び他のパケット処理の機能性は、同時に実行されることができ、パイプライン化されることができる。パイプライン化は、パケット処理効率を上げるように構成され、比較的多数(例えば、数万、又はこれ以上)のパケットフローを比較的短時間のうちに処理することを容易にすることができる。
【0027】
図3Aは、1つのパケット処理パイプライン300についてのパケット処理パイプライン機能ブロックの一例示的シーケンスを示す。ネットワーク装置200は、複数のパケット処理パイプラインを実施するように構成されることができる。パケット処理パイプライン300の機能ブロックは、プロセッサ210の1若しくは複数のコア220a…220n及び/又はネットワークインタフェース216によって実行されることができる。パケット処理パイプライン300には、パケット入力/出力受信モジュール「パケットI/O Rx」302と、パケットパーサモジュール「パケットパース」304と、フロー分類部モジュール「分類部」306とを含む。例えば、パケットI/O Rx302、パケットパース304及び分類部306は、
図2の初期処理モジュール245に含まれることができる。パケット処理パイプライン300は、さらに、トラフィック計量(metering)及び/又はポリシングモジュール「ポリサ308」、ロードバランシングモジュール「ロードバランサ」310、ワーカモジュール「ワーカ」312、輻輳管理モジュール「廃棄部」314、階層型スケジューラモジュール「階層スケジューラ」316、及びパケット入力/出力送信モジュール「パケットI/O Tx」318を含む。例えば、ポリサ308はポリサ247に対応することができ、ロードバランサ310はロードバランサ249に対応することができ、ワーカ312は(1又は複数の)ワーカモジュール254に対応することができ、廃棄部314は輻輳管理モジュール257に対応することができ、階層スケジューラ316はスケジューラモジュール253に対応することができ、パケットI/O Tx318はパケットI/O Tx255に対応することができる。
【0028】
入力パケットは、パケットI/O Rx302によりRx237から受信されることができ、処理されたパケットは、パケットI/O Tx318からの通知に応答してTx236によって送信されることができる。概して、各パケットには、ルーティング(例えば、アドレッシング)及び制御に関連付けられたパケットヘッダと、データを含むパケットペイロードとを含む。パケットは、例えばネットワークインタフェース216のポート235aのRx237によって、受信されることができ、NICドライバ242によって初期処理されることができる。例えば、NICドライバ242は、本明細書に説明されるように、ポーリングモードドライバとして構成されることができる。受信されたパケット(すなわち、入力パケット)は、次いで、パケットパース304によってパースされることができる。パケットパース304は、各入力パケットのプロトコルスタックを特定するように構成される。パケットパース304はさらに、入力パケットのパケットヘッダの完全性をチェックするように構成される。入力パケットは、次いで、分類部306によってトラフィックフローにマップされることができる。例えば、マッピングには、構成可能なハッシュ関数(例えば、jhash、CRC(巡回冗長検査)など)を用いた完全一致のテーブルルックアップと、衝突を管理するためのバケットロジックとを含むことができる。各トラフィックフローは、送信元と宛先との間のパケット転送の種類に対応する。送信元及び/又は宛先には、例えば、(1若しくは複数の)クライアントシステム104a…104n(及び/又はクライアントシステム内の(1若しくは複数の)クライアント装置)、プロバイダネットワーク102、(1若しくは複数の)他のネットワーク106、及び/又は(1若しくは複数の)他のネットワーク106に結合された他のクライアントシステム(図示せず)を含むことができる。パケットの種類は、パケットにより運ばれる、例えば音声、ビデオ、データといったペイロードの種類に対応することができ、さらに、トラフィッククラスに対応することができる。
【0029】
ポリサ308は、本明細書に説明されるように、トラフィック計量及び/又はポリシング機能を実行するように構成される。トラフィック計量及び/又はポリシングは、本明細書に説明されるように、データレートを制限するように構成される。1又は複数の入力パケットが、トラフィック計量及び/又はポリシングの結果として廃棄されることができる。ロードバランサ310は、(計量/ポリシングを切り抜けた)入力パケットを、複数のワーカモジュール、例えばワーカ312に分散し、各ワーカモジュールに均一な負荷を提供するように構成される。各ワーカモジュール、例えばワーカ312は、サービスプロバイダ固有のアプリケーション作業負荷スレッド(例えば、インターネットプロトコル(IP)スタックなど)に対応することができる。ロードバランサ310はさらに、ワーカモジュールに対するトラフィックフローの類似性と各フロー内のパケット順序とを保つように構成されることができる。ワーカモジュールに対するトラフィックフローの類似性の保護は、パケットフローを処理しながらデータ局所性を生かすことによって、効率的なパケット処理をサポートするように構成されることができる。
【0030】
廃棄部314は、本明細書で説明されるように、階層型スケジューラ316についての輻輳管理を実行するように構成される。輻輳管理は、対象のエグレスキュー、ランダム初期検知(RED)及び/又は重み付きRED(WRED)から或る数のパケットが送信されるまで、対象のスケジューラキューがいっぱいであるときはいつでも、パケットを廃棄することを含むことができる。重み付きREDは、現在のスケジューラキュー負荷レベルとパケット優先度とに基づいてパケットを廃棄するように構成される。したがって、輻輳が経験されるとき、比較的高い優先度のパケットの前に、比較的低い優先度のパケットが廃棄されることができる。
【0031】
階層型スケジューラモジュール316は、本明細書に説明されるように、或る数の基準に少なくとも部分的に基づいて、次の送信パケットをスケジュールする(すなわち、選択する)ように構成される。階層型スケジューラ316は、複数のキューの中のパケットをエンキューして送信を待ち、送信用に選択されたときにこのパケットをデキューするように構成される。階層型スケジューラモジュール316は、トラフィックシェーピング、絶対優先、上限強制及び/又は重み付きラウンドロビンを実施するように構成されることができる。階層型スケジューラモジュール316は、本明細書に説明されるように、約数千のキューを管理するように構成される。
【0032】
ネットワーク装置200はさらに、パケット処理パイプライン300の機能性をサポートするように構成された複数のインフラストラクチャモジュール255を含むことができる。インフラストラクチャモジュール255は、大域的なバッファプールと非公開のスレッドごとのバッファキャッシュとに関するサポートを提供するように構成されたバッファ管理部モジュール256、パケット処理パイプラインモジュール間のメッセージ通過に関するサポートを提供するように構成されたキュー管理部モジュール258、及び/又は低アクティビティ期間の間に省電力に関するサポートを提供するように構成された省電力モジュール260を含む。
【0033】
図3Bは、パケット処理パイプライン300の機能ブロックの、複数のスレッドへのマッピングの一例320を示す。このスレッドは、1又は複数のプロセッサコア、例えば(1又は複数の)プロセッサコア220a…220n上で同時に実行されるように構成されることができる。この例において、ネットワークインタフェース216は、複数のポート235a…235nを含み、これらポートは、それぞれの受信部NIC Rx322a…322n(例えば、Rx237)と、それぞれの送信部NIC Tx324a…324n、例えばTx236とを各々含む。例えば、パケット処理パイプラインは、複数のトラフィックフローについてのパケットを処理するように構成されたスレッド0、スレッド1、スレッド2乃至スレッド(n+1)、及びスレッド(n+2)を含むことができる。このスレッドは、パイプラインの中の種々のパケットに対して同時に実行されるように構成されることができる。この例において、スレッド0は、パケットI/O Rx302及びパケットパース304を含み、スレッド1は、分類部306、ポリサ308及びロードバランサ210を含み、スレッド2乃至(n+1)は、それぞれのワーカ312a…312nを各々含み、スレッド(n+2)は、廃棄部314、階層スケジューラ316及びパケットI/O Tx318を含む。この例を続けると、パケット処理パイプラインと関連付けられたスレッドとは、1つの物理ポート、例えばポート235aと、NIC RX0及びNIC TX0にそれぞれ対応し得るRx237及びTx236とに関するパケットを処理するように構成されることができる。
【0034】
いくつかの実施形態において、1つの物理ポートが、複数のスレッドによって共有されることができる。本明細書で説明されるように、この物理ポートに、複数のサブポートが関連付けられることができる。そして、各サブポートが、それぞれのスレッドに関連付けられることができる。物理ポートに関するエンキュー及びデキューオペレーションが、同一のスレッドに関連付けられることができる。スケジューラ316に関連付けられたエンキュー及びデキューオペレーションが、同一のスレッド、例えばスレッド(n+2)によって実施されるように構成される。エンキュー及びデキューオペレーションは、本明細書に説明されるように、例えば、パケットディスクリプタ、キューテーブル、キュー記憶領域、及びアクティブキューのビットマップを共有することができる。これらのオペレーションの、同一スレッドによる実施は、キュー及びビットマップオペレーションが非スレッドセーフであることを可能にすることと、同一のプロセッサコアの内部にスケジューラデータ構造を維持することとによって、オペレーションの効率の向上を提供するように構成される。したがって、アクセスシリアル化のためのロッキングプリミティブ、又はロックなしアクセスのためのアトミックプリミティブを用いることを、回避することができる。
【0035】
図3Cは、いくつかのパケット処理パイプライン機能ブロックを複数のプロセッサコアにマップする一例330を示す。この例において、パケット処理パイプライン機能ブロックは、
図2の2つのプロセッサコア、例えば220a…220nにマップされる。この例において、パケットRx333(例えば、パケットI/O Rx及びパケットパース)と分類部304とを含むパケット受信機能ブロックが、第1のプロセッサコア332a(例えば、プロセッサコア220a)にマップされ、トラフィック管理334(例えば、廃棄部314及び階層スケジューラ316)とパケット送信機能(例えば、パケットI/O Tx318)とが、第2のプロセッサコア332b(例えば、プロセッサコア220b)にマップされる。この例において、トラフィック管理334は、スケジューラエンキューモジュール、複数のキュー、及びスケジューラデキューモジュールを含む。
【0036】
図3Dは、いくつかのパケット処理パイプライン機能ブロックを複数のプロセッサコアにマップする別の例340を示す。この例において、パケット処理機能ブロックは、3つのプロセッサコアにマップされる。この例において、パケットRx333及び分類部304を含むパケット受信機能ブロックが、第1のプロセッサコア332a(例えば、プロセッサコア220a)にマップされ、トラフィック管理334機能が、第2のプロセッサコア332b(例えば、プロセッサコア220b)にマップされ、パケット送信機能が、第3のプロセッサコア332c(例えば、プロセッサコア220n)にマップされる。この例において、トラフィック管理334は、スケジューラエンキューモジュール、複数のキュー、及びスケジューラデキューモジュールを含む。例えば、コア332a、332b、332cは、プロセッサ210に含まれることができ、したがってプロセッサコア220a…220nに対応することができる。
【0037】
したがって、複数のトラフィックフローに関連付けられた複数のパケットを、ネットワーク装置200が、1又は複数のパケット処理パイプライン、例えばパケット処理パイプライン300を用いて処理することができる。パケット処理パイプライン300の機能ブロックは、ネットワーク装置200の1又は複数のプロセッサコア220a…220n上の1又は複数のスレッドとして実施されることができる。パケット処理パイプライン機能ブロックを(1又は複数の)プロセッサコア220a…220nにマップすることは、構成可能とすることができ、各トラフィックフロー及び関連するアプリケーションに関連付けられた性能レベルと各機能ブロックに対して有効にされた特徴のセットとに少なくとも部分的に基づくことができる。例えば、いくつかの機能ブロックは、2つ以上のプロセッサコア220a…220nを消費することができる(例えば、各プロセッサコア220a…220nが、同一の機能ブロックの異なるインスタンスを、ただし異なる入力パケットに対して、実行するように構成される)。別の例において、複数の機能ブロックが、1つのプロセッサコア、例えばプロセッサコア220aにマップされることができる。パイプライン化、複数のスレッドを利用する処理、及び複数のコアを利用する処理は、例えば64K以上のパケットフローの処理を容易にする。
【0038】
図4は、本開示の1つの実施形態と調和する一例示的なスケジューラモジュール400を示す。スケジューラ400は、
図2のスケジューラモジュール253の1つの例である。スケジューラ400は、例えば
図3A及び
図3Bの階層スケジューラ316に対応する。スケジューラ400は、エンキューモジュール402、複数のキュー404、及びデキューモジュール406を含む。エンキューモジュール402は、送信前に複数のパケットをエンキュー、すなわち一時的に格納するように構成される。エンキューモジュール402は、本明細書で説明されるように、送信前にパケットを格納するための複数のキュー404のうちのキューを選択するように構成される。デキューモジュール406は、送信用のネットワークインタフェース、例えばネットワークインタフェース216に対する供給のために、格納されたパケットを選択するように構成される。デキューモジュール406は、本明細書で説明されるように、複数の基準に少なくとも部分的に基づいて、次の送信用パケットを選択するように構成される。
【0039】
スケジューラ400は、各ネットワークノード、例えばネットワークノード105a…105nに関連付けられたサービスレベル合意(SLA)によって指定されたポリシーに従って、複数のユーザ(例えば、クライアント)及び複数のトラフィッククラスからのパケットの送信を優先度付けするように構成される。スケジューラ400は、比較的大きな(例えば、約数万又はこれを超える)数のトラフィックフローと関連するキューとを管理するように構成される。スケジューラ400は、パケットを複数の階層レベルに論理的にグループ化し、ユーザ、トラフィッククラス、及び階層レベルに関連する基準に少なくとも部分的に基づいて、送信されるべき次パケットを選択するように構成される。スケジューラ400はさらに、その選択処理において、本明細書で説明されるように、トラフィックシェーピング、絶対優先及び重み付きラウンドロビンのうち1又は複数を利用するように構成されることができる。
【0040】
図5は、本開示の種々の実施形態と調和する一例示的なスケジューリング階層500を示す。スケジューリング階層500は、本明細書で説明されるように、トラフィックフローの論理的なグルーピングを表し、次の送信用パケットの選択を容易にするように構成される。論理的なグルーピングはさらに、複数のユーザに対して各トラフィッククラスについてのSLAを満たすことを容易にするように構成される。論理的なグルーピングは、次の送信用パケットを選択するときに処理効率化を容易にすることに生かされ得るデータ構造において実施されることができる。
【0041】
この例において、スケジューリング階層500は、5つのレベル、すなわち、ポート、サブポート、パイプ、トラフィッククラス及びキューを含む。いくつかの実施形態において、スケジューリング階層は、より多くの又はより少ないレベルを含むことができる。各レベルのメンバの数は、例えば、関連付けられたネットワーク装置の能力、サービスプロバイダネットワークの特性、サービスレベル合意の要件、ネットワークノートの数などに依存してよい。例として、複数のポートを備えたネットワークインタフェースを含むネットワーク装置のスケジューラ、例えばスケジューラ253は、例えばポート235a…235nといったポートごとに1つの階層を備え、複数のスケジューリング階層を実施するように構成されることができる。例えばスケジューラ253といったスケジューラは、本明細書で説明されるように、キュー(例えば、約数万のキュー)をグループ化し、スケジューリング階層500に従って1又は複数のパケットフロー(例えば、約数十万又はこれ以上のパケットフロー)を各キューに関連付け、そして、送信用のパケットを選択すること(すなわち、スケジュールすること)において上記グループと関連する基準とを利用するように構成される。
【0042】
スケジューリング階層500の第1のレベルが、ポート502である。ポート502は、ネットワークインタフェース216のポート、例えばポート235a…235nに対応する。例えば、ポート502は、およそギガビット毎秒、例えば、1GbE(ギガビット毎秒イーサネット(登録商標))、10GbE及び/又は40GbEのビットレートを備えたイーサネット(登録商標)Txポートに対応することができる。スケジューラ253は、各ポートが同等の優先度を有するように、ラウンドロビン順序で複数のポートをスケジュールするように構成されることができる。
【0043】
(1又は複数の)サブポート504a…504sが、スケジューリング階層500の第2のレベルであり、1又は複数に対応する。ポートごとのサブポートの数は、例えば、ネットワークサービスプロバイダによって設定されることができる。例えば、ポートごとのサブポートの数は、8とすることができる。いくつかの実施形態において、各サブポートは、予め定められたユーザグループを表すことができる。複数のパイプ506a…506pが、スケジューリング階層500の第3の階層である。サブポートごとのパイプの数は、例えば、ネットワークサービスプロバイダによって設定されることができる。例えば、サブポートごとのパイプの数は、4千とすることができる。サブポートごとのパイプの数は、一般に、約数千とすることができる。いくつかの実施形態において、パイプは、ユーザ、例えば加入者を表すことができる。
【0044】
複数のトラフィッククラス508a…508dは、スケジューリング階層の第4のレベルである。トラフィッククラスの数は、典型的には2のべき乗であり、一般に比較的小さい。この例において、トラフィッククラスの数は4である。したがって、各パイプ、例えばパイプ506aは、4つのトラフィッククラス、例えばトラフィッククラス508a…508dを含む。各トラフィッククラス508a…508dは、それぞれのトラフィックタイプ、例えば、音声、双方向ビデオ、非双方向ビデオ、データ転送(ファイル転送、アプリケーションダウンロード、電子メールトラフィック、ウェブブラウジングなど)に対応する。各トラフィッククラス508a…508dには、例えば、関連するSLA及び/又はQoS(クオリティオブサービス)仕様に関する送信パラメータを関連付けることができる。例えば、送信パラメータには、これらに限定されないが、関連する許容可能な損失レート、許容可能な遅延及び/又は許容可能なジッタの仕様を含むことができる。
【0045】
スケジューリング階層500の第5のレベルは、複数のキュー510a…510d、512a…512d、514a…514d、516a…516dに対応する。この例において、パイプごとのキューの数は16である。各トラフィッククラス、例えばトラフィッククラス508aは、4つのキュー、例えば510a…510dを含む。各キュー510a…510d、512a…512d、514a…514d、516a…516dは、同一ユーザに属する同一タイプの1又は複数の接続(すなわち、トラフィックフロー)からのパケットを記憶するように構成される。
【0046】
スケジューラ253は、本明細書に説明されるように、サブポートごとの1つのトークンバケットとパイプごとの1つのトークンバケットを備えたトークンバケット手法を用いて、サブポート及びパイプレベルでトラフィックシェーピングを実施するように構成されることができる。それぞれの上限は、サブポートレベルにおいて及びパイプレベルにおいて、トラフィッククラスごとに強制されることができる。スケジューラ253はさらに、本明細書に説明されるように、より高い優先度のトラフィッククラスにより使用されていない可能性があるサブポート帯域及び/又はパイプ帯域を、より低い優先度のトラフィッククラスが再使用することを可能にするように構成されることができる。
【0047】
スケジューラ253は、絶対優先順序で同一パイプのトラフィッククラスをスケジュールするように構成されることができる。サブポートトラフィッククラスが過剰加入される場合(例えば、構成タイムイベント)、パイプレベルトラフィッククラス上限は、このサブポートに関連付けられたすべてのパイプによって共有される、動的に調整される値に制限されることができる。スケジューラ253は、予め定められた重み付けに従う重み付きラウンドロビン(WRR)を用いて同一のトラフィッククラスのキューをスケジュールするように構成されることができる。
【0048】
図6は、本開示の種々の実施形態と調和する一例示的なスケジューラデータ構造600を示す。スケジューラデータ構造600は、スケジューリング階層500に対応する。スケジューラ253は、各ポート、例えばポート235a…235nについて、それぞれのスケジューラデータ構造、例えばスケジューラデータ構造600を実装するように構成されることができる。スケジューラデータ構造600は、サブポートテーブル602、パイプテーブル604、キューテーブル606、キュー記憶領域608、アクティブキュービットマップ610、及びパイプグラインダアレイ612を含む。
【0049】
サブポートテーブル602は、サブポート0…サブポートSnといった複数のサブポートテーブルエントリを含む。例えば、各サブポートエントリのサブポート0…サブポートSnは、64バイトのサイズを有することができる。サブポートテーブルエントリの数は、ポートごとのサブポートの数に対応する。各サブポートテーブルエントリのサブポート0…サブポートSnは、例えばサブポート504a…504sといった各サブポートに関連付けられた持続性のサブポートデータ、例えばトークンバケットクレジットを記憶するように構成される。サブポートテーブル602は、例えばスケジューラ253によって、デキューオペレーションに関連付けられた読み出し及び/又は書き込みのためにアクセスされることができる。
【0050】
パイプテーブル604は、パイプ0…パイプPnといった複数のパイプテーブルエントリを含む。例えば、各パイプエントリのパイプ0…パイプPnは、64バイトのサイズを有することができる。パイプテーブルエントリの数は、ポートごとのパイプの数に対応する。各パイプテーブルエントリのパイプ0…パイプPnは、例えばトラフィッククラス508a…508dといったトラフィッククラスに関連する持続性のデータを含む、例えばパイプ506aといった各パイプに関連付けられた持続性のデータと、パイプに関連付けられたキュー、例えばキュー510a…510d、512a…512d、514a…514d、516a…516dとを、記憶するように構成される。例えば、この持続性のデータは、トークンバケットクレジットを含むことができる。パイプテーブルエントリのパイプ0…パイプPnは、本明細書に説明されるように、例えばランタイムの間に、更新されることができる。通常、ランタイムの間に変化せず、複数パイプによって共有され得るパイプ構成パラメータは、パイプテーブル604に含まれないことになる。こうしたパイプ構成パラメータは、本明細書に説明されるように、パイププロファイルテーブルに含まれることができる。パイプテーブル604は、例えばスケジューラ253によって、デキューオペレーションに関連付けられた読み出し及び/又は書き込みのためにアクセスされることができる。
【0051】
キューテーブル606は、複数のキューエントリを含む。例えば、各キューエントリのキュー0…キューQnは、4バイトのサイズを有することができる。キューテーブルエントリの数は、ポートごとのキューの数に対応する。各キューテーブルエントリのキュー0…キューQnは、持続性のデータ、例えば読み出し及び/又は書き込みポインタを記憶するように構成される。各キューのキューサイズは、各トラフィッククラスに対して、すべてのキューについて、同一とすることができる。一貫したキューサイズが、キュー基底アドレスが効率的に決定されることを可能にするように構成され、したがって、キュー基底アドレスとキューサイズとがそれぞれのキューテーブルエントリに通常含まれないことがある。キューテーブル606は、例えばスケジューラ253によって、エンキュー及びデキューオペレーションに関連付けられた読み出し及び/又は書き込みのためにアクセスされることができる。それぞれのパイプに関連付けられたキューテーブルエントリは、通常、例えばプロセッサキャッシュ222aの同一のキャッシュラインに記憶されることができる。
【0052】
キュー記憶領域608は、キュー0…キューQnといった複数のキューを含む。キューのキュー0…キューQnの数は、ポートごとのキューの数に対応する。各キューのキュー0…キューQnは、複数のキュー要素を記憶するように構成されることができる。キュー要素の数は構成可能とすることができる。例えば、各キューのキュー0…キューQnは、64個の8バイト要素を記憶するように構成されることができる。各8バイトキュー要素は、パケットディスクリプタのメモリアドレス(すなわち、mbufポインタ)に対応する。パケットディスクリプタ(すなわち、mbuf)は、各パケットのための、パケットに関連付けられたメタデータ(例えば、パケット長、バッファ内のデータの最初のバイトの場所など)を含む比較的小さいデータ構造(典型的には、64バイト又はこれ未満)である。通常、mbufは、メモリバッファ内の特定のメモリ位置において、パケット本体(すなわち、ヘッダ及びペイロード)と共に同じメモリバッファ内に位置する。キュー記憶領域608は、例えばスケジューラ253によって、デキューオペレーションに関連付けられた読み出し及び/又はエンキューオペレーションに関連付けられた書き込みのためにアクセスされることができる。例えば、パケットエンキューは、mbufポインタがキューに書き込まれることに対応し、パケットデキューは、mbufポインタがキューから読み出されることに対応する。
【0053】
アクティブキュービットマップ610は、キュー0…キューQnといったキューごとに1つのキューステータスビットを含むように構成される。ポートごとのキューステータスビットの数は、ポートごとのキューの数に対応する。例えば、
図5のポートビットマップ524は、パイプ506aに関連付けられたキュー520に対応するビットマップ部分522を含む。キューステータスビットは、キュー0…キューQnといったキューがアクティブである(すなわち、キューが空でない)か、あるいはキュー0…キューQnといったキューがアクティブでない(すなわち、キューが空である)かを示すように構成される。各キューステータスビットは、例えばスケジューラ253のエンキューオペレーション(すなわち、(1又は複数の)パケットがエンキューされる)によって設定され、スケジューラ253のデキューオペレーションによってそれぞれのキューが空になったときにリセットされる(すなわち、クリアされる)ことができる。オペレーションにおいて、ビットマップスキャンオペレーションが、次の空でないパイプとそのステータス(例えば、パイプ内の(1又は複数の)アクティブなキューの16ビットマスク)とを返すように構成される。
【0054】
パイプグラインダアレイ612は、パイプグラインダ0…パイプグラインダGnといった複数のパイプグラインダを含む。例えば、パイプグラインダアレイ612は、約128バイトのサイズを有することができる。パイプグラインダ0…パイプグラインダGnといったパイプグラインダの数は、構成可能とすることができる。例えば、パイプグラインダの数は、8とすることができる。パイプグラインダアレイ612は、現在処理されているアクティブなパイプのリストを記憶するように構成される。各パイプグラインダのパイプグラインダ0…パイプグラインダGnは、パイプ処理の間に一時的なデータを含む。現在のパイプが、パケット又はクレジットを使い尽くした場合、このパイプは、ビットマップ610からの別のアクティブなパイプで置換される。パイプグラインダアレイ612は、例えばスケジューラ253によって、デキューオペレーションに関連付けられた読み出し及び/又は書き込みのためにアクセスされることができる。
【0055】
スケジューラモジュール253は、そのパケット処理オペレーション(すなわち、エンキュー及びデキューオペレーション)において、例えばスケジューリング階層500といったスケジューリング階層と、例えばデータ構造600といったデータ構造248とを、利用するように構成される。スケジューラモジュール253はさらに、複数のプロセッサコア220a…220nとネットワーク装置200のマルチスレッディング能力とを生かして処理効率を向上させるように構成される。したがって、スケジューラ253は、SLA義務を満たしながら数千のキューから次の送信用パケットを効率よく選択することができる。
【0056】
図7は、本開示の一実施形態と調和する、複数のパケットをエンキューするように構成された例示的オペレーションのフローチャート700を示す。このオペレーションは、例えば、スケジューラモジュール253によって実行されることができる。いくつかの実施形態において、例えば輻輳管理が実施されるとき、輻輳管理オペレーションは、例えば輻輳管理モジュール257によって実行されることができる。最初、1又は複数のパケットが、例えば、ワーカモジュール又は輻輳管理モジュールから受信されることができる。オペレーション702は、パケットディスクリプタ(mbuf)にアクセスすることと、データフィールドを読み出すこととを含むことができる。データフィールドを読み出して、各パケットについての宛先キューを特定することができる。データフィールドには、例えば、パケットタイプ、パケット長、データの始点へのポインタなどを含むことができる。例えば、データフィールドには、ポートと、サブポートと、トラフィッククラスと、トラフィッククラス識別子内のキューとを含むことができる。データフィールドは、パケットがスケジューラモジュール253によって受信される前に、分類段階、例えば分類部306によって決定されることができる。オペレーション704は、例えばキューテーブル606といったキュー構造にアクセスすることと、例えばキュー記憶領域608といったキューアレイ内の書き込み位置を特定することとを含むことができる。
【0057】
特定されたキューがいっぱいであるかどうかを、オペレーション706において判定することができる。特定されたキューがいっぱいである場合、オペレーション708は、(1又は複数の)パケットを廃棄することを含むことができる。次いで、プログラムフローは、特定されたキューがいっぱいであるかどうかの判定に戻ることができる。特定されたキューから(1又は複数の)パケットがデキューされるまで、後続のパケットもまた廃棄されることができる。特定されたキューがいっぱいでなく、輻輳管理が有効にされている場合、オペレーション710において、特定されたキューの占有率が閾値を上回るかどうかを判定することができる。特定されたキューの占有率が閾値を上回る場合、オペレーション712において、パケットを廃棄するかどうかを、輻輳管理に少なくとも部分的に基づいて判定することができる。輻輳管理には、ランダム初期検知(RED)又は重み付きランダム初期検知(WRED)を含むことができる。RED及び/又はWREDは、キュー占有率とパケット優先度とを考慮して特定のパケットをエンキューするか又は廃棄するかを判定するように構成される。例として、例えば対象キューの占有率が比較的高いとき、より高い優先度のパケットが、より低い優先度のパケットよりもエンキューされる可能性が高くなり得る。RED及びWREDは、無差別に(1又は複数の)パケットを廃棄することに比べて、パケットのエンキュー又は廃棄に関して、比較的よりインテリジェントな判断を提供するように構成される。(1又は複数の)パケットが廃棄されない場合、オペレーション714において、特定されたキューアレイ位置がアクセスされ、(1又は複数の)パケットが格納されることができる。例えば、(1又は複数の)パケットを格納することは、mbufポインタを書き込むことに対応することができる。プログラムフローは、オペレーション716において終了する。
【0058】
(1又は複数の)現在のパケットをエンキューするためにアクセスされるデータ構造は、比較的高いレート(例えば、ギガビット毎秒)の入力パケットと比較的多数のキュー(例えば、数万)とのために、現在のコアのキャッシュ(例えば、コア220aのキャッシュ222a)内に存在しない可能性がある。よって、エンキュー関連のメモリアクセスは、1又は複数のキャッシュミスと対応する性能劣化とをもたらす可能性がある。したがって、前もってデータ構造をプリフェッチすることが有益である場合がある。
【0059】
図8は、プリフェッチすることを含むエンキューオペレーションのための一例示的なパイプライン化された実施例800を示す。この例示的な実施例800は、4つのパイプラインステージ、すなわち、mbufプリフェッチ802、キュープリフェッチ804、キュー内位置プリフェッチ806及びエンキュー808を含む。各ステージ802、804、806、808は、2つの異なる入力パケットに対して同時に実行されるように構成される。例えば、mbufプリフェッチ802は、パケット00及び01に対して操作することができ、キュープリフェッチ804は、パケット10及び11に対して操作することができるなどする。各入力パケットは所与の時間における1つのパイプラインステージの一部とする(すなわち、1つのパイプラインステージによって操作される)ことができ、複数のパケットが同時に操作されることができる。プリフェッチオペレーションは、関連する実行レイテンシを有し、このレイテンシの間、プロセッサ210は現在プリフェッチ下にあるデータ構造へのアクセスを試みない可能性がある。プロセッサ210は、他のワークを実行する、例えば、エンキューシーケンスの種々のステージのオペレーションを他の入力パケットに対して実行するように構成されることができ、したがって、エンキューオペレーションに関してパイプライン化された実装をもたらすことができる。
【0060】
このようにして、複数のパケットが、エンキューオペレーションの間に同時に操作されることができる。各入力パケットは、一度に2つ以上のパイプラインステージによって操作されなくてもよいが、複数のパケットが、任意の時点で複数のパイプラインステージによって操作されることができる。パイプライン構造は、プリフェッチレイテンシを「隠ぺいし」、これによりパケットエンキューオペレーションの性能を向上させるように構成される。
【0061】
図9A及び
図9Bは、本開示の一実施形態と調和する、複数のパケットをデキューするように構成された例示的オペレーションのフローチャート900、950を示す。このオペレーションは、例えば、スケジューラモジュール253によって実行されることができ、各ポート、例えばポート235aに対して実行されることができる。フローチャート950は、本明細書で説明されるとおり、フローチャート900の続きである。プログラムフローは、開始901から始まり得る。オペレーション902において、現在のポート内のいずれかのパイプがアクティブであるかどうかを判定することができる。例えば、設定され、パイプグラインダアレイ612にまだ含まれていない(1又は複数の)パイプに対応する任意のビットをアクティブキュービットマップ610が含むかどうかを、階層型スケジューラ253が判定することができる。現在のポートに関してアクティブなパイプが存在しない場合、プログラムフローはオペレーション902にとどまり得る。(1又は複数の)アクティブなパイプが存在する場合、オペレーション903は、現在のポートに対する次のアクティブなパイプの特定を含むことができる。例えば、次のアクティブなパイプは、例えばアクティブキュービットマップ610の、ビットマップスキャンオペレーションを用いて特定されることができる。ビットマップスキャンオペレーションは、次の空でないパイプ識別子と関連するステータス(すなわち、パイプ内のアクティブなキューの16ビットマスク)とを返すように構成される。
【0062】
オペレーション904は、次のアクティブなパイプデータをプリフェッチすることと、次のアクティブなパイプに関連付けられたキューポインタをプリフェッチすることとを含む。オペレーション906は、パイプグラインダの切り替えを含むことができる。例えば、オペレーション906は、本明細書で説明されるように、第1のパイプグラインダから第2のパイプグラインダへの切り替えを含むことができる。パイプグラインダの切り替えは、次のアクティブなパイプに関連付けられたオペレーションのプリフェッチを「隠ぺいする」ように構成される。換言すると、パイプグラインダの切り替えは、次のアクティブなパイプに関連付けられたプリフェッチするオペレーションが、現在のパイプに関連付けられたパケットデキューオペレーションと同時に生じることを可能にするように構成される。本明細書において、現在のパイプは、デキューオペレーションに関して現在選択されているパイプに対応し、次のアクティブなパイプは、デキューオペレーションに関して選択されることになる次のパイプに対応する。したがって、フローチャート900、950を通じた現在のパスにおいてオペレーション903で特定される次のアクティブなパイプは、フローチャート900、950のオペレーションを通じた次のパスにおける現在のパイプに対応し得る。
【0063】
オペレーション908は、現在のパイプデータ構造の読み出しを含むことができる。オペレーション910は、現在のパイプとそのサブポートとに関するクレジットの更新を含むことができる。例えば、現在のパイプとそのサブポートに関するそれぞれのトラフィックシェーピングトークンバケットクレジットと、現在のパイプとそのサブポートとに関連付けられたそれぞれのトラフィッククラスクレジットとを、更新することができる。オペレーション912において、現在のパイプ内の次のアクティブなトラフィッククラスを特定することができる。オペレーション913は、現在のパイプ及び現在のトラフィッククラス(TC)内の次キューの選択を含むことができる。例えば、次キューは、重み付きラウンドロビン(WRR)を用いて選択されることができる。オペレーション914は、現在のキューにおける次の位置(すなわち、キュー読み出しポインタにより指し示される位置)をプリフェッチすることを含む。現在のキューにおける次の位置のプリフェッチは、キュー要素を含むデータ構造(すなわち、キューアレイ)を(キュー読み出しポインタによって指し示される位置において)プリフェッチすることに対応する。オペレーション904において、キューポインタはプリフェッチされている。各キュー要素は、mbufポインタである。キュー読み出しポインタは、オペレーション904においてプリフェッチされたキューポインタに対応する。オペレーション915は、パイプグラインダの切り替えを含むことができる。
【0064】
オペレーション916は、現在のキューから現在の要素(すなわち、mbufポインタ)を読み出すことと、そのパケットディスクリプタ(すなわち、mbuf)をプリフェッチすることとを含むことができる。オペレーション917は、パイプグラインダを切り替えることを含む。オペレーション918は、パケットディスクリプタからパケット長を読み出すことを含み得る。オペレーション920において、利用可能なトラフィックシェーピング(TS)トークンバケットクレジットと利用可能なトラフィッククラスクレジットとがパケットクレジット以上であるかどうかを、判定することができる。パケットクレジットは、パケット長(バイト単位)にフレームオーバヘッド(バイト単位)を加えたものに対応する。それぞれのトラフィックシェーピングトークンバケットクレジットは、本明細書に説明されるように、サブポートごと及びパイプごとに提供されることができ、トラフィックシェーピングに関して利用されることができる。それぞれのトラフィッククラスクレジットは、本明細書に説明されるように、サブポートごとに及びパイプごとに提供されることができ、各トラフィッククラスに関して、サブポートレベルにおいて及びパイプレベルにおいて上限を実装するために利用されることができる。利用可能なトークンバケットクレジットと利用可能なTCクレジットとがパケットクレジット以上でない場合、プログラムフローはオペレーション932に進むことができる。
【0065】
利用可能なトラフィックシェーピングトークンバケットクレジットと利用可能なTCクレジットとがパケットクレジット以上である場合、オペレーション922において、現在のパケットを送信用にスケジュールすることができる。オペレーション924において、(1又は複数の)クレジットを減算することができ、重み付きラウンドロビン(WRR)キュートークン加算器を更新することができる。例えば、クレジットは、選択されたパイプと関連するサブポートとに関するトークンバケットから減算されることができ、(1又は複数の)クレジットは、選択されたトラフィッククラスに関するパイプ及びサブポートレベルでクレジットカウンタから減算されることができる。減算されるクレジット数は、送信されるバイト数(すなわち、パケットクレジット)に対応する。キュートークン加算器は、パケット長に対応する量(例えば、バイト単位)ずつインクリメントされることができる。オペレーション926において、現在のパイプ及び現在のトラフィッククラス内の次キューを、選択することができる。
【0066】
オペレーション930において、現在のトラフィッククラスがアクティブであるかどうかを判定することができる。現在のトラフィッククラスがアクティブである場合、プログラムフローはオペレーション916に戻ることができ、現在のキューから現在の要素を読み出し、そのパケットディスクリプタをプリフェッチすることになる。現在のトラフィッククラスがアクティブでない場合、オペレーション932において、現在のパイプにおけるいずれかの次トラフィッククラスがアクティブであるかどうかを判定することができる。現在のパイプにおける次トラフィッククラスがアクティブである場合、プログラムフローはオペレーション912に戻ることができ、現在のパイプ内の次トラフィッククラスを特定することになる。現在のパイプにおいてアクティブである次トラフィッククラスが存在しない場合、プログラムフローはオペレーション902に戻ることができ、現在のポートに関していずれかのパイプがアクティブかどうかを判定することになる。
【0067】
次トラフィッククラスがアクティブであるかどうかを判定するオペレーション932は、現在のパイプにおいてすでに扱われているトラフィッククラスに戻ることを回避するように構成される。例えば、トラフィッククラスは、次のアクティブなトラフィッククラスが例えばオペレーション912において特定されたとき、非アクティブである可能性がある。別の例において、トラフィッククラスは、アクティブである可能性があり、しかし十分なトラフィックシェーピングトークンバケットクレジット及び/又はトラフィッククラスクレジットを欠いていることがある。
【0068】
キャッシュミスを回避するために、フローチャート900のオペレーション、例えばオペレーション904は、アクセスされる前にデータ構造(例えば、パイプ、キュー、キューアレイ、mbuf)をプリフェッチするように構成される。プリフェッチオペレーションのレイテンシは、プリフェッチが現在のパイプに関して発行された直後に、例えばパイプグラインダ1内の現在のパイプから例えばパイプグラインダ2内の別のパイプ(すなわち、次のアクティブなパイプ)に切り替えることによって「隠ぺいされる」ことができる。したがって、現在のパイプのプリフェッチオペレーションは、実行制御がパイプグラインダ1内のこのパイプに切り替わって戻る前に、完了することができる。
【0069】
フローチャート900、950のオペレーションは、データキャッシュにおけるデータの存在を生かすように構成される。例えば、スケジューラモジュール253は、同一のパイプから次のアクティブなトラフィッククラスへ(もしあれば)、又は別のアクティブなパイプへ移動する前に、(最大で利用可能なパケット及びクレジットまで)可能な限り多くのパケットを同一のパイプトラフィッククラス及びパイプからスケジュールするように構成されることができる。
【0070】
図10は、本開示の一実施形態と調和する一例示的なデキューオペレーション1000を示す。この例示的なデキューオペレーション1000は、階層型スケジューラデータ構造、例えばデータ構造600を利用するように構成される。パイプグラインダ1002a…1002dが、サブポートテーブル1004、パイププロファイルテーブル1006、パイプテーブル1008、キューテーブル及び/又はキュー記憶領域1012に結合されることができる。
【0071】
パイププロファイルテーブルは、同一パイプのパケットに関して変化しないパイプ構成値を記憶するように構成される。こうしたパイプ構成値は、通常、SLAに関連し、例えば、時間、時間ごとのクレジットなどを含むことができる。したがって、パイププロファイルテーブル値は、SLAが変更された場合に変わる可能性があり、しかし通常は同一パイプのパケットに関して変化しない。例えば、電気通信ネットワークが、比較的少数(例えば、10未満)のサービスクラスを用いて構成されることがある。それぞれのパイププロファイルが、各サービスクラスに対して作成されることがあり、多数(例えば、約数千)のパイプが、同一のサービスクラスを共有することがあり、ゆえに同一のパイププロファイル値を共有することがある。パイプテーブルエントリは、パケット単位ごとに変化するデータ(例えば、パイプトークンバケットカウンタ、トラフィッククラスごとの残存クレジット、WRRカウンタなど)を含み、したがってパイプテーブルエントリは、複数のパイプに関する比較的静的なデータがパイププロファイルテーブルに記憶されるため、サイズにおいて縮小されることができる。
【0072】
パイプテーブルエントリの最小化は、パイプごとにプリフェッチされるデータの量を低減するように構成される。プリフェッチは、プロセッサ物理アーキテクチャに関連するキャッシュラインサイズ(例えば、64バイト)ずつパイプデータをプリフェッチするように構成される。したがって、各パイプについて、階層型スケジューラは、同一パイプのすべての16個のキューに関して、パイプテーブルエントリ構造及びキューポインタをプリフェッチするように構成される。そして、キューポインタは、第2のキャッシュラインに記憶されることができる。階層型スケジューラは、例えば
図9のオペレーション904のように、同時に双方のプリフェッチを始めるように構成されることができる。
【0073】
この例において、パイプグラインダアレイは、4つのアクティブなパイプに対応する4つのパイプグラインダ1002a…1002dを含む。アクティブなパイプは、ビットマップ1014によって示される。階層型スケジューラ、例えばスケジューラ253は、パイプグラインダ1002a…1002dの各々を選択して、出力ポート1018による送信用のパケット1016、例えば出力パケット1020のスケジューリングを管理するように構成される。パイプグラインダ1002a…1002dに関連付けられた複数のアクティブなパイプを利用してパイプライン化を容易にすることができる。複数のパイプグラインダ1002a…1002dは、複数のパイプを同時に処理するように構成される。
【0074】
例えば、キャッシュミスを回避するために、データ構造(例えば、パイプ、キュー、キューアレイ、mbuf)は、アクセスされる前にプリフェッチされることができる。プリフェッチオペレーションのレイテンシは、プリフェッチが現在のパイプに関して発行された直後に、(例えば、グラインダ1002b内の)現在のパイプから(例えば、グラインダ1002c内の)別のパイプに切り替えることによって「隠ぺいされる」ことができる。このことは、プリフェッチオペレーションのための十分な時間を提供して、実行制御が(パイプグラインダ1002b内の)このパイプに切り替わって戻る前に完了することができるように構成される。
【0075】
図11は、本開示と調和するパイププリフェッチステートマシンの一例1100を示す。この例示的なパイププリフェッチステートマシン1100は、トークンバケットクレジットが利用可能であり、パイプレベル及びサブポートレベルのトラフィッククラス上限を超えない限り、例えば同一のトラフィッククラスからパケットを順番にスケジューリングすることによって、データ局所性を生かすように構成される。ステートマシン1100に関連付けられたステートには、開始1102、パイププリフェッチ1104、トラフィッククラスキューアレイプリフェッチ1106、mbufプリフェッチ1108及びmbuf読み出し1110を含む。ステートマシン1100は、通常、順番に、開始1102から、パイププリフェッチ1104へ進み、トラフィッククラスキューアレイプリフェッチ1106へ進み、mbufプリフェッチ1108へ進み、mbuf読み出し1110へ進むように構成される。現在の状態がパイププリフェッチ1104であり、かつ、アクティブなパイプが存在しない、すなわち少なくとも1つのアクティブなキューを有するパイプが存在しない場合、ステートマシン1100は、パイププリフェッチ1104状態に留まるように構成される。
【0076】
現在の状態がmbuf読み出し1110である場合、ステートマシン1100は、パイプに関連付けられた同一のトラフィッククラスがアクティブなキュー(及び利用可能なクレジット)を有する限り、mbuf読み出し1110状態に留まるように構成される。例えば、mbuf(及び関連する第1のパケット)に関連付けられた(1又は複数の)パケットクレジットが、利用可能なトークンバケットクレジット及びTCクレジット以下である場合、第1のパケットは、本明細書に説明されるように、送信用にスケジュールされることができる。この例を続けると、第1のパケットと同一のトラフィッククラス及び同一のパイプの中の(1又は複数の)追加的なパケットがスケジューリングを待つ場合、状態遷移は「同一のTC」であり、次の状態はmbuf読み出しに対応する。
【0077】
ステートマシン1100は、次のアクティブなトラフィッククラスが現在のアクティブなトラフィッククラスと同一のパイプ内にある場合、mbuf読み出し状態1110からmbufプリフェッチ状態1108に遷移するように構成される。例えば、mbuf読み出し1110からmbufプリフェッチ1108への遷移は、第1のパケットのパケットクレジットが利用可能なクレジットを超えるか、あるいは同一のトラフィッククラス内にスケジューリングを待っている(1又は複数の)追加のパケットが存在せず、さらに、同一のパイプ内のあるトラフィッククラスが(1又は複数の)アクティブなキューを有する場合に、生じ得る。
【0078】
ステートマシン1100は、次のアクティブなキューが次のアクティブなパイプ内にある場合、mbuf読み出し状態1100からトラフィッククラスキューアレイプリフェッチ状態1106に遷移する(「次のアクティブなパイプ」)ように構成される。例えば、mbuf読み出し1110からTCキューアレイプリフェッチ1106への遷移は、第1のパケットのパケットクレジットが利用可能なクレジットを超えるか、あるいは同一のトラフィッククラス内にスケジューリングを待っている(1又は複数の)追加のパケットが存在せず、さらに、同一パイプ内に(1又は複数の)アクティブなキューを有するトラフィッククラスが無い場合に、生じ得る。ステートマシン1100は、アクティブなパイプが存在しない場合、mbuf読み出し状態1110からパイププリフェッチ状態1104に遷移する(「アクティブなパイプ無し」)ように構成される。
【0079】
このようにして、例示的なパイププリフェッチステートマシン1100は、同一パイプ内の別のトラフィッククラスに移動する前に、(クレジットが利用可能であり、上限を超えない限り、)同一パイプ内の同一トラフィッククラスからのパケットをスケジュールすることによって、データ局所性を生かすように構成される。例示的なパイププリフェッチステートマシン1100はさらに、クレジットが利用可能であり、上限を超えない限り、同一パイプからパケットをスケジュールするように構成されることができる。例示的なパイププリフェッチステートマシン1100は、パイプのパケットスケジューリングのシリアル化されたビューを提供する。複数のアクティブなパイプが、同時に処理されることができる。各プリフェッチオペレーションは、別のアクティブなパイプへの切り替えをトリガするように構成され、したがって、パケットスケジューリングオペレーションは、プリフェッチオペレーションが生じている間に続けることができる。このようにして、パケット処理(すなわち、スケジューリング)オペレーションは、複数のアクティブなパイプに間に合うように組み合わせられることができる。
【0080】
したがって、パケットデキューオペレーションが、本明細書に説明されるように、スケジューリング階層とスケジューラデータ構造とを利用して、例えばスケジューラ253によって、実施されることができる。次のアクティブなパイプは、アクティブなキューとその関連する(1又は複数の)パイプとを特定するように構成された(例えば、アクティブキュービットマップ610の)ビットマップスキャンオペレーションを用いて特定されることができる。複数のアクティブなパイプが、パイプの並列処理を容易にするように構成されたパイプグラインダアレイに含まれることができ、したがってフェッチレイテンシを隠すことができ、ゆえにオペレーションの効率を向上させることができる。
【0081】
図12は、階層型スケジューラ及びネットワークインタフェースポートの相対的なタイミング及び同期の一例1200を示す。各出力ポート、例えばポート235a…235nは、階層型スケジューラによって送信用のデータで満たされることになるバイトスロットのコンベヤーベルトとしてモデル化されることができる。例えば、10GbEの能力を有するポートは、階層型スケジューラが毎秒12.5億バイトスロットを利用可能であることに相当する。階層型スケジューラがスロットを満たすほど十分に高いレートでパケットをデキューすることができない場合、十分なパケット及びクレジットが存在すると仮定すると、いくつかのスロットが使用されないままとなり、帯域が無駄にされることになる。ポートを十分に利用するために、階層型スケジューラはバイトスロットをいっぱいのまま保持することが望ましい。例1200は、1つのポートに関してタイミング及び同期を示すが、オペレーションにおいて、階層型スケジューラは、複数のポートに関して同時にパケットをスケジュールすることができる。例1200は、ポート帯域が十分に利用される2つの時間間隔1202、1204と、階層型スケジューラがバイトスロットをいっぱいのまま保持することができていない2つの時間間隔1206、1208とを含む。
【0082】
第1の時間間隔1202において、階層型スケジューラは、バイトスロットを満たすほど十分に速く、無駄にされているスロットはない。第2の時間間隔1204において、階層型スケジューラ処理は送信に先行し、階層型スケジューラは再び、バイトスロットを満たすほど十分に速い。第3の時間間隔1206において、階層型スケジューラレイテンシが、複数の空きバイトスロット1210をもたらし、したがって使用されない(すなわち、無駄な)帯域をもたらしている。第4の時間間隔1208において、階層型スケジューラ処理はポート送信部より遅く、いくつかのバイトスロット1212が空いており、したがって、利用可能な帯域が十分に利用されていない。
【0083】
通常、階層型スケジューラ253のデキューオペレーションは、ネットワークインタフェース送信部(Tx)、例えばTx236によってトリガされることができる。例えば、ネットワークインタフェースTx入力キューの占有率は、監視されることができる。ネットワークインタフェースTx入力キューの占有率が閾値の下に下がる場合、スケジューラは(例えば、割り込みベース又はポーリングベースで)通知されて、より多くのパケットをキューにプッシュする。
【0084】
スケジューラ253は、クレジットロジックによって利用されることができる時間の進み(advancement)を監視するように構成される。クレジットロジックには、サブポート及びパイプトラフィックシェーピング、トラフィッククラス上限強制などを含むことができる。クレジットロジックは、時間、例えば最後の更新からの時間間隔の継続に、少なくとも部分的に基づいてクレジットを更新するように構成される。スケジューラが送信のためにネットワークインタフェース送信部にパケットを送出することを決定したとき、スケジューラは、それに応じてその内部の時間基準をインクリメントするように構成される。したがって、この内部の時間基準をバイト単位で保持することが便利である場合があり、ここで、バイトは、送信媒体上にバイトを送出するために物理インタフェース、例えばPHY233によって要求される時間間隔を表す。パケットが送信用にスケジュールされるとき、上記時間は(n+h)でインクリメントされ、ここで、nはバイト単位のパケット長であり、hはパケットごとのフレーム化オーバヘッドバイト数である。
【0085】
スケジューラ253は、その内部の時間基準を、送信されるパケットのレート、すなわちポートコンベヤベルトのペースに合わせるように構成されることができる。スケジューラ時間基準をネットワークインタフェース時間と合わせることは、スケジューラがネットワークインタフェース、例えばネットワークインタフェースTx236に物理媒体の回線レートより多くのバイトを提供しないことを確かにするように、構成される。したがって、パケット廃棄(例えば、ネットワークインタフェースTx236入力キューがいっぱいであることを理由としたスケジューラによるパケット廃棄、かつ/あるいは、内部的にネットワークインタフェースTxによるパケット廃棄)が回避されることができる。
【0086】
スケジューラ253は、各デキュー呼び出しに応答して現在の時間を読み出すように構成される。現在のプロセッサ時間は、例えばコア220a及び/又はプロセッサ210に含まれるタイムスタンプカウンタ(TSC)レジスタ又は高精度イベントタイマ(HPET)レジスタ223のいずれかを読み出すことによって取得することができる。現在のプロセッサ時間(すなわち、CPUタイムスタンプ)は、time_bytes=time_cycles/cycles_per_byteで、プロセッサクロックサイクル数からバイト数に変換することができる。ここで、cycles_per_byteは、送信媒体における1バイトの送信時間と同等であるプロセッササイクルの量に対応する(例えば、2GHzのプロセッサ周波数と10GbEポートについて、cycles_per_byte=1.6である)。
【0087】
スケジューラ253は、ネットワークインタフェース時間(「NIC時間」)に関連する内部の時間基準を維持するように構成される。パケットがスケジュールされるとき、NIC時間はパケットクレジットでインクリメントされる(すなわち、パケット長にフレーム化オーバヘッドをプラスしたもの)。各デキュー呼び出しを受けて、スケジューラ253は、その内部の基準262のNIC時間を、現在のプロセッサ時間すなわちプロセッサ時間263と比較するように構成される。NIC時間262が未来である(NIC時間>=現在のプロセッサ時間である)場合、NIC時間は調整されなくてよい。このようにして、スケジューラ253は、ネットワークインタフェースが実際にパケットを必要とする前にこれらのパケットをスケジュールすることができる。換言すると、ネットワークインタフェースTx236は、パケットを十分に供給される。他方、NIC時間が過去である(NIC時間<現在のプロセッサ時間である)場合、NIC時間262は、それ自体を現在のプロセッサ時間263に設定することによって調節されるべきである。このようにして、スケジューラ253は、NICバイトコンベヤベルトの速度についていくことができない場合がある。換言すると、ネットワークインタフェースTx236への不十分なパケット供給に起因して、帯域が未使用とされる(すなわち、無駄にされる)。
【0088】
スケジューララウンドトリップ遅延(SRTD)が、スケジューラによる同一パイプの2つの連続した検査の間の時間(すなわち、プロセッササイクル数)に対応する。出力ポート235aに遅れずについていくために(すなわち、利用可能な帯域の過少利用を回避するために)、スケジューラ253は、n個のパケットがネットワークインタフェースTx236により送信され得るより速くn個のパケットをスケジュールするように構成される。スケジューラは、本明細書で説明されたように、関連するパイプトークンバケットに関して構成されたとおり、過剰加入のポートがないと仮定して、各パイプのパケット送信レートに対応するレートでパケットをスケジュールするように構成される。したがって、パイプトークンバケットのサイズは、比較的長い期間のSRTDに起因するオーバーフローを回避するほど十分に高く設定されることができる。というのも、これがパイプに関するクレジットロスをもたらすことになる(ゆえに、帯域ロスをもたらすことになる)からである。
【0089】
スケジューラ253は、第1の数のパケットフローに対応する複数のパケットを第2の数のキューにエンキューし、1又は複数のポート235a…235nを介した送信のために、格納されたパケットをデキューするように構成される。第1の数は、第2の数より大きいか又は等しい。スケジューラ253は、スケジューリング階層、例えばスケジューリング階層500と、データ構造、例えばデータ構造600と、スケジューリング判断を行うため、すなわちデキューする次パケットを選択するためのクレジットロジックとを利用するように構成される。
【0090】
次パケットを(サブポートS,パイプP,トラフィッククラスTC,キューQ)から送信するためのスケジューリング判断は、下記の基準が満たされるときが有利となり得る(すなわち、パケットが送信される)。
1.サブポートSのパイプPが、ポートグラインダの1つによって現在選択されている;
2.トラフィッククラスTCが、パイプPのうち最高の優先度のアクティブなトラフィッククラスである;
3.キューQが、パイプPのトラフィッククラスTC内の、WRR(重み付きラウンドロビン)により選択された次キューである;
4.サブポートSが、パケットを送信するのに十分なクレジットを有する;
5.サブポートSが、パケットを送信するのに十分な、トラフィッククラスTCのクレジットを有する;
6.パイプPが、パケットを送信するのに十分なクレジットを有する;
7.パイプPが、パケットを送信するのに十分な、トラフィッククラスTCのクレジットを有する。
【0091】
上記基準が満たされる場合、スケジューラ253は、パケット送信を選択するように構成され、適切なクレジット(すなわち、トークン)が、例えば、サブポートS、サブポートSのトラフィッククラスTC、パイプP、パイプPのトラフィッククラスTCに関連付けられたトークンバケットから、減算されることができる。
【0092】
一実施形態において、クレジットの単位は、パケット長に関連付けられることができる。例えば、クレジットの単位は、1バイト、すなわち複数のパケット長に関する最大公約数に対応し得る。したがって、長さnバイトのパケットの送信に利用されるクレジット数は、(n+h)に等しく、ここで、hはパケットごとのフレーム化オーバヘッドバイト数に等しい。したがって、パケットクレジットは、パケット長に、パケットごとのフレーム化オーバヘッドバイト数を加えたものに相当する。例えば、イーサネット(登録商標)フレームに関連付けられたフレームオーバヘッドフィールドは、長さ7バイトのプリアンブル、長さ1バイトのスタートフレームデリミタ(SFD)、長さ4バイトのフレームチェックシーケンス(FCS)、及び長さ12バイトのフレーム間ギャップ(IFG)の、合計24バイトを含む。フレームチェックシーケンス(FCS)は、これ自体がmbufパケット長フィールドに含まれない場合、オーバヘッドであると見なされることがある。
【0093】
一実施形態において、トラフィックシェーピングが、サブポート及び/又はパイプレベルで実施されることができる。例えば、スケジューラモジュール253が、トラフィックシェーピングを実施するように構成されることができる。トラフィックシェーピングは、レート制限の形態であり、このレート制限は、いくつかのパケットを遅延させて、例えばネットワーク装置200からのパケットの送信のレートを制御する(すなわち、制限する)ことができる。遅延されたパケットは、例えば、キュー250に記憶される。サブポート及びパイプに対するトラフィックシェーピングは、サブポートごとのトラフィックシェーピング(TS)トークンバケットとパイプごとのTSトークンバケットとを用いて実施されることができる。各TSトークンバケットは、例えば、利用可能なクレジット数のカウントを維持するように構成された飽和カウンタを用いて実装される。パケットは、TSトークンバケット内のクレジット数がパケット内のバイト数にフレーム化オーバヘッドバイト数を加えた数以上である場合、送信されることができ、そうでなければ送信されることはできない。
【0094】
トークンバケットは、2つのトークンバケットパラメータによって記述されることができる。第1のバケットパラメータbucket_rateは、バケットに対してクレジットを追加するレートに対応し、クレジット毎秒という単位を有する。第2のバケットパラメータbucket_sizeは、バケット内に記憶することができるクレジットの最大数に対応し、クレジットという単位を有する。トークンバケットは、バケットの容量を、予め定められた値、例えば、ゼロ又はbucket_sizeの半分に設定することによって初期化されることができる。バケットは、更新されることができ、例えば、クレジットが、少なくとも部分的にbucket_rateに基づいて、周期的にか必要に応じてかのいずれかで、現在バケット内にあるクレジットに追加されることができる。バケットレート(バイト毎秒単位)は、bucket_rate=(tb_credits_per_period/tb_period)*rで定めることができ、ここで、rは、本明細書において、ポート回線レート(バイト毎秒単位)である。バケット内のクレジットの合計数は、bucket_sizeを超えることができない。したがって、バケットがいっぱいである間、バケットへの追加に関して利用可能になる追加のクレジットは、廃棄される可能性がある。クレジットは、パケットスケジューリングに応答して消費することができる。パケットバイトにパケットのフレーム化オーバヘッドを加えた数に対応するクレジット数を、バケットから除去することができる。パケットは、完全なパケット(パケットバイトにパケットのフレーム化オーバヘッドを加えたもの)を送信するために十分なクレジットがバケット内にある場合に限り送信されることができる。
【0095】
トークンバケットが、持続性のデータ構造を用いて実装されることができる。データ構造の要素は、
図6のデータ構造600に、例えばサブポートテーブル602及び/又はパイプテーブル604に、含まれることができる。この要素には、最後のクレジット更新の時間(tb_time)、バイト単位で測定された、許容可能なクレジット更新の間の時間間隔(tb_period)、バイト単位で測定された、tb_periodごとのクレジット許可(tb_credits_per_period)、バイト単位で測定されたバケットサイズ(tb_size)、及びバイト単位で測定された、現在バケット内にあるクレジット数(tb_credits)を含むことができる。本明細書で説明されたように、現在の時間がバイト単位で維持されるため、tb_timeはバイト単位で測定されてクレジット消費オペレーションを容易にすることができる。クレジット更新の間の実際の時間間隔は、1又は複数のtb_periodを含むことができる。そして、利用可能なクレジットの量は、実際の時間間隔の中のtb_periodの数にtb_credits_per_periodを乗算した数に相当し得る。
【0096】
トークンバケットオペレーションは、通常、初期化、クレジット更新及びクレジット消費(例えば、パケットスケジューリングにおいて)を含むことができる。表1は、本開示と調和するTSトークンバケットオペレーションの一例を示す疑似コードを含む。timeは、本明細書において、バイト単位の現在のプロセッサ時間に対応する。n_periodsは、最後のクレジット更新以後の時間間隔内のtb_periodの数に対応する。
【0097】
【表1】
表1に示されるように、TSトークンバケットは、ゼロ個のクレジットか、又はトークンバケット容量の半分に相当するクレジット数かのいずれかで、初期化されることができる。トークンバケットクレジット更新オペレーションは、デキューオペレーション、例えばフローチャート900、950の間に生じ得る。例えば、クレジット更新オペレーションは、パイプが選択された(すなわち、パイプグラインダの1つによって選択された)とき、初期化されることができる。そして、クレジット更新オペレーションは、パイプとパイプに関連付けられたサブポートとのそれぞれのTSトークンバケットクレジットを更新するように構成される。パイプ及びサブポートのTSトークンバケットクレジットは、パイプが選択された後、パイプ及びサブポートのクレジットが(例えば、オペレーション922において)使用される前に、オペレーション910において更新される。
【0098】
別の例において、クレジット更新オペレーションは、パケットが送信されるたびにトリガされることができる。そして、この例において、TSトークンバケットクレジット更新オペレーションは、パケットに関連付けられたサブポート及びパイプのクレジットを更新するように構成されることができる。計算効率を犠牲にして、比較的高い精度を達成することができる。
【0099】
一実施形態において、TSトークンバケットクレジットは、少なくとも完全なtb_periodが最後の更新以後に経過した後、更新されることができる。この実施形態において、精度は、速度とトレードオフになり得る。最高精度は、tb_credits_per_period=1であるためのtb_periodの値を選択することによって達成されることができる。最高精度未満が受け入れ可能であるとき、向上された性能(すなわち、増加された速度)は、tb_credits_per_periodをより大きな値に設定することによって達成されることができる。
【0100】
TSトークンバケットクレジット消費オペレーションは、パケットスケジューリング(例えば、オペレーション922)の結果として(すなわち、応答として)、デキューオペレーション(例えば、オペレーション924)の間に実行されることができる。利用可能なTSトークンバケットクレジットの数(例えば、tb_credits)が、パケットクレジット(すなわち、パケット長にフレーム化オーバヘッドを加えた数)未満である場合、パケットは、送信用にスケジュールされなくてよい。利用可能なTSトークンバケットクレジットの数が、パケットクレジット以上である場合、送信がスケジュールされたときに、適切な数のクレジット(例えば、バイト単位のパケット長にフレーム化オーバヘッドを加えた数に相当する)を、TSトークンバケットから除去することができる。
【0101】
したがって、サブポート及びパイプレベルでトラフィックシェーピングを提供するように構成されたクレジットロジックは、TSトークンバケットを利用して実施されることができる。パケットレートに関連するSLA制約は、バケットパラメータ(例えば、bucket_rate及び/又はbucket_size)の選択によって実装されることができる。
【0102】
一実施形態において、選択されたパイプに関するトラフィッククラスが、絶対優先に従ってスケジュールされることができる。例えば、スケジューラ253は、絶対優先を実施するように構成されることができる。トラフィッククラスは、例えば、関連付けられたデータタイプの、遅延、ジッタ、順序が狂った配信などに対する感度によって特徴づけられることができる。例えば、音声データは遅延及び/又はジッタの影響を強く受ける可能性があり、一方、ファイル転送は最小限の影響を受け得る。したがって、4つのトラフィッククラス(TC0、TC1、TC2、TC3)を備えた実施形態について、音声データは、最高優先度のトラフィッククラス(TC0)に対応することができ、ベストエフォート型ファイル転送は、最低優先度のトラフィッククラス(TC3)に対応することができる。絶対優先スケジューリングは、したがって、昇順で、例えば、TC0を最初、TC3を最後として、トラフィッククラスを選択するように構成されることができる。このようにして、4つのトラフィッククラスとトラフィッククラスごとの4つのキューとを備えた構成について、キュー0…3は、TC0に関連付けられ、キュー4…7は、TC1に関連付けられることができるなどする。したがって、キュー0…3は、キュー4…7の前にスケジュールされることができ、キュー4…7は、キュー8…11の前にスケジュールされることができるなどする。
【0103】
パイプ及びサブポートレベルにおけるトラフィッククラスは、トラフィックシェーピングされず、ゆえに、このコンテキストにおいてトークンバケットは維持されない。サブポート及びパイプレベルにおけるトラフィッククラスの上限パケット送信レートは、サブポートトラフィッククラスクレジットカウンタとパイプトラフィッククラスクレジットカウンタとを周期的に補充することによって強制されることができ、これらカウンタから、パケットがこのサブポートとこのサブポートに関連付けられたポートとに対してスケジュールされるたびに、クレジットが消費される。トラフィックシェーピングとは異なり、トラフィッククラス(TC)クレジットカウンタ更新は固定の間隔で実行され、TCクレジット更新はTCクレジットカウンタを或る値に設定する。トラフィックシェーピングと同様に、(1又は複数の)TCクレジットカウンタが、デキューオペレーションの間、例えば
図9Aのオペレーション910の間、更新されることができる。
【0104】
各TCクレジットカウンタは、持続性のデータ構造を用いて実装されることができる。データ構造の要素には、tc_time、tc_period、tc_credits_per_period及びtc_creditsを含むことができる。tc_timeは、バイト単位で測定され、現在のサブポートと現在のサブポートに関連付けられた現在のパイプとのトラフィッククラス(TC)についての次の更新(すなわち、上限を実施するように構成された補充)の時間に対応する。tc_periodは、現在のサブポートと現在のパイプとのTCについての2つの連続した更新の間の時間に対応する。tc_periodは、通常、トークンバケットtb_periodの標準値より大きい。例えば、tc_periodは、tb_periodの数倍大きくてもよい。tc_credits_per_periodは、各強制期間tc_periodの間に現在のTCによって消費され得るTCクレジットの数への上限に対応する。tc_creditsは、現在の強制期間の残りについて、現在のトラフィッククラスにより消費され得るTCクレジットの数への現在の上限に対応する。
【0105】
サブポート/パイプトラフィッククラス上限強制オペレーションは、通常、初期化、TCクレジット更新及びTCクレジット消費(例えば、パケットスケジューリングにおいて)を含むことができる。表2は、本開示と調和するサブポート/パイプトラフィッククラス上限強制オペレーションの一例を示す疑似コードを含む。
【0106】
【表2】
パケットスケジューリングの結果として、選択されたトラフィッククラス上限は、バイト単位のパケット長及びヘッダ長に相当するTCクレジット数ずつ減らされることができる。パケットは、完全なパケットクレジット(パケットバイト及びパケットのフレーム化オーバヘッド)を送信するために、十分なTCクレジットがTC制限(すなわち、TCクレジットカウンタ)内で現在利用可能である場合、送信されることができる。
【0107】
したがって、トラフィックシェーピングが、TSトークンバケットを用いてサブポート及びパイプレベルにおいて実施されることができ、上限が、TCクレジットカウンタを用いてサブポート及びパイプレベルにおいて各トラフィッククラスに対して強制されることができる。パイプが、例えば
図9Aのオペレーション910において、例えばパイプグラインダによって選択されたとき、クレジットが、デキューオペレーションの間に更新される(すなわち、追加される)ことができる。そして、パケットが例えば
図9Bのオペレーション924において送信のために選択される(すなわち、スケジュールされる)とき、クレジットが消費されることができる。
【0108】
一実施形態において、選択されたトラフィッククラス内のキューが、例えば
図9Aのオペレーション913において、ラウンドロビン手法に従ってスケジュールされることができる。例えば、スケジューラ253は、ラウンドロビン手法を実施するように構成されることができる。ラウンドロビンは、バイトレベルにおいて実施されることができ、パケット長関連バイトレベルにおいて実施されることができ、かつ/あるいは重み付けされることができる。バイトレベルラウンドロビンは、「公平キューイング」と呼ぶことができ、バイトレベル重み付きラウンドロビンは、「均等化キューイング」と呼ぶことができる。使用される手法は、選択されたトラフィッククラス内のキューの1又は複数の特性、例えば、選択されたトラフィッククラス内のすべてのキューがアクティブである(すなわち、空でない)かどうか、キューは同等に重み付けされることになるのかどうか、及び/又はすべてのパケットが同等である(すなわち、同等の長さを有する)のかどうかに、少なくとも部分的に基づく。
【0109】
選択されたトラフィッククラス内のすべてのキューがアクティブであり、同等に重み付けされることになり、かつ、すべてのパケットが長さにおいて同等である場合、キューは、バイトレベルラウンドロビンに従ってスケジュールされることができる。例えば、次キュー#iが、i=(i+1)%nに従って選択されることができる。ここで、キューインデクスがiであり、%はモジュロ整数剰余演算子であり、nはキューの数である。換言すると、4つのキューのシーケンスが、キュー#0、キュー#1、キュー#2、キュー#3、キュー#0などとして選択されることができる。
【0110】
選択されたトラフィッククラス内のすべてのキューがアクティブであり、同等に重み付けされることになり、しかし、すべてのパケットが長さにおいて同等ではない場合、キューは、パケット長関連バイトレベルラウンドロビンに従ってスケジュールされることができる。この場合、キュー#iから1バイトを消費することは、キュー#iに対するちょうど1つのトークンを消費することに対応する。これまでにキュー#iから消費されたトークンの累算された数T(i)が、維持されることができる。パケットがキュー#iから消費されるたび、T(i)は、T(i)+=pkt_lenで更新される。換言すると、バイト単位の消費されたパケットの長さが、T(i)に加算される。そして、次キューが選択されることができる。選択される次キューは、最小のT値を有するキューである。
【0111】
選択されたトラフィッククラス内のすべてのキューがアクティブであり、しかし、すべてのキューが同等に重み付けされるものではなく、すべてのパケットが長さにおいて同等ではない場合、キューは、パケット長関連バイトレベル重み付きラウンドロビンに従ってスケジュールされることができる。パケット長関連バイトレベル重み付きラウンドロビンは、各キューに対して異なるバイトごとのコストを利用することによって、パケット長関連バイトレベルラウンドロビンに対応するように作成されることができる。より低い重み付けを有するキューは、より高いバイトごとのコストを有する。この方法において、次キューを選択するために種々のキューの間で消費を比較することを、容易に行うことができる。例えば、w(i)が、キュー#iの重み付けとして定められることができ、t(i)が、キュー#iのバイトごとのトークンとして定められることができ、キュー#iの重み付けの逆と同等にすることができる。例えば、4つのキュー(すなわち、i=0,1,2,3)について、w[0..3]=[1:2:4:8]である場合、t[0..3]=[8:4:2:1]であり、w[0..3]=[1:4:15:20]である場合、t[0..3]=[60:15:4:3]である。2つ目の例において、逆の重み付けは、結果として生じるトークンが整数であるように調整されている。キュー#iから1バイトを消費することは、キュー#iのトークンt(i)を消費することに対応する。T(i)は、これまでにキュー#iから消費されたトークンの累算された数である。パケットがキュー#iから消費されるたびに、T(i)は、T(i)+=pkt_len*t(i)として更新される。換言すると、パケット長とバイトごとのトークン数との積が、累算されたトークン数に加算される。そして、選択される次キューは、最小のT値を有するキューとすることができる。
【0112】
選択されたトラフィッククラス内のすべてのキューがアクティブでなく、すべてのキューが同等に重み付けされるものではなく、すべてのパケットが長さにおいて同等ではない場合、キューは、可変キューステータスを用いたパケット長関連バイトレベル重み付きラウンドロビンに従ってスケジュールされることができる。可変キューステータスを用いたパケット長関連バイトレベル重み付きラウンドロビンは、非アクティブなキューの消費に大きい数を設定することによって、パケット長関連バイトレベル重み付きラウンドロビンに対応するように作成されることができ、したがって、非アクティブなキューは、最小のTロジックによって選択されないことになる。
【0113】
T(すなわち、キューに対する累算されたトークン数)が連続的な累算の結果としてオーバーフローすることを防ぐために、T(i)は、すべてのキューに対する各パケット消費の後、切り詰められることができる。例えば、T[0..3]=[1000,1100,1200,1300]は、最小のT(例えば、1000)をT(i)、ただしi=0..n、から減算することによって、T[0..3]=[0,100,200,300]に切り詰められることができる。
【0114】
可変キューステータスを用いたパケット長関連バイトレベル重み付きラウンドロビンは、少なくとも1つのアクティブなキューが入力キューのセット内にあることを仮定する。この仮定は、デキューステートマシンがアクティブなキューを選択するように構成されるため、通常満たされる。キュー#iの飽和マスクは、mask(i)=(キュー#iがアクティブである)? 0 : 0xFFFFFFFFとして定めることができる。ここで、?は、条件演算子である。したがって、キュー#iがアクティブである場合、マスクmask(i)はゼロであり、キュー#iがアクティブでない場合、マスクmask(i)は0xFFFFFFFFである。パケット長関連バイトレベル重み付きラウンドロビンと同様に、w(i)は、キュー#iの重み付けに対応し、t(i)は、キュー#iのバイトごとのトークンに対応し、キュー#iの逆の重み付けとして定められ、T(i)は、これまでにキュー#iから消費されたトークンの累算された数であり、次キューは、これまでにキュー#iから消費されたトークンの累算された数の最小値を有するキューである。キュー#iからのパケット消費の前に、T(i)はmask(i)を用いてT(i)|=mask(i)としてビット単位ORされ、値T(i)はT(j)として保存され、ここでjはキューインデックスに対応する。キュー#iからのパケット消費の後、T(j)及びT(i)は、T(j)-=T(i)ただしj≠iかつT(i)=pkt_len*t(i)として更新される。換言すると、新しい(すなわち、パケット消費後の)T(j)は、各キューインデックスjについて、古い(すなわち、パケット消費前の)T(j)と現在のT(i)との間の差として、パケットがちょうど消費されたキュー(すなわち、キュー#i)以外のキューについて、定められる。そして、キュー#iの累算されたトークン数(すなわち、T(i))は、パケット長とキュー#iのバイトごとのトークンとの積である。mask(i)、T(j)、及びT(j)をT(j)-=T(i)ただしj≠iとして更新することの利用は、非アクティブなキューのT(i)が比較的大きくされるように構成され、したがって、非アクティブなキューは最小Tロジックによって選択されないことになる。
【0115】
このようにして、ラウンドロビンは、次キューを選択するために利用されることができる。ラウンドロビンは、重み付けされることができ、バイトレベルにおいて及び/又はパケット長関連バイトレベルにおいて実施されることができる。ラウンドロビンは、非アクティブなキュー、少なくとも1つのキューについての同等でない重み付け、及び/又は同等でない長さのパケットを適応させるように構成されることができる。累算されたトークン数T(i)は、パケットスケジューリング(例えば、オペレーション922)に応答して、デキューオペレーション(例えば、オペレーション924)の間に更新されることができる。
【0116】
いくつかの状況において、サブポートトラフィッククラス、例えばトラフィッククラスXが、親サブポートレベルにおいてトラフィッククラスXに割り当てられている帯域より多くの帯域がサブポートメンバパイプのレベルにおいてトラフィッククラスXに割り当てられることによって、過剰加入される可能性がある。サブポートトラフィッククラス過剰加入は、より高い優先度のトラフィッククラスにより使用されない帯域が、(1又は複数の)より低い優先度のトラフィッククラスによって使用される(すなわち、共有される)ことを可能にし得る。サブポートトラフィッククラス過剰加入は、構成時に、選択されたトラフィッククラスに対して有効にされることができ、通常、最低優先度のトラフィッククラス(例えば、ベストエフォート型トラフィック)に対して有効にされる。特定のサブポート及びトラフィッククラスについての過剰加入の存在は、(輻輳がそうであるように)実行時にトラフィック負荷の動的な発生に起因して生じることとは対照的に、パイプ及びサブポートレベル構成の結果である。オペレーションにおいて、現在のサブポートについて、トラフィッククラスXの全体需要が低い(すなわち、サブポートレベルにおいてトラフィッククラスXへの割り当てがより少ない)とき、トラフィッククラスXの需要は、すべてのメンバパイプについて完全に満たされることができる。しかしながら、すべてのサブポートメンバパイプについての集約されたトラフィッククラスXの需要が、サブポートレベルにおいて構成される制限を超えるとき、この需要はすべてのパイプについて満たされない可能性がある。
【0117】
一実施形態において、本開示と調和するシステム及び方法が、サブポートトラフィッククラス過剰加入を動的に管理するように構成される。例えば、スケジューラモジュール253は、サブポートトラフィッククラス過剰加入を管理するように構成されることができる。この実施形態において、各サブポートメンバパイプは、サブポートレベルでのトラフィッククラスXに対する実行時の利用可能な帯域のうち同等な共有分を割り当てられることができる。そして、比較的低需要のパイプによって使用されない帯域は、同等な割り当てで、比較的高需要のパイプに再分配されることができる。この方法において、より高需要のパイプのトラフィッククラスXに属するパケットは制限される可能性があり、一方、より低需要のパイプのトラフィッククラスXに属するパケットは影響を受けない。さらに、利用可能な帯域は、共有されることができ、したがってより十分に利用されることができる。
【0118】
サブポートトラフィッククラス過剰加入管理は、基準値(water mark)(すなわち、閾値)を定め、サブポートメンバパイプにより経験される現在の需要に少なくとも部分的に基づいて基準値を周期的に更新するように、構成される。基準値を利用して、各パイプがトラフィッククラスXに関して送信することが認められるトラフィックの量を制限することができる。例えば、トラフィッククラスXは、4つの(すなわち、TC0、TC1、TC2、TC3)トラフィッククラス構成について、トラフィッククラスTC3(例えば、ベストエフォート)に対応することができる。この実施形態において、サブポートTC3に対する上限(例えば、tc_credits)は、サブポートレートの100%に設定され、パイプTC3に対する上限(例えば、tc_credits)は、すべてのサブポートメンバパイプについてパイプレートの100%に設定される。
【0119】
基準値は、各トラフィッククラス上限強制期間の始めにおいてサブポートレベルで定められることができる。そして、基準値は、すべてのサブポートメンバパイプに伝搬されることができ、現在の強制期間にわたってすべてのサブポートメンバパイプによって利用されることができる。表3は、基準値伝搬の1つの例を示す。
【0120】
【表3】
(前の強制期間の終わりと一致する)現在の強制期間の始めにおいて、基準値の値は、前の期間の終わりにサブポートメンバパイプによって使用されないままであった、前の期間の始めにTC3に割り当てられた帯域の量に少なくとも部分的に基づいて、調整されることができる。
【0121】
サブポートTC3帯域が使用されないままであった場合、現在の期間に対する基準値の値を増加させて、サブポートメンバパイプを助長して、より多くの帯域を消費することができる。そうでなければ、基準値の値を減少させて、TC3に関するサブポートメンバパイプの間の帯域消費の平等性を強制することができる。
【0122】
基準値の増加又は減少は、比較的小さい増分において実行されることができ、したがって、多くの強制期間において平衡状態が達成されることができる。この状態は、TC3に関するサブポートメンバパイプによって経験される需要の変化に起因して、例えば、需要増加(基準値が下げられるべきであるとき)又は需要減少(基準値が増やされるべきであるとき)の結果として、いつでも変化する可能性がある。
【0123】
需要が低いとき、基準値は、比較的高く設定されることができ、したがって、基準値は、サブポートメンバパイプがより多くの帯域を消費すること妨げない。基準値についての最高値は、サブポートメンバパイプに関して構成される最高レートとして選択されることができる。表4は、基準値オペレーションを示す疑似コードの1つの例を含む。
【0124】
【表4】
このようにして、サブポートトラフィッククラス過剰加入が管理されることができ、使用されていない帯域がより低い優先度のトラフィッククラスによって共有されることができる。利用可能な帯域は、ゆえに、より十分に利用されることができる。
【0125】
したがって、スケジューラモジュール、例えばスケジューラ253は、ネットワーク装置のトラフィック管理を実施するように構成される。スケジューラは、例えば約数万以上のトラフィックフローに関連付けられたパケットを格納するように構成された約数万のキューを含むことができる。換言すると、複数のフローが一キューにマップされることができ、したがって、トラフィックフローの数はキューの数以上となり得る。スケジューラは、本明細書で説明されるように、スケジューリング階層と関連するデータ構造とを利用してトラフィック管理オペレーションをサポートするように構成される。
【0126】
一実施形態において、ネットワーク装置200(例えば、ポリサモジュール247)は、トラフィックポリシングを実施するように構成されることができる。トラフィックポリシングは、通常、例えばSLAにおいて指定され得る(1又は複数の)レートにトラフィックフローを制限するように構成される。ポリシングには、ネットワーク装置200が受信したパケットの計量、マーキング及び/又は廃棄を含むことができる。ポリシングは、シングルレート3カラーマーキング(srTCM)及び/又は2レート3カラーマーキング(trTCM)を含むことができ、これらは双方とも1999年9月にインターネットエンジニアリングタスクフォース(IETF)によって発行されたA Single Rate Three Color Markerと題されたリクエストフォーコメント(RFC)2697及び/又はA Two Rate Three Color Markerと題されたRFC2698に対して準拠し、あるいは互換性を有する。計量は、受信されたパケットが1又は複数のフローレート制限の範囲内であるかどうかを判定するように構成され、マーキング(例えば、受信されたパケットを緑、黄又は赤でタグ付けすること)は、計量の結果を示すように構成される。
【0127】
ポリサモジュール247は、計量のために使用され得る1又は複数のトークンバケットを実施するように構成される。(1又は複数の)トークンバケットは、比較的低帯域のトラフィックフロー(例えば、約数十メガビット毎秒の回線レート)について、及び比較的高帯域のトラフィックフロー(例えば、約数ギガビット毎秒、数十ギガビット毎秒又はこれ以上)について、比較的高い精度(例えば、1%付近)を提供するように構成される。いくつかの実施形態において、本明細書に説明されるように、精度が構成可能である。トークンバケットは、割り込みモードではなくポーリングモードを用いて実施されることができ、高精度タイマではなくタイムスタンプレジスタ、例えばタイムスタンプレジスタ223を利用して構成される。トークンバケットは、トークンバケット更新に関する厳しい期限なしに(例えば、性能に影響を与え得る周期タイマコールバックを用いることなしに)実施されることができる。
【0128】
一般に、srTCM手法は、各トラフィックフローについて、(「コミット済み」及び「超過」とラベル付けされた)2つのトークンバケットを定義し、この2つのバケットは同一のトークン更新レートを共有する。コミット済みバケットは、(IP(インターネットプロトコル)パケットバイト毎秒で測定された)コミット済み情報レート(CIR)パラメータによって定義されたレートでトークンを供給されることができる。コミット済みバケットのサイズは、(バイト単位で測定された)コミット済みバーストサイズ(CBS)パラメータによって定義される。超過バケットは、コミット済みバケットと同一レートでトークンを供給されることができる。超過バケットのサイズは、(バイト単位で測定された)超過バーストサイズ(EBS)パラメータによって定義される。
【0129】
一般に、trTCM手法は、各トラフィックフローについて2つのトークンバケットを定義し、(「コミット済み」及び「ピーク」とラベル付けされた)この2つのバケットは、独立したレートでトークンを更新される。srTCM手法と同様に、コミット済みバケットは、CIRパラメータによって定義されるレートでトークンを供給されることができ、コミット済みバケットのサイズは(バイト単位で測定された)CBSパラメータによって定義される。ピークバケットは、(IPパケットバイト毎秒で測定された)ピーク情報レート(PIR)によって定義されたレートでトークンを供給されることができる。Pバケットのサイズは、(バイト単位で測定された)ピークバーストサイズ(PBS)パラメータによって定義される。
【0130】
srTCMとtrTCMとの双方について、カラーブラインドモードは、入力カラーが緑で設定されたカラー認識モードと機能的に同等である。カラー認識モードについて、赤の入力カラーマーキングを有するパケットは、赤の出力カラーでのみマーク付けされることができ、一方、黄の入力カラーでマーク付けされたパケットは、黄又は赤の出力カラーでのみマーク付けされることができる。カラーブラインドモードはカラー認識モードより計算的に集中しないため、適切である場合、カラーブラインドモードはカラー認識モードとは区別して実施されることができる。
【0131】
各入力パケットについて、srTCM及び/又はtrTCM手法のオペレーションは、コミット済みトークンバケットと(srTCM用の)超過トークンバケット又は(trTCM用の)ピークトークンバケットとの更新を含む。例えば、現在の時間は、プロセッサタイムスタンプレジスタから読み出されることができ、最後のバケット更新からの時間の量が特定されることができ、(予め構成されたバケットレートに従った)関連するトークンの数が計算されることができる。バケット内のトークンの数は、予め構成されたバケットサイズによって制限される。現在のパケットの出力カラーが、IPパケットのサイズと、コミット済みバケットと超過(srTCM)バケット又はピーク(trTCM)バケットとにおける現在利用可能なトークンの量とに基づいて、特定されることができる。カラー認識モードについて、パケットの入力カラーもまた(もしあれば)考慮されることができる。出力カラーが赤でないとき、IPパケットの長さに等しいトークンの数が、この手法とパケットの出力カラーとに依存して、コミット済み及び/又は超過(srTCM)から、あるいはコミット済み及び/又はピーク(tcTCM)から、減算される。
【0132】
本開示と調和するポリシングのためのトークンバケットは、複数の入力パラメータを利用するように構成される。この入力パラメータには、1秒あたりのプロセッササイクル(すなわち、プロセッサ周波数)のHZと、現在の時間に対応するtimeと、(バイト毎秒における)トラフィックフローレートに対応するtb_rateとを含む。timeは、プロセッサタイムスタンプカウンタ(例えば、タイムスタンプレジスタ223)を読み出すことから取得することができ、したがって、プロセッササイクルで測定される。
【0133】
(1又は複数の)トークンバケットは、トラフィックフローごとの持続性のデータ構造を利用することができる。このデータ構造には、例えば、tb_time、tb_tokens、tb_size、tb_period及びtb_tokens_per_periodを含むことができる。tb_timeは、トークンバケットの最新の更新の時間に対応する。tb_tokensは、トークンバケットにおける現在利用可能なトークンの数に対応する。通常、1つのトークンが、パケットデータの1バイトに相当する。tb_sizeは、トークンバケットの上限である。tb_periodは、計量トークンバケット更新期間、すなわち、各バケット更新について経過し得るプロセッササイクル数に対応する。tb_tokens_per_periodは、各更新においてトークンバケットに追加するトークンの数に対応する。tb_period及びtb_tokens_per_periodを利用して、比較的低帯域のトラフィックフローについて、及び比較的高帯域のトラフィックフローについて、比較的高い精度(例えば、約1%)を達成することができる。
【0134】
図13は、本開示の一実施形態と調和する、トークンバケットを初期化するように構成された例示的オペレーションのフローチャート1300を示す。このオペレーションは、例えば、ポリサモジュール247によって実行されることができる。フローチャート1300のオペレーションは、初期化1302において始まる。オペレーション1304は、最小計量トークンバケット更新期間TB_PERIOD_MIN(すなわち、各バケット更新について経過し得るプロセッササイクル数の最小値)を或る値に設定することを含む。TB_PERIOD_MINの値は、トークンバケットオペレーションの許容範囲(すなわち、所望される精度)に関連して構成可能である。例えば、TB_PERIOD_MINは、100に設定されることができ、これは、1%の許容範囲に対応する。オペレーション1306は、計量トークンバケット更新期間tb_period(すなわち、各バケット更新について経過し得るプロセッササイクル数)を決定することを含む。tb_periodは、1秒当たりのプロセッササイクル数を(バイト毎秒における)トラフィックフローレートで除算した数で定められることができる。したがって、tb_periodは、トラフィックのバイトごとのプロセッササイクルに対応する。
【0135】
オペレーション1308において、計量トークンバケット更新期間が最小計量トークンバケット更新期間以上であるかどうかを判定することができる。計量トークンバケット更新期間が最小計量トークンバケット更新期間以上である場合、オペレーション1310において、各更新においてトークンバケットに追加すべきトークン数は、1という値に設定されることができる。そして、プログラムフローはオペレーション1316において終了することができる。計量トークンバケット更新期間が最小計量トークンバケット更新期間以上でない場合、オペレーション1312において、各更新においてトークンバケットに追加すべきトークン数を決定することができる。オペレーション1314において、計量トークンバケット更新期間を決定することができる。そして、プログラムフローはオペレーション1316において終了することができる。
【0136】
表5は、本開示の一実施形態と調和する、トークンバケットの初期化を示す疑似コードの1つの例を含む。表5の例示的な疑似コードは、フローチャート1300のオペレーションの1つの例である。
【0137】
【表5】
第1の例において、2.5GHz(ギガヘルツ)のプロセッサ周波数(HZ)を有するプロセッサと11Mbps(メガビット毎秒)の回線レートを有して構成されたネットワークインタフェースとを備えたネットワーク装置について、トラフィックフローレート(tb_rate)は、1.375メガバイト毎秒である。そして、tb_periodは、2.5GHz/1.375メガバイト毎秒=1818.18サイクル/バイトと定められることができる。100というTB_PERIOD_MINについて、tb_periodはTB_PERIOD_MINより大きく、したがって、tb_tokens_per_periodは1に設定されることができる。
【0138】
第2の例において、同一のプロセッサ及び同一のTB_PERIOD_MIN=100を備え、しかし7Gbpsの回線レートを備える場合、tb_rateは0.875ギガバイト毎秒であり、tb_periodは1バイトにつき2.86サイクルである。tb_periodがTB_PERIOD_MIN以上でないため、tb_tokens_per_periodはceil(100/2.86)=ceil(34.96)=35と定められる。次いで、新しいtb_periodが、(HZ*tb_tokens_per_period)/tb_rate=(2.5GHz*35)/0.875Gbytes/sec=100と定められることができる。したがって、各100プロセッササイクルについて、35トークンがトークンバケットに追加されることができる。
【0139】
第1の例は、比較的低帯域の回線レートに対応し、第2の例は、比較的高帯域の回線レートに対応する。トークンは離散的であり、すなわちトークンは1バイトに対応し、トークンは、整数のプロセッササイクル(すなわち、tb_period)においてトークンバケットに追加されることができる。プロセッサ周波数がトラフィックフローレートの整数倍でない場合、プロセッサ周波数をトラフィックフローで除算した結果は切り詰められることができる。第1の例において、1818.18を1818に切り詰めることが、精度に対して1パーセント未満の影響をもたらす。第2の例において、例えば、2.86を2に切り詰めることは、およそ30%の誤差をもたらす可能性がある。
【0140】
フローチャート1300のオペレーション及び表5の疑似コードは、比較的低帯域のフローに影響することなしに、比較的高帯域のフローの誤差を低減するように構成される。トークンがトークンバケットに追加される全体レート(及び、トークンバケットによって実施される関連する計量)は、フローチャート1300のオペレーションによって変更されない。むしろ、複数のトークンが、プロセッササイクル数に対応する間隔において追加されることができる。例えば、第2の例において、100プロセッササイクルを35トークンで除算したもの(すなわち、バイト)は、2.86プロセッササイクルごとに1トークンであることに対応する。±1プロセッササイクルの変化は、100プロセッササイクルの間隔に対して±1%に対応する。このようにして、計量を実施することができ、比較的高レートのトラフィックフローについて計量精度を保つことができる。
【0141】
図14は、本開示の一実施形態と調和する、トークンバケットを更新するように構成された例示的オペレーションのフローチャート1400を示す。このオペレーションは、ネットワーク装置200における新しいパケットの到着に応答して、例えばポリサモジュール247によって、実行されることができる。フローチャート1400のオペレーションは、更新1402において始まる。オペレーション1404において、最新のバケット更新以後のバケット更新間隔の数(すなわち、計量トークンバケット更新期間の数)を決定することができる。オペレーション1406において、最新のバケット更新の時間を決定する(すなわち、更新する)ことができる。オペレーション1408において、利用可能トークン数を更新することができる。例えば、利用可能トークン数は、最新のバケット更新以後のバケット更新間隔の数と各更新においてバケットに追加すべきトークンの数とに少なくとも部分的に基づいて更新することができる。オペレーション1410において、利用可能トークン数がトークンバケットの上限を超えるかどうかを判定することができる。利用可能トークン数がトークンバケットの上限を超える場合、オペレーション1412において、バケット内の利用可能トークン数は上限に設定されることができる。更新はオペレーション1414において終了することができる。
【0142】
表6は、本開示の一実施形態と調和するトークンバケットの更新(すなわち、補充)を示す疑似コードの1つの例を含む。表6のこの例示的な疑似コードは、フローチャート1400のオペレーションの1つの例である。
【0143】
【表6】
図15は、本開示の一実施形態と調和する、トークンを消費するように構成された例示的オペレーションのフローチャート1500を示す。このオペレーションは、ネットワーク装置200における新しいパケットの到着に応答して、例えばポリサモジュール247によって、実行されることができる。フローチャート1500のオペレーションは、消費1502において始まる。オペレーション1504において、バケット内にある現在利用可能なトークンの数がパケット長以上であるかどうかを判定することができる。バケット内にある現在利用可能なトークンの数がパケット長以上である場合、オペレーション1506において、利用可能なトークンの数からパケット長を減算することができる。バケット内にある現在利用可能なトークンの数がパケット長未満である場合、プログラムフローはオペレーション1508において終了することができる。
【0144】
【表7】
このようにして、トラフィックポリシングは、1又は複数のトークンバケットを用いて実施されることができる。(1又は複数の)トークンバケットは、例えばサービスプロバイダによって選択可能である許容範囲を有して構成されることができる。この許容範囲は、比較的高帯域のフロー及び比較的低帯域のフローの双方に関する計量と精度の計量とを容易にするように構成される。
【0145】
図16A及び
図16Bは、本開示の種々の実施形態と調和する一例示的な階層型スケジューラの性能を示すように構成された2つのグラフ1606、1608を含む。この例示的な階層型スケジューラは、本明細書に説明されたように、64kアクティブキュー、トラフィックシェーピング、絶対優先及び重み付きラウンドロビンを用いて実施された。このスケジューラは、2.7GHzで動作するプロセッサコア上で実施された。グラフ1606及び1608は、プロセッサコアごとのスケジューラ性能を示す。グラフ1606は、スループット率と1つの10GbEポートについての回線レートと2つの10GbEポートについての回線レートとを、バイト単位のパケットサイズに対して百万パケット毎秒で示す。グラフ1608は、スループット率と1つの10GbEポートについての回線レートと2つの10GbEポートについての回線レートとを、バイト単位のパケットサイズに対してギガビット毎秒で示す。
【0146】
図7、
図9A、
図9B、
図13、
図14及び
図15は、一実施形態に従う種々のオペレーションを示すものであり、
図7、
図9A、
図9B、
図13、
図14及び/又は
図15に示されるオペレーションのすべてが他の実施形態に必要なわけではないことを理解されたい。実際、本開示の他の実施形態において、
図7、
図9A、
図9B、
図13、
図14及び/若しくは
図15に示されるオペレーション並びに/又は本明細書に説明される他のオペレーションが図面のいずれにも具体的に示されていない方法で結合され、しかしなお十分に本開示と調和し得ることが、本明細書において十分に考えられる。したがって、1つの図面に厳密に示されていない特徴及び/又はオペレーションに向けられた請求項が、本開示の範囲及び内容に含まれると見なされる。
【0147】
前述は例示的なシステムアーキテクチャと方法論とを提供するが、しかしながら、本開示に対する変更が可能である。プロセッサは、1又は複数のプロセッサコアを含むことができ、システムソフトウェアを実行するように構成されることができる。システムソフトウェアには、例えば、オペレーティングシステムを含むことができる。装置メモリには、ネットワークインタフェースによって送信され、あるいは受信されることになる1又は複数のデータパケットを記憶するように構成されたI/Oメモリバッファを含むことができる。
【0148】
オペレーティングシステム(OS)は、システムリソースを管理し、例えばネットワーク装置200上で実行されるタスクを制御するように構成されることができる。例えば、OSは、Microsoft Windows(登録商標)、HP-UX、Linux(登録商標)又はUNIX(登録商標)を用いて実装されることができるが、他のオペレーティングシステムが使用されることもできる。いくつかの実施形態において、OSは、1又は複数の処理ユニット上で動作する種々のオペレーティングシステム(仮想マシン)に下層のハードウェアについての抽象化のレイヤを提供することができる仮想マシンモニタ(又はハイパーバイザ)によって、置換されることができる。オペレーティングシステム及び/又は仮想マシンは、1又は複数のプロトコルスタックを実装することができる。プロトコルスタックは、1又は複数のプログラムを実行してパケットを処理することができる。プロトコルスタックの一例が、TCP/IP(トランスポートコントロールプロトコル/インターネットプロトコル)プロトコルスタックであり、TCP/IPプロトコルスタックは、ネットワークを介して送信及び/又は受信されるパケットを扱う(例えば、処理又は生成する)ための1又は複数のプログラムを含む。
【0149】
装置メモリ及び/又はネットワークインタフェース記憶部は、下記の種類のメモリ、すなわち、半導体ファームウェアメモリ、プログラマブルメモリ、不揮発性メモリ、読取専用メモリ、電気的プログラマブルメモリ、ランダムアクセスメモリ、フラッシュメモリ、磁気ディスクメモリ及び/又は光ディスクメモリのうち、1又は複数を含むことができる。追加的にか、あるいは別法としてかのいずれかで、システムメモリは、他の及び/又は後に開発される種類のコンピュータ読取可能メモリを含むことができる。
【0150】
本明細書に説明されるオペレーションの実施形態は、1又は複数のプロセッサにより実行されると本願方法を実行する命令を個々に又は組み合わせにおいて記憶した1又は複数の記憶装置を含むシステムにおいて、実施されることができる。プロセッサには、例えば、ネットワーク装置200内の処理ユニット及び/若しくはプログラマブル回路、並びに/又はネットワークインタフェース216内の他の処理ユニット若しくはプログラマブル回路を含むことができる。したがって、本明細書に説明される方法によるオペレーションは、いくつかの異なる物理的配置における処理構造などの、複数の物理的装置にわたって分散され得るものである。記憶装置は、任意の種類の有形の非一時的な記憶装置、例えば、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読取専用メモリ(CD−ROM)、書換可能コンパクトディスク(CD−RW)及び光磁気ディスクを含む任意の種類のディスク、読取専用メモリ(ROM)などの半導体装置、ダイナミックRAM及びスタティックRAMなどのランダムアクセスメモリ(RAM)、消去可能プログラマブル読取専用メモリ(EPROM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、フラッシュメモリ、磁気若しくは光カード、又は電子的命令を記憶することに適した任意の種類の記憶装置を含むことができる。
【0151】
本明細書の任意の実施形態において、「回路」には、例えば、ハードワイヤード回路、プログラマブル回路、ステートマシン回路、及び/又はプログラマブル回路により実行される命令を記憶したファームウェアを、単体で又は任意の組み合わせにおいて、含むことができる。本明細書において、「モジュール」には、回路並びに/又はコード及び/若しくは命令セット(例えば、ソフトウェア、ファームウェアなど)を、単体で又は任意の組み合わせにおいて、含むことができる。
【0152】
いくつかの実施形態において、本明細書に説明される種々のモジュール及び/又は回路についての(1又は複数の)回路及び/又はロジック実装を明記するために、ハードウェア記述言語を使用することができる。例えば、1つの実施形態において、或るハードウェア記述言語が、本明細書に説明される1又は複数の回路及び/又はモジュールの半導体製造を可能にできる超高速集積回路(VHSIC)ハードウェア記述言語(VHDL)に対して準拠し、あるいは互換性を有し得る。VHDLは、IEEE標準2076−1987、IEEE標準2076.2、IEEE1076.1、VHDL−2006のIEEEドラフト3.0、VHDL−2008のIEEEドラフト4.0及び/若しくはIEEE VHDL標準の他のバージョン、並びに/又は他のハードウェア記述標準に対して準拠し、あるいは互換性を有し得る。
【0153】
サービスプロバイダネットワーク102及び/又は(1又は複数の)他のネットワーク106には、パケット交換ネットワークを含むことができる。ネットワーク装置108a…108n、(1又は複数の)他のネットワーク106及び/又はクライアントシステム104a…104nは、選択されたパケット交換ネットワーク通信プロトコルを用いて互いに通信する能力を有することができる。1つの例示的な通信プロトコルには、トランスミッションコントロールプロトコル/インターネットプロトコル(TCP/IP)を用いた通信を許容する能力を有するイーサネット(登録商標)通信プロトコルを含むことができる。イーサネット(登録商標)プロトコルは、2008年12月に発行され“IEEE 802.3 Standard”と題された、米国電気電子学会(IEEE)により発行されたイーサネット(登録商標)標準、及び/又はこの標準のこれ以降のバージョンに対して準拠し、あるいは互換性を有し得る。別法として、又は追加的に、ネットワーク装置108a…108n、(1又は複数の)他のネットワーク106及び/又はクライアントシステム104a…104nは、X.25通信プロトコルを用いて互いに通信する能力を有することができる。X.25通信プロトコルは、国際電気通信連合‐電気通信標準化部門(ITU−T)により公布された標準に対して準拠し、あるいは互換性を有し得る。別法として、又は追加的に、ネットワーク装置108a…108n、(1又は複数の)他のネットワーク106及び/又はクライアントシステム104a…104nは、フレームリレー通信プロトコルを用いて互いに通信する能力を有することができる。フレームリレー通信プロトコルは、国際電信電話諮問委員会(CCITT)及び/又は米国国家規格協会(ANSI)により公布された標準に対して準拠し、あるいは互換性を有し得る。別法として、又は追加的に、ネットワーク装置108a…108n、(1又は複数の)他のネットワーク106及び/又はクライアントシステム104a…104nは、非同期転送モード(ATM)通信プロトコルを用いて互いに通信する能力を有することができる。ATM通信プロトコルは、2001年8月に発行され“ATM-MPLS Network Interworking 2.0”と題された、ATMフォーラムにより発行されたATM標準、及び/又はこの標準のこれ以降のバージョンに対して準拠し、あるいは互換性を有し得る。当然ながら、別の及び/又は後に開発される接続指向のネットワーク通信プロトコルが、本明細書において同様に考えられる。
【0154】
したがって、本開示と調和するシステム及び方法は、プログラマブルネットワーク装置を利用してプログラマブルエグレストラフィック管理を提供するように構成される。本システム及び方法は、1若しくは複数のプロセッサコア及び/又は1若しくは複数のスレッドにわたって、例えば約数万のパケットに関連付けられた処理負荷を分散するように構成される。パケット処理は、パイプライン化されることができる。本システム及び方法は、エンキューオペレーションについて複数のパケットを同時に操作し、デキューオペレーションについて複数のパイプを同時に操作するように構成され、したがってプリフェッチレイテンシを「隠ぺいする」ことになる。
【0155】
パケットフローは、複数のレベルを含むスケジューリング階層にグループ化されてトラフィック管理機能を容易にすることができる。1又は複数のレベルで実施されるトラフィック管理機能には、トラフィックシェーピング、上限強制、絶対優先スケジューリング及び重み付きラウンドロビンを含む。クレジットロジックが、トラフィック管理機能性のうち少なくともいくつかを実施するために利用される。
【0156】
パケットをインテリジェントに廃棄するように構成されたランダム初期検知を利用した輻輳管理が、実施されることができる。トラフィックポリシングが、比較的高帯域のトラフィックフローと比較的低帯域のトラフィックフローとの双方について、比較的高い精度を提供するように構成されたトークンバケット構造を用いて、実施されることができる。
【0157】
したがって、本開示は、一例示的なネットワーク装置を提供する。この例示的なネットワーク装置は、少なくとも1つのプロセッサコアを含むプロセッサと、ある回線レートにおいてパケットを送信及び受信するように構成されたネットワークインタフェースと、スケジューラ階層型データ構造を記憶するように構成されたメモリと、スケジューラモジュールとを含む。スケジューラモジュールは、階層型データ構造に含まれる次のアクティブなパイプ構造をプリフェッチし、現在のパイプと関連するサブポートとについてのクレジットを更新し、現在のパイプデータ構造に少なくとも部分的に基づいて現在のパイプの中で次のアクティブなトラフィッククラスを特定し、特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択し、利用可能トラフィックシェーピングトークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットのクレジット以上である場合に、ネットワークインタフェースによる送信のために、選択された次キューから次パケットをスケジュールするように構成される。
【0158】
本開示はさらに、一例示的な方法を提供する。この例示的な方法には、スケジューラモジュールが、次のアクティブなパイプ構造をプリフェッチするステップであり、次のアクティブなパイプ構造は階層型データ構造に含まれる、ステップと、スケジューラモジュールが、現在のパイプと関連するサブポートとについてのクレジットを更新するステップと、スケジューラモジュールが、現在のパイプデータ構造に少なくとも部分的に基づいて現在のパイプの中で次のアクティブなトラフィッククラスを特定するステップと、スケジューラモジュールが、特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択するステップと、スケジューラモジュールが、利用可能トラフィックシェーピングトークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットのクレジット以上である場合に、送信のために、選択された次キューから次パケットをスケジュールするステップとを含む。
【0159】
本開示はさらに、1又は複数のプロセッサにより実行されたときに下記オペレーションをもたらす命令を個々に又は組み合わせにおいて記憶した1又は複数の記憶装置を含む一例示的システムを提供する。このオペレーションには、次のアクティブなパイプ構造をプリフェッチするステップであり、次のアクティブなパイプ構造は階層型データ構造に含まれる、ステップと、現在のパイプと関連するサブポートとについてのクレジットを更新するステップと、現在のパイプデータ構造に少なくとも部分的に基づいて現在のパイプの中で次のアクティブなトラフィッククラスを特定するステップと、特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択するステップと、利用可能トラフィックシェーピングトークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットのクレジット以上である場合に、送信のために、選択された次キューから次パケットをスケジュールするステップとを含む。
【0160】
本明細書において採用される用語及び表現は、限定の用語としてではなく説明の用語として使用されており、こうした用語の使用及び表現において、図示及び説明される特徴(又は、その部分)のいずれの均等物も除外する意図はなく、種々の変更が請求項の範囲内で可能であることを認識されたい。したがって、請求項はすべてのこうした均等物をカバーするものである。
【0161】
種々の特徴、態様及び実施形態が、本明細書において説明されている。この特徴、態様及び実施形態は、当業者が理解するであろうとおり、互いの組み合わせと変形及び変更とを受け入れる余地がある。本開示は、ゆえに、こうした組み合わせ、変形及び変更を包含すると見なされるべきものである。