From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [Xen-changelog] fail domU creation if memory need couldn't be succeed after ballooning out dom0 Date: Thu, 18 Aug 2005 09:35:56 -0500 Message-ID: <43049CCC.3030205@us.ibm.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org 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 > > >