On 11/15/2011 07:22 PM, Mathieu Desnoyers wrote: > "Confilict" -> "conflict" > > This increases conflicts by restricting the pool of random numbers to a > limited number of bits. Actually, this approach replaces the "pool size" > parameters I already have there, with slightly less flexibility though. > Please look into the "random number pool size" to try to achieve the > same effect.
I missed something? pool size in the original code is constant when the test is started. And when the hash table is larger/equal than the pool, many bucket is unused and cause long chain in a bucket. > > Thanks, > > Mathieu > > * Lai Jiangshan ([email protected]) wrote: >> Signed-off-by: Lai Jiangshan <[email protected]> >> --- >> tests/test_urcu_hash.c | 20 +++++++++++++++++++- >> 1 files changed, 19 insertions(+), 1 deletions(-) >> >> diff --git a/tests/test_urcu_hash.c b/tests/test_urcu_hash.c >> index 02d2c63..eb42522 100644 >> --- a/tests/test_urcu_hash.c >> +++ b/tests/test_urcu_hash.c >> @@ -141,6 +141,7 @@ static unsigned long min_hash_alloc_size = >> DEFAULT_MIN_ALLOC_SIZE; >> static unsigned long init_populate; >> static int opt_auto_resize; >> static int add_only, add_unique, add_replace; >> +static int opt_test_bucket_conflict; >> >> static int count_pipe[2]; >> >> @@ -390,8 +391,22 @@ int lookup_first(struct cds_lfht_node *node, void *key) >> static inline >> void lfht_test_node_init(struct lfht_test_node *node) >> { >> + unsigned long hash = test_rand_get(); >> + >> cds_lfht_node_init(&node->node); >> - node->hash = test_rand_get(); >> + >> + if (opt_test_bucket_conflict) { >> +#if (CAA_BITS_PER_LONG == 32) >> + int hash_bits= test_rand_get_bits(5); >> +#else >> + int hash_bits= test_rand_get_bits(6); >> +#endif >> + >> + if (hash_bits > 4) >> + hash &= (1UL << hash_bits) - 1; >> + } >> + >> + node->hash = hash; >> } >> >> static >> @@ -674,6 +689,7 @@ void show_usage(int argc, char **argv) >> printf(" [-i] Add only (no removal).\n"); >> printf(" [-k nr_nodes] Number of nodes to insert initially.\n"); >> printf(" [-A] Automatically resize hash table.\n"); >> + printf(" [-C] Use some hash value Confilict with buckets.\n"); >> printf("\n\n"); >> } >> >> @@ -792,6 +808,8 @@ int main(int argc, char **argv) >> case 'A': >> opt_auto_resize = 1; >> break; >> + case 'C': >> + opt_test_bucket_conflict = 1; >> break; >> >> } >> -- >> 1.7.4.4 >> > _______________________________________________ ltt-dev mailing list [email protected] http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
