[ovs-dev] [PATCH/RFC] bond: add enable-recirc configuration for bond.

Jan Scheurich jan.scheurich at ericsson.com
Wed Aug 16 14:32:42 UTC 2017


Hi Simon, 

This patch only covers how to prevent recirculation but does not describe how bond selection works in the absence of recirculation. Can you explain?

Thanks, Jan

> -----Original Message-----
> From: ovs-dev-bounces at openvswitch.org [mailto:ovs-dev-
> bounces at openvswitch.org] On Behalf Of Simon Horman
> Sent: Tuesday, 15 August, 2017 18:14
> To: dev at openvswitch.org
> Cc: oss-drivers at netronome.com; Simon Horman
> <simon.horman at netronome.com>; Pieter Jansen van Vuuren
> <pieter.jansenvanvuuren at netronome.com>
> Subject: [ovs-dev] [PATCH/RFC] bond: add enable-recirc configuration for
> bond.
> 
> From: Pieter Jansen van Vuuren
> <pieter.jansenvanvuuren at netronome.com>
> 
> Adds a config parameter that determines if a bond will use recirculation
> in the kernel datapath when implementing a bond in balance-tcp mode.
> 
> The default for enable-recirc is "true", resulting in the traditional
> implementation of a bond in balance-tcp mode. Setting enable-recirc to
> false results in datapath rules that do not rely on the recirculation
> action.
> 
> example usage:
> ovs-vsctl set port bond0 other_config:enable-recirc=false
> 
> Advantages:
> - Allows TC offloading of OVS bonds on hardware which
>   does not support recirculation
> - Appears to result in lower latency (in systems using few flows).
> 
> Quick ping test results in:
> 
> other_config:enable-recirc=false
> rtt min/avg/max/mdev = 0.039/0.193/7.612/1.059 ms
> 
> other_config:enable-recirc=true
> rtt min/avg/max/mdev = 0.038/0.321/14.091/1.967 ms
> 
> More comprehensive testing is in progress.
> 
> Signed-off-by: Pieter Jansen van Vuuren
> <pieter.jansenvanvuuren at netronome.com>
> Signed-off-by: Simon Horman <simon.horman at netronome.com>
> ---
>  ofproto/bond.c       | 11 ++++++++++-
>  ofproto/bond.h       |  1 +
>  vswitchd/bridge.c    |  3 +++
>  vswitchd/vswitch.xml |  8 ++++++++
>  4 files changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/ofproto/bond.c b/ofproto/bond.c
> index 365a3ca7ffad..46f8a9afcb3b 100644
> --- a/ofproto/bond.c
> +++ b/ofproto/bond.c
> @@ -147,6 +147,7 @@ struct bond {
>                                 /* The MAC address of the active interface. */
>      /* Legacy compatibility. */
>      bool lacp_fallback_ab; /* Fallback to active-backup on LACP failure. */
> +    bool recirc_enabled;
> 
>      struct ovs_refcount ref_cnt;
>  };
> @@ -437,6 +438,11 @@ bond_reconfigure(struct bond *bond, const struct
> bond_settings *s)
>          revalidate = true;
>      }
> 
> +    if (bond->recirc_enabled != s->recirc_enabled) {
> +        bond->recirc_enabled = s->recirc_enabled;
> +        revalidate = true;
> +    }
> +
>      if (bond->rebalance_interval != s->rebalance_interval) {
>          bond->rebalance_interval = s->rebalance_interval;
>          revalidate = true;
> @@ -458,7 +464,10 @@ bond_reconfigure(struct bond *bond, const struct
> bond_settings *s)
>      }
> 
>      if (bond->balance != BM_AB) {
> -        if (!bond->recirc_id) {
> +	if (!bond->recirc_enabled) {
> +            recirc_free_id(bond->recirc_id);
> +            bond->recirc_id = 0;
> +        } else if (!bond->recirc_id) {
>              bond->recirc_id = recirc_alloc_id(bond->ofproto);
>          }
>      } else if (bond->recirc_id) {
> diff --git a/ofproto/bond.h b/ofproto/bond.h
> index e7c3d9bc35dd..beb937b9910e 100644
> --- a/ofproto/bond.h
> +++ b/ofproto/bond.h
> @@ -53,6 +53,7 @@ struct bond_settings {
>      int down_delay;             /* ms before disabling a down slave. */
> 
>      bool lacp_fallback_ab_cfg;  /* Fallback to active-backup on LACP
> failure. */
> +    bool recirc_enabled;
> 
>      struct eth_addr active_slave_mac;
>                                  /* The MAC address of the interface
> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> index a8cbae78cb23..b4b5c89ca6a0 100644
> --- a/vswitchd/bridge.c
> +++ b/vswitchd/bridge.c
> @@ -4259,6 +4259,9 @@ port_configure_bond(struct port *port, struct
> bond_settings *s)
>      s->lacp_fallback_ab_cfg = smap_get_bool(&port->cfg->other_config,
>                                         "lacp-fallback-ab", false);
> 
> +    s->recirc_enabled = smap_get_bool(&port->cfg->other_config,
> +                                      "enable-recirc", true);
> +
>      LIST_FOR_EACH (iface, port_elem, &port->ifaces) {
>          netdev_set_miimon_interval(iface->netdev, miimon_interval);
>      }
> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
> index 074535b588ef..7b97d720d276 100644
> --- a/vswitchd/vswitch.xml
> +++ b/vswitchd/vswitch.xml
> @@ -1693,6 +1693,14 @@
>              is configured to LACP mode, the bond will use LACP.
>            </p>
>          </column>
> +
> +        <column name="other_config" key="enable-recirc"
> +                type='{"type": "boolean"}'>
> +          <p>
> +            Determines if a bond will use recirculation in the kernel datapath
> +            when implementing a bond in balance-tcp mode.
> +          </p>
> +        </column>
>        </group>
> 
>        <group title="Rebalancing Configuration">
> --
> 2.1.4
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev


More information about the dev mailing list