[v2,2/2] test: update hash performance tests
Checks
Commit Message
Add preformance test for rte_hash_lookup_with_hash_bulk_data()
Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
---
app/test/test_hash_perf.c | 45 ++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 40 insertions(+), 5 deletions(-)
Comments
> -----Original Message-----
> From: Medvedkin, Vladimir <vladimir.medvedkin@intel.com>
> Sent: Thursday, March 26, 2020 9:47 AM
> To: dev@dpdk.org
> Cc: Wang, Yipeng1 <yipeng1.wang@intel.com>; Gobriel, Sameh
> <sameh.gobriel@intel.com>; Richardson, Bruce
> <bruce.richardson@intel.com>
> Subject: [PATCH v2 2/2] test: update hash performance tests
>
> Add preformance test for rte_hash_lookup_with_hash_bulk_data()
>
> Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
> ---
> app/test/test_hash_perf.c | 45
> ++++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 40 insertions(+), 5 deletions(-)
>
> diff --git a/app/test/test_hash_perf.c b/app/test/test_hash_perf.c index
> a438eae..e0d1600 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,39 @@ 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 {
> rte_hash_lookup_bulk(h[table_index],
> (const void **) keys_burst,
[Wang, Yipeng]
Although not implemented for (with_hash && !with_data), data would be still printed to output.
This could be misleading.
@@ -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,39 @@ 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 {
rte_hash_lookup_bulk(h[table_index],
(const void **) keys_burst,
@@ -462,7 +495,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 +577,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)