Hi all, I am looking into a problem that when the memory size of a VM is changed which part of the original memory is taken away by xen. For example, if I change the memory size of a VM from 2048MB --> 1024MB, how can I tell which are the 1024M byte that will be taken away (I do not want the xen to take the memory spaces that are caching useful data). The command for memory size reconfiguration is "xm mem-set", so I looked the source code of xm. It turned out to be the following python calls: tools/python/xen/xm/main.py: setMemoryTarget(dom, mem_target) tools/python/xen/xend/XendDomainInfo.py: setMemoryTarget: self._safe_set_memory(''memory_dynamic_min'', target * MiB) self._safe_set_memory(''memory_dynamic_max'', target * MiB) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
> > I am looking into a problem that when the memory size of a VM is changed > which part of the original memory is taken away by xen. > For example, if I change the memory size of a VM from 2048MB --> 1024MB, > how can I tell which are the 1024M byte that will be taken away (I do not > want the xen to take the memory spaces that are caching useful data). > > The command for memory size reconfiguration is "xm mem-set", so I looked > the source code of xm. > It turned out to be the following python calls: > > tools/python/xen/xm/main.py: *setMemoryTarget*(dom, mem_target) >> tools/python/xen/xend/XendDomainInfo.py: setMemoryTarget:self.*_safe_set_memory*(''memory_dynamic_min'', target * MiB)> self.*_safe_set_memory*(''memory_dynamic_max'', target * MiB) >xen.xend.XendDomain.instance().*managed_config_save*(self) tools/python/xen/xend/XendDomainInfo.py: *_safe_set_memory* self.info[‘memory_dynamic_min’] = target self.info[‘memory_dynamic_max’] = target It seems that to change the memory size of a VM, you just need to save the new size in somewhere, xenstore? How would the new size take effect? the memory mapping of the VM must be modified somewhere. Look forward to replies, sorry if the question is stupid, a newbie here ^_^ Thanks in advance _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Dan Magenheimer
2009-Nov-02 21:31 UTC
RE: [Xen-devel] Re: how to change the memory size of a VM
There must be a balloon driver in the guest for memory to be dynamically removed from the guest. Then when Xen tells the balloon driver to take memory, the guest decides which pages of memory to give away (thinking that it is giving the memory to an especially hungry device driver). Google for "balloon driver" for more info on how this works on Xen, VMware, other VMMs. If you are interested in much more detail on this, google for "self-ballooning Xen" and "transcendent memory". -----Original Message----- From: Jia Rao [mailto:rickenrao@gmail.com] Sent: Monday, November 02, 2009 1:54 PM To: xen-devel@lists.xensource.com Subject: [Xen-devel] Re: how to change the memory size of a VM I am looking into a problem that when the memory size of a VM is changed which part of the original memory is taken away by xen. For example, if I change the memory size of a VM from 2048MB --> 1024MB, how can I tell which are the 1024M byte that will be taken away (I do not want the xen to take the memory spaces that are caching useful data). The command for memory size reconfiguration is "xm mem-set", so I looked the source code of xm. It turned out to be the following python calls: tools/python/xen/xm/main.py: setMemoryTarget(dom, mem_target) tools/python/xen/xend/XendDomainInfo.py: setMemoryTarget: self._safe_set_memory(''memory_dynamic_min'', target * MiB) self._safe_set_memory(''memory_dynamic_max'', target * MiB) xen.xend.XendDomain.instance().managed_config_save(self) tools/python/xen/xend/XendDomainInfo.py: _safe_set_memory self.info[‘memory_dynamic_min’] = target self.info[‘memory_dynamic_max’] = target It seems that to change the memory size of a VM, you just need to save the new size in somewhere, xenstore? How would the new size take effect? the memory mapping of the VM must be modified somewhere. Look forward to replies, sorry if the question is stupid, a newbie here ^_^ Thanks in advance _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Thanks for the reply, I am using xen 3.3 and linux-2.6.18.8. I did not configure the guest to use balloon driver. Is the balloon driver enabled by default? On Mon, Nov 2, 2009 at 4:31 PM, Dan Magenheimer <dan.magenheimer@oracle.com>wrote:> There must be a balloon driver in the guest for memory to be dynamically > removed from the guest. Then when Xen tells the balloon driver to take > memory, the guest decides which pages of memory to give away (thinking that > it is giving the memory to an especially hungry device driver). Google for > "balloon driver" for more info on how this works on Xen, VMware, other VMMs. > > If you are interested in much more detail on this, google for > "self-ballooning Xen" and "transcendent memory". > > -----Original Message----- > *From:* Jia Rao [mailto:rickenrao@gmail.com] > *Sent:* Monday, November 02, 2009 1:54 PM > *To:* xen-devel@lists.xensource.com > *Subject:* [Xen-devel] Re: how to change the memory size of a VM > > > >> I am looking into a problem that when the memory size of a VM is changed >> which part of the original memory is taken away by xen. >> For example, if I change the memory size of a VM from 2048MB --> 1024MB, >> how can I tell which are the 1024M byte that will be taken away (I do not >> want the xen to take the memory spaces that are caching useful data). >> >> The command for memory size reconfiguration is "xm mem-set", so I looked >> the source code of xm. >> It turned out to be the following python calls: >> >> tools/python/xen/xm/main.py: *setMemoryTarget*(dom, mem_target) >> > > >> tools/python/xen/xend/XendDomainInfo.py: setMemoryTarget: > > self.*_safe_set_memory*(''memory_dynamic_min'', target * MiB) >> self.*_safe_set_memory*(''memory_dynamic_max'', target * >> MiB) >> > xen.xend.XendDomain.instance().*managed_config_save*(self) > > > tools/python/xen/xend/XendDomainInfo.py: *_safe_set_memory* > self.info[‘memory_dynamic_min’] = target > self.info[‘memory_dynamic_max’] = target > > It seems that to change the memory size of a VM, you just need to save the > new size in somewhere, xenstore? > How would the new size take effect? the memory mapping of the VM must be > modified somewhere. > > Look forward to replies, sorry if the question is stupid, a newbie here ^_^ > Thanks in advance > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2009-Nov-02 21:37 UTC
Re: [Xen-devel] Re: how to change the memory size of a VM
On 02/11/2009 20:54, "Jia Rao" <rickenrao@gmail.com> wrote:> It seems that to change the memory size of a VM, you just need to save the new > size in somewhere, xenstore? > How would the new size take effect? the memory mapping of the VM must be > modified somewhere.The VM itself gives up memory back to Xen, after reading the updated memory size from xenstore. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
What I understand here is: Although configured with 2GB memory, the guest only used part of the assigned memory(active onees), gives the unused memory back to xen. Upon reconfigured to 1GB, the guest got informed from xenstore about the new size, and updates its own view of the memory info, like the number in /proc/meminfo. Is it correct ? On Mon, Nov 2, 2009 at 4:37 PM, Keir Fraser <keir.fraser@eu.citrix.com>wrote:> On 02/11/2009 20:54, "Jia Rao" <rickenrao@gmail.com> wrote: > > > It seems that to change the memory size of a VM, you just need to save > the new > > size in somewhere, xenstore? > > How would the new size take effect? the memory mapping of the VM must be > > modified somewhere. > > The VM itself gives up memory back to Xen, after reading the updated memory > size from xenstore. > > -- Keir > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Dan Magenheimer
2009-Nov-02 21:53 UTC
RE: [Xen-devel] Re: how to change the memory size of a VM
If by linux-2.6.18.8 you mean the default Xen-ified kernel from xen.org, yes, the balloon driver should be built by default. If you mean a kernel.org 2.6.18.8 kernel running as a HVM (fully virtualized), no, the balloon driver will not be there by default. If you can type to a command line in your guest, if "cat /proc/xen/balloon" works, the balloon driver is enabled in that guest. -----Original Message----- From: Jia Rao [mailto:rickenrao@gmail.com] Sent: Monday, November 02, 2009 2:38 PM To: Dan Magenheimer Cc: xen-devel@lists.xensource.com Subject: Re: [Xen-devel] Re: how to change the memory size of a VM Thanks for the reply, I am using xen 3.3 and linux-2.6.18.8. I did not configure the guest to use balloon driver. Is the balloon driver enabled by default? On Mon, Nov 2, 2009 at 4:31 PM, Dan Magenheimer <dan.magenheimer@oracle.com> wrote: There must be a balloon driver in the guest for memory to be dynamically removed from the guest. Then when Xen tells the balloon driver to take memory, the guest decides which pages of memory to give away (thinking that it is giving the memory to an especially hungry device driver). Google for "balloon driver" for more info on how this works on Xen, VMware, other VMMs. If you are interested in much more detail on this, google for "self-ballooning Xen" and "transcendent memory". -----Original Message----- From: Jia Rao [mailto:rickenrao@gmail.com] Sent: Monday, November 02, 2009 1:54 PM To: xen-devel@lists.xensource.com Subject: [Xen-devel] Re: how to change the memory size of a VM I am looking into a problem that when the memory size of a VM is changed which part of the original memory is taken away by xen. For example, if I change the memory size of a VM from 2048MB --> 1024MB, how can I tell which are the 1024M byte that will be taken away (I do not want the xen to take the memory spaces that are caching useful data). The command for memory size reconfiguration is "xm mem-set", so I looked the source code of xm. It turned out to be the following python calls: tools/python/xen/xm/main.py: setMemoryTarget(dom, mem_target) tools/python/xen/xend/XendDomainInfo.py: setMemoryTarget: self._safe_set_memory(''memory_dynamic_min'', target * MiB) self._safe_set_memory(''memory_dynamic_max'', target * MiB) xen.xend.XendDomain.instance().managed_config_save(self) tools/python/xen/xend/XendDomainInfo.py: _safe_set_memory self.info[‘memory_dynamic_min’] = target self.info[‘memory_dynamic_max’] = target It seems that to change the memory size of a VM, you just need to save the new size in somewhere, xenstore? How would the new size take effect? the memory mapping of the VM must be modified somewhere. Look forward to replies, sorry if the question is stupid, a newbie here ^_^ Thanks in advance _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel