[Bug 8375] New: rsync with bandwidth limit sometimes expend extra time

samba-bugs at samba.org samba-bugs at samba.org
Sat Aug 13 02:58:39 MDT 2011


https://bugzilla.samba.org/show_bug.cgi?id=8375

           Summary: rsync with bandwidth limit sometimes expend extra time
           Product: rsync
           Version: 3.0.8
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P5
         Component: core
        AssignedTo: wayned at samba.org
        ReportedBy: fbmoser at gmail.com
         QAContact: rsync-qa at samba.org


If you transfer the arq1 file with 2,100 Kbytes using the option --bwlimit=16
the rsync expends about 131 seconds. This time is correct because the
calculated time is 131.25 seconds.

But when you transfer the arq2 file with 2,200 Kbytes, using the same option
--bwlimit=16 the rsync expends about 268 seconds that is about 130 seconds more
that the calculated time of 137.5 seconds.

The test can be made transfering the files to the same machine and using the
time command to measure the runtime.

The next lines demonstrates the problem: 

$ time rsync --bwlimit=16 /tmp/arq1 localhost::test

real    2m11.431s
user    0m0.001s
sys     0m0.014s

$ time rsync --bwlimit=16 /tmp/arq2 localhost::test

real    4m28.598s
user    0m0.000s
sys     0m0.020s
$

Using the source code from
http://pkgs.repoforge.org/rsync/rsync-3.0.8-1.rfx.src.rpm was possible to
discover the solution of the problem.

The next lines show the modifications needed in io.c file to resolve the
problem. 

$ diff -u io.c io.c-MOSER
--- io.c        2010-06-30 13:17:26.000000000 -0300
+++ io.c-MOSER  2011-08-12 22:29:41.000000000 -0300
@@ -1402,7 +1402,7 @@
        if (prior_tv.tv_sec) {
                elapsed_usec = (start_tv.tv_sec - prior_tv.tv_sec) * ONE_SEC
                             + (start_tv.tv_usec - prior_tv.tv_usec);
-               total_written -= elapsed_usec * bwlimit / (ONE_SEC/1024);
+               total_written -= ((long long)((long long)elapsed_usec *
bwlimit) / (ONE_SEC/1024));
                if (total_written < 0)
                        total_written = 0;
        }

Thank you.

Francisco Moser

-- 
Configure bugmail: https://bugzilla.samba.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the rsync mailing list