mbox series

[ovs-dev,ovn,v12,0/7] Incremental processing improvements.

Message ID 20200611124309.1353593-1-numans@ovn.org
Headers show
Series Incremental processing improvements. | expand

Message

Numan Siddique June 11, 2020, 12:43 p.m. UTC
From: Numan Siddique <numans@ovn.org>

This patch series handles port binding, datapath binding, ovs interface changes,
runtime data changes, sb chassis changes incrementally.

(These patches can also be found here -
https://github.com/numansiddique/ovn/tree/IP_improvements_v5)

Below are the results of some testing I did with ovn-fake-multinode
setup

Test setup
------
 1. ovn-central fake node running OVN dbs and 2 compute nodes running
    ovn-controller.

 2. Before running the tests, used an existing OVN db with the below
resources
   No of logical switches     - 53
   No of logical ports        - 1256
   No of logical routers      - 9
   No of logical router ports - 56
   No of port groups          - 152
   No of logical flows        - 45447

   Port bindings on compute-1 -  19
   Port bindings on compute-2 -  18
   No of OF flows on compute-1 - 84996
   No of OF flows on compute-2 - 84901

 3. The test does the following
    - Creates 2 logical switches (one for each compute node) and connect to a
      logical router for each compute node.
    - 100 logical ports are created (50 per lswitch), a simple ACL is added and the address
      set is created for each port.
    - Each port is bound on the respective compute node and the test
      pings the IP of the port (from another port belonging to the same
      lswitch created earlier).


Below are the results with OVN master

+---------------------------------------------------------------------------------------------------------+
|                                          Response Times (sec)                                           |
+----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
| action                           | min   | median | 90%ile | 95%ile | max    | avg    | success | count |
+----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
| ovn.create_or_update_address_set | 0.491 | 0.519  | 0.542  | 0.548  | 0.558  | 0.521  | 100.0%  | 100   |
| ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    | 0.001  | 0.0    | 100.0%  | 100   |
| ovn.create_port_group_acls       | 0.966 | 1.037  | 1.065  | 1.069  | 1.07   | 1.037  | 50.0%   | 100   |
| ovn_network.bind_port            | 1.242 | 1.341  | 1.397  | 1.409  | 1.443  | 1.348  | 100.0%  | 100   |
| ovn.bind_ovs_vm                  | 0.413 | 0.469  | 0.49   | 0.494  | 0.523  | 0.469  | 100.0%  | 100   |
| ovn.bind_internal_vm             | 0.804 | 0.875  | 0.921  | 0.935  | 0.95   | 0.88   | 100.0%  | 100   |
| ovn_network.wait_port_ping       | 6.695 | 7.788  | 7.903  | 11.63  | 16.124 | 7.997  | 100.0%  | 100   |
| total                            | 9.271 | 10.318 | 11.269 | 14.047 | 18.509 | 10.871 | 100.0%  | 100   |
+----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
Load duration: 1087.5742933750153
Full duration: 1089.151035308838


Below are the results with these patches

+-------------------------------------------------------------------------------------------------------+
|                                         Response Times (sec)                                          |
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
| action                           | min   | median | 90%ile | 95%ile | max   | avg   | success | count |
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
| ovn.create_or_update_address_set | 0.484 | 0.506  | 0.53   | 0.536  | 0.551 | 0.509 | 100.0%  | 100   |
| ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    | 0.0   | 0.0   | 100.0%  | 100   |
| ovn.create_port_group_acls       | 0.966 | 1.006  | 1.032  | 1.036  | 1.059 | 1.006 | 50.0%   | 100   |
| ovn_network.bind_port            | 1.255 | 1.352  | 1.421  | 1.444  | 1.516 | 1.352 | 100.0%  | 100   |
| ovn.bind_ovs_vm                  | 0.411 | 0.455  | 0.472  | 0.476  | 0.5   | 0.456 | 100.0%  | 100   |
| ovn.bind_internal_vm             | 0.806 | 0.893  | 0.968  | 0.989  | 1.043 | 0.896 | 100.0%  | 100   |
| ovn_network.wait_port_ping       | 0.226 | 0.253  | 0.325  | 0.329  | 0.347 | 0.267 | 100.0%  | 100   |
| total                            | 2.517 | 3.137  | 3.718  | 3.749  | 3.797 | 3.135 | 100.0%  | 100   |
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
Load duration: 313.99292826652527
Full duration: 315.29931354522705

I ran same tests but with 1000 lports and below are the results with
these patches

+-------------------------------------------------------------------------------------------------------+
|                                         Response Times (sec)                                          |
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
| action                           | min   | median | 90%ile | 95%ile | max   | avg   | success | count |
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
| ovn.create_or_update_address_set | 0.483 | 0.555  | 0.6    | 0.615  | 0.661 | 0.555 | 100.0%  | 1000  |
| ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    | 0.002 | 0.0   | 100.0%  | 1000  |
| ovn.create_port_group_acls       | 0.973 | 1.101  | 1.176  | 1.195  | 1.271 | 1.097 | 50.0%   | 1000  |
| ovn_network.bind_port            | 1.239 | 1.371  | 1.444  | 1.47   | 1.557 | 1.373 | 100.0%  | 1000  |
| ovn.bind_ovs_vm                  | 0.409 | 0.482  | 0.522  | 0.541  | 0.597 | 0.486 | 100.0%  | 1000  |
| ovn.bind_internal_vm             | 0.784 | 0.882  | 0.945  | 0.968  | 1.063 | 0.887 | 100.0%  | 1000  |
| ovn_network.wait_port_ping       | 0.218 | 0.251  | 0.313  | 0.324  | 0.395 | 0.262 | 100.0%  | 1000  |
| total                            | 2.465 | 3.251  | 3.956  | 4.016  | 4.226 | 3.274 | 100.0%  | 1000  |
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
Load duration: 3279.292845249176
Full duration: 3280.6857619285583


v11 -> v12
----
 * Rebased the patches to latest master.
 * Add a new patch p7 which changes the signature of some of
   the static functions added recently in binding.c so that the out
   param is the last param.

v10 -> v11
----
 * The firt 3 patches of v10 are now merged to master.
 * The v11 has now 6 patches.
 * Addressed the review comments from Dumitru.
 * Added another new patch - which adds the util function
   get_unique_lport_key() and use this function in places
   where it was generating this key earlier.

v9 -> v10
----
 * Addressed review comments.
 * Changed the patch 4 from adding a separate tracking variable in I-P
   engine to just adding a new function - clear_tracked_data() as per
   the review comments.
 * Dropped the patch 9 - "ovn-controller: Handle sbrec_chassis changes incrementally."
   from the series. I couldn't address the review comments for this patch in v9.
   Hence dropped this patch for now. I'll work on it later and submit
   the patch separately.
 * Added a new test only patch - patch 9 in ovn-performance.at to test the
   distributed logical router ports scenario and BFD.

v8 -> v9
----
 * Addressed the review comments from Dumitru and missed v7 comments from
   Han.
 * Any change to the 'local_lport_ids' while handling the OVS interface and Port
   binding changes in binding.c is now added to the tracked
   datapaths which was not done earlier.
 * Dropped the check to lflow_evaluate_pb_changes() in flow_output port
   binding handler as it is not required.

v7 -> v8
----
 * Dropped the patch 4 as it is not needed, thanks to Han.
 * Swapped the patches 5 and 6, which are now patch 4 and 5. The v8 patch 5 will now make
   use of tracked data support of engine to clear the physical_flow
   changes.
 * Addressed comments from Han. Added comments in Patch 5 and Patch 6.

v6 -> v7
----
  * Addressed the review comments from Han in patch 1 and patch 2.

v5 -> v6
----
  * Addressed the review comments from Dumitru.
  * Patch 1 and Patch 2 are significantly changed due to
    further refactoring.

v4 -> v5
----
  * Applied patch 1 of v4 to master.
  * Addressed the review comments from Han for patch 2.
  * Rebased to latest master.

v3 -> v4
----
  * A small fix in patch 3 when binding the port for ovs interface
    change.
  * Rebased to latest master.


v2 -> v3
----
  * Added back the patch 5 and 6 and added 4 more patches. So totally
    totally 10 patches in the series
  * Handling the runtime data changes in flow computation.
  * Handling sbrec_chassis changes.

v1 -> v2
------
  * Addressed the review comments from Han in patch 1, 2 and 3.
  * Removed patch 5 and 6 from the series. As per the comments
    from Han, we should handle runtime data changes in flow output
    engine. But the patch 6 of the series had added a no-op
    handler. So removed these 2 patches until those are addressed.

RFC v2 -> v1
---------
 * Fixed the 2 failing test cases.
 * Updated the commit messages.


RFC v1 -> RFC v2
---------
 * Added 2 new patches
 * Patch 5 (ofctrl_check_and_add_flow) was submitted earlier too and
   the previous discussion is here - https://patchwork.ozlabs.org/patch/1202417/
 * Patch 6 handles I-P for ct_zone and OVS interface changes in
   flow_output_run stage.
Numan Siddique (6):
  Refactor binding_run()to take two context argument - binding_ctx_in
    and binding_ctx_out.
  ovn-controller: Refactor binding.c
  ovn-controller: I-P for port binding in runtime_data stage
  ovn-controller: I-P for datapath binding
  ofctrl_check_and_add_flow: Replace the actions of an existing flow if
    actions have changed.
  ovn-controller: I-P for ct zone  and OVN


Numan Siddique (6):
  I-P engine: Provide the option for an engine to clear tracked engine
    data in every run.
  ovn-controller: I-P for ct zone and OVS interface changes in flow
    output stage.
  ovn-controller: Handle runtime data changes in flow output engine
  tests: Enhance ovn-performance testing by adding gw router port.
  Add an util function get_unique_lport_key() for generating unique
    lport key.
  binding.c: Reorder out params of some of the static functions.

Venkata Anil (1):
  ovn-controller: Use the tracked runtime data changes for flow
    calculation.

 controller/binding.c        | 263 +++++++++++++++++--------
 controller/binding.h        |  47 ++++-
 controller/lflow.c          |  88 ++++++++-
 controller/lflow.h          |  12 +-
 controller/ovn-controller.c | 374 +++++++++++++++++++++++++++++++-----
 controller/physical.c       |  51 +++++
 controller/physical.h       |   5 +-
 lib/inc-proc-eng.c          |   8 +
 lib/inc-proc-eng.h          |   9 +
 lib/ovn-util.h              |   8 +
 tests/ovn-performance.at    | 136 +++++++++++--
 11 files changed, 854 insertions(+), 147 deletions(-)

Comments

Han Zhou June 17, 2020, 7:02 a.m. UTC | #1
On Thu, Jun 11, 2020 at 5:43 AM <numans@ovn.org> wrote:
>
> From: Numan Siddique <numans@ovn.org>
>
> This patch series handles port binding, datapath binding, ovs interface
changes,
> runtime data changes, sb chassis changes incrementally.
>
> (These patches can also be found here -
> https://github.com/numansiddique/ovn/tree/IP_improvements_v5)
>
> Below are the results of some testing I did with ovn-fake-multinode
> setup
>

Thanks Numan! Could you put the below test results which show performance
improvement of the patch series in the commit message of the patch:
ovn-controller: Handle runtime data changes in flow output engine? The
information in the cover-letter is not well tracked.

For the series:

Acked-by: Han Zhou <hzhou@ovn.org>

> Test setup
> ------
>  1. ovn-central fake node running OVN dbs and 2 compute nodes running
>     ovn-controller.
>
>  2. Before running the tests, used an existing OVN db with the below
> resources
>    No of logical switches     - 53
>    No of logical ports        - 1256
>    No of logical routers      - 9
>    No of logical router ports - 56
>    No of port groups          - 152
>    No of logical flows        - 45447
>
>    Port bindings on compute-1 -  19
>    Port bindings on compute-2 -  18
>    No of OF flows on compute-1 - 84996
>    No of OF flows on compute-2 - 84901
>
>  3. The test does the following
>     - Creates 2 logical switches (one for each compute node) and connect
to a
>       logical router for each compute node.
>     - 100 logical ports are created (50 per lswitch), a simple ACL is
added and the address
>       set is created for each port.
>     - Each port is bound on the respective compute node and the test
>       pings the IP of the port (from another port belonging to the same
>       lswitch created earlier).
>
>
> Below are the results with OVN master
>
>
+---------------------------------------------------------------------------------------------------------+
> |                                          Response Times (sec)
                                |
>
+----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
> | action                           | min   | median | 90%ile | 95%ile |
max    | avg    | success | count |
>
+----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
> | ovn.create_or_update_address_set | 0.491 | 0.519  | 0.542  | 0.548  |
0.558  | 0.521  | 100.0%  | 100   |
> | ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    |
0.001  | 0.0    | 100.0%  | 100   |
> | ovn.create_port_group_acls       | 0.966 | 1.037  | 1.065  | 1.069  |
1.07   | 1.037  | 50.0%   | 100   |
> | ovn_network.bind_port            | 1.242 | 1.341  | 1.397  | 1.409  |
1.443  | 1.348  | 100.0%  | 100   |
> | ovn.bind_ovs_vm                  | 0.413 | 0.469  | 0.49   | 0.494  |
0.523  | 0.469  | 100.0%  | 100   |
> | ovn.bind_internal_vm             | 0.804 | 0.875  | 0.921  | 0.935  |
0.95   | 0.88   | 100.0%  | 100   |
> | ovn_network.wait_port_ping       | 6.695 | 7.788  | 7.903  | 11.63  |
16.124 | 7.997  | 100.0%  | 100   |
> | total                            | 9.271 | 10.318 | 11.269 | 14.047 |
18.509 | 10.871 | 100.0%  | 100   |
>
+----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
> Load duration: 1087.5742933750153
> Full duration: 1089.151035308838
>
>
> Below are the results with these patches
>
>
+-------------------------------------------------------------------------------------------------------+
> |                                         Response Times (sec)
                               |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> | action                           | min   | median | 90%ile | 95%ile |
max   | avg   | success | count |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> | ovn.create_or_update_address_set | 0.484 | 0.506  | 0.53   | 0.536  |
0.551 | 0.509 | 100.0%  | 100   |
> | ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    |
0.0   | 0.0   | 100.0%  | 100   |
> | ovn.create_port_group_acls       | 0.966 | 1.006  | 1.032  | 1.036  |
1.059 | 1.006 | 50.0%   | 100   |
> | ovn_network.bind_port            | 1.255 | 1.352  | 1.421  | 1.444  |
1.516 | 1.352 | 100.0%  | 100   |
> | ovn.bind_ovs_vm                  | 0.411 | 0.455  | 0.472  | 0.476  |
0.5   | 0.456 | 100.0%  | 100   |
> | ovn.bind_internal_vm             | 0.806 | 0.893  | 0.968  | 0.989  |
1.043 | 0.896 | 100.0%  | 100   |
> | ovn_network.wait_port_ping       | 0.226 | 0.253  | 0.325  | 0.329  |
0.347 | 0.267 | 100.0%  | 100   |
> | total                            | 2.517 | 3.137  | 3.718  | 3.749  |
3.797 | 3.135 | 100.0%  | 100   |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> Load duration: 313.99292826652527
> Full duration: 315.29931354522705
>
> I ran same tests but with 1000 lports and below are the results with
> these patches
>
>
+-------------------------------------------------------------------------------------------------------+
> |                                         Response Times (sec)
                               |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> | action                           | min   | median | 90%ile | 95%ile |
max   | avg   | success | count |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> | ovn.create_or_update_address_set | 0.483 | 0.555  | 0.6    | 0.615  |
0.661 | 0.555 | 100.0%  | 1000  |
> | ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    |
0.002 | 0.0   | 100.0%  | 1000  |
> | ovn.create_port_group_acls       | 0.973 | 1.101  | 1.176  | 1.195  |
1.271 | 1.097 | 50.0%   | 1000  |
> | ovn_network.bind_port            | 1.239 | 1.371  | 1.444  | 1.47   |
1.557 | 1.373 | 100.0%  | 1000  |
> | ovn.bind_ovs_vm                  | 0.409 | 0.482  | 0.522  | 0.541  |
0.597 | 0.486 | 100.0%  | 1000  |
> | ovn.bind_internal_vm             | 0.784 | 0.882  | 0.945  | 0.968  |
1.063 | 0.887 | 100.0%  | 1000  |
> | ovn_network.wait_port_ping       | 0.218 | 0.251  | 0.313  | 0.324  |
0.395 | 0.262 | 100.0%  | 1000  |
> | total                            | 2.465 | 3.251  | 3.956  | 4.016  |
4.226 | 3.274 | 100.0%  | 1000  |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> Load duration: 3279.292845249176
> Full duration: 3280.6857619285583
>
>
> v11 -> v12
> ----
>  * Rebased the patches to latest master.
>  * Add a new patch p7 which changes the signature of some of
>    the static functions added recently in binding.c so that the out
>    param is the last param.
>
> v10 -> v11
> ----
>  * The firt 3 patches of v10 are now merged to master.
>  * The v11 has now 6 patches.
>  * Addressed the review comments from Dumitru.
>  * Added another new patch - which adds the util function
>    get_unique_lport_key() and use this function in places
>    where it was generating this key earlier.
>
> v9 -> v10
> ----
>  * Addressed review comments.
>  * Changed the patch 4 from adding a separate tracking variable in I-P
>    engine to just adding a new function - clear_tracked_data() as per
>    the review comments.
>  * Dropped the patch 9 - "ovn-controller: Handle sbrec_chassis changes
incrementally."
>    from the series. I couldn't address the review comments for this patch
in v9.
>    Hence dropped this patch for now. I'll work on it later and submit
>    the patch separately.
>  * Added a new test only patch - patch 9 in ovn-performance.at to test the
>    distributed logical router ports scenario and BFD.
>
> v8 -> v9
> ----
>  * Addressed the review comments from Dumitru and missed v7 comments from
>    Han.
>  * Any change to the 'local_lport_ids' while handling the OVS interface
and Port
>    binding changes in binding.c is now added to the tracked
>    datapaths which was not done earlier.
>  * Dropped the check to lflow_evaluate_pb_changes() in flow_output port
>    binding handler as it is not required.
>
> v7 -> v8
> ----
>  * Dropped the patch 4 as it is not needed, thanks to Han.
>  * Swapped the patches 5 and 6, which are now patch 4 and 5. The v8 patch
5 will now make
>    use of tracked data support of engine to clear the physical_flow
>    changes.
>  * Addressed comments from Han. Added comments in Patch 5 and Patch 6.
>
> v6 -> v7
> ----
>   * Addressed the review comments from Han in patch 1 and patch 2.
>
> v5 -> v6
> ----
>   * Addressed the review comments from Dumitru.
>   * Patch 1 and Patch 2 are significantly changed due to
>     further refactoring.
>
> v4 -> v5
> ----
>   * Applied patch 1 of v4 to master.
>   * Addressed the review comments from Han for patch 2.
>   * Rebased to latest master.
>
> v3 -> v4
> ----
>   * A small fix in patch 3 when binding the port for ovs interface
>     change.
>   * Rebased to latest master.
>
>
> v2 -> v3
> ----
>   * Added back the patch 5 and 6 and added 4 more patches. So totally
>     totally 10 patches in the series
>   * Handling the runtime data changes in flow computation.
>   * Handling sbrec_chassis changes.
>
> v1 -> v2
> ------
>   * Addressed the review comments from Han in patch 1, 2 and 3.
>   * Removed patch 5 and 6 from the series. As per the comments
>     from Han, we should handle runtime data changes in flow output
>     engine. But the patch 6 of the series had added a no-op
>     handler. So removed these 2 patches until those are addressed.
>
> RFC v2 -> v1
> ---------
>  * Fixed the 2 failing test cases.
>  * Updated the commit messages.
>
>
> RFC v1 -> RFC v2
> ---------
>  * Added 2 new patches
>  * Patch 5 (ofctrl_check_and_add_flow) was submitted earlier too and
>    the previous discussion is here -
https://patchwork.ozlabs.org/patch/1202417/
>  * Patch 6 handles I-P for ct_zone and OVS interface changes in
>    flow_output_run stage.
> Numan Siddique (6):
>   Refactor binding_run()to take two context argument - binding_ctx_in
>     and binding_ctx_out.
>   ovn-controller: Refactor binding.c
>   ovn-controller: I-P for port binding in runtime_data stage
>   ovn-controller: I-P for datapath binding
>   ofctrl_check_and_add_flow: Replace the actions of an existing flow if
>     actions have changed.
>   ovn-controller: I-P for ct zone  and OVN
>
>
> Numan Siddique (6):
>   I-P engine: Provide the option for an engine to clear tracked engine
>     data in every run.
>   ovn-controller: I-P for ct zone and OVS interface changes in flow
>     output stage.
>   ovn-controller: Handle runtime data changes in flow output engine
>   tests: Enhance ovn-performance testing by adding gw router port.
>   Add an util function get_unique_lport_key() for generating unique
>     lport key.
>   binding.c: Reorder out params of some of the static functions.
>
> Venkata Anil (1):
>   ovn-controller: Use the tracked runtime data changes for flow
>     calculation.
>
>  controller/binding.c        | 263 +++++++++++++++++--------
>  controller/binding.h        |  47 ++++-
>  controller/lflow.c          |  88 ++++++++-
>  controller/lflow.h          |  12 +-
>  controller/ovn-controller.c | 374 +++++++++++++++++++++++++++++++-----
>  controller/physical.c       |  51 +++++
>  controller/physical.h       |   5 +-
>  lib/inc-proc-eng.c          |   8 +
>  lib/inc-proc-eng.h          |   9 +
>  lib/ovn-util.h              |   8 +
>  tests/ovn-performance.at    | 136 +++++++++++--
>  11 files changed, 854 insertions(+), 147 deletions(-)
>
> --
> 2.26.2
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Numan Siddique June 17, 2020, 7:52 a.m. UTC | #2
On Wed, Jun 17, 2020 at 12:32 PM Han Zhou <hzhou@ovn.org> wrote:

> On Thu, Jun 11, 2020 at 5:43 AM <numans@ovn.org> wrote:
> >
> > From: Numan Siddique <numans@ovn.org>
> >
> > This patch series handles port binding, datapath binding, ovs interface
> changes,
> > runtime data changes, sb chassis changes incrementally.
> >
> > (These patches can also be found here -
> > https://github.com/numansiddique/ovn/tree/IP_improvements_v5)
> >
> > Below are the results of some testing I did with ovn-fake-multinode
> > setup
> >
>
> Thanks Numan! Could you put the below test results which show performance
> improvement of the patch series in the commit message of the patch:
> ovn-controller: Handle runtime data changes in flow output engine? The
> information in the cover-letter is not well tracked.
>
> For the series:
>
> Acked-by: Han Zhou <hzhou@ovn.org>
>

Thanks a lot for the reviews. Sure I'll do that.
I'll wait for reviews from Dumitru before applying.

Thanks
Numan


>
> > Test setup
> > ------
> >  1. ovn-central fake node running OVN dbs and 2 compute nodes running
> >     ovn-controller.
> >
> >  2. Before running the tests, used an existing OVN db with the below
> > resources
> >    No of logical switches     - 53
> >    No of logical ports        - 1256
> >    No of logical routers      - 9
> >    No of logical router ports - 56
> >    No of port groups          - 152
> >    No of logical flows        - 45447
> >
> >    Port bindings on compute-1 -  19
> >    Port bindings on compute-2 -  18
> >    No of OF flows on compute-1 - 84996
> >    No of OF flows on compute-2 - 84901
> >
> >  3. The test does the following
> >     - Creates 2 logical switches (one for each compute node) and connect
> to a
> >       logical router for each compute node.
> >     - 100 logical ports are created (50 per lswitch), a simple ACL is
> added and the address
> >       set is created for each port.
> >     - Each port is bound on the respective compute node and the test
> >       pings the IP of the port (from another port belonging to the same
> >       lswitch created earlier).
> >
> >
> > Below are the results with OVN master
> >
> >
>
> +---------------------------------------------------------------------------------------------------------+
> > |                                          Response Times (sec)
>                                 |
> >
>
> +----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
> > | action                           | min   | median | 90%ile | 95%ile |
> max    | avg    | success | count |
> >
>
> +----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
> > | ovn.create_or_update_address_set | 0.491 | 0.519  | 0.542  | 0.548  |
> 0.558  | 0.521  | 100.0%  | 100   |
> > | ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    |
> 0.001  | 0.0    | 100.0%  | 100   |
> > | ovn.create_port_group_acls       | 0.966 | 1.037  | 1.065  | 1.069  |
> 1.07   | 1.037  | 50.0%   | 100   |
> > | ovn_network.bind_port            | 1.242 | 1.341  | 1.397  | 1.409  |
> 1.443  | 1.348  | 100.0%  | 100   |
> > | ovn.bind_ovs_vm                  | 0.413 | 0.469  | 0.49   | 0.494  |
> 0.523  | 0.469  | 100.0%  | 100   |
> > | ovn.bind_internal_vm             | 0.804 | 0.875  | 0.921  | 0.935  |
> 0.95   | 0.88   | 100.0%  | 100   |
> > | ovn_network.wait_port_ping       | 6.695 | 7.788  | 7.903  | 11.63  |
> 16.124 | 7.997  | 100.0%  | 100   |
> > | total                            | 9.271 | 10.318 | 11.269 | 14.047 |
> 18.509 | 10.871 | 100.0%  | 100   |
> >
>
> +----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
> > Load duration: 1087.5742933750153
> > Full duration: 1089.151035308838
> >
> >
> > Below are the results with these patches
> >
> >
>
> +-------------------------------------------------------------------------------------------------------+
> > |                                         Response Times (sec)
>                                |
> >
>
> +----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> > | action                           | min   | median | 90%ile | 95%ile |
> max   | avg   | success | count |
> >
>
> +----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> > | ovn.create_or_update_address_set | 0.484 | 0.506  | 0.53   | 0.536  |
> 0.551 | 0.509 | 100.0%  | 100   |
> > | ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    |
> 0.0   | 0.0   | 100.0%  | 100   |
> > | ovn.create_port_group_acls       | 0.966 | 1.006  | 1.032  | 1.036  |
> 1.059 | 1.006 | 50.0%   | 100   |
> > | ovn_network.bind_port            | 1.255 | 1.352  | 1.421  | 1.444  |
> 1.516 | 1.352 | 100.0%  | 100   |
> > | ovn.bind_ovs_vm                  | 0.411 | 0.455  | 0.472  | 0.476  |
> 0.5   | 0.456 | 100.0%  | 100   |
> > | ovn.bind_internal_vm             | 0.806 | 0.893  | 0.968  | 0.989  |
> 1.043 | 0.896 | 100.0%  | 100   |
> > | ovn_network.wait_port_ping       | 0.226 | 0.253  | 0.325  | 0.329  |
> 0.347 | 0.267 | 100.0%  | 100   |
> > | total                            | 2.517 | 3.137  | 3.718  | 3.749  |
> 3.797 | 3.135 | 100.0%  | 100   |
> >
>
> +----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> > Load duration: 313.99292826652527
> > Full duration: 315.29931354522705
> >
> > I ran same tests but with 1000 lports and below are the results with
> > these patches
> >
> >
>
> +-------------------------------------------------------------------------------------------------------+
> > |                                         Response Times (sec)
>                                |
> >
>
> +----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> > | action                           | min   | median | 90%ile | 95%ile |
> max   | avg   | success | count |
> >
>
> +----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> > | ovn.create_or_update_address_set | 0.483 | 0.555  | 0.6    | 0.615  |
> 0.661 | 0.555 | 100.0%  | 1000  |
> > | ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    |
> 0.002 | 0.0   | 100.0%  | 1000  |
> > | ovn.create_port_group_acls       | 0.973 | 1.101  | 1.176  | 1.195  |
> 1.271 | 1.097 | 50.0%   | 1000  |
> > | ovn_network.bind_port            | 1.239 | 1.371  | 1.444  | 1.47   |
> 1.557 | 1.373 | 100.0%  | 1000  |
> > | ovn.bind_ovs_vm                  | 0.409 | 0.482  | 0.522  | 0.541  |
> 0.597 | 0.486 | 100.0%  | 1000  |
> > | ovn.bind_internal_vm             | 0.784 | 0.882  | 0.945  | 0.968  |
> 1.063 | 0.887 | 100.0%  | 1000  |
> > | ovn_network.wait_port_ping       | 0.218 | 0.251  | 0.313  | 0.324  |
> 0.395 | 0.262 | 100.0%  | 1000  |
> > | total                            | 2.465 | 3.251  | 3.956  | 4.016  |
> 4.226 | 3.274 | 100.0%  | 1000  |
> >
>
> +----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> > Load duration: 3279.292845249176
> > Full duration: 3280.6857619285583
> >
> >
> > v11 -> v12
> > ----
> >  * Rebased the patches to latest master.
> >  * Add a new patch p7 which changes the signature of some of
> >    the static functions added recently in binding.c so that the out
> >    param is the last param.
> >
> > v10 -> v11
> > ----
> >  * The firt 3 patches of v10 are now merged to master.
> >  * The v11 has now 6 patches.
> >  * Addressed the review comments from Dumitru.
> >  * Added another new patch - which adds the util function
> >    get_unique_lport_key() and use this function in places
> >    where it was generating this key earlier.
> >
> > v9 -> v10
> > ----
> >  * Addressed review comments.
> >  * Changed the patch 4 from adding a separate tracking variable in I-P
> >    engine to just adding a new function - clear_tracked_data() as per
> >    the review comments.
> >  * Dropped the patch 9 - "ovn-controller: Handle sbrec_chassis changes
> incrementally."
> >    from the series. I couldn't address the review comments for this patch
> in v9.
> >    Hence dropped this patch for now. I'll work on it later and submit
> >    the patch separately.
> >  * Added a new test only patch - patch 9 in ovn-performance.at to test
> the
> >    distributed logical router ports scenario and BFD.
> >
> > v8 -> v9
> > ----
> >  * Addressed the review comments from Dumitru and missed v7 comments from
> >    Han.
> >  * Any change to the 'local_lport_ids' while handling the OVS interface
> and Port
> >    binding changes in binding.c is now added to the tracked
> >    datapaths which was not done earlier.
> >  * Dropped the check to lflow_evaluate_pb_changes() in flow_output port
> >    binding handler as it is not required.
> >
> > v7 -> v8
> > ----
> >  * Dropped the patch 4 as it is not needed, thanks to Han.
> >  * Swapped the patches 5 and 6, which are now patch 4 and 5. The v8 patch
> 5 will now make
> >    use of tracked data support of engine to clear the physical_flow
> >    changes.
> >  * Addressed comments from Han. Added comments in Patch 5 and Patch 6.
> >
> > v6 -> v7
> > ----
> >   * Addressed the review comments from Han in patch 1 and patch 2.
> >
> > v5 -> v6
> > ----
> >   * Addressed the review comments from Dumitru.
> >   * Patch 1 and Patch 2 are significantly changed due to
> >     further refactoring.
> >
> > v4 -> v5
> > ----
> >   * Applied patch 1 of v4 to master.
> >   * Addressed the review comments from Han for patch 2.
> >   * Rebased to latest master.
> >
> > v3 -> v4
> > ----
> >   * A small fix in patch 3 when binding the port for ovs interface
> >     change.
> >   * Rebased to latest master.
> >
> >
> > v2 -> v3
> > ----
> >   * Added back the patch 5 and 6 and added 4 more patches. So totally
> >     totally 10 patches in the series
> >   * Handling the runtime data changes in flow computation.
> >   * Handling sbrec_chassis changes.
> >
> > v1 -> v2
> > ------
> >   * Addressed the review comments from Han in patch 1, 2 and 3.
> >   * Removed patch 5 and 6 from the series. As per the comments
> >     from Han, we should handle runtime data changes in flow output
> >     engine. But the patch 6 of the series had added a no-op
> >     handler. So removed these 2 patches until those are addressed.
> >
> > RFC v2 -> v1
> > ---------
> >  * Fixed the 2 failing test cases.
> >  * Updated the commit messages.
> >
> >
> > RFC v1 -> RFC v2
> > ---------
> >  * Added 2 new patches
> >  * Patch 5 (ofctrl_check_and_add_flow) was submitted earlier too and
> >    the previous discussion is here -
> https://patchwork.ozlabs.org/patch/1202417/
> >  * Patch 6 handles I-P for ct_zone and OVS interface changes in
> >    flow_output_run stage.
> > Numan Siddique (6):
> >   Refactor binding_run()to take two context argument - binding_ctx_in
> >     and binding_ctx_out.
> >   ovn-controller: Refactor binding.c
> >   ovn-controller: I-P for port binding in runtime_data stage
> >   ovn-controller: I-P for datapath binding
> >   ofctrl_check_and_add_flow: Replace the actions of an existing flow if
> >     actions have changed.
> >   ovn-controller: I-P for ct zone  and OVN
> >
> >
> > Numan Siddique (6):
> >   I-P engine: Provide the option for an engine to clear tracked engine
> >     data in every run.
> >   ovn-controller: I-P for ct zone and OVS interface changes in flow
> >     output stage.
> >   ovn-controller: Handle runtime data changes in flow output engine
> >   tests: Enhance ovn-performance testing by adding gw router port.
> >   Add an util function get_unique_lport_key() for generating unique
> >     lport key.
> >   binding.c: Reorder out params of some of the static functions.
> >
> > Venkata Anil (1):
> >   ovn-controller: Use the tracked runtime data changes for flow
> >     calculation.
> >
> >  controller/binding.c        | 263 +++++++++++++++++--------
> >  controller/binding.h        |  47 ++++-
> >  controller/lflow.c          |  88 ++++++++-
> >  controller/lflow.h          |  12 +-
> >  controller/ovn-controller.c | 374 +++++++++++++++++++++++++++++++-----
> >  controller/physical.c       |  51 +++++
> >  controller/physical.h       |   5 +-
> >  lib/inc-proc-eng.c          |   8 +
> >  lib/inc-proc-eng.h          |   9 +
> >  lib/ovn-util.h              |   8 +
> >  tests/ovn-performance.at    | 136 +++++++++++--
> >  11 files changed, 854 insertions(+), 147 deletions(-)
> >
> > --
> > 2.26.2
> >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>