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

Re: [PATCH 0/3] Make add_missing_tags() linear

From
Derrick Stolee <stolee@gmail.com>
Date
Nov 2, 2018, 15:38 UTC
Message-ID
<ba7ee399-029d-8cff-c582-c3e54ab61796@gmail.com>
In-Reply-To
<CABPp-BEa3U6m8jWrHJXjFo77T32LqEKkdDs7H89m0y_gjHgOWw@mail.gmail.com>
On 11/2/2018 10:58 AM, Elijah Newren wrote:
Show 64 quoted lines
> On Thu, Nov 1, 2018 at 12:02 PM Derrick Stolee <stolee@gmail.com> wrote:
>> On 11/1/2018 2:57 PM, Elijah Newren wrote:
>>> On Thu, Nov 1, 2018 at 5:32 AM Derrick Stolee <stolee@gmail.com> wrote:
>>>> No rush. I'd just like to understand how removing the commit-graph file
>>>> can make the new algorithm faster. Putting a similar count in the old
>>>> algorithm would involve giving a count for every call to
>>>> in_merge_bases_many(), which would be very noisy.
>>> $ time git push --dry-run --follow-tags /home/newren/repo-mirror
>>> count: 92912
>>> To /home/newren/repo-mirror
>>>    * [new branch]              test5 -> test5
>>>
>>> real    0m3.024s
>>> user    0m2.752s
>>> sys    0m0.320s
>> Is the above test with or without the commit-graph file? Can you run it
>> in the other mode, too? I'd like to see if the "count" value changes
>> when the only difference is the presence of a commit-graph file.
> I apologize for providing misleading information earlier; this was an
> apples to oranges comparison.  Here's what I did:
>
> <build a version of git with your fixes>
> git clone coworker.bundle coworker-repo
> cd coworker-repo
> time git push --dry-run --follow-tags /home/newren/repo-mirror
> git config core.commitgraph true
> git config gc.writecommitgraph true
> git gc
> time git push --dry-run --follow-tags /home/newren/nucleus-mirror
>
>
> I figured I had just done a fresh clone, so surely the gc wouldn't do
> anything other than write the .git/objects/info/commit-graph file.
> However, the original bundle contained many references outside of
> refs/heads/ and refs/tags/:
>
> $ git bundle list-heads ../coworker.bundle | grep -v -e refs/heads/ -e
> refs/tags/ -e HEAD | wc -l
> 2396
>
> These other refs apparently referred to objects not otherwise
> referenced in refs/heads/ and refs/tags/, and caused the gc to explode
> lots of loose objects:
> $ git count-objects -v
> count: 147604
> size: 856416
> in-pack: 1180692
> packs: 1
> size-pack: 796143
> prune-packable: 0
> garbage: 0
> size-garbage: 0
>
>
> The slowdown with commit-graph was entirely due to there being lots of
> loose objects (147K of them).  If I add a git-prune before doing the
> timing with commit-graph, then the timing with commit-graph is faster
> than the run without a commit-graph.
>
> Sorry for the wild goose chase.
>
> And thanks for the fixes; get_reachable_subset() makes things much
> faster even without a commit-graph, and the commit-graph just improves
> it more.  :-)
Thanks for double-checking! It's good to have confidence that this is a good
algorithm to use.
Thanks,
-Stolee
Previous: Elijah NewrenNext: Derrick Stolee via GitGitGadget
Message 18 of 22 in “Make add_missing_tags() linear”
  1. 0/3 Make add_missing_tags() linearDerrick Stolee via GitGitGadget, Oct 30, 2018
  2. 1/3 commit-reach: implement get_reachable_subsetDerrick Stolee via GitGitGadget, Oct 30, 2018
  3. Junio C HamanoOct 31, 2018
  4. Derrick StoleeOct 31, 2018
  5. Junio C HamanoNov 2, 2018
  6. Elijah NewrenOct 31, 2018
  7. Derrick StoleeOct 31, 2018
  8. 2/3 test-reach: test get_reachable_subsetDerrick Stolee via GitGitGadget, Oct 30, 2018
  9. 3/3 remote: make add_missing_tags() linearDerrick Stolee via GitGitGadget, Oct 30, 2018
  10. Junio C HamanoOct 31, 2018
  11. Elijah NewrenOct 31, 2018
  12. Derrick StoleeOct 31, 2018
  13. Elijah NewrenNov 1, 2018
  14. Derrick StoleeNov 1, 2018
  15. Elijah NewrenNov 1, 2018
  16. Derrick StoleeNov 1, 2018
  17. Elijah NewrenNov 2, 2018
  18. Derrick StoleeNov 2, 2018
  19. 0/3 Make add_missing_tags() linearDerrick Stolee via GitGitGadget, Nov 2, 2018
  20. 1/3 commit-reach: implement get_reachable_subsetDerrick Stolee via GitGitGadget, Nov 2, 2018
  21. 2/3 test-reach: test get_reachable_subsetDerrick Stolee via GitGitGadget, Nov 2, 2018
  22. 3/3 remote: make add_missing_tags() linearDerrick Stolee via GitGitGadget, Nov 2, 2018

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.