* 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