[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [dm-devel] [PATCH v7 15/16] openvswitch: use new hashtable implementation
- From: Sasha Levin <levinsasha928 gmail com>
- To: Mathieu Desnoyers <mathieu desnoyers efficios com>
- Cc: snitzer redhat com, fweisbec gmail com, Trond Myklebust netapp com, bfields fieldses org, paul gortmaker windriver com, dm-devel redhat com, agk redhat com, aarcange redhat com, rds-devel oss oracle com, eric dumazet gmail com, venkat x venkatsubra oracle com, ccaulfie redhat com, mingo elte hu, dev openvswitch org, jesse nicira com, josh joshtriplett org, rostedt goodmis org, lw cn fujitsu com, teigland redhat com, axboe kernel dk, linux-nfs vger kernel org, edumazet google com, linux-mm kvack org, netdev vger kernel org, linux-kernel vger kernel org, ejt redhat com, ebiederm xmission com, tj kernel org, akpm linux-foundation org, torvalds linux-foundation org, davem davemloft net
- Subject: Re: [dm-devel] [PATCH v7 15/16] openvswitch: use new hashtable implementation
- Date: Mon, 29 Oct 2012 11:43:59 -0400
Hi Mathieu,
On Mon, Oct 29, 2012 at 9:29 AM, Mathieu Desnoyers
<mathieu desnoyers efficios com> wrote:
> * Sasha Levin (levinsasha928 gmail com) wrote:
> [...]
>> -static struct hlist_head *hash_bucket(struct net *net, const char *name)
>> -{
>> - unsigned int hash = jhash(name, strlen(name), (unsigned long) net);
>> - return &dev_table[hash & (VPORT_HASH_BUCKETS - 1)];
>> -}
>> -
>> /**
>> * ovs_vport_locate - find a port that has already been created
>> *
>> @@ -84,13 +76,12 @@ static struct hlist_head *hash_bucket(struct net *net, const char *name)
>> */
>> struct vport *ovs_vport_locate(struct net *net, const char *name)
>> {
>> - struct hlist_head *bucket = hash_bucket(net, name);
>> struct vport *vport;
>> struct hlist_node *node;
>> + int key = full_name_hash(name, strlen(name));
>>
>> - hlist_for_each_entry_rcu(vport, node, bucket, hash_node)
>> - if (!strcmp(name, vport->ops->get_name(vport)) &&
>> - net_eq(ovs_dp_get_net(vport->dp), net))
>> + hash_for_each_possible_rcu(dev_table, vport, node, hash_node, key)
>
> Is applying hash_32() on top of full_name_hash() needed and expected ?
Since this was pointed out in several of the patches, I'll answer it
just once here.
I've intentionally "allowed" double hashing with hash_32 to keep the
code simple.
hash_32() is pretty simple and gcc optimizes it to be almost nothing,
so doing that costs us a multiplication and a shift. On the other
hand, we benefit from keeping our code simple - how would we avoid
doing this double hash? adding a different hashtable function for
strings? or a new function for already hashed keys? I think we benefit
a lot from having to mul/shr instead of adding extra lines of code
here.
Thanks,
Sasha
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]