On Sun, 8 Jun 2025 00:36:02 +0530 venkatesh bs <venki....@gmail.com> wrote:
> Hi @dpdk community, > > In my application, I am using the dpdk hash table as below. > > 1. calculate the hash value. > 2. using this signature add the key and data into a table. > 3. lock is used in the 2nd call (add). > > Below is the code sniffer for the same. > ================================================================== > hash_sig_t sig = rte_hash_hash(hash_tablele, (void *) &new_key); > > pthread_mutex_lock(&lock); > int32_t ret = rte_hash_add_key_with_hash_data(hash_table, > (void *)&new_key, > sig, > info); > > if (ret < 0) > { > pthread_mutex_unlock(lock); > return TOS_E_FAIL; > } > pthread_mutex_unlock(lock); > > return OK.. > ================================================================== > > My application is having a lot of threads and when run with heavy load , I > am getting a lot of insertion failure, i felt the reason could be > calculating and adding the has value in 2 api's as opposed to > rte_hash_add() that is safe under a lock.. > > > Please let me know your thoughts. Which architecture and DPDK version? What flags did you use during hash creation? As always with open source, the first thing to do is look at the source and see what is really happening, rather than just relying on the documentation. I assume you are using the default hash function which is CRC. First what is the return value, which error? It might just be key collisions. How big is the table and how many inserts? Also, the current DPDK hash flags with better locking and RCU. This would be faster than simple pthread mutex.