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

Re: [PATCHv5 00/14] git notes

From
Johan Herland <johan@herland.net>
Date
Sep 10, 2009, 09:25 UTC
Message-ID
<200909101125.35451.johan@herland.net>
In-Reply-To
<200909081436.30761.johan@herland.net>
On Tuesday 08 September 2009, Johan Herland wrote:
Show 26 quoted lines
> On Tuesday 08 September 2009, Johannes Schindelin wrote:
> > On Tue, 8 Sep 2009, Johan Herland wrote:
> > > Algorithm / Notes tree   git log -n10 (x100)   git log --all
> > > ------------------------------------------------------------
> > > next / no-notes                4.77s              63.84s
> > >
> > > before / no-notes              4.78s              63.90s
> > > before / no-fanout            56.85s              65.69s
> > >
> > > 16tree / no-notes              4.77s              64.18s
> > > 16tree / no-fanout            30.35s              65.39s
> > > 16tree / 2_38                  5.57s              65.42s
> > > 16tree / 2_2_36                5.19s              65.76s
> > >
> > > flexible / no-notes            4.78s              63.91s
> > > flexible / no-fanout          30.34s              65.57s
> > > flexible / 2_38                5.57s              65.46s
> > > flexible / 2_2_36              5.18s              65.72s
> > > flexible / ym                  5.13s              65.66s
> > > flexible / ym_2_38             5.08s              65.63s
> > > flexible / ymd                 5.30s              65.45s
> > > flexible / ymd_2_38            5.29s              65.90s
> > > flexible / y_m                 5.11s              65.72s
> > > flexible / y_m_2_38            5.08s              65.67s
> > > flexible / y_m_d               5.06s              65.50s
> > > flexible / y_m_d_2_38          5.07s              65.79s
[snip]
Show 12 quoted lines
> > - I'd love to see performance numbers for less than 157118 notes.
> > Don't get me wrong, it is good to see the worst-case scenario in
> > terms of notes/commits ratio.  But it will hardly be the common case,
> > and I very much would like to optimize for the common case.
> >
> >   So, I'd appreciate if you could do the tests with something like
> > 500 notes, randomly spread over the commits (rationale: my original
> > understanding was that the notes could amend commit messages, and
> > that is much more likely to be done with relatively old commits that
> > you cannot change anymore).
> 
> Ok. I will try to test that.
Here are the results of the 500-notes-in-kernel-repo test:
Algorithm / Notes tree   git log -n10 (x100)   git log --all
next / no-notes                 4.83s             64.78s

before / no-notes 4.84s 64.76s before / no-fanout 4.98s 64.89s

16tree / no-notes 4.84s 64.61s 16tree / no-fanout 4.92s 64.68s 16tree / 2_38 4.85s 64.45s 16tree / 2_2_36 4.85s 64.63s

flexible / no-notes 4.84s 64.82s flexible / no-fanout 4.91s 65.01s flexible / 2_38 4.85s 64.93s flexible / 2_2_36 4.85s 64.63s flexible / ym 4.83s 64.63s flexible / ym_2_38 4.86s 64.72s flexible / ymd 4.91s 64.74s flexible / ymd_2_38 4.91s 64.56s flexible / y_m 4.86s 64.76s flexible / y_m_2_38 4.86s 64.71s flexible / y_m_d 4.86s 64.73s flexible / y_m_d_2_38 4.84s 64.50s

I don't like the noise level in the second column ('git log --all'). Then again, I don't find that column very interesting (it's mostly there to verify that we don't have any abysmal worst-case behaviours in the notes code).

The first column is fairly nice and tidy, though. At a first glance it shows pretty much the same results as the 157000-notes table previously posted. Obviously the abysmal performance of no-fanout is gone (500 notes in a single tree object is not _that_ bad), although a 2/38-fanout is still a better choice for 500 notes (but 2/2/36 does not provide any additional improvement).

>From this we can start to guess that the threshold for moving from no fanout 

to 2/38 is somewhere below 500 notes, while the theshold for moving from 2/38 to 2/2/36 is between 500 and ~157000 notes (probably much closer to 157000 than to 500; I wouldn't be surprised if ~256 entries per level turns out to be good a threshold).

The date-based fanout performs on par with the SHA1-based fanout, although it's hard to say anything conclusively when the numbers are as close as this. However, the ymd and ymd_2_38 fanout probably show signs of too much overhead (too many levels) at only 500 notes. This is not surprising.

My gut feeling tells me that moving from 'no-fanout' to either '2_38' or 'ym' is a good idea at ~256 notes. Then, if we went with '2_38', we'd have to switch to '2_2_36' at ~64K notes (i.e. when each /38 level reaches ~256 notes) However, it seems that with 'ym', we could stick with it for much longer before having to consider switching to a different fanout alternative (probably 'ym_2_38' or 'y_m_d').

Have fun! :)
...Johan
-- 
Johan Herland, <johan@herland.net>
www.herland.net
Previous: Stephen R. van den BergNext: Junio C Hamano
Message 24 of 58 in “[PATCHv5 00/14] git notes”
  1. Johan HerlandSep 8, 2009
  2. 01/14 Introduce commit notesJohan Herland, Sep 8, 2009
  3. 02/14 Add a script to edit/inspect notesJohan Herland, Sep 8, 2009
  4. 03/14 Speed up git notes lookupJohan Herland, Sep 8, 2009
  5. 04/14 Add an expensive test for git-notesJohan Herland, Sep 8, 2009
  6. 05/14 Teach "-m <msg>" and "-F <file>" to "git notes edit"Johan Herland, Sep 8, 2009
  7. 06/14 fast-import: Add support for importing commit notesJohan Herland, Sep 8, 2009
  8. 07/14 t3302-notes-index-expensive: Speed up create_repo()Johan Herland, Sep 8, 2009
  9. 08/14 Add flags to get_commit_notes() to control the format of the note stringJohan Herland, Sep 8, 2009
  10. 09/14 Add '%N'-format for pretty-printing commit notesJohan Herland, Sep 8, 2009
  11. 10/14 Teach notes code to free its internal data structures on request.Johan Herland, Sep 8, 2009
  12. 11/14 Teach the notes lookup code to parse notes trees with various fanout schemesJohan Herland, Sep 8, 2009
  13. 12/14 Selftests verifying semantics when loading notes trees with various fanoutsJohan Herland, Sep 8, 2009
  14. 13/14 Allow flexible organization of notes trees, using both commit date and SHA1Johan Herland, Sep 8, 2009
  15. 14/14 Add test cases for date-based fanoutsJohan Herland, Sep 8, 2009
  16. Johan HerlandSep 8, 2009
  17. Junio C HamanoSep 8, 2009
  18. Johan HerlandSep 8, 2009
  19. Johannes SchindelinSep 8, 2009
  20. Johan HerlandSep 8, 2009
  21. Johannes SchindelinSep 8, 2009
  22. Johan HerlandSep 8, 2009
  23. Stephen R. van den BergSep 10, 2009
  24. Johan HerlandSep 10, 2009
  25. Junio C HamanoSep 8, 2009
  26. Shawn O. PearceSep 8, 2009
  27. Sverre RabbelierSep 8, 2009
  28. Shawn O. PearceSep 8, 2009
  29. Sverre RabbelierSep 8, 2009
  30. Johan HerlandSep 8, 2009
  31. Johan HerlandSep 12, 2009
  32. Shawn O. PearceSep 12, 2009
  33. Johan HerlandSep 12, 2009
  34. Geert BoschSep 10, 2009
  35. Michael J GruberSep 10, 2009
  36. Geert BoschSep 10, 2009
  37. Junio C HamanoSep 12, 2009
  38. Johan HerlandSep 12, 2009
  39. 00/14 git notesJohan Herland, Sep 12, 2009
  40. 01/14 Introduce commit notesJohan Herland, Sep 12, 2009
  41. 02/14 Add a script to edit/inspect notesJohan Herland, Sep 12, 2009
  42. 03/14 Speed up git notes lookupJohan Herland, Sep 12, 2009
  43. 04/14 Add an expensive test for git-notesJohan Herland, Sep 12, 2009
  44. 05/14 Teach "-m <msg>" and "-F <file>" to "git notes edit"Johan Herland, Sep 12, 2009
  45. 06/14 fast-import: Add support for importing commit notesJohan Herland, Sep 12, 2009
  46. 07/14 t3302-notes-index-expensive: Speed up create_repo()Johan Herland, Sep 12, 2009
  47. 08/14 Add flags to get_commit_notes() to control the format of the note stringJohan Herland, Sep 12, 2009
  48. 09/14 Add '%N'-format for pretty-printing commit notesJohan Herland, Sep 12, 2009
  49. 10/14 Teach notes code to free its internal data structures on request.Johan Herland, Sep 12, 2009
  50. Junio C HamanoSep 12, 2009
  51. Johan HerlandSep 12, 2009
  52. 11/14 Teach the notes lookup code to parse notes trees with various fanout schemesJohan Herland, Sep 12, 2009
  53. 12/14 Selftests verifying semantics when loading notes trees with various fanoutsJohan Herland, Sep 12, 2009
  54. 13/14 Allow flexible organization of notes trees, using both commit date and SHA1Johan Herland, Sep 12, 2009
  55. Junio C HamanoSep 12, 2009
  56. Johan HerlandSep 12, 2009
  57. Junio C HamanoSep 12, 2009
  58. 14/14 Add test cases for various date-based fanoutsJohan Herland, Sep 12, 2009

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.