On Tue, Aug 27, 2019 at 02:59:30PM -0400, Jeff King wrote: > On Tue, Aug 27, 2019 at 12:04:27PM +0200, Uwe Kleine-König wrote: > > > $ sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"; time env GIT_CONFIG_NOSYSTEM=1 HOME=/nonexistant XDG_CONFIG_HOME=/nonexistant git --no-pager show --no-color --no-decorate v5.2 > > ... > > > > real 0m1.041s > > user 0m0.000s > > sys 0m0.021s > > > > $ git for-each-ref |wc -l > > 10013 > > > > So this is indeed the problem. > > That's not that many refs. Are they mostly unpacked? Loose refs are > awful on a cold cache, since it's one inode per ref (or worse, since it > has walk the directories, too). > > Try: > > find .git/refs -type f | wc -l ukl@xxxxxxxx:/ptx/src/git/linux.git$ find refs -type f | wc -l 2874 (Note this is a bare repository. So I used refs instead of .git/refs.) > to see the loose ones. If there are a lot, try: > > git pack-refs --prune --all > > (or just "git gc", which does this). This is a daily updated mirror that is also incrementally backed up. I repack from time to time, but hesitate to do this regularily as each time I repack the next backup run is "expensive" and I get many small packs. I did this now anyhow. After that I have: $ find objects/[0-9a-f][0-9a-f] -type f | wc -l 166 $ find objects/pack | wc -l 98 > Modern versions of Git should delete any leftover empty directories > after pruning the loose variants, but I think won't go out of their way > to remove ones they didn't delete from. And those are still expensive to > walk on a cold cache. If it's still slow, try: > > find .git/refs/* -type d | xargs rmdir -v There were a few: $ find refs/ -depth -type d -empty -print -delete | wc -l 147 (Oops, after the repacking above this also removed ./refs which I had to restore to make git recognize this as a repository.) With these two things done it is a bit faster: $ sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"; time env GIT_CONFIG_NOSYSTEM=1 HOME=/nonexistant XDG_CONFIG_HOME=/nonexistant git --no-pager show --no-color v5.2 tag v5.2 ... real 0m11.022s user 0m0.321s sys 0m0.248s Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ |