All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH]  Fix auto-ballooning of dom0 for HVM domains
@ 2006-05-18 17:04 Charles Coffing
  2006-05-18 18:11 ` Charles Coffing
  0 siblings, 1 reply; 12+ messages in thread
From: Charles Coffing @ 2006-05-18 17:04 UTC (permalink / raw)
  To: xen-devel

[-- Attachment #1: Type: text/plain, Size: 1464 bytes --]

Hi,

I've been trying to make the auto-ballooning of domain 0 work reliably
for HVM domains.

Patch #1 is a simple bug fix, in preparation for patch #2.  Patch #2
tries to calculate how much memory is needed for HVM domains (XenSource
bug #521) and is certainly open for discussion.  Patches apply cleanly
to both 3.0-testing and unstable.

Patch #1 (xen-hvm-auto-balloon.diff):
When a domain (whether para- or fully-virtualized) reports how much
overhead memory it requires (via getDomainMemory in image.py), all such
memory was immediately allocated to the domain itself.  This is
certainly incorrect for HVM domains, since additional
increase_reservation calls are made later in qemu.  Since all ballooned
memory is already taken, qemu will fail.  The fix is to treat the
requested memory size and the overhead size as separate values.  The
requested memory size is immediately allocated to the new domain; the
overhead is left unallocated for whatever else might need it later.

Patch #2 (xen-get-dom-memory.diff):
This patch calculates the overhead needed for HVM domains.  If HVM is
supported by the hardware, I add a little ballooning overhead to
paravirtualized VMs also, to avoid low-memory situations.  (There are
various unchecked alloc_domheap_pages calls in shadow*.c that I am
trying to avoid tripping over for now...)  The values in this patch work
fine on 32 bit; I may update them later based on feedback and/or testing
on 64 bit.

Thanks,
Chuck


[-- Attachment #2: xen-hvm-auto-balloon.diff --]
[-- Type: application/octet-stream, Size: 657 bytes --]

Index: xen-3.0-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.0-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -1247,7 +1247,7 @@ class XendDomainInfo:
             m = self.image.getDomainMemory(self.info['memory'] * 1024)
             balloon.free(m)
             xc.domain_setmaxmem(self.domid, m)
-            xc.domain_memory_increase_reservation(self.domid, m, 0, 0)
+            xc.domain_memory_increase_reservation(self.domid, self.info['memory'] * 1024, 0, 0)
 
             self.createChannels()
 

[-- Attachment #3: xen-get-dom-memory.diff --]
[-- Type: application/octet-stream, Size: 2054 bytes --]

Index: xen-3.0-testing/tools/python/xen/xend/image.py
===================================================================
--- xen-3.0-testing.orig/tools/python/xen/xend/image.py
+++ xen-3.0-testing/tools/python/xen/xend/image.py
@@ -19,6 +19,7 @@
 
 import os, string
 import re
+import math
 
 import xen.lowlevel.xc
 from xen.xend import sxp
@@ -143,11 +144,13 @@ class ImageHandler:
                           % (self.ostype, self.vm.getDomid(), str(result)))
 
 
-    def getDomainMemory(self, mem):
+    def getDomainMemory(self, mem_kb):
         """@return The memory required, in KiB, by the domain to store the
-        given amount, also in KiB.  This is normally just mem, but HVM domains
-        have overheads to account for."""
-        return mem
+        given amount, also in KiB.  This is normally just mem, but if HVM is
+        supported, keep a little extra free."""
+        if 'hvm' in xc.xeninfo()['xen_caps']:
+            mem_kb += 4*1024;
+        return mem_kb
 
     def buildDomain(self):
         """Build the domain. Define in subclass."""
@@ -379,15 +382,20 @@ class HVMImageHandler(ImageHandler):
         os.waitpid(self.pid, 0)
         self.pid = 0
 
-    def getDomainMemory(self, mem):
+    def getDomainMemory(self, mem_kb):
         """@see ImageHandler.getDomainMemory"""
-        page_kb = 4
-        extra_pages = 0
         if os.uname()[4] == 'ia64':
             page_kb = 16
             # ROM size for guest firmware, ioreq page and xenstore page
             extra_pages = 1024 + 2
-        return mem + extra_pages * page_kb
+        else:
+            page_kb = 4
+            # This was derived emperically:
+            #   2.4 MB overhead per 1024 MB RAM + 8 MB constant
+            #   + 4 to avoid low-memory condition
+            extra_mb = (2.4/1024) * (mem_kb/1024.0) + 12;
+            extra_pages = int( math.ceil( extra_mb*1024 / page_kb ))
+        return mem_kb + extra_pages * page_kb
 
     def register_shutdown_watch(self):
         """ add xen store watch on control/shutdown """

[-- Attachment #4: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 12+ messages in thread
* RE: [PATCH]  Fix auto-ballooning of dom0 for HVM domains
@ 2006-05-19  4:23 Jiang, Yunhong
  2006-05-19 15:15 ` Ewan Mellor
  2006-05-19 19:59 ` Charles Coffing
  0 siblings, 2 replies; 12+ messages in thread
From: Jiang, Yunhong @ 2006-05-19  4:23 UTC (permalink / raw)
  To: Charles Coffing, xen-devel

[-- Attachment #1: Type: text/plain, Size: 2331 bytes --]

Hi, Charles
	Just one suggestion, for  xen-hvm-auto-balloon.diff, how about
change 
             xc.domain_setmaxmem(self.domid, m)
 
to 
             xc.domain_setmaxmem(self.domid, self.info['memory'] * 1024)

The maxmem would be used to check when guest try to increase memory.

Also, does anyone know the what the BALLOON_OUT_SLACK on
tools/python/xen/xend/balloon.py stands for? The comments said it is
"physinfo details are rounded".

Thanks
Yunhong Jiang

 >-----Original Message-----
>From: xen-devel-bounces@lists.xensource.com 
>[mailto:xen-devel-bounces@lists.xensource.com] On Behalf Of 
>Charles Coffing
>Sent: Friday, May 19, 2006 1:04 AM
>To: xen-devel@lists.xensource.com
>Subject: [Xen-devel] [PATCH] Fix auto-ballooning of dom0 for 
>HVM domains
>
>Hi,
>
>I've been trying to make the auto-ballooning of domain 0 work reliably
>for HVM domains.
>
>Patch #1 is a simple bug fix, in preparation for patch #2.  Patch #2
>tries to calculate how much memory is needed for HVM domains (XenSource
>bug #521) and is certainly open for discussion.  Patches apply cleanly
>to both 3.0-testing and unstable.
>
>Patch #1 (xen-hvm-auto-balloon.diff):
>When a domain (whether para- or fully-virtualized) reports how much
>overhead memory it requires (via getDomainMemory in image.py), all such
>memory was immediately allocated to the domain itself.  This is
>certainly incorrect for HVM domains, since additional
>increase_reservation calls are made later in qemu.  Since all ballooned
>memory is already taken, qemu will fail.  The fix is to treat the
>requested memory size and the overhead size as separate values.  The
>requested memory size is immediately allocated to the new domain; the
>overhead is left unallocated for whatever else might need it later.
>
>Patch #2 (xen-get-dom-memory.diff):
>This patch calculates the overhead needed for HVM domains.  If HVM is
>supported by the hardware, I add a little ballooning overhead to
>paravirtualized VMs also, to avoid low-memory situations.  (There are
>various unchecked alloc_domheap_pages calls in shadow*.c that I am
>trying to avoid tripping over for now...)  The values in this 
>patch work
>fine on 32 bit; I may update them later based on feedback 
>and/or testing
>on 64 bit.
>
>Thanks,
>Chuck
>
>

[-- Attachment #2: xen-hvm-auto-balloon.diff --]
[-- Type: application/octet-stream, Size: 657 bytes --]

Index: xen-3.0-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.0-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -1247,7 +1247,7 @@ class XendDomainInfo:
             m = self.image.getDomainMemory(self.info['memory'] * 1024)
             balloon.free(m)
             xc.domain_setmaxmem(self.domid, m)
-            xc.domain_memory_increase_reservation(self.domid, m, 0, 0)
+            xc.domain_memory_increase_reservation(self.domid, self.info['memory'] * 1024, 0, 0)
 
             self.createChannels()
 

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 12+ messages in thread
* RE: [PATCH]  Fix auto-ballooning of dom0 for HVM domains
@ 2006-05-19 16:29 Jiang, Yunhong
  0 siblings, 0 replies; 12+ messages in thread
From: Jiang, Yunhong @ 2006-05-19 16:29 UTC (permalink / raw)
  To: Ewan Mellor; +Cc: Charles Coffing, xen-devel

Ewan
	Thanks for your explaination very much !

Thanks
Yunhong Jiang 

>-----Original Message-----
>From: Ewan Mellor [mailto:ewan@xensource.com] 
>Sent: Friday, May 19, 2006 11:15 PM
>To: Jiang, Yunhong
>Cc: Charles Coffing; xen-devel@lists.xensource.com
>Subject: Re: [Xen-devel] [PATCH] Fix auto-ballooning of dom0 
>for HVM domains
>
>On Fri, May 19, 2006 at 12:23:59PM +0800, Jiang, Yunhong wrote:
>
>> Hi, Charles
>> 	Just one suggestion, for  xen-hvm-auto-balloon.diff, how about
>> change 
>>              xc.domain_setmaxmem(self.domid, m)
>>  
>> to 
>>              xc.domain_setmaxmem(self.domid, 
>self.info['memory'] * 1024)
>> 
>> The maxmem would be used to check when guest try to increase memory.
>> 
>> Also, does anyone know the what the BALLOON_OUT_SLACK on
>> tools/python/xen/xend/balloon.py stands for? The comments said it is
>> "physinfo details are rounded".
>
>When you get the free memory from xc.physinfo(), it may report 
>(for example)
>100MB free when actually there are 99.9MB free.  It rounds up 
>because you
>are often just a few pages short of the value you expect, 
>because there are
>pages being used for the I/O shared rings, for example.  This 
>means that when
>deciding how much memory to balloon, we need to subtract 1MB.
>
>Ewan.
>

^ permalink raw reply	[flat|nested] 12+ messages in thread
* RE: [PATCH]  Fix auto-ballooning of dom0 for HVM domains
@ 2006-05-22  8:51 Tian, Kevin
  2006-05-22  9:06 ` Keir Fraser
  2006-05-22 14:51 ` Charles Coffing
  0 siblings, 2 replies; 12+ messages in thread
From: Tian, Kevin @ 2006-05-22  8:51 UTC (permalink / raw)
  To: Charles Coffing, Jiang, Yunhong, xen-devel; +Cc: xen-ia64-devel

>From: Charles Coffing
>Sent: 2006年5月20日 3:59
>> On Thu, May 18, 2006 at 10:23 PM, in message
><A8F9FF3706D1A5479EF62192B976DB441C0594@pdsmsx401.ccr.c
>orp.intel.com>,
>"Jiang, Yunhong" <yunhong.jiang@intel.com> wrote:
>> Hi, Charles
>> 	Just one suggestion, for  xen- hvm- auto- balloon.diff, how
>about
>> change
>>              xc.domain_setmaxmem(self.domid, m)
>>
>> to
>>              xc.domain_setmaxmem(self.domid, self.info['memory']
>*
>1024)
>
>Ideally, yes, I would agree.  But later, in qemu, another
>increase_reservation() is called.  If I make the suggested change, I
>suspect that qemu will fail to get its memory.
>
>Or is this upper limit not checked when increase_reservation() is
>called from dom0?

BTW, could you please explain why following change is required:

+        given amount, also in KiB.  This is normally just mem, but if 
HVM is
+        supported, keep a little extra free."""
+        if 'hvm' in xc.xeninfo()['xen_caps']:
+            mem_kb += 4*1024;
+        return mem_kb

Why do you need to reserve extra memory even for domU as long as 
the platform supports hvm feature? 

P.S I'll send a patch to reverse this change for ia64, since balloon doesn't 
work for xen/ia64 yet and thus we have to allocate all memory at creation 
time.

Thanks,
Kevin

^ permalink raw reply	[flat|nested] 12+ messages in thread
* RE: [PATCH]  Fix auto-ballooning of dom0 for HVM domains
@ 2006-05-22  9:09 Tian, Kevin
  0 siblings, 0 replies; 12+ messages in thread
From: Tian, Kevin @ 2006-05-22  9:09 UTC (permalink / raw)
  To: Keir Fraser; +Cc: Charles Coffing, Jiang, Yunhong, xen-devel, xen-ia64-devel

>From: Keir Fraser [mailto:Keir.Fraser@cl.cam.ac.uk]
>Sent: 2006年5月22日 17:06
>
>
>On 22 May 2006, at 09:51, Tian, Kevin wrote:
>
>> Why do you need to reserve extra memory even for domU as long as
>> the platform supports hvm feature?
>>
>> P.S I'll send a patch to reverse this change for ia64, since balloon
>> doesn't
>> work for xen/ia64 yet and thus we have to allocate all memory at
>> creation
>> time.
>
>It would be nice to avoid needing that kludge at all even on x86. It
>isn't entirely clear to me why it's needed. If it's causing problems
>for ia64 I'm inclined to remove it unless there is a concrete reason
>for keeping it.
>
>  -- Keir

Yes, that breaks xen/ia64 for both domU and domVTI. Though I sent 
out a workaround just now, it's better if you can reverse it directly.

Thanks,
Kevin

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2006-05-22 15:15 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-05-18 17:04 [PATCH] Fix auto-ballooning of dom0 for HVM domains Charles Coffing
2006-05-18 18:11 ` Charles Coffing
  -- strict thread matches above, loose matches on Subject: below --
2006-05-19  4:23 Jiang, Yunhong
2006-05-19 15:15 ` Ewan Mellor
2006-05-19 19:59 ` Charles Coffing
2006-05-19 16:29 Jiang, Yunhong
2006-05-22  8:51 Tian, Kevin
2006-05-22  9:06 ` Keir Fraser
2006-05-22 14:51 ` Charles Coffing
2006-05-22 15:03   ` Keir Fraser
2006-05-22 15:15     ` Charles Coffing
2006-05-22  9:09 Tian, Kevin

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.