From: Jon Smirl Date: Mon, 10 Dec 2007 15:07:50 GMT Subject: Performance problem, long run of identical hashes 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