On Wed, May 26, 2004 at 09:42:55AM +0200, Paul Slootman wrote: > What is a typical value for "len-total"?
The most typical value is "4". Once a file starts to transfer, values are typically several K (I've seen up to 32K, but only on larger files). I had been thinking that a better algorithm for setting the max value correctly for both large and small values of bwlimit would be good. Maybe something like this: --- io.c 15 May 2004 19:31:10 -0000 1.121 +++ io.c 26 May 2004 09:48:27 -0000 @@ -47,6 +47,7 @@ static time_t last_io; static int no_flush; extern int bwlimit; +extern size_t bwlimit_writemax; extern int verbose; extern int io_timeout; extern int am_server; @@ -812,6 +813,8 @@ static void writefd_unbuffered(int fd,ch if (FD_ISSET(fd, &w_fds)) { int ret; size_t n = len-total; + if (bwlimit && n > bwlimit_writemax) + n = bwlimit_writemax; ret = write(fd,buf+total,n); if (ret < 0) { --- options.c 24 May 2004 18:38:05 -0000 1.152 +++ options.c 26 May 2004 09:48:27 -0000 @@ -83,6 +83,7 @@ int safe_symlinks = 0; int copy_unsafe_links = 0; int size_only = 0; int bwlimit = 0; +size_t bwlimit_writemax = 0; int delete_after = 0; int only_existing = 0; int opt_ignore_existing = 0; @@ -728,6 +729,12 @@ int parse_arguments(int *argc, const cha if (do_progress && !verbose) verbose = 1; + if (bwlimit) { + bwlimit_writemax = (size_t)bwlimit * 128; + if (bwlimit_writemax < 512) + bwlimit_writemax = 512; + } + if (files_from) { char *colon; if (*argc != 2 && !(am_server && am_sender && *argc == 1)) { This makes the calculation more like the original for larger bwlimit values, but tries to avoid making really small TCP packets for smaller bwlimit values (which was a concern someone expressed a while back). The above logic for setting bwlimit_writemax should probably be tuned with actual testing (it's currently just an arbitrary "this looks good" choice). ..wayne.. -- To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/rsync Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html