[ovs-dev] [PATCH v2] datapath: Add hash info to upcall.
Ilya Maximets
i.maximets at ovn.org
Thu May 28 17:10:26 UTC 2020
On 5/27/20 8:56 AM, aginwala wrote:
> Thanks Han for backporting it for lower kernels. I tested this patch with some running workloads with old 3.13* kernels (ovs 2.11*) and it works fine. In addition I am also considering the discussion [1], and for ecmp workloads I see all packets are hitting the different bucket instead of the same bucket (using ssh with single connection). Not a blocker as will plan to upgrade these nodes with 3.13* to newer 4*+ kernels moving further as it's tough to leverage all ovs features for old kernels.
>
> Tested-by: Aliasgar Ginwala <aginwala at ebay.com <mailto:aginwala at ebay.com>>
>
> [1] - https://mail.openvswitch.org/pipermail/ovs-discuss/2020-April/049896.html
>
> On Mon, May 25, 2020 at 11:28 PM Han Zhou <hzhou at ovn.org <mailto:hzhou at ovn.org>> wrote:
>
> This patch backports below upstream patches, and add __skb_set_hash
> to compat for older kernels.
>
> commit b5ab1f1be6180a2e975eede18731804b5164a05d
> Author: Jakub Kicinski <kuba at kernel.org <mailto:kuba at kernel.org>>
> Date: Mon Mar 2 21:05:18 2020 -0800
>
> openvswitch: add missing attribute validation for hash
>
> Add missing attribute validation for OVS_PACKET_ATTR_HASH
> to the netlink policy.
>
> Fixes: bd1903b7c459 ("net: openvswitch: add hash info to upcall")
> Signed-off-by: Jakub Kicinski <kuba at kernel.org <mailto:kuba at kernel.org>>
> Reviewed-by: Greg Rose <gvrose8192 at gmail.com <mailto:gvrose8192 at gmail.com>>
> Signed-off-by: David S. Miller <davem at davemloft.net <mailto:davem at davemloft.net>>
>
> commit bd1903b7c4596ba6f7677d0dfefd05ba5876707d
> Author: Tonghao Zhang <xiangxia.m.yue at gmail.com <mailto:xiangxia.m.yue at gmail.com>>
> Date: Wed Nov 13 23:04:49 2019 +0800
>
> net: openvswitch: add hash info to upcall
>
> When using the kernel datapath, the upcall don't
> include skb hash info relatived. That will introduce
> some problem, because the hash of skb is important
> in kernel stack. For example, VXLAN module uses
> it to select UDP src port. The tx queue selection
> may also use the hash in stack.
>
> Hash is computed in different ways. Hash is random
> for a TCP socket, and hash may be computed in hardware,
> or software stack. Recalculation hash is not easy.
>
> Hash of TCP socket is computed:
> tcp_v4_connect
> -> sk_set_txhash (is random)
>
> __tcp_transmit_skb
> -> skb_set_hash_from_sk
>
> There will be one upcall, without information of skb
> hash, to ovs-vswitchd, for the first packet of a TCP
> session. The rest packets will be processed in Open vSwitch
> modules, hash kept. If this tcp session is forward to
> VXLAN module, then the UDP src port of first tcp packet
> is different from rest packets.
>
> TCP packets may come from the host or dockers, to Open vSwitch.
> To fix it, we store the hash info to upcall, and restore hash
> when packets sent back.
>
> +---------------+ +-------------------------+
> | Docker/VMs | | ovs-vswitchd |
> +----+----------+ +-+--------------------+--+
> | ^ |
> | | |
> | | upcall v restore packet hash
> (not recalculate)
> | +-+--------------------+--+
> | tap netdev | | vxlan module
> +---------------> +--> Open vSwitch ko +-->
> or internal type | |
> +-------------------------+
>
> Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2019-October/364062.html
> Signed-off-by: Tonghao Zhang <xiangxia.m.yue at gmail.com <mailto:xiangxia.m.yue at gmail.com>>
> Acked-by: Pravin B Shelar <pshelar at ovn.org <mailto:pshelar at ovn.org>>
> Signed-off-by: David S. Miller <davem at davemloft.net <mailto:davem at davemloft.net>>
>
> Acked-by: Tonghao Zhang <xiangxia.m.yue at gmail.com <mailto:xiangxia.m.yue at gmail.com>>
> Signed-off-by: Han Zhou <hzhou at ovn.org <mailto:hzhou at ovn.org>>
> ---
> v1->v2: Fix build on kernel 3.16
>
> acinclude.m4 | 4 ++++
> datapath/datapath.c | 33 +++++++++++++++++++++++++++-
> datapath/datapath.h | 12 ++++++++++
> datapath/linux/compat/include/linux/skbuff.h | 31 ++++++++++++++++++++++++++
> 4 files changed, 79 insertions(+), 1 deletion(-)
>
Thanks! Applied to master.
Best regards, Ilya Maximets.
More information about the dev
mailing list