TCP/IPを介して任意の長さのファイルをチャンクで転送するとします。
looping...
read(buffer, LENGTH)
send(mysocket, buffer, LENGTH, flags)
私の質問は、LENGTHの最適値は何でしょうか?それともまったく問題ではありませんか?256バイトから8192バイトまですべてが使用されているのを見てきました。
TCP/IPを介して任意の長さのファイルをチャンクで転送するとします。
looping...
read(buffer, LENGTH)
send(mysocket, buffer, LENGTH, flags)
私の質問は、LENGTHの最適値は何でしょうか?それともまったく問題ではありませんか?256バイトから8192バイトまですべてが使用されているのを見てきました。
最適とはどういう意味かによって異なります。帯域幅を最適に使用するには、パケットサイズを最大化する必要があるため、少なくともネットワークパケットサイズ(イーサネットでは通常約1500バイト)を送信します。ディスクから読み取る場合は、4096バイトまたは8192バイトが適切な値になります。
バッファサイズがパケットサイズに変換される場合は、バッファが短い方が適切です。パケットエラーが発生した場合の再送信は少なくなります。
ATMは、54バイトのパケットでこれを極限まで高めました。
ただし、ライブラリによっては、独自のバッファリングを実行し、パケットサイズを独立して設定している場合があります。YMMV。
高遅延接続を介して大量のデータを送信する場合は、送信バッファーを大きくするとスループットが向上します。ここに良い説明があります: http ://www.onlamp.com/pub/a/onlamp/2005/11/17/tcp_tuning.html