]> git.proxmox.com Git - ovs.git/commitdiff
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 fb33f72af81c67932ad0755a0c2e3a4f3e580f20..6465fdf143152ea1b4f0e345758d963a43529ec9 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 e3ea29182e471d97cfe85c013d991ecb7e7ebdfc..a17eae7681f5907635c234a7631c23caa49d18d2 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>