git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[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
Next: Linus Torvalds
Message 1 of 5 in “Soem core git optimizations”
  1. 0/2 Soem core git optimizationsLinus Torvalds, May 9, 2008
  2. 1/2 Avoid some unnecessary lstat() callsLinus Torvalds, May 9, 2008
  3. 2/2 Optimize symlink/directory detectionLinus Torvalds, May 9, 2008
  4. Junio C HamanoMay 11, 2008
  5. Linus TorvaldsMay 11, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.