Improve hashtable performance. #192
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add a simple/small k=1 bloom filter to the hashtable to reduce hashtable probing (and thrashing cpu memory cache) by more than 50%. It can be turned off by defining HASHTABLE_NBLOOM.
Reduce the max hashtable load factor from 80% to 70% to ensure that most hashtable probing for lookups is within the same 64 byte cache line.
Fix hashcmp_count stats to include comparing against empty buckets. Previously these were not counted, but still required a hashtable lookup. This will increase the hashcmp_count stats compared to previous versions, but with the new bloom filter we avoid many lookups entirely.
Slightly tidy the _for_probe() and _KEY_HASH() macro's using a nozero() static inline to reserve zero entries for empty buckets.
This improves delta performance by between 20%~40%, particularly for small blocksizes and large files.