It has been observed that when we upgrade openvswitch with thousands of openflow flows already established and there is heavy traffic going through the switch, restoring flows can take a very long time (8 minutes in one use case) with CPU running at 100%. This can make the upgrade very expensive.
This commit starts vswitchd by asking it to wait till flow restore is finished. Once the flows are restored, it resumes normal operations. Bug #16086. Signed-off-by: Gurucharan Shetty <gshe...@nicira.com> --- utilities/ovs-ctl.in | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in index fb33f72..17a0260 100755 --- a/utilities/ovs-ctl.in +++ b/utilities/ovs-ctl.in @@ -306,6 +306,15 @@ restore_ofports () { action "Restoring ofport values" "${script_ofports}" } +flow_restore_wait () { + if [ "$1" = "true" ]; then + ovs_vsctl set open_vswitch . other_config:flow-restore-wait="true" + elif [ "$1" = "false" ]; then + ovs_vsctl --if-exists remove open_vswitch . other_config \ + flow-restore-wait="true" + fi +} + restore_flows () { [ -x "${script_flows}" ] && \ action "Restoring saved flows" "${script_flows}" @@ -373,9 +382,13 @@ force_reload_kmod () { action "Removing openvswitch module" rmmod openvswitch fi + # Start vswitchd by asking it to wait till flow restore is finished. + flow_restore_wait "true" start_forwarding + # Restore saved flows and inform vswitchd that we are done. restore_flows + flow_restore_wait "false" add_managers restore_interfaces @@ -418,10 +431,14 @@ restart () { restore_ofports stop_forwarding + + # Start vswitchd by asking it to wait till flow restore is finished. + flow_restore_wait "true" start_forwarding - # Restore the saved flows. + # Restore saved flows and inform vswitchd that we are done. restore_flows + flow_restore_wait "false" add_managers # Restore the interfaces if required. Return true even if restore fails. -- 1.7.9.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev