ffftp を quick hack(その1)
ffftp のソースを quick hack してみる。
(高速 LAN 上の転送で、いまひとつ速度が出ていない気がしたため)
改変内容:
getput.c line.29 に以下の3行を挿入。
#undef BUFSIZE // quickhack
#define BUFSIZE (32 * 1024)
#define SOCKBUF_SIZE (256 * 1024)
DownLoadFile() 内の char TmpBuf[ONELINE_BUF_SIZE]; の直後に
以下の行を挿入。
int buf_size = SOCKBUF_SIZE;
for ( ; buf_size > 0; buf_size /= 2)
if (setsockopt(dSkt, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size,
sizeof(buf_size)) == 0)
break;
UploadLoadFile() 内の char TmpBuf[ONELINE_BUF_SIZE]; の直後に
上記の DownLoadFile() に挿入したコードの SO_RCVBUF を SO_SNDBUF
に変更したものを挿入。
環境:
ftp Client ... WinXP (P4/2.3GHz, 512MB RAM)
ftp Server ... Solaris7 (UltraSPARCII/450MHz(dual), 1GB RAM)
LAN ... 100BaseTX
テスト:
300MB ファイルの upload と download を5回繰り返した平均
(従来)
upload ... 約 3.8 MB/s
download ... 約 8.6 MB/s
(変更後)
upload ... 約 9.1 MB/s
download ... 約 10.2 MB/s
作者さんにも一応メールで伝えてみた。
(ただ、基本的なチューンなので、百も承知の可能性大(笑))
加えて、
・upload 時は ReadFile() + send() ではなく mmap した領域を直接 send()
・非同期 WSAAsyncSelect() を thread + 同期 select() に変更
あたりを行うともっと高速化されるかも。
(ちなみに、これらの方法は ipmsg のファイル転送でも使っている)