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

Re: [PATCH] pack-bitmaps: plug memory leak, fix allocation size for recent_bitmaps

From
Jeff King <peff@peff.net>
Date
May 19, 2015, 21:19 UTC
Message-ID
<20150519211952.GA23904@peff.net>
In-Reply-To
<xmqqoalg73md.fsf@gitster.dls.corp.google.com>
On Tue, May 19, 2015 at 12:45:46PM -0700, Junio C Hamano wrote:
Show 7 quoted lines
> > 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
Previous: Junio C Hamano
Message 6 of 6 in “pack-bitmaps: plug memory leak, fix allocation size for recent_bitmaps”
  1. pack-bitmaps: plug memory leak, fix allocation size for recent_bitmapsRené Scharfe, May 18, 2015
  2. Stefan BellerMay 19, 2015
  3. René ScharfeMay 19, 2015
  4. Jeff KingMay 19, 2015
  5. Junio C HamanoMay 19, 2015
  6. Jeff KingMay 19, 2015

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.