(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-23
(45)【発行日】2024-05-31
(54)【発明の名称】輻輳処理方法、装置、ネットワークデバイス及び記憶媒体
(51)【国際特許分類】
H04L 47/12 20220101AFI20240524BHJP
H04L 47/26 20220101ALI20240524BHJP
【FI】
H04L47/12
H04L47/26
(21)【出願番号】P 2022577571
(86)(22)【出願日】2021-06-29
(86)【国際出願番号】 CN2021103303
(87)【国際公開番号】W WO2023272532
(87)【国際公開日】2023-01-05
【審査請求日】2022-12-16
(73)【特許権者】
【識別番号】518056748
【氏名又は名称】新華三技術有限公司
【氏名又は名称原語表記】NEW H3C TECHNOLOGIES CO., LTD.
(74)【代理人】
【識別番号】100147485
【氏名又は名称】杉村 憲司
(74)【代理人】
【識別番号】230118913
【氏名又は名称】杉村 光嗣
(74)【代理人】
【識別番号】100226263
【氏名又は名称】中田 未来生
(72)【発明者】
【氏名】郭 道栄
【審査官】宮島 郁美
(56)【参考文献】
【文献】特開2015-186149(JP,A)
【文献】米国特許出願公開第2015/0281106(US,A1)
【文献】米国特許出願公開第2020/0084155(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L12/00-12/66,13/00,41/00-69/40
(57)【特許請求の範囲】
【請求項1】
輻輳処理方法であって、
対象ポートを介して輻輳マークを持っている第1パケットを受信するステップと、
プリセット貪欲フローテーブルにおいて、前記第1パケットが持っている対象フロー情報と前記対象ポートの標識とを含む対象エントリーを検索するステップであって、前記プリセット貪欲フローテーブルにはプリセットトラフィック閾値より大きいトラフィックを有するデータフローのフロー情報と、当該フロー情報に対応するデータフローを受信するポートの標識と、が格納されているステップと、
前記対象エントリーを見つけた場合、前記第1パケットを処理するステップと、
前記対象エントリーを見つけなかった場合、前記第1パケットが持っている前記輻輳マークを除去して第2パケットを取得し、前記第2パケットを処理するステップと、を含
み、
前記プリセット貪欲フローテーブルにおける各エントリーには初期アクティブ値が設定されており、前記対象エントリーを見つけた場合、前記輻輳処理方法は、
前記対象エントリーの現在のアクティブ値から第1プリセット値だけ減算し、前記対象エントリーの調整後アクティブ値を取得するステップと、
前記対象エントリーの調整後アクティブ値が第2プリセット値以下である場合、前記プリセット貪欲フローテーブルから前記対象エントリーを削除するステップと、をさらに含む、
ことを特徴とする、輻輳処理方法。
【請求項2】
前記第1パケットが輻輳通知パケットCNPである場合、前記第1パケットを処理するステップは、
転送テーブルに前記対象フロー情報が含まれている場合、前記第1パケットが持っている前記対象ポートの標識を除去し、前記対象ポートの標識が除去された前記第1パケットを転送し、且つ前記対象エントリーのエージングカウンターを初期エージング値にリセットし、前記転送テーブルに前記対象フロー情報が含まれていない場合、前記第1パケットを破棄するステップを含み、
前記第2パケットを処理するステップは、
前記転送テーブルに前記対象フロー情報が含まれている場合、前記第2パケットが持っている前記対象ポートの標識を除去し、前記対象ポートの標識が除去された前記第2パケットを転送し、前記転送テーブルに前記対象フロー情報が含まれていない場合、前記第2パケットを破棄するステップを含む、
ことを特徴とする、請求項
1に記載の方法。
【請求項3】
前記第1パケットが明示的輻輳通知ECNパケットである場合、前記第1パケットを処理するステップは、
転送テーブルに前記対象フロー情報が含まれている場合、前記第1パケットに対応する輻輳通知パケットCNPを転送し、前記対象エントリーのエージングカウンターを初期エージング値にリセットし、前記転送テーブルに前記対象フロー情報が含まれていない場合、前記第1パケットを破棄するステップを含み、
前記第2パケットを処理するステップは、
前記転送テーブルに前記対象フロー情報が含まれている場合、前記第2パケットが持っている前記対象ポートの標識を除去し、前記対象ポートの標識が除去された前記第2パケットを転送し、前記転送テーブルに前記対象フロー情報が含まれていない場合、前記第2パケットを破棄するステップを含む、
ことを特徴とする、請求項
1に記載の方法。
【請求項4】
対象ポートを介して輻輳マークを持っている第1パケットを受信するステップの前に、前記方法は、
第1計算周期内に前記対象ポートを介して受信された複数のパケットが所属するデータフローのトラフィックを統計するステップと、
転送テーブルに含まれている候補フロー情報から、対象候補フロー情報として、トラフィックが最大となる予め設定された数のデータフローの候補フロー情報を特定し、ここで、前記候補フロー情報はハッシュ値が候補フローのフロー情報のハッシュ値と同一であるフロー情報であり、前記候補フローは統計されたトラフィックがプリセット候補フローのトラフィック閾値より大きいデータフローであるステップと、
対象候補フロー情報のそれぞれについて、当該対象候補フロー情報に対応する対象データフローのトラフィックがプリセットトラフィック閾値より大きい場合、当該対象候補フロー情報と前記対象ポートの標識とを1つのエントリーとして前記プリセット貪欲フローテーブルに添加するステップと、をさらに含む
ことを特徴とする、請求項1に記載の方法。
【請求項5】
前記第1計算周期内に前記対象ポートを介して受信された複数のパケットが所属するデータフローのトラフィックを統計するステップは、統計時間が第1計算周期に達するまで、
第2計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計し、一組にあるデータフローのフロー情報のハッシュ値が同一であるステップと、
前記第1合計トラフィックが第1プリセット候補サブ閾値より大きい場合、各組のデータフローについて、当該組のデータフローの第2合計トラフィックが第2プリセット候補サブ閾値より大きい場合、当該組のデータフローの第2合計トラフィックが、記録されている当該組のデータフローの合計トラフィックより大きいとき、記録されている当該組のデータフローの合計トラフィックを当該組のデータフローの第2合計トラフィックとして更新するステップと、
統計時間が第3計算周期に達しなかった場合、前記第2計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計するステップに戻って実行するステップと、
統計時間が前記第3計算周期に達した場合、各組のデータフローについて、記録されている当該組のデータフローの合計トラフィックがプリセット候補フローのトラフィック閾値より大きい場合、当該組のデータフロー
のフロー情報を1つのエントリーとしてプリセット候補貪欲フローテーブルに添加し、前記第2計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計するステップに戻って実行するステップと、を含む
ことを特徴とする、請求項
4に記載の方法。
【請求項6】
前記第2計算周期は、複数の統計周期に分割されており、各統計周期が1つのサブ長さレジスタ配列に対応し、各統計周期が1つの長さレジスタにも対応し、各サブ長さレジスタ配列には複数のサブ長さレジスタが含まれ、1つのハッシュ値が1つのサブ時間レジスタに対応し、
前記第2計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計するステップは、
前記対象ポートを介して受信された各パケットについて、
第1時間差が前記第2計算周期の長さより短い場合、前記第1時間差が前記統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアし、前記第1時間差は時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、前記対象統計周期は当該パケットの受信時間が所属する統計周期であるステップと、
第2時間差が前記第2計算周期の長さ以上である場合、対象ハッシュ値に対応する各サブ長さレジスタに格納されている長さをクリアし、前記第2時間差が対象サブ時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、前記対象サブ時間レジスタは当該パケットが持っているフロー情報の対象ハッシュ値に対応するサブ時間レジスタであるステップと、
前記対象統計周期に対応する対象サブ長さレジスタを当該パケットの長さだけ増加し、前記対象長さレジスタを当該パケットの長さだけ増加し、前記対象サブ長さレジスタが前記対象ハッシュ値に対応するステップと、
当該パケットの受信時間を前記時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が前記第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実行することを含む
ことを特徴とする、請求項
5に記載の方法。
【請求項7】
前記方法は、
前記対象ポートを介して受信された各パケットについて、
前記第1時間差が前記第2計算周期の長さ以上である場合、複数のサブ長さレジスタ配列と複数の長さレジスタに格納されている長さをクリアするステップと、
前記対象サブ長さレジスタを当該パケットの長さだけ増加し、前記対象長さレジスタを当該パケットの長さだけ増加するステップと、
当該パケットの受信時間を前記時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が前記第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実行することを含む
ことを特徴とする、請求項
6に記載の方法。
【請求項8】
前記方法は、
前記対象ポートを介して受信された各パケットについて、
前記第1時間差が前記第2計算周期の長さより短い場合、前記第1時間差が前記統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアするステップと、
前記第2時間差が前記第2計算周期の長さより短い場合、前記第2時間差が前記統計周期の長さ以上であるとき、前記対象サブ長さレジスタに格納されている長さをクリアするステップと、
前記対象サブ長さレジスタを当該パケットの長さだけ増加し、前記対象長さレジスタにおいて当該パケットの長さだけ増加するステップと、
当該パケットの受信時間を前記時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が前記第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されている長さの合計値を統計するステップと、を実行することを含む
ことを特徴とする、請求項
6または
7に記載の方法。
【請求項9】
統計時間が第6計算周期に達するまで、
第4計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップと、
前記第3合計トラフィックが第1プリセットトラフィックサブ閾値より大きい場合、各対象データフローについて、当該対象データフローの第4合計トラフィックが第2プリセットトラフィックサブより大きい場合、当該対象データフローの第4合計トラフィックが、記録されている当該対象データフローのトラフィックより大きいとき、記録されている当該対象データフローのトラフィックを当該対象データフローの第4合計トラフィックとして更新するステップと、
統計時間が第5計算周期に達しなかった場合、第4計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップに戻って実行するステップと、
統計時間が前記第5計算周期に達した場合、各対象データフローについて、記録されている当該対象データフローのトラフィックがプリセットトラフィック閾値より大きい場合、当該対象データフローのフロー情報を1つのエントリーとしてプリセット貪欲フローテーブルに添加し、第4計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップに戻って実行するステップと、によって、
各対象候補フロー情報のそれぞれに対応する対象データフローのトラフィックは、統計して取得されたことを特徴とする、請求項
4に記載の方法。
【請求項10】
前記第4計算周期は、複数の統計周期に分割されており、各統計周期が1つのサブ長さレジスタ配列に対応し、各統計周期が1つの長さレジスタにも対応し、各サブ長さレジスタ配列には複数の第1サブ長さレジスタと1つの第2サブ長さレジスタとが含まれており、1つの対象データフローが1つの第1サブ時間レジスタに対応し、前記第2サブ長さレジスタが前記対象データフロー以外の全てのデータフローに対応し、
前記第4計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップは、
前記対象ポートを介して受信された各パケットについて、
第3時間差が前記第4計算周期の長さより短い場合、前記第3時間差が前記統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアし、ここで、前記第3時間差は時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、前記対象統計周期は当該パケットの受信時間が所属する統計周期であるステップと、
第4時間差が前記第4計算周期の長さ以上である場合、当該パケットが所属するデータフローに対応する各サブ長さレジスタに格納されている長さをクリアし、ここで、前記第4時間差は対象サブ時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、前記対象サブ時間レジスタは当該パケットが所属するデータフローに対応するサブ時間レジスタであるステップと、
前記対象統計周期に対応する対象サブ長さレジスタを当該パケットの長さだけ増加し、前記対象長さレジスタを当該パケットの長さだけ増加し、前記対象サブ長さレジスタは当該パケットが所属するデータフローに対応するステップと、
当該パケットの受信時間を前記時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が前記第4計算周期に達すると、第3合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各対象データフローの第4合計トラフィックとして、各対象データフローに対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実行することを含む
ことを特徴とする、請求項
9に記載の方法。
【請求項11】
輻輳処理装置であって、
対象ポートを介して輻輳マークを持っている第1パケットを受信する受信手段と、
プリセット貪欲フローテーブルから、前記第1パケットが持っている対象フロー情報と前記対象ポートの標識とを含む対象エントリーを検索し、ここで、前記プリセット貪欲フローテーブルにはプリセットトラフィック閾値より大きいトラフィックを有するデータフローのフロー情報と、当該フロー情報に対応するデータフローを受信するポートの標識と、が格納されている検索手段と、
前記対象エントリーを見つけた場合、前記第1パケットを処理し、前記対象エントリーを見つけなかった場合、前記第1パケットが持っている前記輻輳マークを除去して第2パケットを取得し、前記第2パケットを処理する処理手段と、を備え
、
前記プリセット貪欲フローテーブルにおける各エントリーには初期アクティブ値が設定されており、前記輻輳処理装置は、
前記対象エントリーを見つけた場合、前記対象エントリーの現在のアクティブ値を第1プリセット値だけ減算し、前記対象エントリーの調整後アクティブ値を取得する設定手段と、
前記対象エントリーの調整後アクティブ値が第2プリセット値以下である場合、前記プリセット貪欲フローテーブルから前記対象エントリーを削除する削除手段と、をさらに備える、
ことを特徴とする、輻輳処理装置。
【請求項12】
前記処理手段は、
前記第1パケットが輻輳通知パケットCNPであるとき、転送テーブルに前記対象フロー情報が含まれている場合、前記第1パケットが持っている前記対象ポートの標識を除去し、前記対象ポートの標識が除去された前記第1パケットを転送し、且つ前記対象エントリーのエージングカウンターを初期エージング値にリセットし、前記転送テーブルに前記対象フロー情報が含まれていない場合、前記第1パケットを破棄する、または、
前記転送テーブルに前記対象フロー情報が含まれている場合、前記第2パケットが持っている前記対象ポートの標識を除去し、前記対象ポートの標識が除去された前記第2パケットを転送し、前記転送テーブルに前記対象フロー情報が含まれていない場合、前記第2パケットを破棄する、ために用いられる
ことを特徴とする、請求項
11に記載の装置。
【請求項13】
前記処理手段は、
前記第1パケットが明示的輻輳通知ECNパケットであるとき、転送テーブルに前記対象フロー情報が含まれている場合、前記第1パケットに対応する輻輳通知パケットCNPを転送し、前記対象エントリーのエージングカウンターを初期エージング値にリセットし、前記転送テーブルに前記対象フロー情報が含まれていない場合、前記第1パケットを破棄する、または、
前記転送テーブルに前記対象フロー情報が含まれている場合、前記第2パケットが持っている前記対象ポートの標識を除去し、前記対象ポートの標識が除去された前記第2パケットを転送し、前記転送テーブルに前記対象フロー情報が含まれていない場合、前記第2パケットを破棄する、ために用いられる
ことを特徴とする、請求項
11に記載の装置。
【請求項14】
前記装置は、
前記対象ポートを介して輻輳マークを持っている第1パケットを受信するステップの前に、第1計算周期内に前記対象ポートを介して受信された複数のパケットが所属するデータフローのトラフィックを統計する第1統計手段と、
転送テーブルに含まれている候補フロー情報から、対象候補フロー情報として、トラフィックが最大となる予め設定された数のデータフローの候補フロー情報を特定し、ここで、前記候補フロー情報はハッシュ値が候補フローのフロー情報のハッシュ値と同一であるフロー情報であり、前記候補フローは統計されたトラフィックがプリセット候補フローのトラフィック閾値より大きいデータフローである特定手段と、
各対象候補フロー情報について、当該対象候補フロー情報に対応する対象データフローのトラフィックがプリセットトラフィック閾値より大きい場合、当該対象候補フロー情報と前記対象ポートの標識とを1つのエントリーとして前記プリセット貪欲フローテーブルに添加する添加手段と、をさらに備える
ことを特徴とする、請求項
11に記載の装置。
【請求項15】
前記第1統計手段は、統計時間が第1計算周期に達するまで、
第2計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計し、ここで、一組にあるデータフローのフロー情報のハッシュ値が同一であるステップと、
前記第1合計トラフィックが第1プリセット候補サブ閾値より大きい場合、各組のデータフローについて、当該組のデータフローの第2合計トラフィックが第2プリセット候補サブ閾値より大きい場合、当該組のデータフローの第2合計トラフィックが、記録されている当該組のデータフローの合計トラフィックより大きいとき、記録されている当該組のデータフローの合計トラフィックを当該組のデータフローの第2合計トラフィックとして更新するステップと、
統計時間が第3計算周期に達しなかった場合、第2計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計するステップに戻って実行するステップと、
統計時間が前記第3計算周期に達した場合、各組のデータフローについて、記録されている当該組のデータフローの合計トラフィックがプリセット候補フローのトラフィック閾値より大きい場合、当該組のデータフロー
のフロー情報を1つのエントリーとしてプリセット候補貪欲フローテーブルに添加し、第2計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計するステップに戻って実行するステップと、を実行するために用いられる
ことを特徴とする、請求項
14に記載の装置。
【請求項16】
前記第2計算周期は、複数の統計周期に分割されており、各統計周期が1つのサブ長さレジスタ配列に対応し、各統計周期が1つの長さレジスタにも対応し、各サブ長さレジスタ配列には複数のハッシュ値に対応するサブ長さレジスタが含まれ、1つのハッシュ値が1つのサブ時間レジスタに対応し、
前記第1統計手段は、
前記対象ポートを介して受信された各パケットについて、
第1時間差が前記第2計算周期の長さより短い場合、前記第1時間差が前記統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアし、ここで、前記第1時間差は時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、前記対象統計周期は当該パケットの受信時間が所属する統計周期であるステップと、
第2時間差が前記第2計算周期の長さ以上である場合、対象ハッシュ値に対応する各サブ長さレジスタに格納されている長さをクリアし、ここで、前記第2時間差は対象サブ時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、前記対象サブ時間レジスタは当該パケットが持っているフロー情報の対象ハッシュ値に対応するサブ時間レジスタであるステップと、
前記対象統計周期に対応する対象サブ長さレジスタを当該パケットの長さだけ増加し、前記対象長さレジスタを当該パケットの長さだけ増加し、前記対象サブ長さレジスタが前記対象ハッシュ値に対応するステップと、
当該パケットの受信時間を前記時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が前記第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実行するために用いられる
ことを特徴とする、請求項
15に記載の装置。
【請求項17】
前記第1統計手段は、さらに、
前記対象ポートを介して受信された各パケットについて、
前記第1時間差が前記第2計算周期の長さ以上である場合、複数のサブ長さレジスタ配列と複数の長さレジスタに格納されている長さをクリアするステップと、
前記対象サブ長さレジスタを当該パケットの長さだけ増加し、前記対象長さレジスタを当該パケットの長さだけ増加するステップと、
当該パケットの受信時間を前記時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が前記第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実行するために用いられる
ことを特徴とする、請求項
16に記載の装置。
【請求項18】
前記第1統計手段は、さらに、
前記対象ポートを介して受信された各パケットについて、
前記第1時間差が前記第2計算周期の長さより短い場合、前記第1時間差が前記統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアするステップと、
前記第2時間差が前記第2計算周期の長さより短い場合、前記第2時間差が前記統計周期の長さ以上であるとき、前記対象サブ長さレジスタに格納されている長さをクリアするステップと、
前記対象サブ長さレジスタを当該パケットの長さだけ増加し、前記対象長さレジスタを当該パケットの長さだけ増加するステップと、
当該パケットの受信時間を前記時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が前記第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されている長さの合計値を統計するステップと、を実行するために用いられる
ことを特徴とする、請求項
16または
17に記載の装置。
【請求項19】
前記装置は、
各対象候補フロー情報に対応する対象データフローのトラフィックを統計し取得する第2統計手段をさらに備え、
前記第2統計手段は、統計時間が第6計算周期に達するまで、
第4計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップと、
前記第3合計トラフィックが第1プリセットトラフィックサブ閾値より大きい場合、各対象データフローについて、当該対象データフローの第4合計トラフィックが第2プリセットトラフィックサブ閾値より大きい場合、当該対象データフローの第4合計トラフィックが、記録されている当該対象データフローのトラフィックより大きいとき、記録されている当該対象データフローのトラフィックを当該対象データフローの第4合計トラフィックとして更新するステップと、
統計時間が第5計算周期に達しなかった場合、第4計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップに戻って実行するステップと、
統計時間が前記第5計算周期に達した場合、各対象データフローについて、記録されている当該対象データフローのトラフィックがプリセットトラフィック閾値より大きい場合、当該対象データフローのフロー情報を1つのエントリーとしてプリセット貪欲フローテーブルに添加し、第4計算周期内に前記対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップに戻って実行するステップと、を実行するために用いられる
ことを特徴とする、請求項
14に記載の装置。
【請求項20】
前記第4計算周期は、複数の統計周期に分割されており、各統計周期が1つのサブ長さレジスタ配列に対応し、各統計周期が1つの長さレジスタにも対応し、各サブ長さレジスタ配列には複数の第1サブ長さレジスタと1つの第2サブ長さレジスタとが含まれており、1つの対象データフローが1つの第1サブ時間レジスタに対応し、前記第2サブ長さレジスタが前記対象データフロー以外の全てのデータフローに対応し、
前記第2統計手段は、
前記対象ポートを介して受信された各パケットについて、
第3時間差が前記第4計算周期の長さより短い場合、前記第3時間差が前記統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアし、ここで、前記第3時間差は時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、前記対象統計周期は当該パケットの受信時間が所属する統計周期であるステップと、
第4時間差が前記第4計算周期の長さ以上である場合、当該パケットが所属するデータフローに対応する各サブ長さレジスタに格納されている長さをクリアし、ここで、前記第4時間差は対象サブ時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、前記対象サブ時間レジスタは当該パケットが所属するデータフローに対応するサブ時間レジスタであるステップと、
前記対象統計周期に対応する対象サブ長さレジスタを当該パケットの長さだけ増加し、前記対象長さレジスタを当該パケットの長さだけ増加し、前記対象サブ長さレジスタは当該パケットが所属するデータフローに対応するステップと、
当該パケットの受信時間を前記時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が前記第4計算周期に達すると、第3合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各対象データフローの第4合計トラフィックとして、各対象データフローに対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実行するために用いられる
ことを特徴とする、請求項
19に記載の装置。
【請求項21】
プロセッサーと機械可読記憶媒体とを備えるネットワークデバイスであって、前記機械可読記憶媒体には前記プロセッサーにより実行できる機械実行可能な命令が格納されており、前記プロセッサーは、前記機械実行可能な命令を実行すると、
対象ポートを介して輻輳マークを持っている第1パケットを受信するステップと、
プリセット貪欲フローテーブルから、前記第1パケットが持っている対象フロー情報と前記対象ポートの標識とを含む対象エントリーを検索し、ここで、前記プリセット貪欲フローテーブルにはプリセットトラフィック閾値より大きいトラフィックを有するデータフローのフロー情報と、当該フロー情報に対応するデータフローを受信するポートの標識と、が格納されているステップと、
前記対象エントリーを見つけた場合、前記第1パケットを処理し、前記対象エントリーを見つけなかった場合、前記第1パケットが持っている前記輻輳マークを除去して第2パケットを取得し、前記第2パケットを処理するステップと、を実現
し、
前記プリセット貪欲フローテーブルにおける各エントリーには初期アクティブ値が設定されており、前記対象エントリーを見つけた場合、前記プロセッサーは、前記機械実行可能な命令を実行すると、
前記対象エントリーの現在のアクティブ値から第1プリセット値だけ減算し、前記対象エントリーの調整後アクティブ値を取得するステップと、
前記対象エントリーの調整後アクティブ値が第2プリセット値以下である場合、前記プリセット貪欲フローテーブルから前記対象エントリーを削除するステップと、をさらに実現する、
ことを特徴とする、ネットワークデバイス。
【請求項22】
機械可読記憶媒体であって、前記機械可読記憶媒体にはコンピュータプログラムが格納されており、前記コンピュータプログラムがプロセッサーにより実行されると、請求項1~
10のいずれか1項に記載の方法のステップを実現する
ことを特徴とする、機械可読記憶媒体。
【請求項23】
コンピュータプログラムであって、前記コンピュータプログラムがプロセッサーにより実行されると、請求項1~
10のいずれか1項に記載の方法のステップを実現する
ことを特徴とする、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、ロスレス伝送技術に関し、特に、輻輳処理方法、装置、ネットワークデバイス及び記憶媒体に関する。
【背景技術】
【0002】
ネットワークデバイスの輻輳を緩和し、ロスレスイーサ転送サービスの品質を向上させるために、従来の一般的なパケット伝送方法は、ネットワークデバイスの各ポートにおける8つのキューのそれぞれに対してロスレス伝送を実現するためのPFC閾値と輻輳制御を行う明示的輻輳通知(Explicit Congestion Notification,ECN)閾値とを設定するステップと、1つのキューに対して、当該キューにキャッシュされるパケットのデータ量がプリセットECN閾値に達した場合、当該キューにキャッシュされる各パケットにECNマークを付与してECNパケットを取得し、取得されたECNパケットを対象サーバに送信するステップと、対象サーバがECNパケットを受信した後、輻輳通知パケット(Congestion Notification Packet,CNP)をソースサーバにフィードバックするステップと、ソースサーバがCNPを受信した後、当該キューにキャッシュされるパケットのデータ量がプリセットPFC閾値に達しないように、パケットの送信レートを下げるステップと、を含む。
【0003】
上記のようなパケットの伝送方法により、ネットワークデバイスの輻輳を緩和し、ロスレスイーサ転送サービスの品質を向上させることができる。しかし、ネットワークデバイスにおけるファンインポートとファンアウトポートとの比率がN:1である場合、ネットワークデバイスでマイクロバーストが発生することがある。また、Nが大きいほど、マイクロバーストのデータフローの瞬時レートは大きくなる。この場合、ネットワークデバイスの輻輳を緩和し、ロスレス転送サービスの品質を向上させるために、ECN閾値を小さい値に設定する必要がある。
【0004】
ただし、ECN閾値を小さい値に設定することは、ネットワークデバイスの輻輳を緩和し、ロスレス転送サービスの品質を向上させることができるが、ソースサーバでパケットを送信するレートが非常に小さいため、ネットワーク帯域幅の利用率が低下する。
【0005】
また、1つのキューは、複数のデータフローのパケットをキャッシュすることができる。この複数のデータフローは、エレファントフローとマウスフローに分けられる。ここで、マイクロバーストが発生する場合、エレファントフローの方は、輻輳への影響が大きい。よって、輻輳が発生した場合、ネットワークデバイスは、エレファントフローに対して輻輳通知を行うだけでよく、さらにエレファントフローのみに輻輳制御を行えばよい。しかし、上記のようなパケット伝送方法では、ECN閾値を調整すると、ネットワークデバイスは、当該調整されたECN閾値に基づいて、すべてのデータフローに対して輻輳通知を行う。これがマウスフローに対して大きなダメージを与えており、この輻輳制御メカニズムが不公平である。
【発明の概要】
【0006】
本願は、マウスフローに対するダメージを低減して輻輳制御の公平性を向上させるとともに、ネットワーク帯域幅の利用率を向上させるために、輻輳処理方法、装置、ネットワークデバイス及び記憶媒体を提供することを目的とする。具体的な技術的手段は、以下の通りである。
【0007】
第1態様として、本願の実施形態は、輻輳処理方法を提供し、前記方法は、
対象ポートを介して輻輳マークを持っている第1パケットを受信するステップと、
プリセット貪欲フローテーブルから、前記第1パケットが持っている対象フロー情報と前記対象ポートの標識とを含む対象エントリーを検索し、ここで、前記プリセット貪欲フローテーブルにはプリセットトラフィック閾値より大きいトラフィックを有するデータフローのフロー情報と、当該フロー情報に対応するデータフローを受信するポートの標識と、が格納されているステップと、
前記対象エントリーを見つけた場合、前記第1パケットを処理するステップと、
前記対象エントリーを見つけなかった場合、前記第1パケットが持っている前記輻輳マークを除去して第2パケットを取得し、前記第2パケットを処理するステップと、を含む。
【0008】
第2態様として、本願の実施形態は、輻輳処理装置を提供し、前記装置は、
対象ポートを介して輻輳マークを持っている第1パケットを受信する受信手段と、
プリセット貪欲フローテーブルから、前記第1パケットが持っている対象フロー情報と前記対象ポートの標識とを含む対象エントリーを検索し、ここで、前記プリセット貪欲フローテーブルにはプリセットトラフィック閾値より大きいトラフィックを有するデータフローのフロー情報と、当該フロー情報に対応するデータフローを受信するポートの標識と、が格納されている検索手段と、
前記対象エントリーを見つけた場合、前記第1パケットを処理し、前記対象エントリーを見つけなかった場合、前記第1パケットが持っている前記輻輳マークを除去して第2パケットを取得し、前記第2パケットを処理する処理手段と、を備える。
【0009】
第3態様として、本願の実施形態は、プロセッサーと機械可読記憶媒体とを備えるネットワークデバイスを提供し、前記機械可読記憶媒体には前記プロセッサーにより実行できる機械実行可能な命令が格納されており、前記プロセッサーは、前記機械実行可能な命令を実行すると、
対象ポートを介して輻輳マークを持っている第1パケットを受信するステップと、
プリセット貪欲フローテーブルから、前記第1パケットが持っている対象フロー情報と前記対象ポートの標識とを含む対象エントリーを検索し、ここで、前記プリセット貪欲フローテーブルにはプリセットトラフィック閾値より大きいトラフィックを有するデータフローのフロー情報と、当該フロー情報に対応するデータフローを受信するポートの標識と、が格納されているステップと、
前記対象エントリーを見つけた場合、前記第1パケットを処理し、前記対象エントリーを見つけなかった場合、前記第1パケットが持っている前記輻輳マークを除去して第2パケットを取得し、前記第2パケットを処理するステップと、を実現する。
【0010】
第4態様として、本願の実施形態は、機械可読記憶媒体を提供し、前記機械可読記憶媒体にはコンピュータプログラムが格納されており、前記コンピュータプログラムがプロセッサーにより実行されると、上記のいずれか1項に記載の方法のステップを実現する。
【0011】
第5態様として、本願の実施形態は、コンピュータプログラムを提供し、前記コンピュータプログラムがプロセッサーにより実行されると、上記のいずれか1項に記載の方法のステップを実現する。
【0012】
本願の実施形態により提供される技術的手段において、ネットワークにおける貪欲フローを認識するための貪欲フローテーブルを予め設定することで、貪欲フローの輻輳制御を維持するとともに、非貪欲フローの輻輳制御を解除することにより、マウスフローに対するダメージを低減して輻輳制御の公平性を向上する。
【0013】
また、本願の実施形態は、ECN閾値でトリガした後の処理に関する技術的手段を提供し、ECN閾値より大きい貪欲フローを独立して認識し、貪欲フローの輻輳制御を維持することができるので、ECN閾値を大きく設定しても、本願の実施形態における輻輳の処理に対する影響は大きくない。したがって、本願の実施形態により提供される技術的手段は、より大きいECN閾値を利用して輻輳制御を行うことができ、それにより、マウスフローに対するダメージを低減して輻輳制御の公平性を向上させるとともに、ネットワーク帯域幅の利用率を効果的に向上させることができる。
【図面の簡単な説明】
【0014】
以下、本願の実施形態の技術案及び従来技術の技術案をより明瞭に説明するために、実施形態及び従来技術に必要な図面を簡単に説明する。なお、下記に記載の図面は本願の一部の実施形態によりあり、当業者であれば、創造的な労力を必要とせずに、これらの図面に基づいて他の図面を得ることができる。
【0015】
【
図1】
図1は、本願の実施形態により提供されるロスレス伝送システムの模式図である。
【
図2】
図2は、
図1に示すロスレス伝送システムの詳細な模式図である。
【
図3】
図3は、本願の実施形態により提供されるコントロールプレーンにおける監視モジュールの情報処理方法のプロセスの模式図である。
【
図4】
図4は、
図3に示す監視モジュール側におけるCGF情報収集プロセスの模式図である。
【
図5】
図5は、
図3に示す監視モジュール側におけるCF情報収集プロセスの模式図である。
【
図6】
図6は、
図3に示す監視モジュール側における監視プロセスの模式図である。
【
図7】
図7は、
図3に示すコアモジュール側におけるCGF情報収集プロセスの模式図である。
【
図8】
図8は、
図3に示すコアモジュール側におけるGF情報収集プロセスの模式図である。
【
図9】
図9は、
図3に示すコアモジュール側における監視プロセスの模式図である。
【
図10】
図10は、本願の実施形態により提供される情報収集プロセスの模式図である。
【
図11】
図11は、本願の実施形態により提供されるコントロールプレーンにおける監視モジュールの模式図である。
【
図12】
図12は、本願の実施形態により提供されるデータプレーンにおけるコアモジュールの模式図である。
【
図13】
図13は、本願の実施形態により提供されるコアモジュールの物理的状態間の遷移の模式図である。
【
図14】
図14は、本願の実施形態により提供されるデータ構造の遷移の模式図である。
【
図15】
図15は、本願の実施形態により提供される輻輳処理方法の第1種のプロセスの模式図である。
【
図16】
図16は、本願の実施形態により提供される輻輳処理方法の第2種のプロセスの模式図である。
【
図17】
図17は、本願の実施形態により提供されるプリセット貪欲フローの構築方法の第1種のプロセスの模式図である。
【
図18】
図18は、本願の実施形態により提供されるプリセット貪欲フローの構築方法の第2種のプロセスの模式図である。
【
図22】
図22は、本願の実施形態により提供される対象候補フロー情報に対応するデータフローのトラフィック統計方法の第1種のプロセスの模式図である。
【
図23】
図23は、本願の実施形態により提供される対象候補フロー情報に対応するデータフローのトラフィック統計方法の第2種のプロセスの模式図である。
【
図24】
図24は、本願の実施形態により提供される対象候補フロー情報に対応するデータフローのトラフィック統計方法の第3種のプロセスの模式図である。
【
図25】
図25は、本願の実施形態により提供される対象候補フロー情報に対応するデータフローのトラフィック統計方法の第4種のプロセスの模式図である。
【
図26】
図26は、本願の実施形態により提供されるデータ処理装置の模式図である。
【
図27】
図27は、本願の実施形態により提供されるネットワークデバイスの模式図である。
【発明を実施するための形態】
【0016】
本願の目的、技術案及びメリットをより明確にするために、以下、図面を参照し実施形態と合わせて、本願についてより詳細に説明する。説明された実施形態は、すべての実施形態ではなく、本願の実施形態の一部にすぎないことが明らかである。当業者によって本願の実施形態に基づいて創造的な労力を必要とせずに得られる他のすべての実施形態は、本願の保護範囲に含まれている。
【0017】
以下、容易に理解するために、本願の実施形態での用語について説明する。
【0018】
エレファントフローとは、ネットワークリンクを介して大量且つ継続的なデータ転送を行うデータフローである。
【0019】
マウスフローとは、ネットワークリンクを介して少量且つ短時間のデータ転送を行うデータフローである。
【0020】
貪欲フロー(Greedy Flow,GF)とは、そのトラフィックがプリセットトラフィック閾値より大きいデータフローである。本願の実施形態において、貪欲フローがエレファントフローであると理解されてもよい。非貪欲フローがマウスフローであると理解されてもよい。
【0021】
貪欲フローテーブル(Greedy Flow Table,GFT)とは、エントリーごとに1つのGFの情報を格納するテーブルである。
【0022】
候補貪欲フロー(Candidate of Greedy Flow,CGF)とは、そのトラフィックがプリセット候補トラフィック閾値より大きいデータフローである。候補貪欲フローは、貪欲フローの可能性があるデータフローである。
【0023】
候補貪欲フローテーブル(Candidate of Greedy Flow Table、CGFT)とは、エントリーごとに1つのCGFの情報を格納するテーブルである。
【0024】
イーサネット上のパケットのロスレス伝送は、優先度フロー制御(Priority Flow Control,PFC)に基づいて実現される。ロスレスネットワークアーキテクチャでは、各ポートのバッファエリアに8つの異なる優先度のキューが設定され、各キューに対応するPFC閾値が設定される。キューの優先度は実際の需要に応じて設定することができる。例えば、キューの優先度は、802.1pプロトコルに基づいた優先度であってもよいし、コメント募集(Request For Comments,RFC)2474に基づいて定義された優先度であってもよい。
【0025】
ソースサーバは、ネットワークデバイスを介して対象サーバにパケットを送信する。ソースサーバによって送信されたパケットが所属するデータフローのレートが、ネットワークデバイスの処理レートよりも大きい場合、ネットワークデバイスは、パケットを受信するポートが対応するキューにパケットをキャッシュする。
【0026】
1つのキュー(例えば、キュー1)にキャッシュされたパケットのデータ量がプリセットPFC閾値以上である場合、ネットワークデバイスは、ソースサーバがキュー1の優先度に対応するパケットのネットワークデバイスへの送信を一時的に停止させるようにソースサーバへ輻輳通知パケットを送信する。
【0027】
1つのキュー(例えば、キュー1)にキャッシュされたパケットのデータ量がプリセットPFC閾値未満である場合、ネットワークデバイスは、ソースサーバがキュー1の優先度に対応するパケットをネットワークデバイスに送信させるようにソースサーバへ輻輳解除パケットを送信する。
【0028】
この逆圧方式により、パケットのロスレス転送を実現し、パケットロスの問題を解決することができる。この場合、各キューはロスレスキューである。ただし、1つのキューにキャッシュされたパケットのデータ量がプリセットPFC閾値以上である場合、ネットワークデバイス内には既に輻輳が発生していることを示す。この輻輳も早急に解決すべき問題である。
【0029】
現在、輻輳を緩和するために、ネットワークデバイスにECN閾値、すなわちプリセットECN閾値が設定される。このプリセットECN閾値は、プリセットPFC閾値よりも小さい。
【0030】
1つのキュー(例えばキュー1)について、キュー1にキャッシュされたパケットのデータ量がプリセットECN閾値に達した場合、ネットワークデバイスは、キュー1内のプリセットECN閾値より大きい各パケットにECNマークを付与し、パケットnがキャッシュされる際にプリセットECN閾値に達すると、パケットn+1~パケットXにそれぞれECNマークを付与し、ECNパケットを取得し、ECNパケットを対象サーバに送信する。
【0031】
対象サーバはECNパケットを受信した後、ソースサーバにCNPをフィードバックする。
【0032】
ソースサーバは、CNPを受信した後、キュー1の優先度に対応するパケットのレートを下げることで、ネットワークデバイスの輻輳がさらに悪化することを防止するとともに、ネットワークデバイスの輻輳がさらに悪化することによる、キュー1にキャッシュされたパケットのデータ量がプリセットECN閾値に達してネットワーク全体がキュー1の優先度に対応するパケットの送信を停止することを防止する。
【0033】
上記の輻輳緩和方法において、輻輳を検知してからネットワークデバイスがn個のパケットを送信した後にECNパケットを送信するため、キャッシュ輻輳が発生したことを対象のサーバに直ちに通知できなくなる。
【0034】
キャッシュ輻輳が発生したことを対象サーバに直ちに通知できるように、上記の輻輳解決方法を改善した。具体的には、輻輳が検知されると、ネットワークデバイスは、キュー内の各パケットにECNマークを付与する。これにより、キャッシュ輻輳が発生したことを対象サーバに事前に通知することができる。この方法は高速ECNと呼ばれる。
【0035】
また、上記の輻輳緩和方法において、対象サーバとソースサーバ間の経路が長すぎ、すなわちCNPを転送する経路が長すぎる場合、ソースサーバがパケットを送信するレートを直ちに下げることができない。この結果、キューにキャッシュされたパケットのデータ量がプリセットPFC閾値に達し、ソースサーバはパケットの送信を停止する。
【0036】
このような状況に対する改善方法は以下の通りである。ネットワークデバイスがパケットを転送する際に、フローエントリーにパケットが所属するデータフローのフロー情報を記録し、ECNパケットを取得すると、学習したフロー情報に基づいて対応するCNPを構築し、CNPをソースサーバに送信する。このとき、ソースサーバと対象サーバとの間に位置するネットワークデバイスからソースサーバにCNPが送信され、CNPの送信経路が短くなる。これにより、ソースサーバがパケットを送信するレートを直ちに調整するため、ネットワークデバイスのバッファエリアの輻輳を緩和することができる。この方法は高速CNPと呼ばれる。
【0037】
ロスレスイーサ転送サービスの品質を可能な限り向上させるために、現在、ECN閾値を動的に調整する方法を採用して輻輳問題を解決する。この方法において、ネットワークデバイスのコントロールプレーンはトラフィックの特徴を収集し、ファンインポートとファンアウトポートの比率、及びエレファントフローとマウスフローのトラフィックの比率に基づいて、人工知能(Artificial Intelligence,AI)アルゴリズムを利用して、ECN閾値を特定し、ネットワークデバイスの転送プレーンに配置し、それにより、ロスレスキューのECN閾値を動的に調整することを実現する。ファンインポートの数が多いほど、ネットワークデバイスのバッファエリアにかかるバーストストレスが高くなる。
【0038】
この方法は理論上で、ネットワークデバイスにキャッシュされたパケットのデータ量がPFC閾値に達することを効果的に防止することができ、遅延に敏感なマウスフローとスループットに敏感なエレファントフローの帯域幅の需要を可能な限り満たす。
【0039】
しかし、ネットワークにはマイクロバーストの場合がある。マイクロバーストのデータフローの瞬時レートがネットワークデバイスの転送能力を超えると、ネットワークデバイスは、後で送信するためにマイクロバーストのパケットをキャッシュする。
【0040】
例えば、ポート1とポート2がそれぞれ10ギガビット(Gigabit,G)のビットレート(Bit Per Second,bps)で5メガバイト(Mbyte,MB)のデータをポート3に送信すると、合計送信レートは10+10=20Gbpsとなる。ネットワークデバイスのバッファエリアが1MBのみを有する場合、キャッシュ容量が不足するため、4MBのデータが破棄されるか、逆圧縮される場合がある。
【0041】
フレームギャップ、プリアンブル、フレームチェックおよびパケットヘッダなどのコストデータを考慮しない場合、このバーストは、5MB/10Gbps=4msで継続する。このバーストが継続する時間が数ミリ秒と短いため、コントロールプレーンがこのようなデータフローを認識することは、ほぼ不可能である。
【0042】
ネットワークデバイスはミリ秒レベルのデータフローを統計することが困難であり、その原因は以下の通りである。
(1)ネットワークデバイスは、ポートが多いため、高密度の検索をサポートすることができない。
(2)従来技術には制限があり、高レートのパイプライン設計に対して、ファンインポートとファンアウトポート間で統計記憶手段を共有することができないため、データフローによるキャッシュ容量の消費を自発的に検知できない、
(3)データフローが多いため、輻輳にさらに役に立つデータフローをマクロ的に認識することが困難である。
【0043】
ますます流行っている25G/40G/50G/100G/400Gポートに対して、コントロールプレーンからマイクロバーストのエレファントフローを認識することは更に困難になる。一般的なネットワークフロー(netstream)の統計方法を採用すると、コントロールプレーンはマイクロバーストの占有帯域幅が大きいデータフローを認識しにくい。
【0044】
上記から分かるように、ロスレスネットワークについて、PFCがあるためパケットロスがないことが実現可能であり、それにより、技術的手段は、いずれもパケットロスがないように確保しつつ、帯域幅の利用率を高め、ネットワークデバイスの輻輳を緩和するとともに、マウスフローへのダメージを低減することを解決する。ただし、データフローの複雑さのため、帯域幅の高利用率を確保しながら輻輳を完全に解消する方法はない。
【0045】
これに対して、発明者は鋭意に検討し、現在の各種改善方法には次のような問題点があることを発見した。
1.輻輳通知が行われると、すべての共通キューのデータフローが輻輳通知を送信するため、すべての共通キューのデータフローに対して輻輳制御を行う。このように、自身のトラフィックが少ないデータフロー(すなわち、マウスフロー)に対しては非常に不公平である。輻輳の問題を解決するとともに、エレファントフローのみに対して輻輳制御を行うことが期待されている。
2.ファンインポートとファンアウトポートがN:1である場合、マイクロバーストのエレファントフローをマクロ的に認識しにくく、しかもコントロールプレーンでの認識は非常に粗放であるため、エレファントフローとマウスフローのトラフィックの比率に基づいて、ロスレスキューのECN閾値を動的に調整することは、あるアプリケーションシナリオにおいて実際の効果を有さない。
【0046】
上記の2点目について、輻輳を解決するためにデータプレーンで処理することを容易に想到する。しかし、以前には技術的な制限があるので、それに関する技術案もない。技術の発展に伴い、輻輳を解決するためにデータプレーンで処理することが可能になったが、大量の制限と技術的課題を解決する必要がある。例えば、データプレーンで関連アルゴリズムとプロセスを実現する場合、パイプラインのインターロックによる伝送の効率が低下することを防止するために、ハードウェアの特徴を十分に考慮する必要がある。データプレーンで複雑すぎるアルゴリズムとプロセスを実現すると、リソースが過剰に消費される可能性もある。そのため、現在にも体系的な解決策がない。
【0047】
図1に示すように、本願の実施形態は、マイクロバーストが発生した場合、マウスフローに対するダメージを低減して輻輳制御の公平性を向上させるとともに、ネットワーク帯域幅の利用率を向上させるために、ロスレス伝送システムを提供する。このロスレス伝送システムは、コントロールプレーン11とデータプレーン12とを備える。ここで、コントロールプレーン11は、監視モジュール111と制御モジュール112とを備える。データプレーン12は、コアモジュール121と転送モジュール122とを備える。
【0048】
監視モジュール111は、コアモジュール121と連携して、対応するソフトウェア機能を実現するために用いられる。
【0049】
コアモジュール121は、ハードウェアとソフトウェアにより実現され、転送プレーンの重負荷下でのGFを認識し、GFのフロー情報をGFT内に格納すること、データフローのCNPを監視して受信し、対応するフロー情報を解析し、さらにGFT内に解析されたフロー情報を検索し、検索が成功しない場合、当該パケットの輻輳マークをクリアし、検索が成功した場合、当該パケットをそのままにし、その後、転送テーブルを検索し、当該パケットを転送する。
【0050】
コントロールモジュール112は、コントロールプレーン11内の監視モジュール111などのモジュールを制御し、データプレーン12内のコアモジュール121及び転送モジュール122などのモジュールを制御するために用いられる。コントロールモジュール112のコントロールロジックの詳細は、ユーザにより設定されることができ、ここでは限定されない。本願の実施形態において、コントロールプレーン11は、複数のコントロールモジュール112を備えることができるが、ここでは、1つのコントロールモジュール112を例として説明し、限定するものではない。
【0051】
転送モジュール122は、パケットを転送するための複数のポートを有する。本願の実施形態において、データプレーン12は、複数の転送モジュール122を備えることができるが、ここでは、1つの転送モジュール122を例として説明し、限定するものではない。
【0052】
本願の実施形態において、コントロールプレーンは完全に独立したサーバであってもよく、データプレーンはスイッチデバイスであってもよい。
【0053】
本願の実施形態において、ロスレス伝送システムは、ネットワークデバイスの高度に抽象化されたものであってもよい。
【0054】
例えば、ネットワークデバイスがモジュール型ルータやスイッチデバイスである場合、上記コントロールプレーン11はネットワークデバイスのメインボードに相当し、転送モジュールはラインカードに相当し、複数のラインカードはデータプレーン12に構成し、コントロールプレーン11とデータプレーン12とを接続するFabricはネットワークボードに相当する。
【0055】
ネットワークデバイスがボックス型デバイスである場合、上記コントロールプレーン11はネットワークデバイスのメインボードに相当し、転送モジュールはラインカードに相当し、複数のラインカードはデータプレーン12に構成し、コントロールプレーン11とデータプレーン12とを接続するFabricはスイッチチップであってもよく、またはFabricはポイントツーポイントで相互接続のバスであってもよい。
【0056】
特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)のチップの処理能力を利用することで高トラフィック情報の収集を行うことができるが、ASICチップ内にGFの認識を実現することは非常に困難である。その主な原因として、ハードウェアのパイプラインがソフトウェアほど柔軟ではなく、資源制約があるためである。ASICチップが10Kレベルさらに100Kレベルのデータフローに対してGFを認識すべきである場合、念入りな設計は必要がある。したがって、本願の実施形態において、GFを収集する際に、まず、ハードウェアの特性に適合した方法でCGFを認識するが、このような方式は、大きな誤差を有する。CGFを認識した後、CGFを範囲としてさらにGFを認識する。
【0057】
従来のネットワークデバイスの多くは分散型モジュール型デバイスであるため、ネットワークデバイスには複数のラインカードを備え、各ラインカードには複数のポートがあり、シングルポートの転送量が非常に大きい。したがって、データプレーンでGFを認識することは非常に困難であり、そして、フレーム全体のGFを同時に認識することは、ほとんど不可能である。
【0058】
したがって、本願の実施形態により提供される技術的手段の基本的な主旨として、コアモジュール121は個別の処理手段(ラインカードと類似)としてロスレス伝送システムのFabricに接続されており、本願の実施形態により提供される技術的手段における監視モジュール111は、GFを認識するために、ネットワークデバイスの物理ポートを単位として、ローテーションで各物理ポートから送信されたデータフローをコアモジュール121にミラーリングする、ことである。認識されたGFに基づいてGFTを形成し、その後、GFTに基づいてロスレス伝送システム全体において受信されたCNPを監視し、CNPに対応するデータフローがGFである場合、最初のCNPを宛先アドレスに転送し、CNPに対応するデータフローがGFではない場合、CNP内の輻輳マークを除去した後に宛先アドレスに転送する。CNPの数が少ないため、すべての物理ポートを監視することができる。
【0059】
本願の実施形態により提供される技術的手段は、以下のシナリオに適用される。
1.監視されるデータフローの多いは、長い時間で存在するデータフローである。これはECN/CNPメカニズムが機能する前提であり、本願の実施形態により提供される技術的手段も適用する。
2.各物理ポートに対するGF認識の間に間隔があるが、AIアルゴリズム又はその他の最適化対策は、いずれも変化中のデータフローにおける変化しないという固有の特性に基づいて機能する。本願の実施形態により提供される技術的手段も同様であるため、GFTが存在すると、本願の実施形態により提供される技術的手段は役割を果たす。PFCの基本的な作用によりロスレスを実現することができるため、短時間内に作用しない隙間が存在しても、壊滅的な結果を招くことはない。しかし、本願の実施形態により提供される技術的手段はオンラインで実行された後、CNPのフロー制御の正確性を維持して最適化することができる。
3、GFを認識するプロセスは継続的且つ周期に行うため、ネットワークトポロジの変更などに自動的に適応できる。
4.本願の実施形態により提供される技術的手段は、ポートごとにGFを認識するので、転送量が大きいネットワークデバイスに適用することができ、広く適用されている。
5、多くの場合、輻輳は複数のデータフローが共役したものであるが、最も必要なのはGFの一部のみを制御する必要があり、すべてのGFを制御しなくても効果が得られる。本願の実施形態により提供される技術的手段は、オンラインで継続的に実行され、自動的に調整することができるため、実行時間が長くなるとともに効果がよくなる。
6、多数の小トラフィックのデータフロー(すなわち、マウスフロー)を有効に確保し、より公平であることを確保することができ、マイクロバーストにおけるエレファントフローの伝送ピークを削ることで、さらにネットワークの転送量を高め、ネットワーク帯域幅の利用率を高めることができる。
【0060】
本願の実施形態により提供される技術方案は、主に以下の問題を考慮している。
1.高トラフィックのこと。従来のネットワークデバイスのポートは、シングルポートの転送容量が400Gであるため、処理の効率を優先に考慮しなければならない。
2.ネットワークデバイス中のデータフローが多くて、ハードウェアリソースの制限を十分に考慮しなければならないこと。
3.マイクロバースト中の帯域幅の占有が大きいデータフロー(すなわち、エレファントフロー)を認識できる必要があること。
4.データフローの数が多い環境に適用できる必要があること。
5.ハードウェアリソースを再利用することができ、リソース回収のアルゴリズムは簡単であること。
6.ネットワークトポロジの変更などを自働的に適応することができること。
7.一部のデータフローを過度に制御しないように、データフローに対して選択的なフロー制御を行うこと。
【0061】
上述した適用するシナリオ及び考慮された問題に基づいて、本願の実施形態により提供される技術的手段は、以下の特徴を有する。
1.コントロールプレーンの監視モジュールとデータプレーンのコアモジュールとの協力によって実現し、前者はソフトウェアモジュールの形式で具現して、後者はソフトウェアとハードウェアとの組み合わせにより実現されたサブシステムである。
2.コントロールプレーンの監視モジュールは、ロスレス伝送システムの配置とロスレス伝送システムの動作の物理的状態の遷移とを行い、ロスレス伝送システムの配置とロスレス伝送システムの動作の物理的状態の遷移とを周期的に繰り返す。
3.ロスレス伝送システムは実行時に、アイドル状態、情報収集状態と監視状態である3つの物理的状態に分ける。
4.情報収集状態は、CGF情報収集状態とGF情報収集状態とを含む。
5.コントロールプレーンでは、GF情報を周期的に収集して監視し、本願の実施形態により提供される技術的手段によれば、ネットワークトポロジおよびデータフローなどの動的な変化に自己適応することができる。
6.データプレーンのコアモジュールにより情報の収集および解析を実現し、マイクロバースト中のGFをより良く認識することができる。
7.実現方法は広く適用されており、少し拡張すると、ルータやスイッチ装置などのネットワークデバイスが輻輳の位置を特定する解析ツールとして用いられ、ネットワークの最適化をサポートするために用いられる。
8.実現方法はデータプレーンのハードウェアリソースの制約を十分に考慮し、ハードウェアリソースを多重化して異なる機能を実現し、大規模なボックス型デバイスの応用を最大限にサポートすることができる。
9.コントロールプレーンの監視モジュールには、GFの収集が必要な送信ポート情報を格納する監視ポート情報テーブルを設けており、このテーブルにおけるエントリーごとに送信ポート情報を格納する。この情報を利用して、ACL関連配置により、送信ポートのデータフローをデータプレーンのコアモジュールの情報収集入力ポートにミラーリングすることができる、
10.データプレーンのコアモジュールは、CGFT及びGFTを有する。
11.実現方法における新たに加入したコアモジュールは、カード挿入の形式でモジュール型デバイスのメインボードに挿入することができ、ボックス型デバイスのマザーボードに統合することもできる。
12.本願の実施形態により提供される技術的手段は絶対的な独立性を有するので、コントロールプレーンの監視モジュールは別個の装置として実装されてもよく、監視モジュールはネットワークコントローラなどの任意の場所に設けられてもよく、また、監視モジュールが依存する転送テーブルは各種の方法で取得されることができる。
【0062】
上述した本願の実施形態により提供される技術的手段の特徴に基づいて、本願の実施形態により提供されるロスレス伝送システムは、
図2に示されるように細分化され得ることができる。Fabricでは、独立したデータフローチャンネル(
図2に示す矢印付き点線)と制御フローチャンネル(
図2に示す矢印付き実線)を提供する。コントロールプレーンの監視モジュール111は、タイマー、コアコントロールモジュール、および監視ポート情報テーブルなどを含むことができる。データプレーンのコアモジュールは、プログラマブルスイッチチップ、中央処理装置(Central Processing Unit,CPU)およびランダムアクセスメモリ(Random Access Memory,RAM)などを含むことができる。RAMにはCGFT、GFT、転送テーブル(Forward,FWD)などが含まれる。ここで、CPUとプログラマブルスイッチチップとの間には、ピーシーアイエクスプレス(Peripheral Component Interconnect Express,PCIE)バスとXギガビットイーサネット(Gigabit Ethernet,XGE)ポートを介して通信することができる。ここで、XGEバスは10GE、40GE、50GE、100GE、400GEのポートなどを含む。
【0063】
図3に示すように、本願の実施形態は、上記のロスレス伝送システムに基づいて、コントロールプレーンの監視モジュールの情報処理方法を提供し、この方法は以下のステップを含む。
【0064】
ステップS31:データプレーンとコントロールプレーンを初期化する。
【0065】
後続の輻輳処理の精度を向上させるために、監視モジュールは、データプレーンおよびコントロールプレーンの各モジュールを初期化する。この初期化の配置は、具体的に、コントロールプレーンの監視モジュールおよびデータプレーンのコアモジュールを初期化する配置を含むことができる。
【0066】
ステップS32:CGF情報の収集プロセスを実行する。
【0067】
本願の実施形態において、監視モジュールはデータプレーンのコアモジュールと連携してCGF情報を収集し、その後にCGF情報からGF情報を特定する。
【0068】
ステップS33:ユーザにより入力された停止操作を受信したかどうかを判定する。停止操作を受信しなかった場合、ステップS34を実行する。停止操作を受信した場合、今回の処理を終了する。
【0069】
監視モジュールは、CGF情報の収集が完了した後に、ユーザが停止操作を入力したかどうかをリアルタイムに監視する。停止操作が監視された場合、監視モジュールは、ユーザがGF情報を更新する必要がないと判定し、今回の処理を終了する。
【0070】
停止操作が監視されなかった場合、監視モジュールは、習ったGF情報を更新して輻輳を緩和する効果を高めるように処理プロセスを続けて実行する。
【0071】
ステップS34:GF情報の収集プロセスを実行する。
【0072】
ステップS35:ユーザにより入力された停止操作を受信したかどうかを判定する。停止操作を受信しなかった場合、ステップS36を実行する。停止操作を受信した場合、今回の処理を終了する。
【0073】
監視モジュールは、GF情報の収集が完了した後に、ユーザが停止操作を入力したかどうかをリアルタイムに監視する。停止操作が監視された場合、監視モジュールは、ユーザがGF情報を更新する必要がないと判定し、今回の処理を終了する。
【0074】
停止操作が監視されなかった場合、監視モジュールは、習ったGF情報を更新して輻輳を緩和する効果を高めるように処理プロセスを続けて実行する。
【0075】
ステップS36:監視プロセスを実行する。
【0076】
監視モジュールは、データプレーンによって転送されたデータフローを監視し、データフローにおけるエレファントフローのみに対して輻輳制御を行うように、データフローにおけるエレファントフローを認識する。
【0077】
ステップS37:ユーザにより入力された停止操作を受信したかどうかを判定する。停止操作を受信しなかった場合、ステップS32に戻って実行する。停止操作を受信した場合、今回の処理を終了する。
【0078】
このように、監視モジュールは、上記の処理プロセスを繰り返し実行し、習ったGF情報を常として更新し、輻輳を緩和する効果を高める。
【0079】
本願の一実施形態において、上記のステップS31の初期化の配置は、以下のプロセスを含むことができる。
a)コントロールプレーンのリソース割り当てと初期化、および物理ポートの関連配置を行う。
b)コントロールプレーンの監視モジュールとデータプレーンのコアモジュールは、パケット、制御パケット、および送信完了後のフィードバックされたメッセージのフォーマットを共同に約束する。
c)ロスレス伝送システムにおける監視対象である物理ポートに応じて、コントロールプレーンの監視モジュールは監視ポート情報テーブルを初期化し、ロスレス伝送システムにおける物理ポートが変更されたときに監視ポート情報テーブルを同時として更新する。
d)コントロールプレーンの監視モジュールはデータプレーンのコアモジュールに配置管理パケットを送信し、データプレーンのコアモジュールを配置する。
e)データプレーンのコアモジュールは、配置管理パケットを受信し、データプレーンのコアモジュールのリソースを解析して割り当て、コアモジュールのリソースを初期化する。ここで、初期化されたリソースは、転送テーブル、CGFT、GFT、タイマー、および物理的状態などを含むが、これらに限定されない。
f)データプレーンのコアモジュールのリソースの初期化が完了した後、コアモジュールは約束された形で初期化完了状態をコントロールプレーンの監視モジュールに提示し、例えば、初期化完了のメッセージを送信することである。
g)ロスレス伝送システム全体がアイドル状態になった。
h)コントロールプレーンの監視モジュールはデータプレーンのコアモジュールの物理的状態を定期的に検索し、データプレーンのコアモジュールはそれに応じた応答を行い、コントロールプレーンの監視モジュールは応答されたコアモジュールの物理的状態をクエリする。
【0080】
本願の実施形態において、コントロールプレーンおよびデータプレーンは専用バスで接続されてもよい。監視モジュールは、専用バスを介してコアモジュールに対して上記のような初期化配置を行うことができる。本願の実施形態において、監視モジュールは、他の方法を利用して初期化配置を実現してもよいが、これに対して限定されない。
【0081】
初期化配置が完了した後、コントロールプレーンの監視モジュールとデータプレーンのコアモジュールとが連携して、CGF情報及びGF情報の収集を実現する。
【0082】
本願の一実施形態において、
図4に示すように、上記のステップS32におけるCGF情報を収集することは、以下のプロセスを含むことができる。
【0083】
ステップS321:外部インタラクティブポートを介してCGF情報の収集に関連するプログラムのコンパイル結果ファイルを取得する。ここで、プログラムのコンパイル結果ファイルはP4プログラムのコンパイル結果ファイルであってもよい。区別の便宜上、当該プログラムのコンパイル結果ファイルはP4Infolと呼ばれる。これに対して限定されない。このファイルP4Info1には、CGF情報の収集を完了するために必要な関連情報が含まれる。この関連情報は、P4プログラムコンパイルの結果であり、CGF情報の収集を完了するために、プログラマブルスイッチチップを配置するために用いられる。
【0084】
ステップS322:データプレーンのコアモジュールを配置状態にするように通知し、データプレーンが対応する状態になった応答をクエリし、待つ。
【0085】
監視モジュールは、ファイルP4Info1を取得した後、CGF情報の収集プロセスを実行する必要があると判定したので、コアモジュールに配置状態メッセージを配る。コアモジュールは、配置状態メッセージに基づいて、コアモジュールの物理的状態を配置状態に設定し、コアモジュールの物理的状態が配置状態になったことを示すメッセージを監視モジュールにフィードバックする。監視モジュールは、コアモジュールの物理的状態が配置状態になったことを示すメッセージを受信した後、データプレーンが配置状態になったことを判定し、データプレーンは対応する配置を行うことができる。
【0086】
ステップS323:ファイルP4Info1をデータプレーンのコアモジュールにダウンロードし、データプレーンが対応する状態になった応答をクエリし、待つ。
【0087】
監視モジュールは、コアモジュールの物理的状態が配置状態になったと判定した後、ファイルP4Info1をデータプレーンのコアモジュールにダウンロードする。コアモジュールは、ファイルP4Info1をプログラマブルスイッチチップにダウンロードした後、コアモジュールの物理的状態をアイドル状態に設定し、コアモジュールの物理的状態がアイドル状態になったことを示すメッセージを監視モジュールにフィードバックする。監視モジュールは、コアモジュールの物理的状態がアイドル状態になったことを示すメッセージを受信した後、データプレーンの配置が完了してアイドル状態になったことを判定し、データプレーンは情報の収集などの他の処理を行うことができる。
【0088】
ステップS324:監視ポート情報テーブルに対するトラバースが完了したかどうかを判定する。トラバースが完了した場合、処理を終了し、トラバースが完了しなかった場合、ステップS325を実行する。
【0089】
本願の実施形態において、監視ポート情報テーブルにおける各エントリーに対して次のステップS325~S328の処理を行う。
【0090】
監視モジュールは、監視ポート情報テーブルにおけるエントリーを一括して処理することができ、それとともに、複数のエントリーが示す送信ポートに対して、次のステップS325~S328の処理を実行することができる。また、監視モジュールは、監視ポート情報テーブルにおける各エントリーを逐次処理し、各エントリーが示す送信ポートに対して、次のステップS325~S328の処理を個別に実行することができる。
【0091】
具体的な処理方法は、データプレーンにおける情報の収集を実行するモジュールの処理能力と、当該モジュールに案内するチャネルの帯域幅に応じて決定することができる。
【0092】
ステップS325:監視ポート情報テーブルにおけるエントリーの情報を使用して、送信ポートのデータフローをデータプレーンのコアモジュールにミラーリングするように監視された送信ポートを配置する。
【0093】
ステップS326:収集するCGF情報のポート情報をデータプレーンのコアモジュールに配る。
【0094】
監視モジュールがポート情報をコアモジュールに配った後、コアモジュールは物理的状態を情報収集状態に設定し、そしてプログラマブルスイッチチップにおける収集結果が格納されているレジスタをクリアし、CGFTをクリアし、レジスタRegToTBを配置する。レジスタRegToTBは、認識されたエレファントフローのトラフィック閾値を格納するために用いられる。
【0095】
本願の実施形態において、コアモジュールの物理的状態は、データプレーンの物理的状態である。
【0096】
コアモジュールがレジスタRegToTBを配置した後、CGF情報の収集を開始する。
【0097】
ステップS327:現在のポート情報の収集が完了したかどうかを検出する。収集が完了しなかった場合、ステップS327を繰り返し実行し、収集が完了した場合、ステップS328を実行する。
【0098】
ステップS328:現在のポートの案内をキャンセルし、ステップS324に戻って実行する。
【0099】
監視モジュールは、現在のポート情報の収集が完了していないこと、すなわち、現在のポートのCGF情報の収集が完了していないことを検出すると、ステップS327を再実行し、現在のポート情報の収集が完了したか否かを検出する。
【0100】
監視モジュールは、現在のポート情報の収集が完了したこと、すなわち、現在のポートのCGF情報の収集が完了したことを検出すると、ステップS328を実行し、現在のポートの案内をキャンセルし、全てのポートのCGF情報の収集が完了するまで、次のポートのCGF情報を収集することができる。
【0101】
CGF情報の収集が完了した後、CGF情報の範囲内でGF情報を収集する。本願の一実施形態において、
図5に示すように、上記のステップS34におけるGF情報を収集することは、以下のプロセスを含むことができる。
【0102】
ステップS341:外部インタラクティブポートを介してGF情報の収集に関連するプログラムのコンパイル結果ファイルを取得する。ここで、プログラムのコンパイル結果ファイルはP4プログラムのコンパイル結果ファイルであってもよい。区別の便宜上、当該プログラムのコンパイル結果ファイルはP4Info2と呼ばれる。これに対して限定されない。このファイルP4Info2には、GF情報の収集を完了するために必要な関連情報が含まれる。この関連情報は、P4プログラムコンパイルの結果であり、GF情報の収集を完了するために、プログラマブルスイッチチップを配置するために用いられる。
【0103】
ステップS342:データプレーンのコアモジュールを配置状態にするように通知し、データプレーンが対応する状態になった応答をクエリし、待つ。詳細は上述したステップS322の説明を参照してもよい。
【0104】
ステップS343:ファイルP4Info2をデータプレーンのコアモジュールにダウンロードし、データプレーンが対応する状態になった応答をクエリし、待つ。詳細は上述したステップS323の説明を参照してもよい。
【0105】
ステップS344:監視ポート情報テーブルに対するトラバースが完了したかどうかを判定する。トラバースが完了した場合、処理を終了し、トラバースが完了しなかった場合、ステップS345を実行する。詳細は上述したステップS324の説明を参照してもよい。
【0106】
ステップS345:監視ポート情報テーブルにおけるエントリーの情報を使用して、送信ポートのデータフローをデータプレーンのコアモジュールにミラーリングするように監視された送信ポートを配置する。詳細は上述したステップS325の説明を参照してもよい。
【0107】
ステップS346:収集するGF情報のポート情報をデータプレーンのコアモジュールに配る。詳細は上述したステップS326の説明を参照してもよい。
【0108】
ステップS347:現在のポート情報の収集が完了したかどうかを検出する。収集が完了しなかった場合、ステップS347を繰り返し実行し、収集が完了した場合、ステップS348を実行する。詳細は上述したステップS327の説明を参照してもよい。
【0109】
ステップS348:現在のポートの案内をキャンセルし、ステップS344に戻って実行する。詳細は上述したステップS328の説明を参照してもよい。
【0110】
上記のステップにより、CGF情報の範囲内でGF情報の収集が完了した。
【0111】
GF情報の収集が完了した後、収集されたGF情報に基づいて、監視モジュールは監視プロセスを実行し、ネットワークにおけるエレファントフローに対する認識を実現し、エレファントフローに対して輻輳制御を行う。本願の一実施形態において、
図6に示すように、上記のステップS36における監視プロセスは以下のプロセスを含むことができる。
【0112】
ステップS361:外部インタラクティブポートを介してGF情報の収集に関連するプログラムのコンパイル結果ファイルを取得する。ここで、プログラムのコンパイル結果ファイルはP4プログラムのコンパイル結果ファイルであってもよい。区別の便宜上、当該プログラムのコンパイル結果ファイルはP4Info3と呼ばれる。これに対して限定されない。このファイルP4Info3には、GFの監視を完了するために必要な関連情報が含まれる。この関連情報は、P4プログラムコンパイルの結果であり、GFの監視を完了するために、プログラマブルスイッチチップを配置するために用いられる。
【0113】
ステップS362:データプレーンのコアモジュールを配置状態にするように通知し、データプレーンが対応する状態になった応答をクエリし、待つ。詳細は上述したステップS322の説明を参照してもよい。
【0114】
ステップS363:ファイルP4Info3をデータプレーンのコアモジュールにダウンロードし、データプレーンが対応する状態になった応答をクエリし、待つ。詳細は上述したステップS323の説明を参照してもよい。
【0115】
ステップS364:監視ポート情報テーブルに対するトラバースが完了したかどうかを判定する。トラバースが完了した場合、ステップS365を実行し、トラバースが完了しなかった場合、ステップS366を実行する。詳細は上述したステップS324の説明を参照してもよい。
【0116】
ステップS365:監視ポート情報テーブルにおけるエントリーの情報を使用して、送信ポートの輻輳パケットをデータプレーンのコアモジュールにミラーリングするように監視された送信ポートを配置する。
【0117】
ここで、輻輳パケットは、CPNとECNパケットを含んでもよい。
【0118】
本願の実施形態において、監視モジュールにはアクセスコントロールリスト(Access Control List,ACL)ルールが配置されてよく、受信された輻輳パケットをデータプレーンのコアモジュールの入力ポートに案内し、パケットに輻輳パケットを受信するポートの情報などの相応の情報を増やすことができる。また、監視モジュールは輻輳パケットをコアモジュールに案内するとともに、最初の輻輳パケットを廃棄することで、マウスフローの輻輳パケットが相応のデバイスに転送され、さらにマウスフローに対して輻輳制御を行い、マウスフローにダメージを与えることを防止する。
【0119】
上記のCNPは、ECN応答(ECN-Echo)マーク付きのパケットであってもよく、例えばECN-Echoマーク付きの伝送制御プロトコル(Transfer Control Protocol,TCP)確認(ACK)パケットである。ECNパケットは、ECNマーク付きのパケットであり、例えば、ECNマーク付きのTCPパケットである。
【0120】
ステップS366:データプレーンのコアモジュールをGF監視状態にするように通知し、データプレーンが対応する状態になった応答を待つ。
【0121】
具体的には、監視モジュールはコアモジュールにGF監視状態の通知を配る。コアモジュールは、当該通知を受信した後、自体の物理的状態を監視状態に設定し、コアモジュールの物理的状態が監視状態になったことを示すメッセージを監視モジュールにフィードバックする。
【0122】
その後、コアモジュールは、受信されたCNPおよび/またはECNパケットを監視し、受信されたCNPおよび/またはECNパケットのフロー情報をGF情報と一致させ、さらに対応する処理を実行する。
【0123】
ステップS367:データプレーンの監視が終了したかどうかを検出する。
【0124】
データプレーンの監視期間の長さは予め設定された。例えば、監視期間の長さは600秒(s)または700sなどである。
【0125】
監視モジュールは、データプレーンの監視が終了したかどうかをリアルタイムに検出する。データプレーンの監視が終了していないことが検出すると、ステップS367を繰り返し実行し、データプレーンの監視が終了するのを待つ。データプレーンの監視が終了したことが検出すると、ステップS368を実行する。
【0126】
ステップS368:監視ポート情報テーブルに対するトラバースが完了したかどうかを判定する。トラバースが完了した場合、処理を終了し、トラバースが完了しなかった場合、ステップS369を実行する。
【0127】
ステップS369:現在のポートの案内をキャンセルする。その後、ステップS368に戻って実行する。
【0128】
上記のステップS368および369により、監視モジュールが各ポートの案内をオフにすると、監視プロセスは終了する。
【0129】
本願の一実施形態において、ロスレス伝送システムの動作段階において、転送テーブルが変更されると、コントロールプレーンの監視モジュールは、変更された転送テーブルをデータプレーンのコアモジュールに配り、次の相応の情報収集を繰り返し実行することを待つ。
【0130】
本願の実施形態は、上記の監視モジュール側における処理プロセスに対応し、コアモジュール側における処理プロセスをさらに提供する。
【0131】
本願の一実施形態において、
図4に示す監視モジュールにおけるCGF情報の収集プロセスに対応し、本願の実施形態は、
図7に示すように、コアモジュール側における処理プロセスを提供し、この処理プロセスは、以下のステップを含むことができる。
【0132】
ステップS71:コントロールプレーンの監視モジュールにより配った配置状態メッセージを受信し、コアモジュールの物理的状態を配置状態に設定する。
【0133】
ステップS72:コントロールプレーンの監視モジュールにより配ったCGF情報の収集に関連するファイルP4Info1を受信し、ファイルP4Info1をプログラマブルスイッチチップにダウンロードする。
【0134】
ファイルP4Info1内の情報は、プログラマブルスイッチチップを配置するための配置情報であることが理解できる。
【0135】
ステップS73:コアモジュールの物理的状態をアイドル状態にする。
【0136】
ステップS74:CGF情報を収集するポートの情報を受信したかどうかを検出する。受信しなかった場合、ステップS74を繰り返し実行し、受信した場合、ステップS75を実行する。ここで、ポート情報は、監視モジュールが配った監視ポート情報デーブルにおけるエントリー情報である。
【0137】
ステップS75:コントロールプレーンがクエリするために、データプレーンのコアモジュールの物理的状態を情報収集状態に設定し、プログラマブルスイッチチップにおける収集結果が格納されているレジスタをクリアし、CGFTをクリアし、レジスタRegToTBを配置する。
【0138】
ステップS76:非周期的タイマーAperiodicTimerを起動し、周期的タイマーPeriodicTimerを起動する。
【0139】
ここで、AperiodicTimerとPeriodicTimerの有効期限は、ユーザが予め設定された収集時間の長さである。例えば、AperiodicTimerの有効期限は1sであり、PeriodicTimerは20ミリ秒(ms)であってもよく、この場合、1s内にCGFメッセージを50回収集することができる。
【0140】
ステップS77:AperiodicTimerの期限が切れたかどうかを検出する。期限が切れた場合、ステップS78を実行する。期限が切れていない場合、ステップS79を実行する。
【0141】
ステップS78:PeriodicTimerを停止し、ステップS73に戻って実行する。
【0142】
ステップS79:PeriodicTimerの期限が切れたかどうかを検出する。期限が切れていない場合、ステップS77に戻って実行する。期限が切れた場合、ステップS710を実行する。
【0143】
S710:コントロールチャネルを介してプログラマブルスイッチチップからCGF情報を取得し、CGFTとして更新する。
【0144】
好ましい実施形態において、ステップS710は、以下のステップに細分化され得る。
a)レジスタ配列A5を取り出す。
レジスタ配列A5は、各レジスタがデータフローの5タプルから生成されたハッシュ(hash)値に対応し、各レジスタに格納されている値がPeriodicTimerの周期内に対応するデータフローの統計されたフローの最大値である。実際のアプリケーションの場合、複数のデータフローの5タプルのハッシュ値が同一である可能性があるので、これらのデータフローはレジスタ配列A5内の同じレジスタに対応し、すなわち1つのレジスタが複数のデータフローに対応するので、同じハッシュ値を有する5タプルに対応するデータ量のトラフィックをまとめて統計することができる。
b)レジスタ配列A5のうち、候補閾値(Threshold of Candidate,ToC)以上の値を有するレジスタを取り出し、それらのレジスタに対応するデータフローをCGFとして認識する。
【0145】
上記の条件を満たす各レジスタについて、転送テーブルをトラバースし、対応するエントリー情報を取り出すこと、各エントリー情報の5タプルに対してハッシュ算出を行い、ハッシュ値を得ること、算出されたhash値が当該レジスタに対応するhash値と同じであるエントリー情報を取り出し、CGFに加えること、を行う。
【0146】
ここで、エントリー情報は、5タプルを含むフロー情報である。レジスタに対応するhash値は、当該レジスタに対応するデータフローの5タプルで生成されたhash値である。レジスタに対応するhash値は、当該レジスタのインデックスである。ToCは、データフローがCGFとして認識されるトラフィック閾値、すなわちプリセットトラフィック閾値を示す。
【0147】
上記したコアモジュールのhash計算のアルゴリズムとプログラマブルスイッチチップのアルゴリズムとは一致している。例えば、コアモジュールとプログラマブルスイッチチップのhash計算のアルゴリズムはいずれも、バイトごとにアンドにしてからモジュレーションを取る。hash計算を行うアルゴリズムは他のアルゴリズムであってもよいが、これに対して限定されない。
【0148】
本願の一実施形態において、
図5に示す監視モジュールにおけるGF情報の収集プロセスに対応し、本願の実施形態は、
図8に示すように、コアモジュール側におけるGF情報の収集プロセスを提供し、この収集プロセスは、以下のステップを含むことができる。
【0149】
ステップS81:コントロールプレーンの監視モジュールにより配った配置状態メッセージを受信し、コアモジュールの物理的状態を配置状態に設定する。
【0150】
ステップS82:コントロールプレーンの監視モジュールにより配ったGF情報の収集に関連するファイルP4Info2を受信し、ファイルP4Info2をプログラマブルスイッチチップにダウンロードする。
【0151】
ファイルP4Info2内の情報は、プログラマブルスイッチチップを配置するための配置情報であることが理解できる。
【0152】
ステップS83:コアモジュールの物理的状態をアイドル状態にする。
【0153】
ステップS84:GF情報を収集するポートの情報を受信したかどうかを検出する。受信しなかった場合、ステップS84を繰り返し実行し、受信した場合、ステップS85を実行する。ここで、ポート情報は、監視モジュールが配った監視ポート情報デーブルにおけるエントリー情報である。
【0154】
ステップS85:コントロールプレーンがクエリするために、データプレーンのコアモジュールの物理的状態を情報収集状態に設定し、ルックアップテーブルをクリアし、プログラマブルスイッチチップにおける収集結果が格納されているレジスタをクリアし、コントロールチャネルを介してCGFTにおける対応するポートのフロー情報をプログラマブルスイッチチップのルックアップテーブルに添加し、レジスタRegToTBを配置する。
【0155】
好ましい実施形態において、上記のコントロールチャネルを介してCGFTにおける対応するポートのフロー情報をプログラマブルスイッチチップのルックアップテーブルに添加することは、具体的に、CGFTから対応するポートのフロー情報を見つけて、その中からトラフィックが最大となる予め設定された数のフロー情報を選択し、選択されたフロー情報のフロー標識(FlowID)とレジスタインデックス値(RegIndex)をエントリーに構成し、コントロールチャネルを介してプログラマブルスイッチチップのルックアップテーブルに添加する。
【0156】
ここで、FlowIDは、データフローの情報であり、5タプル等を含むが、これらに限定されない。RegIndexは、プログラマブルスイッチチップにおける収集結果が格納されているレジスタインデックス値である。CGFTから選び出されたFlowIDに対応するRegIndex値の範囲は、0~予め設定された数-1である。予め設定された数は実際の需要に応じて設定することができる。例えば、予め設定された数は255であってもよい。
【0157】
ステップS86:非周期的タイマーAperiodicTimerを起動し、周期的タイマーPeriodicTimerを起動する。
【0158】
ここで、AperiodicTimerとPeriodicTimerとの有効期限は、ユーザが予め設定された収集時間の長さである。例えば、AperiodicTimerの有効期限は2sであり、PeriodicTimerは20msである。この場合、GF情報を2秒間に100回収集することができる。
【0159】
ステップS87:AperiodicTimerの期限が切れたかどうかを検出する。期限が切れた場合、ステップS88を実行する。期限が切れていない場合、ステップS89を実行する。
【0160】
ステップS88:PeriodicTimerを停止し、ステップS83に戻って実行する。
【0161】
ステップS89:PeriodicTimerの期限が切れたかどうかを検出する。期限が切れていない場合、ステップS87に戻って実行する。期限が切れた場合、ステップS810を実行する。
【0162】
ステップS810:コントロールチャネルを介してプログラマブルスイッチチップからGF情報を取得し、GFTとして更新し、その後、ステップS87に戻って実行する。
【0163】
好ましい実施形態において、ステップS810は、以下のステップに細分化され得る。
a)レジスタ配列A5を取り出す。ここで、レジスタ配列A5は、予め設定された数+1個のレジスタを含み、前記予め設定された数個のレジスタが上記のCGFTから選択されたRegIndexと1対1に対応し、すなわち、前の予め設定された数個のレジスタが上記のCGFTから選択されたFlowIDのデータフローと1対1に対応し、最後のレジスタは、抽出されたFlowIDのデータフロー以外のすべてのデータフローに対応する。
b)レジスタ配列A5(最後のレジスタ以外)のうち、貪欲フロー閾値(Threshold of Greedy Flow,ToGF)以上の値を有するレジスタを取り出し、それらのレジスタに対応するデータフローをGFとして認識する。
【0164】
上記の条件を満たす各レジスタについて、下記の処理を行う。
ルックアップテーブルにおけるレジスタのインデックスに基づいて、CGFTを検索し、その中から対応するエントリー情報を取り出し、当該エントリー情報はGFのエントリー情報であり、CGFTにおけるGFのエントリー情報に基づいて、GFTを検索し、当該GFのエントリー情報がGFTに存在する場合、当該GFのエントリー情報に対応するエージングカウンターを最大値ffとし、当該GFのエントリー情報のアクティブ値を最大値とし、当該GFのエントリー情報がGFTに存在しない場合、当該GFのエントリー情報をGFTに添加し、エージングカウンターを最大値ffとし、当該GFのエントリー情報のアクティブ値を最大値とする。
【0165】
上記のToGFは、データフローがGFとして認識されるトラフィック閾値、すなわちプリセットトラフィック閾値を示す。
【0166】
本願の一実施形態において、
図6に示す監視モジュールにおける監視プロセスに対応し、本願の実施形態は、
図9に示すように、コアモジュール側における監視プロセスを提供し、このプロセスは、以下のステップを含むことができる。
【0167】
ステップS91:コントロールプレーンの監視モジュールにより配った配置状態メッセージを受信し、コアモジュールの物理的状態を配置状態に設定する。
【0168】
ステップS92:コントロールプレーンの監視モジュールにより配ったGF情報の収集に関連するファイルP4Info3を受信し、ファイルP4Info3をプログラマブルスイッチチップにダウンロードする。
【0169】
ファイルP4Info3内の情報は、プログラマブルスイッチチップを配置するための配置情報であることが理解できる。
【0170】
本願の一実施形態において、上記した配置が完了した後、下記の2つの目的を達成する必要がある。
a)Fabricから受信されたパケットをデータプレーンのコアモジュールに案内すること。
b)データプレーンのコアモジュールから送信されたパケットをFabricに転送すること。
【0171】
ステップS93:コアモジュールの物理的状態をアイドル状態にする。
【0172】
ステップS94:コントロールプレーンにより配ったGF監視状態になった通知を受信し、当該通知に基づいてコアモジュールの物理的状態を監視状態に設定する。
【0173】
このとき、コアモジュールは、GFに対するエージングタイマーを起動する。このエージングタイマーは周期的タイマーである。エージングタイマーの周期長さは実際の需要に応じて1s、2sまたは3sなどに設定することができる。
【0174】
ステップS95:CNPを受信したかどうかを監視する。CNPを受信しなかった場合、ステップS95を繰り返し実行し、CNPを受信した場合、ステップS96を実行する。
【0175】
本願の実施形態において、監視されたポートについて、コントロールプレーンの監視モジュールによって対応するACLルールを配置し、当該ポートに受信されたパケットがフィルタリングされ、ここで、CNPが保留され、CNPを受信するポートの情報をCNPに添加するなどの相応の処理が行われる。ACL処理されたCNPをプログラマブルスイッチチップに同時に案内する。プログラマブルスイッチチップはさらにCNPをデータプレーンのコアモジュールに案内してさらに処理する。
【0176】
ステップS96:CNPからフロー情報を取り出し、フロー情報を用いてGFTを検索する。当該フロー情報を含むエントリーを見つけた場合、ステップS97を実行し、当該フロー情報を含むエントリーを見つけなかった場合、ステップS910を実行する。ここで、フロー情報のエントリーは、当該フロー情報を含むエントリーである。
【0177】
ステップS97:GFTにおける当該フロー情報のエントリーのアクティブ値を1だけ減算する。
【0178】
ステップS98:GFTにおける当該フロー情報のエントリーのアクティブ値が0であるかどうかを検出する。アクティブ値が0である場合、ステップS99を実行し、アクティブ値が0ではない場合、ステップS911を実行する。
【0179】
ステップS99:GFTから当該フロー情報のエントリーを削除する。その後、ステップS911を実行する。
【0180】
ステップS910:輻輳マークを除去する。例えば、ECN-Echoマークを除去し、その後、ステップS911を実行する。
【0181】
ステップS911:転送テーブルを検索する。検索成功である場合、ステップS912を実行し、検索失敗である場合、ステップS913を実行する。
【0182】
ステップS912:当該CNPをデータフローが持っているソースサーバのアドレスに転送し、当該フロー情報のエントリーのエージングカウンターを最大値ffにリセットする。
【0183】
このステップS912において、コアモジュールが受信したCNPは、プログラマブルスイッチチップから案内され、対応するACLフィールドが増加されたCNPである。後続のパケットの正常な転送を確保し、パケット伝送を実現するために、コアモジュールは、増加されたACLフィールドを削除することができる。
【0184】
ステップS913:当該CNPを廃棄する。
【0185】
コアモジュールが転送テーブルへの検索が失敗したことは、ネットワークトポロジが変化したことを示し、当該CNPを廃棄し、ネットワークリソースを節約する。好ましくは、後続のパケットの正常な転送を確保するために、コアモジュールは、コントロールプレーンに転送テーブルとの同期を要求することができる。
【0186】
本願の一実施形態において、コアモジュールは、さらにECNパケットに対する監視を実現することができる。この場合、コアモジュールは、自体の物理的状態を監視状態に設定した後、下記のステップを実行することができる。
1)ECNパケットを受信したかどうかを監視する。ECNパケットを受信した場合、ステップ2)を実行、ECNパケットを受信しなかった場合、ステップ1)を繰り返し実行する。
2)ECNパケットからフロー情報を取り出し、フロー情報を用いてGFTを検索する。当該フロー情報のエントリーを見つけた場合、3)を実行し、当該フロー情報のエントリーを見つけなかった場合、7)を実行する。
3)GFTにおける当該フロー情報のエントリーのアクティブ値を1だけ減算し、4)を実行する。
4)GFTにおける当該フロー情報のエントリーのアクティブ値が0であるかどうかを検出する。アクティブ値が0である場合、5)を実行し、アクティブ値が0ではない場合、6)を実行する。
5)GFTから当該フロー情報のエントリーを削除する。その後、6)を実行する。
6)CNPを構築した後、8)を実行する。
7)輻輳マークを除去する。例えば、ECNマークを除去し、その後、8)を実行する。
8)転送テーブルを検索する。検索成功である場合、9)を実行し、検索失敗である場合、10)を実行する。
9)当該パケットをデータフローが持っているソースサーバのアドレスに転送し、当該フロー情報のエントリーのエージングカウンターを最大値ffにリセットする。
10)転送テーブルに対する検索が失敗である場合、このパケットを廃棄する。
【0187】
ステップ9)と10)において、パケットは、ステップ6)で構築したCNPと、ECNマークが除去されパケットとを含む。
【0188】
本願の実施形態において、コアモジュールは、GFに対するエージングタイマーを起動する。コアモジュールがこのエージングタイマーイベントを受信すると、GFTをトラバースし、各GFエントリーについてエージングカウンターを1だけ減算する。エージングカウンターが0である場合、コアモジュールは当該GFエントリーを削除する。最大値ffから0まで、コアモジュールが当該GFエントリーに対応するCNPまたはECNを受信しなかった場合、当該GFエントリーに対応するデータフローに対してすでに輻輳制御を行う必要がない可能性が高いので、当該GFエントリーを削除し、GFTエントリーのリソースを節約する。
【0189】
本願の一実施形態において、各PeriodicTimer内の現在のポートに対するCGF情報の収集は、P4プログラミング言語を使用して実現されてもよい。具体的に、コントロールモジュールはファイルP4Info1を利用してプログラマブルスイッチチップを配置する。コアモジュールは、この配置に基づいて各PeriodicTimer内のCGF情報を収集する。各PeriodicTimer内のCGF情報を収集する際には、下記のような配置を事前に行う。
1)プログラマブルスイッチチップ内のレジスタRegToTBを定義し、データプレーンのコアモジュールがコントロールチャネルを介してこのレジスタRegToTBを読み書くことができる。
レジスタRegToTBには、統計周期内に現在のポートが占用している帯域幅に基づいて重負荷を認識するためのトラフィック閾値が格納されている。トラフィック閾値は、バイトカウンター閾値とも呼ばれる。異なるポートに対応するレジスタRegToTBに格納されている値は異なってもよく、具体的にはポートの転送量に応じて設定することができる。本願の実施形態において、トラフィック閾値がτ1であることを例として説明する。
2)入力パイプ(pipe)の段階では、コアモジュールは様々な種類のパケットを認識するようにパケットを解析する。本願の実施形態において、TCPパケットが認識されたことを例に挙げる。コアモジュールは、このTCPパケットの5タプルを抽出し、当該5タプルのhash値を算出し、入力メタデータIngMetaに格納する。
本願の実施形態において、ハッシュ値の範囲として、例えば0~1023が予め設定されている。この値の範囲は実際の需要に応じて設定することができる。
3)複数のレジスタ配列を設計し、レジスタ配列の数は1つの計算周期を統計周期に分割した数+2である。以下、1つの計算周期を4つの統計周期に分割した場合を例として説明するが、これに対して限定されない。このとき、6つのレジスタ配列A0、A1、A2、A3、A4およびA5を設計する。各レジスタ配列は複数のレジスタを含み、レジスタ配列A0、A1、A2、A3、A4およびA5におけるレジスタの初期値は0である。1つのレジスタ配列に含まれているレジスタの数は、予め設定されたハッシュ値の範囲に含まれているハッシュ値の数と同じである。例えば、ハッシュ値の範囲を0~1023に予め設定すると、各レジスタ配列は1024個のレジスタを含む。
【0190】
複数の32ビットレジスタを含むレジスタ配列BytesTotalを設計し、レジスタ配列BytesTotal内のレジスタの初期値を0とする。レジスタ配列BytesTotalに含まれているレジスタの数は、1つの計算周期が統計周期に分割された数と同じである。以下、1つの計算周期を4つの統計周期に分割した場合を例として、レジスタ配列BytesTotalは4つのレジスタを含む。
【0191】
1つのレジスタTaを設計し、レジスタTaの初期値を0とする。
【0192】
本願の実施形態において、pipeを出力する段階で、
A0~A3のいずれか1つのレジスタ配列に対してIngMetaの値でインデックスを行う。データフローの計算周期をTとし、統計周期をtとし、t=T/4、すなわち統計周期を計算周期の4分の1とする。説明の便宜上、統計周期ti(iの範囲が0~3)は、0~T/4、T/4~2T/4、2T/4~3T/4、3T/4~Tに対応し、すなわち、t0~t3は、0~T/4、T/4~2T/4、2T/4~3T/4、3T/4~Tに対応し、t0期間でA0のレジスタが動作し、t1期間でA1のレジスタが動作し、t2期間でA2のレジスタが動作し、t3期間でA3のレジスタが動作する。本願の実施形態において、計算周期Tを約1msとし、統計周期を約256μsとした例として説明する。
【0193】
A0~A3内のレジスタは、対応する統計周期内のインデックス値に対応するデータフローの統計トラフィックを格納するために用いられる。
【0194】
A4内のレジスタは、PeriodicTimer周期におけるインデックス値に対応するデータフローのタイムスタンプを格納するために用いられる。
【0195】
A5内のレジスタは、PeriodicTimer周期におけるインデックス値に対応するデータフローの統計されたトラフィックの最大値を格納するために用いられる。
【0196】
BytesTotal内のレジスタは、対応する統計周期におけるインデックス値に対応するデータフローの合計トラフィックを格納するために用いられる。
【0197】
Taはグローバルのタイムスタンプを記録するために用いられる。
【0198】
プログラマブルスイッチチップの出力pipeのメタデータが提供する情報に基づいて、パケットが送信ポートに到達する時刻を取得して、現在の統計周期を算出することができる。
【0199】
例えば、パーサーによって提供される送信ポートの内部メタデータ(egress_intrinsic_metadata_from_parser_t)におけるグローバルタイムスタンプ(global_tstamp)フィールドに基づいて、現在のパケットが出力pipeに到達する時刻ta=global_tstamp>>shiftを取得することができる。>>は右に移動することを示す。すなわち、taは、global_tstampがshiftだけ右に移動することを示し、2のshift乗で割ることに相当する。global_tstampの単位はナノ秒(ns)であるので、本願の実施形態において、計算周期が大まかな統計になるが、具体的なshift値がユーザにより設定されることができる。本願の実施形態において、shiftを10としたが、計算周期Tを1msに近似すると、taのカウンター単位当たりが1μsである場合、global_tstampがshiftだけ右に移動することは、2の10乗(1024)で割ることに相当し、約1μsであり、taがshiftだけ右に移動することは、2の10乗で割ることに相当し、約1msである。
【0200】
本願の実施形態において、shiftビットだけ右に移動することで計算周期を決定し、それにより、計算周期が容易かつ迅速になり、計算のリソースを節約し、情報収集の効率を向上させることができる。
【0201】
本願の実施形態において、各ポートのCGF情報を収集する際に、コアモジュールが上記の配置を実行し、各ポートに対するCGF情報収集に必要な配置を完了する。
【0202】
上記の配置に基づいて、
図10に示すように、各PeriodicTimer内のCGF情報を収集することは、以下のステップを含むことができる。
【0203】
ステップS101:IngMetaのインデックス値をIndexとし、t’aとしてレジスタA4[Index]の値を取り出し、t’’aとしてTaレジスタの値を取り出し、taのbit8~9ビットの値をkとし、t’aのbit8~9ビットの値をk’とし、t’’aのbit8~9ビットの値をk’’とし、t’’aがビットごとに反転された後にtaとアンドにし、得られた値をtempとする。
【0204】
ここで、taのbit0~9で記録されている長さは2の10乗、すなわち約1msであり、1つの計算周期の長さとする。taのbit0~7で記録されている長さは2の8乗、すなわち約256μsであり、1つの計算周期の4分の1、すなわち1つの統計周期の長さである。taのbit8~9が変化した場合、少なくとも1つの統計周期の長さを経過したと理解される。
【0205】
bit8~9のバイナリ値は、00、01、10および11としてよい。上記から分かるように、bit8~9のバイナリ値が00である場合、現在は計算周期の1つ目の統計周期にあり、bit8~9のバイナリ値が01である場合、現在は計算周期の2つ目の統計周期にあり、bit8~9のバイナリ値が10である場合、現在は計算周期の3つ目の統計周期にあり、bit8~9のバイナリ値が11である場合、現在は計算周期の4つ目の統計周期にある。
【0206】
taのbit10~31が変化した場合、少なくとも1つの計算周期の長さを経過したと理解される。
【0207】
ステップS102:tempのbit10~31の値が0であるかどうかを判定する。0でない場合、ステップS103を実行する。0である場合、ステップ104を実行する。
【0208】
tempは、t’’aがビットごとに反転された後、taとアンドにして得られる値である。ステップS101で説明したように、taのbit10~31が変化した場合、少なくとも1つの計算周期の長さを経過したと理解され、taのbit10~31が変化しない場合、現在の計算周期内にある。一方、バイナリのアンドの計算規則は、1&1=1となり、それ以外の計算結果は0となる。これに基づいて、t’’aのbit10~31が0000あり、taのbit10~31が0001である場合、tempは0001である。t’’aのbit10~31が0001あり、taのbit10~31が0011である場合、tempは0010である。t’’aのbit10~31が0011であり、taのbit10~31が0100である場合、tempは0100である。それ以外の場合、例えば、t’’aのbit10~31が0000であり、taのbit10~31が0000である場合、tempは0000である。
【0209】
上記から分かるように、少なくとも1つの計算周期を経過した場合、tempのbit10~31の値が0ではなく、それ以外、tempのbit10~31の値は0である。
【0210】
これに基づいて、ステップS102において、tempのbit10~31の値が0であると判定した場合、t’’aとtaとのbit10~31が同一であり、現在の時間はまた計算周期内にあるので、ステップS104を実行する。そうでない場合、グローバルタイムスタンプの差が1ms大きいことは、グローバル統計データが古く、少なくとも1つの計算周期を経過したことを示したので、ステップS103を実行する。
【0211】
本願の実施形態において、時間が1つの計算周期を経過したか否かを正確に算出するために、コアモジュールは、t’’aとtaとの差をtempとして採用することができる。これに対して限定されない。
【0212】
ステップS103:BytesTotal[0]~BytesTotal[3]のレジスタをクリアし、A0[Index]、A1[Index]、A2[Index]およびA3[Index]の値をクリアし、その後、ステップS1011を実行する。
【0213】
グローバルタイムスタンプの差が1msを超えた場合、現在のデータフローのタイムスタンプも1msを超えた。その後、トラフィックを正確に統計するように確保するために、BytesTotal[0]~BytesTotal[3]、および現在のデータフローに対応するレジスタA0[Index]、A1[Index]、A2[Index]、A3[Index]の値をクリアする。
【0214】
ステップS104:k’’とkが異なるか否かを判定する。異なる場合、すなわちk’’がkと異なる場合、ステップS105を実行し、異なるではない場合、すなわちk’’がkと同一である場合、ステップS106を実行する。
【0215】
ステップS105:BytesTotal[k]をクリアする。その後、ステップS106を実行する。
【0216】
本願の実施形態において、k’’がkと異なる場合、ステップS101で説明したように、グローバルタイムが少なくとも1つの統計周期を経過したことを示し、タイムウィンドウがT/4だけ前に移動し、ステップS105を実行し、現在の統計周期に対応するBytesTotal[k]をクリアし、それにより、現在の統計周期k内のトラフィックを正確に統計することを容易にする。
【0217】
k’’がkと同じであれば、グローバルタイムは1つの統計周期を経過しておらず、タイムウィンドウがT/4だけ前に移動せず、そのままステップS106を実行する。
【0218】
ステップS106:t’aがビットごとに反転された後にtaとアンドにし、得られた値をtemp’とする。
【0219】
ステップS107:temp’のbit10~31の値が0であるか否かを判定する。0である場合、ステップS109を実行する。0ではない場合、ステップS108を実行する。
【0220】
ステップS107の原理はステップS102の原理と同じであるので、ここでは説明を省略する。
【0221】
ステップS107において、Temp’のbit10~31の値が0であると判定した場合、t’aとtaとのbit10~31が同一であり、現在の時間はまた計算周期内にあるので、ステップS109を実行する。そうでない場合、現在のデータフローの前回記録されたタイムスタンプと現在のタイムスタンプとの差が1ms大きいことは、現在のデータフローの統計データが古く、少なくとも1つの計算周期を経過したことを示したので、ステップS108を実行する。
【0222】
ステップS108:A0[Index]、A1[Index]、A2[Index]およびA3[Index]の値をクリアする。その後、ステップS109を実行する。
【0223】
ステップS109:k’とkが異なるかどうかを判定する。異なる場合、すなわちk’がkと異なる場合、ステップS1010を実行し、異なるではない場合、すなわちk’がkと同一である場合、ステップS1011を実行する。
【0224】
ステップS1010:レジスタAk[Index]をクリアする。その後、ステップS1011を実行する。
【0225】
本願の実施形態において、k’がkと異なる場合、ステップS101で説明したように、現在のデータフローの統計時間が少なくとも1つの統計周期を経過したことを示し、タイムウィンドウがT/4だけ前に移動し、ステップS1010を実行し、現在のデータフローに対応するレジスタAk[Index]をクリアする。例えば、k=1である場合、レジスタA1[Index]をクリアし、それにより、現在の統計周期k内の現在のデータフローのトラフィックを正確に統計することを容易にする。
【0226】
k’がkと同じである場合、現在のデータフローの統計時間が1つの統計周期を経過しておらず、タイムウィンドウがT/4だけ前に移動せず、そのままステップS1011を実行する。
【0227】
ステップS1011:レジスタAk[Index]の値を現在のパケットの長さだけ増加し、BytesTotal[k]を現在のパケットの長さだけ増加する。
【0228】
ステップS1012:t’aのbit10~31ビットをtemp1とし、現在のtaのbit10~31ビットをtemp2とする。
【0229】
ステップS1013:temp1とtemp2とが同一であるかどうかを判定する。同一でない場合、ステップS1014を実行し、同じである場合、ステップS1019を実行する。
【0230】
temp1とtemp2とが異なる場合、現在のデータフローの統計時間が少なくとも1つの計算周期を経過したことを示し、ステップS1014を実行し、現在の計算周期内の可能なCGFを特定する。
【0231】
ステップS1014:BytesTotal[0]~BytesTotal[3]の累積値C2を算出する。
【0232】
C2は、1つの計算周期内の合計トラフィックである。
【0233】
ステップS1015:C2が閾値τ1を超えたかどうかを判定する。閾値τ1を超えた場合、現在の統計周期が重負荷閾値に達したことを示し、ステップS1016を実行し、閾値τ1を超えていない場合、ステップS1019を実行する。
【0234】
ステップS1016:A0[Index]、A1[Index]、A2[Index]およびA3[Index]の累積値C1を算出する。
【0235】
C1は、1つの計算周期におけるIndexに対応する現在のデータフローの合計トラフィックである。
【0236】
ステップS1017:C1がA5[Index]より大きいかどうかを判定する。C1がA5[Index]より大きい場合、現在の計算周期で統計されたトラフィックが以前に統計されたトラフィックを超えることを示し、ステップS1018を実行し、C1がA5[Index]以下である場合、ステップS1019を実行する。
【0237】
A5[Index]には、Indexに対応する現在のデータフローが大きいトラフィックが格納されている。C1はA5[Index]と比較する。C1がA5[Index]より大きい場合、現在の計算周期で統計されたトラフィックが以前に統計されたトラフィックを超えるので、ステップS1018を実行する。そうでなければ、
【0238】
ステップS1018:C1をA5[Index]に格納する。
【0239】
この方法により、現在のPeriodicTimer内の各計算周期において、重負荷に達した、Indexに対応するデータフローのバーストが最も深刻なバースト値を見つけることができる。
【0240】
ステップS1019:taでA4[Index]レジスタおよびTaレジスタを更新する。
【0241】
その後、ユーザによる停止操作を受信するまでステップS101~S1019を繰り返し実行することができる。
【0242】
本願の一実施形態において、各PeriodicTimer内の現在のポートに対するGF情報の収集は、P4プログラミング言語によって実現することができる。具体的には、コントロールモジュールはファイルP4Info2を利用してプログラマブルスイッチチップを配置する。コアモジュールは、この配置に基づいて各PeriodicTimer内のGF情報を収集する。各PeriodicTimer内のGF情報を収集する際には、下記のような配置を事前に行う。
【0243】
1)プログラマブルスイッチチップ内のレジスタRegToTBを定義し、データプレーンのコアモジュールがコントロールチャネルを介してこのレジスタRegToTBを読み書くことができる。
レジスタRegToTBには、統計周期内に現在のポートが占有している帯域幅に基づいて重負荷を認識するトラフィック閾値が格納されている。本願の実施形態において、トラフィック閾値がτ1であることを例として説明する。
【0244】
2)入力pipeの段階では、コアモジュールは様々な種類のパケットを認識するようにパケットを解析する。本願の実施形態において、認識されたTCPパケットを例に挙げる。コアモジュールは、当該TCPパケットの5タプルを抽出し、抽出された5タプルに基づいてルックアップテーブルIngTableを検索する。
【0245】
抽出された5タプルがルックアップテーブルIngTable内の1つのエントリーにヒットすると、当該エントリーからレジスタインデックス値を抽出し、入力メタデータIngMetaに格納する。本願の実施形態において、ルックアップテーブルには256個のエントリーが含まれ、その中で、255個のエントリーにはFlowIDおよびレジスタインデックス値が含まれ、1個は空のエントリーであると仮定する。ルックアップテーブルIngTableにおけるレジスタインデックス値の範囲は0~254である。
【0246】
抽出された5タプルがルックアップテーブルIngTable内の1つのエントリーにヒットしなかった場合、最大のレジスタインデックス値を入力メタデータIngMetaに格納する。本願の実施形態において、レジスタインデックス値の範囲は0~255であり、ここで、最大のインデックス値は255であると仮定する。ルックアップテーブルを検索することでレジスタインデックス値0~254を取得することができ、抽出された5タプルがルックアップテーブルIngTableのエントリーにヒットしなかった場合、最大のレジスタインデックス値255を入力メタデータIngMetaに格納する。
【0247】
3)複数のレジスタ配列を設計し、レジスタ配列の数は1つの計算周期を統計周期に分割した数+2である。以下、1つの計算周期を4つの統計周期に分割した場合を例として説明するが、これに対して限定されない。この場合、6つのレジスタ配列A0、A1、A2、A3、A4およびA5を設計する。各レジスタ配列は複数のレジスタを含み、レジスタ配列A0、A1、A2、A3、A4およびA5におけるレジスタの初期値は0である。1つのレジスタ配列に含まれているレジスタの数は、レジスタインデックス値の範囲に含まれている値の数と同じである。例えば、レジスタインデックス値の範囲を0~255に設定すると、各レジスタ配列は256個のレジスタを含む。
【0248】
複数の32ビットレジスタを含むレジスタ配列BytesTotalを設計し、レジスタ配列BytesTotal内のレジスタの初期値を0とする。レジスタ配列BytesTotalに含まれているレジスタの数は、1つの計算周期が統計周期に分割された数と同じである。以下、1つの計算周期を4つの統計周期に分割した場合を例として、レジスタ配列BytesTotalは4つのレジスタを含む。
【0249】
1つのレジスタTaを設計し、レジスタTaの初期値を0とする。
【0250】
本願の実施形態において、出力pipeの段階で、パケットの送信ポートが廃棄ポートであれば処理を行わない。そうでなければ、GF情報の収集を実行し、具体的なGF情報の収集プロセスは
図10を参照してよく、ここで限定しない。
【0251】
本願の実施形態において、よりよい効果を達成するようにGF情報収集の効率を向上させるとともに、下記の条件を満たすれば、有益な効果を達成することができる。
1、プログラマブルスイッチチップで上記の方法を実現する場合、ポータブルスイッチアーキテクチャ(Portable Switch Architecture,PSA)のアーキテクチャ仕様を参照し、pipeの各部分に多くの操作を行うことができない。そして、パイプラインの効率化のために、入力pipeで解析とルックアップとの動作を行い、出力pipeでレジスタ動作を行う。
2.データフローの数が非常に多い場合があり、例えば、ほとんどのデータフローはトラフィックが小さいキープアライブデータフローである。この場合、最初からすべてのデータフローをプログラマブルスイッチチップに格納することはできない。すべてのデータフローをプログラマブルスイッチチップに格納すると、プログラマブルスイッチチップのリソースが足りなくなることからである。したがって、本願の実施形態において、2つの段階で収集を行い、第1段階でハッシュのクラスタのみを粗略に行い、潜在的なエレファントフロー(すなわちCGF)を収集し、データフローの範囲を狭くした後、第2段階でエレファントフロー(すなわちGF)を正確にキャッチする。
3、2つの段階では異なるP4プログラムに対応するファイルP4Infoを採用し、これもリソースを節約するためである。公知の資料により、本発明者は、ダイレクトメモリアクセス(Direct Memory Access、DMA)ポートを介して、プログラマブルスイッチチップをプログラミング且つロードするときにかかる時間は20ms未満であり、規模が小さいファイルP4Infoについて、かかる時間がより少ないので、ファイルP4Infoに基づいて実現された本願の実施形態が提供する技術的手段は現実的な実行可能性があることを発見した。
4.実現する技術的手段において、本願の実施形態では、トラフィックが大きいバーストデータフローをキャッチする際に、合計トラフィックの大きさも参考した。その目的は、計算周期内合計トラフィックが大きい場合、帯域幅を大きく占有するデータフローをキャッチすることはさらに効果があり、これらのデータフローが輻輳に対してさらに役に立つ。
5、4つのレジスタを用いてループキューを構成し、各データフローの統計を実現する。また、時間が変化するとともにループすることで、レジスタのリソースを自然に解放することができる。
6.プログラマブルスイッチチップ内部で、キャッチする時間粒度(すなわち、計算周期)は約1msであり、そして約0.25ms周期で統計ウィンドウを移動し、コントロールプレーンが実現できない精度を達成する。本願の実施形態に提供される技術的手段により、輻輳時のエレファントフロー(マイクロバースト中のエレファントフローを含む)を認識し、輻輳を引き起こすエレファントフローに対して正確な輻輳制御を行うことができ、それにより、マイクロバーストを緩和し、ロスレスネットワークの伝送品質を向上させるのに有利である。
7、CGF情報を収集するたびに、CGFTを全部クリアしたが、GFTを全部クリアせずにGFTにおけるエントリーを自然に老化させ、新しいGF情報を収集するとGFTを更新する。あるGFのCNPを256sで連続して受信していなかったとともに、当該GFがGFとして再び認識されなかった場合、GFTから当該GFのエントリーを削除する。
8、GFTのエージングカウンターは、GFエントリーが存在する時間を制御するために用いられる。アクティブ値は、データフローが呼び出される回数を制御するために用いられ、GFが過度に呼び出されることを防止するために、アクティブ値は3や4などの小さい数値に設定することができる。GFが呼び出されるごとに、当該GFエントリーのアクティブ値を1だけ減少させ、当該GFエントリーのアクティブ値が0になると、GFエントリーは削除される。
9.プログラマブルスイッチチップに基づいて実現されるネットワークデバイスについて、本願の実施形態に提供される技術的手段により、取得されたGFTはさらにプログラマブルスイッチチップに配られ、GFTを検索することによって、各データフローに対してECNパケットを構築するのではなく、GFTにおけるエントリーに対応するGFのECNパケットを構築することができる。あるいは、送信ポートにおいて、ECNパケットをデータプレーンのコアモジュールに案内することがマークされている。GFTに当該エントリーが存在しているECNパケットに対してCNP応答を行い、GFTに当該エントリーが存在していないECNパケットを破棄することにより、最適化された高速CNPを実現する。
【0252】
従来のネットワークには、トラフィックがますます大きくなり、データフローの規模がますます大きくなり、ネットワークアプリケーションもますます複雑になり、マイクロバーストの発生などの状況が不可避であるので、既知の輻輳制御メカニズムに基づいてマイクロバーストにおけるエレファントフローを認識できず、輻輳が発生する時に、すべてのデータフローに対して画一的に輻輳制御を行い、これは明らかに不公平である。データフローが正確に制御されないため、トラフィックが小さいデータフローに大きなダメージを与え、それにより、ネットワーク帯域幅の使用率を向上させることができない。
【0253】
本願の実施形態により提供される技術的手段に基づいて、マイクロバーストにおけるエレファントフローが認識されることができ、それを正確に制御することによって、多数の小トラフィックのデータフローを効果的に保護し、さらに公平になることができる。マイクロバーストにおけるエレファントフローの伝送ピーク値を的確に削った後、ネットワークの転送量を効果的に高めることができる。本願の実施形態により提供される技術的手段は、オンラインで継続的に実行され、自動的に調整することができるため、実行時間が長くなるとともに効果がよくなる。本願の実施形態により提供される技術的手段を採用することで、ネットワークのユーザ体験を改善し、製品の競争力を大幅に高めることができる。
【0254】
図11に示すように、本願の一実施形態は、上記のロスレス伝送システムに対応しているコントロールプレーンの監視モジュールを提供する。監視モジュールは、監視ポート情報テーブルと、監視トランザクションテーブルと、状態管理手段と、タイマーと、外部インタラクティブポートと、データプレーンポートと、を含むことができる。
【0255】
(一)監視ポート情報テーブル
監視ポート情報テーブルの各エントリーは、下記の情報を含んでもよい。
【0256】
1)物理ポートの標識(InterfaceID):特定の物理ポートを認識するために用いられる。InterfaceIDはスロット番号やポート番号、またはスロット番号とポート番号との組み合わせで表すことができる。この情報は、情報の収集や監視の段階で案内の配置または案内の解除を行う際に必要となる。データプレーンのコアモジュールにおけるGFTのOutIfに対応する。
【0257】
2)合計トラフィック閾値(Threshold of Total Band,ToTB):送信ポートの合計トラフィック閾値であり、すなわち重負荷と認識されるトラフィック閾値を表すために用いられる。例えば、100Gbits/sの物理ポートが計算周期内(1msと仮定)で80Gbits/sに達すると、重負荷とみなし、重負荷下ではGFを認識した方が実用的であるが、この場合、フレームギャップやプリアンブルなどの無意味なバイトは無視し、ToTBはバイト閾値に変換して10Mバイトとする。
【0258】
3)候補閾値(Threshold of Candidate,ToC):CGFTにおけるエントリーとして認識されるトラフィック閾値を表すために用いられる。例えば、計算周期が1msであれば、ToCは0.1Mバイトとすることができる。
【0259】
4)貪欲フロー閾値(Threshold of Greedy Flow,ToGF):GFTにおけるエントリーとして認識されるトラフィック閾値を表すために用いられる。例えば、計算周期が1msであれば、ToGFは0.05Mバイトとすることができる。
【0260】
各ポートの帯域幅が異なり、対応するトラフィック閾値も異なるため、各ポートに対応するトラフィック閾値を個別に設定する必要がある。監視モジュールは、監視ポート情報テーブルの情報をデータプレーンのコアモジュールに配る。
【0261】
(二)監視トランザクションテーブル
監視トランザクションテーブルには、長さなどのトランザクションを実行する特徴が含まれ、各トランザクションには、2つの特徴がある。
【0262】
1)トランザクションタイプ(TransType):16ビットコードであり、上位8ビットがメインタイプとし、下位8ビットがサブタイプとする。
【0263】
a)配置のトランザクション:0x0000であって、CGF情報の収集に関連するファイルP4Info1をプログラマブルスイッチチップにダウンロードする。0x0001であって、CGF情報の収集に関連するファイルP4Info2をプログラマブルスイッチチップにダウンロードする。0x0002であって、GF情報の監視に関連するファイルP4Info3をプログラマブルスイッチチップにダウンロードする。0x0003であって、データプレーンのコアモジュールに転送テーブルを同期する。0x0004であって、収集されている指定ポートを配置する。0x0005であって、指定ポートの収集をキャンセルする。0x0006であって、監視されている指定ポートを配置する。指定ポートの監視を解除する。……。
b)CGF収集のトランザクション:0x0100。
c)GF収集のトランザクション:0x0200。
d)監視のトランザクション:0x0300。
【0264】
2)予想実行時間(ExpectTime):32ビットコードであり、カウンター単位は秒であり、ユーザはニーズに応じて設定することができる。例えば、
a)CGF収集のトランザクションの場合、予想実行時間は1sとすることができる。
b)GF収集のトランザクションの場合、予想実行時間は2sとすることができる。
c)監視のトランザクションの場合、予想実行時間は600sとすることができる。
【0265】
配置のトランザクションの場合、この項目は有効にしない。配置のトランザクションが完了したかどうかを確認するために、状態を検索することができる。
【0266】
ロスレス伝送システムが基本的な初期化を完了した後、CGF収集のトランザクション、GF収集のトランザクション、または監視のトランザクションを実行するにはいずれも対応するトランザクションの実行時間を制御するためのタイマーを起動する必要があり、これらの時間情報は、関連トランザクションを起動するタイマーの長さとしてデータプレーンのコアモジュールに配られる。
【0267】
(三)状態管理手段
状態管理手段は、下記の機能を実現できる。
1)状態情報についてデータプレーンのコアモジュールと対話する。
2)転送テーブルが変化する情報を受信し、コアコントロールロジックと連携してデータプレーンに転送テーブルを同期する。
3)コアコントロールロジックと連携して配置プロセスを実現する。
【0268】
(四)タイマー:各種のタイマーイベントを提供する。
【0269】
(五)外部インタラクティブポート
コアコントロールロジックと連携して外部の記憶媒体からファイルP4Infoを取得したり、外部から転送テーブルを取得したり、GF情報について外部と対話したりするなど、各モジュールとの情報交換を行う。
【0270】
(六)データプレーンポート:監視モジュールがデータプレーンのコアモジュールと対話するために用いられる。
【0271】
上記のロスレス伝送システムに対応して、本願の一実施形態は、
図12に示すようなデータプレーンのコアモジュールを提供する。このコアモジュールは、監視状態情報、GF特徴情報テーブル、CGFT、GFT、転送テーブル、タイマー、データ送受信モジュール、コントロールチャネル、コントロールモジュール、及びコントロールプレーンポートなどを含むことができる。
【0272】
(一)監視状態情報
監視状態情報は、コアモジュールの現在の物理的状態を表すためのコアモジュールの複数の物理的状態を含むことができ、データプレーンのシステム状態として理解することができる。
【0273】
一例として、監視状態情報は、配置状態、アイドル状態、情報収集状態、監視状態の4つの物理的状態を含み、物理的状態間の遷移は
図13に示すようになり、コントロールプレーンのシステム状態に対応する。ハードウェアのリソースが限られているため、異なる機能でハードウェアリソースを多重化する必要があり、その間に異なる配置が必要であり、コアモジュールのシステム障害を回避するために、本願の実施形態では複数の物理的状態を設計し、
図13に示すように状態遷移を行う。
【0274】
コントロールプレーンがデータプレーンに対して各段階の操作を配った後、データプレーンのコアモジュールの物理的状態を検索する必要があり、次の段階の操作が実行されるのは、アイドル状態のみである。このようにして、コントロールプレーンの実装を簡略化する。
【0275】
(二)GF特徴情報テーブル
本願の実施形態で提供される技術的手段において、データプレーンのコアモジュールのGF特徴情報テーブルには、ユーザが設定したGF特徴が格納されており、下記のものが含まれる。
1)OutIf:ポートを認識し、ユーザが統一的に定義する。
2)ToTB:重負荷を認識するトラフィック閾値を表すために用いられる。
3)ToC:CGFTにおけるエントリーを認識するトラフィック閾値を表すために用いられる。
4)ToGF:GFTにおけるエントリーを認識するトラフィック閾値を表すために用いられる。
【0276】
各ポートの帯域幅が異なり、対応するトラフィック閾値も異なるため、各ポートに対応するトラフィック閾値を個別に設定することができる。監視モジュールの監視ポート情報テーブルには、ToTB、ToC、ToGFが含まれている。監視モジュールは、監視ポート情報テーブルのこれらの情報をデータプレーンのコアモジュールのGF特徴情報テーブルに配る。
【0277】
(三)CGFT
CGFTの各CGFエントリーには、下記のものが含まれる。
1)FlowID:フロー情報であり、例えば、5タプル:ソースネットワークプロトコル(Internet Protocol、IP)アドレス、宛先IPアドレス、プロトコル番号、ソースポート、および宛先ポート。
2)OutIf。
3)Hash値:データフローのFlowIDに基づいて算出して得られたハッシュ値である。
4)RegValue:収集結果であり、プログラマブルスイッチチップから収集してここに格納し、さらに拡張的に適用されてよく、例えばコントロールプレーンに提供して展示する、
RegValueは、上記のレジスタA5に格納されている値である。
5)RegIndex:プログラマブルスイッチチップに収集結果が格納されているレジスタインデックス値である。
【0278】
プログラマブルスイッチチップでは、リソース制約のため、データフローの帯域幅の占有を直接に統計することができないため、同じハッシュ値を持つデータフローを統計する。しかし、その間に異なるデータフローが同じハッシュ値を持つ、つまりハッシュの衝突が発生する場合がある。したがって、本願の実施形態において、同じハッシュ値を有する帯域幅の占有が一定の閾値を満たすハッシュ値を選び出す。さらに転送テーブルにおける情報と合わせて、転送テーブルにおけるFlowIDのhash値が閾値を満たすhash値と同じであるデータフローをCGFTに埋め込み、これらのデータフローをさらに認識が必要なデータフローとし、GF情報収集の初期化時にCGFTをプログラマブルスイッチチップのフローテーブルに配り、GFの精確な統計を行う。
【0279】
(四)GFT
コアモジュールのGFTには、トラフィック閾値要件を満たすGFが格納されている。各GFエントリーは下記のものを含む。
1)FlowID。
2)OutIf。
3)Age:エージングカウンターである。本願の実施形態において、エージングカウンターの最大値ffは255に設定することができる。
4)Active:アクティブ値である。本願の実施形態において、アクティブ値の最大値は4に設定することができ、アクティブ値は、当該GFエントリーにヒットするごとに1ずつ減少する。
【0280】
監視段階では、コアモジュールに案内されたパケットには入力ポート情報が格納されており、ここで、入力ポート情報におけるポートの標識がOutIfのポートの標識とマッチした後、さらにFlowIDとマッチし、一致した場合、転送テーブルに検索を行い、転送テーブルにおける情報に基づいてパケットをFabricで転送する。
【0281】
(五)転送テーブル
転送テーブルはコントロールプレーンから配られ、宛先IPアドレスのルックアップテーブルにより、送信パケットのヘッダを構築するための転送情報を取得することができる。これはモジュール型デバイスのワイヤーカードにおける転送テーブルと類似している。
【0282】
(六)タイマー
タイマーイベントを提供し、対応する処理をトリガするために用いられる。
【0283】
(七)データ送受信モジュール
監視段階では、コアモジュールに案内されたパケットが、あるGFエントリーにヒットした場合、さらに転送テーブルを検索する。転送テーブルにおける転送情報とコアモジュールに案内されたパケットが持っているフロー情報とに基づいてパケットを再構築し、データ送受信モジュールを介して、再構築されたパケットをプログラマブルスイッチチップに送信する。プログラマブルスイッチチップは関連する配置によって決定される。再構築されたパケットは、Fabricを介してネットワークデバイスの該当する送信ポートに送信され、案内されたパケットの元の宛先デバイスに送信される。
【0284】
(八)コントロールチャネル
コントロールチャネルは、コアモジュールのCPUとプログラマブルスイッチチップとの間のコントロールチャネルである。インテル(Intel)のTofino2スイッチチップを例として、コントロールチャネルはPCIEチャネルであり、このコントロールチャネルを介して、Tofino2スイッチチップを配置することができ、また、シングルリードライト方式あるいはDMA方式により、Tofino2スイッチチップと配置情報およびプログラマブルスイッチチップのルックアップテーブル情報などを交換することができる。
【0285】
(九)コントロールモジュールであって、各モジュールの協同動作を制御するために用いられる。
【0286】
(十)コントロールプレーンポートであって、コアモジュールがコントロールプレーンの監視モジュールとのインタラクティブのために用いられる。
【0287】
本発明の実施形態において、プログラマブルスイッチチップは、プログラムされた後に、ルックアップテーブル、キーメタデータ、およびレジスタなどを含むことができる。
【0288】
(一)ルックアップテーブル
ルックアップテーブルは、GF情報の収集段階で用いられる。各エントリーには2つのフィールドが含まれている。
1)FlowID:5タプルであり、FlowIDをルックアップテーブルのキーワードとする。
2)RegIndex:データフローに対応するレジスタインデックス値であり、上記A0~A5の6つのレジスタ配列はいずれもRegIndexを用いてインデックスする。
【0289】
パケットを受信した場合、入力pipeの解析段階で、パケットヘッダにおけるIPヘッダを抽出し、入力pipeの制御段階で、5タプルをキーワードとしてテーブルを検索する。検索成功した後に、RegIndexを取り出し、メタデータ(IngMeta)にセットし、出力pipeにA0~A5の6つのレジスタ配列におけるレジスタをインデックスする。
【0290】
(二)キーメタデータ
キーメタデータは、下記のフィールドを含む。
1)IngMeta:入力pipeで確定されたレジスタインデックス値を格納し、出力pipeでIngMetaに格納されているレジスタインデックス値を用いる。CGF情報の収集段階では、当該レジスタインデックス値は入力pipeの5タプルをhash計算して得られた。GFの収集段階では、レジスタインデックス値は入力pipeの5タプルをルックアップテーブルから検索して得られた。
2)タイムスタンプta、t’a、t’’a。
3)カウンターC1及びC2。
4)Tofinoスイッチチップアーキテクチャが提供する固有メタデータglobal_tstampフィールド:例えば、上記のgress_intrinsic_metadata_from_parser_tのglobal_tstampフィールドである。
【0291】
(三)レジスタ
プログラマブルスイッチチップにはA0~A5の6つのレジスタ配列が含まれており、データフローの数が多いことを考慮して、CGF段階で定義された配列長は1024となり、hash衝突を減少させることができる。A0~A5の6つのレジスタ配列は、下記のように表すことができ、
Register<bit<32>,_>(1024)A0;
Register<bit<32>,_>(1024)A1;
Register<bit<32>,_>(1024)A2;
Register<bit<32>,_>(1024)A3;
Register<bit<32>,_>(1024)A4;
Register<bit<32>,_>(1024)A5。
【0292】
上記のRegister<bit<32>は32ビットレジスタを表し、_>(1024)は合計1024個のレジスタがあることを表す。
【0293】
GFの収集段階でレジスタ配列長は256と定義され、すなわち、GFである可能性が最も高い255個のCGFを選択してさらに収集する。この255個のCGFの以外、残りのデータフローは最後のレジスタに帰属する。このとき、A0~A5の6つのレジスタ配列は下記のように表すことができ、
Register<bit<32>,_>(256)A0;
Register<bit<32>,_>(256)A1;
Register<bit<32>,_>(256)A2;
Register<bit<32>,_>(256)A3;
Register<bit<32>,_>(256)A4;
Register<bit<32>,_>(256)A5。
【0294】
上記のRegister<bit<32>は32ビットレジスタを表し、_>(256)は合計256個のレジスタがあることを表す。
【0295】
また、プログラマブルスイッチチップは、現在のポートが占有されている帯域幅に基づいて重負荷を認識するトラフィック閾値を記録するためのレジスタRegToTBと、計算周期内にポートが受信したすべてのトラフィックを統計するためのレジスタ配列BytesTotalと、グローバルタイムスタンプを記録するためのレジスタTaと、をさらに含む。RegToTB、BytesTotal、Taは下記のように表すことができ、
Register<bit<32>,_>RegToTB;
Register<bit<32>,_>(4)BytesTotal;
Register<bit<32>,_>Ta。
【0296】
上記のRegister<bit<32>は32ビットレジスタを表し、_>は合計1個のレジスタがあることを表し、_>(4)は合計4個のレジスタがあることを表す。
【0297】
CGFとGFの情報の収集段階では、出力pipeの処理は同じである。CGFのレジスタインデックス値は、データフローの5タプルのハッシュ値から得られる。GFのレジスタインデックス値はルックアップテーブルを検索して取得され、具体的には、ルックアップテーブルから対応するエントリーを見つけた場合、当該エントリーに含まれているレジスタインデックス値をGFのレジスタインデックス値とする。ルックアップテーブルから対応するエントリーを見つけなかった場合、レジスタ配列の最後のレジスタのレジスタインデックス値をGFのレジスタインデックス値とする。
【0298】
図14に示すように、GF情報の収集段階で、データプレーンのコアモジュールは、CGFTから最大255個のCGFを選択し、プログラマブルスイッチチップのルックアップテーブルにダウンロードする。ここで、当該255個のCGFにおけるFlowIDとRegIndexとはCGFTから取得され、RegIndexはCGFTに存在せず、暗黙的な位置関係に置き換えられてもよい。CGFTに含まれているエントリー数+1は、ルックアップテーブルに含まれているエントリー数に等しい。パケットを受信した後、コアモジュールはパケットのフロー情報に基づいてルックアップテーブルのキーワードを構成する。ルックアップテーブルへの検索が成功した場合、ルックアップテーブルからレジスタインデックス値RegIndexを取り出し、RegIndexはその後にレジスタを操作するためのインデックス値に用いられる。ルックアップテーブルへの検索が失敗した場合、レジスタ配列における最後のレジスタのレジスタインデックス値を取り出し、その後にレジスタを操作するためのインデックス値に用いられる。
【0299】
GF情報を収集した後、最大レジスタインデックス値以外のレジスタインデックス値に基づいてCGFTの逆引きを行って、フロー情報FlowIDを取得し、FlowIDとレジスタ統計値とによりGFTを更新する。
【0300】
本願の実施形態により提供される技術的手段は、ソフトウェアとハードウェアとの組み合わせによって実現される。ソフトウェアとハードウェアとの組み合わせにより、本願の実施形態により提供される技術的手段は広く適用されている。
1.本願の実施形態により提供される技術的手段において、新たに追加されるコアモジュールはカード挿入の形式でモジュール型デバイスのマザーボード内に挿入することができ、ボックス型デバイスのマザーボード上に集積することもできる。
2.本願の実施形態により提供される技術的手段は絶対的な独立性を有するので、コントロールプレーンのコアモジュールはさらに別個の装置として実装されてもよく、監視モジュールはネットワークコントローラ上のような任意の場所に実装してもよく、監視モジュールが依存する転送テーブルは、複数の方法によって取得されることができる。
3.プログラマブルスイッチチップで実現される転送装置について、本願の実施形態により提供される技術的手段によって取得されたGFTは、さらにプログラマブルスイッチチップに発行され、GFTを検索することによって、データフローごとにECNパケットを構築するのではなく、GFTにおけるエントリーに対応するGFのECN閾値を構築することができる。本願の実施形態により提供される技術的手段では、GFの標識をプログラマブルスイッチチップ内に集積することができる。
4.監視段階では、監視されるポートから送信したECNパケットを、本願の実施形態により提供される技術的手段に案内し、CNPに類似した処理を行い、GFに対して迅速なCNP応答を行うことができる。
5.本願の実施形態により提供される技術的手段は、ルータまたはスイッチ装置が輻輳を特定する解析手段として、ネットワークの最適化をサポートするために用いられる。
【0301】
本願の実施形態は、
図15に示すように、上記のロスレス伝送システムにより、輻輳処理方法を提供する。当該方法は、
図2に示す上述したデータプレーンのコアモジュールに適用するものであり、以下のステップを含む。
【0302】
ステップS151:対象ポートを介して輻輳マークを持っている第1パケットを受信する。
【0303】
本願の実施形態において、データプレーンは複数のポートを備え、対象ポートがいずれのポートであってもよい。ここで、対象ポートを例として説明するが、これを限定するものではない。第1パケットは、対象ポートを介して受信された輻輳マークを持っている任意のパケットであり、ここで、第1パケットを例として説明したが、これを限定するものではない。輻輳マークはCNPマーク、すなわちECN-Echoマークであってよく、輻輳マークはECNマークであってもよい。
【0304】
輻輳制御機能をオンにすると、コアモジュールは対象ポートを介してパケットを受信し、受信されたパケットから輻輳マークを持っている第1パケットを選別する。
【0305】
ステップS152:プリセット貪欲フローテーブルから、第1パケットが持っている対象フロー情報と対象ポートの標識とを含む対象エントリーを検索し、ここで、プリセット貪欲フローテーブルにはプリセットトラフィック閾値より大きいトラフィックを有するデータフローのフロー情報と、当該フロー情報に対応するデータフローを受信するポートの標識と、が格納されている。対象エントリーを見つけた場合、ステップS153を実行し、対象エントリーを見つけなかった場合、ステップS154を実行する。
【0306】
本願の実施形態において、第1パケットが持っているフロー情報は対象フロー情報とする。
【0307】
コアモジュール内に貪欲フローテーブル、すなわちプリセット貪欲フローテーブルが予め設定された。当該プリセット貪欲フローテーブルの各エントリーにはフロー情報とポートの標識との対応関係が格納されている。当該エントリーのフロー情報に対応するデータフローのトラフィックはプリセットトラフィック閾値より大きく、フロー情報に対応するポートは対応のデータフローを受信するポートである。
【0308】
第1パケットを受信した後、コアモジュールはプリセット貪欲フローテーブルから対象フロー情報と対象ポートの標識とを含む対象エントリーを検索する。対象エントリーを見つけた場合、第1パケットが所属するデータフローのトラフィックがプリセットトラフィック閾値より大きいことを示し、すなわち第1パケットが所属するデータフローは貪欲フローであり、ステップS153を実行する。
【0309】
対象エントリーを見つけなかった場合、第1パケットが所属するデータフローのトラフィックがプリセットトラフィック閾値以下であることを示し、すなわち第1パケットが所属するデータフローは非貪欲フローであり、ステップS154を実行する。
【0310】
ステップS153:第1パケットを処理する。
【0311】
第1パケットが所属するデータフローが貪欲フローであると判定した場合、後で第1パケットが所属する貪欲フローに対して輻輳制御を行い、ネットワークの輻輳を低減することができるために、コアモジュールは転送テーブルに基づいて第1パケットを直接処理する。
【0312】
ステップS154:第1パケットが持っている輻輳マークを除去して第2パケットを取得し、第2パケットを処理する。
【0313】
第1パケットが所属するデータフローが非貪欲フローであると判定した場合、コアモジュールは第1パケットが持っている輻輳マークを除去して第2パケットを取得する。そして、コアモジュールは転送テーブルに基づいて輻輳マークが含まれていない第2パケットを処理することができる。これにより、第1パケットが所属するデータフローが非貪欲フローに対して輻輳制御を行わず、マウスフローに対するダメージを低減し、輻輳制御の公平性を向上させることができる。
【0314】
本願の実施形態により提供される技術的手段を適用すれば、ネットワークにおける貪欲フローを認識するための貪欲フローテーブルを予め設定することで、貪欲フローの輻輳制御を維持するとともに、非貪欲フローの輻輳制御を解除することにより、マウスフローに対するダメージを低減して輻輳制御の公平性を向上させる。
【0315】
また、本願の実施形態は、ECN閾値でトリガした後の処理に関する技術的手段を提供し、ECN閾値より大きい貪欲フローを独立して認識し、貪欲フローの輻輳制御を維持することができるので、ECN閾値を大きく設定しても、本願の実施形態における輻輳の処理に対する影響は大きくない。したがって、本願の実施形態により提供される技術的手段は、より大きいECN閾値を利用して輻輳制御を行うことができ、それにより、マウスフローに対するダメージを低減して輻輳制御の公平性を向上させるとともに、ネットワーク帯域幅の使用率を効果的に向上させることができる。
【0316】
本願の一実施形態において、プリセット貪欲フローテーブルにおける各エントリーには初期アクティブ値が設定されている。ここで、初期アクティブ値は実際の需要に応じて設定することができる。例えば、初期アクティブ値は4、5または6などであってもよい。
【0317】
この場合、
図16に示すような輻輳の処理のプロセスの模式図により、ステップS152を実行した後、対象エントリーを見つけた場合、ステップS155およびS156を実行する。
【0318】
ステップS155:対象エントリーの現在のアクティブ値を第1プリセット値だけ減算し、前記対象エントリーの調整後アクティブ値を取得する。
【0319】
ステップS156:対象エントリーの調整後アクティブ値が第2プリセット値以下である場合、プリセット貪欲フローテーブルから対象エントリーを削除する。
【0320】
上記の第1プリセット値および第2プリセット値は実際の需要に応じて設定することができる。例えば、第1プリセット値は1、2または3などであってもよい。第2プリセット値は0、1、2または3などであってもよい。一例として、第1プリセット値は1であり、第2プリセット値は0である。
【0321】
本願の実施形態において、1つのエントリーがパケットのフロー情報とマッチするたびに、当該エントリーのアクティブ値を第1プリセット値だけ減算し、当該エントリーのアクティブ値が第2プリセット値以下に小さくなると、プリセット貪欲フローテーブルから当該エントリーを削除する。このようにして、当該エントリーと一致したパケットを受信すると、このエントリーが削除されたので、コアモジュールは、プリセット貪欲フローテーブルから一致したエントリーを見つけることができず、すなわち、このパケットが所属するデータフローを制御することができず、データフローが過剰に制御されるという問題を解決する。
【0322】
本願の一実施形態において、第1パケットがCNPである場合、上記のステップS153は、下記のステップに細分化され得る。
転送テーブルに対象フロー情報が含まれている場合、第1パケットが持っている対象ポートの標識を除去し、対象ポートの標識が除去された前記第1パケットを転送し、且つ対象エントリーのエージングカウンターを初期エージング値にリセットし、転送テーブルに前記対象フロー情報が含まれていない場合、第1パケットを破棄する、
【0323】
上記のステップS154は、下記のステップに細分化され得る。
転送テーブルに前記対象フロー情報が含まれている場合、第2パケットが持っている対象ポートの標識を除去し、対象ポートの標識が除去された第2パケットを転送し、転送テーブルに前記対象フロー情報が含まれていない場合、第2パケットを破棄する。
【0324】
本願の別の一実施形態において、第1パケットがECNパケットである場合、上記のステップS153は、下記のステップに細分化され得る。
転送テーブルに対象フロー情報が含まれている場合、第1パケットに対応するCNPを転送し、対象エントリーのエージングカウンターを初期エージング値にリセットし、転送テーブルに対象フロー情報が含まれていない場合、第1パケットを破棄する。
【0325】
上記のステップS154は、下記のステップに細分化され得る。
転送テーブルに前記対象フロー情報が含まれている場合、第2パケットが持っている対象ポートの標識を除去し、対象ポートの標識が除去された第2パケットを転送し、転送テーブルに前記対象フロー情報が含まれていない場合、第2パケットを破棄する。
【0326】
上記の初期エージング値は実際の需要に応じて設定することができる。例えば、初期エージング値は256、300または350などであってもよい。
【0327】
本願のさらに一実施形態において、第1パケットがECNパケットである場合、上記のステップS153は、下記のステップに細分化され得る。
第1パケットに対応するCNPを構築し、転送テーブルに対象フロー情報が含まれている場合、当該CNPを転送し、対象エントリーのエージングカウンターを初期エージング値にリセットし、転送テーブルに対象フロー情報が含まれていない場合、第1パケットを破棄する。
【0328】
本願の一実施形態において、本願の実施形態は、
図17に示すように、以下のステップを含むプリセット貪欲フローテーブルの構築方法を提供する。
【0329】
ステップS171:第1計算周期内に対象ポートを介して受信された複数のパケットが所属するデータフローのトラフィックを統計する。
【0330】
上記のステップS151の前に、コアモジュールは、プリセット貪欲フローテーブルを構築するために、第1計算周期内に前記対象ポートを介して受信された複数のパケットが所属するデータフローのトラフィックを統計する。
【0331】
上記の第1計算周期の長さは実際の需要に応じて設定することができる。第1計算周期の長さは1s、2sまたは3sなどであってもよい。第1計算周期の長さの設定は、上述した
図7に示すAperiodicTimerの設定を参照してよい。
【0332】
ステップS172:転送テーブルに含まれている候補フロー情報から、対象候補フロー情報として、トラフィックが最大となる予め設定された数のデータフローの候補フロー情報を特定し、ここで、候補フロー情報はハッシュ値が候補フローのフロー情報のハッシュ値と同一であるフロー情報であり、候補フローは統計されたトラフィックがプリセット候補フローのトラフィック閾値より大きいデータフローである。
【0333】
本願の実施形態において、コアモジュールは、統計されたトラフィックがプリセットトラフィック閾値より大きいデータフローを候補フローとし、ハッシュ値が候補フローのフロー情報のハッシュ値と同一であるフロー情報を候補フロー情報とする。コアモジュールは、転送テーブルに含まれている候補フロー情報から、対象候補フロー情報として、トラフィックが最大となる予め設定された数のデータフローの候補フロー情報を特定する。
【0334】
ここで、予め設定された数は実際の需要に応じて設定することができる。例えば、予め設定された数は256または300などであってもよい。
【0335】
ステップS173:対象候補フロー情報のそれぞれについて、当該対象候補フロー情報に対応するデータフローのトラフィックがプリセットトラフィック閾値より大きい場合、当該対象候補フロー情報と対象ポートの標識とを1つのエントリーとしてプリセット貪欲フローテーブルに添加する。
【0336】
対象候補フロー情報のそれぞれについて、コアモジュールは、当該対象候補フロー情報に対応するデータフローのトラフィックがプリセットトラフィック閾値より大きいかどうかを検出する。プリセットトラフィック閾値より大きい場合、当該対象候補フロー情報に対応するデータフローは貪欲フローであり、当該対象候補フロー情報と対象ポートの標識とを1つのエントリーとしてプリセット貪欲フローテーブルに添加する。プリセットトラフィック閾値を超えない場合、処理しない。
【0337】
本願の実施形態において、貪欲フローの認識はデータプレーンのコアモジュールによって実行され、貪欲フローを認識するための第1計算周期の長さは非常に小さくてもよい。そのため、正確にマイクロバーストフローを認識することができ、相応のプリセット貪欲フローテーブルを確立し、さらに正確に貪欲フローを制御することができる。
【0338】
本願の一実施形態において、本願の実施形態は、プリセット貪欲フローテーブルの構築方法をさらに提供し、
図18に示すように、上記のステップS171は、下記のステップに細分化され得る。
【0339】
ステップS1711:第2計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計し、ここで、一組にあるデータフローのフロー情報のハッシュ値が同一である。
【0340】
本願の一実施形態において、コアモジュールは、フロー情報のハッシュ値が同一であるデータフローを1組に分けた。対象ポートを介して受信された全てのデータフローの合計トラフィックを第1合計トラフィックとし、対象ポートを介して受信されたパケットの1組のデータフローの合計トラフィックを第2合計トラフィックとし、コアモジュールは第2計算周期内の第1合計トラフィックと第2合計トラフィックを統計する。
【0341】
上記の第2計算周期の長さは実際の需要に応じて設定することができる。第2計算周期の長さは1msまたは2msなどであってもよい。第2計算周期の長さの設定は、上述した
図10に示す計算周期Tの設定を参照してよい。
【0342】
ステップS1712:第1合計トラフィックが第1プリセット候補サブ閾値より大きい場合、各組のデータフローについて、当該組のデータフローの第2合計トラフィックが第2プリセット候補サブ閾値より大きい場合、当該組のデータフローの第2合計トラフィックが、記録されている当該組のデータフローの合計トラフィックより大きいとき、記録されている当該組のデータフローの合計トラフィックを当該組のデータフローの第2合計トラフィックとして更新する。
【0343】
コアモジュールは、第1合計トラフィックを取得した後、第1合計トラフィックが第1プリセット候補サブ閾値より大きいかどうかを検出する。第1プリセット候補サブ閾値より大きい場合、各組のデータフローについて、コアモジュールは、当該組のデータフローの第2合計トラフィックが第2プリセット候補サブ閾値より大きいかどうかを検出する。第2プリセット候補サブ閾値より大きい場合、コアモジュールは、当該組のデータフローの第2合計トラフィックと記録されている当該組のデータフローの合計トラフィックとを比較する。当該組のデータフローの第2合計トラフィックが、記録されている当該組のデータフローの合計トラフィックより大きい場合、コアモジュールは記録されている当該組のデータフローの合計トラフィックを当該組のデータフローの第2合計トラフィックとして更新する。
【0344】
統計時間が第3計算周期に達しなかった場合、ステップS1711に戻って実行する。統計時間が第3計算周期に達した場合、ステップS1713を実行する。
【0345】
ステップS1713:各組のデータフローについて、記録されている当該組のデータフローの合計トラフィックがプリセット候補フローのトラフィック閾値より大きい場合、当該組のデータフローを1つのエントリーとしてプリセット候補貪欲フローテーブルに添加し、ステップS1711に戻って実行する。
【0346】
上記したステップは、統計時間が第1計算周期に達するまで実行される。
【0347】
上記の第3計算周期の長さは実際の需要に応じて設定することができる。第3計算周期の長さは20msまたは30msなどであってもよい。第3計算周期の設定は、
図7に示すPeriodicTimerの設定を参照してよい。
【0348】
本願の実施形態において、コアモジュールは、1つの第2計算周期の第1合計トラフィック及び第2合計トラフィックの統計が完了した後に、統計時間が第3計算周期に達したか否かを検出する。統計時間が第3計算周期に達しなかった場合、ステップS1711に戻って実行し、次の第2計算周期の第1合計トラフィックおよび第2合計トラフィックを統計する。
【0349】
統計時間が第3計算周期に達した場合、各組のデータフローについて、コアモジュールは、記録されている当該組のデータフローの合計トラフィックがプリセットトラフィック閾値より大きいかどうかを検出する。プリセットトラフィック閾値より大きい場合、コアモジュールは、1つのエントリーとして当該組のデータフローのフロー情報をプリセット貪欲フローテーブルに添加する。
このように、上記ステップS1711~S1713は、統計時間が第1計算周期に達するまで繰り返して実行される。
【0350】
上述したステップS1711~S1713の具体的な実施形態について、上述した
図10のステップS1014~S1018の説明を参照してよい。
【0351】
上記の実施形態により、貪欲フローの可能性があるデータフローを可能な限り選別し、貪欲フローを選別する範囲を狭め、データプレーンに貪欲フローの認識を容易にすることができる。
【0352】
本願の一実施形態において、本願の実施形態は、
図19に示すように、トラフィックの統計方法を提供する。その方法において、第2計算周期は、複数の統計周期に分割される。各統計周期が1つのサブ長さレジスタ配列に対応し、各統計周期が1つの長さレジスタにも対応し、各サブ長さレジスタ配列には複数のハッシュ値に対応するサブ長さレジスタが含まれ、1つのハッシュ値が1つのサブ時間レジスタに対応する。
【0353】
ここで、サブ長さレジスタ配列は
図10に示すレジスタA0~A3を参照してよく、長さレジスタは
図10に示すレジスタBytesTotaを参照してよく、サブ時間レジスタは
図10に示すレジスタA4を参照してよい。
【0354】
この場合、上記のステップS1711において、対象ポートを介して受信された各パケットについて、以下のステップを実行することができる。
【0355】
ステップS191:第1時間差が第2計算周期の長さより短い場合、第1時間差が統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアし、ここで、第1時間差は時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象統計周期は当該パケットの受信時間が所属する統計周期である。
【0356】
ここで、第1時間差が第2計算周期の長さより短い場合、第1時間差が統計周期の長さより短いとき、ステップS192を直接に実行する。
【0357】
ステップS192:第2時間差が第2計算周期の長さ以上である場合、対象ハッシュ値に対応する各サブ長さレジスタに格納されている長さをクリアし、ここで、第2時間差は対象サブ時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象サブ時間レジスタは当該パケットが持っているフロー情報の対象ハッシュ値に対応するサブ時間レジスタである。
【0358】
ステップS193:対象統計周期に対応する対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加し、対象サブ長さレジスタが対象ハッシュ値に対応する。
【0359】
ステップS194:当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新する。
【0360】
ステップS195:統計時間が第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されているデータの合計値を統計する。
【0361】
本願の別の実施形態において、
図19に基づいて、本願の実施形態は、
図20に示すように、トラフィックの統計方法を提供する。その方法において、対象ポートを介して受信された各パケットについて、さらに以下のステップを実行することができる。
【0362】
ステップS196:第1時間差が第2計算周期の長さ以上である場合、複数のサブ長さレジスタ配列と複数の長さレジスタに格納されている長さをクリアする。
【0363】
ステップS197:対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加する。
【0364】
ステップS198:当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新する。
【0365】
ステップS199:統計時間が第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されているデータの合計値を統計する。
【0366】
本願の他の実施形態において、
図19または
図20に基づいて、本願の実施形態は、
図21に示すように、トラフィックの統計方法を提供する。その方法において、対象ポートを介して受信された各パケットについて、さらに以下のステップを実行することができる。
【0367】
ステップS1910:第1時間差が第2計算周期の長さより短い場合、第1時間差が前記統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアする。
【0368】
ステップS1911:第2時間差が第2計算周期の長さより短い場合、第2時間差が統計周期の長さ以上であるとき、対象サブ長さレジスタに格納されている長さをクリアする。
【0369】
ここで、第2時間差が第2計算周期の長さより短い場合、第2時間差が統計周期の長さより短いとき、ステップS1912を直接に実行する。
【0370】
ステップS1912:対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加する。
【0371】
ステップS1913:当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新する。
【0372】
ステップS1914:統計時間が第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されている長さの合計値を統計する。
【0373】
本願の一実施形態において、
図17に基づいて、本願の実施形態は、
図22に示すように、対象候補フロー情報に対応するデータフローのトラフィックの統計方法を提供する。この方法は、以下のステップを含む。
【0374】
ステップS221:第4計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計する。
【0375】
ステップS222:第3合計トラフィックが第1プリセットトラフィックサブ閾値より大きい場合、各対象データフローについて、当該対象データフローの第4合計トラフィックが第2プリセットトラフィックサブ閾値より大きい場合、当該対象データフローの第4合計トラフィックが、記録されている当該対象データフローのトラフィックより大きいとき、記録されている当該対象データフローのトラフィックを当該対象データフローの第4合計トラフィックとして更新する。
【0376】
第5計算周期を達しなかった場合、ステップS221に戻って実行する。第5計算周期を達した場合、ステップS223を実行する。
【0377】
ステップS223:各対象データフローについて、記録されている当該対象データフローのトラフィックがプリセットトラフィック閾値より大きい場合、当該対象データフローのフロー情報を1つのエントリーとしてプリセット貪欲フローテーブルに添加し、ステップS221に戻って実行する。
【0378】
上記したステップは、統計時間が第6計算周期に達するまで実行される。
【0379】
本願の一実施形態において、
図22に基づいて、本願の実施形態は、
図23に示すように、対象候補フロー情報に対応するデータフローのトラフィックの統計方法を提供する。この方法において、第4計算周期は、複数の統計周期に分割されており、各統計周期が1つのサブ長さレジスタ配列に対応し、各統計周期が1つの長さレジスタにも対応し、各サブ長さレジスタ配列には複数の第1サブ長さレジスタと1つの第2サブ長さレジスタとが含まれており、1つの対象データフローが1つの第1サブ時間レジスタに対応し、第2サブ長さレジスタが対象データフロー以外の全てのデータフローに対応する。
【0380】
上記のステップS221において、対象ポートを介して受信された各パケットについて、以下のステップを実行することができる。
【0381】
ステップS2211:第3時間差が第4計算周期の長さより短い場合、第3時間差が統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアし、ここで、第3時間差は時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象統計周期は当該パケットの受信時間が所属する統計周期である。
【0382】
ステップS2212:第4時間差が第4計算周期の長さ以上である場合、当該パケットが所属するデータフローに対応する各サブ長さレジスタに格納されている長さをクリアし、ここで、第4時間差は対象サブ時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象サブ時間レジスタは当該パケットが所属するデータフローに対応するサブ時間レジスタである。
【0383】
ステップS2213:対象統計周期に対応する対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加し、対象サブ長さレジスタは当該パケットが所属するデータフローに対応する。
【0384】
ステップS2214:当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新する。
【0385】
ステップS2215:統計時間が第4計算周期に達すると、第3合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各対象データフローの第4合計トラフィックとして、各対象データフローに対応する複数のサブ長さレジスタに格納されているデータの合計値を統計する。
【0386】
本願の別の実施形態において、
図23に基づいて、本願の実施形態は、
図24に示すように、対象候補フロー情報に対応するデータフローのトラフィックの統計方法を提供する。この方法において、対象ポートを介して受信された各パケットについて、さらに以下のステップを実行することができる。
【0387】
ステップS2216:第3時間差が第4計算周期の長さ以上である場合、複数のサブ長さレジスタ配列と複数の長さレジスタに格納されている長さをクリアする。
【0388】
ステップS2217:対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加する。
【0389】
ステップS2218:当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新する。
【0390】
ステップS2219:統計時間が第4計算周期に達すると、第3合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各対象データフローの第4合計トラフィックとして、各対象データフローに対応する複数のサブ長さレジスタに格納されているデータの合計値を統計する。
【0391】
本願の別の実施形態において、
図23および
図24に基づいて、本願の実施形態は、
図25に示すように、対象候補フロー情報に対応するデータフローのトラフィックの統計方法を提供する。この方法において、対象ポートを介して受信された各パケットについて、さらに以下のステップを実行することができる。
【0392】
ステップS22110:第3時間差が第4計算周期の長さより短い場合、第3時間差が前記統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアする。
【0393】
ステップS22111:第4時間差が第4計算周期の長さより短い場合、第4時間差が統計周期の長さ以上であるとき、対象サブ長さレジスタに格納されている長さをクリアする。
【0394】
ステップS22112:対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加する。
【0395】
ステップS22113:当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新する。
【0396】
ステップS22114:統計時間が第4計算周期に達すると、第3合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各対象データフローの第4合計トラフィックとして、各対象データフローに対応する複数のサブ長さレジスタに格納されている長さの合計値を統計する。
【0397】
本願の実施形態において、上述した
図19~
図25に示す方式により、レジスタによりトラフィックの統計を簡単かつ迅速に実現し、さらに後続のプリセット貪欲フローテーブルの構築効率を向上させることができる。
【0398】
上述した
図19~
図25の説明は簡単であるが、具体的には上述した
図10の説明を参照してよい。
【0399】
上記の輻輳処理方法に対応し、本願の実施形態は、輻輳処理装置を提供し、
図26に示すように、前記装置は、
対象ポートを介して輻輳マークを持っている第1パケットを受信する受信手段261と、
プリセット貪欲フローテーブルから、第1パケットが持っている対象フロー情報と対象ポートの標識とを含む対象エントリーを検索し、ここで、プリセット貪欲フローテーブルにはプリセットトラフィック閾値より大きいトラフィックを有するデータフローのフロー情報と、当該フロー情報に対応するデータフローを受信するポートの標識と、が格納されている検索手段262と、
対象エントリーを見つけた場合、第1パケットを処理し、対象エントリーを見つけなかった場合、第1パケットが持っている輻輳マークを除去して第2パケットを取得し、第2パケットを処理する処理手段263と、備える。
【0400】
好ましい実施形態において、プリセット貪欲フローテーブルにおける各エントリーには初期アクティブ値が設定されており、上記の輻輳処理装置は、
対象エントリーを見つけた場合、対象エントリーの現在のアクティブ値を第1プリセット値だけ減算し、前記対象エントリーの調整後アクティブ値を取得する設定手段と、
対象エントリーの調整後アクティブ値が第2プリセット値である場合、プリセット貪欲フローテーブルから対象エントリーを削除する削除手段と、さらに、備える。
【0401】
好ましい実施形態において、処理手段263は、具体的に、
第1パケットがCNPであるとき、転送テーブルに対象フロー情報が含まれている場合、第1パケットが持っている対象ポートの標識を除去し、対象ポートの標識が除去された前記第1パケットを転送し、且つ対象エントリーのエージングカウンターを初期エージング値にリセットし、転送テーブルに前記対象フロー情報が含まれていない場合、第1パケットを破棄する、または、
転送テーブルに前記対象フロー情報が含まれている場合、第2パケットが持っている対象ポートの標識を除去し、対象ポートの標識が除去された第2パケットを転送し、転送テーブルに前記対象フロー情報が含まれていない場合、第2パケットを破棄するために用いられる。
【0402】
好ましい実施形態において、処理手段263は、具体的に、
第1パケットがECNパケットであるとき、転送テーブルに対象フロー情報が含まれている場合、第1パケットに対応するCNPを転送し、対象エントリーのエージングカウンターを初期エージング値にリセットし、転送テーブルに対象フロー情報が含まれていない場合、第1パケットを破棄する、または、
転送テーブルに前記対象フロー情報が含まれている場合、第2パケットが持っている対象ポートの標識を除去し、対象ポートの標識が除去された第2パケットを転送し、転送テーブルに前記対象フロー情報が含まれていない場合、第2パケットを破棄するために用いられる。
【0403】
好ましい実施形態において、上記の輻輳処理装置は、
対象ポートを介して輻輳マークを持っている第1パケットを受信するステップの前に、第1計算周期内に対象ポートを介して受信された複数のパケットが所属するデータフローのトラフィックを統計する第1統計手段と、
転送テーブルに含まれている候補フロー情報から、対象候補フロー情報として、トラフィックが最大となる予め設定された数のデータフローの候補フロー情報を特定し、ここで、候補フロー情報はハッシュ値が候補フローのフロー情報のハッシュ値と同一であるフロー情報であり、候補フローは統計されたトラフィックがプリセット候補フローのトラフィック閾値より大きいデータフローである特定手段と、
各対象候補フロー情報について、当該対象候補フロー情報に対応する対象データフローのトラフィックがプリセットトラフィック閾値より大きい場合、当該対象候補フロー情報と対象ポートの標識とを1つのエントリーとしてプリセット貪欲フローテーブルに添加する添加手段と、さらに、備える。
【0404】
好ましい実施形態において、第1統計手段は、具体的に、統計時間が第1計算周期に達するまで、
第2計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計し、ここで、一組にあるデータフローのフロー情報のハッシュ値が同一であるステップと、
第1合計トラフィックが第1プリセット候補サブ閾値より大きい場合、各組のデータフローについて、当該組のデータフローの第2合計トラフィックが第2プリセット候補サブ閾値より大きい場合、当該組のデータフローの第2合計トラフィックが、記録されている当該組のデータフローの合計トラフィックより大きいとき、記録されている当該組のデータフローの合計トラフィックを当該組のデータフローの第2合計トラフィックとして更新するステップと、
統計時間が第3計算周期に達しなかった場合、第2計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計するステップに戻って実行するステップと、
統計時間が第3計算周期に達した場合、各組のデータフローについて、記録されている当該組のデータフローの合計トラフィックがプリセット候補フローのトラフィック閾値より大きい場合、当該組のデータフローを1つのエントリーとしてプリセット候補貪欲フローテーブルに添加し、第2計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計するステップ戻って実行するステップと、を実行するために用いられる。
【0405】
好ましい実施形態において、第2計算周期は複数の統計周期に分割されており、各統計周期が1つのサブ長さレジスタ配列に対応し、各統計周期が1つの長さレジスタにも対応し、各サブ長さレジスタ配列には複数のハッシュ値に対応するサブ長さレジスタが含まれ、1つのハッシュ値が1つのサブ時間レジスタに対応し、
この場合、第1統計手段は、具体的に
対象ポートを介して受信された各パケットについて、
第1時間差が第2計算周期の長さより短い場合、第1時間差が統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアし、ここで、第1時間差は時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象統計周期は当該パケットの受信時間が所属する統計周期であるステップと、
第2時間差が第2計算周期の長さ以上である場合、対象ハッシュ値に対応する各サブ長さレジスタに格納されている長さをクリアし、ここで、第2時間差は対象サブ時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象サブ時間レジスタは当該パケットが持っているフロー情報の対象ハッシュ値に対応するサブ時間レジスタであるステップと、
対象統計周期に対応する対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加し、対象サブ長さレジスタが対象ハッシュ値に対応するステップと、
当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実行するために用いられる。
【0406】
好ましい実施形態において、第1統計手段は、さらに、
対象ポートを介して受信された各パケットについて、
第1時間差が第2計算周期の長さ以上である場合、複数のサブ長さレジスタ配列と複数の長さレジスタに格納されている長さをクリアするステップと、
対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加するステップと、
当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実行するために用いられる。
【0407】
好ましい実施形態において、第1統計手段は、さらに、
対象ポートを介して受信された各パケットについて、
第1時間差が第2計算周期の長さより短い場合、第1時間差が前記統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアするステップと、
第2時間差が第2計算周期の長さより短い場合、第2時間差が統計周期の長さ以上であるとき、対象サブ長さレジスタに格納されている長さをクリアするステップと、
対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加するステップと、
当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されている長さの合計値を統計するステップと、を実行するために用いられる。
【0408】
好ましい実施形態において、上記の輻輳処理の装置は、
各対象候補フロー情報に対応する対象データフローのトラフィックを統計し取得する第2統計手段をさらに備え、前記第2統計手段は、具体的に、統計時間が第6計算周期に達するまで、
第4計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップと、
第3合計トラフィックが第1プリセットトラフィックサブ閾値より大きい場合、各対象データフローについて、当該対象データフローの第4合計トラフィックが第2プリセットトラフィックサブ閾値より大きい場合、当該対象データフローの第4合計トラフィックが、記録されている当該対象データフローのトラフィックより大きいとき、記録されている当該対象データフローのトラフィックを当該対象データフローの第4合計トラフィックとして更新するステップと、
統計時間が第5計算周期に達しなかった場合、第4計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップに戻って実行するステップと、
統計時間が第5計算周期に達した場合、各対象データフローについて、記録されている当該対象データフローのトラフィックがプリセットトラフィック閾値より大きい場合、当該対象データフローのフロー情報を1つのエントリーとしてプリセット貪欲フローテーブルに添加し、第4計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップ戻って実行するステップと、を実行するために用いられる。
【0409】
好ましい実施形態において、第4計算周期は、複数の統計周期に分割されており、各統計周期が1つのサブ長さレジスタ配列に対応し、各統計周期が1つの長さレジスタにも対応し、各サブ長さレジスタ配列には複数の第1サブ長さレジスタと1つの第2サブ長さレジスタとが含まれており、1つの対象データフローが1つの第1サブ時間レジスタに対応し、第2サブ長さレジスタが対象データフロー以外の全てのデータフローに対応し、
第2統計手段は、具体的に、
対象ポートを介して受信された各パケットについて、
第3時間差が第4計算周期の長さより短い場合、第3時間差が統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアし、ここで、第3時間差は時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象統計周期は当該パケットの受信時間が所属する統計周期であるステップと、
第4時間差が第4計算周期の長さ以上である場合、当該パケットが所属するデータフローに対応する各サブ長さレジスタに格納されている長さをクリアし、ここで、第4時間差は対象サブ時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象サブ時間レジスタは当該パケットが所属するデータフローに対応するサブ時間レジスタであるステップと、
対象統計周期に対応する対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加し、対象サブ長さレジスタは当該パケットが所属するデータフローに対応するステップと、
当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が第4計算周期に達すると、第3合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各対象データフローの第4合計トラフィックとして、各対象データフローに対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実行するために用いられる。
【0410】
本願の実施形態により提供される技術的手段を適用すれば、ネットワークにおける貪欲フローを認識するための貪欲フローテーブルを予め設定することで、貪欲フローの輻輳制御を維持するとともに、非貪欲フローの輻輳制御を解除することにより、マウスフローに対するダメージを低減して輻輳制御の公平性を向上させる。
【0411】
また、本願の実施形態は、ECN閾値でトリガした後の処理に関する技術的手段を提供し、ECN閾値より大きい貪欲フローを独立して認識し、貪欲フローの輻輳制御を維持することができるので、ECN閾値を大きく設定しても、本願の実施形態における輻輳の処理に対する影響は大きくない。
【0412】
したがって、本願の実施形態により提供される技術的手段は、より大きいECN閾値を利用して輻輳制御を行うことができ、それにより、マウスフローに対するダメージを低減して輻輳制御の公平性を向上させるとともに、ネットワーク帯域幅の使用率を効果的に向上させることができる。
【0413】
上記の輻輳処理方法に対応し、本願の実施形態は、プロセッサー271と機械可読記憶媒体272とを備えるネットワークデバイスを提供し、
図27に示すように、機械可読記憶媒体272にはプロセッサー271により実行できる機械実行可能な命令が格納されており、プロセッサー271は、前記機械実行可能な命令を実行すると、
対象ポートを介して輻輳マークを持っている第1パケットを受信するステップと、
プリセット貪欲フローテーブルから、第1パケットが持っている対象フロー情報と対象ポートの標識とを含む対象エントリーを検索し、ここで、プリセット貪欲フローテーブルにはプリセットトラフィック閾値より大きいトラフィックを有するデータフローのフロー情報と、当該フロー情報に対応するデータフローを受信するポートの標識と、が格納されているステップと、
対象エントリーを見つけた場合、第1パケットを処理し、対象エントリーを見つけなかった場合、第1パケットが持っている輻輳マークを除去して第2パケットを取得し、第2パケットを処理するステップと、を実現する。
【0414】
好ましくは、プリセット貪欲フローテーブルにおける各エントリーには初期アクティブ値が設定されており、プロセッサーは、前記機械実行可能な命令を実行すると、
対象エントリーを見つけた場合、対象エントリーの現在のアクティブ値を第1プリセット値だけ減算し、前記対象エントリーの調整後アクティブ値を取得するステップと、
対象エントリーの調整後アクティブ値が第2プリセット値以下である場合、プリセット貪欲フローテーブルから対象エントリーを削除するステップと、を実現する。
【0415】
好ましくは、プロセッサーは、前記機械実行可能な命令を実行すると、
第1パケットがCNPであるとき、転送テーブルに対象フロー情報が含まれている場合、第1パケットが持っている対象ポートの標識を除去し、対象ポートの標識が除去された前記第1パケットを転送し、且つ対象エントリーのエージングカウンターを初期エージング値にリセットし、転送テーブルに前記対象フロー情報が含まれていない場合、第1パケットを破棄するステップ、または、
転送テーブルに前記対象フロー情報が含まれている場合、第2パケットが持っている対象ポートの標識を除去し、対象ポートの標識が除去された第2パケットを転送し、転送テーブルに前記対象フロー情報が含まれていない場合、第2パケットを破棄するステップ、を実現する。
【0416】
好ましくは、プロセッサーは、前記機械実行可能な命令を実行すると、
第1パケットがECNパケットであるとき、転送テーブルに対象フロー情報が含まれている場合、第1パケットに対応する第1パケットを転送し、対象エントリーのエージングカウンターを初期エージング値にリセットし、転送テーブルに対象フロー情報が含まれていない場合、第1パケットを破棄するステップ、または、
転送テーブルに前記対象フロー情報が含まれている場合、第2パケットが持っている対象ポートの標識を除去し、対象ポートの標識が除去された第2パケットを転送し、転送テーブルに前記対象フロー情報が含まれていない場合、第2パケットを破棄するステップ、を実現する。
【0417】
好ましくは、プロセッサーは、前記機械実行可能な命令を実行すると、
対象ポートを介して輻輳マークを持っている第1パケットを受信するステップの前に、第1計算周期内に対象ポートを介して受信された複数のパケットが所属するデータフローのトラフィックを統計するステップと、
転送テーブルに含まれている候補フロー情報から、対象候補フロー情報として、トラフィックが最大となる予め設定された数のデータフローの候補フロー情報を特定し、ここで、候補フロー情報はハッシュ値が候補フローのフロー情報のハッシュ値と同一であるフロー情報であり、候補フローは統計されたトラフィックがプリセット候補フローのトラフィック閾値より大きいデータフローであるステップと、
各対象候補フロー情報について、当該対象候補フロー情報に対応する対象データフローのトラフィックがプリセットトラフィック閾値より大きい場合、当該対象候補フロー情報と対象ポートの標識とを1つのエントリーとしてプリセット貪欲フローテーブルに添加するステップと、を実現する。
【0418】
好ましくは、プロセッサーは、前記機械実行可能な命令を実行すると、統計時間が第1計算周期に達するまで、
第2計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計し、ここで、一組にあるデータフローのフロー情報のハッシュ値が同一であるステップと、
第1合計トラフィックが第1プリセット候補サブ閾値より大きい場合、各組のデータフローについて、当該組のデータフローの第2合計トラフィックが第2プリセット候補サブ閾値より大きい場合、当該組のデータフローの第2合計トラフィックが、記録されている当該組のデータフローの合計トラフィックより大きいとき、記録されている当該組のデータフローの合計トラフィックを当該組のデータフローの第2合計トラフィックとして更新するステップと、
統計時間が第3計算周期に達しなかった場合、第2計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計するステップに戻って実行するステップと、
統計時間が第3計算周期に達した場合、各組のデータフローについて、記録されている当該組のデータフローの合計トラフィックがプリセット候補フローのトラフィック閾値より大きい場合、当該組のデータフローを1つのエントリーとしてプリセット候補貪欲フローテーブルに添加し、第2計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第1合計トラフィックと、各組のデータフローの第2合計トラフィックと、を統計するステップ戻って実行するステップと、を実現する。
【0419】
好ましくは、第2計算周期は複数の統計周期に分割されており、各統計周期が1つのサブ長さレジスタ配列に対応し、各統計周期が1つの長さレジスタにも対応し、各サブ長さレジスタ配列には複数のハッシュ値に対応するサブ長さレジスタが含まれ、1つのハッシュ値が1つのサブ時間レジスタに対応し、
プロセッサーは、前記機械実行可能な命令を実行すると、
対象ポートを介して受信された各パケットについて、
第1時間差が第2計算周期の長さより短い場合、第1時間差が統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアし、ここで、第1時間差は時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象統計周期は当該パケットの受信時間が所属する統計周期であるステップと、
第2時間差が第2計算周期の長さ以上である場合、対象ハッシュ値に対応する各サブ長さレジスタに格納されている長さをクリアし、ここで、第2時間差は対象サブ時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象サブ時間レジスタは当該パケットが持っているフロー情報の対象ハッシュ値に対応するサブ時間レジスタであるステップと、
対象統計周期に対応する対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加し、対象サブ長さレジスタが対象ハッシュ値に対応するステップと、
当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実現する。
【0420】
好ましくは、プロセッサーは、前記機械実行可能な命令を実行すると、
対象ポートを介して受信された各パケットについて、
第1時間差が第2計算周期の長さ以上である場合、複数のサブ長さレジスタ配列と複数の長さレジスタに格納されている長さをクリアするステップと、
対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加するステップと、
当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実現する。
【0421】
好ましくは、プロセッサーは、前記機械実行可能な命令を実行すると、
対象ポートを介して受信された各パケットについて、
第1時間差が第2計算周期の長さより短い場合、第1時間差が前記統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアするステップと、
第2時間差が第2計算周期の長さより短い場合、第2時間差が統計周期の長さ以上であるとき、対象サブ長さレジスタに格納されている長さをクリアするステップと、
対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加するステップと、
当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が第2計算周期に達すると、第1合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各ハッシュ値に対応する1組のデータフローの第2合計トラフィックとして、各ハッシュ値に対応する複数のサブ長さレジスタに格納されている長さの合計値を統計するステップと、を実現する。
【0422】
好ましくは、プロセッサーは、前記機械実行可能な命令を実行すると、統計時間が第6計算周期に達するまで、
第4計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップと、
第3合計トラフィックが第1プリセットトラフィックサブ閾値より大きい場合、各対象データフローについて、当該対象データフローの第4合計トラフィックが第2プリセットトラフィックサブ閾値より大きい場合、当該対象データフローの第4合計トラフィックが、記録されている当該対象データフローのトラフィックより大きいとき、記録されている当該対象データフローのトラフィックを当該対象データフローの第4合計トラフィックとして更新するステップと、
統計時間が第5計算周期に達しなかった場合、第4計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップに戻って実行するステップと、
統計時間が第5計算周期に達した場合、各対象データフローについて、記録されている当該対象データフローのトラフィックがプリセットトラフィック閾値より大きい場合、当該対象データフローのフロー情報を1つのエントリーとしてプリセット貪欲フローテーブルに添加し、第4計算周期内に対象ポートを介して受信されたパケットが所属する全てのデータフローの第3合計トラフィックと、各対象候補フロー情報に対応する対象データフローの第4合計トラフィックと、を統計するステップ戻って実行するステップと、によって、
各対象候補フロー情報に対応する対象データフローのトラフィックを統計し取得することを実現する。
【0423】
好ましくは、第4計算周期は、複数の統計周期に分割されており、各統計周期が1つのサブ長さレジスタ配列に対応し、各統計周期が1つの長さレジスタにも対応し、各サブ長さレジスタ配列には複数の第1サブ長さレジスタと1つの第2サブ長さレジスタとが含まれており、1つの対象データフローが1つの第1サブ時間レジスタに対応し、第2サブ長さレジスタが対象データフロー以外の全てのデータフローに対応し、
この場合、プロセッサーは、前記機械実行可能な命令を実行すると、
対象ポートを介して受信された各パケットについて、
第3時間差が第4計算周期の長さより短い場合、第3時間差が統計周期の長さ以上であるとき、対象統計周期に対応する対象長さレジスタに格納されている長さをクリアし、ここで、第3時間差は時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象統計周期は当該パケットの受信時間が所属する統計周期であるステップと、
第4時間差が第4計算周期の長さ以上である場合、当該パケットが所属するデータフローに対応する各サブ長さレジスタに格納されている長さをクリアし、ここで、第4時間差は対象サブ時間レジスタに格納されている時間と当該パケットの受信時間との時間差であり、対象サブ時間レジスタは当該パケットが所属するデータフローに対応するサブ時間レジスタであるステップと、
対象統計周期に対応する対象サブ長さレジスタを当該パケットの長さだけ増加し、対象長さレジスタを当該パケットの長さだけ増加し、対象サブ長さレジスタは当該パケットが所属するデータフローに対応するステップと、
当該パケットの受信時間を時間レジスタと対象サブ時間レジスタとして更新するステップと、
統計時間が第4計算周期に達すると、第3合計トラフィックとして、複数の長さレジスタに格納されている長さの合計値を統計し、各対象データフローの第4合計トラフィックとして、各対象データフローに対応する複数のサブ長さレジスタに格納されているデータの合計値を統計するステップと、を実現する。
【0424】
本願の実施形態により提供される技術的手段を適用すれば、ネットワークにおける貪欲フローを認識するための貪欲フローテーブルを予め設定することで、貪欲フローの輻輳制御を維持するとともに、非貪欲フローの輻輳制御を解除することにより、マウスフローに対するダメージを低減して輻輳制御の公平性を向上させる。
【0425】
また、本願の実施形態は、ECN閾値でトリガした後の処理に関する技術的手段を提供し、ECN閾値より大きい貪欲フローを独立して認識し、貪欲フローの輻輳制御を維持することができるので、ECN閾値を大きく設定しても、本願の実施形態における輻輳の処理に対する影響は大きくない。
【0426】
したがって、本願の実施形態により提供される技術的手段は、より大きいECN閾値を利用して輻輳制御を行うことができ、それにより、マウスフローに対するダメージを低減して輻輳制御の公平性を向上させるとともに、ネットワーク帯域幅の使用率を効果的に向上させることができる。
【0427】
上記の輻輳の処理方法に対応し、本願の実施形態は、機械可読記憶媒体を提供し、機械可読記憶媒体にはコンピュータプログラムが格納されており、コンピュータプログラムがプロセッサーにより実行されると、上記のいずれか記載の方法のステップを実現する。
【0428】
上記の輻輳の処理方法に対応し、本願の実施形態は、コンピュータプログラムがプロセッサーにより実行されると、上記のいずれか記載の方法のステップを実現する。
【0429】
機械可読な記憶媒体は、ランダムアクセスメモリ(Random Access Memory,RAM)や不揮発性メモリ(Non-Volatile Memory,NVM)などの少なくとも一つの磁気ディスク装置を含んでもよい。好ましくは、機械可読な記憶媒体は、上記のプロセッサーから離れた少なくとも1つの記憶装置であってもよい。
【0430】
プロセッサーは、中央処理装置(Central Processing Unit,CPU)、ネットワークププロセッサー(Network Processor,NP)などを含む汎用プロセッサーであってもよく、デジタル信号処理装置(Digital Signal Processing,DSP)、特定用途向け集積回路(Application Specific Integrated Circuit,ASIC)、フィールドプログラマブルゲートアレイ(Field-Programmable Gate Array,FPGA)又は他のプログラマブルロジックデバイス、ディスクリートゲートあるいはトランジスタロジックデバイス、ディスクリートハードウェアコンポーネントであってもよい。
【0431】
上記実施形態では、ソフトウェア、ハードウェア、ファームウェア、又はこれらの任意の組み合わせによって、全て又は一部を実現することができる。ソフトウェアで実現する場合、コンピュータプログラム製品の形で、その全部又は一部を実現することができる。上記コンピュータプログラム製品は、1つ又は複数のコンピュータ命令を含む。コンピュータ上で上記コンピュータプログラム命令がロードされて実行されると、本願の実施形態に記載されたプロセス又は機能の全部又は一部は生成される。上記のコンピュータは、汎用コンピュータ、専用コンピュータ、コンピュータネットワーク、又は他のプログラム可能なデバイスとすることができる。上記のコンピュータ命令は、コンピュータ読取可能な記憶媒体に格納されてもよく、又は、コンピュータ読取可能な記憶媒体から別のコンピュータ読取可能な記憶媒体に送信されてもよい。例えば、該コンピュータ命令は、ウェブサイト、コンピュータ、サーバ、又はデータセンターから、有線(例えば、同軸ケーブル、光ファイバ、デジタル加入者線(DSL))又は無線(例えば、赤外線、ワイヤーレス、マイクロウェーブなど)を介して、別のウェブサイト、コンピュータ、サーバ、又はデータセンターに送信することができる。上記のコンピュータ読取可能な記憶媒体は、コンピュータがアクセス可能な任意の利用可能な媒体、或いは、1つ又は複数の利用可能な媒体を一体化したサーバ、データセンターなどのデータ記憶装置とすることができる。上記利用可能な媒体は、磁気媒体(例えば、フロッピーディスク、ハードディスク、磁気テープ)、光媒体(例えば、DVD)、又は半導体媒体(例えば、ソリッドステートドライブ(Solid State Disk,SSD))等であってよい。
【0432】
なお、本明細書において、第1や第2のような関係用語は、1つのエンティティ又は操作を他のエンティティ又は操作と区別するために用いられるもの過ぎず、これらのエンティティ又は操作の間にこのような実際的な関係又は順序が存在することをリクエスト又は示唆しない。また、用語「備える」、「含む」、又はその他の変形は、非排他的な包含を意図し、一連の要素を含むプロセス、方法、物品、又はデバイスがそれらの要素だけでなく、明示的に列挙されていない他の要素を含み、或いは、このようなプロセス、方法、物品又はデバイスにおける固有の要素を含む。特に制限がない限り、「1つの…を含む」により限定される要素は、上記要素を含むプロセス、方法、物品又はデバイスがさらに他の同一な要素を有することを排除するものではない。
【0433】
なお、本明細書における各実施形態は、相互に関連したように記載されているが、各実施形態間の同一又は類似の部分は、互いに参照すればよく、各実施形態と他の実施形態との相違点が中心に説明される。特に、装置、サーバの実施形態に対し、方法の実施形態にほぼ類似するので、説明が簡単であり、関連する部分は方法の実施形態に参照すればよい。
【0434】
以上の説明は、本願の好ましい実施形態にすぎず、本願の保護範囲を限定するものではない。本願の精神及び原則の範囲内で行われた任意の補正、同等の置換、変更等は、いずれも本願の保護範囲内に含まれているものとする。