diff mbox

[ovs-dev] ovn-controller: squelch expected duplicate flow warnings

Message ID 1469380073-27333-1-git-send-email-rmoats@us.ibm.com
State Not Applicable
Headers show

Commit Message

Ryan Moats July 24, 2016, 5:07 p.m. UTC
In the physical processing of ovn-controller, there are two
sets of OF flows that are still fully recalculated every cycle:

  Flows that aren't associated with any logical flow, and
  Flows calculated based on multicast groups

Because these flows are recalculated fully each cycle, full
duplicates of existing OF flows are created and the OF management
code in ovn-controller pollutes the logs with false positive
warnings about repeated duplicates.

As a short term measure, ignore full duplicates for both of
these types of flows, but still warn if the action changes
(as that is not expected and may be indicative of a problem).

Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
---
 ovn/controller/ofctrl.c   | 26 +++++++++++++++++++++-----
 ovn/controller/ofctrl.h   |  3 +++
 ovn/controller/physical.c | 28 +++++++++++++++++++---------
 3 files changed, 43 insertions(+), 14 deletions(-)

Comments

Gurucharan Shetty July 26, 2016, 8 p.m. UTC | #1
On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:

> In the physical processing of ovn-controller, there are two
> sets of OF flows that are still fully recalculated every cycle:
>
>   Flows that aren't associated with any logical flow, and
>   Flows calculated based on multicast groups
>
> Because these flows are recalculated fully each cycle, full
> duplicates of existing OF flows are created and the OF management
> code in ovn-controller pollutes the logs with false positive
> warnings about repeated duplicates.
>
> As a short term measure, ignore full duplicates for both of
> these types of flows, but still warn if the action changes
> (as that is not expected and may be indicative of a problem).
>
> Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
>

Even with this patch, I get consistent unit test failures when I run OVN
system tests via :

make check-kernel TESTSUITEFLAGS="-k ovn"

The test that fails has the following warning:
+2016-07-26T09:58:04.535Z|00013|ofctrl|WARN|duplicate flow with modified
action for parent a356d28e-84f1-4984-94b2-3ee5a3db2b9b: table_id=32,
priority=100, reg15=0xffff,metadata=0x6,
actions=set_field:0x1->reg15,resubmit(,34),set_field:0xffff->reg15,resubmit(,33)




> ---
>  ovn/controller/ofctrl.c   | 26 +++++++++++++++++++++-----
>  ovn/controller/ofctrl.h   |  3 +++
>  ovn/controller/physical.c | 28 +++++++++++++++++++---------
>  3 files changed, 43 insertions(+), 14 deletions(-)
>
> diff --git a/ovn/controller/ofctrl.c b/ovn/controller/ofctrl.c
> index f0451b7..2b26f2d 100644
> --- a/ovn/controller/ofctrl.c
> +++ b/ovn/controller/ofctrl.c
> @@ -550,10 +550,10 @@ log_ovn_flow_rl(struct vlog_rate_limit *rl, enum
> vlog_level level,
>   *
>   * This just assembles the desired flow tables in memory.  Nothing is
> actually
>   * sent to the switch until a later call to ofctrl_run(). */
> -void
> -ofctrl_add_flow(uint8_t table_id, uint16_t priority,
> +static void
> +_ofctrl_add_flow(uint8_t table_id, uint16_t priority,
>                  const struct match *match, const struct ofpbuf *actions,
> -                const struct uuid *uuid)
> +                const struct uuid *uuid, bool dupwarn)
>  {
>      /* Structure that uses table_id+priority+various things as hashes. */
>      struct ovn_flow *f = xmalloc(sizeof *f);
> @@ -591,8 +591,10 @@ ofctrl_add_flow(uint8_t table_id, uint16_t priority,
>               */
>              if (ofpacts_equal(f->ofpacts, f->ofpacts_len,
>                                d->ofpacts, d->ofpacts_len)) {
> -                static struct vlog_rate_limit rl =
> VLOG_RATE_LIMIT_INIT(5, 1);
> -                log_ovn_flow_rl(&rl, VLL_INFO, f, "duplicate flow");
> +                if (dupwarn) {
> +                    static struct vlog_rate_limit rl =
> VLOG_RATE_LIMIT_INIT(5, 1);
> +                    log_ovn_flow_rl(&rl, VLL_INFO, f, "duplicate flow");
> +                }
>              } else {
>                  static struct vlog_rate_limit rl =
> VLOG_RATE_LIMIT_INIT(5, 1);
>                  log_ovn_flow_rl(&rl, VLL_WARN, f,
> @@ -617,6 +619,20 @@ ofctrl_add_flow(uint8_t table_id, uint16_t priority,
>                  f->uuid_hindex_node.hash);
>  }
>
> +void
> +ofctrl_add_flow(uint8_t table_id, uint16_t priority,
> +                const struct match *match, const struct ofpbuf *actions,
> +                const struct uuid *uuid) {
> +    _ofctrl_add_flow(table_id, priority, match, actions, uuid, true);
> +}
> +
> +void
> +ofctrl_add_flow_no_warn(uint8_t table_id, uint16_t priority,
> +                        const struct match *match, const struct ofpbuf
> *actions,
> +                        const struct uuid *uuid) {
> +    _ofctrl_add_flow(table_id, priority, match, actions, uuid, false);
> +}
> +
>  /* Removes a bundles of flows from the flow table. */
>  void
>  ofctrl_remove_flows(const struct uuid *uuid)
> diff --git a/ovn/controller/ofctrl.h b/ovn/controller/ofctrl.h
> index 49b95b0..b591e82 100644
> --- a/ovn/controller/ofctrl.h
> +++ b/ovn/controller/ofctrl.h
> @@ -42,6 +42,9 @@ struct ovn_flow *ofctrl_dup_flow(struct ovn_flow
> *source);
>  void ofctrl_add_flow(uint8_t table_id, uint16_t priority,
>                       const struct match *, const struct ofpbuf *ofpacts,
>                       const struct uuid *uuid);
> +void ofctrl_add_flow_no_warn(uint8_t table_id, uint16_t priority,
> +                             const struct match *, const struct ofpbuf
> *ofpacts,
> +                             const struct uuid *uuid);
>
>  void ofctrl_remove_flows(const struct uuid *uuid);
>
> diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c
> index a104e33..9e6dff4 100644
> --- a/ovn/controller/physical.c
> +++ b/ovn/controller/physical.c
> @@ -549,8 +549,9 @@ consider_mc_group(enum mf_field_id mff_ovn_geneve,
>           * group as the logical output port. */
>          put_load(mc->tunnel_key, MFF_LOG_OUTPORT, 0, 32, ofpacts_p);
>
> -        ofctrl_add_flow(OFTABLE_LOCAL_OUTPUT, 100,
> -                        &match, ofpacts_p, &mc->header_.uuid);
> +        /* Add flow, allowing expected full duplication to be ignored. */
> +        ofctrl_add_flow_no_warn(OFTABLE_LOCAL_OUTPUT, 100,
> +                                &match, ofpacts_p, &mc->header_.uuid);
>      }
>
>      /* Table 32, priority 100.
> @@ -587,8 +588,10 @@ consider_mc_group(enum mf_field_id mff_ovn_geneve,
>              if (local_ports) {
>                  put_resubmit(OFTABLE_LOCAL_OUTPUT, remote_ofpacts_p);
>              }
> -            ofctrl_add_flow(OFTABLE_REMOTE_OUTPUT, 100,
> -                            &match, remote_ofpacts_p, &mc->header_.uuid);
> +            /* Add flow, allowing expected full duplication to be
> ignored. */
> +            ofctrl_add_flow_no_warn(OFTABLE_REMOTE_OUTPUT, 100,
> +                                    &match, remote_ofpacts_p,
> +                                    &mc->header_.uuid);
>          }
>      }
>      sset_destroy(&remote_chassis);
> @@ -794,8 +797,9 @@ physical_run(struct controller_ctx *ctx, enum
> mf_field_id mff_ovn_geneve,
>
>          put_resubmit(OFTABLE_LOCAL_OUTPUT, &ofpacts);
>
> -        ofctrl_add_flow(OFTABLE_PHY_TO_LOG, 100, &match, &ofpacts,
> -                        hc_uuid);
> +        /* Add flow, allowing expected full duplication to be ignored. */
> +        ofctrl_add_flow_no_warn(OFTABLE_PHY_TO_LOG, 100, &match, &ofpacts,
> +                                hc_uuid);
>      }
>
>      /* Add flows for VXLAN encapsulations.  Due to the limited amount of
> @@ -828,7 +832,9 @@ physical_run(struct controller_ctx *ctx, enum
> mf_field_id mff_ovn_geneve,
>              put_load(binding->tunnel_key, MFF_LOG_INPORT, 0, 15,
> &ofpacts);
>              put_resubmit(OFTABLE_LOG_INGRESS_PIPELINE, &ofpacts);
>
> -            ofctrl_add_flow(OFTABLE_PHY_TO_LOG, 100, &match, &ofpacts,
> hc_uuid);
> +            /* Add flow, allowing expected full duplication to be
> ignored. */
> +            ofctrl_add_flow_no_warn(OFTABLE_PHY_TO_LOG, 100, &match,
> &ofpacts,
> +                                    hc_uuid);
>          }
>      }
>
> @@ -841,7 +847,9 @@ physical_run(struct controller_ctx *ctx, enum
> mf_field_id mff_ovn_geneve,
>      match_init_catchall(&match);
>      ofpbuf_clear(&ofpacts);
>      put_resubmit(OFTABLE_LOCAL_OUTPUT, &ofpacts);
> -    ofctrl_add_flow(OFTABLE_REMOTE_OUTPUT, 0, &match, &ofpacts, hc_uuid);
> +    /* Add flow, allowing expected full duplication to be ignored. */
> +    ofctrl_add_flow_no_warn(OFTABLE_REMOTE_OUTPUT, 0, &match, &ofpacts,
> +                            hc_uuid);
>
>      /* Table 34, Priority 0.
>       * =======================
> @@ -855,7 +863,9 @@ physical_run(struct controller_ctx *ctx, enum
> mf_field_id mff_ovn_geneve,
>      MFF_LOG_REGS;
>  #undef MFF_LOG_REGS
>      put_resubmit(OFTABLE_LOG_EGRESS_PIPELINE, &ofpacts);
> -    ofctrl_add_flow(OFTABLE_DROP_LOOPBACK, 0, &match, &ofpacts, hc_uuid);
> +    /* Add flow, allowing expected full duplication to be ignored. */
> +    ofctrl_add_flow_no_warn(OFTABLE_DROP_LOOPBACK, 0, &match, &ofpacts,
> +                            hc_uuid);
>
>      ofpbuf_uninit(&ofpacts);
>      HMAP_FOR_EACH_POP (tun, hmap_node, &tunnels) {
> --
> 1.9.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
Gurucharan Shetty July 26, 2016, 8:54 p.m. UTC | #2
On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:

> In the physical processing of ovn-controller, there are two
> sets of OF flows that are still fully recalculated every cycle:
>
>   Flows that aren't associated with any logical flow, and
>   Flows calculated based on multicast groups
>
> Because these flows are recalculated fully each cycle, full
> duplicates of existing OF flows are created and the OF management
> code in ovn-controller pollutes the logs with false positive
> warnings about repeated duplicates.
>
> As a short term measure, ignore full duplicates for both of
> these types of flows, but still warn if the action changes
> (as that is not expected and may be indicative of a problem).
>
> Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
>

I also noticed that "commit 70c7cfef188b5ae9940abd5 (ovn-controller: Add
incremental processing to lflow_run and physical_run)" causes load
balancing system unit tests to fail. A little debugging shows that groups
are getting deleted when new flows are added.  My hunch is that this is
likely because 'desired_groups' in ofctl_put gets deleted in every run. But
in the next run, it does not get updated as we no longer process all flows.


---
>  ovn/controller/ofctrl.c   | 26 +++++++++++++++++++++-----
>  ovn/controller/ofctrl.h   |  3 +++
>  ovn/controller/physical.c | 28 +++++++++++++++++++---------
>  3 files changed, 43 insertions(+), 14 deletions(-)
>
> diff --git a/ovn/controller/ofctrl.c b/ovn/controller/ofctrl.c
> index f0451b7..2b26f2d 100644
> --- a/ovn/controller/ofctrl.c
> +++ b/ovn/controller/ofctrl.c
> @@ -550,10 +550,10 @@ log_ovn_flow_rl(struct vlog_rate_limit *rl, enum
> vlog_level level,
>   *
>   * This just assembles the desired flow tables in memory.  Nothing is
> actually
>   * sent to the switch until a later call to ofctrl_run(). */
> -void
> -ofctrl_add_flow(uint8_t table_id, uint16_t priority,
> +static void
> +_ofctrl_add_flow(uint8_t table_id, uint16_t priority,
>                  const struct match *match, const struct ofpbuf *actions,
> -                const struct uuid *uuid)
> +                const struct uuid *uuid, bool dupwarn)
>  {
>      /* Structure that uses table_id+priority+various things as hashes. */
>      struct ovn_flow *f = xmalloc(sizeof *f);
> @@ -591,8 +591,10 @@ ofctrl_add_flow(uint8_t table_id, uint16_t priority,
>               */
>              if (ofpacts_equal(f->ofpacts, f->ofpacts_len,
>                                d->ofpacts, d->ofpacts_len)) {
> -                static struct vlog_rate_limit rl =
> VLOG_RATE_LIMIT_INIT(5, 1);
> -                log_ovn_flow_rl(&rl, VLL_INFO, f, "duplicate flow");
> +                if (dupwarn) {
> +                    static struct vlog_rate_limit rl =
> VLOG_RATE_LIMIT_INIT(5, 1);
> +                    log_ovn_flow_rl(&rl, VLL_INFO, f, "duplicate flow");
> +                }
>              } else {
>                  static struct vlog_rate_limit rl =
> VLOG_RATE_LIMIT_INIT(5, 1);
>                  log_ovn_flow_rl(&rl, VLL_WARN, f,
> @@ -617,6 +619,20 @@ ofctrl_add_flow(uint8_t table_id, uint16_t priority,
>                  f->uuid_hindex_node.hash);
>  }
>
> +void
> +ofctrl_add_flow(uint8_t table_id, uint16_t priority,
> +                const struct match *match, const struct ofpbuf *actions,
> +                const struct uuid *uuid) {
> +    _ofctrl_add_flow(table_id, priority, match, actions, uuid, true);
> +}
> +
> +void
> +ofctrl_add_flow_no_warn(uint8_t table_id, uint16_t priority,
> +                        const struct match *match, const struct ofpbuf
> *actions,
> +                        const struct uuid *uuid) {
> +    _ofctrl_add_flow(table_id, priority, match, actions, uuid, false);
> +}
> +
>  /* Removes a bundles of flows from the flow table. */
>  void
>  ofctrl_remove_flows(const struct uuid *uuid)
> diff --git a/ovn/controller/ofctrl.h b/ovn/controller/ofctrl.h
> index 49b95b0..b591e82 100644
> --- a/ovn/controller/ofctrl.h
> +++ b/ovn/controller/ofctrl.h
> @@ -42,6 +42,9 @@ struct ovn_flow *ofctrl_dup_flow(struct ovn_flow
> *source);
>  void ofctrl_add_flow(uint8_t table_id, uint16_t priority,
>                       const struct match *, const struct ofpbuf *ofpacts,
>                       const struct uuid *uuid);
> +void ofctrl_add_flow_no_warn(uint8_t table_id, uint16_t priority,
> +                             const struct match *, const struct ofpbuf
> *ofpacts,
> +                             const struct uuid *uuid);
>
>  void ofctrl_remove_flows(const struct uuid *uuid);
>
> diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c
> index a104e33..9e6dff4 100644
> --- a/ovn/controller/physical.c
> +++ b/ovn/controller/physical.c
> @@ -549,8 +549,9 @@ consider_mc_group(enum mf_field_id mff_ovn_geneve,
>           * group as the logical output port. */
>          put_load(mc->tunnel_key, MFF_LOG_OUTPORT, 0, 32, ofpacts_p);
>
> -        ofctrl_add_flow(OFTABLE_LOCAL_OUTPUT, 100,
> -                        &match, ofpacts_p, &mc->header_.uuid);
> +        /* Add flow, allowing expected full duplication to be ignored. */
> +        ofctrl_add_flow_no_warn(OFTABLE_LOCAL_OUTPUT, 100,
> +                                &match, ofpacts_p, &mc->header_.uuid);
>      }
>
>      /* Table 32, priority 100.
> @@ -587,8 +588,10 @@ consider_mc_group(enum mf_field_id mff_ovn_geneve,
>              if (local_ports) {
>                  put_resubmit(OFTABLE_LOCAL_OUTPUT, remote_ofpacts_p);
>              }
> -            ofctrl_add_flow(OFTABLE_REMOTE_OUTPUT, 100,
> -                            &match, remote_ofpacts_p, &mc->header_.uuid);
> +            /* Add flow, allowing expected full duplication to be
> ignored. */
> +            ofctrl_add_flow_no_warn(OFTABLE_REMOTE_OUTPUT, 100,
> +                                    &match, remote_ofpacts_p,
> +                                    &mc->header_.uuid);
>          }
>      }
>      sset_destroy(&remote_chassis);
> @@ -794,8 +797,9 @@ physical_run(struct controller_ctx *ctx, enum
> mf_field_id mff_ovn_geneve,
>
>          put_resubmit(OFTABLE_LOCAL_OUTPUT, &ofpacts);
>
> -        ofctrl_add_flow(OFTABLE_PHY_TO_LOG, 100, &match, &ofpacts,
> -                        hc_uuid);
> +        /* Add flow, allowing expected full duplication to be ignored. */
> +        ofctrl_add_flow_no_warn(OFTABLE_PHY_TO_LOG, 100, &match, &ofpacts,
> +                                hc_uuid);
>      }
>
>      /* Add flows for VXLAN encapsulations.  Due to the limited amount of
> @@ -828,7 +832,9 @@ physical_run(struct controller_ctx *ctx, enum
> mf_field_id mff_ovn_geneve,
>              put_load(binding->tunnel_key, MFF_LOG_INPORT, 0, 15,
> &ofpacts);
>              put_resubmit(OFTABLE_LOG_INGRESS_PIPELINE, &ofpacts);
>
> -            ofctrl_add_flow(OFTABLE_PHY_TO_LOG, 100, &match, &ofpacts,
> hc_uuid);
> +            /* Add flow, allowing expected full duplication to be
> ignored. */
> +            ofctrl_add_flow_no_warn(OFTABLE_PHY_TO_LOG, 100, &match,
> &ofpacts,
> +                                    hc_uuid);
>          }
>      }
>
> @@ -841,7 +847,9 @@ physical_run(struct controller_ctx *ctx, enum
> mf_field_id mff_ovn_geneve,
>      match_init_catchall(&match);
>      ofpbuf_clear(&ofpacts);
>      put_resubmit(OFTABLE_LOCAL_OUTPUT, &ofpacts);
> -    ofctrl_add_flow(OFTABLE_REMOTE_OUTPUT, 0, &match, &ofpacts, hc_uuid);
> +    /* Add flow, allowing expected full duplication to be ignored. */
> +    ofctrl_add_flow_no_warn(OFTABLE_REMOTE_OUTPUT, 0, &match, &ofpacts,
> +                            hc_uuid);
>
>      /* Table 34, Priority 0.
>       * =======================
> @@ -855,7 +863,9 @@ physical_run(struct controller_ctx *ctx, enum
> mf_field_id mff_ovn_geneve,
>      MFF_LOG_REGS;
>  #undef MFF_LOG_REGS
>      put_resubmit(OFTABLE_LOG_EGRESS_PIPELINE, &ofpacts);
> -    ofctrl_add_flow(OFTABLE_DROP_LOOPBACK, 0, &match, &ofpacts, hc_uuid);
> +    /* Add flow, allowing expected full duplication to be ignored. */
> +    ofctrl_add_flow_no_warn(OFTABLE_DROP_LOOPBACK, 0, &match, &ofpacts,
> +                            hc_uuid);
>
>      ofpbuf_uninit(&ofpacts);
>      HMAP_FOR_EACH_POP (tun, hmap_node, &tunnels) {
> --
> 1.9.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
Ryan Moats July 26, 2016, 10:54 p.m. UTC | #3
Guru Shetty <guru@ovn.org> wrote on 07/26/2016 03:54:29 PM:

> From: Guru Shetty <guru@ovn.org>
> To: Ryan Moats/Omaha/IBM@IBMUS
> Cc: ovs dev <dev@openvswitch.org>
> Date: 07/26/2016 03:54 PM
> Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> duplicate flow warnings
>
> On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:
> In the physical processing of ovn-controller, there are two
> sets of OF flows that are still fully recalculated every cycle:
>
>   Flows that aren't associated with any logical flow, and
>   Flows calculated based on multicast groups
>
> Because these flows are recalculated fully each cycle, full
> duplicates of existing OF flows are created and the OF management
> code in ovn-controller pollutes the logs with false positive
> warnings about repeated duplicates.
>
> As a short term measure, ignore full duplicates for both of
> these types of flows, but still warn if the action changes
> (as that is not expected and may be indicative of a problem).
>
> Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
>
> I also noticed that "commit 70c7cfef188b5ae9940abd5 (ovn-controller:
> Add incremental processing to lflow_run and physical_run)" causes
> load balancing system unit tests to fail. A little debugging shows
> that groups are getting deleted when new flows are added.  My hunch
> is that this is likely because 'desired_groups' in ofctl_put gets
> deleted in every run. But in the next run, it does not get updated
> as we no longer process all flows.

That's going to take persisting the desired_groups data.

I can take a shot if you'd like, just give me the link to the
patch set that includes the load balancing system unit tests
and I'll see what I can do to make it right ...
Gurucharan Shetty July 26, 2016, 11:05 p.m. UTC | #4
On 26 July 2016 at 15:54, Ryan Moats <rmoats@us.ibm.com> wrote:

>
>
>
> Guru Shetty <guru@ovn.org> wrote on 07/26/2016 03:54:29 PM:
>
> > From: Guru Shetty <guru@ovn.org>
> > To: Ryan Moats/Omaha/IBM@IBMUS
> > Cc: ovs dev <dev@openvswitch.org>
> > Date: 07/26/2016 03:54 PM
> > Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> > duplicate flow warnings
> >
> > On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:
> > In the physical processing of ovn-controller, there are two
> > sets of OF flows that are still fully recalculated every cycle:
> >
> >   Flows that aren't associated with any logical flow, and
> >   Flows calculated based on multicast groups
> >
> > Because these flows are recalculated fully each cycle, full
> > duplicates of existing OF flows are created and the OF management
> > code in ovn-controller pollutes the logs with false positive
> > warnings about repeated duplicates.
> >
> > As a short term measure, ignore full duplicates for both of
> > these types of flows, but still warn if the action changes
> > (as that is not expected and may be indicative of a problem).
> >
> > Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
> >
> > I also noticed that "commit 70c7cfef188b5ae9940abd5 (ovn-controller:
> > Add incremental processing to lflow_run and physical_run)" causes
> > load balancing system unit tests to fail. A little debugging shows
> > that groups are getting deleted when new flows are added.  My hunch
> > is that this is likely because 'desired_groups' in ofctl_put gets
> > deleted in every run. But in the next run, it does not get updated
> > as we no longer process all flows.
>
> That's going to take persisting the desired_groups data.
>
> I can take a shot if you'd like, just give me the link to the
> patch set that includes the load balancing system unit tests
> and I'll see what I can do to make it right ...
>

It already exists in the OVN repo. tests/system-ovn.at




> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
Ryan Moats July 27, 2016, 12:30 a.m. UTC | #5
Guru Shetty <guru@ovn.org> wrote on 07/26/2016 06:05:47 PM:

> From: Guru Shetty <guru@ovn.org>
> To: Ryan Moats/Omaha/IBM@IBMUS
> Cc: ovs dev <dev@openvswitch.org>
> Date: 07/26/2016 06:06 PM
> Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> duplicate flow warnings
>
> On 26 July 2016 at 15:54, Ryan Moats <rmoats@us.ibm.com> wrote:
>
>
>
> Guru Shetty <guru@ovn.org> wrote on 07/26/2016 03:54:29 PM:
>
> > From: Guru Shetty <guru@ovn.org>
> > To: Ryan Moats/Omaha/IBM@IBMUS
> > Cc: ovs dev <dev@openvswitch.org>
> > Date: 07/26/2016 03:54 PM
> > Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> > duplicate flow warnings
> >
> > On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:
> > In the physical processing of ovn-controller, there are two
> > sets of OF flows that are still fully recalculated every cycle:
> >
> >   Flows that aren't associated with any logical flow, and
> >   Flows calculated based on multicast groups
> >
> > Because these flows are recalculated fully each cycle, full
> > duplicates of existing OF flows are created and the OF management
> > code in ovn-controller pollutes the logs with false positive
> > warnings about repeated duplicates.
> >
> > As a short term measure, ignore full duplicates for both of
> > these types of flows, but still warn if the action changes
> > (as that is not expected and may be indicative of a problem).
> >
> > Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
> >
> > I also noticed that "commit 70c7cfef188b5ae9940abd5 (ovn-controller:
> > Add incremental processing to lflow_run and physical_run)" causes
> > load balancing system unit tests to fail. A little debugging shows
> > that groups are getting deleted when new flows are added.  My hunch
> > is that this is likely because 'desired_groups' in ofctl_put gets
> > deleted in every run. But in the next run, it does not get updated
> > as we no longer process all flows.
>
> That's going to take persisting the desired_groups data.
>
> I can take a shot if you'd like, just give me the link to the
> patch set that includes the load balancing system unit tests
> and I'll see what I can do to make it right ...
>
> It already exists in the OVN repo. tests/system-ovn.at

Ack and verified that it is failing - I'll take a deeper look
later tonight/tomorrow and see what I can make work.
Guru Shetty July 27, 2016, 3:22 a.m. UTC | #6
> On Jul 26, 2016, at 5:30 PM, Ryan Moats <rmoats@us.ibm.com> wrote:
> 
> Guru Shetty <guru@ovn.org> wrote on 07/26/2016 06:05:47 PM:
> 
> > From: Guru Shetty <guru@ovn.org>
> > To: Ryan Moats/Omaha/IBM@IBMUS
> > Cc: ovs dev <dev@openvswitch.org>
> > Date: 07/26/2016 06:06 PM
> > Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected 
> > duplicate flow warnings
> > 
> > On 26 July 2016 at 15:54, Ryan Moats <rmoats@us.ibm.com> wrote:
> > 
> > 
> > 
> > Guru Shetty <guru@ovn.org> wrote on 07/26/2016 03:54:29 PM:
> > 
> > > From: Guru Shetty <guru@ovn.org>
> > > To: Ryan Moats/Omaha/IBM@IBMUS
> > > Cc: ovs dev <dev@openvswitch.org>
> > > Date: 07/26/2016 03:54 PM
> > > Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> > > duplicate flow warnings
> > >
> > > On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:
> > > In the physical processing of ovn-controller, there are two
> > > sets of OF flows that are still fully recalculated every cycle:
> > >
> > >   Flows that aren't associated with any logical flow, and
> > >   Flows calculated based on multicast groups
> > >
> > > Because these flows are recalculated fully each cycle, full
> > > duplicates of existing OF flows are created and the OF management
> > > code in ovn-controller pollutes the logs with false positive
> > > warnings about repeated duplicates.
> > >
> > > As a short term measure, ignore full duplicates for both of
> > > these types of flows, but still warn if the action changes
> > > (as that is not expected and may be indicative of a problem).
> > >
> > > Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
> > >
> > > I also noticed that "commit 70c7cfef188b5ae9940abd5 (ovn-controller:
> > > Add incremental processing to lflow_run and physical_run)" causes
> > > load balancing system unit tests to fail. A little debugging shows
> > > that groups are getting deleted when new flows are added.  My hunch
> > > is that this is likely because 'desired_groups' in ofctl_put gets
> > > deleted in every run. But in the next run, it does not get updated
> > > as we no longer process all flows.
> > 
> > That's going to take persisting the desired_groups data.
> > 
> > I can take a shot if you'd like, just give me the link to the
> > patch set that includes the load balancing system unit tests
> > and I'll see what I can do to make it right ...
> > 
> > It already exists in the OVN repo. tests/system-ovn.at
> 
> Ack and verified that it is failing - I'll take a deeper look
> later tonight/tomorrow and see what I can make work.
> 

Thanks much. 

(Just to make sure you have the environment right, you should have the right kernel modules with conntrack support installed on your machine. On master, it will only work on pre 4.6 kernels if there is no ovs kernel module already instslled from upstream kernel. To make it work, you should either remove upstream kernel modules or install a /etc/depmod.d/openvswitch.conf to override upstream one. On 4.6 and above it should not matter as upstream kernel module has conntrack support.

You can make sure that you get the tests working before the said commit so that you dont go on a wild goose chase.)
>
Ryan Moats July 27, 2016, 4:04 a.m. UTC | #7
Guru Shetty <guru.ovn@gmail.com> wrote on 07/26/2016 10:22:30 PM:

> From: Guru Shetty <guru.ovn@gmail.com>
> To: Ryan Moats/Omaha/IBM@IBMUS
> Cc: Guru Shetty <guru@ovn.org>, ovs dev <dev@openvswitch.org>
> Date: 07/26/2016 10:22 PM
> Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> duplicate flow warnings
>
>
> On Jul 26, 2016, at 5:30 PM, Ryan Moats <rmoats@us.ibm.com> wrote:

> Guru Shetty <guru@ovn.org> wrote on 07/26/2016 06:05:47 PM:
>
> > From: Guru Shetty <guru@ovn.org>
> > To: Ryan Moats/Omaha/IBM@IBMUS
> > Cc: ovs dev <dev@openvswitch.org>
> > Date: 07/26/2016 06:06 PM
> > Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> > duplicate flow warnings
> >
> > On 26 July 2016 at 15:54, Ryan Moats <rmoats@us.ibm.com> wrote:
> >
> >
> >
> > Guru Shetty <guru@ovn.org> wrote on 07/26/2016 03:54:29 PM:
> >
> > > From: Guru Shetty <guru@ovn.org>
> > > To: Ryan Moats/Omaha/IBM@IBMUS
> > > Cc: ovs dev <dev@openvswitch.org>
> > > Date: 07/26/2016 03:54 PM
> > > Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> > > duplicate flow warnings
> > >
> > > On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:
> > > In the physical processing of ovn-controller, there are two
> > > sets of OF flows that are still fully recalculated every cycle:
> > >
> > >   Flows that aren't associated with any logical flow, and
> > >   Flows calculated based on multicast groups
> > >
> > > Because these flows are recalculated fully each cycle, full
> > > duplicates of existing OF flows are created and the OF management
> > > code in ovn-controller pollutes the logs with false positive
> > > warnings about repeated duplicates.
> > >
> > > As a short term measure, ignore full duplicates for both of
> > > these types of flows, but still warn if the action changes
> > > (as that is not expected and may be indicative of a problem).
> > >
> > > Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
> > >
> > > I also noticed that "commit 70c7cfef188b5ae9940abd5 (ovn-controller:
> > > Add incremental processing to lflow_run and physical_run)" causes
> > > load balancing system unit tests to fail. A little debugging shows
> > > that groups are getting deleted when new flows are added.  My hunch
> > > is that this is likely because 'desired_groups' in ofctl_put gets
> > > deleted in every run. But in the next run, it does not get updated
> > > as we no longer process all flows.
> >
> > That's going to take persisting the desired_groups data.
> >
> > I can take a shot if you'd like, just give me the link to the
> > patch set that includes the load balancing system unit tests
> > and I'll see what I can do to make it right ...
> >
> > It already exists in the OVN repo. tests/system-ovn.at
>
> Ack and verified that it is failing - I'll take a deeper look
> later tonight/tomorrow and see what I can make work.
>
> Thanks much.
>
> (Just to make sure you have the environment right, you should have
> the right kernel modules with conntrack support installed on your
> machine. On master, it will only work on pre 4.6 kernels if there is
> no ovs kernel module already instslled from upstream kernel. To make
> it work, you should either remove upstream kernel modules or install
> a /etc/depmod.d/openvswitch.conf to override upstream one. On 4.6
> and above it should not matter as upstream kernel module has
> conntrack support.
>
> You can make sure that you get the tests working before the said
> commit so that you dont go on a wild goose chase.)

No worries - I've been running on a 4.6 kernel for a while now, so
I've already verified that the test worked with if logical
flows are recalculated every cycle.  I'm almost to the point of having
a patch set ready to go - I'm just putting the path to remove item(s)
from desired_groups when the logical_flow that created them is removed -
that's not strictly correct, because it doesn't catch if the flow is
modified to not call a LB conntrack action, but it's a first approximation.
Ryan Moats July 27, 2016, 4:26 a.m. UTC | #8
Guru Shetty <guru.ovn@gmail.com> wrote on 07/26/2016 10:22:30 PM:

> From: Guru Shetty <guru.ovn@gmail.com>
> To: Ryan Moats/Omaha/IBM@IBMUS
> Cc: Guru Shetty <guru@ovn.org>, ovs dev <dev@openvswitch.org>
> Date: 07/26/2016 10:22 PM
> Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> duplicate flow warnings
>
>
> On Jul 26, 2016, at 5:30 PM, Ryan Moats <rmoats@us.ibm.com> wrote:

> Guru Shetty <guru@ovn.org> wrote on 07/26/2016 06:05:47 PM:
>
> > From: Guru Shetty <guru@ovn.org>
> > To: Ryan Moats/Omaha/IBM@IBMUS
> > Cc: ovs dev <dev@openvswitch.org>
> > Date: 07/26/2016 06:06 PM
> > Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> > duplicate flow warnings
> >
> > On 26 July 2016 at 15:54, Ryan Moats <rmoats@us.ibm.com> wrote:
> >
> >
> >
> > Guru Shetty <guru@ovn.org> wrote on 07/26/2016 03:54:29 PM:
> >
> > > From: Guru Shetty <guru@ovn.org>
> > > To: Ryan Moats/Omaha/IBM@IBMUS
> > > Cc: ovs dev <dev@openvswitch.org>
> > > Date: 07/26/2016 03:54 PM
> > > Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> > > duplicate flow warnings
> > >
> > > On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:
> > > In the physical processing of ovn-controller, there are two
> > > sets of OF flows that are still fully recalculated every cycle:
> > >
> > >   Flows that aren't associated with any logical flow, and
> > >   Flows calculated based on multicast groups
> > >
> > > Because these flows are recalculated fully each cycle, full
> > > duplicates of existing OF flows are created and the OF management
> > > code in ovn-controller pollutes the logs with false positive
> > > warnings about repeated duplicates.
> > >
> > > As a short term measure, ignore full duplicates for both of
> > > these types of flows, but still warn if the action changes
> > > (as that is not expected and may be indicative of a problem).
> > >
> > > Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
> > >
> > > I also noticed that "commit 70c7cfef188b5ae9940abd5 (ovn-controller:
> > > Add incremental processing to lflow_run and physical_run)" causes
> > > load balancing system unit tests to fail. A little debugging shows
> > > that groups are getting deleted when new flows are added.  My hunch
> > > is that this is likely because 'desired_groups' in ofctl_put gets
> > > deleted in every run. But in the next run, it does not get updated
> > > as we no longer process all flows.
> >
> > That's going to take persisting the desired_groups data.
> >
> > I can take a shot if you'd like, just give me the link to the
> > patch set that includes the load balancing system unit tests
> > and I'll see what I can do to make it right ...
> >
> > It already exists in the OVN repo. tests/system-ovn.at
>
> Ack and verified that it is failing - I'll take a deeper look
> later tonight/tomorrow and see what I can make work.
>
> Thanks much.
>
> (Just to make sure you have the environment right, you should have
> the right kernel modules with conntrack support installed on your
> machine. On master, it will only work on pre 4.6 kernels if there is
> no ovs kernel module already instslled from upstream kernel. To make
> it work, you should either remove upstream kernel modules or install
> a /etc/depmod.d/openvswitch.conf to override upstream one. On 4.6
> and above it should not matter as upstream kernel module has
> conntrack support.
>
> You can make sure that you get the tests working before the said
> commit so that you dont go on a wild goose chase.)

Mitigation patch is at http://patchwork.ozlabs.org/patch/653068/ for
review.

In my previous message, I incorrectly stated that the above patch didn't
handle flow modifications correctly.  It actually does.
Ben Pfaff July 27, 2016, 8:53 p.m. UTC | #9
On Tue, Jul 26, 2016 at 01:54:29PM -0700, Guru Shetty wrote:
> On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:
> 
> > In the physical processing of ovn-controller, there are two
> > sets of OF flows that are still fully recalculated every cycle:
> >
> >   Flows that aren't associated with any logical flow, and
> >   Flows calculated based on multicast groups
> >
> > Because these flows are recalculated fully each cycle, full
> > duplicates of existing OF flows are created and the OF management
> > code in ovn-controller pollutes the logs with false positive
> > warnings about repeated duplicates.
> >
> > As a short term measure, ignore full duplicates for both of
> > these types of flows, but still warn if the action changes
> > (as that is not expected and may be indicative of a problem).
> >
> > Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
> >
> 
> I also noticed that "commit 70c7cfef188b5ae9940abd5 (ovn-controller: Add
> incremental processing to lflow_run and physical_run)" causes load
> balancing system unit tests to fail. A little debugging shows that groups
> are getting deleted when new flows are added.  My hunch is that this is
> likely because 'desired_groups' in ofctl_put gets deleted in every run. But
> in the next run, it does not get updated as we no longer process all flows.

It's unclear to me from the discussion of this patch whether it's
beneficial.  Can someone clarify?

Thanks,

Ben.
Ryan Moats July 28, 2016, 2:13 a.m. UTC | #10
Ben Pfaff <blp@ovn.org> wrote on 07/27/2016 03:53:56 PM:

> From: Ben Pfaff <blp@ovn.org>
> To: Guru Shetty <guru@ovn.org>
> Cc: Ryan Moats/Omaha/IBM@IBMUS, ovs dev <dev@openvswitch.org>
> Date: 07/27/2016 03:54 PM
> Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> duplicate flow warnings
>
> On Tue, Jul 26, 2016 at 01:54:29PM -0700, Guru Shetty wrote:
> > On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:
> >
> > > In the physical processing of ovn-controller, there are two
> > > sets of OF flows that are still fully recalculated every cycle:
> > >
> > >   Flows that aren't associated with any logical flow, and
> > >   Flows calculated based on multicast groups
> > >
> > > Because these flows are recalculated fully each cycle, full
> > > duplicates of existing OF flows are created and the OF management
> > > code in ovn-controller pollutes the logs with false positive
> > > warnings about repeated duplicates.
> > >
> > > As a short term measure, ignore full duplicates for both of
> > > these types of flows, but still warn if the action changes
> > > (as that is not expected and may be indicative of a problem).
> > >
> > > Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
> > >
> >
> > I also noticed that "commit 70c7cfef188b5ae9940abd5 (ovn-controller:
Add
> > incremental processing to lflow_run and physical_run)" causes load
> > balancing system unit tests to fail. A little debugging shows that
groups
> > are getting deleted when new flows are added.  My hunch is that this is
> > likely because 'desired_groups' in ofctl_put gets deleted in every run.
But
> > in the next run, it does not get updated as we no longer process all
flows.
>
> It's unclear to me from the discussion of this patch whether it's
> beneficial.  Can someone clarify?
>
> Thanks,
>
> Ben.

Unfortunately, I don't think we maintained reasonable email thread
discipline
on this discussion - for me, the vast majority of the conversation was
about
the CPU cycle bug that Guru mentions and not the patch itself.

The conditions stated in the commit message still apply even after fixing
Guru's issue and so I still see the squelching as being useful to avoid
polluting the ovn-controller logs with false positive messages...

Ryan
Ben Pfaff July 28, 2016, 9:28 p.m. UTC | #11
On Wed, Jul 27, 2016 at 09:13:56PM -0500, Ryan Moats wrote:
> 
> 
> Ben Pfaff <blp@ovn.org> wrote on 07/27/2016 03:53:56 PM:
> 
> > From: Ben Pfaff <blp@ovn.org>
> > To: Guru Shetty <guru@ovn.org>
> > Cc: Ryan Moats/Omaha/IBM@IBMUS, ovs dev <dev@openvswitch.org>
> > Date: 07/27/2016 03:54 PM
> > Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> > duplicate flow warnings
> >
> > On Tue, Jul 26, 2016 at 01:54:29PM -0700, Guru Shetty wrote:
> > > On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:
> > >
> > > > In the physical processing of ovn-controller, there are two
> > > > sets of OF flows that are still fully recalculated every cycle:
> > > >
> > > >   Flows that aren't associated with any logical flow, and
> > > >   Flows calculated based on multicast groups
> > > >
> > > > Because these flows are recalculated fully each cycle, full
> > > > duplicates of existing OF flows are created and the OF management
> > > > code in ovn-controller pollutes the logs with false positive
> > > > warnings about repeated duplicates.
> > > >
> > > > As a short term measure, ignore full duplicates for both of
> > > > these types of flows, but still warn if the action changes
> > > > (as that is not expected and may be indicative of a problem).
> > > >
> > > > Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
> > > >
> > >
> > > I also noticed that "commit 70c7cfef188b5ae9940abd5 (ovn-controller:
> Add
> > > incremental processing to lflow_run and physical_run)" causes load
> > > balancing system unit tests to fail. A little debugging shows that
> groups
> > > are getting deleted when new flows are added.  My hunch is that this is
> > > likely because 'desired_groups' in ofctl_put gets deleted in every run.
> But
> > > in the next run, it does not get updated as we no longer process all
> flows.
> >
> > It's unclear to me from the discussion of this patch whether it's
> > beneficial.  Can someone clarify?
> >
> > Thanks,
> >
> > Ben.
> 
> Unfortunately, I don't think we maintained reasonable email thread
> discipline
> on this discussion - for me, the vast majority of the conversation was
> about
> the CPU cycle bug that Guru mentions and not the patch itself.
> 
> The conditions stated in the commit message still apply even after fixing
> Guru's issue and so I still see the squelching as being useful to avoid
> polluting the ovn-controller logs with false positive messages...

I think that you said in IRC that you're dropping this patch.  Let me
know if I'm wrong.

Thanks,

Ben.
Ryan Moats July 28, 2016, 10:12 p.m. UTC | #12
Ben Pfaff <blp@ovn.org> wrote on 07/28/2016 04:28:31 PM:

> From: Ben Pfaff <blp@ovn.org>
> To: Ryan Moats/Omaha/IBM@IBMUS
> Cc: ovs dev <dev@openvswitch.org>, Guru Shetty <guru@ovn.org>
> Date: 07/28/2016 04:29 PM
> Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> duplicate flow warnings
>
> On Wed, Jul 27, 2016 at 09:13:56PM -0500, Ryan Moats wrote:
> >
> >
> > Ben Pfaff <blp@ovn.org> wrote on 07/27/2016 03:53:56 PM:
> >
> > > From: Ben Pfaff <blp@ovn.org>
> > > To: Guru Shetty <guru@ovn.org>
> > > Cc: Ryan Moats/Omaha/IBM@IBMUS, ovs dev <dev@openvswitch.org>
> > > Date: 07/27/2016 03:54 PM
> > > Subject: Re: [ovs-dev] [PATCH] ovn-controller: squelch expected
> > > duplicate flow warnings
> > >
> > > On Tue, Jul 26, 2016 at 01:54:29PM -0700, Guru Shetty wrote:
> > > > On 24 July 2016 at 10:07, Ryan Moats <rmoats@us.ibm.com> wrote:
> > > >
> > > > > In the physical processing of ovn-controller, there are two
> > > > > sets of OF flows that are still fully recalculated every cycle:
> > > > >
> > > > >   Flows that aren't associated with any logical flow, and
> > > > >   Flows calculated based on multicast groups
> > > > >
> > > > > Because these flows are recalculated fully each cycle, full
> > > > > duplicates of existing OF flows are created and the OF management
> > > > > code in ovn-controller pollutes the logs with false positive
> > > > > warnings about repeated duplicates.
> > > > >
> > > > > As a short term measure, ignore full duplicates for both of
> > > > > these types of flows, but still warn if the action changes
> > > > > (as that is not expected and may be indicative of a problem).
> > > > >
> > > > > Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
> > > > >
> > > >
> > > > I also noticed that "commit 70c7cfef188b5ae9940abd5
(ovn-controller:
> > Add
> > > > incremental processing to lflow_run and physical_run)" causes load
> > > > balancing system unit tests to fail. A little debugging shows that
> > groups
> > > > are getting deleted when new flows are added.  My hunch is that
this is
> > > > likely because 'desired_groups' in ofctl_put gets deleted in every
run.
> > But
> > > > in the next run, it does not get updated as we no longer process
all
> > flows.
> > >
> > > It's unclear to me from the discussion of this patch whether it's
> > > beneficial.  Can someone clarify?
> > >
> > > Thanks,
> > >
> > > Ben.
> >
> > Unfortunately, I don't think we maintained reasonable email thread
> > discipline
> > on this discussion - for me, the vast majority of the conversation was
> > about
> > the CPU cycle bug that Guru mentions and not the patch itself.
> >
> > The conditions stated in the commit message still apply even after
fixing
> > Guru's issue and so I still see the squelching as being useful to avoid
> > polluting the ovn-controller logs with false positive messages...
>
> I think that you said in IRC that you're dropping this patch.  Let me
> know if I'm wrong.
>
> Thanks,
>
> Ben.

Yes, I've marked this as not applicable because I'm dropping it - it is
not necessary.

Ryan
diff mbox

Patch

diff --git a/ovn/controller/ofctrl.c b/ovn/controller/ofctrl.c
index f0451b7..2b26f2d 100644
--- a/ovn/controller/ofctrl.c
+++ b/ovn/controller/ofctrl.c
@@ -550,10 +550,10 @@  log_ovn_flow_rl(struct vlog_rate_limit *rl, enum vlog_level level,
  *
  * This just assembles the desired flow tables in memory.  Nothing is actually
  * sent to the switch until a later call to ofctrl_run(). */
-void
-ofctrl_add_flow(uint8_t table_id, uint16_t priority,
+static void
+_ofctrl_add_flow(uint8_t table_id, uint16_t priority,
                 const struct match *match, const struct ofpbuf *actions,
-                const struct uuid *uuid)
+                const struct uuid *uuid, bool dupwarn)
 {
     /* Structure that uses table_id+priority+various things as hashes. */
     struct ovn_flow *f = xmalloc(sizeof *f);
@@ -591,8 +591,10 @@  ofctrl_add_flow(uint8_t table_id, uint16_t priority,
              */
             if (ofpacts_equal(f->ofpacts, f->ofpacts_len,
                               d->ofpacts, d->ofpacts_len)) {
-                static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1);
-                log_ovn_flow_rl(&rl, VLL_INFO, f, "duplicate flow");
+                if (dupwarn) {
+                    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1);
+                    log_ovn_flow_rl(&rl, VLL_INFO, f, "duplicate flow");
+                }
             } else {
                 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1);
                 log_ovn_flow_rl(&rl, VLL_WARN, f,
@@ -617,6 +619,20 @@  ofctrl_add_flow(uint8_t table_id, uint16_t priority,
                 f->uuid_hindex_node.hash);
 }
 
+void
+ofctrl_add_flow(uint8_t table_id, uint16_t priority,
+                const struct match *match, const struct ofpbuf *actions,
+                const struct uuid *uuid) {
+    _ofctrl_add_flow(table_id, priority, match, actions, uuid, true);
+}
+
+void
+ofctrl_add_flow_no_warn(uint8_t table_id, uint16_t priority,
+                        const struct match *match, const struct ofpbuf *actions,
+                        const struct uuid *uuid) {
+    _ofctrl_add_flow(table_id, priority, match, actions, uuid, false);
+}
+
 /* Removes a bundles of flows from the flow table. */
 void
 ofctrl_remove_flows(const struct uuid *uuid)
diff --git a/ovn/controller/ofctrl.h b/ovn/controller/ofctrl.h
index 49b95b0..b591e82 100644
--- a/ovn/controller/ofctrl.h
+++ b/ovn/controller/ofctrl.h
@@ -42,6 +42,9 @@  struct ovn_flow *ofctrl_dup_flow(struct ovn_flow *source);
 void ofctrl_add_flow(uint8_t table_id, uint16_t priority,
                      const struct match *, const struct ofpbuf *ofpacts,
                      const struct uuid *uuid);
+void ofctrl_add_flow_no_warn(uint8_t table_id, uint16_t priority,
+                             const struct match *, const struct ofpbuf *ofpacts,
+                             const struct uuid *uuid);
 
 void ofctrl_remove_flows(const struct uuid *uuid);
 
diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c
index a104e33..9e6dff4 100644
--- a/ovn/controller/physical.c
+++ b/ovn/controller/physical.c
@@ -549,8 +549,9 @@  consider_mc_group(enum mf_field_id mff_ovn_geneve,
          * group as the logical output port. */
         put_load(mc->tunnel_key, MFF_LOG_OUTPORT, 0, 32, ofpacts_p);
 
-        ofctrl_add_flow(OFTABLE_LOCAL_OUTPUT, 100,
-                        &match, ofpacts_p, &mc->header_.uuid);
+        /* Add flow, allowing expected full duplication to be ignored. */
+        ofctrl_add_flow_no_warn(OFTABLE_LOCAL_OUTPUT, 100,
+                                &match, ofpacts_p, &mc->header_.uuid);
     }
 
     /* Table 32, priority 100.
@@ -587,8 +588,10 @@  consider_mc_group(enum mf_field_id mff_ovn_geneve,
             if (local_ports) {
                 put_resubmit(OFTABLE_LOCAL_OUTPUT, remote_ofpacts_p);
             }
-            ofctrl_add_flow(OFTABLE_REMOTE_OUTPUT, 100,
-                            &match, remote_ofpacts_p, &mc->header_.uuid);
+            /* Add flow, allowing expected full duplication to be ignored. */
+            ofctrl_add_flow_no_warn(OFTABLE_REMOTE_OUTPUT, 100,
+                                    &match, remote_ofpacts_p,
+                                    &mc->header_.uuid);
         }
     }
     sset_destroy(&remote_chassis);
@@ -794,8 +797,9 @@  physical_run(struct controller_ctx *ctx, enum mf_field_id mff_ovn_geneve,
 
         put_resubmit(OFTABLE_LOCAL_OUTPUT, &ofpacts);
 
-        ofctrl_add_flow(OFTABLE_PHY_TO_LOG, 100, &match, &ofpacts,
-                        hc_uuid);
+        /* Add flow, allowing expected full duplication to be ignored. */
+        ofctrl_add_flow_no_warn(OFTABLE_PHY_TO_LOG, 100, &match, &ofpacts,
+                                hc_uuid);
     }
 
     /* Add flows for VXLAN encapsulations.  Due to the limited amount of
@@ -828,7 +832,9 @@  physical_run(struct controller_ctx *ctx, enum mf_field_id mff_ovn_geneve,
             put_load(binding->tunnel_key, MFF_LOG_INPORT, 0, 15, &ofpacts);
             put_resubmit(OFTABLE_LOG_INGRESS_PIPELINE, &ofpacts);
 
-            ofctrl_add_flow(OFTABLE_PHY_TO_LOG, 100, &match, &ofpacts, hc_uuid);
+            /* Add flow, allowing expected full duplication to be ignored. */
+            ofctrl_add_flow_no_warn(OFTABLE_PHY_TO_LOG, 100, &match, &ofpacts,
+                                    hc_uuid);
         }
     }
 
@@ -841,7 +847,9 @@  physical_run(struct controller_ctx *ctx, enum mf_field_id mff_ovn_geneve,
     match_init_catchall(&match);
     ofpbuf_clear(&ofpacts);
     put_resubmit(OFTABLE_LOCAL_OUTPUT, &ofpacts);
-    ofctrl_add_flow(OFTABLE_REMOTE_OUTPUT, 0, &match, &ofpacts, hc_uuid);
+    /* Add flow, allowing expected full duplication to be ignored. */
+    ofctrl_add_flow_no_warn(OFTABLE_REMOTE_OUTPUT, 0, &match, &ofpacts,
+                            hc_uuid);
 
     /* Table 34, Priority 0.
      * =======================
@@ -855,7 +863,9 @@  physical_run(struct controller_ctx *ctx, enum mf_field_id mff_ovn_geneve,
     MFF_LOG_REGS;
 #undef MFF_LOG_REGS
     put_resubmit(OFTABLE_LOG_EGRESS_PIPELINE, &ofpacts);
-    ofctrl_add_flow(OFTABLE_DROP_LOOPBACK, 0, &match, &ofpacts, hc_uuid);
+    /* Add flow, allowing expected full duplication to be ignored. */
+    ofctrl_add_flow_no_warn(OFTABLE_DROP_LOOPBACK, 0, &match, &ofpacts,
+                            hc_uuid);
 
     ofpbuf_uninit(&ofpacts);
     HMAP_FOR_EACH_POP (tun, hmap_node, &tunnels) {