On Tue, Apr 7, 2020 at 7:03 AM Maciej Jozefczyk <mjoze...@redhat.com> wrote:
>
> Hello!
>
> I would like to ask you to clarify how the OVN Load balancing algorithm
works.
>
> Based on the action [1]:
> 1) If connection is alive the same 'backend' will be chosen,
>
> 2) If it is a new connection the backend will be chosen based on
selection_method=dp_hash [2].
> Based on changelog the dp_hash uses '5 tuple hash' [3].
> The hash is calculated based on values: source and destination IP,
 source port, protocol and arbitrary value - 42. [4]
> Based on that information we could name it SOURCE_IP_PORT.
>
> Unfortunately we recently got a bug report in OVN Octavia provider driver
project, that the Load Balancing in OVN
> works differently [5]. The report shows even when the test uses the same
source ip and port, but new TCP connection,
> traffic is randomly distributed, but based on [2] it shouldn't?
>
> Is it a bug?  Is something else taken to account while creating a hash?
Can it be fixed in OVS/OVN?
>
>
>
> Thanks,
> Maciej
>
>
> [1] https://github.com/ovn-org/ovn/blob/branch-20.03/lib/actions.c#L1017
> [2] https://github.com/ovn-org/ovn/blob/branch-20.03/lib/actions.c#L1059
> [3]
https://github.com/openvswitch/ovs/blob/d58b59c17c70137aebdde37d3c01c26a26b28519/NEWS#L364-L371
> [4]
https://github.com/openvswitch/ovs/blob/74286173f4d7f51f78e9db09b07a6d4d65263252/lib/flow.c#L2217
> [5] https://bugs.launchpad.net/neutron/+bug/1871239
>
> --
> Best regards,
> Maciej Józefczyk
> _______________________________________________
> discuss mailing list
> disc...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Hi Maciej,

Thanks for reporting. It is definitely strange that same 5-tuple flow
resulted in hitting different backends. I didn't observed such behavior
before (maybe I should try again myself to confirm). Can you make sure
during the testing the group bucket didn't change? You can do so by:
# ovs-ofctl dump-groups br-int
and also check the group stats and see if multiple buckets has counter
increased during the test
# ovs-ofctl dump-group-stats br-int [group]

For the 5-tuple hash function you are seeing flow_hash_5tuple(), it is
using all the 5-tuples. It adds both ports (src and dst) at once:
       /* Add both ports at once. */
        hash = hash_add(hash,
                        ((const uint32_t *)flow)[offsetof(struct flow,
tp_src)
                                                 / sizeof(uint32_t)]);

The tp_src is the start of the offset, and the size is 32, meaning both src
and dst, each is 16 bits. (Although I am not sure if dp_hash method is
using this function or not. Need to check more code)

BTW, I am not sure why Neutron give it the name SOURCE_IP_PORT. Shall it be
called just 5-TUPLE, since protocol, destination IP and PORT are also
considered in the hash.

Thanks,
Han
_______________________________________________
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Reply via email to