Re: rsync slowness
Gregory Heytings via rsync <[email protected]>
| Newsgroups | gmane.network.rsync.general |
|---|---|
| Message-ID | <[email protected]> |
I got hit by that bug again, and this time I took the time to try to create a minimal recipe. It turns out that the culprit was the -y flag, which I had been using to save some bandwidth, but which doesn't work well when there are "too many" files in a directory. A simple reproducer (which does not exactly reproduce the issue described below, but seems close enough): #!/bin/bash mkdir -p src declare -i i=0 j=0 while : do echo $RANDOM$RANDOM$RANDOM > src/$(printf %09d $j).$RANDOM$RANDOM$RANDOM.foobarbaz.$RANDOM.$RANDOM.$RANDOM let i++ let j+=100 (($i == 100000)) && break done cp -a src dst rm -f dst/00[7-9]* rsync -avy src/ dst/ After copying about 900 files, rsync will hang during a couple of minutes, before copying another batch of about 900 files. During the next iterations, the batches become smaller: about 200 files. After each batch, rsync waits during a couple of minutes. I stopped the process after two hours, and only 17500 files had been copied. By comparison, rsync -av src/ dst/ only takes 2 seconds to copy the 30000 files. I removed the -y option from my scripts, but perhaps how -y works in directories with many files could be improved in one way or another? > > I've definitely not seen that. If you can produce a working example and > tar it up for us to look at, that might be interesting/useful. > > Just to check, though: you do not have --checksum/-c on, right? > >> I finally take the time to report an rsync slowness pattern that I've >> been seeing for years. >> >> Assuming: >> >> a directory with many (> 20K) files, for example a maildir, on the >> sending side, and >> >> a partial copy of that directory on the receiving side, with "enough" >> missing missing (say 5K), >> >> then the receiving side will do the following: it will take about one >> minute to start transferring the missing files, and will apparently >> hang about one minute every 200 files or so. After a few (about 10 or >> 20) iterations, the receiving side apparently hangs. >> >> On the receiving side rsync is using 100% CPU, on the sending side not >> more than a few percents. In case it matters, both sides are using >> ext4 filesystems, and Debian GNU/Linux. >> >> I tried --msgs2stderr -M--msgs2stderr, but that does not print any >> error message, I also tried to disable compression, to use >> --whole-file, to use --no-inc-recursive, ..., to no avail. >> >> Any hints? -- Please use reply-all for most replies to avoid omitting the mailing list. To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html