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

[Xen-devel] Re: [Xen-changelog] fail domU creation if memory need couldn't be succeed after ballooning out dom0



I don't mean to pick on this patch, but I've been chasing down a number of race conditions in Xend that mostly seem to be rooted in the fact that we do a lot of timeouts.

In general, we should try to avoid using timeouts at all cost. If we do have to use a timeout, then we should make sure it's long enough that the timeout is never going to happen. It's surprisingly easy to have enough load on your system such you miss a 2 second timeout.

Getting rid of this timeout would be difficult so for now, we should at least bump it to 30 or 60 seconds.

Thanks,

Anthony Liguori

Xen patchbot -unstable wrote:

diff -r 02789fed726a -r a06430752462 tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py     Wed Aug 17 23:11:56 2005
+++ b/tools/python/xen/xm/create.py     Thu Aug 18 01:13:49 2005
@@ -23,6 +23,7 @@
import sys
import socket
import commands
+import time

import xen.lowlevel.xc

@@ -674,18 +675,33 @@
    return 0

def balloon_out(dom0_min_mem, opts):
-    """Balloon out to get memory for domU, if necessarily"""
+    """Balloon out memory from dom0 if necessary"""
    SLACK = 4
+    timeout = 20 # 2s
+    ret = 0

    xc = xen.lowlevel.xc.new()
    pinfo = xc.physinfo()
-    free_mem = pinfo['free_pages']/256
-    if free_mem < opts.vals.memory + SLACK:
-        need_mem = opts.vals.memory + SLACK - free_mem
-        cur_alloc = get_dom0_alloc()
-        if cur_alloc - need_mem >= dom0_min_mem:
-            server.xend_domain_mem_target_set(0, cur_alloc - need_mem)
+    free_mem = pinfo['free_pages'] / 256
+ domU_need_mem = opts.vals.memory + SLACK +
+    dom0_cur_alloc = get_dom0_alloc()
+    dom0_new_alloc = dom0_cur_alloc - (domU_need_mem - free_mem)
+
+    if free_mem < domU_need_mem and dom0_new_alloc >= dom0_min_mem:
+
+        server.xend_domain_mem_target_set(0, dom0_new_alloc)
+
+        while dom0_cur_alloc > dom0_new_alloc and timeout > 0:
+            time.sleep(0.1) # sleep 100ms
+            dom0_cur_alloc = get_dom0_alloc()
+            timeout -= 1
+ + if dom0_cur_alloc > dom0_new_alloc:
+            ret = 1
+ del xc
+    return ret

def main(argv):
    random.seed()
@@ -717,7 +733,8 @@
    else:
        dom0_min_mem = xroot.get_dom0_min_mem()
        if dom0_min_mem != 0:
-            balloon_out(dom0_min_mem, opts)
+            if balloon_out(dom0_min_mem, opts):
+                return

        dom = make_domain(opts, config)
        if opts.vals.console_autoconnect:

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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