[dpdk-dev] [PATCH v2 2/2] test: update hash performance tests

Vladimir Medvedkin vladimir.medvedkin at intel.com
Thu Mar 26 17:47:23 CET 2020


Add preformance test for rte_hash_lookup_with_hash_bulk_data()

Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin at 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,
@@ -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)
-- 
2.7.4



More information about the dev mailing list