The existing implementation uses a switch with
many conditions, that when compiled is translated
to a not optimal series of conditional jumps.

With a lookup table the generated code has less conditional jumps,
that should translate in improving the CPU ability to predict the
jumps.

Performance Comparison:
All the timings are in nanoseconds, "OVS Master" corresponds to 13a1d36.
N is the number of repetitions

Serialize vswitch.ovsschema
N        OVS Master  Lookup Table    Difference    Diff per op
1           233182        200369       32813        32813
10         2724931       1919168      805763        80576.3
100       22802794      24406648    -1603854       -16038.54
1000     253645888     206259760    47386128        47386.128
10000   2352245703    1906839780   445405923        44540.5923
100000 23967770920   19012178655  4955592265        49555.92265

Serialize echo example
N        OVS Master  Lookup Table    Difference    Diff per op
1            3857        12565         -8708        -8708
10          17403         7312         10091         1009.1
100         57859        56613          1246           12.46
1000       592310       528110         64200           64.2
10000     6096334      5576109        520225           52.0225
100000   60970439     58477626       2492813           24.92813

Serialize mutate example
N        OVS Master  Lookup Table    Difference    Diff per op
1            7115          19051         -11936      -11936
10          34110          39561          -5451        -545.1
100        296613         298645          -2032        -20.32
1000      3510499        2930588         579911        579.911
10000    33898710       30278631        3620079        362.0079
100000  305069356      280622992       24446364        244.46364


Signed-off-by: Esteban Rodriguez Betancourt <esteb...@hpe.com>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to