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

Re: [PATCH 1/5] prune-packed: don't call display_progress() for every file

From
Shawn O. Pearce <spearce@spearce.org>
Date
Nov 1, 2007, 02:58 UTC
Message-ID
<20071101025830.GX14735@spearce.org>
In-Reply-To
<1193770655-20492-2-git-send-email-nico@cam.org>
Nicolas Pitre <nico@cam.org> wrote:
> The progress count is per fanout directory, so it is useless to call
> it for every file as the count doesn't change that often.

If you go back into the history and look at the commit message for when I introduced this per-object display_progress() call we find the following:

 commit b5d72f0a4cd3cce945ca0d37e4fa0ebbfcdcdb52
 Author: Shawn O. Pearce <spearce@spearce.org>
 Date:   Fri Oct 19 00:08:37 2007 -0400
[...snip...]
    We perform the display_progress() call from within the very innermost
    loop in case we spend more than 1 second within any single object
    directory.  This ensures that a progress_update event from the
    timer will still trigger in a timely fashion and allow the user to
    see the progress meter.

During my testing with a 40,000 loose object case (yea, I fully unpacked a git.git clone I had laying around) my system stalled hard in the first object directory. A *lot* longer than 1 second. So I got no progress meter for a long time, and then a progress meter appeared on the second directory.

The display_progress() call already does a reasonably cheap comparsion to see if the timer has tripped or if the percent complete has changed. So I figured it was more useful to get feedback to the user that we were working, but were going to take a while, than it was to optimize a few machine instructions out of that inner-most per-object loop.

So I'm a little against this patch.  But I think I understand why
you think its worth doing.  I just consider the progress feedback
more important than the few machine cycles avoiding it saves.
 
-- 
Shawn.
Previous: Junio C HamanoNext: Nicolas Pitre
Message 10 of 11 in “more progress display stuff”
  1. 0/5 more progress display stuffNicolas Pitre, Oct 30, 2007
  2. 1/5 prune-packed: don't call display_progress() for every fileNicolas Pitre, Oct 30, 2007
  3. 2/5 make struct progress an opaque typeNicolas Pitre, Oct 30, 2007
  4. 3/5 relax usage of the progress APINicolas Pitre, Oct 30, 2007
  5. 4/5 add throughput to progress displayNicolas Pitre, Oct 30, 2007
  6. 5/5 add throughput display to index-packNicolas Pitre, Oct 30, 2007
  7. 6/5 add some copyright notice to the progress display codeNicolas Pitre, Oct 30, 2007
  8. 7/5 add throughput display to git-pushNicolas Pitre, Oct 30, 2007
  9. Junio C HamanoOct 31, 2007
  10. Shawn O. PearceNov 1, 2007
  11. Nicolas PitreNov 1, 2007

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.