diff options
author | Lucas De Marchi <lucas.demarchi@intel.com> | 2013-08-15 23:49:49 -0300 |
---|---|---|
committer | Lucas De Marchi <lucas.demarchi@intel.com> | 2013-09-25 02:03:17 -0300 |
commit | b90ef3a1b889dcfef8c1c7ca40d85634b0c8919e (patch) | |
tree | eaf98d10302082f9ea311c7cf56c995e6c9bbffd | |
parent | 6a245eba5131c2b6fcfb340c39598de1e06da892 (diff) | |
download | kmod-b90ef3a1b889dcfef8c1c7ca40d85634b0c8919e.tar.gz |
benchmark add
-rw-r--r-- | libkmod/libkmod-hash.c | 46 | ||||
-rwxr-xr-x | scripts/run-add.sh | 18 |
2 files changed, 48 insertions, 16 deletions
diff --git a/libkmod/libkmod-hash.c b/libkmod/libkmod-hash.c index 5610861..cdb8965 100644 --- a/libkmod/libkmod-hash.c +++ b/libkmod/libkmod-hash.c @@ -294,7 +294,7 @@ static _always_inline_ unsigned int hashfunc(const char *key, unsigned int len) * none of key or value are copied, just references are remembered as is, * make sure they are live while pair exists in hash! */ -int hash_add(struct hash *hash, const char *key, const void *value) +static _always_inline_ int _hash_add(struct hash *hash, const char *key, const void *value) { unsigned int keylen = strlen(key); unsigned int hashval = hashfunc(key, keylen); @@ -334,6 +334,20 @@ int hash_add(struct hash *hash, const char *key, const void *value) hash->count++; return 0; } + +int hash_add(struct hash *hash, const char *key, const void *value) +{ + unsigned long t; + int ret; + + t = get_cycles(0); + ret = _hash_add(hash, key, value); + t = get_cycles(t); + + printf("%lu %lu\n", strlen(key), t); + return ret; +} + #if 0 void hash_dump(struct hash *hash) { @@ -371,7 +385,7 @@ 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) +static _always_inline_ int _hash_add_unique(struct hash *hash, const char *key, const void *value) { unsigned int keylen = strlen(key); unsigned int hashval = hashfunc(key, keylen); @@ -409,6 +423,19 @@ int hash_add_unique(struct hash *hash, const char *key, const void *value) return 0; } +int hash_add_unique(struct hash *hash, const char *key, const void *value) +{ + unsigned long t; + int ret; + + t = get_cycles(0); + ret = _hash_add_unique(hash, key, value); + t = get_cycles(t); + + printf("%lu %lu\n", strlen(key), t); + return ret; +} + static int hash_entry_cmp(const void *pa, const void *pb) { const struct hash_entry *a = pa; @@ -416,7 +443,7 @@ static int hash_entry_cmp(const void *pa, const void *pb) return strcmp(a->key, b->key); } -static _always_inline_ void *_hash_find(const struct hash *hash, const char *key) +void *hash_find(const struct hash *hash, const char *key) { unsigned int keylen = strlen(key); unsigned int hashval = hashfunc(key, keylen); @@ -434,19 +461,6 @@ static _always_inline_ 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-add.sh b/scripts/run-add.sh new file mode 100755 index 0000000..3131550 --- /dev/null +++ b/scripts/run-add.sh @@ -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".* | scripts/parse-timing > $log +rm ${log}.* |