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: [email protected] [mailto:ovs-dev- > [email protected]] On Behalf Of Simon Horman > Sent: Tuesday, 15 August, 2017 18:14 > To: [email protected] > Cc: [email protected]; Simon Horman > <[email protected]>; Pieter Jansen van Vuuren > <[email protected]> > Subject: [ovs-dev] [PATCH/RFC] bond: add enable-recirc configuration for > bond. > > From: Pieter Jansen van Vuuren > <[email protected]> > > 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 > <[email protected]> > Signed-off-by: Simon Horman <[email protected]> > --- > 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 > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
