app/test: improve accuracy on hash measurements
authorPablo de Lara <pablo.de.lara.guarch@intel.com>
Wed, 10 Jun 2015 15:25:19 +0000 (16:25 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Tue, 16 Jun 2015 10:17:52 +0000 (12:17 +0200)
Cycles per hash calculation were measured per single operation.
It is much more accurate to run several iterations between measurements
and divide by number of iterations.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
app/test/test_hash_functions.c

index 4efb3cd..767b2bc 100644 (file)
@@ -83,21 +83,21 @@ static void
 run_hash_func_perf_test(rte_hash_function f, uint32_t init_val,
                uint32_t key_len)
 {
-       static uint8_t key[RTE_HASH_KEY_LENGTH_MAX];
-       uint64_t ticks = 0, start, end;
+       static uint8_t key[HASHTEST_ITERATIONS][RTE_HASH_KEY_LENGTH_MAX];
+       uint64_t ticks, start, end;
        unsigned i, j;
 
        for (i = 0; i < HASHTEST_ITERATIONS; i++) {
-
                for (j = 0; j < key_len; j++)
-                       key[j] = (uint8_t) rte_rand();
-
-               start = rte_rdtsc();
-               f(key, key_len, init_val);
-               end = rte_rdtsc();
-               ticks += end - start;
+                       key[i][j] = (uint8_t) rte_rand();
        }
 
+       start = rte_rdtsc();
+       for (i = 0; i < HASHTEST_ITERATIONS; i++)
+               f(key[i], key_len, init_val);
+       end = rte_rdtsc();
+       ticks = end - start;
+
        printf("%-12s, %-18u, %-13u, %.02f\n", get_hash_name(f), (unsigned) key_len,
                        (unsigned) init_val, (double)ticks / HASHTEST_ITERATIONS);
 }