修改rsync中TCP Socket的SNDBUF和RCVBUF的大小

    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

说老实话, 我也看不懂所有的代码, 也没有打算要看懂它.

我想知道源码简单的流程,有人知道吗??

我想知道源码简单的流程,有人知道吗??

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • Most of them are less than 30.
  • 他们中大多数不到30岁.
  • I guess he's about 30.
  • 我猜他大概30岁.
  • She's going to be 15 next month.
  • 下个月她就满15了.
  • They'll have a party for their 10th wedding anniversary.
  • 他们将为结婚十周年开个晚会.
  • He's still a boy after all.
  • 他毕竟还只是个孩子.