リクエストごとに大量のデータ(約1〜2ギガ)を転送する必要があるサーバーがあります。送信する各呼び出しに必要なデータの推奨量はどれくらいですか?それは重要ですか?
2 に答える
パケット サイズは、プロトコルの最大転送単位 (MTU) によって制限されます。MTU より大きいパケットを送信すると、パケットの断片化が発生します。
いくつかの計算を行うことができます: http://www.speedguide.net/articles/mtu-what-difference-does-it-make--111 その他の参考文献: http://en.wikipedia.org/wiki/Maximum_transmission_unit
しかし、最終的に私の提案は、あなたが十分に良いことを目指してOSネットワーク層にその仕事をさせれば、生のソケットをプログラミングしたり、いくつかのファンキーなオプションを渡したりしない限り、OSがネットワークバッファを持ち、しようとするのはかなり一般的です.最善を尽くします。
この最後のオプションを考慮すると、socket.send() はユーザー プロセス メモリからカーネルのプライベート メモリへのメモリ転送に他なりません。経験則として、仮想メモリ ページ サイズhttp://en.wikipedia.org/wiki/Page_(computer_memory ) (通常は 4KB) を超えないようにしてください。
TCP/IP スタックは、PATH MTU よりも大きいパケットを送信しないように処理します。MTU よりも小さいパケットを送信するようにするには、スループットに役立たない方法でかなり苦労する必要があります。特定の接続のパス PTU が実際に何であるかを明らかにします。そのため、パス MTU については考慮しないでください。
すべてsend()
をできるだけ大きくすることができますし、そうすべきです。