From: Jeff King <peff@peff.net>
To: Nicolas Pitre <nico@fluxnic.net>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: Re: [PATCH] lookup_object: remove hashtable_index() and optimize hash_obj()
Date: Wed, 11 Sep 2013 14:48:45 -0400 [thread overview]
Message-ID: <20130911184845.GA25386@sigill.intra.peff.net> (raw)
In-Reply-To: <alpine.LFD.2.03.1309101811510.20709@syhkavp.arg>
On Tue, Sep 10, 2013 at 06:17:12PM -0400, Nicolas Pitre wrote:
> hashtable_index() appears to be a close duplicate of hash_obj().
> Keep only the later and make it usable for all cases.
Thanks. This duplication has often bugged me when looking at that
hash table, but I just never actually wrote the patch.
> Also remove the modulus as this is an expansive operation.
> The size argument is always a power of 2 anyway, so a simple
> mask operation provides the same result.
>
> On a 'git rev-list --all --objects' run this decreased the time spent
> in lookup_object from 27.5% to 24.1%.
Nice. This is a tiny bit subtle, though, as the power-of-2 growth
happens elsewhere, and we may want to tweak it later (the decorate.c
hash, for example, grows by 3/2).
Maybe it's worth squashing in one or both of the comments below as a
warning to anybody who tries to tweak it.
---
diff --git a/object.c b/object.c
index e2dae22..5f792cb 100644
--- a/object.c
+++ b/object.c
@@ -47,6 +47,7 @@ static unsigned int hash_obj(const unsigned char *sha1, unsigned int n)
{
unsigned int hash;
memcpy(&hash, sha1, sizeof(unsigned int));
+ /* Assumes power-of-2 hash sizes in grow_object_hash */
return hash & (n - 1);
}
@@ -94,6 +95,10 @@ static void grow_object_hash(void)
static void grow_object_hash(void)
{
int i;
+ /*
+ * Note that this size must always be power-of-2 to match hash_obj
+ * above.
+ */
int new_hash_size = obj_hash_size < 32 ? 32 : 2 * obj_hash_size;
struct object **new_hash;
next prev parent reply other threads:[~2013-09-11 18:48 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-10 22:17 [PATCH] lookup_object: remove hashtable_index() and optimize hash_obj() Nicolas Pitre
2013-09-11 18:48 ` Jeff King [this message]
2013-09-12 20:08 ` Nicolas Pitre
2013-09-12 20:30 ` Junio C Hamano
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=20130911184845.GA25386@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=nico@fluxnic.net \
/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).