[ovs-dev] [PATCH ovn v2 08/10] ovn-northd-ddlog: Intern strings before joining when possible.
Ben Pfaff
blp at ovn.org
Tue Sep 7 22:45:14 UTC 2021
By interning earlier, we do less copying across the joins with
Router and Switch, because DDlog always copies by value and
copying an interned string is cheap.
Signed-off-by: Ben Pfaff <blp at ovn.org>
---
northd/ovn_northd.dl | 57 +++++++++++++++++++++++---------------------
1 file changed, 30 insertions(+), 27 deletions(-)
diff --git a/northd/ovn_northd.dl b/northd/ovn_northd.dl
index 5af41fa22..1bf1e5333 100644
--- a/northd/ovn_northd.dl
+++ b/northd/ovn_northd.dl
@@ -3216,14 +3216,14 @@ function build_lb_vip_actions(lbvip: Intern<LBVIP>,
Flow(.logical_datapath = sw._uuid,
.stage = s_SWITCH_IN_STATEFUL(),
.priority = priority,
- .__match = __match.intern(),
- .actions = actions.intern(),
+ .__match = __match,
+ .actions = actions,
.io_port = None,
.controller_meter = meter,
.stage_hint = 0) :-
LBVIPWithStatus(lbvip@&LBVIP{.lb = lb}, up_backends),
var priority = if (lbvip.vip_port != 0) { 120 } else { 110 },
- (var actions, var reject) = {
+ (var actions0, var reject) = {
/* Store the original destination IP to be used when generating
* hairpin flows.
*/
@@ -3243,7 +3243,8 @@ Flow(.logical_datapath = sw._uuid,
build_lb_vip_actions(lbvip, up_backends, s_SWITCH_OUT_QOS_MARK(), actions0 ++ actions1)
},
- var __match = "ct.new && " ++ get_match_for_lb_key(lbvip.vip_addr, lbvip.vip_port, lb.protocol, false, false, false),
+ var actions = actions0.intern(),
+ var __match = ("ct.new && " ++ get_match_for_lb_key(lbvip.vip_addr, lbvip.vip_port, lb.protocol, false, false, false)).intern(),
sw in &Switch(),
sw.load_balancer.contains(lb._uuid),
var meter = if (reject) {
@@ -4610,10 +4611,10 @@ Flow(.logical_datapath = sw._uuid,
.stage_hint = stage_hint(sp.lsp._uuid),
.io_port = None,
.controller_meter = None) :-
+ var mc_flood_l2 = json_escape(mC_FLOOD_L2().0),
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).
+ var ipv4 = FlatMap(ips_v4).
Flow(.logical_datapath = sw._uuid,
.stage = s_SWITCH_IN_L2_LKUP(),
.priority = 80,
@@ -4627,35 +4628,35 @@ Flow(.logical_datapath = sw._uuid,
.stage_hint = stage_hint(sp.lsp._uuid),
.io_port = None,
.controller_meter = None) :-
+ var mc_flood_l2 = json_escape(mC_FLOOD_L2().0),
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).
+ var ipv6 = FlatMap(ips_v6).
Flow(.logical_datapath = sw._uuid,
.stage = s_SWITCH_IN_L2_LKUP(),
.priority = 90,
.__match = i"${fLAGBIT_NOT_VXLAN()} && arp.op == 1 && arp.tpa == ${ipv4}",
- .actions = i"outport = ${flood}; output;",
+ .actions = actions,
.stage_hint = 0,
.io_port = None,
.controller_meter = None) :-
+ var actions = i"outport = ${json_escape(mC_FLOOD().0)}; output;",
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).
+ var ipv4 = FlatMap(ips_v4).
Flow(.logical_datapath = sw._uuid,
.stage = s_SWITCH_IN_L2_LKUP(),
.priority = 90,
.__match = i"${fLAGBIT_NOT_VXLAN()} && nd_ns && nd.target == ${ipv6}",
- .actions = i"outport = ${flood}; output;",
+ .actions = actions,
.stage_hint = stage_hint(sp.lsp._uuid),
.io_port = None,
.controller_meter = None) :-
+ var actions = i"outport = ${json_escape(mC_FLOOD().0)}; output;",
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).
+ var ipv6 = FlatMap(ips_v6).
for (SwitchPortNewDynamicAddress(.port = &SwitchPort{.lsp = lsp, .json_name = json_name, .sw = sw},
.address = Some{addrs})
@@ -6701,7 +6702,7 @@ Flow(.logical_datapath = r._uuid,
Flow(.logical_datapath = r._uuid,
.stage = s_ROUTER_IN_DNAT(),
.priority = prio,
- .__match = __match.intern(),
+ .__match = __match,
.actions = actions,
.stage_hint = 0,
.io_port = None,
@@ -6718,13 +6719,13 @@ Flow(.logical_datapath = r._uuid,
""
},
var prio = if (port != 0) { 120 } else { 110 },
- var match0 = "ct.est && " ++ match1 ++ match2 ++ " && ct_label.natted == 1",
+ var match0 = ("ct.est && " ++ match1 ++ match2 ++ " && ct_label.natted == 1").intern(),
r in &Router(),
not r.l3dgw_ports.is_empty() or r.is_gateway,
r.load_balancer.contains(lb._uuid),
- var __match = match0 ++ match ((r.l3dgw_ports.nth(0), lbvip.backend_ips != i"" or lb.options.get_bool_def(i"reject", false))) {
- (Some {var gw_port}, true) -> " && is_chassis_resident(${json_escape(chassis_redirect_name(gw_port.name))})",
- _ -> ""
+ var __match = match ((r.l3dgw_ports.nth(0), lbvip.backend_ips != i"" or lb.options.get_bool_def(i"reject", false))) {
+ (Some {var gw_port}, true) -> i"${match0} && is_chassis_resident(${json_escape(chassis_redirect_name(gw_port.name))})",
+ _ -> match0
},
var actions = match (snat_for_lb(r.options, lb)) {
SkipSNAT -> i"flags.skip_snat_for_lb = 1; next;",
@@ -6827,27 +6828,29 @@ Flow(.logical_datapath = r._uuid,
Flow(.logical_datapath = r._uuid,
.stage = s_ROUTER_IN_DNAT(),
.priority = priority,
- .__match = __match.intern(),
- .actions = actions.intern(),
+ .__match = __match,
+ .actions = actions,
.io_port = None,
.controller_meter = meter,
.stage_hint = 0) :-
LBVIPWithStatus(lbvip@&LBVIP{.lb = lb}, up_backends),
var priority = if (lbvip.vip_port != 0) 120 else 110,
(var actions0, var reject) = build_lb_vip_actions(lbvip, up_backends, s_ROUTER_OUT_SNAT(), ""),
+ var actions1 = actions0.intern(),
var match0 = "ct.new && " ++
get_match_for_lb_key(lbvip.vip_addr, lbvip.vip_port, lb.protocol, true, true, true),
+ var match1 = match0.intern(),
r in &Router(),
r.l3dgw_ports.len() > 0 or r.is_gateway,
r.load_balancer.contains(lb._uuid),
var actions = match ((reject, snat_for_lb(r.options, lb))) {
- (false, SkipSNAT) -> "flags.skip_snat_for_lb = 1; ",
- (false, ForceSNAT) -> "flags.force_snat_for_lb = 1; ",
- _ -> ""
- } ++ actions0,
+ (false, SkipSNAT) -> i"flags.skip_snat_for_lb = 1; ${actions1}",
+ (false, ForceSNAT) -> i"flags.force_snat_for_lb = 1; ${actions1}",
+ _ -> actions1
+ },
var __match = match (r.l3dgw_ports.nth(0)) {
- Some{gw_port} -> "${match0} && is_chassis_resident(${json_escape(chassis_redirect_name(gw_port.name))})",
- _ -> match0
+ Some{gw_port} -> i"${match1} && is_chassis_resident(${json_escape(chassis_redirect_name(gw_port.name))})",
+ _ -> match1
},
var meter = if (reject) {
r.copp.get(cOPP_REJECT())
--
2.31.1
More information about the dev
mailing list