TCP ストリーミング・ワークロードのチューニング

ストリーミング・ワークロードは、1 つの端点から他の端点へ大量のデータを移動します。 ストリーミング・ワークロードの例は、ファイル転送、バックアップまたはリストアのワークロード、 バルク・データ転送などです。 これらのワークロードで重要な意味を持つ測定基準は帯域幅ですが、終端間の待ち時間も注目に値します。

ストリーミング・アプリケーションの TCP パフォーマンスに影響を与える主なチューニング・オプションは、以下のとおりです。

  • tcp_recvspace
  • tcp_sendspace
  • rfc1323
  • MTU パス・ディスカバリー
  • TCP_NODELAYACK
  • SB 最大値
  • チェックサム・オフロードや TCP 大容量送信などのアダプター・オプション
アダプターのタイプと MTU サイズに基づいて最適なパフォーマンスを得るためのチューニング・オプション値の推奨サイズを以下の表にまとめます。
装置 速度 MTU サイズ tcp_sendspace tcp_recvspace sb_max 1 rfc1323
トークンリング 4 または 16 M ビット 1492 16384 16384 32768 0
イーサネット (Ethernet) 10 M ビット 1500 16384 16384 32768 0
イーサネット (Ethernet) 100 M ビット 1500 16384 16384 65536 0
イーサネット (Ethernet) ギガビット 1500 131072 65536 131072 0
イーサネット (Ethernet) ギガビット 9000 131072 65535 262144 0
イーサネット (Ethernet) ギガビット 9000 262144 1310722 524288 1
イーサネット (Ethernet) 10 ギガビット 1500 131072 65536 131072 0
イーサネット (Ethernet) 10 ギガビット 9000 262144 131072 262144 1
ATM 155 M ビット 1500 16384 16384 131072 0
ATM 155 M ビット 9180 65535 655353 131072 0
ATM 155 M ビット 65527 655360 6553604 1310720 1
FDDI 100 M ビット 4352 45056 45056 90012 0
ファイバー・チャネル 2 ギガビット 65280 655360 655360 1310720 1

(1) sb_max チューニング・オプションにはデフォルト値 1048576 を使用することを推奨します。 この表の値は、sb_max チューニング・オプションで受け入れ可能な最小値です。

(2) ギガビット・イーサネット上のジャンボ・フレームで、rfc1323 を使用可能にしてこれらのオプションを使用すると、パフォーマンスが若干向上します。

(3) TCP 送信スペースと受信スペースを特定の組み合わせにすると、結果的にスループットが非常に低下します (1 M ビット以下)。 この問題を回避するには、tcp_sendspace チューニング・オプションを、MTU サイズの 3 倍以上の値、または受信側の tcp_recvspace と同じ値に設定します。

(4) TCP はウィンドウ・サイズとして 16 ビット値しか使用しません。 これは、最大ウィンドウ・サイズの 65536 バイトに変換されます。 MTU サイズが大きい (例えば、32 KB または 64 KB などの) アダプターの場合は、TCP ストリーミング・パフォーマンスが非常に低下することがあります。 例えば、MTU サイズが 64 KB のデバイスでは、tcp_recvspace が 64 KB に設定されていると、TCP は 1 つのパケットだけを送信でき、そのウィンドウはクローズします。 再び送信するには、 受信側から ACK が戻されるのを待機する必要があります。 この問題は、次の方法のうちのいずれかで解消できます。
  • rfc1323 を使用可能にする。この場合は TCP が拡張され、64 KB を超えるサイズのウィンドウを使用できるように 16 ビットの制限を超えることができます。 そのあと、tcp_recvspace チューニング・オプションを MTU サイズの 10 倍などの大きい値に設定すると、TCP がデータのストリーミングを行い、 高いパフォーマンスが得られます。
  • アダプターの MTU サイズを小さくする。 例えば、ifconfig at0 mtu 16384 コマンドを使用して、ATM MTU サイズを 16 KB に設定してください。 これにより、TCP はより小さいサイズの MSS 値を算出できます。 MTU サイズが 16 KB でも、 TCP は 64 KB ウィンドウ・サイズに 4 個のパケットを送信できます。

以下に TCP ストリーミング・ワークロードのチューニングに関する一般的なガイドラインを示します。

  • TCP 送信および受信スペースを少なくとも MTU サイズの 10 倍に設定します。
  • MTU サイズが 8 KB を超えている場合は、TCP 受信スペース値を大きくするために、rfc1323 を使用可能にする必要があります。
  • 高速アダプターでは、TCP 送信および受信スペース値を大きくすることでパフォーマンスを改善できます。
  • 高速アダプターでは、tcp_sendspace チューニング・オプションの値は、 tcp_recvspace 値の 2 倍である必要があります。
  • lo0 インターフェースの rfc1323 はデフォルトで設定されます。 lo0 のデフォルト MTU サイズは 1500 より高くなるため、tcp_sendspace および tcp_recvspace チューナブルは 128K に設定されます。

ftp および rcp コマンドは、tcp_sendspace および tcp_recvspace チューニング・オプションをチューニングすることによって優れた効果を得られる TCP アプリケーションの例です。