From 65fb2dc3f7cd1e3e18b9ee10703b71d628a54c9d Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Tue, 13 Aug 2013 11:00:49 -0300 Subject: [PATCH] Benchmark hash timing per key len --- libkmod/libkmod-hash.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/libkmod/libkmod-hash.c b/libkmod/libkmod-hash.c index 06c72663..a299f065 100644 --- a/libkmod/libkmod-hash.c +++ b/libkmod/libkmod-hash.c @@ -283,6 +283,19 @@ static inline unsigned int hash_paul(const char *key, unsigned int len) return hash; } +static _always_inline_ unsigned int hashfunc(const char *key, unsigned int len) +{ + unsigned long t; + unsigned int ret; + t = get_cycles(0); + ret = MurmurHash3_x86_32(key, len); + t = get_cycles(t); + + printf("%u %lu\n", len, t); + + return ret; +} + /* * add or replace key in hash map. * @@ -292,7 +305,7 @@ static inline unsigned int hash_paul(const char *key, unsigned int len) int hash_add(struct hash *hash, const char *key, const void *value) { unsigned int keylen = strlen(key); - unsigned int hashval = hash_superfast(key, keylen); + unsigned int hashval = hashfunc(key, keylen); unsigned int pos = hashval & (hash->n_buckets - 1); struct hash_bucket *bucket = hash->buckets + pos; struct hash_entry *entry, *entry_end; @@ -329,7 +342,7 @@ int hash_add(struct hash *hash, const char *key, const void *value) hash->count++; return 0; } - +#if 0 void hash_dump(struct hash *hash) { unsigned int i _unused_; @@ -360,12 +373,16 @@ void hash_dump_keys(struct hash *hash) fprintf(stderr, "%s\n", entry->key); } } +#else +void hash_dump(struct hash *hash) { } +void hash_dump_keys(struct hash *hash) {} +#endif /* similar to hash_add(), but fails if key already exists */ int hash_add_unique(struct hash *hash, const char *key, const void *value) { unsigned int keylen = strlen(key); - unsigned int hashval = hash_superfast(key, keylen); + unsigned int hashval = hashfunc(key, keylen); unsigned int pos = hashval & (hash->n_buckets - 1); struct hash_bucket *bucket = hash->buckets + pos; struct hash_entry *entry, *entry_end; @@ -410,7 +427,7 @@ static int hash_entry_cmp(const void *pa, const void *pb) void *hash_find(const struct hash *hash, const char *key) { unsigned int keylen = strlen(key); - unsigned int hashval = hash_superfast(key, keylen); + unsigned int hashval = hashfunc(key, keylen); unsigned int pos = hashval & (hash->n_buckets - 1); const struct hash_bucket *bucket = hash->buckets + pos; const struct hash_entry se = { @@ -428,7 +445,7 @@ void *hash_find(const struct hash *hash, const char *key) int hash_del(struct hash *hash, const char *key) { unsigned int keylen = strlen(key); - unsigned int hashval = hash_superfast(key, keylen); + int hashval = hashfunc(key, keylen); unsigned int pos = hashval & (hash->n_buckets - 1); unsigned int steps_used, steps_total; struct hash_bucket *bucket = hash->buckets + pos; -- 2.47.2