[ovs-dev] [PATCH v13 0/8] Add incremental processing

Han Zhou zhouhan at gmail.com
Fri Apr 1 23:09:03 UTC 2016


On Thu, Mar 31, 2016 at 8:05 AM, Ryan Moats <rmoats at us.ibm.com> wrote:

> From: RYAN D. MOATS <rmoats at us.ibm.com>
>
> It looks like v11 and v12 had some interesting rebase issues,
> so v13 is a rebase back to master only
>
> RYAN D. MOATS (8):
>   Make flow table persistent in ovn controller
>   Persist lport and mcgroup indexes
>   Persist local_datapaths and patched_datapaths
>   Add incremental proessing to lflow_run
>   Change encaps_run to work incrementally
>   Convert binding_run to incremental processing.
>   Reset lflow processing when adding/removing patch ports
>   Change physical_run to incremental processing
>
>  lib/ofp-actions.c               |   12 ++
>  lib/ofp-actions.h               |    2 +
>  ovn/controller/binding.c        |   99 +++++++++++++--
>  ovn/controller/binding.h        |    1 +
>  ovn/controller/encaps.c         |  163 +++++++++++++++++-------
>  ovn/controller/lflow.c          |  116 +++++++++++++++--
>  ovn/controller/lflow.h          |    6 +-
>  ovn/controller/lport.c          |  142 +++++++++++++++++++---
>  ovn/controller/lport.h          |   20 +++-
>  ovn/controller/ofctrl.c         |  264
> +++++++++++++++++++++++++++-----------
>  ovn/controller/ofctrl.h         |   18 ++-
>  ovn/controller/ovn-controller.c |   52 +++-----
>  ovn/controller/ovn-controller.h |    2 +
>  ovn/controller/patch.c          |    7 +-
>  ovn/controller/physical.c       |  201 +++++++++++++++++++++++-------
>  ovn/controller/physical.h       |    6 +-
>  16 files changed, 855 insertions(+), 256 deletions(-)
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>

Here is the profiling result from Lei. Based on the testing result, this
version is great! Thanks Ryan.
version

This test uses commit f48e869 on ovs/master as base and OVN incremental
patch v13.

Below patches are already included in ovs/master:

   - ovn-controller: Loopback prevention flows for local ports only.
   -

   ovn-controller: Optimize processing for non-local datapath without patch
   ports.
   -

   ovn-controller: Optimize lex_token memory usage.

Test case running time

For the create and bind 500 lports (on top of 20k lports on 2k HVs), the
running time as below:
ovn_network.create_network   1.846 1.834
ovn.create_lswitch           1.086 1.084
ovn.create_lport             0.77 0.804
ovn_network.bind_port        77.012 71.74
ovn_network.wait_port_up     0.788 0.704
ovn.create_lport (2)         0.758 0.75
ovn_network.bind_port (2)    77.33 70.228
ovn_network.wait_port_up (2) 0.803 0.698
ovn.create_lport (3)         0.821 0.836
ovn_network.bind_port (3)    79.842 72.493
ovn_network.wait_port_up (3) 0.956 0.782
ovn.create_lport (4)         0.795 0.843
ovn_network.bind_port (4)    81.584 72.866
ovn_network.wait_port_up (4) 0.78 0.807
ovn.create_lport (5)         0.837 0.823
ovn_network.bind_port (5)    83.603 72.483
ovn_network.wait_port_up (5) 0.856 0.867
total                        405.199 365.701


Profiling

Before apply ovn incremental processing v13 patch:
-  15.71%  ovn-controller  ovn-controller      [.]
next_real_row

   - next_real_row
      - 47.10% add_logical_flows.isra.2
           lflow_run
           main
      + 21.55% patch_run
      + 10.13% physical_run
      + 9.85% binding_run
      + 9.77% lport_index_init
      + 1.03% encaps_run
-  12.98%  ovn-controller  ovn-controller      [.] ovsdb_idl_next_row
   - ovsdb_idl_next_row
      + 56.97% add_logical_flows.isra.2
      + 29.25% patch_run
      + 5.90% lport_index_init
      + 3.29% binding_run
      + 2.95% physical_run
      + 1.35% encaps_run
-   8.54%  ovn-controller  ovn-controller      [.] physical_run
     physical_run
     main
-   7.89%  ovn-controller  ovn-controller      [.] add_logical_flows.isra.2
     add_logical_flows.isra.2
     lflow_run
     main
-   7.15%  ovn-controller  libc-2.19.so        [.] strlen
   - strlen
      + 26.47% simap_find
      + 24.20% shash_find
      + 23.55% lport_lookup_by_name
      + 12.42% sset_add
      + 4.70% smap_get_node
      + 3.77% port_hash
      + 1.83% physical_run
      + 1.35% lport_index_init
      + 0.84% chassis_tunnel_find
      + 0.54% mcgroup_lookup_by_dp_name
-   4.71%  ovn-controller  ovn-controller      [.] hash_bytes
   - hash_bytes
      + 42.36% smap_get_node
      + 15.57% simap_find_len
      + 9.25% shash_find
      + 8.28% lport_index_init
      + 7.98% lport_lookup_by_name
      + 7.60% sset_add
      + 4.08% port_hash
      + 3.78% chassis_tunnel_find
      + 0.66% physical_run
-   3.26%  ovn-controller  ovn-controller      [.] smap_find__
   + smap_find__
   + smap_get



After apply the patch:
-   5.82%  ovn-controller  libc-2.19.so        [.] __memcmp_sse4_1
   - __memcmp_sse4_1
      - 43.03% ofpacts_equal
           ofctrl_put
           main
      - 30.66% match_equal
           ovn_flow_lookup
           ofctrl_put
           main
      - 26.31% flow_wildcards_equal
           match_equal
         - ovn_flow_lookup
            + 99.99% ofctrl_put
-   5.70%  ovn-controller  [kernel.kallsyms]   [k] clear_page_c_e
   - clear_page_c_e
   - __alloc_pages_nodemask
   - alloc_pages_vma
      - 99.98% handle_mm_fault
           __do_page_fault
           do_page_fault
         - page_fault
            - 85.06% ofctrl_add_flow
               + 58.27% lflow_run
               + 41.73% physical_run
            + 10.40% __memcpy_sse2_unaligned
            + 3.29% 0x7fcf6a546e65
            + 0.98% memset
-   5.22%  ovn-controller  libjemalloc.so.1    [.] free
   - free
      + 27.46% lexer_get
      + 18.00% ofctrl_put
      + 14.46% make_cmp
      + 5.94% expr_annotate__
      + 5.39% crush_and_numeric
      + 4.36% ovn_flow_destroy
      + 3.83% expr_parse_assignment
      + 3.08% lflow_run
      + 2.75% expr_destroy
      + 2.17% expr_parse_string
      + 2.11% expr_constant_set_destroy
      + 1.82% lexer_lookahead
      + 1.79% expr_normalize_and
      + 1.73% expr_matches_destroy
      + 1.65% simap_clear
      + 1.48% expr_combine
      + 1.07% qsort_r
-   5.07%  ovn-controller  ovn-controller      [.] bitwise_rscan
   - bitwise_rscan
   - mf_subvalue_width
   - type_check.isra.15
      - 94.87% make_cmp
           expr_parse_primary
           expr_parse_not
           expr_parse__
           expr_parse
         + expr_parse_string
      + 5.13% expr_parse_assignment


-- 
Best regards,
Han



More information about the dev mailing list