[v1,2/3] test/hash: change multiwriter test to use jhash

Message ID 1539208085-30756-3-git-send-email-yipeng1.wang@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series Improvements over rte hash and tests |

Checks

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

Commit Message

Wang, Yipeng1 Oct. 10, 2018, 9:48 p.m. UTC
  With sequential key, the test will cover more corner
cases with jhash instead of crc hash, since jhash
generates more random hash pattern on sequential key.
It is useful for functional verification.

Signed-off-by: Yipeng Wang <yipeng1.wang@intel.com>
---
 test/test/test_hash_multiwriter.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
  

Comments

Bruce Richardson Oct. 11, 2018, 11:27 a.m. UTC | #1
On Wed, Oct 10, 2018 at 02:48:04PM -0700, Yipeng Wang wrote:
> With sequential key, the test will cover more corner
> cases with jhash instead of crc hash, since jhash
> generates more random hash pattern on sequential key.
> It is useful for functional verification.
> 
> Signed-off-by: Yipeng Wang <yipeng1.wang@intel.com>
> ---
>  test/test/test_hash_multiwriter.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
Looking at the code in the patch, it appears the function is always now
called with use_jhash == 1. Why not just do a one-line change to switch the
hard-coded crc hash to jhash, rather than hardcoding that later in the file
and having a branch with a never-taken leg?

/Bruce
  

Patch

diff --git a/test/test/test_hash_multiwriter.c b/test/test/test_hash_multiwriter.c
index 6a3eb10..7f2deae 100644
--- a/test/test/test_hash_multiwriter.c
+++ b/test/test/test_hash_multiwriter.c
@@ -12,6 +12,7 @@ 
 #include <rte_malloc.h>
 #include <rte_random.h>
 #include <rte_spinlock.h>
+#include <rte_jhash.h>
 
 #include "test.h"
 
@@ -95,7 +96,7 @@  test_hash_multiwriter_worker(void *arg)
 
 
 static int
-test_hash_multiwriter(void)
+test_hash_multiwriter(int use_jhash)
 {
 	unsigned int i, rounded_nb_total_tsx_insertion;
 	static unsigned calledCount = 1;
@@ -108,10 +109,14 @@  test_hash_multiwriter(void)
 	struct rte_hash_parameters hash_params = {
 		.entries = nb_entries,
 		.key_len = sizeof(uint32_t),
-		.hash_func = rte_hash_crc,
 		.hash_func_init_val = 0,
 		.socket_id = rte_socket_id(),
 	};
+	if (use_jhash)
+		hash_params.hash_func = rte_jhash;
+	else
+		hash_params.hash_func = rte_hash_crc;
+
 	if (use_htm)
 		hash_params.extra_flag =
 			RTE_HASH_EXTRA_FLAGS_TRANS_MEM_SUPPORT
@@ -259,6 +264,8 @@  test_hash_multiwriter(void)
 static int
 test_hash_multiwriter_main(void)
 {
+	int use_jhash = 1;
+
 	if (rte_lcore_count() == 1) {
 		printf("More than one lcore is required to do multiwriter test\n");
 		return 0;
@@ -278,13 +285,13 @@  test_hash_multiwriter_main(void)
 		printf("Test multi-writer with Hardware transactional memory\n");
 
 		use_htm = 1;
-		if (test_hash_multiwriter() < 0)
+		if (test_hash_multiwriter(use_jhash) < 0)
 			return -1;
 	}
 
 	printf("Test multi-writer without Hardware transactional memory\n");
 	use_htm = 0;
-	if (test_hash_multiwriter() < 0)
+	if (test_hash_multiwriter(use_jhash) < 0)
 		return -1;
 
 	return 0;