]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
benchmark lookup
authorLucas De Marchi <lucas.demarchi@intel.com>
Fri, 16 Aug 2013 02:27:57 +0000 (23:27 -0300)
committerLucas De Marchi <lucas.demarchi@intel.com>
Wed, 25 Sep 2013 05:03:17 +0000 (02:03 -0300)
libkmod/libkmod-hash.c
scripts/run-lookup.sh [new file with mode: 0755]

index a299f065299f6caf82577f1a5451ac38cbc1baff..561086199b3ad2575b46a77ab9833adcf7c1e161 100644 (file)
@@ -285,15 +285,7 @@ static inline unsigned int hash_paul(const char *key, unsigned int len)
 
 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;
+       return hash_crc32c_hw(key, len);
 }
 
 /*
@@ -424,7 +416,7 @@ static int hash_entry_cmp(const void *pa, const void *pb)
        return strcmp(a->key, b->key);
 }
 
-void *hash_find(const struct hash *hash, const char *key)
+static _always_inline_ void *_hash_find(const struct hash *hash, const char *key)
 {
        unsigned int keylen = strlen(key);
        unsigned int hashval = hashfunc(key, keylen);
@@ -442,6 +434,19 @@ void *hash_find(const struct hash *hash, const char *key)
        return (void *)entry->value;
 }
 
+void *hash_find(const struct hash *hash, const char *key)
+{
+       unsigned long t;
+       void *ret;
+
+       t = get_cycles(0);
+       ret = _hash_find(hash, key);
+       t = get_cycles(t);
+
+       printf("%lu %lu\n", strlen(key), t);
+       return ret;
+}
+
 int hash_del(struct hash *hash, const char *key)
 {
        unsigned int keylen = strlen(key);
diff --git a/scripts/run-lookup.sh b/scripts/run-lookup.sh
new file mode 100755 (executable)
index 0000000..4038b55
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+log="$1"
+
+for ((i=0; i < 10;))
+do
+    err=${log}.${i}.stderr
+    echo "running #$i"
+    sudo chrt -f 99 /usr/bin/time -f \
+        "\n***\ntime: %E\ncontext switches: %c\nwaits: %w" \
+        tools/depmod -a > ${log}.$i 2>$err
+    [[ ! -z "$(grep 'context switches: 0' $err)" ]] && ((i++))
+done
+
+echo "consolidating in $log"
+rm ${log}.0*
+cat "$log".[1-9] | scripts/parse-timing > $log
+rm ${log}.*