Re: [ovs-discuss] 答复: conn_key_hash change hash arithmetic
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
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
发件人: 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