[XEND] Wait sufficient time for memory to balloon out before creating a new domain.

On the ES7000 when Dom0 boots up with all of system memory and you try
to bring up a DomU with more than 2GB of memory, xend times out before
the memory is freed causing the domain not to be created. This patch
increases the timeout depending on the amount of memory that needs to be
freed. It also places a cap on the sleep time so that it does not grow
without a limit. This fixes bug# 650

http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=3D650

Signed-off-by: Aravindh Puthiyaparambil
<aravindh.puthiyaparambil@unisys.com>
This commit is contained in:
kaf24@firebug.cl.cam.ac.uk committed 2006-05-25 21:41:04 +01:00
1 parent f7040135b3
commit 22490ab62b
1 file changed
+8 -3
+8 -3
View File
@@ -32,6 +32,7 @@ PROC_XEN_BALLOON = '/proc/xen/balloon'
BALLOON_OUT_SLACK = 1 # MiB. We need this because the physinfo details are
# rounded.
RETRY_LIMIT = 10
RETRY_LIMIT_INCR = 5
##
# The time to sleep between retries grows linearly, using this value (in
# seconds). When the system is lightly loaded, memory should be scrubbed and
@@ -118,7 +119,8 @@ def free(required):
retries = 0
sleep_time = SLEEP_TIME_GROWTH
last_new_alloc = None
while retries < RETRY_LIMIT:
rlimit = RETRY_LIMIT
while retries < rlimit:
free_mem = xc.physinfo()['free_memory']
if free_mem >= need_mem:
@@ -127,7 +129,9 @@ def free(required):
return
if retries == 0:
log.debug("Balloon: free %d; need %d.", free_mem, need_mem)
rlimit += ((need_mem - free_mem)/1024) * RETRY_LIMIT_INCR
log.debug("Balloon: free %d; need %d; retries: %d.",
free_mem, need_mem, rlimit)
if dom0_min_mem > 0:
dom0_alloc = get_dom0_current_alloc()
@@ -143,8 +147,9 @@ def free(required):
# Continue to retry, waiting for ballooning.
time.sleep(sleep_time)
if retries < 2 * RETRY_LIMIT:
sleep_time += SLEEP_TIME_GROWTH
retries += 1
sleep_time += SLEEP_TIME_GROWTH
# Not enough memory; diagnose the problem.
if dom0_min_mem == 0:
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.