Re: [PATCH v3] repack: enable bitmaps by default on bare repos
From: Derrick Stolee <hidden>
Date: 2019-05-08 14:20:28
On 5/8/2019 3:11 AM, Jeff King wrote:
On Tue, May 07, 2019 at 10:12:06AM +0200, Ævar Arnfjörð Bjarmason wrote:quoted
quoted
I think we'd want a way to tell the bitmap code to update our progress meter as it traverses (both single objects, but also taking into account when it finds a bitmap and then suddenly bumps the value by a large amount).Not splitting it will fix the progress bar stalling, so it fixes the problem that the user is wondering if the command is entirely hanging. But I was hoping to give the user an idea of roughly where we're spending our time, e.g. so you can see how much the pack.useSparse setting is helping (or not).Yeah, I think that's a bigger and more complicated problem. I admit that my main annoyance is just the stall while we fill in the bitmaps (and it's easy because the bitmap traversal is the same unit of work as a regular traversal).
The pack.useSparse setting also speeds up a section that is not marked by progress: that portion usually is walking all UNINTERESTING trees and the"Enumerating Objects" progress is just for walking the INTERESTING objects.
quoted
So something where we report sub-progress as we go along, and perhaps print some brief summary at the end if it took long enough, e.g.: Enumerating Objects (X^1%) => Marking trees (Y^1%) Enumerating Objects (X^2%) => Calculating bitmaps (Y^2%)
I like this idea for splitting the "normal" mechanism, too:
Enumerating Objects (X^1%) => Marking trees (Y^1%)
Enumerating Objects (X^2%) => Enumerating objects to pack (Y^2%)
quoted
I.e. bringing the whole "nested" trace2 regions full circle with the progress bar where we could elect to trace/show some of that info, and then you could turn on some trace2 mode/verbose progress to see more.I do wonder if this really needs to be part of the progress bar. The goal of the progress bar is to give the user a sense that work is happening, and (if possible, but not for "enumerating") an idea of when it might finish. If the trace code can already do detailed timings, then shouldn't we just be encouraging people to use that?
The problem I've seen (without bitmaps) is that running `git push` can take a while before _any_ progress is listed. Good news is: `pack.useSparse` fixed our push problem in the Windows OS repo. The end-to-end time for `git push` sped up by 7.7x with the change, and this "blank" time is too fast for users to notice. Updating the progress could help in cases without pack.useSparse. Thanks, -Stolee