[ovs-dev] [PATCH ovn repost 5/7] ovn-northd-ddlog: Get rid of duplicate flows caused by stage_hint.

Ben Pfaff blp at ovn.org
Thu Aug 12 17:44:41 UTC 2021


It was possible for these rules to generate multiple Flow records that
differed only in their stage_hint.  This caused a lot of duplication for
the load balancer benchmark.

With the benchmark at
https://mail.openvswitch.org/pipermail/ovs-dev/2021-July/385333.html,
this reduces memory consumption from 53 GB to 17 GB and elapsed time
from 14 minutes to 5 minutes.

Signed-off-by: Ben Pfaff <blp at ovn.org>
---
 northd/ovn_northd.dl | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/northd/ovn_northd.dl b/northd/ovn_northd.dl
index dd69126ff..38b97aa6b 100644
--- a/northd/ovn_northd.dl
+++ b/northd/ovn_northd.dl
@@ -3163,7 +3163,7 @@ Flow(.logical_datapath = sw._uuid,
      .actions          = actions.intern(),
      .io_port          = None,
      .controller_meter = meter,
-     .stage_hint       = stage_hint(lb._uuid)) :-
+     .stage_hint       = 0) :-
     sw in &Switch(),
     LBVIPWithStatus[lbvip@&LBVIPWithStatus{.lb = lb}],
     sw.load_balancer.contains(lb._uuid),
@@ -4587,7 +4587,7 @@ Flow(.logical_datapath = sw._uuid,
      .priority         = 90,
      .__match          = i"${fLAGBIT_NOT_VXLAN()} && arp.op == 1 && arp.tpa == ${ipv4}",
      .actions          = i"outport = ${flood}; output;",
-     .stage_hint       = stage_hint(sp.lsp._uuid),
+     .stage_hint       = 0,
      .io_port          = None,
      .controller_meter = None) :-
     sp in &SwitchPort(.sw = sw, .peer = Some{rp}),
@@ -6666,7 +6666,7 @@ for (RouterLBVIP(
              .priority         = prio,
              .__match          = __match.intern(),
              .actions          = __actions,
-             .stage_hint       = stage_hint(lb._uuid),
+             .stage_hint       = 0,
              .io_port          = None,
              .controller_meter = None);
 
@@ -6712,7 +6712,7 @@ for (RouterLBVIP(
                  .priority         = prio,
                  .__match          = est_match.intern(),
                  .actions          = actions,
-                 .stage_hint       = stage_hint(lb._uuid),
+                 .stage_hint       = 0,
                  .io_port          = None,
                  .controller_meter = None);
 
@@ -6797,7 +6797,7 @@ Flow(.logical_datapath = r._uuid,
      .actions          = actions.intern(),
      .io_port          = None,
      .controller_meter = meter,
-     .stage_hint       = stage_hint(lb._uuid)) :-
+     .stage_hint       = 0) :-
     r in &Router(),
     r.l3dgw_ports.len() > 0 or r.is_gateway,
     LBVIPWithStatus[lbvip@&LBVIPWithStatus{.lb = lb}],
-- 
2.31.1



More information about the dev mailing list