[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v2 8/8] oxenstored: fine tunning the recognition of domain connections with queued input/output



... also, only try to input on a connection with queued input, ditto for output.

Signed-off-by: Zheng Li <dev@xxxxxxxx>
---
 tools/ocaml/xenstored/connection.ml  |  1 +
 tools/ocaml/xenstored/connections.ml | 14 +++++++++-----
 tools/ocaml/xenstored/xenstored.ml   |  7 ++++---
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/tools/ocaml/xenstored/connection.ml 
b/tools/ocaml/xenstored/connection.ml
index 47695f8..1769e23 100644
--- a/tools/ocaml/xenstored/connection.ml
+++ b/tools/ocaml/xenstored/connection.ml
@@ -223,6 +223,7 @@ let pop_in con = Xenbus.Xb.get_in_packet con.xb
 let has_more_input con = Xenbus.Xb.has_more_input con.xb
 
 let has_output con = Xenbus.Xb.has_output con.xb
+let has_old_output con = Xenbus.Xb.has_old_output con.xb
 let has_new_output con = Xenbus.Xb.has_new_output con.xb
 let peek_output con = Xenbus.Xb.peek_output con.xb
 let do_output con = Xenbus.Xb.output con.xb
diff --git a/tools/ocaml/xenstored/connections.ml 
b/tools/ocaml/xenstored/connections.ml
index 1c8d911..1cf916a 100644
--- a/tools/ocaml/xenstored/connections.ml
+++ b/tools/ocaml/xenstored/connections.ml
@@ -98,11 +98,15 @@ let iter cons fct =
        iter_domains cons fct; iter_anonymous cons fct
 
 let has_more_work cons =
-       Hashtbl.fold (fun id con acc ->
-               if Connection.has_more_input con then
-                       con :: acc
-               else
-                       acc) cons.domains []
+       Hashtbl.fold
+               (fun id con (racc, wacc) ->
+                (if Connection.has_more_input con
+                 then con :: racc else racc),
+                (if (* not currently blocked by filled up ring *)
+                    not (Connection.has_old_output con)
+                   && Connection.has_new_output con
+                 then con :: wacc else wacc))
+               cons.domains ([],[])
 
 let key_of_str path =
        if path.[0] = '@'
diff --git a/tools/ocaml/xenstored/xenstored.ml 
b/tools/ocaml/xenstored/xenstored.ml
index c7dc6fa..70dff6f 100644
--- a/tools/ocaml/xenstored/xenstored.ml
+++ b/tools/ocaml/xenstored/xenstored.ml
@@ -379,9 +379,9 @@ let _ =
                        periodic_ops ();
                );
 
-               let mw = Connections.has_more_work cons in
+               let rmw, wmw = Connections.has_more_work cons in
+               let timeout = if List.length rmw > 0 || List.length wmw > 0 
then 0. else -1. in
                let inset, outset = Connections.select cons in
-               let timeout = if List.length mw > 0 then 0. else -1. in
                let rset, wset, _ =
                try
                        Select.select (spec_fds @ inset) outset [] timeout
@@ -393,7 +393,8 @@ let _ =
                        process_special_fds sfds;
                if List.length cfds > 0 || List.length wset > 0 then
                        process_connection_fds store cons domains cfds wset;
-               List.iter (process_domain store cons domains) mw
+               List.iter (process_domain ~mode_switch:true store cons domains) 
rmw;
+               List.iter (process_domain ~mode_switch:false store cons 
domains) wmw
                in
 
        while not !quit
-- 
2.1.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.