rsync 2.6.8中的"--sockopts"并不能真正起作用, 所以只有自已改了. 在sender.c中加上如下红色部分代码:
if (is_a_socket(f_out))
{
set_socket_options(f_out, "SO_SNDBUF=524288");
set_socket_options(f_out, "SO_RCVBUF=524288");
if (verbose)
{
int sndbuf,rcvbuf,len;
len = sizeof(sndbuf);
getsockopt(f_out, SOL_SOCKET, SO_SNDBUF,&sndbuf, &len);
len = sizeof(rcvbuf);
getsockopt(f_out, SOL_SOCKET, SO_RCVBUF,&rcvbuf, &len);
rprintf(FINFO, "Sender TCP options : SO_SNDBUF = %d, SO_RCVBUF=%d\n", sndbuf, rcvbuf);
}
}
if (!do_xfers) { /* log the transfer */
if (!am_server && log_format)
在receiver.c中加上如下红色部分代码:
if (is_a_socket(f_in))
{
set_socket_options(f_in, "SO_RCVBUF=524288");
set_socket_options(f_in,"SO_SNDBUF=524288");
if (verbose)
{
int sndbuf,rcvbuf,len;
len = sizeof(sndbuf);
getsockopt(f_in, SOL_SOCKET, SO_SNDBUF,&sndbuf, &len);
len = sizeof(rcvbuf);
getsockopt(f_in, SOL_SOCKET, SO_RCVBUF,&rcvbuf, &len);
rprintf(FINFO, "Receiver TCP options : SO_SNDBUF = %d, SO_RCVBUF=%d\n", sndbuf, rcvbuf);
}
}
while ((i = recv_token(f_in, &data)) != 0) {
在rsync.h中将以下两个的值改为256KB:
#define WRITE_SIZE (256*1024)
#define CHUNK_SIZE (256*1024)
在rsync中用-alvvvv检验更改结果:
......
Sender TCP options : SO_SNDBUF = 524288, SO_RCVBUF=524288
......
Receiver TCP options : SO_SNDBUF = 524288, SO_RCVBUF=57344
data recv 262144 at 0
data recv 262144 at 262144
data recv 262144 at 524288
data recv 262144 at 786432
data recv 262144 at 1048576
data recv 262144 at 1310720
data recv 262144 at 1572864
data recv 262144 at 1835008
data recv 262144 at 2097152
data recv 228348 at 2359296
......
结果还在检验之中...
留言 (4)
您好!我对rsync也非常感兴趣,但是看不懂它的代码,你能帮我看懂代码吗?我的QQ:282757389
Posted by bookine | Mar 7, 2007 10:17 AM
说老实话, 我也看不懂所有的代码, 也没有打算要看懂它.
Posted by anysql | Mar 7, 2007 10:22 AM
我想知道源码简单的流程,有人知道吗??
Posted by saviola | Mar 23, 2007 5:46 PM
我想知道源码简单的流程,有人知道吗??
Posted by XEIM | Aug 9, 2008 12:09 AM