2.4.2 輻輳制御

通信回線上で輻輳が発生した場合は,ネットワーク機器のどれかのバッファがオーバフローを起こすため,受信側のバッファに格納されるはずのUDPパケットが破棄されます。

輻輳が頻繁に起こる場合は,受信側から見ると連続してパケットロスが発生するため,再送要求の回数が増えます。また,送信側がこの再送要求どおりに再送を行うと,ネットワークのトラフィックをさらに増加させるため,輻輳が解消できません。

そのため,XTCでは送信側が輻輳制御を行うことで輻輳を解消します。なお,輻輳制御は,送信元スレッド単位に行われます。

<この項の構成>
(1) 輻輳制御の開始と終了
(2) 輻輳制御の方法

(1) 輻輳制御の開始と終了

輻輳制御の開始と終了について説明します。

■輻輳制御の開始
監視対象の範囲内(RPC関連定義のrpc_udp_congestion_packet_countオペランドの指定値)に送信したパケットについて,再送パケットの比率がパケットロス上限(UDPグループ情報関連定義のmyudpsnddef定義コマンドの-Lオプションの指定値)以上になった場合に輻輳制御を開始します。
■輻輳制御の終了
監視対象の範囲内(RPC関連定義のrpc_udp_congestion_packet_countオペランドの指定値)に送信したパケットについて,再送パケットの比率がパケットロス下限(UDPグループ情報関連定義のmyudpsnddef定義コマンドの-lオプションの指定値)以下になった場合に輻輳制御を終了します。

再送パケット比率が0%→100%→0%と遷移し,かつ,パケットロス上限に70,パケットロス下限に30が指定された場合の輻輳状態の遷移例を次の図に示します。

図2-21 輻輳状態の遷移例

[図データ]

(2) 輻輳制御の方法

輻輳を検知した直後に輻輳制御を開始します。輻輳制御を開始した時点で仕掛かり中のメッセージについても輻輳制御によって再送します。輻輳制御では,次に示す方法によって,トラフィックを軽減します。

■肯定応答が未受信で連続送信できるパケット数の縮小
通常状態では,メッセージの最終パケットを送信した時点で再送タイマを設定します。しかし,輻輳状態では,最終パケットだけではなく,中間パケットを送信した時点でも再送タイマを設定します。
肯定応答待ちは,再送パケット比率を基に自動的に決定したパケット数のパケット送信ごとに行うようにします。肯定応答待ちを行うパケット数の最低値はUDPグループ情報関連定義のmyudpsnddef定義コマンドの-Uオプションで指定します。この制御によって,連続送信によるトラフィック増加を回避できます。
■否定応答の受信時の再送契機
通常状態では,否定応答を受信した場合,すぐに再送パケットを送信します。
輻輳状態では,否定応答を受信した場合,再送タイマのタイムアウト時に再送パケットを送信します。
■再送タイマの変更
通常状態の場合,再送タイマのタイマ値には,UDPグループ情報関連定義のeeudpdef,clgrpdef,またはmyudpsnddef定義コマンドの-wオプションの指定値を使用します。
輻輳状態の場合,再送タイマのタイマ値には,eeudpdef,clgrpdef,またはmyudpsnddef定義コマンドの-Wオプション指定値を使用します。ただし,-Wオプションを指定していない場合は,タイマ値を変更しません。
それぞれの定義コマンドに異なる値を指定した場合の優先順位は次のとおりです。
  • 同一のクラスタグループ内で通信する場合
    clgrpdef定義コマンドの指定値>myudpsnddef定義コマンドの指定値
  • 同一のクラスタグループ外と通信する場合
    eeudpdef定義コマンドの指定値>myudpsnddef定義コマンドの指定値