From patchwork Fri Jan 5 03:20:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Numan Siddique X-Patchwork-Id: 1882698 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T5pcp6dTcz23dn for ; Fri, 5 Jan 2024 14:20:41 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 9D54C845FE; Fri, 5 Jan 2024 03:20:38 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 9D54C845FE X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 12bjZJsIDHAJ; Fri, 5 Jan 2024 03:20:37 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id 746D884579; Fri, 5 Jan 2024 03:20:36 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 746D884579 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3E463C0077; Fri, 5 Jan 2024 03:20:36 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2B69BC0037 for ; Fri, 5 Jan 2024 03:20:34 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id E6D77845A6 for ; Fri, 5 Jan 2024 03:20:33 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org E6D77845A6 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id e04sKZRATsgP for ; Fri, 5 Jan 2024 03:20:31 +0000 (UTC) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::225]) by smtp1.osuosl.org (Postfix) with ESMTPS id 75BD884579 for ; Fri, 5 Jan 2024 03:20:30 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 75BD884579 Received: by mail.gandi.net (Postfix) with ESMTPSA id 062791C0002; Fri, 5 Jan 2024 03:20:26 +0000 (UTC) From: numans@ovn.org To: dev@openvswitch.org Date: Thu, 4 Jan 2024 22:20:00 -0500 Message-ID: <20240105032000.766473-1-numans@ovn.org> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-GND-Sasl: numans@ovn.org Subject: [ovs-dev] [PATCH ovn v4 00/16] northd lflow incremental processing X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Numan Siddique This patch series adds incremental processing in the lflow engine node to handle changes to northd and other engine nodes. Changed related to load balancers and NAT are mainly handled in this patch series. This patch series can also be found here - https://github.com/numansiddique/ovn/tree/northd_lbnatacl_lflow/v4 Prior to this patch series, most of the changes to northd engine resulted in full recomputation of logical flows. This series aims to improve the performance of ovn-northd by adding the I-P support. In order to add this support, some of the northd engine node data (from struct ovn_datapath) is split and moved over to new engine nodes - mainly related to load balancers, NAT and ACLs. Below are the scale testing results done with these patches applied using ovn-heater. The test ran the scenario - ocp-500-density-heavy.yml [1]. With all the lflow I-P patches applied, the resuts are: ------------------------------------------------------------------------------------------------------------------------------------------------------- Min (s) Median (s) 90%ile (s) 99%ile (s) Max (s) Mean (s) Total (s) Count Failed ------------------------------------------------------------------------------------------------------------------------------------------------------- Iteration Total 0.136883 1.129016 1.192001 1.204167 1.212728 0.665017 83.127099 125 0 Namespace.add_ports 0.005216 0.005736 0.007034 0.015486 0.018978 0.006211 0.776373 125 0 WorkerNode.bind_port 0.035030 0.046082 0.052469 0.058293 0.060311 0.045973 11.493259 250 0 WorkerNode.ping_port 0.005057 0.006727 1.047692 1.069253 1.071336 0.266896 66.724094 250 0 ------------------------------------------------------------------------------------------------------------------------------------------------------- The results with the present main are: ------------------------------------------------------------------------------------------------------------------------------------------------------- Min (s) Median (s) 90%ile (s) 99%ile (s) Max (s) Mean (s) Total (s) Count Failed ------------------------------------------------------------------------------------------------------------------------------------------------------- Iteration Total 0.135491 2.223805 3.311270 3.339078 3.345346 1.729172 216.146495 125 0 Namespace.add_ports 0.005380 0.005744 0.006819 0.018773 0.020800 0.006292 0.786532 125 0 WorkerNode.bind_port 0.034179 0.046055 0.053488 0.058801 0.071043 0.046117 11.529311 250 0 WorkerNode.ping_port 0.004956 0.006952 3.086952 3.191743 3.192807 0.791544 197.886026 250 0 ------------------------------------------------------------------------------------------------------------------------------------------------------- Please see the link [2] which has a high level description of the changes done in this patch series. [1] - https://github.com/ovn-org/ovn-heater/blob/main/test-scenarios/ocp-500-density-heavy.yml [2] - https://mail.openvswitch.org/pipermail/ovs-dev/2023-December/410053.html v3 -> v4 ------- * Addressed most of the review comments from Dumitru and Han. * Found a couple of bugs in v3 patch 9 - "northd: Refactor lflow management into a separate module." and addressed them in v4. To brief the issue, if a logical flow L(M, A) is referenced by 2 lflow_ref's which belong to the same datapath, then the lflow was deleted even if one lflow_ref was cleared due to any changes. It is addressed now by maintaining a reference count in the 'struct ovn_lflow' for each datapath it is used by. * Moved the v3 patch 14 ("northd: Add I-P for NB_Global and SB_Global.") to patch 16 in v4. There were comments in this patch to not add a full I-P for NB_Global and SB_Global. Made this patch as the last in the series so that we can discuss further and not block other patches in case we want to drop this one. v2 -> v3 ------- * Addressed some of the review comments from Han and Dumitru. There are still a few pending review comments which needs to be addressed or discussed. * Renamed the engine node from "lr_lbnat_data" to "lr_stateful" (v3 patch 5). * Renamed the engine node from "ls_lbacls" to "ls_stateful" (v3 patch 8). * Removed v2 patch 2 from the series (northd: Track ovn_datapaths in northd engine track data."). This patch is now part of v3 patch 7 (northd: Add a new node 'ls_stateful'). * Squashed v2 patch 8 (northd: Don't commit dhcp response flows in the conntrack.) into v3 patch 7 (northd: Add a new node 'ls_stateful'.) v1 -> v2 -------- * Now also maintaing array indexes for ls_lbacls, lr_nat and lr_lb_nat_data tables (similar to ovn_datapaths->array) to make the lookup effecient. The same ovn_datapath->index is reused. * Made some signficant changes to 'struct lflow_ref' in lflow-mgr.c. In v2 we don't use objdep_mgr to maintain the resource to lflow references. Instead we maintain the 'struct lflow' pointer. With this we don't need to maintain additional hmap of lflows. Numan Siddique (16): northd: Refactor the northd change tracking. tests: Add a couple of tests in ovn-northd for I-P. northd: Move router ports SB PB options sync to sync_to_sb_pb node. northd: Add a new engine 'lr_nat' to manage lr NAT data. northd: Add a new engine 'lr_stateful' to manage lr's stateful data. northd: Generate router's stateful flows using lr_stateful data. northd: Add a new node 'ls_stateful'. northd: Refactor lflow management into a separate module. northd: Use lflow_ref when adding all logical flows. northd: Move ovn_lb_datapaths from lib to northd module. northd: Handle lb changes in lflow engine. northd: Add lr_stateful handler for lflow engine node. northd: Add ls_stateful handler for lflow engine node. northd: Add a noop handler for northd SB mac binding. northd: Add northd change handler for sync_to_sb_lb node. northd: Add I-P for NB_Global and SB_Global. lib/lb.c | 96 - lib/lb.h | 57 - lib/ovn-util.c | 24 +- lib/ovn-util.h | 4 +- lib/stopwatch-names.h | 3 + northd/aging.c | 21 +- northd/automake.mk | 14 +- northd/en-global-config.c | 588 ++++ northd/en-global-config.h | 65 + northd/en-lflow.c | 115 +- northd/en-lflow.h | 8 + northd/en-lr-nat.c | 423 +++ northd/en-lr-nat.h | 130 + northd/en-lr-stateful.c | 669 ++++ northd/en-lr-stateful.h | 137 + northd/en-ls-stateful.c | 443 +++ northd/en-ls-stateful.h | 104 + northd/en-northd.c | 70 +- northd/en-northd.h | 2 +- northd/en-port-group.h | 3 + northd/en-sync-from-sb.c | 2 +- northd/en-sync-sb.c | 521 ++- northd/inc-proc-northd.c | 74 +- northd/lb.c | 124 + northd/lb.h | 108 + northd/lflow-mgr.c | 1206 +++++++ northd/lflow-mgr.h | 189 ++ northd/northd.c | 6361 ++++++++++++++++--------------------- northd/northd.h | 537 +++- northd/ovn-northd.c | 7 + tests/ovn-macros.at | 44 + tests/ovn-northd.at | 1154 ++++++- 32 files changed, 9176 insertions(+), 4127 deletions(-) create mode 100644 northd/en-global-config.c create mode 100644 northd/en-global-config.h create mode 100644 northd/en-lr-nat.c create mode 100644 northd/en-lr-nat.h create mode 100644 northd/en-lr-stateful.c create mode 100644 northd/en-lr-stateful.h create mode 100644 northd/en-ls-stateful.c create mode 100644 northd/en-ls-stateful.h create mode 100644 northd/lb.c create mode 100644 northd/lb.h create mode 100644 northd/lflow-mgr.c create mode 100644 northd/lflow-mgr.h