Performance problem, long run of identical hashes
- From
Jon Smirl <jonsmirl@gmail.com>
- Date
- Dec 10, 2007, 15:07 UTC
- Message-ID
- <9e4733910712100707i66e185bofe22805b8e0ba4d8@mail.gmail.com>
Running oprofile during my gcc repack shows this loop as the hottest place in the code by far. I added some debug printfs which show that I have a 100,000+ run of identical hash entries. Processing the 100,000 entries also causes RAM consumption to explode.
create_delta()
for (entry = index->hash[i]; entry < index->hash[i+1]; entry++) {
const unsigned char *ref = entry->ptr;
const unsigned char *src = data;
unsigned int ref_size = ref_top - ref;
if (entry->val != val)
continue;
if (ref_size > top - src)
ref_size = top - src;
if (ref_size <= msize)
break;
while (ref_size-- && *src++ == *ref)
ref++;
if (msize < ref - entry->ptr) {
/* this is our best match so far */
msize = ref - entry->ptr;
moff = entry->ptr - ref_data;
if (msize >= 4096) /* good enough */
break;
}
}-- Jon Smirl jonsmirl@gmail.com