]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
Benchmark hash timing per key len
authorLucas De Marchi <lucas.demarchi@intel.com>
Tue, 13 Aug 2013 14:00:49 +0000 (11:00 -0300)
committerLucas De Marchi <lucas.demarchi@intel.com>
Fri, 20 Sep 2013 19:35:52 +0000 (14:35 -0500)
libkmod/libkmod-hash.c

index 06c72663f259e7e42351237c2bd3752594c43691..a299f065299f6caf82577f1a5451ac38cbc1baff 100644 (file)
@@ -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;