Date: Wed, 15 Jun 2011 13:14:32 +0200 From: dennis berger <db@bsdsystems.de> To: vadim_nuclight@mail.ru Cc: freebsd-performance@freebsd.org Subject: Re: strange differencies: find -exec \+ vs find | xargs Message-ID: <4E648192-7D2C-4556-B001-FDD812E821F8@bsdsystems.de> In-Reply-To: <slrnivh2kd.1g2d.vadim_nuclight@kernblitz.nuclight.avtf.net> References: <slrnivh2kd.1g2d.vadim_nuclight@kernblitz.nuclight.avtf.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Dear, I suspect that you're hitting a cache limit for that machine. I had similar behaviour when rsyncing huge directories. I usually raise = vfs.ufs.dirhash_maxmem sysctl variable, which solves the problem. best, -dennis Am 15.06.2011 um 12:33 schrieb Vadim Goncharov: > Hi, >=20 > There was a flamewar in a local maillist about the fastest way to do = chmod 644 > on files and chmod 755 on directories in a sbubtree. It suddenly = revealed the > strange thing: on the same subtree, find -type d -exec \+ on 76000 = directories > has the same as find | xargs, but on 246000 files it was 4 times = slower - while > there must be almost identical number of forks. >=20 > I've repeated the tests on deliberately old machine, a Pentium I 233 = MHz with > 80 Mb RAM, 7.4R UFS2. Subtree for tests was copy of /usr/src with = several > categories from /usr/ports. The output is from ZSH's builtin 'time' = (also > set up to automatically output if cmd was run more than 30 secs). >=20 > Below is the ooutput, first with 80K files, it doesn't differ, than = added > several more /usr/ports categories and got slow result on 100K. Why is > the difference at all? This machine has maxvnodes about 4600 and too = small > RAM for caches, if that's buffers, I'd expect the difference to begin = on > mush slow number of files. But it runs the same 80K normally... >=20 > kernblitz:/home/vadim# find /warehouse/garbage -type f | wc -l; find = /warehouse/garbage -type d | wc -l > 80208 > find /warehouse/garbage -type f 5,01s user 53,12s system 53% cpu = 1:48,52 total > wc -l 0,54s user 0,31s system 0% cpu 1:48,49 total > 13989 > find /warehouse/garbage -type d 4,52s user 52,00s system 53% cpu = 1:45,63 total > wc -l 0,11s user 0,06s system 0% cpu 1:45,61 total >=20 > kernblitz:/home/vadim# time chmod -R u+rwX,go+rX,go-w = /warehouse/garbage > chmod -R u+rwX,go+rX,go-w /warehouse/garbage 4,39s user 54,94s system = 53% cpu 1:50,73 total >=20 > kernblitz:/home/vadim# time find /warehouse/garbage -type f -exec = chmod 644 {} \+ > find /warehouse/garbage -type f -exec chmod 644 {} \+ 7,29s user = 100,30s system 65% cpu 2:43,29 total >=20 > kernblitz:/home/vadim# time find /warehouse/garbage -type d -exec = chmod 755 {} \+ > find /warehouse/garbage -type d -exec chmod 755 {} \+ 5,04s user = 58,91s system 54% cpu 1:58,05 total >=20 > kernblitz:/home/vadim# time find /warehouse/garbage -type f -print0 | = xargs -0 chmod 644 > find /warehouse/garbage -type f -print0 4,78s user 55,14s system 37% = cpu 2:40,27 total > xargs -0 chmod 644 3,26s user 46,70s system 30% cpu 2:41,26 total >=20 > kernblitz:/home/vadim# cp -r /usr/ports/[e-k]* /warehouse/garbage > cp -r /usr/ports/[e-k]* /warehouse/garbage 4,57s user 115,70s system = 29% cpu 6:54,47 total >=20 > kernblitz:/home/vadim# find /warehouse/garbage -type f | wc -l; find = /warehouse/garbage -type d | wc -l > 102014 > find /warehouse/garbage -type f 6,46s user 69,75s system 48% cpu = 2:38,31 total > wc -l 0,78s user 0,27s system 0% cpu 2:38,29 total > 19714 > find /warehouse/garbage -type d 6,11s user 72,32s system 48% cpu = 2:43,26 total > wc -l 0,13s user 0,09s system 0% cpu 2:43,24 total >=20 > kernblitz:/home/vadim# time chmod -R u+rwX,go+rX,go-w = /warehouse/garbage > chmod -R u+rwX,go+rX,go-w /warehouse/garbage 5,59s user 69,97s system = 48% cpu 2:36,53 total >=20 > kernblitz:/home/vadim# time find /warehouse/garbage -type d -exec = chmod 755 {} \+ > find /warehouse/garbage -type d -exec chmod 755 {} \+ 6,72s user = 83,05s system 23% cpu 6:15,22 total >=20 > kernblitz:/home/vadim# time find /warehouse/garbage -type f -exec = chmod 644 {} \+ > find /warehouse/garbage -type f -exec chmod 644 {} \+ 10,49s user = 138,30s system 20% cpu 12:14,49 total >=20 > kernblitz:/home/vadim# time find /warehouse/garbage -type f -print0 | = xargs -0 chmod 644 > find /warehouse/garbage -type f -print0 6,58s user 70,84s system 35% = cpu 3:36,67 total > xargs -0 chmod 644 3,93s user 59,30s system 28% cpu 3:39,50 total >=20 > --=20 > WBR, Vadim Goncharov. ICQ#166852181 = mailto:vadim_nuclight@mail.ru > [Moderator of = RU.ANTI-ECOLOGY][FreeBSD][http://antigreen.org][LJ:/nuclight] >=20 > _______________________________________________ > freebsd-performance@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-performance > To unsubscribe, send any mail to = "freebsd-performance-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E648192-7D2C-4556-B001-FDD812E821F8>