From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: "René Scharfe" <l.s.r@web.de>,
"Git Mailing List" <git@vger.kernel.org>,
"Stefan Beller" <stefanbeller@gmail.com>,
"Vicent Marti" <tanoku@gmail.com>
Subject: Re: [PATCH] pack-bitmaps: plug memory leak, fix allocation size for recent_bitmaps
Date: Tue, 19 May 2015 17:19:52 -0400 [thread overview]
Message-ID: <20150519211952.GA23904@peff.net> (raw)
In-Reply-To: <xmqqoalg73md.fsf@gitster.dls.corp.google.com>
On Tue, May 19, 2015 at 12:45:46PM -0700, Junio C Hamano wrote:
> > I looked over the function one more time to make sure it is the function
> > that is wrong, and not my suggestion. :) The current code seems pretty
> > obviously wrong.
>
> I actually cannot guess what the current code is trying to do. Was
> it an attempt to cache that many entries, but instead allocated and
> discarded the space it tried to use as a cache every time?
Sort of. There are two caches at work.
The bitmaps on disk may be stored as XORs against nearby bitmaps up to
MAX_XOR_OFFSET slots away. So our goal is to reconstruct the actual
bitmaps and put them in our cache for later use. That's actually done by
store_bitmap(), which puts them into a hash table indexed by sha1.
But because we get the XOR base as an offset, we also need to be able to
quickly say "what was the bitmap that was N slots ago?", and the hash
cannot answer that quickly. So we keep a sliding window of the last
MAX_XOR_OFFSET bitmaps (pointing to the cached bitmaps stored in the
hash), and then we can index that directly by offset. And we can reuse
the array as a circular buffer (notice we always index it modulo the max
offset).
So you can think of the recent_bitmaps as an auxiliary index into the
bitmaps already cached by store_bitmap(). We don't need it after the xor
reconstruction (actually I think we don't do the xor reconstruction
here, but instead retain a pointer to the xor base and lazily do it, but
the point is that we've created that pointer).
-Peff
prev parent reply other threads:[~2015-05-19 21:20 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-18 23:24 [PATCH] pack-bitmaps: plug memory leak, fix allocation size for recent_bitmaps René Scharfe
2015-05-19 0:57 ` Stefan Beller
2015-05-19 20:29 ` René Scharfe
2015-05-19 2:23 ` Jeff King
2015-05-19 19:45 ` Junio C Hamano
2015-05-19 21:19 ` Jeff King [this message]
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=20150519211952.GA23904@peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=l.s.r@web.de \
--cc=stefanbeller@gmail.com \
--cc=tanoku@gmail.com \
/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).