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 アプリケーションの例です。