git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Shawn Pearce <spearce@spearce.org>
Cc: git <git@vger.kernel.org>
Subject: Re: No progress from push when using bitmaps
Date: Thu, 13 Mar 2014 18:07:54 -0400	[thread overview]
Message-ID: <20140313220754.GA20173@sigill.intra.peff.net> (raw)
In-Reply-To: <CAJo=hJu1WscibwectWzrUcoOV4-9xk4hBm1JA+RjONmgvZTXwQ@mail.gmail.com>

On Thu, Mar 13, 2014 at 03:01:09PM -0700, Shawn Pearce wrote:

> > It would definitely be good to have throughput measurements while
> > writing out the pack. However, I'm not sure we have anything useful to
> > count. We know the total number of objects we're reusing, but we're not
> > actually parsing the data; we're just blitting it out as a stream. I
> > think the progress code will need some refactoring to handle a
> > throughput-only case.
> 
> Yes. I think JGit suffers from this same bug, and again we never
> noticed it because usually only the servers are bitmapped, not the
> clients.
> 
> pack-objects writes a throughput meter when its writing objects.
> Really just the bytes out/second would be enough to let the user know
> the client is working. Unfortunately I think that is still tied to the
> overall progress system having some other counter?

Yes, I'm looking at it right now. The throughput meter is actually
connected to the sha1fd output. So really we just need to call
display_progress periodically as we loop through the data. It's a
one-liner fix.

_But_ it still looks ugly, because, as you mention, it's tied to the
progress meter, which is counting up to N objects. So we basically sit
there at "0", pumping data, and then after the pack is done, we can say
we sent N. :)

There are a few ways around this:

  1. Add a new phase "Writing packs" which counts from 0 to 1. Even
     though it's more accurate, moving from 0 to 1 really isn't that
     useful (the throughput is, but the 0/1 just looks like noise).

  2. Add a new phase "Writing reused objects" that counts from 0 bytes
     up to N bytes. This looks stupid, though, because we are repeating
     the current byte count both here and in the throughput.

  3. Use the regular "Writing objects" progress, but fake the object
     count. We know we are writing M bytes with N objects. Bump the
     counter by 1 for every M/N bytes we write.

The first two require some non-trivial surgery to the progress code. I
am leaning towards the third. Not just because it's easy, but because I
think it actually shows the most intuitive display. Yes, it's fudging
the object numbers, but those are largely meaningless anyway (in fact,
it makes them _better_ because now they're even, instead of getting 95%
done and then hitting some blob that is as big as the rest of the repo
combined).

-Peff

  reply	other threads:[~2014-03-13 22:08 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-13  0:21 No progress from push when using bitmaps Shawn Pearce
2014-03-13 21:26 ` Jeff King
2014-03-13 22:01   ` Shawn Pearce
2014-03-13 22:07     ` Jeff King [this message]
2014-03-13 22:23       ` Junio C Hamano
2014-03-13 22:24       ` Jeff King
2014-03-14  9:43       ` Michael Haggerty
2014-03-14 10:21         ` Duy Nguyen
2014-03-14 15:29           ` Jeff King
2014-03-14 23:53             ` Duy Nguyen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140313220754.GA20173@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=spearce@spearce.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).