All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [Xen-changelog] fail domU creation if memory need couldn't be succeed after ballooning out dom0
       [not found] <E1E5gyR-0002hM-Mf@xenbits.xensource.com>
@ 2005-08-18 14:35 ` Anthony Liguori
  0 siblings, 0 replies; only message in thread
From: Anthony Liguori @ 2005-08-18 14:35 UTC (permalink / raw)
  To: xen-devel

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@lists.xensource.com
>http://lists.xensource.com/xen-changelog
>
>  
>

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-08-18 14:35 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <E1E5gyR-0002hM-Mf@xenbits.xensource.com>
2005-08-18 14:35 ` [Xen-changelog] fail domU creation if memory need couldn't be succeed after ballooning out dom0 Anthony Liguori

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.