X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest%2Ftest_hash_perf.c;h=76cdac5d5320bd1e9627d499bf4f5613b6453bad;hb=efcb502fab9c10f6509713236a62f03b1e5987ff;hp=a438eae6c87e2522fdd0592c3349b009e529b980;hpb=d170527643bcee1ef35390d8ac57ddccf6621b82;p=dpdk.git diff --git a/app/test/test_hash_perf.c b/app/test/test_hash_perf.c index a438eae6c8..76cdac5d53 100644 --- a/app/test/test_hash_perf.c +++ b/app/test/test_hash_perf.c @@ -391,8 +391,8 @@ timed_lookups(unsigned int with_hash, unsigned int with_data, } static int -timed_lookups_multi(unsigned int with_data, unsigned int table_index, - unsigned int ext) +timed_lookups_multi(unsigned int with_hash, unsigned int with_data, + unsigned int table_index, unsigned int ext) { unsigned i, j, k; int32_t positions_burst[BURST_SIZE]; @@ -417,7 +417,7 @@ timed_lookups_multi(unsigned int with_data, unsigned int table_index, for (j = 0; j < keys_to_add/BURST_SIZE; j++) { for (k = 0; k < BURST_SIZE; k++) keys_burst[k] = keys[j * BURST_SIZE + k]; - if (with_data) { + if (!with_hash && with_data) { ret = rte_hash_lookup_bulk_data(h[table_index], (const void **) keys_burst, BURST_SIZE, @@ -442,6 +442,55 @@ timed_lookups_multi(unsigned int with_data, unsigned int table_index, return -1; } } + } else if (with_hash && with_data) { + ret = rte_hash_lookup_with_hash_bulk_data( + h[table_index], + (const void **)keys_burst, + &signatures[j * BURST_SIZE], + BURST_SIZE, &hit_mask, ret_data); + if (ret != BURST_SIZE) { + printf("Expect to find %u keys," + " but found %d\n", + BURST_SIZE, ret); + return -1; + } + for (k = 0; k < BURST_SIZE; k++) { + if ((hit_mask & (1ULL << k)) == 0) { + printf("Key number %u" + " not found\n", + j * BURST_SIZE + k); + return -1; + } + expected_data[k] = + (void *)((uintptr_t)signatures[ + j * BURST_SIZE + k]); + if (ret_data[k] != expected_data[k]) { + printf("Data returned for key" + " number %u is %p," + " but should be %p\n", + j * BURST_SIZE + k, + ret_data[k], + expected_data[k]); + return -1; + } + } + } else if (with_hash && !with_data) { + ret = rte_hash_lookup_with_hash_bulk( + h[table_index], + (const void **)keys_burst, + &signatures[j * BURST_SIZE], + BURST_SIZE, positions_burst); + for (k = 0; k < BURST_SIZE; k++) { + if (positions_burst[k] != + positions[j * + BURST_SIZE + k]) { + printf("Key looked up in %d, should be in %d\n", + positions_burst[k], + positions[j * + BURST_SIZE + k]); + return -1; + } + } } else { rte_hash_lookup_bulk(h[table_index], (const void **) keys_burst, @@ -462,7 +511,8 @@ timed_lookups_multi(unsigned int with_data, unsigned int table_index, const uint64_t end_tsc = rte_rdtsc(); const uint64_t time_taken = end_tsc - start_tsc; - cycles[table_index][LOOKUP_MULTI][0][with_data] = time_taken/num_lookups; + cycles[table_index][LOOKUP_MULTI][with_hash][with_data] = + time_taken/num_lookups; return 0; } @@ -543,7 +593,8 @@ run_all_tbl_perf_tests(unsigned int with_pushes, unsigned int with_locks, if (timed_lookups(with_hash, with_data, i, ext) < 0) return -1; - if (timed_lookups_multi(with_data, i, ext) < 0) + if (timed_lookups_multi(with_hash, with_data, + i, ext) < 0) return -1; if (timed_deletes(with_hash, with_data, i, ext) < 0)