ovs-ctl.in: Restore flows with vswitchd packet processing disabled.
authorGurucharan Shetty <gshetty@nicira.com>
Tue, 28 May 2013 13:21:56 +0000 (13:21 +0000)
committerGurucharan Shetty <gshetty@nicira.com>
Fri, 31 May 2013 00:25:24 +0000 (17:25 -0700)
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 <gshetty@nicira.com>
utilities/ovs-ctl.in
vswitchd/vswitch.xml

index fb33f72..6465fdf 100755 (executable)
@@ -306,6 +306,15 @@ restore_ofports () {
         action "Restoring ofport values" "${script_ofports}"
 }
 
+flow_restore_wait () {
+    ovs_vsctl set open_vswitch . other_config:flow-restore-wait="true"
+}
+
+flow_restore_complete () {
+    ovs_vsctl --if-exists remove open_vswitch . other_config \
+        flow-restore-wait="true"
+}
+
 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
     start_forwarding
 
+    # Restore saved flows and inform vswitchd that we are done.
     restore_flows
+    flow_restore_complete
     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
     start_forwarding
 
-    # Restore the saved flows.
+    # Restore saved flows and inform vswitchd that we are done.
     restore_flows
+    flow_restore_complete
     add_managers
 
     # Restore the interfaces if required. Return true even if restore fails.
index e3ea291..a17eae7 100644 (file)
             to <code>false</code> (or remove it entirely from the database).
           </li>
         </ol>
+        <p>
+          The <code>ovs-ctl</code>'s ``restart'' and ``force-reload-kmod''
+          functions use the above config option during hot upgrades.
+        </p>
       </column>
     </group>