[PATCH 0/2] Soem core git optimizations
- From
Linus Torvalds <torvalds@linux-foundation.org>
- Date
- May 9, 2008, 16:04 UTC
- Message-ID
- <alpine.LFD.1.10.0805090856350.3142@woody.linux-foundation.org>
I notice that Junio merged my fnmatch-avoidance patch, but I have a few other optimizations that I track in my private tree that I have sent out but probably didn't get much attention. They do matter from a performance angle, even if not as much as avoiding fnmatch did.
The first patch is obvious and pretty trivial: just moving lstat() calls up a bit in the call-chain, so that you don't end up unnecessarily doing two lstat() calls after each other.
The second patch is the symlink detection rewrite, which avoids a _lot_ of unnecessary lstat calls under some loads by not doing the lstat on the directory path entries over and over for each pathname. It's just a single-deep cache for "last directory seen" and "last symlink seen", and replaces the old code that only cached the last symlink.
Diffstat for the combined thing as follows:
builtin-apply.c | 2 +- builtin-commit.c | 6 ++- cache.h | 4 ++- diff-lib.c | 10 +++--- read-cache.c | 29 +++++++++++-------- symlinks.c | 82 ++++++++++++++++++++++++++++++++--------------------- unpack-trees.c | 12 +++---- 7 files changed, 84 insertions(+), 61 deletions(-)
and while this probably doesn't matter on most loads, the reason I'm re-sending is that I think it's pretty solid and core code. I've been running with both of these patches (and some others) rebased on top of Junio's tree for the last few weeks.
Linus