(57)【要約】      （修正有）【課題】イングレス制御を備えたトラフィック管理を行う。【解決手段】ある回線レートにおいてパケットを送信及び受信するように構成されたネットワークインタフェースと、スケジューラ階層型データ構造を記憶するように構成されたメモリと、スケジューラモジュールとを含む。スケジューラモジュールは、階層型データ構造に含まれる次のアクティブなパイプ構造をプリフェッチし、現在のパイプと関連するサブポートとについてのクレジットを更新し、現在のパイプデータ構造に少なくとも部分的に基づいて現在のパイプの中で次のアクティブなトラフィッククラスを特定し、特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択し、利用可能トラフィックシェーピングトークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットのクレジット以上である場合に、選択された次キューから次パケットをスケジュールする。【選択図】図２
2015019369.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサコアを含むプロセッサと、
ある回線レートでパケットを送信及び受信するように構成されたネットワークインタフェースと、
スケジューラ階層型データ構造を記憶するように構成されたメモリと、
前記階層型データ構造に含まれる次のアクティブなパイプ構造をプリフェッチし、現在のパイプと関連するサブポートとについてのクレジットを更新し、現在のパイプデータ構造に少なくとも部分的に基づいて前記現在のパイプの中で次のアクティブなトラフィッククラスを特定し、前記の特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択し、利用可能トラフィックシェーピング（ＴＳ）トークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットクレジット以上である場合に、前記ネットワークインタフェースによる送信のために、前記の選択された次キューから次パケットをスケジュールするように構成されたスケジューラモジュールと、
を含むネットワーク装置。
【請求項２】
前記スケジューラモジュールは、前記階層型データ構造に含まれるアクティブキュービットマップに少なくとも部分的に基づいて前記次のアクティブなパイプを特定するようにさらに構成される、請求項１に記載のネットワーク装置。
【請求項３】
複数のパイプが同時に処理される、請求項１に記載のネットワーク装置。
【請求項４】
前記クレジットを更新することは、最新の更新以後の経過時間間隔が最小時間間隔以上である場合に、前記現在のパイプに関連付けられた第１のＴＳトークンバケットに利用可能クレジットを追加すること、前記サブポートに関連付けられた第２のＴＳトークンバケットに利用可能クレジットを追加すること、及び前記の特定された次トラフィッククラスに関連付けられたクレジットカウンタを上限にリセットすることのうち、少なくとも１つを含む、請求項１に記載のネットワーク装置。
【請求項５】
前記次キューは、重み付きラウンドロビン手法を利用して選択される、請求項１に記載のネットワーク装置。
【請求項６】
特定された宛先キュー占有率が閾値を上回る場合に、受信されたパケットを廃棄するように構成された輻輳管理モジュール、
をさらに含む請求項１に記載のネットワーク装置。
【請求項７】
計量トークンバケット内で利用可能な計量クレジットの数に少なくとも部分的に基づいて、受信されたパケットをエンキューするかどうかを判定するように構成されたポリサモジュール、
をさらに含む請求項１に記載のネットワーク装置。
【請求項８】
前記ポリサモジュールは、所望される計量精度に少なくとも部分的に基づいて、最小計量トークンバケット更新期間を設定し、プロセッサ周波数と前記回線レートとに少なくとも部分的に基づいて、各計量トークンバケット更新期間について、前記計量トークンバケットに追加すべき計量クレジットの数を決定するようにさらに構成され、前記計量トークンバケット更新期間は、前記最小計量トークンバケット更新期間以上である、請求項７に記載のネットワーク装置。
【請求項９】
スケジューラモジュールが、次のアクティブなパイプ構造をプリフェッチするステップであり、前記次のアクティブなパイプ構造は階層型データ構造に含まれる、ステップと、
前記スケジューラモジュールが、現在のパイプと関連するサブポートとについてのクレジットを更新するステップと、
前記スケジューラモジュールが、現在のパイプデータ構造に少なくとも部分的に基づいて前記現在のパイプの中で次のアクティブなトラフィッククラスを特定するステップと、
前記スケジューラモジュールが、前記の特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択するステップと、
前記スケジューラモジュールが、利用可能トラフィックシェーピング（ＴＳ）トークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットクレジット以上である場合に、送信のために、前記の選択された次キューから次パケットをスケジュールするステップと、
を含む方法。
【請求項１０】
前記スケジューラモジュールが、前記階層型データ構造に含まれるアクティブキュービットマップに少なくとも部分的に基づいて前記次のアクティブなパイプを特定するステップ、
をさらに含む請求項９に記載の方法。
【請求項１１】
複数のパイプが同時に処理される、請求項９に記載の方法。
【請求項１２】
前記クレジットを更新するステップは、最新の更新以後の経過時間間隔が最小時間間隔以上である場合に、前記現在のパイプに関連付けられた第１のＴＳトークンバケットに利用可能クレジットを追加するステップ、前記サブポートに関連付けられた第２のＴＳトークンバケットに利用可能クレジットを追加するステップ、及び前記の特定された次トラフィッククラスに関連付けられたクレジットカウンタを上限にリセットするステップのうち、少なくとも１つを含む、請求項９に記載の方法。
【請求項１３】
前記次キューは、重み付きラウンドロビン手法を利用して選択される、請求項９に記載の方法。
【請求項１４】
輻輳管理モジュールが、特定された宛先キュー占有率が閾値を上回る場合に、受信されたパケットを廃棄するステップ、
をさらに含む請求項９に記載の方法。
【請求項１５】
ポリサモジュールが、計量トークンバケット内で利用可能な計量クレジットの数に少なくとも部分的に基づいて、受信されたパケットをエンキューするかどうかを判定するステップ、
をさらに含む請求項９に記載の方法。
【請求項１６】
前記ポリサモジュールが、所望される計量精度に少なくとも部分的に基づいて、最小計量トークンバケット更新期間を設定するステップと、
前記ポリサモジュールが、プロセッサ周波数と回線レートとに少なくとも部分的に基づいて、各計量トークンバケット更新期間について、前記計量トークンバケットに追加すべき計量クレジットの数を決定するステップであり、前記計量トークンバケット更新期間は、前記最小計量トークンバケット更新期間以上である、ステップと、
をさらに含む請求項１５に記載の方法。
【請求項１７】
１又は複数のプロセッサにより実行されると下記のオペレーションをもたらす命令を個々に又は組み合わせにおいて記憶した１又は複数の記憶媒体を含むシステムであって、前記オペレーションは、
次のアクティブなパイプ構造をプリフェッチするステップであり、前記次のアクティブなパイプ構造は階層型データ構造に含まれる、ステップと、
現在のパイプと関連するサブポートとについてのクレジットを更新するステップと、
現在のパイプデータ構造に少なくとも部分的に基づいて前記現在のパイプの中で次のアクティブなトラフィッククラスを特定するステップと、
前記の特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択するステップと、
利用可能トラフィックシェーピング（ＴＳ）トークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットクレジット以上である場合に、送信のために、前記の選択された次キューから次パケットをスケジュールするステップと、
を含む、システム。
【請求項１８】
前記命令は、１又は複数のプロセッサにより実行されると下記の追加的オペレーションをもたらし、前記追加的オペレーションは、
前記階層型データ構造に含まれるアクティブキュービットマップに少なくとも部分的に基づいて前記次のアクティブなパイプを特定するステップ、
を含む、請求項１７に記載のシステム。
【請求項１９】
複数のパイプが同時に処理される、請求項１７に記載のシステム。
【請求項２０】
前記クレジットを更新するステップは、最新の更新以後の経過時間間隔が最小時間間隔以上である場合に、前記現在のパイプに関連付けられた第１のＴＳトークンバケットに利用可能クレジットを追加するステップ、前記サブポートに関連付けられた第２のＴＳトークンバケットに利用可能クレジットを追加するステップ、及び前記の特定された次トラフィッククラスに関連付けられたクレジットカウンタを上限にリセットするステップのうち、少なくとも１つを含む、請求項１７に記載のシステム。
【請求項２１】
前記次キューは、重み付きラウンドロビン手法を利用して選択される、請求項１７に記載のシステム。
【請求項２２】
前記命令は、１又は複数のプロセッサにより実行されると下記の追加的オペレーションをもたらし、前記追加的オペレーションは、
特定された宛先キュー占有率が閾値を上回る場合に、受信されたパケットを廃棄するステップ、
を含む、請求項１７に記載のシステム。
【請求項２３】
前記命令は、１又は複数のプロセッサにより実行されると下記の追加的オペレーションをもたらし、前記追加的オペレーションは、
計量トークンバケット内で利用可能な計量クレジットの数に少なくとも部分的に基づいて、受信されたパケットをエンキューするかどうかを判定するステップ、
を含む、請求項１７に記載のシステム。
【請求項２４】
前記命令は、１又は複数のプロセッサにより実行されると下記の追加的オペレーションをもたらし、該追加的オペレーションは、
所望される計量精度に少なくとも部分的に基づいて、最小計量トークンバケット更新期間を設定するステップと、
プロセッサ周波数と回線レートとに少なくとも部分的に基づいて、各計量トークンバケット更新期間について、前記計量トークンバケットに追加すべき計量クレジットの数を決定するステップであり、前記計量トークンバケット更新期間は、前記最小計量トークンバケット更新期間以上である、ステップと、
を含む、請求項２３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、トラフィック管理に関し、より詳細には、イングレス制御を備えたトラフィック管理に関する。
【背景技術】
【０００２】
一般に、サービスプロバイダネットワークは、数千人のユーザに対してネットワーク接続性を提供するように構成される。ユーザには、それぞれのネットワークノードを介してプロバイダネットワークに結合する個人及び／又は企業を含むことができる。各ネットワークノードのユーザ側には、ユーザネットワークを介して相互接続されることができる１又は複数のユーザ装置（例えば、コンピューティング装置、電話、オーディオビジュアル機器など）を含むことができる。
【０００３】
ユーザ装置は、音声、ビデオ及び／又はデータを含むネットワークトラフィックを送信及び／又は受信するように構成される。それぞれのユーザとプロバイダネットワークとの間のトラフィックの量は、例えばサービスレベル合意（ＳＬＡ）によって、各ネットワークノードに対して定めることができる。ＳＬＡには、例えば、ユーザごとに及び／又はトラフィックタイプ（すなわち、トラフィッククラス）によって定められるデータレート及び／又はトラフィックボリュームの制約及び／又は義務を含むことがある。
【０００４】
プロバイダネットワークには、プロバイダネットワーク自体にわたるネットワークトラフィックの移動量を管理するように構成された複数のネットワーク装置、例えばルータを含む。各ネットワーク装置は、複数のトラフィックフローを受信及び／又は送信するように構成される。したがって、ネットワーク装置の物理的リソース、例えばポートは、複数のトラフィックフローによって共有される。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
トラフィック管理が、トラフィックフローによるポートの共有を管理するように構成される。トラフィック管理は、トラフィックフローに関連付けられたトラフィッククラスに少なくとも部分的に基づいて、スケジュール決定と共に、送信するパケットを選択すなわちスケジュールするように構成される。従来のトラフィック管理は、典型的には、パケット処理のために最適化されている専用ハードウェアにおいて実施されてきた。この専用ハードウェアは、サービスプロバイダによってプログラム可能ではない場合があり、かつ／あるいは、２以上のベンダが提供するネットワーク装置が一緒に使用される場合に相互運用性問題を提起するおそれがある。
【０００６】
トラフィック計量が、受信されるパケットレートを制限するように構成される。従来のトラフィック計量は、典型的には、専用ハードウェアにおいて実施されてきた。ネットワーク装置における計量精度は、通常、上記のようなハードウェアを用いて達成することができるが、こうしたハードウェアは、比較的低帯域のフローか比較的高帯域の（例えば、回線レート又は回線レート付近の）フローかのいずれか向けであり、双方向けのものではない。
【課題を解決するための手段】
【０００７】
本開示は、一例示的なネットワーク装置を提供する。この例示的なネットワーク装置は、少なくとも１つのプロセッサコアを含むプロセッサと、ある回線レートにおいてパケットを送信及び受信するように構成されたネットワークインタフェースと、スケジューラ階層型データ構造を記憶するように構成されたメモリと、スケジューラモジュールとを含む。スケジューラモジュールは、階層型データ構造に含まれる次のアクティブなパイプ構造をプリフェッチし、現在のパイプと関連するサブポートとについてのクレジットを更新し、現在のパイプデータ構造に少なくとも部分的に基づいて現在のパイプの中で次のアクティブなトラフィッククラスを特定し、特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択し、利用可能トラフィックシェーピングトークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットのクレジット以上である場合に、ネットワークインタフェースによる送信のために、選択された次キューから次パケットをスケジュールするように構成される。
【０００８】
本開示はさらに、一例示的な方法を提供する。この例示的な方法には、スケジューラモジュールが、次のアクティブなパイプ構造をプリフェッチするステップであり、次のアクティブなパイプ構造は階層型データ構造に含まれる、ステップと、スケジューラモジュールが、現在のパイプと関連するサブポートとについてのクレジットを更新するステップと、スケジューラモジュールが、現在のパイプデータ構造に少なくとも部分的に基づいて現在のパイプの中で次のアクティブなトラフィッククラスを特定するステップと、スケジューラモジュールが、特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択するステップと、スケジューラモジュールが、利用可能トラフィックシェーピングトークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットのクレジット以上である場合に、送信のために、選択された次キューから次パケットをスケジュールするステップとを含む。
【０００９】
本開示はさらに、１又は複数のプロセッサにより実行されたときに下記オペレーションをもたらす命令を個々に又は組み合わせにおいて記憶した１又は複数の記憶装置を含む一例示的システムを提供する。このオペレーションには、次のアクティブなパイプ構造をプリフェッチするステップであり、次のアクティブなパイプ構造は階層型データ構造に含まれる、ステップと、現在のパイプと関連するサブポートとについてのクレジットを更新するステップと、現在のパイプデータ構造に少なくとも部分的に基づいて現在のパイプの中で次のアクティブなトラフィッククラスを特定するステップと、特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択するステップと、利用可能トラフィックシェーピングトークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットのクレジット以上である場合に、送信のために、選択された次キューから次パケットをスケジュールするステップとを含む。
【図面の簡単な説明】
【００１０】
図面を参照して下記の発明の詳細な説明を読み進めると、請求される対象事項の実施形態の特徴及び利点が明らかになるであろう。図面において、同様の番号が同様の部分を表す。
【図１】本開示の種々の実施形態と調和する一例示的ネットワークシステムを示す。
【図２】本開示の種々の実施形態と調和する一例示的ネットワーク装置を示す。
【図３Ａ】１つのパケット処理パイプラインに関するパケット処理パイプライン機能ブロックの一例示的シーケンスを示す。
【図３Ｂ】図３Ａのパケット処理パイプラインの機能ブロックを複数のスレッドにマップする１つの例を示す。
【図３Ｃ】いくつかのパケット処理パイプライン機能ブロックを複数のプロセッサコアにマップする一例を示す。
【図３Ｄ】いくつかのパケット処理パイプライン機能ブロックを複数のプロセッサコアにマップする別の例を示す。
【図４】本開示の１つの実施形態と調和する一例示的スケジューラモジュールを示す。
【図５】本開示の種々の実施形態と調和する一例示的スケジューリング階層を示す。
【図６】本開示の種々の実施形態と調和する一例示的な階層型スケジューラデータ構造を示す。
【図７】本開示の一実施形態と調和する、複数のパケットをエンキューするように構成された例示的オペレーションのフローチャートを示す。
【図８】エンキューオペレーションのための一例示的なパイプライン化された実装例を示す。
【図９Ａ】本開示の一実施形態と調和する、複数のパケットをデキューするように構成された例示的オペレーションのフローチャートを示す。
【図９Ｂ】本開示の一実施形態と調和する複数のパケットをデキューするように構成された例示的オペレーションのフローチャートを示す。
【図１０】本開示の１つの実施形態と調和する一例示的なデキューオペレーションを示す。
【図１１】本開示と調和するパイププリフェッチステートマシンの一例である。
【図１２】スケジューラ及びネットワークインタフェースポートについての相対的タイミング及び同期の一例を示す。
【図１３】本開示の一実施形態と調和する、トークンバケットを初期化するように構成された例示的オペレーションのフローチャートを示す。
【図１４】本開示の一実施形態と調和する、トークンバケットを更新するように構成された例示的オペレーションのフローチャートを示す。
【図１５】本開示の一実施形態と調和する、トークンを消費するように構成された例示的オペレーションのフローチャートを示す。
【図１６】図１６Ａ及び図１６Ｂは、本開示の種々の実施形態と調和する一例示的な階層型スケジューラの性能を示すように構成された２つのグラフを含む。
【発明を実施するための形態】
【００１１】
下記の詳細な説明は例示的な実施形態を参照して進められるが、これに対する多くの代替、変更及び変形が当業者において明らかになるであろう。
【００１２】
概して、本開示は、イングレス制御を備えたトラフィック管理に関連する。本開示と調和するシステム及び方法は、プログラム可能ネットワーク装置を利用するプログラム可能出口トラフィック管理に、約数ギガビット毎秒、数十ギガビット毎秒又はこれを超える回線レートを提供するように構成される。本システム及び方法は、複数のユーザと複数のトラフィッククラスとに関連付けられたパケットの送信を、例えばサービスレベル合意（ＳＬＡ）により規定されるポリシーに従って、優先度付けするように構成される。本システム及び方法は、さらに、数千（例えば、６４k、ただしkは１０２４である）のパケットキュー（及び、各キューに関連付けられた（１又は複数の）パケットフロー）のサポートと複数のスケジューリングレベル（例えば、５）を備えた階層型スケジューリングとを提供するように構成される。本システム及び方法は、本明細書において説明されるとおり、エンキューオペレーションに関して複数のパケットを同時に操作し、デキューオペレーションに関して複数のパイプを同時に操作するように構成され、したがって、プリフェッチレイテンシを「隠ぺいする」ことになる。いくつかの実施形態において、本システム及び方法は、輻輳検出メカニズム（例えば、末尾廃棄、ランダム初期検知）を含むことができる。本システム及び方法は、さらに、本明細書で説明されるとおり、トラフィックシェーピング、絶対優先、重み付きラウンドロビンなどの特徴に関して比較的高いレベルの精度を提供するように構成される。
【００１３】
同様にして、本開示と調和するイングレス制御は、プログラム可能ネットワーク装置上で実施されるように構成され、さらに、比較的低い帯域（例えば、およそMbps（メガビット毎秒））のパケットフローと比較的高い（例えば、およそGbps（ギガビット毎秒））帯域のパケットフローとの双方に対して比較的高い精度（例えば、約１％）を提供するように構成される。
【００１４】
図１は、本開示の種々の実施形態と調和する一例示的ネットワークシステム１００を示す。システム１００は、概して、プロバイダネットワーク１０２と、それぞれのネットワークノード１０５ａ…１０５ｎによってプロバイダネットワーク１０２に結合された複数のクライアントシステム１０４ａ…１０４ｎと、１又は複数の他のネットワーク１０６とを含む。プロバイダネットワーク１０２は、複数のユーザ、すなわちクライアント（例えば、加入者、企業）にネットワーキングサービスを提供するように構成される。プロバイダネットワーク１０２は、複数のネットワーク装置１０８ａ…１０８ｎを含む。各ネットワーク装置１０８ａ…１０８ｎは、１又は複数の他のネットワーク装置１０８ａ…１０８ｎに結合され、少なくとも１つのネットワーク装置が、（１又は複数の）他のネットワーク１０６に結合されることができる。本明細書において、ネットワーク装置は、これらに限定されないが、ルータ、スイッチ及び／又はハブを含む。
【００１５】
プロバイダネットワーク１０２は、各クライアントシステム１０４ａ…１０４ｎにネットワーク接続性及びネットワークサービスを提供するように構成される。例として、クライアントシステム、例えばクライアントシステム１０４ａは、プロバイダネットワーク１０２を介して、（１又は複数の）他のネットワーク１０６及び／又は別のクライアントシステム１０４ｂ…１０４ｎに結合することができる。各クライアントシステムには、コンピュータノード要素（例えば、ホストサーバシステム、デスクトップコンピュータ、ラップトップコンピュータ、タブレット型コンピュータなど）、スイッチ、ルータ、ハブ、ネットワークストレージ装置、ネットワーク接続された装置、不揮発性メモリ（ＮＶＭ）記憶装置、クラウドベースのサーバ及び／又はストレージシステム、ブレード、オーディオビジュアル機器（例えば、テレビジョン、ラジオ受信機など）、スマートフォン、フィーチャーフォンなどのうち、１又は複数を含むことができる。各クライアントシステム１０４ａ…１０４ｎは、それぞれのネットワークノード１０５ａ…１０５ｎを介して、プロバイダネットワーク１０２への及びプロバイダネットワーク１０２からのデータを含むパケットを転送するように構成される。このパケットには、音声データ、ビデオデータ、及び／又は他のデータ、例えばファイル転送データを含み得るデータを含む。
【００１６】
プロバイダネットワーク１０２（（１又は複数の）ネットワーク装置１０８ａ…１０８ｎを含む）、（１又は複数の）クライアントシステム１０４ａ…１０４ｎ及び／又は（１又は複数の）他のネットワーク１０６は、スイッチドファブリック通信プロトコル、例えば、イーサネット（登録商標）通信プロトコル、インフィニバンド通信プロトコルなどを用いて、互いに通信することができる。イーサネット（登録商標）通信プロトコルは、トランスミッションコントロールプロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）を用いて通信を提供する能力を有し得る。イーサネット（登録商標）プロトコルは、２００２年３月に発行され“IEEE  802.3  Standard”と題された、米国電気電子学会（ＩＥＥＥ）により発行されたイーサネット（登録商標）標準、及び／又はこの標準のこれ以降のバージョン、例えば２０１２年に発行されたIEEE  802.3  Standard  for  Ethernet（登録商標）に対して、準拠し、あるいは互換性を有し得る。インフィニバンドプロトコルは、インフィニバンドトレードアソシエーション（ＩＢＴＡ）により発行されたインフィニバンド仕様の、２００１年６月に発行され“InfiniBand（商標）Architecture  Specification”と題されたボリューム１リリース１．２．１、及び／又はこの仕様のこれ以降のバージョン、例えばインフィニバンド（商標）アーキテクチャの２００８年１月に発行されたボリューム１（一般仕様）リリース１．２．１と２０１２年１１月に発行されたボリューム２（物理仕様）リリース１．３とに対して、準拠し、あるいは互換性を有し得る。当然ながら、他の実施形態において、スイッチドファブリック通信プロトコルには、カスタムの及び／又は独占的なスイッチドファブリック通信プロトコルを含むことができる。
【００１７】
ネットワーク１０２及び／又は（１若しくは複数の）他のネットワーク１０６には、例えば、ＩＥＥＥ８０２．３標準に記載のイーサネット（登録商標）ネットワーク、及び／又は例えばＩＥＥＥ８０２．１１標準などの無線ローカルエリアネットワークなどの、任意のパケット交換ネットワークを含むことができる。無線プロトコルは、２０１２年４月に発行され“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”と題された、ＩＥＥＥにより発行された無線標準、及び／又はこの標準のこれ以降のバージョンに対して、準拠し、あるいは互換性を有し得る。
【００１８】
図２は、本開示の種々の実施形態と調和する一例示的ネットワーク装置２００を示す。ネットワーク装置２００は、図１のネットワーク装置１０８ａ…１０８ｎの一例である。ネットワーク装置２００は、概して、プロセッサ２１０、ブリッジチップセット２１２、システムメモリ２１４及びネットワークインタフェース２１６を含む。プロセッサ２１０は、ネットワーク装置２００に関連付けられたオペレーションを実行するように構成される。プロセッサ２１０は、１又は複数の処理ユニット、例えば（１又は複数の）コア２２０ａ…２２０ｎと、各コア２２０ａ…２２０ｎに関連付けられたそれぞれのキャッシュメモリ２２２ａ…２２２ｎと、プロセッサキャッシュメモリ２２４とを含むことができる。ブリッジチップセット２１２は、プロセッサ２１０、システムメモリ及び／又はネットワークインタフェース２１６を結合するように構成される。
【００１９】
ネットワークインタフェース２１６は、ネットワーク装置２００を、１若しくは複数の他のネットワーク装置１０８ａ…１０８ｎに及び／又は（１若しくは複数の）他のネットワーク１０６に結合するように構成される。ネットワークインタフェース２１６は、プロセッサ２２８、ホストインタフェース２１０、媒体アクセス制御（ＭＡＣ）回路２３２、物理層回路（ＰＨＹ）２３３及びネットワークインタフェース記憶部２３４を含むことができる。プロセッサ２２８は、ネットワークインタフェース２１６に関連付けられたオペレーションを実行するように構成される。ホストインタフェース２３０は、ネットワークインタフェース２１６をブリッジチップセット２１２に結合するように構成される。
【００２０】
ＭＡＣ２３２及びＰＨＹ２３３は、ネットワーク装置２００を、１又は複数の他のネットワーク装置１０８ａ…１０８ｎに及び／又は（１又は複数の）他のネットワーク１０６に、物理媒体を介して結合するように構成される。ＭＡＣ２３２は、送信及び受信機能に関して媒体アクセス管理を実行するように構成される。ＰＨＹ２３２は、１又は複数のポート２３５ａ…２３５ｎを含み、各ポート２３５ａ…２３５ｎは、本明細書に説明されるように、複数のトラフィックフローを運ぶ能力を有する。各ポート、例えばポート２３５ａは、データ及び／又はメッセージのパケット及び／又はフレームを、１若しくは複数の他のネットワーク装置１０８ａ…１０８ｎに及び／又は（１若しくは複数の）他のネットワーク１０６に送信するように構成された送信回路２３６を含む。各ポート、例えば、ポート２３５ａは、データ及び／又はメッセージのパケット及び／又はフレームを、１若しくは複数の他のネットワーク装置１０８ａ…１０８ｎから及び／又は（１若しくは複数の）他のネットワーク１０６から受信するように構成された受信回路２３７を含む。
【００２１】
システムメモリ２１４は、オペレーティングシステムＯＳ２４０と、ネットワークインタフェースコントローラ“ＮＩＣ”ドライバ２４２と、複数のアプリケーションプログラミングインタフェースＡＰＩ２４３と、複数のイングレス（ingress）モジュール２４４と、複数のエグレス（egress）モジュール２４６と、複数のデータ構造２４８と、本明細書で説明されるようにパケット処理後かつ送信前にパケットを記憶するように構成された複数のキュー２５０とを記憶するように構成されることができる。
【００２２】
システムメモリ２１４は、仮想マシンモニタ（ＶＭＭ）２５２を記憶するように構成されることができ、そして、複数の仮想マシン（図示せず）を含むことができる。ＯＳ２４０は、効率的な、比較的速いパケット処理に対して構成されたソフトウェアフレームワークを利用するように構成されることができる。例えば、このソフトウェアフレームワークは、インテル（登録商標）アーキテクチャプロセッサ上のパケット処理を最適化するように構成されたインテル（登録商標）データプレーン開発キット（ＤＰＤＫ）に対して準拠し、あるいは互換性を有し得る。
【００２３】
イングレスモジュール２４４は、複数の初期処理モジュール２４５、ポリサ（Policer）モジュール２４７及びロードバランサ２４９を含むことができる。エグレスモジュール２４６は、スケジューラ２５３（例えば、階層型スケジューラ）及びパケット入力／出力（Ｉ／Ｏ）モジュール２５５を含むことができる。いくつかの実施形態において、エグレスモジュール２４６は、本明細書で説明されるように、輻輳管理モジュール２５７を含むことができる。（１又は複数の）ＡＰＩ２４３は、例えばスケジューラ２５３に対して、アプリケーションプログラミングインタフェースを提供するように構成されることができ、スケジューラ構成、エンキュー及び／又はデキューの機能性を含むことができる。（１又は複数の）ＡＰＩ２４３を、例えばサービスプロバイダが利用して、各ネットワークノード及び関連付けられたユーザについてのＳＬＡに関連するポリシーを実施することができる。
【００２４】
ネットワーク装置２００は、プロバイダネットワーク１０２によって運ばれるネットワークトラフィックに関するトラフィック管理機能を実行するように構成される。ネットワーク装置２００は、複数のパケットフローの中の複数のパケットを例えばポート２３５ａのＲｘ２３７によって受信し、このパケットを処理し、処理されたパケットを例えばポート２３５ａのＴｘ２３６によって送信することができる。初期処理モジュール２４５は、パケットＩ／Ｏ受信モジュール２７２と、受信されたパケットを処理するように構成されたフロー分類モジュール２７４とを含んで、例えば、本明細書に説明されるように、関連付けられたトラフィックフローを特定し、送信元及び／又は宛先を特定し、かつ／あるいはトラフィッククラスを特定することができる。いくつかの実施形態において、ポリサモジュール２４７は、本明細書に説明されるように、ネットワーク装置２００がさらに処理できるパケットの数を制限するように構成されることができる。ロードバランサ２４９は、プロセッサコアにわたって及び／又は複数のスレッドにわたってパケット処理アクティビティを分散するように構成される。
【００２５】
エグレスモジュール２４６は、処理されたパケットの、ネットワーク装置２００からの送信を管理するように構成される。スケジューラモジュール２５３は、送信の準備ができている処理されたパケットをエンキューし、次の送信用パケットを選択し、（１又は複数の）選択された次パケットをデキューするように構成される。パケットＩ／Ｏ  Ｔｘモジュール２５５は、（１又は複数の）デキューされたパケットが送信の準備ができていることを、例えばネットワークインタフェース２１６に伝えるように構成される。輻輳管理モジュール２５７は、より多くのパケットが受信され、そしてある時間内に送信される可能性がある場合に、ポリシーに基づいて、パケットを選択的に廃棄する（drop）ように構成される。
【００２６】
イングレスモジュール２４４及びエグレスモジュール２４６は、プロセッサ２１０アーキテクチャを生かすように構成される。イングレス、エグレス、及び他のパケット処理の機能性は、プロセッサコア２２０ａ…２２０ｎ及び／又は複数のスレッドの間で分散されることができる。したがって、イングレス、エグレス、及び他のパケット処理の機能性は、同時に実行されることができ、パイプライン化されることができる。パイプライン化は、パケット処理効率を上げるように構成され、比較的多数（例えば、数万、又はこれ以上）のパケットフローを比較的短時間のうちに処理することを容易にすることができる。
【００２７】
図３Ａは、１つのパケット処理パイプライン３００についてのパケット処理パイプライン機能ブロックの一例示的シーケンスを示す。ネットワーク装置２００は、複数のパケット処理パイプラインを実施するように構成されることができる。パケット処理パイプライン３００の機能ブロックは、プロセッサ２１０の１若しくは複数のコア２２０ａ…２２０ｎ及び／又はネットワークインタフェース２１６によって実行されることができる。パケット処理パイプライン３００には、パケット入力／出力受信モジュール「パケットＩ／Ｏ  Ｒｘ」３０２と、パケットパーサモジュール「パケットパース」３０４と、フロー分類部モジュール「分類部」３０６とを含む。例えば、パケットＩ／Ｏ  Ｒｘ３０２、パケットパース３０４及び分類部３０６は、図２の初期処理モジュール２４５に含まれることができる。パケット処理パイプライン３００は、さらに、トラフィック計量（metering）及び／又はポリシングモジュール「ポリサ３０８」、ロードバランシングモジュール「ロードバランサ」３１０、ワーカモジュール「ワーカ」３１２、輻輳管理モジュール「廃棄部」３１４、階層型スケジューラモジュール「階層スケジューラ」３１６、及びパケット入力／出力送信モジュール「パケットＩ／Ｏ  Ｔｘ」３１８を含む。例えば、ポリサ３０８はポリサ２４７に対応することができ、ロードバランサ３１０はロードバランサ２４９に対応することができ、ワーカ３１２は（１又は複数の）ワーカモジュール２５４に対応することができ、廃棄部３１４は輻輳管理モジュール２５７に対応することができ、階層スケジューラ３１６はスケジューラモジュール２５３に対応することができ、パケットＩ／Ｏ  Ｔｘ３１８はパケットＩ／Ｏ  Ｔｘ２５５に対応することができる。
【００２８】
入力パケットは、パケットＩ／Ｏ  Ｒｘ３０２によりＲｘ２３７から受信されることができ、処理されたパケットは、パケットＩ／Ｏ  Ｔｘ３１８からの通知に応答してＴｘ２３６によって送信されることができる。概して、各パケットには、ルーティング（例えば、アドレッシング）及び制御に関連付けられたパケットヘッダと、データを含むパケットペイロードとを含む。パケットは、例えばネットワークインタフェース２１６のポート２３５ａのＲｘ２３７によって、受信されることができ、ＮＩＣドライバ２４２によって初期処理されることができる。例えば、ＮＩＣドライバ２４２は、本明細書に説明されるように、ポーリングモードドライバとして構成されることができる。受信されたパケット（すなわち、入力パケット）は、次いで、パケットパース３０４によってパースされることができる。パケットパース３０４は、各入力パケットのプロトコルスタックを特定するように構成される。パケットパース３０４はさらに、入力パケットのパケットヘッダの完全性をチェックするように構成される。入力パケットは、次いで、分類部３０６によってトラフィックフローにマップされることができる。例えば、マッピングには、構成可能なハッシュ関数（例えば、ｊｈａｓｈ、ＣＲＣ（巡回冗長検査）など）を用いた完全一致のテーブルルックアップと、衝突を管理するためのバケットロジックとを含むことができる。各トラフィックフローは、送信元と宛先との間のパケット転送の種類に対応する。送信元及び／又は宛先には、例えば、（１若しくは複数の）クライアントシステム１０４ａ…１０４ｎ（及び／又はクライアントシステム内の（１若しくは複数の）クライアント装置）、プロバイダネットワーク１０２、（１若しくは複数の）他のネットワーク１０６、及び／又は（１若しくは複数の）他のネットワーク１０６に結合された他のクライアントシステム（図示せず）を含むことができる。パケットの種類は、パケットにより運ばれる、例えば音声、ビデオ、データといったペイロードの種類に対応することができ、さらに、トラフィッククラスに対応することができる。
【００２９】
ポリサ３０８は、本明細書に説明されるように、トラフィック計量及び／又はポリシング機能を実行するように構成される。トラフィック計量及び／又はポリシングは、本明細書に説明されるように、データレートを制限するように構成される。１又は複数の入力パケットが、トラフィック計量及び／又はポリシングの結果として廃棄されることができる。ロードバランサ３１０は、（計量／ポリシングを切り抜けた）入力パケットを、複数のワーカモジュール、例えばワーカ３１２に分散し、各ワーカモジュールに均一な負荷を提供するように構成される。各ワーカモジュール、例えばワーカ３１２は、サービスプロバイダ固有のアプリケーション作業負荷スレッド（例えば、インターネットプロトコル（ＩＰ）スタックなど）に対応することができる。ロードバランサ３１０はさらに、ワーカモジュールに対するトラフィックフローの類似性と各フロー内のパケット順序とを保つように構成されることができる。ワーカモジュールに対するトラフィックフローの類似性の保護は、パケットフローを処理しながらデータ局所性を生かすことによって、効率的なパケット処理をサポートするように構成されることができる。
【００３０】
廃棄部３１４は、本明細書で説明されるように、階層型スケジューラ３１６についての輻輳管理を実行するように構成される。輻輳管理は、対象のエグレスキュー、ランダム初期検知（ＲＥＤ）及び／又は重み付きＲＥＤ（ＷＲＥＤ）から或る数のパケットが送信されるまで、対象のスケジューラキューがいっぱいであるときはいつでも、パケットを廃棄することを含むことができる。重み付きＲＥＤは、現在のスケジューラキュー負荷レベルとパケット優先度とに基づいてパケットを廃棄するように構成される。したがって、輻輳が経験されるとき、比較的高い優先度のパケットの前に、比較的低い優先度のパケットが廃棄されることができる。
【００３１】
階層型スケジューラモジュール３１６は、本明細書に説明されるように、或る数の基準に少なくとも部分的に基づいて、次の送信パケットをスケジュールする（すなわち、選択する）ように構成される。階層型スケジューラ３１６は、複数のキューの中のパケットをエンキューして送信を待ち、送信用に選択されたときにこのパケットをデキューするように構成される。階層型スケジューラモジュール３１６は、トラフィックシェーピング、絶対優先、上限強制及び／又は重み付きラウンドロビンを実施するように構成されることができる。階層型スケジューラモジュール３１６は、本明細書に説明されるように、約数千のキューを管理するように構成される。
【００３２】
ネットワーク装置２００はさらに、パケット処理パイプライン３００の機能性をサポートするように構成された複数のインフラストラクチャモジュール２５５を含むことができる。インフラストラクチャモジュール２５５は、大域的なバッファプールと非公開のスレッドごとのバッファキャッシュとに関するサポートを提供するように構成されたバッファ管理部モジュール２５６、パケット処理パイプラインモジュール間のメッセージ通過に関するサポートを提供するように構成されたキュー管理部モジュール２５８、及び／又は低アクティビティ期間の間に省電力に関するサポートを提供するように構成された省電力モジュール２６０を含む。
【００３３】
図３Ｂは、パケット処理パイプライン３００の機能ブロックの、複数のスレッドへのマッピングの一例３２０を示す。このスレッドは、１又は複数のプロセッサコア、例えば（１又は複数の）プロセッサコア２２０ａ…２２０ｎ上で同時に実行されるように構成されることができる。この例において、ネットワークインタフェース２１６は、複数のポート２３５ａ…２３５ｎを含み、これらポートは、それぞれの受信部ＮＩＣ  Ｒｘ３２２ａ…３２２ｎ（例えば、Ｒｘ２３７）と、それぞれの送信部ＮＩＣ  Ｔｘ３２４ａ…３２４ｎ、例えばＴｘ２３６とを各々含む。例えば、パケット処理パイプラインは、複数のトラフィックフローについてのパケットを処理するように構成されたスレッド０、スレッド１、スレッド２乃至スレッド(ｎ＋１)、及びスレッド(ｎ＋２)を含むことができる。このスレッドは、パイプラインの中の種々のパケットに対して同時に実行されるように構成されることができる。この例において、スレッド０は、パケットＩ／Ｏ  Ｒｘ３０２及びパケットパース３０４を含み、スレッド１は、分類部３０６、ポリサ３０８及びロードバランサ２１０を含み、スレッド２乃至(ｎ＋１)は、それぞれのワーカ３１２ａ…３１２ｎを各々含み、スレッド(ｎ＋２)は、廃棄部３１４、階層スケジューラ３１６及びパケットＩ／Ｏ  Ｔｘ３１８を含む。この例を続けると、パケット処理パイプラインと関連付けられたスレッドとは、１つの物理ポート、例えばポート２３５ａと、ＮＩＣ  ＲＸ０及びＮＩＣ  ＴＸ０にそれぞれ対応し得るＲｘ２３７及びＴｘ２３６とに関するパケットを処理するように構成されることができる。
【００３４】
いくつかの実施形態において、１つの物理ポートが、複数のスレッドによって共有されることができる。本明細書で説明されるように、この物理ポートに、複数のサブポートが関連付けられることができる。そして、各サブポートが、それぞれのスレッドに関連付けられることができる。物理ポートに関するエンキュー及びデキューオペレーションが、同一のスレッドに関連付けられることができる。スケジューラ３１６に関連付けられたエンキュー及びデキューオペレーションが、同一のスレッド、例えばスレッド(ｎ＋２)によって実施されるように構成される。エンキュー及びデキューオペレーションは、本明細書に説明されるように、例えば、パケットディスクリプタ、キューテーブル、キュー記憶領域、及びアクティブキューのビットマップを共有することができる。これらのオペレーションの、同一スレッドによる実施は、キュー及びビットマップオペレーションが非スレッドセーフであることを可能にすることと、同一のプロセッサコアの内部にスケジューラデータ構造を維持することとによって、オペレーションの効率の向上を提供するように構成される。したがって、アクセスシリアル化のためのロッキングプリミティブ、又はロックなしアクセスのためのアトミックプリミティブを用いることを、回避することができる。
【００３５】
図３Ｃは、いくつかのパケット処理パイプライン機能ブロックを複数のプロセッサコアにマップする一例３３０を示す。この例において、パケット処理パイプライン機能ブロックは、図２の２つのプロセッサコア、例えば２２０ａ…２２０ｎにマップされる。この例において、パケットＲｘ３３３（例えば、パケットＩ／Ｏ  Ｒｘ及びパケットパース）と分類部３０４とを含むパケット受信機能ブロックが、第１のプロセッサコア３３２ａ（例えば、プロセッサコア２２０ａ）にマップされ、トラフィック管理３３４（例えば、廃棄部３１４及び階層スケジューラ３１６）とパケット送信機能（例えば、パケットＩ／Ｏ  Ｔｘ３１８）とが、第２のプロセッサコア３３２ｂ（例えば、プロセッサコア２２０ｂ）にマップされる。この例において、トラフィック管理３３４は、スケジューラエンキューモジュール、複数のキュー、及びスケジューラデキューモジュールを含む。
【００３６】
図３Ｄは、いくつかのパケット処理パイプライン機能ブロックを複数のプロセッサコアにマップする別の例３４０を示す。この例において、パケット処理機能ブロックは、３つのプロセッサコアにマップされる。この例において、パケットＲｘ３３３及び分類部３０４を含むパケット受信機能ブロックが、第１のプロセッサコア３３２ａ（例えば、プロセッサコア２２０ａ）にマップされ、トラフィック管理３３４機能が、第２のプロセッサコア３３２ｂ（例えば、プロセッサコア２２０ｂ）にマップされ、パケット送信機能が、第３のプロセッサコア３３２ｃ（例えば、プロセッサコア２２０ｎ）にマップされる。この例において、トラフィック管理３３４は、スケジューラエンキューモジュール、複数のキュー、及びスケジューラデキューモジュールを含む。例えば、コア３３２ａ、３３２ｂ、３３２ｃは、プロセッサ２１０に含まれることができ、したがってプロセッサコア２２０ａ…２２０ｎに対応することができる。
【００３７】
したがって、複数のトラフィックフローに関連付けられた複数のパケットを、ネットワーク装置２００が、１又は複数のパケット処理パイプライン、例えばパケット処理パイプライン３００を用いて処理することができる。パケット処理パイプライン３００の機能ブロックは、ネットワーク装置２００の１又は複数のプロセッサコア２２０ａ…２２０ｎ上の１又は複数のスレッドとして実施されることができる。パケット処理パイプライン機能ブロックを（１又は複数の）プロセッサコア２２０ａ…２２０ｎにマップすることは、構成可能とすることができ、各トラフィックフロー及び関連するアプリケーションに関連付けられた性能レベルと各機能ブロックに対して有効にされた特徴のセットとに少なくとも部分的に基づくことができる。例えば、いくつかの機能ブロックは、２つ以上のプロセッサコア２２０ａ…２２０ｎを消費することができる（例えば、各プロセッサコア２２０ａ…２２０ｎが、同一の機能ブロックの異なるインスタンスを、ただし異なる入力パケットに対して、実行するように構成される）。別の例において、複数の機能ブロックが、１つのプロセッサコア、例えばプロセッサコア２２０ａにマップされることができる。パイプライン化、複数のスレッドを利用する処理、及び複数のコアを利用する処理は、例えば６４K以上のパケットフローの処理を容易にする。
【００３８】
図４は、本開示の１つの実施形態と調和する一例示的なスケジューラモジュール４００を示す。スケジューラ４００は、図２のスケジューラモジュール２５３の１つの例である。スケジューラ４００は、例えば図３Ａ及び図３Ｂの階層スケジューラ３１６に対応する。スケジューラ４００は、エンキューモジュール４０２、複数のキュー４０４、及びデキューモジュール４０６を含む。エンキューモジュール４０２は、送信前に複数のパケットをエンキュー、すなわち一時的に格納するように構成される。エンキューモジュール４０２は、本明細書で説明されるように、送信前にパケットを格納するための複数のキュー４０４のうちのキューを選択するように構成される。デキューモジュール４０６は、送信用のネットワークインタフェース、例えばネットワークインタフェース２１６に対する供給のために、格納されたパケットを選択するように構成される。デキューモジュール４０６は、本明細書で説明されるように、複数の基準に少なくとも部分的に基づいて、次の送信用パケットを選択するように構成される。
【００３９】
スケジューラ４００は、各ネットワークノード、例えばネットワークノード１０５ａ…１０５ｎに関連付けられたサービスレベル合意（ＳＬＡ）によって指定されたポリシーに従って、複数のユーザ（例えば、クライアント）及び複数のトラフィッククラスからのパケットの送信を優先度付けするように構成される。スケジューラ４００は、比較的大きな（例えば、約数万又はこれを超える）数のトラフィックフローと関連するキューとを管理するように構成される。スケジューラ４００は、パケットを複数の階層レベルに論理的にグループ化し、ユーザ、トラフィッククラス、及び階層レベルに関連する基準に少なくとも部分的に基づいて、送信されるべき次パケットを選択するように構成される。スケジューラ４００はさらに、その選択処理において、本明細書で説明されるように、トラフィックシェーピング、絶対優先及び重み付きラウンドロビンのうち１又は複数を利用するように構成されることができる。
【００４０】
図５は、本開示の種々の実施形態と調和する一例示的なスケジューリング階層５００を示す。スケジューリング階層５００は、本明細書で説明されるように、トラフィックフローの論理的なグルーピングを表し、次の送信用パケットの選択を容易にするように構成される。論理的なグルーピングはさらに、複数のユーザに対して各トラフィッククラスについてのＳＬＡを満たすことを容易にするように構成される。論理的なグルーピングは、次の送信用パケットを選択するときに処理効率化を容易にすることに生かされ得るデータ構造において実施されることができる。
【００４１】
この例において、スケジューリング階層５００は、５つのレベル、すなわち、ポート、サブポート、パイプ、トラフィッククラス及びキューを含む。いくつかの実施形態において、スケジューリング階層は、より多くの又はより少ないレベルを含むことができる。各レベルのメンバの数は、例えば、関連付けられたネットワーク装置の能力、サービスプロバイダネットワークの特性、サービスレベル合意の要件、ネットワークノートの数などに依存してよい。例として、複数のポートを備えたネットワークインタフェースを含むネットワーク装置のスケジューラ、例えばスケジューラ２５３は、例えばポート２３５ａ…２３５ｎといったポートごとに１つの階層を備え、複数のスケジューリング階層を実施するように構成されることができる。例えばスケジューラ２５３といったスケジューラは、本明細書で説明されるように、キュー（例えば、約数万のキュー）をグループ化し、スケジューリング階層５００に従って１又は複数のパケットフロー（例えば、約数十万又はこれ以上のパケットフロー）を各キューに関連付け、そして、送信用のパケットを選択すること（すなわち、スケジュールすること）において上記グループと関連する基準とを利用するように構成される。
【００４２】
スケジューリング階層５００の第１のレベルが、ポート５０２である。ポート５０２は、ネットワークインタフェース２１６のポート、例えばポート２３５ａ…２３５ｎに対応する。例えば、ポート５０２は、およそギガビット毎秒、例えば、1GbE（ギガビット毎秒イーサネット（登録商標））、10GbE及び／又は40GbEのビットレートを備えたイーサネット（登録商標）Ｔｘポートに対応することができる。スケジューラ２５３は、各ポートが同等の優先度を有するように、ラウンドロビン順序で複数のポートをスケジュールするように構成されることができる。
【００４３】
（１又は複数の）サブポート５０４ａ…５０４ｓが、スケジューリング階層５００の第２のレベルであり、１又は複数に対応する。ポートごとのサブポートの数は、例えば、ネットワークサービスプロバイダによって設定されることができる。例えば、ポートごとのサブポートの数は、８とすることができる。いくつかの実施形態において、各サブポートは、予め定められたユーザグループを表すことができる。複数のパイプ５０６ａ…５０６ｐが、スケジューリング階層５００の第３の階層である。サブポートごとのパイプの数は、例えば、ネットワークサービスプロバイダによって設定されることができる。例えば、サブポートごとのパイプの数は、４千とすることができる。サブポートごとのパイプの数は、一般に、約数千とすることができる。いくつかの実施形態において、パイプは、ユーザ、例えば加入者を表すことができる。
【００４４】
複数のトラフィッククラス５０８ａ…５０８ｄは、スケジューリング階層の第４のレベルである。トラフィッククラスの数は、典型的には２のべき乗であり、一般に比較的小さい。この例において、トラフィッククラスの数は４である。したがって、各パイプ、例えばパイプ５０６ａは、４つのトラフィッククラス、例えばトラフィッククラス５０８ａ…５０８ｄを含む。各トラフィッククラス５０８ａ…５０８ｄは、それぞれのトラフィックタイプ、例えば、音声、双方向ビデオ、非双方向ビデオ、データ転送（ファイル転送、アプリケーションダウンロード、電子メールトラフィック、ウェブブラウジングなど）に対応する。各トラフィッククラス５０８ａ…５０８ｄには、例えば、関連するＳＬＡ及び／又はＱｏＳ（クオリティオブサービス）仕様に関する送信パラメータを関連付けることができる。例えば、送信パラメータには、これらに限定されないが、関連する許容可能な損失レート、許容可能な遅延及び／又は許容可能なジッタの仕様を含むことができる。
【００４５】
スケジューリング階層５００の第５のレベルは、複数のキュー５１０ａ…５１０ｄ、５１２ａ…５１２ｄ、５１４ａ…５１４ｄ、５１６ａ…５１６ｄに対応する。この例において、パイプごとのキューの数は１６である。各トラフィッククラス、例えばトラフィッククラス５０８ａは、４つのキュー、例えば５１０ａ…５１０ｄを含む。各キュー５１０ａ…５１０ｄ、５１２ａ…５１２ｄ、５１４ａ…５１４ｄ、５１６ａ…５１６ｄは、同一ユーザに属する同一タイプの１又は複数の接続（すなわち、トラフィックフロー）からのパケットを記憶するように構成される。
【００４６】
スケジューラ２５３は、本明細書に説明されるように、サブポートごとの１つのトークンバケットとパイプごとの１つのトークンバケットを備えたトークンバケット手法を用いて、サブポート及びパイプレベルでトラフィックシェーピングを実施するように構成されることができる。それぞれの上限は、サブポートレベルにおいて及びパイプレベルにおいて、トラフィッククラスごとに強制されることができる。スケジューラ２５３はさらに、本明細書に説明されるように、より高い優先度のトラフィッククラスにより使用されていない可能性があるサブポート帯域及び／又はパイプ帯域を、より低い優先度のトラフィッククラスが再使用することを可能にするように構成されることができる。
【００４７】
スケジューラ２５３は、絶対優先順序で同一パイプのトラフィッククラスをスケジュールするように構成されることができる。サブポートトラフィッククラスが過剰加入される場合（例えば、構成タイムイベント）、パイプレベルトラフィッククラス上限は、このサブポートに関連付けられたすべてのパイプによって共有される、動的に調整される値に制限されることができる。スケジューラ２５３は、予め定められた重み付けに従う重み付きラウンドロビン（ＷＲＲ）を用いて同一のトラフィッククラスのキューをスケジュールするように構成されることができる。
【００４８】
図６は、本開示の種々の実施形態と調和する一例示的なスケジューラデータ構造６００を示す。スケジューラデータ構造６００は、スケジューリング階層５００に対応する。スケジューラ２５３は、各ポート、例えばポート２３５ａ…２３５ｎについて、それぞれのスケジューラデータ構造、例えばスケジューラデータ構造６００を実装するように構成されることができる。スケジューラデータ構造６００は、サブポートテーブル６０２、パイプテーブル６０４、キューテーブル６０６、キュー記憶領域６０８、アクティブキュービットマップ６１０、及びパイプグラインダアレイ６１２を含む。
【００４９】
サブポートテーブル６０２は、サブポート０…サブポートＳｎといった複数のサブポートテーブルエントリを含む。例えば、各サブポートエントリのサブポート０…サブポートＳｎは、６４バイトのサイズを有することができる。サブポートテーブルエントリの数は、ポートごとのサブポートの数に対応する。各サブポートテーブルエントリのサブポート０…サブポートＳｎは、例えばサブポート５０４ａ…５０４ｓといった各サブポートに関連付けられた持続性のサブポートデータ、例えばトークンバケットクレジットを記憶するように構成される。サブポートテーブル６０２は、例えばスケジューラ２５３によって、デキューオペレーションに関連付けられた読み出し及び／又は書き込みのためにアクセスされることができる。
【００５０】
パイプテーブル６０４は、パイプ０…パイプＰｎといった複数のパイプテーブルエントリを含む。例えば、各パイプエントリのパイプ０…パイプＰｎは、６４バイトのサイズを有することができる。パイプテーブルエントリの数は、ポートごとのパイプの数に対応する。各パイプテーブルエントリのパイプ０…パイプＰｎは、例えばトラフィッククラス５０８ａ…５０８ｄといったトラフィッククラスに関連する持続性のデータを含む、例えばパイプ５０６ａといった各パイプに関連付けられた持続性のデータと、パイプに関連付けられたキュー、例えばキュー５１０ａ…５１０ｄ、５１２ａ…５１２ｄ、５１４ａ…５１４ｄ、５１６ａ…５１６ｄとを、記憶するように構成される。例えば、この持続性のデータは、トークンバケットクレジットを含むことができる。パイプテーブルエントリのパイプ０…パイプＰｎは、本明細書に説明されるように、例えばランタイムの間に、更新されることができる。通常、ランタイムの間に変化せず、複数パイプによって共有され得るパイプ構成パラメータは、パイプテーブル６０４に含まれないことになる。こうしたパイプ構成パラメータは、本明細書に説明されるように、パイププロファイルテーブルに含まれることができる。パイプテーブル６０４は、例えばスケジューラ２５３によって、デキューオペレーションに関連付けられた読み出し及び／又は書き込みのためにアクセスされることができる。
【００５１】
キューテーブル６０６は、複数のキューエントリを含む。例えば、各キューエントリのキュー０…キューＱｎは、４バイトのサイズを有することができる。キューテーブルエントリの数は、ポートごとのキューの数に対応する。各キューテーブルエントリのキュー０…キューＱｎは、持続性のデータ、例えば読み出し及び／又は書き込みポインタを記憶するように構成される。各キューのキューサイズは、各トラフィッククラスに対して、すべてのキューについて、同一とすることができる。一貫したキューサイズが、キュー基底アドレスが効率的に決定されることを可能にするように構成され、したがって、キュー基底アドレスとキューサイズとがそれぞれのキューテーブルエントリに通常含まれないことがある。キューテーブル６０６は、例えばスケジューラ２５３によって、エンキュー及びデキューオペレーションに関連付けられた読み出し及び／又は書き込みのためにアクセスされることができる。それぞれのパイプに関連付けられたキューテーブルエントリは、通常、例えばプロセッサキャッシュ２２２ａの同一のキャッシュラインに記憶されることができる。
【００５２】
キュー記憶領域６０８は、キュー０…キューＱｎといった複数のキューを含む。キューのキュー０…キューＱｎの数は、ポートごとのキューの数に対応する。各キューのキュー０…キューＱｎは、複数のキュー要素を記憶するように構成されることができる。キュー要素の数は構成可能とすることができる。例えば、各キューのキュー０…キューＱｎは、６４個の８バイト要素を記憶するように構成されることができる。各８バイトキュー要素は、パケットディスクリプタのメモリアドレス（すなわち、mbufポインタ）に対応する。パケットディスクリプタ（すなわち、mbuf）は、各パケットのための、パケットに関連付けられたメタデータ（例えば、パケット長、バッファ内のデータの最初のバイトの場所など）を含む比較的小さいデータ構造（典型的には、６４バイト又はこれ未満）である。通常、mbufは、メモリバッファ内の特定のメモリ位置において、パケット本体（すなわち、ヘッダ及びペイロード）と共に同じメモリバッファ内に位置する。キュー記憶領域６０８は、例えばスケジューラ２５３によって、デキューオペレーションに関連付けられた読み出し及び／又はエンキューオペレーションに関連付けられた書き込みのためにアクセスされることができる。例えば、パケットエンキューは、mbufポインタがキューに書き込まれることに対応し、パケットデキューは、mbufポインタがキューから読み出されることに対応する。
【００５３】
アクティブキュービットマップ６１０は、キュー０…キューＱｎといったキューごとに１つのキューステータスビットを含むように構成される。ポートごとのキューステータスビットの数は、ポートごとのキューの数に対応する。例えば、図５のポートビットマップ５２４は、パイプ５０６ａに関連付けられたキュー５２０に対応するビットマップ部分５２２を含む。キューステータスビットは、キュー０…キューＱｎといったキューがアクティブである（すなわち、キューが空でない）か、あるいはキュー０…キューＱｎといったキューがアクティブでない（すなわち、キューが空である）かを示すように構成される。各キューステータスビットは、例えばスケジューラ２５３のエンキューオペレーション（すなわち、（１又は複数の）パケットがエンキューされる）によって設定され、スケジューラ２５３のデキューオペレーションによってそれぞれのキューが空になったときにリセットされる（すなわち、クリアされる）ことができる。オペレーションにおいて、ビットマップスキャンオペレーションが、次の空でないパイプとそのステータス（例えば、パイプ内の（１又は複数の）アクティブなキューの１６ビットマスク）とを返すように構成される。
【００５４】
パイプグラインダアレイ６１２は、パイプグラインダ０…パイプグラインダＧｎといった複数のパイプグラインダを含む。例えば、パイプグラインダアレイ６１２は、約１２８バイトのサイズを有することができる。パイプグラインダ０…パイプグラインダＧｎといったパイプグラインダの数は、構成可能とすることができる。例えば、パイプグラインダの数は、８とすることができる。パイプグラインダアレイ６１２は、現在処理されているアクティブなパイプのリストを記憶するように構成される。各パイプグラインダのパイプグラインダ０…パイプグラインダＧｎは、パイプ処理の間に一時的なデータを含む。現在のパイプが、パケット又はクレジットを使い尽くした場合、このパイプは、ビットマップ６１０からの別のアクティブなパイプで置換される。パイプグラインダアレイ６１２は、例えばスケジューラ２５３によって、デキューオペレーションに関連付けられた読み出し及び／又は書き込みのためにアクセスされることができる。
【００５５】
スケジューラモジュール２５３は、そのパケット処理オペレーション（すなわち、エンキュー及びデキューオペレーション）において、例えばスケジューリング階層５００といったスケジューリング階層と、例えばデータ構造６００といったデータ構造２４８とを、利用するように構成される。スケジューラモジュール２５３はさらに、複数のプロセッサコア２２０ａ…２２０ｎとネットワーク装置２００のマルチスレッディング能力とを生かして処理効率を向上させるように構成される。したがって、スケジューラ２５３は、ＳＬＡ義務を満たしながら数千のキューから次の送信用パケットを効率よく選択することができる。
【００５６】
図７は、本開示の一実施形態と調和する、複数のパケットをエンキューするように構成された例示的オペレーションのフローチャート７００を示す。このオペレーションは、例えば、スケジューラモジュール２５３によって実行されることができる。いくつかの実施形態において、例えば輻輳管理が実施されるとき、輻輳管理オペレーションは、例えば輻輳管理モジュール２５７によって実行されることができる。最初、１又は複数のパケットが、例えば、ワーカモジュール又は輻輳管理モジュールから受信されることができる。オペレーション７０２は、パケットディスクリプタ（mbuf）にアクセスすることと、データフィールドを読み出すこととを含むことができる。データフィールドを読み出して、各パケットについての宛先キューを特定することができる。データフィールドには、例えば、パケットタイプ、パケット長、データの始点へのポインタなどを含むことができる。例えば、データフィールドには、ポートと、サブポートと、トラフィッククラスと、トラフィッククラス識別子内のキューとを含むことができる。データフィールドは、パケットがスケジューラモジュール２５３によって受信される前に、分類段階、例えば分類部３０６によって決定されることができる。オペレーション７０４は、例えばキューテーブル６０６といったキュー構造にアクセスすることと、例えばキュー記憶領域６０８といったキューアレイ内の書き込み位置を特定することとを含むことができる。
【００５７】
特定されたキューがいっぱいであるかどうかを、オペレーション７０６において判定することができる。特定されたキューがいっぱいである場合、オペレーション７０８は、（１又は複数の）パケットを廃棄することを含むことができる。次いで、プログラムフローは、特定されたキューがいっぱいであるかどうかの判定に戻ることができる。特定されたキューから（１又は複数の）パケットがデキューされるまで、後続のパケットもまた廃棄されることができる。特定されたキューがいっぱいでなく、輻輳管理が有効にされている場合、オペレーション７１０において、特定されたキューの占有率が閾値を上回るかどうかを判定することができる。特定されたキューの占有率が閾値を上回る場合、オペレーション７１２において、パケットを廃棄するかどうかを、輻輳管理に少なくとも部分的に基づいて判定することができる。輻輳管理には、ランダム初期検知（ＲＥＤ）又は重み付きランダム初期検知（ＷＲＥＤ）を含むことができる。ＲＥＤ及び／又はＷＲＥＤは、キュー占有率とパケット優先度とを考慮して特定のパケットをエンキューするか又は廃棄するかを判定するように構成される。例として、例えば対象キューの占有率が比較的高いとき、より高い優先度のパケットが、より低い優先度のパケットよりもエンキューされる可能性が高くなり得る。ＲＥＤ及びＷＲＥＤは、無差別に（１又は複数の）パケットを廃棄することに比べて、パケットのエンキュー又は廃棄に関して、比較的よりインテリジェントな判断を提供するように構成される。（１又は複数の）パケットが廃棄されない場合、オペレーション７１４において、特定されたキューアレイ位置がアクセスされ、（１又は複数の）パケットが格納されることができる。例えば、（１又は複数の）パケットを格納することは、mbufポインタを書き込むことに対応することができる。プログラムフローは、オペレーション７１６において終了する。
【００５８】
（１又は複数の）現在のパケットをエンキューするためにアクセスされるデータ構造は、比較的高いレート（例えば、ギガビット毎秒）の入力パケットと比較的多数のキュー（例えば、数万）とのために、現在のコアのキャッシュ（例えば、コア２２０ａのキャッシュ２２２ａ）内に存在しない可能性がある。よって、エンキュー関連のメモリアクセスは、１又は複数のキャッシュミスと対応する性能劣化とをもたらす可能性がある。したがって、前もってデータ構造をプリフェッチすることが有益である場合がある。
【００５９】
図８は、プリフェッチすることを含むエンキューオペレーションのための一例示的なパイプライン化された実施例８００を示す。この例示的な実施例８００は、４つのパイプラインステージ、すなわち、mbufプリフェッチ８０２、キュープリフェッチ８０４、キュー内位置プリフェッチ８０６及びエンキュー８０８を含む。各ステージ８０２、８０４、８０６、８０８は、２つの異なる入力パケットに対して同時に実行されるように構成される。例えば、mbufプリフェッチ８０２は、パケット００及び０１に対して操作することができ、キュープリフェッチ８０４は、パケット１０及び１１に対して操作することができるなどする。各入力パケットは所与の時間における１つのパイプラインステージの一部とする（すなわち、１つのパイプラインステージによって操作される）ことができ、複数のパケットが同時に操作されることができる。プリフェッチオペレーションは、関連する実行レイテンシを有し、このレイテンシの間、プロセッサ２１０は現在プリフェッチ下にあるデータ構造へのアクセスを試みない可能性がある。プロセッサ２１０は、他のワークを実行する、例えば、エンキューシーケンスの種々のステージのオペレーションを他の入力パケットに対して実行するように構成されることができ、したがって、エンキューオペレーションに関してパイプライン化された実装をもたらすことができる。
【００６０】
このようにして、複数のパケットが、エンキューオペレーションの間に同時に操作されることができる。各入力パケットは、一度に２つ以上のパイプラインステージによって操作されなくてもよいが、複数のパケットが、任意の時点で複数のパイプラインステージによって操作されることができる。パイプライン構造は、プリフェッチレイテンシを「隠ぺいし」、これによりパケットエンキューオペレーションの性能を向上させるように構成される。
【００６１】
図９Ａ及び図９Ｂは、本開示の一実施形態と調和する、複数のパケットをデキューするように構成された例示的オペレーションのフローチャート９００、９５０を示す。このオペレーションは、例えば、スケジューラモジュール２５３によって実行されることができ、各ポート、例えばポート２３５ａに対して実行されることができる。フローチャート９５０は、本明細書で説明されるとおり、フローチャート９００の続きである。プログラムフローは、開始９０１から始まり得る。オペレーション９０２において、現在のポート内のいずれかのパイプがアクティブであるかどうかを判定することができる。例えば、設定され、パイプグラインダアレイ６１２にまだ含まれていない（１又は複数の）パイプに対応する任意のビットをアクティブキュービットマップ６１０が含むかどうかを、階層型スケジューラ２５３が判定することができる。現在のポートに関してアクティブなパイプが存在しない場合、プログラムフローはオペレーション９０２にとどまり得る。（１又は複数の）アクティブなパイプが存在する場合、オペレーション９０３は、現在のポートに対する次のアクティブなパイプの特定を含むことができる。例えば、次のアクティブなパイプは、例えばアクティブキュービットマップ６１０の、ビットマップスキャンオペレーションを用いて特定されることができる。ビットマップスキャンオペレーションは、次の空でないパイプ識別子と関連するステータス（すなわち、パイプ内のアクティブなキューの１６ビットマスク）とを返すように構成される。
【００６２】
オペレーション９０４は、次のアクティブなパイプデータをプリフェッチすることと、次のアクティブなパイプに関連付けられたキューポインタをプリフェッチすることとを含む。オペレーション９０６は、パイプグラインダの切り替えを含むことができる。例えば、オペレーション９０６は、本明細書で説明されるように、第１のパイプグラインダから第２のパイプグラインダへの切り替えを含むことができる。パイプグラインダの切り替えは、次のアクティブなパイプに関連付けられたオペレーションのプリフェッチを「隠ぺいする」ように構成される。換言すると、パイプグラインダの切り替えは、次のアクティブなパイプに関連付けられたプリフェッチするオペレーションが、現在のパイプに関連付けられたパケットデキューオペレーションと同時に生じることを可能にするように構成される。本明細書において、現在のパイプは、デキューオペレーションに関して現在選択されているパイプに対応し、次のアクティブなパイプは、デキューオペレーションに関して選択されることになる次のパイプに対応する。したがって、フローチャート９００、９５０を通じた現在のパスにおいてオペレーション９０３で特定される次のアクティブなパイプは、フローチャート９００、９５０のオペレーションを通じた次のパスにおける現在のパイプに対応し得る。
【００６３】
オペレーション９０８は、現在のパイプデータ構造の読み出しを含むことができる。オペレーション９１０は、現在のパイプとそのサブポートとに関するクレジットの更新を含むことができる。例えば、現在のパイプとそのサブポートに関するそれぞれのトラフィックシェーピングトークンバケットクレジットと、現在のパイプとそのサブポートとに関連付けられたそれぞれのトラフィッククラスクレジットとを、更新することができる。オペレーション９１２において、現在のパイプ内の次のアクティブなトラフィッククラスを特定することができる。オペレーション９１３は、現在のパイプ及び現在のトラフィッククラス（ＴＣ）内の次キューの選択を含むことができる。例えば、次キューは、重み付きラウンドロビン（ＷＲＲ）を用いて選択されることができる。オペレーション９１４は、現在のキューにおける次の位置（すなわち、キュー読み出しポインタにより指し示される位置）をプリフェッチすることを含む。現在のキューにおける次の位置のプリフェッチは、キュー要素を含むデータ構造（すなわち、キューアレイ）を（キュー読み出しポインタによって指し示される位置において）プリフェッチすることに対応する。オペレーション９０４において、キューポインタはプリフェッチされている。各キュー要素は、mbufポインタである。キュー読み出しポインタは、オペレーション９０４においてプリフェッチされたキューポインタに対応する。オペレーション９１５は、パイプグラインダの切り替えを含むことができる。
【００６４】
オペレーション９１６は、現在のキューから現在の要素（すなわち、mbufポインタ）を読み出すことと、そのパケットディスクリプタ（すなわち、mbuf）をプリフェッチすることとを含むことができる。オペレーション９１７は、パイプグラインダを切り替えることを含む。オペレーション９１８は、パケットディスクリプタからパケット長を読み出すことを含み得る。オペレーション９２０において、利用可能なトラフィックシェーピング（ＴＳ）トークンバケットクレジットと利用可能なトラフィッククラスクレジットとがパケットクレジット以上であるかどうかを、判定することができる。パケットクレジットは、パケット長（バイト単位）にフレームオーバヘッド（バイト単位）を加えたものに対応する。それぞれのトラフィックシェーピングトークンバケットクレジットは、本明細書に説明されるように、サブポートごと及びパイプごとに提供されることができ、トラフィックシェーピングに関して利用されることができる。それぞれのトラフィッククラスクレジットは、本明細書に説明されるように、サブポートごとに及びパイプごとに提供されることができ、各トラフィッククラスに関して、サブポートレベルにおいて及びパイプレベルにおいて上限を実装するために利用されることができる。利用可能なトークンバケットクレジットと利用可能なＴＣクレジットとがパケットクレジット以上でない場合、プログラムフローはオペレーション９３２に進むことができる。
【００６５】
利用可能なトラフィックシェーピングトークンバケットクレジットと利用可能なＴＣクレジットとがパケットクレジット以上である場合、オペレーション９２２において、現在のパケットを送信用にスケジュールすることができる。オペレーション９２４において、（１又は複数の）クレジットを減算することができ、重み付きラウンドロビン（ＷＲＲ）キュートークン加算器を更新することができる。例えば、クレジットは、選択されたパイプと関連するサブポートとに関するトークンバケットから減算されることができ、（１又は複数の）クレジットは、選択されたトラフィッククラスに関するパイプ及びサブポートレベルでクレジットカウンタから減算されることができる。減算されるクレジット数は、送信されるバイト数（すなわち、パケットクレジット）に対応する。キュートークン加算器は、パケット長に対応する量（例えば、バイト単位）ずつインクリメントされることができる。オペレーション９２６において、現在のパイプ及び現在のトラフィッククラス内の次キューを、選択することができる。
【００６６】
オペレーション９３０において、現在のトラフィッククラスがアクティブであるかどうかを判定することができる。現在のトラフィッククラスがアクティブである場合、プログラムフローはオペレーション９１６に戻ることができ、現在のキューから現在の要素を読み出し、そのパケットディスクリプタをプリフェッチすることになる。現在のトラフィッククラスがアクティブでない場合、オペレーション９３２において、現在のパイプにおけるいずれかの次トラフィッククラスがアクティブであるかどうかを判定することができる。現在のパイプにおける次トラフィッククラスがアクティブである場合、プログラムフローはオペレーション９１２に戻ることができ、現在のパイプ内の次トラフィッククラスを特定することになる。現在のパイプにおいてアクティブである次トラフィッククラスが存在しない場合、プログラムフローはオペレーション９０２に戻ることができ、現在のポートに関していずれかのパイプがアクティブかどうかを判定することになる。
【００６７】
次トラフィッククラスがアクティブであるかどうかを判定するオペレーション９３２は、現在のパイプにおいてすでに扱われているトラフィッククラスに戻ることを回避するように構成される。例えば、トラフィッククラスは、次のアクティブなトラフィッククラスが例えばオペレーション９１２において特定されたとき、非アクティブである可能性がある。別の例において、トラフィッククラスは、アクティブである可能性があり、しかし十分なトラフィックシェーピングトークンバケットクレジット及び／又はトラフィッククラスクレジットを欠いていることがある。
【００６８】
キャッシュミスを回避するために、フローチャート９００のオペレーション、例えばオペレーション９０４は、アクセスされる前にデータ構造（例えば、パイプ、キュー、キューアレイ、mbuf）をプリフェッチするように構成される。プリフェッチオペレーションのレイテンシは、プリフェッチが現在のパイプに関して発行された直後に、例えばパイプグラインダ１内の現在のパイプから例えばパイプグラインダ２内の別のパイプ（すなわち、次のアクティブなパイプ）に切り替えることによって「隠ぺいされる」ことができる。したがって、現在のパイプのプリフェッチオペレーションは、実行制御がパイプグラインダ１内のこのパイプに切り替わって戻る前に、完了することができる。
【００６９】
フローチャート９００、９５０のオペレーションは、データキャッシュにおけるデータの存在を生かすように構成される。例えば、スケジューラモジュール２５３は、同一のパイプから次のアクティブなトラフィッククラスへ（もしあれば）、又は別のアクティブなパイプへ移動する前に、（最大で利用可能なパケット及びクレジットまで）可能な限り多くのパケットを同一のパイプトラフィッククラス及びパイプからスケジュールするように構成されることができる。
【００７０】
図１０は、本開示の一実施形態と調和する一例示的なデキューオペレーション１０００を示す。この例示的なデキューオペレーション１０００は、階層型スケジューラデータ構造、例えばデータ構造６００を利用するように構成される。パイプグラインダ１００２ａ…１００２ｄが、サブポートテーブル１００４、パイププロファイルテーブル１００６、パイプテーブル１００８、キューテーブル及び／又はキュー記憶領域１０１２に結合されることができる。
【００７１】
パイププロファイルテーブルは、同一パイプのパケットに関して変化しないパイプ構成値を記憶するように構成される。こうしたパイプ構成値は、通常、ＳＬＡに関連し、例えば、時間、時間ごとのクレジットなどを含むことができる。したがって、パイププロファイルテーブル値は、ＳＬＡが変更された場合に変わる可能性があり、しかし通常は同一パイプのパケットに関して変化しない。例えば、電気通信ネットワークが、比較的少数（例えば、１０未満）のサービスクラスを用いて構成されることがある。それぞれのパイププロファイルが、各サービスクラスに対して作成されることがあり、多数（例えば、約数千）のパイプが、同一のサービスクラスを共有することがあり、ゆえに同一のパイププロファイル値を共有することがある。パイプテーブルエントリは、パケット単位ごとに変化するデータ（例えば、パイプトークンバケットカウンタ、トラフィッククラスごとの残存クレジット、ＷＲＲカウンタなど）を含み、したがってパイプテーブルエントリは、複数のパイプに関する比較的静的なデータがパイププロファイルテーブルに記憶されるため、サイズにおいて縮小されることができる。
【００７２】
パイプテーブルエントリの最小化は、パイプごとにプリフェッチされるデータの量を低減するように構成される。プリフェッチは、プロセッサ物理アーキテクチャに関連するキャッシュラインサイズ（例えば、６４バイト）ずつパイプデータをプリフェッチするように構成される。したがって、各パイプについて、階層型スケジューラは、同一パイプのすべての１６個のキューに関して、パイプテーブルエントリ構造及びキューポインタをプリフェッチするように構成される。そして、キューポインタは、第２のキャッシュラインに記憶されることができる。階層型スケジューラは、例えば図９のオペレーション９０４のように、同時に双方のプリフェッチを始めるように構成されることができる。
【００７３】
この例において、パイプグラインダアレイは、４つのアクティブなパイプに対応する４つのパイプグラインダ１００２ａ…１００２ｄを含む。アクティブなパイプは、ビットマップ１０１４によって示される。階層型スケジューラ、例えばスケジューラ２５３は、パイプグラインダ１００２ａ…１００２ｄの各々を選択して、出力ポート１０１８による送信用のパケット１０１６、例えば出力パケット１０２０のスケジューリングを管理するように構成される。パイプグラインダ１００２ａ…１００２ｄに関連付けられた複数のアクティブなパイプを利用してパイプライン化を容易にすることができる。複数のパイプグラインダ１００２ａ…１００２ｄは、複数のパイプを同時に処理するように構成される。
【００７４】
例えば、キャッシュミスを回避するために、データ構造（例えば、パイプ、キュー、キューアレイ、mbuf）は、アクセスされる前にプリフェッチされることができる。プリフェッチオペレーションのレイテンシは、プリフェッチが現在のパイプに関して発行された直後に、（例えば、グラインダ１００２ｂ内の）現在のパイプから（例えば、グラインダ１００２ｃ内の）別のパイプに切り替えることによって「隠ぺいされる」ことができる。このことは、プリフェッチオペレーションのための十分な時間を提供して、実行制御が（パイプグラインダ１００２ｂ内の）このパイプに切り替わって戻る前に完了することができるように構成される。
【００７５】
図１１は、本開示と調和するパイププリフェッチステートマシンの一例１１００を示す。この例示的なパイププリフェッチステートマシン１１００は、トークンバケットクレジットが利用可能であり、パイプレベル及びサブポートレベルのトラフィッククラス上限を超えない限り、例えば同一のトラフィッククラスからパケットを順番にスケジューリングすることによって、データ局所性を生かすように構成される。ステートマシン１１００に関連付けられたステートには、開始１１０２、パイププリフェッチ１１０４、トラフィッククラスキューアレイプリフェッチ１１０６、mbufプリフェッチ１１０８及びmbuf読み出し１１１０を含む。ステートマシン１１００は、通常、順番に、開始１１０２から、パイププリフェッチ１１０４へ進み、トラフィッククラスキューアレイプリフェッチ１１０６へ進み、mbufプリフェッチ１１０８へ進み、mbuf読み出し１１１０へ進むように構成される。現在の状態がパイププリフェッチ１１０４であり、かつ、アクティブなパイプが存在しない、すなわち少なくとも１つのアクティブなキューを有するパイプが存在しない場合、ステートマシン１１００は、パイププリフェッチ１１０４状態に留まるように構成される。
【００７６】
現在の状態がmbuf読み出し１１１０である場合、ステートマシン１１００は、パイプに関連付けられた同一のトラフィッククラスがアクティブなキュー（及び利用可能なクレジット）を有する限り、mbuf読み出し１１１０状態に留まるように構成される。例えば、mbuf（及び関連する第１のパケット）に関連付けられた（１又は複数の）パケットクレジットが、利用可能なトークンバケットクレジット及びＴＣクレジット以下である場合、第１のパケットは、本明細書に説明されるように、送信用にスケジュールされることができる。この例を続けると、第１のパケットと同一のトラフィッククラス及び同一のパイプの中の（１又は複数の）追加的なパケットがスケジューリングを待つ場合、状態遷移は「同一のＴＣ」であり、次の状態はmbuf読み出しに対応する。
【００７７】
ステートマシン１１００は、次のアクティブなトラフィッククラスが現在のアクティブなトラフィッククラスと同一のパイプ内にある場合、mbuf読み出し状態１１１０からmbufプリフェッチ状態１１０８に遷移するように構成される。例えば、mbuf読み出し１１１０からmbufプリフェッチ１１０８への遷移は、第１のパケットのパケットクレジットが利用可能なクレジットを超えるか、あるいは同一のトラフィッククラス内にスケジューリングを待っている（１又は複数の）追加のパケットが存在せず、さらに、同一のパイプ内のあるトラフィッククラスが（１又は複数の）アクティブなキューを有する場合に、生じ得る。
【００７８】
ステートマシン１１００は、次のアクティブなキューが次のアクティブなパイプ内にある場合、mbuf読み出し状態１１００からトラフィッククラスキューアレイプリフェッチ状態１１０６に遷移する（「次のアクティブなパイプ」）ように構成される。例えば、mbuf読み出し１１１０からＴＣキューアレイプリフェッチ１１０６への遷移は、第１のパケットのパケットクレジットが利用可能なクレジットを超えるか、あるいは同一のトラフィッククラス内にスケジューリングを待っている（１又は複数の）追加のパケットが存在せず、さらに、同一パイプ内に（１又は複数の）アクティブなキューを有するトラフィッククラスが無い場合に、生じ得る。ステートマシン１１００は、アクティブなパイプが存在しない場合、mbuf読み出し状態１１１０からパイププリフェッチ状態１１０４に遷移する（「アクティブなパイプ無し」）ように構成される。
【００７９】
このようにして、例示的なパイププリフェッチステートマシン１１００は、同一パイプ内の別のトラフィッククラスに移動する前に、（クレジットが利用可能であり、上限を超えない限り、）同一パイプ内の同一トラフィッククラスからのパケットをスケジュールすることによって、データ局所性を生かすように構成される。例示的なパイププリフェッチステートマシン１１００はさらに、クレジットが利用可能であり、上限を超えない限り、同一パイプからパケットをスケジュールするように構成されることができる。例示的なパイププリフェッチステートマシン１１００は、パイプのパケットスケジューリングのシリアル化されたビューを提供する。複数のアクティブなパイプが、同時に処理されることができる。各プリフェッチオペレーションは、別のアクティブなパイプへの切り替えをトリガするように構成され、したがって、パケットスケジューリングオペレーションは、プリフェッチオペレーションが生じている間に続けることができる。このようにして、パケット処理（すなわち、スケジューリング）オペレーションは、複数のアクティブなパイプに間に合うように組み合わせられることができる。
【００８０】
したがって、パケットデキューオペレーションが、本明細書に説明されるように、スケジューリング階層とスケジューラデータ構造とを利用して、例えばスケジューラ２５３によって、実施されることができる。次のアクティブなパイプは、アクティブなキューとその関連する（１又は複数の）パイプとを特定するように構成された（例えば、アクティブキュービットマップ６１０の）ビットマップスキャンオペレーションを用いて特定されることができる。複数のアクティブなパイプが、パイプの並列処理を容易にするように構成されたパイプグラインダアレイに含まれることができ、したがってフェッチレイテンシを隠すことができ、ゆえにオペレーションの効率を向上させることができる。
【００８１】
図１２は、階層型スケジューラ及びネットワークインタフェースポートの相対的なタイミング及び同期の一例１２００を示す。各出力ポート、例えばポート２３５ａ…２３５ｎは、階層型スケジューラによって送信用のデータで満たされることになるバイトスロットのコンベヤーベルトとしてモデル化されることができる。例えば、10GbEの能力を有するポートは、階層型スケジューラが毎秒12.5億バイトスロットを利用可能であることに相当する。階層型スケジューラがスロットを満たすほど十分に高いレートでパケットをデキューすることができない場合、十分なパケット及びクレジットが存在すると仮定すると、いくつかのスロットが使用されないままとなり、帯域が無駄にされることになる。ポートを十分に利用するために、階層型スケジューラはバイトスロットをいっぱいのまま保持することが望ましい。例１２００は、１つのポートに関してタイミング及び同期を示すが、オペレーションにおいて、階層型スケジューラは、複数のポートに関して同時にパケットをスケジュールすることができる。例１２００は、ポート帯域が十分に利用される２つの時間間隔１２０２、１２０４と、階層型スケジューラがバイトスロットをいっぱいのまま保持することができていない２つの時間間隔１２０６、１２０８とを含む。
【００８２】
第１の時間間隔１２０２において、階層型スケジューラは、バイトスロットを満たすほど十分に速く、無駄にされているスロットはない。第２の時間間隔１２０４において、階層型スケジューラ処理は送信に先行し、階層型スケジューラは再び、バイトスロットを満たすほど十分に速い。第３の時間間隔１２０６において、階層型スケジューラレイテンシが、複数の空きバイトスロット１２１０をもたらし、したがって使用されない（すなわち、無駄な）帯域をもたらしている。第４の時間間隔１２０８において、階層型スケジューラ処理はポート送信部より遅く、いくつかのバイトスロット１２１２が空いており、したがって、利用可能な帯域が十分に利用されていない。
【００８３】
通常、階層型スケジューラ２５３のデキューオペレーションは、ネットワークインタフェース送信部（Ｔｘ）、例えばＴｘ２３６によってトリガされることができる。例えば、ネットワークインタフェースＴｘ入力キューの占有率は、監視されることができる。ネットワークインタフェースＴｘ入力キューの占有率が閾値の下に下がる場合、スケジューラは（例えば、割り込みベース又はポーリングベースで）通知されて、より多くのパケットをキューにプッシュする。
【００８４】
スケジューラ２５３は、クレジットロジックによって利用されることができる時間の進み（advancement）を監視するように構成される。クレジットロジックには、サブポート及びパイプトラフィックシェーピング、トラフィッククラス上限強制などを含むことができる。クレジットロジックは、時間、例えば最後の更新からの時間間隔の継続に、少なくとも部分的に基づいてクレジットを更新するように構成される。スケジューラが送信のためにネットワークインタフェース送信部にパケットを送出することを決定したとき、スケジューラは、それに応じてその内部の時間基準をインクリメントするように構成される。したがって、この内部の時間基準をバイト単位で保持することが便利である場合があり、ここで、バイトは、送信媒体上にバイトを送出するために物理インタフェース、例えばＰＨＹ２３３によって要求される時間間隔を表す。パケットが送信用にスケジュールされるとき、上記時間は(ｎ＋ｈ)でインクリメントされ、ここで、ｎはバイト単位のパケット長であり、ｈはパケットごとのフレーム化オーバヘッドバイト数である。
【００８５】
スケジューラ２５３は、その内部の時間基準を、送信されるパケットのレート、すなわちポートコンベヤベルトのペースに合わせるように構成されることができる。スケジューラ時間基準をネットワークインタフェース時間と合わせることは、スケジューラがネットワークインタフェース、例えばネットワークインタフェースＴｘ２３６に物理媒体の回線レートより多くのバイトを提供しないことを確かにするように、構成される。したがって、パケット廃棄（例えば、ネットワークインタフェースＴｘ２３６入力キューがいっぱいであることを理由としたスケジューラによるパケット廃棄、かつ／あるいは、内部的にネットワークインタフェースＴｘによるパケット廃棄）が回避されることができる。
【００８６】
スケジューラ２５３は、各デキュー呼び出しに応答して現在の時間を読み出すように構成される。現在のプロセッサ時間は、例えばコア２２０ａ及び／又はプロセッサ２１０に含まれるタイムスタンプカウンタ（ＴＳＣ）レジスタ又は高精度イベントタイマ（ＨＰＥＴ）レジスタ２２３のいずれかを読み出すことによって取得することができる。現在のプロセッサ時間（すなわち、ＣＰＵタイムスタンプ）は、time_bytes=time_cycles/cycles_per_byteで、プロセッサクロックサイクル数からバイト数に変換することができる。ここで、cycles_per_byteは、送信媒体における１バイトの送信時間と同等であるプロセッササイクルの量に対応する（例えば、2GHzのプロセッサ周波数と10GbEポートについて、cycles_per_byte=1.6である）。
【００８７】
スケジューラ２５３は、ネットワークインタフェース時間（「ＮＩＣ時間」）に関連する内部の時間基準を維持するように構成される。パケットがスケジュールされるとき、ＮＩＣ時間はパケットクレジットでインクリメントされる（すなわち、パケット長にフレーム化オーバヘッドをプラスしたもの）。各デキュー呼び出しを受けて、スケジューラ２５３は、その内部の基準２６２のＮＩＣ時間を、現在のプロセッサ時間すなわちプロセッサ時間２６３と比較するように構成される。ＮＩＣ時間２６２が未来である（ＮＩＣ時間＞＝現在のプロセッサ時間である）場合、ＮＩＣ時間は調整されなくてよい。このようにして、スケジューラ２５３は、ネットワークインタフェースが実際にパケットを必要とする前にこれらのパケットをスケジュールすることができる。換言すると、ネットワークインタフェースＴｘ２３６は、パケットを十分に供給される。他方、ＮＩＣ時間が過去である（ＮＩＣ時間＜現在のプロセッサ時間である）場合、ＮＩＣ時間２６２は、それ自体を現在のプロセッサ時間２６３に設定することによって調節されるべきである。このようにして、スケジューラ２５３は、ＮＩＣバイトコンベヤベルトの速度についていくことができない場合がある。換言すると、ネットワークインタフェースＴｘ２３６への不十分なパケット供給に起因して、帯域が未使用とされる（すなわち、無駄にされる）。
【００８８】
スケジューララウンドトリップ遅延（ＳＲＴＤ）が、スケジューラによる同一パイプの２つの連続した検査の間の時間（すなわち、プロセッササイクル数）に対応する。出力ポート２３５ａに遅れずについていくために（すなわち、利用可能な帯域の過少利用を回避するために）、スケジューラ２５３は、ｎ個のパケットがネットワークインタフェースＴｘ２３６により送信され得るより速くｎ個のパケットをスケジュールするように構成される。スケジューラは、本明細書で説明されたように、関連するパイプトークンバケットに関して構成されたとおり、過剰加入のポートがないと仮定して、各パイプのパケット送信レートに対応するレートでパケットをスケジュールするように構成される。したがって、パイプトークンバケットのサイズは、比較的長い期間のＳＲＴＤに起因するオーバーフローを回避するほど十分に高く設定されることができる。というのも、これがパイプに関するクレジットロスをもたらすことになる（ゆえに、帯域ロスをもたらすことになる）からである。
【００８９】
スケジューラ２５３は、第１の数のパケットフローに対応する複数のパケットを第２の数のキューにエンキューし、１又は複数のポート２３５ａ…２３５ｎを介した送信のために、格納されたパケットをデキューするように構成される。第１の数は、第２の数より大きいか又は等しい。スケジューラ２５３は、スケジューリング階層、例えばスケジューリング階層５００と、データ構造、例えばデータ構造６００と、スケジューリング判断を行うため、すなわちデキューする次パケットを選択するためのクレジットロジックとを利用するように構成される。
【００９０】
次パケットを(サブポートＳ，パイプＰ，トラフィッククラスＴＣ，キューＱ)から送信するためのスケジューリング判断は、下記の基準が満たされるときが有利となり得る（すなわち、パケットが送信される）。
１．サブポートＳのパイプＰが、ポートグラインダの１つによって現在選択されている；
２．トラフィッククラスＴＣが、パイプＰのうち最高の優先度のアクティブなトラフィッククラスである；
３．キューＱが、パイプＰのトラフィッククラスＴＣ内の、ＷＲＲ（重み付きラウンドロビン）により選択された次キューである；
４．サブポートＳが、パケットを送信するのに十分なクレジットを有する；
５．サブポートＳが、パケットを送信するのに十分な、トラフィッククラスＴＣのクレジットを有する；
６．パイプＰが、パケットを送信するのに十分なクレジットを有する；
７．パイプＰが、パケットを送信するのに十分な、トラフィッククラスＴＣのクレジットを有する。
【００９１】
上記基準が満たされる場合、スケジューラ２５３は、パケット送信を選択するように構成され、適切なクレジット（すなわち、トークン）が、例えば、サブポートＳ、サブポートＳのトラフィッククラスＴＣ、パイプＰ、パイプＰのトラフィッククラスＴＣに関連付けられたトークンバケットから、減算されることができる。
【００９２】
一実施形態において、クレジットの単位は、パケット長に関連付けられることができる。例えば、クレジットの単位は、１バイト、すなわち複数のパケット長に関する最大公約数に対応し得る。したがって、長さｎバイトのパケットの送信に利用されるクレジット数は、(ｎ＋ｈ)に等しく、ここで、ｈはパケットごとのフレーム化オーバヘッドバイト数に等しい。したがって、パケットクレジットは、パケット長に、パケットごとのフレーム化オーバヘッドバイト数を加えたものに相当する。例えば、イーサネット（登録商標）フレームに関連付けられたフレームオーバヘッドフィールドは、長さ７バイトのプリアンブル、長さ１バイトのスタートフレームデリミタ（ＳＦＤ）、長さ４バイトのフレームチェックシーケンス（ＦＣＳ）、及び長さ１２バイトのフレーム間ギャップ（ＩＦＧ）の、合計２４バイトを含む。フレームチェックシーケンス（ＦＣＳ）は、これ自体がmbufパケット長フィールドに含まれない場合、オーバヘッドであると見なされることがある。
【００９３】
一実施形態において、トラフィックシェーピングが、サブポート及び／又はパイプレベルで実施されることができる。例えば、スケジューラモジュール２５３が、トラフィックシェーピングを実施するように構成されることができる。トラフィックシェーピングは、レート制限の形態であり、このレート制限は、いくつかのパケットを遅延させて、例えばネットワーク装置２００からのパケットの送信のレートを制御する（すなわち、制限する）ことができる。遅延されたパケットは、例えば、キュー２５０に記憶される。サブポート及びパイプに対するトラフィックシェーピングは、サブポートごとのトラフィックシェーピング（ＴＳ）トークンバケットとパイプごとのＴＳトークンバケットとを用いて実施されることができる。各ＴＳトークンバケットは、例えば、利用可能なクレジット数のカウントを維持するように構成された飽和カウンタを用いて実装される。パケットは、ＴＳトークンバケット内のクレジット数がパケット内のバイト数にフレーム化オーバヘッドバイト数を加えた数以上である場合、送信されることができ、そうでなければ送信されることはできない。
【００９４】
トークンバケットは、２つのトークンバケットパラメータによって記述されることができる。第１のバケットパラメータbucket_rateは、バケットに対してクレジットを追加するレートに対応し、クレジット毎秒という単位を有する。第２のバケットパラメータbucket_sizeは、バケット内に記憶することができるクレジットの最大数に対応し、クレジットという単位を有する。トークンバケットは、バケットの容量を、予め定められた値、例えば、ゼロ又はbucket_sizeの半分に設定することによって初期化されることができる。バケットは、更新されることができ、例えば、クレジットが、少なくとも部分的にbucket_rateに基づいて、周期的にか必要に応じてかのいずれかで、現在バケット内にあるクレジットに追加されることができる。バケットレート（バイト毎秒単位）は、bucket_rate=(tb_credits_per_period/tb_period)*rで定めることができ、ここで、rは、本明細書において、ポート回線レート（バイト毎秒単位）である。バケット内のクレジットの合計数は、bucket_sizeを超えることができない。したがって、バケットがいっぱいである間、バケットへの追加に関して利用可能になる追加のクレジットは、廃棄される可能性がある。クレジットは、パケットスケジューリングに応答して消費することができる。パケットバイトにパケットのフレーム化オーバヘッドを加えた数に対応するクレジット数を、バケットから除去することができる。パケットは、完全なパケット（パケットバイトにパケットのフレーム化オーバヘッドを加えたもの）を送信するために十分なクレジットがバケット内にある場合に限り送信されることができる。
【００９５】
トークンバケットが、持続性のデータ構造を用いて実装されることができる。データ構造の要素は、図６のデータ構造６００に、例えばサブポートテーブル６０２及び／又はパイプテーブル６０４に、含まれることができる。この要素には、最後のクレジット更新の時間（tb_time）、バイト単位で測定された、許容可能なクレジット更新の間の時間間隔（tb_period）、バイト単位で測定された、tb_periodごとのクレジット許可（tb_credits_per_period）、バイト単位で測定されたバケットサイズ（tb_size）、及びバイト単位で測定された、現在バケット内にあるクレジット数（tb_credits）を含むことができる。本明細書で説明されたように、現在の時間がバイト単位で維持されるため、tb_timeはバイト単位で測定されてクレジット消費オペレーションを容易にすることができる。クレジット更新の間の実際の時間間隔は、１又は複数のtb_periodを含むことができる。そして、利用可能なクレジットの量は、実際の時間間隔の中のtb_periodの数にtb_credits_per_periodを乗算した数に相当し得る。
【００９６】
トークンバケットオペレーションは、通常、初期化、クレジット更新及びクレジット消費（例えば、パケットスケジューリングにおいて）を含むことができる。表１は、本開示と調和するＴＳトークンバケットオペレーションの一例を示す疑似コードを含む。timeは、本明細書において、バイト単位の現在のプロセッサ時間に対応する。n_periodsは、最後のクレジット更新以後の時間間隔内のtb_periodの数に対応する。
【００９７】
【表１】
2015019369.tif 000003
表１に示されるように、ＴＳトークンバケットは、ゼロ個のクレジットか、又はトークンバケット容量の半分に相当するクレジット数かのいずれかで、初期化されることができる。トークンバケットクレジット更新オペレーションは、デキューオペレーション、例えばフローチャート９００、９５０の間に生じ得る。例えば、クレジット更新オペレーションは、パイプが選択された（すなわち、パイプグラインダの１つによって選択された）とき、初期化されることができる。そして、クレジット更新オペレーションは、パイプとパイプに関連付けられたサブポートとのそれぞれのＴＳトークンバケットクレジットを更新するように構成される。パイプ及びサブポートのＴＳトークンバケットクレジットは、パイプが選択された後、パイプ及びサブポートのクレジットが（例えば、オペレーション９２２において）使用される前に、オペレーション９１０において更新される。
【００９８】
別の例において、クレジット更新オペレーションは、パケットが送信されるたびにトリガされることができる。そして、この例において、ＴＳトークンバケットクレジット更新オペレーションは、パケットに関連付けられたサブポート及びパイプのクレジットを更新するように構成されることができる。計算効率を犠牲にして、比較的高い精度を達成することができる。
【００９９】
一実施形態において、ＴＳトークンバケットクレジットは、少なくとも完全なtb_periodが最後の更新以後に経過した後、更新されることができる。この実施形態において、精度は、速度とトレードオフになり得る。最高精度は、tb_credits_per_period=1であるためのtb_periodの値を選択することによって達成されることができる。最高精度未満が受け入れ可能であるとき、向上された性能（すなわち、増加された速度）は、tb_credits_per_periodをより大きな値に設定することによって達成されることができる。
【０１００】
ＴＳトークンバケットクレジット消費オペレーションは、パケットスケジューリング（例えば、オペレーション９２２）の結果として（すなわち、応答として）、デキューオペレーション（例えば、オペレーション９２４）の間に実行されることができる。利用可能なＴＳトークンバケットクレジットの数（例えば、tb_credits）が、パケットクレジット（すなわち、パケット長にフレーム化オーバヘッドを加えた数）未満である場合、パケットは、送信用にスケジュールされなくてよい。利用可能なＴＳトークンバケットクレジットの数が、パケットクレジット以上である場合、送信がスケジュールされたときに、適切な数のクレジット（例えば、バイト単位のパケット長にフレーム化オーバヘッドを加えた数に相当する）を、ＴＳトークンバケットから除去することができる。
【０１０１】
したがって、サブポート及びパイプレベルでトラフィックシェーピングを提供するように構成されたクレジットロジックは、ＴＳトークンバケットを利用して実施されることができる。パケットレートに関連するＳＬＡ制約は、バケットパラメータ（例えば、bucket_rate及び／又はbucket_size）の選択によって実装されることができる。
【０１０２】
一実施形態において、選択されたパイプに関するトラフィッククラスが、絶対優先に従ってスケジュールされることができる。例えば、スケジューラ２５３は、絶対優先を実施するように構成されることができる。トラフィッククラスは、例えば、関連付けられたデータタイプの、遅延、ジッタ、順序が狂った配信などに対する感度によって特徴づけられることができる。例えば、音声データは遅延及び／又はジッタの影響を強く受ける可能性があり、一方、ファイル転送は最小限の影響を受け得る。したがって、４つのトラフィッククラス（ＴＣ０、ＴＣ１、ＴＣ２、ＴＣ３）を備えた実施形態について、音声データは、最高優先度のトラフィッククラス（ＴＣ０）に対応することができ、ベストエフォート型ファイル転送は、最低優先度のトラフィッククラス（ＴＣ３）に対応することができる。絶対優先スケジューリングは、したがって、昇順で、例えば、ＴＣ０を最初、ＴＣ３を最後として、トラフィッククラスを選択するように構成されることができる。このようにして、４つのトラフィッククラスとトラフィッククラスごとの４つのキューとを備えた構成について、キュー０…３は、ＴＣ０に関連付けられ、キュー４…７は、ＴＣ１に関連付けられることができるなどする。したがって、キュー０…３は、キュー４…７の前にスケジュールされることができ、キュー４…７は、キュー８…１１の前にスケジュールされることができるなどする。
【０１０３】
パイプ及びサブポートレベルにおけるトラフィッククラスは、トラフィックシェーピングされず、ゆえに、このコンテキストにおいてトークンバケットは維持されない。サブポート及びパイプレベルにおけるトラフィッククラスの上限パケット送信レートは、サブポートトラフィッククラスクレジットカウンタとパイプトラフィッククラスクレジットカウンタとを周期的に補充することによって強制されることができ、これらカウンタから、パケットがこのサブポートとこのサブポートに関連付けられたポートとに対してスケジュールされるたびに、クレジットが消費される。トラフィックシェーピングとは異なり、トラフィッククラス（ＴＣ）クレジットカウンタ更新は固定の間隔で実行され、ＴＣクレジット更新はＴＣクレジットカウンタを或る値に設定する。トラフィックシェーピングと同様に、（１又は複数の）ＴＣクレジットカウンタが、デキューオペレーションの間、例えば図９Ａのオペレーション９１０の間、更新されることができる。
【０１０４】
各ＴＣクレジットカウンタは、持続性のデータ構造を用いて実装されることができる。データ構造の要素には、tc_time、tc_period、tc_credits_per_period及びtc_creditsを含むことができる。tc_timeは、バイト単位で測定され、現在のサブポートと現在のサブポートに関連付けられた現在のパイプとのトラフィッククラス（ＴＣ）についての次の更新（すなわち、上限を実施するように構成された補充）の時間に対応する。tc_periodは、現在のサブポートと現在のパイプとのＴＣについての２つの連続した更新の間の時間に対応する。tc_periodは、通常、トークンバケットtb_periodの標準値より大きい。例えば、tc_periodは、tb_periodの数倍大きくてもよい。tc_credits_per_periodは、各強制期間tc_periodの間に現在のＴＣによって消費され得るＴＣクレジットの数への上限に対応する。tc_creditsは、現在の強制期間の残りについて、現在のトラフィッククラスにより消費され得るＴＣクレジットの数への現在の上限に対応する。
【０１０５】
サブポート／パイプトラフィッククラス上限強制オペレーションは、通常、初期化、ＴＣクレジット更新及びＴＣクレジット消費（例えば、パケットスケジューリングにおいて）を含むことができる。表２は、本開示と調和するサブポート／パイプトラフィッククラス上限強制オペレーションの一例を示す疑似コードを含む。
【０１０６】
【表２】
2015019369.tif 000004
パケットスケジューリングの結果として、選択されたトラフィッククラス上限は、バイト単位のパケット長及びヘッダ長に相当するＴＣクレジット数ずつ減らされることができる。パケットは、完全なパケットクレジット（パケットバイト及びパケットのフレーム化オーバヘッド）を送信するために、十分なＴＣクレジットがＴＣ制限（すなわち、ＴＣクレジットカウンタ）内で現在利用可能である場合、送信されることができる。
【０１０７】
したがって、トラフィックシェーピングが、ＴＳトークンバケットを用いてサブポート及びパイプレベルにおいて実施されることができ、上限が、ＴＣクレジットカウンタを用いてサブポート及びパイプレベルにおいて各トラフィッククラスに対して強制されることができる。パイプが、例えば図９Ａのオペレーション９１０において、例えばパイプグラインダによって選択されたとき、クレジットが、デキューオペレーションの間に更新される（すなわち、追加される）ことができる。そして、パケットが例えば図９Ｂのオペレーション９２４において送信のために選択される（すなわち、スケジュールされる）とき、クレジットが消費されることができる。
【０１０８】
一実施形態において、選択されたトラフィッククラス内のキューが、例えば図９Ａのオペレーション９１３において、ラウンドロビン手法に従ってスケジュールされることができる。例えば、スケジューラ２５３は、ラウンドロビン手法を実施するように構成されることができる。ラウンドロビンは、バイトレベルにおいて実施されることができ、パケット長関連バイトレベルにおいて実施されることができ、かつ／あるいは重み付けされることができる。バイトレベルラウンドロビンは、「公平キューイング」と呼ぶことができ、バイトレベル重み付きラウンドロビンは、「均等化キューイング」と呼ぶことができる。使用される手法は、選択されたトラフィッククラス内のキューの１又は複数の特性、例えば、選択されたトラフィッククラス内のすべてのキューがアクティブである（すなわち、空でない）かどうか、キューは同等に重み付けされることになるのかどうか、及び／又はすべてのパケットが同等である（すなわち、同等の長さを有する）のかどうかに、少なくとも部分的に基づく。
【０１０９】
選択されたトラフィッククラス内のすべてのキューがアクティブであり、同等に重み付けされることになり、かつ、すべてのパケットが長さにおいて同等である場合、キューは、バイトレベルラウンドロビンに従ってスケジュールされることができる。例えば、次キュー#iが、i=(i+1)%nに従って選択されることができる。ここで、キューインデクスがiであり、%はモジュロ整数剰余演算子であり、nはキューの数である。換言すると、４つのキューのシーケンスが、キュー#0、キュー#1、キュー#2、キュー#3、キュー#0などとして選択されることができる。
【０１１０】
選択されたトラフィッククラス内のすべてのキューがアクティブであり、同等に重み付けされることになり、しかし、すべてのパケットが長さにおいて同等ではない場合、キューは、パケット長関連バイトレベルラウンドロビンに従ってスケジュールされることができる。この場合、キュー#iから１バイトを消費することは、キュー#iに対するちょうど１つのトークンを消費することに対応する。これまでにキュー#iから消費されたトークンの累算された数T(i)が、維持されることができる。パケットがキュー#iから消費されるたび、T(i)は、T(i)+=pkt_lenで更新される。換言すると、バイト単位の消費されたパケットの長さが、T(i)に加算される。そして、次キューが選択されることができる。選択される次キューは、最小のT値を有するキューである。
【０１１１】
選択されたトラフィッククラス内のすべてのキューがアクティブであり、しかし、すべてのキューが同等に重み付けされるものではなく、すべてのパケットが長さにおいて同等ではない場合、キューは、パケット長関連バイトレベル重み付きラウンドロビンに従ってスケジュールされることができる。パケット長関連バイトレベル重み付きラウンドロビンは、各キューに対して異なるバイトごとのコストを利用することによって、パケット長関連バイトレベルラウンドロビンに対応するように作成されることができる。より低い重み付けを有するキューは、より高いバイトごとのコストを有する。この方法において、次キューを選択するために種々のキューの間で消費を比較することを、容易に行うことができる。例えば、w(i)が、キュー#iの重み付けとして定められることができ、t(i)が、キュー#iのバイトごとのトークンとして定められることができ、キュー#iの重み付けの逆と同等にすることができる。例えば、４つのキュー（すなわち、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]である。２つ目の例において、逆の重み付けは、結果として生じるトークンが整数であるように調整されている。キュー#iから１バイトを消費することは、キュー#iのトークンt(i)を消費することに対応する。T(i)は、これまでにキュー#iから消費されたトークンの累算された数である。パケットがキュー#iから消費されるたびに、T(i)は、T(i)+=pkt_len*t(i)として更新される。換言すると、パケット長とバイトごとのトークン数との積が、累算されたトークン数に加算される。そして、選択される次キューは、最小のT値を有するキューとすることができる。
【０１１２】
選択されたトラフィッククラス内のすべてのキューがアクティブでなく、すべてのキューが同等に重み付けされるものではなく、すべてのパケットが長さにおいて同等ではない場合、キューは、可変キューステータスを用いたパケット長関連バイトレベル重み付きラウンドロビンに従ってスケジュールされることができる。可変キューステータスを用いたパケット長関連バイトレベル重み付きラウンドロビンは、非アクティブなキューの消費に大きい数を設定することによって、パケット長関連バイトレベル重み付きラウンドロビンに対応するように作成されることができ、したがって、非アクティブなキューは、最小のTロジックによって選択されないことになる。
【０１１３】
T（すなわち、キューに対する累算されたトークン数）が連続的な累算の結果としてオーバーフローすることを防ぐために、T(i)は、すべてのキューに対する各パケット消費の後、切り詰められることができる。例えば、T[0..3]=[1000,1100,1200,1300]は、最小のT（例えば、1000）をT(i)、ただしi=0..n、から減算することによって、T[0..3]=[0,100,200,300]に切り詰められることができる。
【０１１４】
可変キューステータスを用いたパケット長関連バイトレベル重み付きラウンドロビンは、少なくとも１つのアクティブなキューが入力キューのセット内にあることを仮定する。この仮定は、デキューステートマシンがアクティブなキューを選択するように構成されるため、通常満たされる。キュー#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)としてビット単位ＯＲされ、値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ロジックによって選択されないことになる。
【０１１５】
このようにして、ラウンドロビンは、次キューを選択するために利用されることができる。ラウンドロビンは、重み付けされることができ、バイトレベルにおいて及び／又はパケット長関連バイトレベルにおいて実施されることができる。ラウンドロビンは、非アクティブなキュー、少なくとも１つのキューについての同等でない重み付け、及び／又は同等でない長さのパケットを適応させるように構成されることができる。累算されたトークン数T(i)は、パケットスケジューリング（例えば、オペレーション９２２）に応答して、デキューオペレーション（例えば、オペレーション９２４）の間に更新されることができる。
【０１１６】
いくつかの状況において、サブポートトラフィッククラス、例えばトラフィッククラスＸが、親サブポートレベルにおいてトラフィッククラスＸに割り当てられている帯域より多くの帯域がサブポートメンバパイプのレベルにおいてトラフィッククラスＸに割り当てられることによって、過剰加入される可能性がある。サブポートトラフィッククラス過剰加入は、より高い優先度のトラフィッククラスにより使用されない帯域が、（１又は複数の）より低い優先度のトラフィッククラスによって使用される（すなわち、共有される）ことを可能にし得る。サブポートトラフィッククラス過剰加入は、構成時に、選択されたトラフィッククラスに対して有効にされることができ、通常、最低優先度のトラフィッククラス（例えば、ベストエフォート型トラフィック）に対して有効にされる。特定のサブポート及びトラフィッククラスについての過剰加入の存在は、（輻輳がそうであるように）実行時にトラフィック負荷の動的な発生に起因して生じることとは対照的に、パイプ及びサブポートレベル構成の結果である。オペレーションにおいて、現在のサブポートについて、トラフィッククラスＸの全体需要が低い（すなわち、サブポートレベルにおいてトラフィッククラスＸへの割り当てがより少ない）とき、トラフィッククラスＸの需要は、すべてのメンバパイプについて完全に満たされることができる。しかしながら、すべてのサブポートメンバパイプについての集約されたトラフィッククラスＸの需要が、サブポートレベルにおいて構成される制限を超えるとき、この需要はすべてのパイプについて満たされない可能性がある。
【０１１７】
一実施形態において、本開示と調和するシステム及び方法が、サブポートトラフィッククラス過剰加入を動的に管理するように構成される。例えば、スケジューラモジュール２５３は、サブポートトラフィッククラス過剰加入を管理するように構成されることができる。この実施形態において、各サブポートメンバパイプは、サブポートレベルでのトラフィッククラスＸに対する実行時の利用可能な帯域のうち同等な共有分を割り当てられることができる。そして、比較的低需要のパイプによって使用されない帯域は、同等な割り当てで、比較的高需要のパイプに再分配されることができる。この方法において、より高需要のパイプのトラフィッククラスＸに属するパケットは制限される可能性があり、一方、より低需要のパイプのトラフィッククラスＸに属するパケットは影響を受けない。さらに、利用可能な帯域は、共有されることができ、したがってより十分に利用されることができる。
【０１１８】
サブポートトラフィッククラス過剰加入管理は、基準値（water  mark）（すなわち、閾値）を定め、サブポートメンバパイプにより経験される現在の需要に少なくとも部分的に基づいて基準値を周期的に更新するように、構成される。基準値を利用して、各パイプがトラフィッククラスＸに関して送信することが認められるトラフィックの量を制限することができる。例えば、トラフィッククラスＸは、４つの（すなわち、ＴＣ０、ＴＣ１、ＴＣ２、ＴＣ３）トラフィッククラス構成について、トラフィッククラスＴＣ３（例えば、ベストエフォート）に対応することができる。この実施形態において、サブポートＴＣ３に対する上限（例えば、tc_credits）は、サブポートレートの１００％に設定され、パイプＴＣ３に対する上限（例えば、tc_credits）は、すべてのサブポートメンバパイプについてパイプレートの１００％に設定される。
【０１１９】
基準値は、各トラフィッククラス上限強制期間の始めにおいてサブポートレベルで定められることができる。そして、基準値は、すべてのサブポートメンバパイプに伝搬されることができ、現在の強制期間にわたってすべてのサブポートメンバパイプによって利用されることができる。表３は、基準値伝搬の１つの例を示す。
【０１２０】
【表３】
2015019369.tif 000005
（前の強制期間の終わりと一致する）現在の強制期間の始めにおいて、基準値の値は、前の期間の終わりにサブポートメンバパイプによって使用されないままであった、前の期間の始めにＴＣ３に割り当てられた帯域の量に少なくとも部分的に基づいて、調整されることができる。
【０１２１】
サブポートＴＣ３帯域が使用されないままであった場合、現在の期間に対する基準値の値を増加させて、サブポートメンバパイプを助長して、より多くの帯域を消費することができる。そうでなければ、基準値の値を減少させて、ＴＣ３に関するサブポートメンバパイプの間の帯域消費の平等性を強制することができる。
【０１２２】
基準値の増加又は減少は、比較的小さい増分において実行されることができ、したがって、多くの強制期間において平衡状態が達成されることができる。この状態は、ＴＣ３に関するサブポートメンバパイプによって経験される需要の変化に起因して、例えば、需要増加（基準値が下げられるべきであるとき）又は需要減少（基準値が増やされるべきであるとき）の結果として、いつでも変化する可能性がある。
【０１２３】
需要が低いとき、基準値は、比較的高く設定されることができ、したがって、基準値は、サブポートメンバパイプがより多くの帯域を消費すること妨げない。基準値についての最高値は、サブポートメンバパイプに関して構成される最高レートとして選択されることができる。表４は、基準値オペレーションを示す疑似コードの１つの例を含む。
【０１２４】
【表４】
2015019369.tif 000006
このようにして、サブポートトラフィッククラス過剰加入が管理されることができ、使用されていない帯域がより低い優先度のトラフィッククラスによって共有されることができる。利用可能な帯域は、ゆえに、より十分に利用されることができる。
【０１２５】
したがって、スケジューラモジュール、例えばスケジューラ２５３は、ネットワーク装置のトラフィック管理を実施するように構成される。スケジューラは、例えば約数万以上のトラフィックフローに関連付けられたパケットを格納するように構成された約数万のキューを含むことができる。換言すると、複数のフローが一キューにマップされることができ、したがって、トラフィックフローの数はキューの数以上となり得る。スケジューラは、本明細書で説明されるように、スケジューリング階層と関連するデータ構造とを利用してトラフィック管理オペレーションをサポートするように構成される。
【０１２６】
一実施形態において、ネットワーク装置２００（例えば、ポリサモジュール２４７）は、トラフィックポリシングを実施するように構成されることができる。トラフィックポリシングは、通常、例えばＳＬＡにおいて指定され得る（１又は複数の）レートにトラフィックフローを制限するように構成される。ポリシングには、ネットワーク装置２００が受信したパケットの計量、マーキング及び／又は廃棄を含むことができる。ポリシングは、シングルレート３カラーマーキング（ｓｒＴＣＭ）及び／又は２レート３カラーマーキング（ｔｒＴＣＭ）を含むことができ、これらは双方とも１９９９年９月にインターネットエンジニアリングタスクフォース（ＩＥＴＦ）によって発行されたA  Single  Rate  Three  Color  Markerと題されたリクエストフォーコメント（ＲＦＣ）２６９７及び／又はA  Two  Rate  Three  Color  Markerと題されたＲＦＣ２６９８に対して準拠し、あるいは互換性を有する。計量は、受信されたパケットが１又は複数のフローレート制限の範囲内であるかどうかを判定するように構成され、マーキング（例えば、受信されたパケットを緑、黄又は赤でタグ付けすること）は、計量の結果を示すように構成される。
【０１２７】
ポリサモジュール２４７は、計量のために使用され得る１又は複数のトークンバケットを実施するように構成される。（１又は複数の）トークンバケットは、比較的低帯域のトラフィックフロー（例えば、約数十メガビット毎秒の回線レート）について、及び比較的高帯域のトラフィックフロー（例えば、約数ギガビット毎秒、数十ギガビット毎秒又はこれ以上）について、比較的高い精度（例えば、１％付近）を提供するように構成される。いくつかの実施形態において、本明細書に説明されるように、精度が構成可能である。トークンバケットは、割り込みモードではなくポーリングモードを用いて実施されることができ、高精度タイマではなくタイムスタンプレジスタ、例えばタイムスタンプレジスタ２２３を利用して構成される。トークンバケットは、トークンバケット更新に関する厳しい期限なしに（例えば、性能に影響を与え得る周期タイマコールバックを用いることなしに）実施されることができる。
【０１２８】
一般に、ｓｒＴＣＭ手法は、各トラフィックフローについて、（「コミット済み」及び「超過」とラベル付けされた）２つのトークンバケットを定義し、この２つのバケットは同一のトークン更新レートを共有する。コミット済みバケットは、（ＩＰ（インターネットプロトコル）パケットバイト毎秒で測定された）コミット済み情報レート（ＣＩＲ）パラメータによって定義されたレートでトークンを供給されることができる。コミット済みバケットのサイズは、（バイト単位で測定された）コミット済みバーストサイズ（ＣＢＳ）パラメータによって定義される。超過バケットは、コミット済みバケットと同一レートでトークンを供給されることができる。超過バケットのサイズは、（バイト単位で測定された）超過バーストサイズ（ＥＢＳ）パラメータによって定義される。
【０１２９】
一般に、ｔｒＴＣＭ手法は、各トラフィックフローについて２つのトークンバケットを定義し、（「コミット済み」及び「ピーク」とラベル付けされた）この２つのバケットは、独立したレートでトークンを更新される。ｓｒＴＣＭ手法と同様に、コミット済みバケットは、ＣＩＲパラメータによって定義されるレートでトークンを供給されることができ、コミット済みバケットのサイズは（バイト単位で測定された）ＣＢＳパラメータによって定義される。ピークバケットは、（ＩＰパケットバイト毎秒で測定された）ピーク情報レート（ＰＩＲ）によって定義されたレートでトークンを供給されることができる。Ｐバケットのサイズは、（バイト単位で測定された）ピークバーストサイズ（ＰＢＳ）パラメータによって定義される。
【０１３０】
ｓｒＴＣＭとｔｒＴＣＭとの双方について、カラーブラインドモードは、入力カラーが緑で設定されたカラー認識モードと機能的に同等である。カラー認識モードについて、赤の入力カラーマーキングを有するパケットは、赤の出力カラーでのみマーク付けされることができ、一方、黄の入力カラーでマーク付けされたパケットは、黄又は赤の出力カラーでのみマーク付けされることができる。カラーブラインドモードはカラー認識モードより計算的に集中しないため、適切である場合、カラーブラインドモードはカラー認識モードとは区別して実施されることができる。
【０１３１】
各入力パケットについて、ｓｒＴＣＭ及び／又はｔｒＴＣＭ手法のオペレーションは、コミット済みトークンバケットと（ｓｒＴＣＭ用の）超過トークンバケット又は（ｔｒＴＣＭ用の）ピークトークンバケットとの更新を含む。例えば、現在の時間は、プロセッサタイムスタンプレジスタから読み出されることができ、最後のバケット更新からの時間の量が特定されることができ、（予め構成されたバケットレートに従った）関連するトークンの数が計算されることができる。バケット内のトークンの数は、予め構成されたバケットサイズによって制限される。現在のパケットの出力カラーが、ＩＰパケットのサイズと、コミット済みバケットと超過（ｓｒＴＣＭ）バケット又はピーク（ｔｒＴＣＭ）バケットとにおける現在利用可能なトークンの量とに基づいて、特定されることができる。カラー認識モードについて、パケットの入力カラーもまた（もしあれば）考慮されることができる。出力カラーが赤でないとき、ＩＰパケットの長さに等しいトークンの数が、この手法とパケットの出力カラーとに依存して、コミット済み及び／又は超過（ｓｒＴＣＭ）から、あるいはコミット済み及び／又はピーク（ｔｃＴＣＭ）から、減算される。
【０１３２】
本開示と調和するポリシングのためのトークンバケットは、複数の入力パラメータを利用するように構成される。この入力パラメータには、１秒あたりのプロセッササイクル（すなわち、プロセッサ周波数）のＨＺと、現在の時間に対応するtimeと、（バイト毎秒における）トラフィックフローレートに対応するtb_rateとを含む。timeは、プロセッサタイムスタンプカウンタ（例えば、タイムスタンプレジスタ２２３）を読み出すことから取得することができ、したがって、プロセッササイクルで測定される。
【０１３３】
（１又は複数の）トークンバケットは、トラフィックフローごとの持続性のデータ構造を利用することができる。このデータ構造には、例えば、tb_time、tb_tokens、tb_size、tb_period及びtb_tokens_per_periodを含むことができる。tb_timeは、トークンバケットの最新の更新の時間に対応する。tb_tokensは、トークンバケットにおける現在利用可能なトークンの数に対応する。通常、１つのトークンが、パケットデータの１バイトに相当する。tb_sizeは、トークンバケットの上限である。tb_periodは、計量トークンバケット更新期間、すなわち、各バケット更新について経過し得るプロセッササイクル数に対応する。tb_tokens_per_periodは、各更新においてトークンバケットに追加するトークンの数に対応する。tb_period及びtb_tokens_per_periodを利用して、比較的低帯域のトラフィックフローについて、及び比較的高帯域のトラフィックフローについて、比較的高い精度（例えば、約１％）を達成することができる。
【０１３４】
図１３は、本開示の一実施形態と調和する、トークンバケットを初期化するように構成された例示的オペレーションのフローチャート１３００を示す。このオペレーションは、例えば、ポリサモジュール２４７によって実行されることができる。フローチャート１３００のオペレーションは、初期化１３０２において始まる。オペレーション１３０４は、最小計量トークンバケット更新期間TB_PERIOD_MIN（すなわち、各バケット更新について経過し得るプロセッササイクル数の最小値）を或る値に設定することを含む。TB_PERIOD_MINの値は、トークンバケットオペレーションの許容範囲（すなわち、所望される精度）に関連して構成可能である。例えば、TB_PERIOD_MINは、100に設定されることができ、これは、１％の許容範囲に対応する。オペレーション１３０６は、計量トークンバケット更新期間tb_period（すなわち、各バケット更新について経過し得るプロセッササイクル数）を決定することを含む。tb_periodは、１秒当たりのプロセッササイクル数を（バイト毎秒における）トラフィックフローレートで除算した数で定められることができる。したがって、tb_periodは、トラフィックのバイトごとのプロセッササイクルに対応する。
【０１３５】
オペレーション１３０８において、計量トークンバケット更新期間が最小計量トークンバケット更新期間以上であるかどうかを判定することができる。計量トークンバケット更新期間が最小計量トークンバケット更新期間以上である場合、オペレーション１３１０において、各更新においてトークンバケットに追加すべきトークン数は、１という値に設定されることができる。そして、プログラムフローはオペレーション１３１６において終了することができる。計量トークンバケット更新期間が最小計量トークンバケット更新期間以上でない場合、オペレーション１３１２において、各更新においてトークンバケットに追加すべきトークン数を決定することができる。オペレーション１３１４において、計量トークンバケット更新期間を決定することができる。そして、プログラムフローはオペレーション１３１６において終了することができる。
【０１３６】
表５は、本開示の一実施形態と調和する、トークンバケットの初期化を示す疑似コードの１つの例を含む。表５の例示的な疑似コードは、フローチャート１３００のオペレーションの１つの例である。
【０１３７】
【表５】
2015019369.tif 000007
第１の例において、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に設定されることができる。
【０１３８】
第２の例において、同一のプロセッサ及び同一の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トークンがトークンバケットに追加されることができる。
【０１３９】
第１の例は、比較的低帯域の回線レートに対応し、第２の例は、比較的高帯域の回線レートに対応する。トークンは離散的であり、すなわちトークンは１バイトに対応し、トークンは、整数のプロセッササイクル（すなわち、tb_period）においてトークンバケットに追加されることができる。プロセッサ周波数がトラフィックフローレートの整数倍でない場合、プロセッサ周波数をトラフィックフローで除算した結果は切り詰められることができる。第１の例において、1818.18を1818に切り詰めることが、精度に対して１パーセント未満の影響をもたらす。第２の例において、例えば、2.86を2に切り詰めることは、およそ30％の誤差をもたらす可能性がある。
【０１４０】
フローチャート１３００のオペレーション及び表５の疑似コードは、比較的低帯域のフローに影響することなしに、比較的高帯域のフローの誤差を低減するように構成される。トークンがトークンバケットに追加される全体レート（及び、トークンバケットによって実施される関連する計量）は、フローチャート１３００のオペレーションによって変更されない。むしろ、複数のトークンが、プロセッササイクル数に対応する間隔において追加されることができる。例えば、第２の例において、100プロセッササイクルを35トークンで除算したもの（すなわち、バイト）は、2.86プロセッササイクルごとに１トークンであることに対応する。±１プロセッササイクルの変化は、100プロセッササイクルの間隔に対して±１％に対応する。このようにして、計量を実施することができ、比較的高レートのトラフィックフローについて計量精度を保つことができる。
【０１４１】
図１４は、本開示の一実施形態と調和する、トークンバケットを更新するように構成された例示的オペレーションのフローチャート１４００を示す。このオペレーションは、ネットワーク装置２００における新しいパケットの到着に応答して、例えばポリサモジュール２４７によって、実行されることができる。フローチャート１４００のオペレーションは、更新１４０２において始まる。オペレーション１４０４において、最新のバケット更新以後のバケット更新間隔の数（すなわち、計量トークンバケット更新期間の数）を決定することができる。オペレーション１４０６において、最新のバケット更新の時間を決定する（すなわち、更新する）ことができる。オペレーション１４０８において、利用可能トークン数を更新することができる。例えば、利用可能トークン数は、最新のバケット更新以後のバケット更新間隔の数と各更新においてバケットに追加すべきトークンの数とに少なくとも部分的に基づいて更新することができる。オペレーション１４１０において、利用可能トークン数がトークンバケットの上限を超えるかどうかを判定することができる。利用可能トークン数がトークンバケットの上限を超える場合、オペレーション１４１２において、バケット内の利用可能トークン数は上限に設定されることができる。更新はオペレーション１４１４において終了することができる。
【０１４２】
表６は、本開示の一実施形態と調和するトークンバケットの更新（すなわち、補充）を示す疑似コードの１つの例を含む。表６のこの例示的な疑似コードは、フローチャート１４００のオペレーションの１つの例である。
【０１４３】
【表６】
2015019369.tif 000008
図１５は、本開示の一実施形態と調和する、トークンを消費するように構成された例示的オペレーションのフローチャート１５００を示す。このオペレーションは、ネットワーク装置２００における新しいパケットの到着に応答して、例えばポリサモジュール２４７によって、実行されることができる。フローチャート１５００のオペレーションは、消費１５０２において始まる。オペレーション１５０４において、バケット内にある現在利用可能なトークンの数がパケット長以上であるかどうかを判定することができる。バケット内にある現在利用可能なトークンの数がパケット長以上である場合、オペレーション１５０６において、利用可能なトークンの数からパケット長を減算することができる。バケット内にある現在利用可能なトークンの数がパケット長未満である場合、プログラムフローはオペレーション１５０８において終了することができる。
【０１４４】
【表７】
2015019369.tif 000009
このようにして、トラフィックポリシングは、１又は複数のトークンバケットを用いて実施されることができる。（１又は複数の）トークンバケットは、例えばサービスプロバイダによって選択可能である許容範囲を有して構成されることができる。この許容範囲は、比較的高帯域のフロー及び比較的低帯域のフローの双方に関する計量と精度の計量とを容易にするように構成される。
【０１４５】
図１６Ａ及び図１６Ｂは、本開示の種々の実施形態と調和する一例示的な階層型スケジューラの性能を示すように構成された２つのグラフ１６０６、１６０８を含む。この例示的な階層型スケジューラは、本明細書に説明されたように、64kアクティブキュー、トラフィックシェーピング、絶対優先及び重み付きラウンドロビンを用いて実施された。このスケジューラは、2.7GHzで動作するプロセッサコア上で実施された。グラフ１６０６及び１６０８は、プロセッサコアごとのスケジューラ性能を示す。グラフ１６０６は、スループット率と１つの10GbEポートについての回線レートと２つの10GbEポートについての回線レートとを、バイト単位のパケットサイズに対して百万パケット毎秒で示す。グラフ１６０８は、スループット率と１つの10GbEポートについての回線レートと２つの10GbEポートについての回線レートとを、バイト単位のパケットサイズに対してギガビット毎秒で示す。
【０１４６】
図７、図９Ａ、図９Ｂ、図１３、図１４及び図１５は、一実施形態に従う種々のオペレーションを示すものであり、図７、図９Ａ、図９Ｂ、図１３、図１４及び／又は図１５に示されるオペレーションのすべてが他の実施形態に必要なわけではないことを理解されたい。実際、本開示の他の実施形態において、図７、図９Ａ、図９Ｂ、図１３、図１４及び／若しくは図１５に示されるオペレーション並びに／又は本明細書に説明される他のオペレーションが図面のいずれにも具体的に示されていない方法で結合され、しかしなお十分に本開示と調和し得ることが、本明細書において十分に考えられる。したがって、１つの図面に厳密に示されていない特徴及び／又はオペレーションに向けられた請求項が、本開示の範囲及び内容に含まれると見なされる。
【０１４７】
前述は例示的なシステムアーキテクチャと方法論とを提供するが、しかしながら、本開示に対する変更が可能である。プロセッサは、１又は複数のプロセッサコアを含むことができ、システムソフトウェアを実行するように構成されることができる。システムソフトウェアには、例えば、オペレーティングシステムを含むことができる。装置メモリには、ネットワークインタフェースによって送信され、あるいは受信されることになる１又は複数のデータパケットを記憶するように構成されたＩ／Ｏメモリバッファを含むことができる。
【０１４８】
オペレーティングシステム（ＯＳ）は、システムリソースを管理し、例えばネットワーク装置２００上で実行されるタスクを制御するように構成されることができる。例えば、ＯＳは、Microsoft  Windows（登録商標）、HP-UX、Linux（登録商標）又はUNIX（登録商標）を用いて実装されることができるが、他のオペレーティングシステムが使用されることもできる。いくつかの実施形態において、ＯＳは、１又は複数の処理ユニット上で動作する種々のオペレーティングシステム（仮想マシン）に下層のハードウェアについての抽象化のレイヤを提供することができる仮想マシンモニタ（又はハイパーバイザ）によって、置換されることができる。オペレーティングシステム及び／又は仮想マシンは、１又は複数のプロトコルスタックを実装することができる。プロトコルスタックは、１又は複数のプログラムを実行してパケットを処理することができる。プロトコルスタックの一例が、ＴＣＰ／ＩＰ（トランスポートコントロールプロトコル／インターネットプロトコル）プロトコルスタックであり、ＴＣＰ／ＩＰプロトコルスタックは、ネットワークを介して送信及び／又は受信されるパケットを扱う（例えば、処理又は生成する）ための１又は複数のプログラムを含む。
【０１４９】
装置メモリ及び／又はネットワークインタフェース記憶部は、下記の種類のメモリ、すなわち、半導体ファームウェアメモリ、プログラマブルメモリ、不揮発性メモリ、読取専用メモリ、電気的プログラマブルメモリ、ランダムアクセスメモリ、フラッシュメモリ、磁気ディスクメモリ及び／又は光ディスクメモリのうち、１又は複数を含むことができる。追加的にか、あるいは別法としてかのいずれかで、システムメモリは、他の及び／又は後に開発される種類のコンピュータ読取可能メモリを含むことができる。
【０１５０】
本明細書に説明されるオペレーションの実施形態は、１又は複数のプロセッサにより実行されると本願方法を実行する命令を個々に又は組み合わせにおいて記憶した１又は複数の記憶装置を含むシステムにおいて、実施されることができる。プロセッサには、例えば、ネットワーク装置２００内の処理ユニット及び／若しくはプログラマブル回路、並びに／又はネットワークインタフェース２１６内の他の処理ユニット若しくはプログラマブル回路を含むことができる。したがって、本明細書に説明される方法によるオペレーションは、いくつかの異なる物理的配置における処理構造などの、複数の物理的装置にわたって分散され得るものである。記憶装置は、任意の種類の有形の非一時的な記憶装置、例えば、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読取専用メモリ（ＣＤ−ＲＯＭ）、書換可能コンパクトディスク（ＣＤ−ＲＷ）及び光磁気ディスクを含む任意の種類のディスク、読取専用メモリ（ＲＯＭ）などの半導体装置、ダイナミックＲＡＭ及びスタティックＲＡＭなどのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブル読取専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読取専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気若しくは光カード、又は電子的命令を記憶することに適した任意の種類の記憶装置を含むことができる。
【０１５１】
本明細書の任意の実施形態において、「回路」には、例えば、ハードワイヤード回路、プログラマブル回路、ステートマシン回路、及び／又はプログラマブル回路により実行される命令を記憶したファームウェアを、単体で又は任意の組み合わせにおいて、含むことができる。本明細書において、「モジュール」には、回路並びに／又はコード及び／若しくは命令セット（例えば、ソフトウェア、ファームウェアなど）を、単体で又は任意の組み合わせにおいて、含むことができる。
【０１５２】
いくつかの実施形態において、本明細書に説明される種々のモジュール及び／又は回路についての（１又は複数の）回路及び／又はロジック実装を明記するために、ハードウェア記述言語を使用することができる。例えば、１つの実施形態において、或るハードウェア記述言語が、本明細書に説明される１又は複数の回路及び／又はモジュールの半導体製造を可能にできる超高速集積回路（ＶＨＳＩＣ）ハードウェア記述言語（ＶＨＤＬ）に対して準拠し、あるいは互換性を有し得る。ＶＨＤＬは、ＩＥＥＥ標準２０７６−１９８７、ＩＥＥＥ標準２０７６．２、ＩＥＥＥ１０７６．１、ＶＨＤＬ−２００６のＩＥＥＥドラフト３．０、ＶＨＤＬ−２００８のＩＥＥＥドラフト４．０及び／若しくはＩＥＥＥ  ＶＨＤＬ標準の他のバージョン、並びに／又は他のハードウェア記述標準に対して準拠し、あるいは互換性を有し得る。
【０１５３】
サービスプロバイダネットワーク１０２及び／又は（１又は複数の）他のネットワーク１０６には、パケット交換ネットワークを含むことができる。ネットワーク装置１０８ａ…１０８ｎ、（１又は複数の）他のネットワーク１０６及び／又はクライアントシステム１０４ａ…１０４ｎは、選択されたパケット交換ネットワーク通信プロトコルを用いて互いに通信する能力を有することができる。１つの例示的な通信プロトコルには、トランスミッションコントロールプロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）を用いた通信を許容する能力を有するイーサネット（登録商標）通信プロトコルを含むことができる。イーサネット（登録商標）プロトコルは、２００８年１２月に発行され“IEEE  802.3  Standard”と題された、米国電気電子学会（ＩＥＥＥ）により発行されたイーサネット（登録商標）標準、及び／又はこの標準のこれ以降のバージョンに対して準拠し、あるいは互換性を有し得る。別法として、又は追加的に、ネットワーク装置１０８ａ…１０８ｎ、（１又は複数の）他のネットワーク１０６及び／又はクライアントシステム１０４ａ…１０４ｎは、Ｘ．２５通信プロトコルを用いて互いに通信する能力を有することができる。Ｘ．２５通信プロトコルは、国際電気通信連合‐電気通信標準化部門（ＩＴＵ−Ｔ）により公布された標準に対して準拠し、あるいは互換性を有し得る。別法として、又は追加的に、ネットワーク装置１０８ａ…１０８ｎ、（１又は複数の）他のネットワーク１０６及び／又はクライアントシステム１０４ａ…１０４ｎは、フレームリレー通信プロトコルを用いて互いに通信する能力を有することができる。フレームリレー通信プロトコルは、国際電信電話諮問委員会（ＣＣＩＴＴ）及び／又は米国国家規格協会（ＡＮＳＩ）により公布された標準に対して準拠し、あるいは互換性を有し得る。別法として、又は追加的に、ネットワーク装置１０８ａ…１０８ｎ、（１又は複数の）他のネットワーク１０６及び／又はクライアントシステム１０４ａ…１０４ｎは、非同期転送モード（ＡＴＭ）通信プロトコルを用いて互いに通信する能力を有することができる。ＡＴＭ通信プロトコルは、２００１年８月に発行され“ATM-MPLS  Network  Interworking  2.0”と題された、ＡＴＭフォーラムにより発行されたＡＴＭ標準、及び／又はこの標準のこれ以降のバージョンに対して準拠し、あるいは互換性を有し得る。当然ながら、別の及び／又は後に開発される接続指向のネットワーク通信プロトコルが、本明細書において同様に考えられる。
【０１５４】
したがって、本開示と調和するシステム及び方法は、プログラマブルネットワーク装置を利用してプログラマブルエグレストラフィック管理を提供するように構成される。本システム及び方法は、１若しくは複数のプロセッサコア及び／又は１若しくは複数のスレッドにわたって、例えば約数万のパケットに関連付けられた処理負荷を分散するように構成される。パケット処理は、パイプライン化されることができる。本システム及び方法は、エンキューオペレーションについて複数のパケットを同時に操作し、デキューオペレーションについて複数のパイプを同時に操作するように構成され、したがってプリフェッチレイテンシを「隠ぺいする」ことになる。
【０１５５】
パケットフローは、複数のレベルを含むスケジューリング階層にグループ化されてトラフィック管理機能を容易にすることができる。１又は複数のレベルで実施されるトラフィック管理機能には、トラフィックシェーピング、上限強制、絶対優先スケジューリング及び重み付きラウンドロビンを含む。クレジットロジックが、トラフィック管理機能性のうち少なくともいくつかを実施するために利用される。
【０１５６】
パケットをインテリジェントに廃棄するように構成されたランダム初期検知を利用した輻輳管理が、実施されることができる。トラフィックポリシングが、比較的高帯域のトラフィックフローと比較的低帯域のトラフィックフローとの双方について、比較的高い精度を提供するように構成されたトークンバケット構造を用いて、実施されることができる。
【０１５７】
したがって、本開示は、一例示的なネットワーク装置を提供する。この例示的なネットワーク装置は、少なくとも１つのプロセッサコアを含むプロセッサと、ある回線レートにおいてパケットを送信及び受信するように構成されたネットワークインタフェースと、スケジューラ階層型データ構造を記憶するように構成されたメモリと、スケジューラモジュールとを含む。スケジューラモジュールは、階層型データ構造に含まれる次のアクティブなパイプ構造をプリフェッチし、現在のパイプと関連するサブポートとについてのクレジットを更新し、現在のパイプデータ構造に少なくとも部分的に基づいて現在のパイプの中で次のアクティブなトラフィッククラスを特定し、特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択し、利用可能トラフィックシェーピングトークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットのクレジット以上である場合に、ネットワークインタフェースによる送信のために、選択された次キューから次パケットをスケジュールするように構成される。
【０１５８】
本開示はさらに、一例示的な方法を提供する。この例示的な方法には、スケジューラモジュールが、次のアクティブなパイプ構造をプリフェッチするステップであり、次のアクティブなパイプ構造は階層型データ構造に含まれる、ステップと、スケジューラモジュールが、現在のパイプと関連するサブポートとについてのクレジットを更新するステップと、スケジューラモジュールが、現在のパイプデータ構造に少なくとも部分的に基づいて現在のパイプの中で次のアクティブなトラフィッククラスを特定するステップと、スケジューラモジュールが、特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択するステップと、スケジューラモジュールが、利用可能トラフィックシェーピングトークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットのクレジット以上である場合に、送信のために、選択された次キューから次パケットをスケジュールするステップとを含む。
【０１５９】
本開示はさらに、１又は複数のプロセッサにより実行されたときに下記オペレーションをもたらす命令を個々に又は組み合わせにおいて記憶した１又は複数の記憶装置を含む一例示的システムを提供する。このオペレーションには、次のアクティブなパイプ構造をプリフェッチするステップであり、次のアクティブなパイプ構造は階層型データ構造に含まれる、ステップと、現在のパイプと関連するサブポートとについてのクレジットを更新するステップと、現在のパイプデータ構造に少なくとも部分的に基づいて現在のパイプの中で次のアクティブなトラフィッククラスを特定するステップと、特定された次のアクティブなトラフィッククラスに関連付けられた次キューを選択するステップと、利用可能トラフィックシェーピングトークンバケットクレジットと利用可能トラフィッククラスクレジットとが次パケットのクレジット以上である場合に、送信のために、選択された次キューから次パケットをスケジュールするステップとを含む。
【０１６０】
本明細書において採用される用語及び表現は、限定の用語としてではなく説明の用語として使用されており、こうした用語の使用及び表現において、図示及び説明される特徴（又は、その部分）のいずれの均等物も除外する意図はなく、種々の変更が請求項の範囲内で可能であることを認識されたい。したがって、請求項はすべてのこうした均等物をカバーするものである。
【０１６１】
種々の特徴、態様及び実施形態が、本明細書において説明されている。この特徴、態様及び実施形態は、当業者が理解するであろうとおり、互いの組み合わせと変形及び変更とを受け入れる余地がある。本開示は、ゆえに、こうした組み合わせ、変形及び変更を包含すると見なされるべきものである。
【符号の説明】
【０１６２】
１００  ネットワークシステム
１０２  サービスプロバイダネットワーク
１０４  クライアントシステム
１０５  ネットワークノード
１０６  他のネットワーク
１０８  ネットワーク装置
２００  ネットワーク装置
２１０  プロセッサ
２１２  ブリッジチップセット
２１４  装置メモリ
２４４  イングレスモジュール
２４６  エグレスモジュール
２４８  データ構造
２５０  キュー
２５５  インフラストラクチャモジュール
２６２  時間基準（ＮＩＣ時間）
２６３  プロセッサ時間
２１６  ネットワークインタフェース
４００  スケジューラモジュール
４０２  エンキューモジュール
４０４  複数のキュー
４０６  デキューモジュール
５００  スケジューリング階層
５０２  ポート
５０４  サブポート
５０６  パイプ
５０８  トラフィッククラス
５１０  キュー
５２４  ポートビットマップ
６００  スケジューラデータ構造
６０２  サブポートテーブル
６０４  パイプテーブル
６０６  キューテーブル
６０８  キュー記憶領域
６１０  アクティブキュービットマップ
６１２  パイプグラインダアレイ
１０００  デキューオペレーション
１００２  パイプグラインダ
１００４  サブポートテーブル
１００６  パイププロファイルテーブル
１００８  パイプテーブル
１０１０  キューテーブル
１０１２  キュー記憶領域
１０１４  アクティブなパイプのビットマップ
１０１８  出力ポート
１０２０  出力パケット
１１００  パイププリフェッチステートマシン
１１０２  開始
１１０４  パイププリフェッチ
１１０６  トラフィッククラスキューアレイプリフェッチ
１１０８  Mbufプリフェッチ
１１１０  Mbuf読み出し
【図１】
2015019369.tif 000010
【図２】
2015019369.tif 000011
【図３Ａ】
2015019369.tif 000012
【図３Ｂ】
2015019369.tif 000013
【図３Ｃ】
2015019369.tif 000014
【図３Ｄ】
2015019369.tif 000015
【図４】
2015019369.tif 000016
【図５】
2015019369.tif 000017
【図６】
2015019369.tif 000018
【図７】
2015019369.tif 000019
【図８】
2015019369.tif 000020
【図９Ａ】
2015019369.tif 000021
【図９Ｂ】
2015019369.tif 000022
【図１０】
2015019369.tif 000023
【図１１】
2015019369.tif 000024
【図１２】
2015019369.tif 000025
【図１３】
2015019369.tif 000026
【図１４】
2015019369.tif 000027
【図１５】
2015019369.tif 000028
【図１６】
2015019369.tif 000029
【外国語明細書】
2015019369000001.pdf
2015019369000002.pdf
2015019369000003.pdf
2015019369000004.pdf