diff mbox series

[ovs-dev,v2,02/10] ovn-northd-ddlog: Make joins for ARP/ND flows slightly more efficient.

Message ID 20210907224516.489604-3-blp@ovn.org
State Accepted
Headers show
Series 3x performance improvement for ddlog with load balancer benchmark | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes fail github build: failed

Commit Message

Ben Pfaff Sept. 7, 2021, 10:45 p.m. UTC
DDlog can index equality joins within a expression like this, but not
conditional expression that follow such an expression.  This doesn't
actually matter much in this case because ordinarily the expression
will be true (most router ports are enabled).

Signed-off-by: Ben Pfaff <blp@ovn.org>
---
 northd/lrouter.dl    |  6 ++++--
 northd/ovn_northd.dl | 16 +++++-----------
 2 files changed, 9 insertions(+), 13 deletions(-)
diff mbox series

Patch

diff --git a/northd/lrouter.dl b/northd/lrouter.dl
index cc3dced5f..b6e752f7c 100644
--- a/northd/lrouter.dl
+++ b/northd/lrouter.dl
@@ -596,7 +596,8 @@  typedef RouterPort = RouterPort {
     peer:             RouterPeer,
     mcast_cfg:        Intern<McastPortCfg>,
     sb_options:       Map<istring,istring>,
-    has_bfd:          bool
+    has_bfd:          bool,
+    enabled:          bool
 }
 
 relation RouterPort[Intern<RouterPort>]
@@ -610,7 +611,8 @@  RouterPort[RouterPort{
                .peer               = peer,
                .mcast_cfg          = mcast_cfg,
                .sb_options         = sb_options,
-               .has_bfd            = has_bfd
+               .has_bfd            = has_bfd,
+               .enabled            = lrp.is_enabled()
            }.intern()] :-
     lrp in &nb::Logical_Router_Port(),
     Some{var networks} = extract_lrp_networks(lrp.mac.ival(), lrp.networks.map(ival)),
diff --git a/northd/ovn_northd.dl b/northd/ovn_northd.dl
index 4402b17d2..c41a79b84 100644
--- a/northd/ovn_northd.dl
+++ b/northd/ovn_northd.dl
@@ -4609,8 +4609,7 @@  relation &SwitchPortARPForwards(
                        .reachable_ips_v6 = reachable_ips_v6,
                        .unreachable_ips_v4 = unreachable_ips_v4,
                        .unreachable_ips_v6 = unreachable_ips_v6) :-
-    port in &SwitchPort(.peer = Some{rp}),
-    rp.is_enabled(),
+    port in &SwitchPort(.peer = Some{rp@&RouterPort{.enabled = true}}),
     (var reachable_ips_v4, var reachable_ips_v6, var unreachable_ips_v4, var unreachable_ips_v6) = get_arp_forward_ips(rp).
 
 /* Packets received from VXLAN tunnels have already been through the
@@ -4632,8 +4631,7 @@  Flow(.logical_datapath = sw._uuid,
      .stage_hint       = stage_hint(sp.lsp._uuid),
      .io_port          = None,
      .controller_meter = None) :-
-    sp in &SwitchPort(.sw = sw, .peer = Some{rp}),
-    rp.is_enabled(),
+    sp in &SwitchPort(.sw = sw, .peer = Some{rp@&RouterPort{.enabled = true}}),
     &SwitchPortARPForwards(.port = sp, .reachable_ips_v4 = ips_v4),
     var ipv4 = FlatMap(ips_v4),
     var mc_flood_l2 = json_escape(mC_FLOOD_L2().0).
@@ -4650,8 +4648,7 @@  Flow(.logical_datapath = sw._uuid,
      .stage_hint       = stage_hint(sp.lsp._uuid),
      .io_port          = None,
      .controller_meter = None) :-
-    sp in &SwitchPort(.sw = sw, .peer = Some{rp}),
-    rp.is_enabled(),
+    sp in &SwitchPort(.sw = sw, .peer = Some{rp@&RouterPort{.enabled = true}}),
     &SwitchPortARPForwards(.port = sp, .reachable_ips_v6 = ips_v6),
     var ipv6 = FlatMap(ips_v6),
     var mc_flood_l2 = json_escape(mC_FLOOD_L2().0).
@@ -4664,12 +4661,10 @@  Flow(.logical_datapath = sw._uuid,
      .stage_hint       = 0,
      .io_port          = None,
      .controller_meter = None) :-
-    sp in &SwitchPort(.sw = sw, .peer = Some{rp}),
-    rp.is_enabled(),
+    sp in &SwitchPort(.sw = sw, .peer = Some{rp@&RouterPort{.enabled = true}}),
     &SwitchPortARPForwards(.port = sp, .unreachable_ips_v4 = ips_v4),
     var ipv4 = FlatMap(ips_v4),
     var flood = json_escape(mC_FLOOD().0).
-
 Flow(.logical_datapath = sw._uuid,
      .stage            = s_SWITCH_IN_L2_LKUP(),
      .priority         = 90,
@@ -4678,8 +4673,7 @@  Flow(.logical_datapath = sw._uuid,
      .stage_hint       = stage_hint(sp.lsp._uuid),
      .io_port          = None,
      .controller_meter = None) :-
-    sp in &SwitchPort(.sw = sw, .peer = Some{rp}),
-    rp.is_enabled(),
+    sp in &SwitchPort(.sw = sw, .peer = Some{rp@&RouterPort{.enabled = true}}),
     &SwitchPortARPForwards(.port = sp, .unreachable_ips_v6 = ips_v6),
     var ipv6 = FlatMap(ips_v6),
     var flood = json_escape(mC_FLOOD().0).