[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] questions about ballooning

  • To: "Daniel Stodden" <stodden@xxxxxxxxxx>
  • From: weiming <zephyr.zhao@xxxxxxxxx>
  • Date: Sun, 4 Nov 2007 10:34:13 -0500
  • Cc: Xen Developers <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Sun, 04 Nov 2007 07:35:01 -0800
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=Zjf1QwLkxtYeBIKq+i93p55VGnGJRKG73Y1Kd4fJTLXuvHOFA0geifsdqKmFTN3CJK/oxCouQ5+j/SPAAiu0cLxWqo6Q2dkc7rPZPcK7AiAn/GDJ/EHD9OTtOctohJiCp/Nw3ba1pU786J/W6KBnvurbuEac3fsk2faG/cbvgCE=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Hi Daniel,

Very appreciate for your so detailed explanation. You clarified some of my confusion. Before I post my question here, I read the paper "Memory resource Management in VMware ESX server", "art of virtualization", read Xen manual, checked the xen Wiki and searched in the maillist archive but can't get a complete  picture about balloon.

1) when a guesting os starts, how does it determine the amount of physical memory? i.e. which value determines the number of entries in mem_map? Is the value specified in configuration file? 

2) what's the exact role that xm mem-max plays?  I can set it to be higher than the value in configuration file.  I think that it just sets the "new_target" to balloon via xenbus or /proc/xen/balloon, right?

3) Once some pages are "ballooned out", these pages will be utilized by other domains, so if we later try to restore to initial status, how does VMM find available pages?

In increase_reservation(),
rc = HYPERVISOR_ memory_op(XENMEM_populate_physmap, &reservation)
if (rc < nr_pages)

In my understanding, hypervisor *tries* to find some free pages to return to the os.

4)  in balloon.c, there are some functions that I can't find the calling sites. they are dealloc_pte_fn, alloc_empty_pages_and_pagevec, balloon_update_driver_allowance, etc. Are they be called back by hypervisor?

Thanks a lot in advance!

On 11/4/07, Daniel Stodden <stodden@xxxxxxxxxx> wrote:
On Sat, 2007-11-03 at 21:31 -0400, weiming wrote:
> I'm interested in the ballooning, so I read the balloon.c
> I have a questions:
> How is the ballooned pages be used? After decrease_reservation(),
> balloon driver tells the vmm the pages that it gets. Then, how xen
> utilizes this reclaimed pages?

the pages are unmapped by the domain, i.e. there are no further
references to them. the VMM can verify this. after the vmm gets the page
list, no new references will be allowed, so the hypervisor knows for
sure that the domain won't mess around with these pages afterwards. it's
'gone', and only the balloon knows that it's not only allocated, but
indeed *gone*.

alloc/free is maybe best understood like this: to a native guest kernel,
there is no such concept of memory 'disappearing'. machine memory does
not just disappear (except for such deeply esoteric things like memory
hotplug). however, that's what is happening under the VMM. but still,
there's the possibly of taking memory away from the kernel: by
allocating it. as long as the ballon driver allocated that page, no
other entity in the system may access it.

(note that security were at risk with a buggy guest kernel. that's why
this unmapping thing is so important. the VMM must insist that the guest
_cannot_ access the page anymore).

> When other domains (both dom0 and domU) requests increasing
> reservation, will xen allocate these pages to them?

yes. reusing those pages in other domains is the sole purpose of taking
them. there's no point in letting memory idle around. an ideal system
has 100% memory utilization. those frames not used by processes are left
to buffers and caches. fundamental good-OS principle.

> If yes, from increasing_reservation(), it seems that balloon just
> releases the pages that it previously occupied.
> If no, where do these "ballooned" pages go?

it not only releases them, it reinstalls them in the kernel address
space, and reassigns them to the kernel physical/machine translation.
note that it does not need to be the same machine frame. it may be any
other page retrieved from the VMM. that's what the phys_to_machine,
machphys_update and update_va_mapping calls are good for.


Daniel Stodden
LRR     -      Lehrstuhl für Rechnertechnik und Rechnerorganisation
Institut für Informatik der TU München             D-85748 Garching
http://www.lrr.in.tum.de/~stodden         mailto:stodden@xxxxxxxxxx
PGP Fingerprint: F5A4 1575 4C56 E26A 0B33  3D80 457E 82AE B0D8 735B

Xen-devel mailing list

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.