[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