Incremental processing has been implementation in ovn-controller, but we were still doing full comparison between desired flow table and installed flow table every time to figure out the changes need to be pushed to OVS. This series is mainly to utilize the incremental processing information to figure out flow changes to OVS without full table scanning, to further reduce CPU of ovn-controller.
In ovn-scale-test with 3000 HVs and 30k lports, the end-to-end latency between the moment a lflow is updated in SB DB and the moment when all the 3K HVs complete OVS flow updating has reduced around 60% (from 1s to 400ms). perf report also shows ~40% of CPU reduced in ovn-controller. Another important change of this series is the fix of the conjunction handling problem. v1 -> v2: - Addressed Mark's comments for defining different data types for desired flows and installed flows, and related refactoring. (patch 6/9) - Updated comments for the cross reference structures between desired flows and SB UUIDs with a diagram to help understanding. (patch 4/9) Han Zhou (9): ofctrl: change ofctrl_dup_flow to module internal function ovn.at: Fix AT for conjunction case. lflow.c: No need to remove flows for adding new datapath. ovn-controller: Fix conjunction handling with incremental processing. ovn.at: Add test case for duplicated flow handling. ofctrl.c: Maintain references between installed flows and desired flows. ofctrl.c: Refactor - move openflow msg construction to functions. ofctrl: Incremental processing for flow installation by tracking. ofctrl.c: Merge opposite changes of tracked flows before installing. controller/lflow.c | 106 ++++-- controller/ofctrl.c | 1041 +++++++++++++++++++++++++++++++++++++++++---------- controller/ofctrl.h | 39 +- tests/ovn.at | 225 ++++++++++- 4 files changed, 1164 insertions(+), 247 deletions(-) -- 2.1.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
