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

Re: [PATCH 01/02/RFC] implement a stat cache

From
LRLuciano Rocha <luciano@eurotux.com>
Date
Apr 20, 2008, 22:04 UTC
Message-ID
<20080420215700.GA18626@bit.office.eurotux.com>
In-Reply-To
<alpine.LFD.1.10.0804200836310.2779@woody.linux-foundation.org>
On Sun, Apr 20, 2008 at 09:03:13AM -0700, Linus Torvalds wrote:
Show 9 quoted lines
> 
> 
> On Sun, 20 Apr 2008, Luciano Rocha wrote:
> > 
> > That's a lot. Why not use a stat cache?
> 
> Well, the thing is, the OS _does_ a stat cache for us, and the one that 
> the OS maintains is a lot better, in that it works across processes and is 
> coherent with other processes changing things.

Sure. I am even unsure if the cache didn't break any sanity check (did a file change after ...? Did someone chdir(2)?).

> And the thing is, your stat cache makes the *common* cases slower. I 
> didn't do a whole lot of testing, but on my machine, doing just a "git 
> status" with and without your stat cache shows
<snip>

Well, it can be improved. The memcpy can be avoided by using the stored data directly, and a _or_die can be added for the common case.

Show 13 quoted lines
> Now, admittedly, I also do think that we should generally optimize the 
> slow cases more than we should care about things that are already very 
> fast, so I do not think that it's wrong to say "ok, let's make the really 
> fast case a bit slower, in order to not be so slow in the bad case", so in 
> that sense I do not think the slowdown is disastrous.
> 
> BUT. 
> 
> I really dislike adding a cache that is there just because we do something 
> stupid. We can fix the over-abundance of lstat() calls by just being 
> smarter. And the smarter we are, the less the cache will help, and the 
> more it will hurt. Which is the real reason why I think the cache is a 
> really really bad idea: it optimizes for the wrong kind of behavior.

I agree completly. If we can reduce the number of (l)stat calls to a single one per file, then we'll all be happier. But that kind of change is beyond my current understanding of git internals. ;)

Regards, Luciano Rocha

-- 
Luciano Rocha <luciano@eurotux.com>
Eurotux Informática, S.A. <http://www.eurotux.com/>
Previous: Linus TorvaldsNext: Linus Torvalds
Message 14 of 39 in “Git performance on OS X”
  1. Pieter de BieApr 19, 2008
  2. Linus TorvaldsApr 19, 2008
  3. Linus TorvaldsApr 19, 2008
  4. Pieter de BieApr 19, 2008
  5. David KastrupApr 20, 2008
  6. Linus TorvaldsApr 19, 2008
  7. Pieter de BieApr 19, 2008
  8. Linus TorvaldsApr 19, 2008
  9. Junio C HamanoApr 20, 2008
  10. 01/02 implement a stat cacheLuciano Rocha, Apr 20, 2008
  11. 02/02 make use of the stat cacheLuciano Rocha, Apr 20, 2008
  12. Luciano RochaApr 20, 2008
  13. Linus TorvaldsApr 20, 2008
  14. Luciano RochaApr 20, 2008
  15. Linus TorvaldsApr 20, 2008
  16. Linus TorvaldsApr 20, 2008
  17. Dmitry PotapovApr 21, 2008
  18. Johan HerlandApr 21, 2008
  19. Junio C HamanoApr 21, 2008
  20. Linus TorvaldsApr 21, 2008
  21. Linus TorvaldsApr 21, 2008
  22. Junio C HamanoApr 21, 2008
  23. Linus TorvaldsApr 21, 2008
  24. Junio C HamanoApr 21, 2008
  25. David KastrupApr 21, 2008
  26. Jakub NarebskiApr 19, 2008
  27. Linus TorvaldsApr 19, 2008
  28. Linus TorvaldsApr 19, 2008
  29. Pieter de BieApr 19, 2008
  30. Linus TorvaldsApr 19, 2008
  31. Roman ShaposhnikApr 19, 2008
  32. Pieter de BieApr 19, 2008
  33. Linus TorvaldsApr 20, 2008
  34. Roman ShaposhnikApr 20, 2008
  35. Pieter de BieApr 19, 2008
  36. Linus TorvaldsApr 20, 2008
  37. Dmitry PotapovApr 20, 2008
  38. David KastrupApr 20, 2008
  39. Linus TorvaldsApr 19, 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.