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

[PATCH v3 0/9] Rewrite packfile reuse code

From
Christian Couder <christian.couder@gmail.com>
Date
Nov 15, 2019, 14:15 UTC
Message-ID
<20191115141541.11149-1-chriscool@tuxfamily.org>

This patch series is rewriting the code that tries to reuse existing packfiles.

The code in this patch series was written by GitHub, and Peff nicely provided it in the following discussion:

https://public-inbox.org/git/3E56B0FD-EBE8-4057-A93A-16EBB09FBCE0@jramsay.com.au/
The first versions of this patch series were also discussed:
V2: https://public-inbox.org/git/20191019103531.23274-1-chriscool@tuxfamily.org/
V1: https://public-inbox.org/git/20190913130226.7449-1-chriscool@tuxfamily.org/
Thanks to the reviewers!

According to Peff this new code is a lot smarter than what it replaces. It allows "holes" in the chunks of packfile to be reused, and skips over them. It rewrites OFS_DELTA offsets as it goes to account for the holes. So it's basically a linear walk over the packfile, but with the important distinction that we don't add those objects to the object_entry array, which makes them very lightweight (especially in memory use, but they also aren't considered bases for finding new deltas, etc). It seems like a good compromise between the cost to serve a clone and the quality of the resulting packfile.

Changes since the previous patch series are the following:
  - Rebased onto current master (d9f6f3b619, The first batch post 2.24
    cycle, 2019-11-10)
  - Remove a paragraph in the commit message of patch 3/9 as suggested
    by Jonathan Tan.
  - Improve commit message of patch 9/9 as suggested by Jonathan Tan.
  - Renamed fields of struct reused_chunk in patch 9/9 as suggested by
    Jonathan Tan.
  - Added a few comments in patch 9/9 as suggested by Jonathan Tan.

It could be a good idea if Peff could answer some of the comments made by Jonathan Tan about patch 9/9.

I have put Peff as the author of all the commits.
Jeff King (9):
  builtin/pack-objects: report reused packfile objects
  packfile: expose get_delta_base()
  ewah/bitmap: introduce bitmap_word_alloc()
  pack-bitmap: don't rely on bitmap_git->reuse_objects
  pack-bitmap: introduce bitmap_walk_contains()
  csum-file: introduce hashfile_total()
  pack-objects: introduce pack.allowPackReuse
  builtin/pack-objects: introduce obj_is_packed()
  pack-objects: improve partial packfile reuse
 Documentation/config/pack.txt |   4 +
 builtin/pack-objects.c        | 243 +++++++++++++++++++++++++++-------
 csum-file.h                   |   9 ++
 ewah/bitmap.c                 |  13 +-
 ewah/ewok.h                   |   1 +
 pack-bitmap.c                 | 178 ++++++++++++++++++-------
 pack-bitmap.h                 |   6 +-
 packfile.c                    |  10 +-
 packfile.h                    |   3 +
 9 files changed, 357 insertions(+), 110 deletions(-)
-- 
2.24.0-rc1
Next: Christian Couder
Message 1 of 42 in “Rewrite packfile reuse code”
  1. 0/9 Rewrite packfile reuse codeChristian Couder, Nov 15, 2019
  2. 1/9 builtin/pack-objects: report reused packfile objectsChristian Couder, Nov 15, 2019
  3. Jeff KingDec 9, 2019
  4. Christian CouderDec 11, 2019
  5. 2/9 packfile: expose get_delta_base()Christian Couder, Nov 15, 2019
  6. Jeff KingDec 9, 2019
  7. 3/9 ewah/bitmap: introduce bitmap_word_alloc()Christian Couder, Nov 15, 2019
  8. Jeff KingDec 9, 2019
  9. Christian CouderDec 11, 2019
  10. Jeff KingDec 12, 2019
  11. 5/9 pack-bitmap: introduce bitmap_walk_contains()Christian Couder, Nov 15, 2019
  12. Jeff KingDec 9, 2019
  13. Christian CouderDec 13, 2019
  14. 6/9 csum-file: introduce hashfile_total()Christian Couder, Nov 15, 2019
  15. Jeff KingDec 9, 2019
  16. 4/9 pack-bitmap: don't rely on bitmap_git->reuse_objectsChristian Couder, Nov 15, 2019
  17. Jeff KingDec 9, 2019
  18. Christian CouderDec 13, 2019
  19. 7/9 pack-objects: introduce pack.allowPackReuseChristian Couder, Nov 15, 2019
  20. Jeff KingDec 9, 2019
  21. Christian CouderDec 13, 2019
  22. 8/9 builtin/pack-objects: introduce obj_is_packed()Christian Couder, Nov 15, 2019
  23. Jeff KingDec 9, 2019
  24. 9/9 pack-objects: improve partial packfile reuseChristian Couder, Nov 15, 2019
  25. Jeff KingDec 9, 2019
  26. Christian CouderDec 18, 2019
  27. Jeff KingDec 19, 2019
  28. Christian CouderJan 23, 2020
  29. Jonathan TanNov 15, 2019
  30. Junio C HamanoNov 25, 2019
  31. Junio C HamanoNov 25, 2019
  32. Junio C HamanoDec 6, 2019
  33. Christian CouderDec 7, 2019
  34. Johannes SchindelinDec 7, 2019
  35. Christian CouderDec 8, 2019
  36. Johannes SchindelinDec 8, 2019
  37. Christian CouderDec 8, 2019
  38. Johannes SchindelinDec 8, 2019
  39. Jeff KingDec 9, 2019
  40. Johannes SchindelinDec 9, 2019
  41. Junio C HamanoDec 9, 2019
  42. Junio C HamanoDec 9, 2019

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.