[ovs-dev] [PATCH] lib/util.c: Optimise bitwise_rscan.

Ben Pfaff blp at ovn.org
Thu Mar 17 05:03:25 UTC 2016


On Wed, Mar 16, 2016 at 08:55:35PM -0700, Han Zhou wrote:
> bitwise_rscan() is found to be hot spot in ovn-controller during OVN
> scalability tests. It is triggered by lflow_run() when processing
> lflow updates from SB ovsdb. The perf result shows:
> 
> +  34.21%  ovn-controller  ovn-controller      [.] bitwise_rscan
> +  16.08%  ovn-controller  libc-2.15.so        [.] 0x80810
> +   7.39%  ovn-controller  [kernel.kallsyms]   [k] 0xffffffff8103e0ba
> +   5.74%  ovn-controller  ovn-controller      [.] lex_token_parse
> +   4.31%  ovn-controller  ovn-controller      [.] ovsdb_idl_next_row
> +   2.84%  ovn-controller  ovn-controller      [.] lflow_run
> 
> After optimization, bitwise_rscan percentage dropped from 34% to less
> than 5%:
> 
> +  23.69%  ovn-controller  libc-2.15.so        [.] 0x13a586
> +  13.47%  ovn-controller  [kernel.kallsyms]   [k] 0xffffffff8103e0ba
> +   5.44%  ovn-controller  ovn-controller      [.] ovsdb_idl_next_row
> +   5.03%  ovn-controller  ovn-controller      [.] lex_token_parse
> +   4.81%  ovn-controller  ovn-controller      [.] bitwise_rscan
> +   3.62%  ovn-controller  ovn-controller      [.] lflow_run
> 
> Signed-off-by: Han Zhou <zhouhan at gmail.com>
> ---
>  lib/util.c | 33 ++++++++++++++++++++++++++++-----
>  1 file changed, 28 insertions(+), 5 deletions(-)
> 
> diff --git a/lib/util.c b/lib/util.c
> index f06dee5..b0887fb 100644
> --- a/lib/util.c
> +++ b/lib/util.c
> @@ -1400,14 +1400,37 @@ bitwise_scan(const void *p, unsigned int len, bool target, unsigned int start,
>  int
>  bitwise_rscan(const void *p, unsigned int len, bool target, int start, int end)
>  {
> -    int ofs;
> +    const uint8_t *s = p;
> +    int start_byte = len - (start / 8 + 1);
> +    int end_byte = len - (end / 8 + 1);
> +    int ofs_byte;
> +    int try;
> +    for (try = 0; try < 2; try++) {

Why does the code need two tries?



More information about the dev mailing list