パケット損失がパフォーマンスに影響を与えるのはなぜですか
環境
- すべてのNetApp製品
- TCP通信
- CIFS、NFS、iSCSI
回答
- パケット損失がパフォーマンスに影響を与える理由は数多くあります
- この記事の目的は、パケット損失が通常どのようにパフォーマンスの問題を引き起こすかを説明することであり、損失が発生する理由を説明することではありません
- パケット損失が検出されると、輻輳アルゴリズムはネットワーク上のTCPデータの量を制限し、さらなる損失を防ぎます。
- このアルゴリズムによって設定される制限は輻輳ウィンドウ(cwin)であり、損失のあるネットワークでは、平均輻輳ウィンドウを使用して、パケット損失が発生する前にどれだけのデータが送信されるかを確認します。
- 帯域幅遅延積(BDP)は、この輻輳ウィンドウと往復時間を関連付けることで、平均的な期待スループットを算出します。
- パケットが失われると、受信側は再送信されるまで新しいパケットへの応答を停止するため、最大で0.5秒の遅延が発生する可能性があります。
- Wiresharkが再送信としてフラグを立てたパケットを確認するには:
tcp.analysis.retransmission
- 一部のシステムではSACKと呼ばれるTCPフラグ(ONTAPなど)にフラグが立てられます。これは、一度にいくつのパケットが欠落しているかを特定するために使用できます。
- この Wireshark フィルタを使用すると、次のパケットを表示できます:
tcp.options.sack.count > 0
- この Wireshark フィルタを使用すると、次のパケットを表示できます:
追加情報
用語の意味:
-
データリンクの容量(ビット/秒)と往復遅延時間(秒)の積
その結果として得られるデータ量(ビット(またはバイト)で測定)は、任意の時点におけるネットワーク回線上の最大データ量、つまり送信済みだがまだ確認応答されていないデータ量に相当します
帯域幅遅延積は、ポートのリンク速度(ビット/秒)を10で割った値に、スイッチを介した負荷時の往復時間(通常は約1ミリ秒程度)を掛けることで推定できます。
- 例:
10 Gbps:(10 * 1000 * 1000 * 1000 / 8) * 0.017 = 21,250,000バイト
- 例:
-
往復時間には、配線の伝搬遅延やスイッチの遅延だけでなく、トラフィック交換中のスイッチ、ホスト、ストレージシステム内でのバッファリングも含まれます
異なるリンク速度を切り替えるスイッチは、対応するポートにこの範囲のバッファメモリを提供する必要がある。
-
通信のスループットは、輻輳ウィンドウと受信ウィンドウという2つのウィンドウによって制限される
輻輳ウィンドウはネットワークの容量を超えないようにします(輻輳制御)。受信ウィンドウは受信側がデータを処理する容量を超えないようにします(フロー制御)
受信側は、例えばWebサーバーのように非常にビジーな場合、データに圧倒される可能性があります
各TCPセグメントには、受信ウィンドウの現在の値が含まれています。
例えば、送信側がバイト4000を承認し、受信ウィンドウを10000(バイト)に指定したACKを受信した場合、送信側は輻輳ウィンドウが許容していても、バイト14000以降のパケットは送信しません。
-
TCPにおいて、輻輳ウィンドウは、一度に送信できるバイト数を決定する要因の1つです
輻輳ウィンドウは送信者によって維持されます
これは、受信側によって維持されるスライディングウィンドウサイズと混同しないように注意してください
輻輳ウィンドウは、送信側と受信側の間のリンクが過剰なトラフィックで過負荷になるのを防ぐための手段です。
これは、リンク上の輻輳の程度を推定することによって算出されます。
-
これは、送信者がバイトを送信し、受信者がバイトを確認応答し、送信者が確認応答を受信するまでに必要な時間です
通常はミリ秒(ms)で表されます。
ONTAP 9.1以下(Data ONTAP 8を含む)、または9.5以上では、netstatコマンドに再送信列があります。
ONTAP 9.1以下では、
RetransmitsONTAP 9.5以降では、
Rexmitと呼ばれますここでも、再送信回数の増加を確認すると役立つ場合があります(トレースを作成して Wireshark をインストールし、表示するよりも速いかもしれません)。