On 5/18/22 14:17, Numan Siddique wrote:


On Mon, May 16, 2022 at 5:42 PM Numan Siddique <[email protected] <mailto:[email protected]>> wrote:



    On Mon, May 16, 2022 at 4:27 PM Mark Michelson <[email protected]
    <mailto:[email protected]>> wrote:

        Hi Numan,

        I've taken a close look at the patches in this series, and they
        seem
        really good. They're very well commented and well tested as
        well. It's
        quite easy to follow the change, and I couldn't find any flaws
        in my review.

        However, I do want to double-check that this does not put
        unnecessary
        load on ovn-controller. I suspect it won't be much of a problem
        since

        1) The port security flows are calculated incrementally.
        2) The reduced SB DB size likely lessens the overall load on
        ovn-controller .
        3) The removed port security logical flows means there is less
        parsing
        of logical flows per iteration of ovn-controller.

        However, this does add new OF flow creation in ovn-controller,
        so it's
        worth checking to make sure ovn-controller does not see any
        noticeable
        performance decrease.

        If we can get confirmation, then I'll ack the series.


    Thanks Mark for the reviews.

    Sure.  I'll do some tests and share the results.


I did some testing and these are the findings.

1.  I started 2 separate ovn-central components, one on central-1 with OVN main commit (as of today's)     and the other on central-2 node with OVN main + these port security patches.
      Same OVN databases on both the nodes.

     central-1 SB DB has 208962 logical flows
     central-2 SB DB (with port sec patches) has 84294 logical flows.

2.  Started 2 separate compute nodes - compute-1 (with ovn main ovn-controller) and compute-2 (with ovn main + port sec ovn-controller)      Created around 1000 ovs ports on compute-1 and copied the conf.db to compute-2 - so that both the ovn-controllers claim the same logical ports.

3.  After both the ovn-controllers settle down.  I triggered recompute multiple times.   This recompute will generate all the openflows (but ofcourse will not program ovs-vswitchd)    compute-1 ovn-controller takes around 3100 ms to complete the loop. I see unreasonable long poll interval message and compute-2 ovn-controller takes around 1500ms to
    complete the loop.


I think these patches also help ovn-controller as it has to do less logical flow processing.

Below is the stopwatch/show for compute-1 ovn-controller

[root@ovn-chassis-1 data]# ovn-appctl -t ovn-controller stopwatch/show flow-generation
Statistics for 'flow-generation'
   Total samples: 679
   Maximum: 3435 msec
   Minimum: 0 msec
   95th percentile: 32.512116 msec
   Short term average: 15.137543 msec
   Long term average: 109.403161 msec

And below is the same for compute-2 ovn-controller

[root@ovn-chassis-2 /]#  ovn-appctl -t ovn-controller stopwatch/show flow-generation
Statistics for 'flow-generation'
   Total samples: 700
   Maximum: 1341 msec
   Minimum: 0 msec
   95th percentile: 2.987580 msec
   Short term average: 0.000000 msec
   Long term average: 24.980349 msec


Thanks
Numan

Excellent work Numan. I suspected that ovn-controller might run the same or slightly slower with this change, but the result is that it's actually quicker!

Acked-by: Mark Michelson <[email protected]>




    Numan


        On 5/12/22 20:42, [email protected] <mailto:[email protected]> wrote:
         > From: Numan Siddique <[email protected] <mailto:[email protected]>>
         >
         > This patch series adds generic logical flows for port security in
         > the logical switch pipeline and pushes the actual port security
         > implementation logic to ovn-controller from ovn-northd.
         >
         > ovn-northd will now add logical flows like:
         >
         > table=0 (ls_in_check_port_sec), priority=50   , match=(1),
        action=(reg0[14] = check_in_port_sec(); next;)
         > table=1 (ls_in_apply_port_sec), priority=50   ,
        match=(reg0[14] == 1), action=(drop;)
         > table=1 (ls_in_apply_port_sec), priority=0    , match=(1),
        action=(next;)
         >
         > OVN action check_in_port_sec() resubmits the packet to
        openflow table
         > 73.  ovn-controller will add port security flows in table
        73,74 and 75
         > for all the logical ports it has claimed.  The port security
        information
         > is passed down the Port_Binding table in Southbound database.
         >
         > The main motivation for the patch is to address scale concerns.
         > This patch series reduces the number of logical flows and
        ovn-northd
         > CPU utilization time.
         >
         > Did some scale testing and below are the results:
         >
         > Used a Northbound database from a deployment of 120 node cluster.
         > Number of logical switch ports with port security configured:
        13711
         >
         > With vanilla ovn-northd
         > -----------------------
         > Number of logical flows : 208061
         > Avg time taken to run build_lflows() : 1301 msec
         > Size of Southbound database after compaction: 104M
         >
         > With ovn-northd using this feature
         > ---------------------------------
         > Number of logical flows : 83396
         > Avg time taken to run build_lflows() : 560  msec
         > Size of Southbound database after compaction: 45M
         >
         >
         >
         > Numan Siddique (3):
         >    ovn-controller: Add OF rules for port security.
         >    actions: Add new actions check_in_port_sec and
        check_out_port_sec.
         >    northd: Add generic port security logical flows.
         >
         >   controller/binding.c         |  78 +++-
         >   controller/binding.h         |  23 +-
         >   controller/lflow.c           | 792
        ++++++++++++++++++++++++++++++++++-
         >   controller/lflow.h           |   4 +
         >   controller/ovn-controller.c  |  21 +-
         >   include/ovn/actions.h        |   6 +
         >   include/ovn/logical-fields.h |   1 +
         >   lib/actions.c                |  75 +++-
         >   northd/northd.c              | 557 +++++-------------------
         >   northd/ovn-northd.8.xml      | 263 ++++++------
         >   ovn-sb.ovsschema             |   7 +-
         >   ovn-sb.xml                   |  54 +++
         >   tests/ovn-northd.at <http://ovn-northd.at>          | 431
        ++++++++++++-------
         >   tests/ovn.at <http://ovn.at>                 | 369
        ++++++++++++++--
         >   tests/test-ovn.c             |   2 +
         >   utilities/ovn-trace.c        | 313 ++++++++++++++
         >   16 files changed, 2175 insertions(+), 821 deletions(-)
         >

        _______________________________________________
        dev mailing list
        [email protected] <mailto:[email protected]>
        https://mail.openvswitch.org/mailman/listinfo/ovs-dev
        <https://mail.openvswitch.org/mailman/listinfo/ovs-dev>


_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to