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

Darrell Ball dball at vmware.com
Thu Feb 1 22:56:00 UTC 2018


I commented on this many weeks/months ago.

Thanks Darrell

On 2/1/18, 2:54 PM, "ovs-discuss-bounces at openvswitch.org on behalf of Ben Pfaff" <ovs-discuss-bounces at openvswitch.org on behalf of blp at ovn.org> 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 +0000, liucheng (J) wrote:
    > 
    > 
    > 发件人: liucheng (J)
    > 发送时间: 2017年12月13日 18:01
    > 收件人: 'ovs-discuss at 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
    > discuss at 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
    discuss at 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=
    



More information about the discuss mailing list