On Tue, Feb 04, 2003 at 03:06:05AM +0200, Mikko Rauhala wrote: > Hello > > I'm using a cable modem with a slow uplink, and therefore when I want to > transfer large amounts of data upstream, I tend to use rsync with > --bwlimit. However, the stock rsync seems to send a bit too much data at > once for comfort, momentarily blocking my meager upstream enough to > bother latency and downstream data transfer (through not getting through > enough ack packets when rsync data fills the cabel modem buffer). > > I tried a quick kludge, simply limiting the size of a single write() > operation so that the write/sleep cycle happens more often, yielding (I > hoped) a more steady flow of data, so that the cabel modem buffer > wouldn't contain too much data at any point. Through comparing > interactive session use before and after the patch, I would have to > conclude that this kludge worked in my Debian GNU/Linux (unstable) box. > > Now, the point is that I like the kludge and I'd like rsync proper to > adopt perhaps a lesser-kludgeish command line option (or something) for > this kind of functionality, if you're so inclined. Might be useful to > others in similiar circumstances. > > Here's my quick kludge (just a one-liner really, thanks to a proper > write loop structure), which probably can reduce performance in the > general case through using more writes, but has worked nicely for me > (against 2.5.5 from Debian's sources; and yes, the "1024" is a magic > number):
Just how magic is the 1024? To what was bwlimit set? And the MTU? You do bring up an interesting point. I could see restricting the write to bwlimit/100. Sleeping much longer than 100ms is a bit crude. something like max_xmit = bwlimit / 100; if (max_xmit < 1024) max_xmit = 1024; and then in writefd_unbuffered size_t n = len - total; if (max_xmit && n > max_xmit) n = max_xmit; I'm no network internals sorcerer (networking seems something of a black art) and wouldn't want things to get too magical but perhaps linking this into MTU or somewhat. I'd hate to see us setting it to a value that causes lots of padded packets. > > --- io.c.old 2002-03-22 07:14:44.000000000 +0200 > +++ io.c 2003-02-04 02:50:14.000000000 +0200 > @@ -440,7 +440,7 @@ > if (FD_ISSET(fd, &w_fds)) { > int ret; > size_t n = len-total; > - ret = write(fd,buf+total,n); > + ret = write(fd,buf+total,(n<1024?n:1024)); > > if (ret == -1 && errno == EINTR) { > continue; > > -- > Mikko Rauhala - [EMAIL PROTECTED] - <URL:http://www.iki.fi/mjr/> > Transhumanist - WTA member - <URL:http://www.transhumanism.org/> > Singularitarian - SIAI supporter - <URL:http://www.singinst.org/> > > -- > To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/rsync > Before posting, read: http://www.tuxedo.org/~esr/faqs/smart-questions.html -- ________________________________________________________________ J.W. Schultz Pegasystems Technologies email address: [EMAIL PROTECTED] Remember Cernan and Schmitt -- To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/rsync Before posting, read: http://www.tuxedo.org/~esr/faqs/smart-questions.html