[v2,2/2] test: update hash performance tests

Message ID 1585241243-339118-2-git-send-email-vladimir.medvedkin@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series [v2,1/2] hash: add hash bulk lookup with hash signatures array |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Vladimir Medvedkin March 26, 2020, 4:47 p.m. UTC
  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

Wang, Yipeng1 March 30, 2020, 8:33 p.m. UTC | #1
> -----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.
  

Patch

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,
@@ -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)