Re: [ovs-discuss] 答复: conn_key_hash change hash arithmetic

2018-02-01 Thread Darrell Ball
I commented on this many weeks/months ago.

Thanks Darrell

On 2/1/18, 2:54 PM, "ovs-discuss-boun...@openvswitch.org on behalf of Ben 
Pfaff"  wrote:

Darrell, any comment on this?  + and ^ are both valid choices of
operator here and it's a little odd that one would be better than the
other.

On Thu, Dec 14, 2017 at 08:25:30AM +, liucheng (J) wrote:
> 
> 
> 发件人: liucheng (J)
> 发送时间: 2017年12月13日 18:01
> 收件人: 'ovs-discuss@openvswitch.org'
> 主题: [ovs-discuss]conn_key_hash change hash arithmetic
> 
> Hello all,
> I run a test with the user conntrack. And I found if I only change the 
udp port, then the hash with function “conn_key_hash” is not balance.
> I change the hmap num(ct->buckets) to 4096 and ct->n_conn_limit to 
30,000,000. And I print the num of the nodes contained in the hmap’s bucket.
> As an example, a result looks like below. Most bucket is empty, and some 
bucket contain hundreds of nodes;
> ~hmap 4095 count 4310 mask 4095~~~
> buket 488 content 367 node
> buket 1077 content 514 node
> buket 1118 content 281 node
> buket 1261 content 423 node
> buket 1280 content 268 node
> buket 1603 content 319 node
> buket 1724 content 352 node
> buket 2676 content 155 node
> buket 2993 content 471 node
> buket 3028 content 325 node
> buket 3836 content 355 node
> buket 4060 content 480 node
> 
> Then I change the code in conn_key_hash as the patch. And test result is 
the max nodes in one bucket is 12.
> The num of the bucket contained only one node is 5000542.
> The num of the bucket contained only two node is 4337097.
> The num of the bucket contained only three node is 2588535.
> The num of the bucket contained only four node is 1196063.
> The num of the bucket contained only five node is 460865.
> The num of the bucket contained only six node is 155936.
> The num of the bucket contained only seven node is 48727.
> Most buckets contain few nodes.
> 
> 
> diff --git a/lib/conntrack.c b/lib/conntrack.c
> index 6d078f5..3edf809 100644
> --- a/lib/conntrack.c
> +++ b/lib/conntrack.c
> @@ -2034,7 +2034,7 @@ conn_key_hash(const struct conn_key *key, uint32_t 
basis)
>  hdst = ct_endpoint_hash_add(hdst, &key->dst);
> 
>  /* Even if source and destination are swapped the hash will be the 
same. */
> -hash = hsrc ^ hdst;
> +hash = hsrc + hdst;
> 
>  /* Hash the rest of the key(L3 and L4 types and zone). */
>  hash = hash_words((uint32_t *) (&key->dst + 1),
> 

> ___
> discuss mailing list
> disc...@openvswitch.org
> 
https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddiscuss&d=DwIGaQ&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=dTUs3WMDrQV6FEE6tIF3dGRCYYN-A5tIeAASPtMu-gk&s=bu696IgqmKAGyoCi7MmhOiXT3v5DG1avmEvvYwcMCLg&e=

___
discuss mailing list
disc...@openvswitch.org

https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddiscuss&d=DwIGaQ&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=dTUs3WMDrQV6FEE6tIF3dGRCYYN-A5tIeAASPtMu-gk&s=bu696IgqmKAGyoCi7MmhOiXT3v5DG1avmEvvYwcMCLg&e=


___
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss


Re: [ovs-discuss] 答复: conn_key_hash change hash arithmetic

2018-02-01 Thread Ben Pfaff
Darrell, any comment on this?  + and ^ are both valid choices of
operator here and it's a little odd that one would be better than the
other.

On Thu, Dec 14, 2017 at 08:25:30AM +, liucheng (J) wrote:
> 
> 
> 发件人: liucheng (J)
> 发送时间: 2017年12月13日 18:01
> 收件人: 'ovs-discuss@openvswitch.org'
> 主题: [ovs-discuss]conn_key_hash change hash arithmetic
> 
> Hello all,
> I run a test with the user conntrack. And I found if I only change the udp 
> port, then the hash with function “conn_key_hash” is not balance.
> I change the hmap num(ct->buckets) to 4096 and ct->n_conn_limit to 
> 30,000,000. And I print the num of the nodes contained in the hmap’s bucket.
> As an example, a result looks like below. Most bucket is empty, and some 
> bucket contain hundreds of nodes;
> ~hmap 4095 count 4310 mask 4095~~~
> buket 488 content 367 node
> buket 1077 content 514 node
> buket 1118 content 281 node
> buket 1261 content 423 node
> buket 1280 content 268 node
> buket 1603 content 319 node
> buket 1724 content 352 node
> buket 2676 content 155 node
> buket 2993 content 471 node
> buket 3028 content 325 node
> buket 3836 content 355 node
> buket 4060 content 480 node
> 
> Then I change the code in conn_key_hash as the patch. And test result is the 
> max nodes in one bucket is 12.
> The num of the bucket contained only one node is 5000542.
> The num of the bucket contained only two node is 4337097.
> The num of the bucket contained only three node is 2588535.
> The num of the bucket contained only four node is 1196063.
> The num of the bucket contained only five node is 460865.
> The num of the bucket contained only six node is 155936.
> The num of the bucket contained only seven node is 48727.
> Most buckets contain few nodes.
> 
> 
> diff --git a/lib/conntrack.c b/lib/conntrack.c
> index 6d078f5..3edf809 100644
> --- a/lib/conntrack.c
> +++ b/lib/conntrack.c
> @@ -2034,7 +2034,7 @@ conn_key_hash(const struct conn_key *key, uint32_t 
> basis)
>  hdst = ct_endpoint_hash_add(hdst, &key->dst);
> 
>  /* Even if source and destination are swapped the hash will be the same. 
> */
> -hash = hsrc ^ hdst;
> +hash = hsrc + hdst;
> 
>  /* Hash the rest of the key(L3 and L4 types and zone). */
>  hash = hash_words((uint32_t *) (&key->dst + 1),
> 

> ___
> discuss mailing list
> disc...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

___
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss


[ovs-discuss] 答复: conn_key_hash change hash arithmetic

2017-12-14 Thread liucheng (J)


发件人: liucheng (J)
发送时间: 2017年12月13日 18:01
收件人: 'ovs-discuss@openvswitch.org'
主题: [ovs-discuss]conn_key_hash change hash arithmetic

Hello all,
I run a test with the user conntrack. And I found if I only change the udp 
port, then the hash with function “conn_key_hash” is not balance.
I change the hmap num(ct->buckets) to 4096 and ct->n_conn_limit to 30,000,000. 
And I print the num of the nodes contained in the hmap’s bucket.
As an example, a result looks like below. Most bucket is empty, and some bucket 
contain hundreds of nodes;
~hmap 4095 count 4310 mask 4095~~~
buket 488 content 367 node
buket 1077 content 514 node
buket 1118 content 281 node
buket 1261 content 423 node
buket 1280 content 268 node
buket 1603 content 319 node
buket 1724 content 352 node
buket 2676 content 155 node
buket 2993 content 471 node
buket 3028 content 325 node
buket 3836 content 355 node
buket 4060 content 480 node

Then I change the code in conn_key_hash as the patch. And test result is the 
max nodes in one bucket is 12.
The num of the bucket contained only one node is 5000542.
The num of the bucket contained only two node is 4337097.
The num of the bucket contained only three node is 2588535.
The num of the bucket contained only four node is 1196063.
The num of the bucket contained only five node is 460865.
The num of the bucket contained only six node is 155936.
The num of the bucket contained only seven node is 48727.
Most buckets contain few nodes.


diff --git a/lib/conntrack.c b/lib/conntrack.c
index 6d078f5..3edf809 100644
--- a/lib/conntrack.c
+++ b/lib/conntrack.c
@@ -2034,7 +2034,7 @@ conn_key_hash(const struct conn_key *key, uint32_t basis)
 hdst = ct_endpoint_hash_add(hdst, &key->dst);

 /* Even if source and destination are swapped the hash will be the same. */
-hash = hsrc ^ hdst;
+hash = hsrc + hdst;

 /* Hash the rest of the key(L3 and L4 types and zone). */
 hash = hash_words((uint32_t *) (&key->dst + 1),

___
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss