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

Re: [Xen-devel] [PATCH v2 16/17] libxc/xc_dom_arm: Copy ACPI tables to guest space





On 07/25/2016 07:40 PM, Stefano Stabellini wrote:
On Mon, 25 Jul 2016, Boris Ostrovsky wrote:
On 07/25/2016 06:06 PM, Stefano Stabellini wrote:
On Mon, 25 Jul 2016, George Dunlap wrote:
On Thu, Jul 21, 2016 at 10:15 PM, Stefano Stabellini
<sstabellini@xxxxxxxxxx> wrote:
You are assuming that the guest will map the ACPI blob with the same
attributes as the rest of the superpage.

IHMO, a sane operating system will want to map the ACPI blob read-only.
That's true. But there are other things which might be mapped
differently and could shatter a stage-1 superpage mapping (especially on
x86 that has a much more complex memory map than ARM). Obviously adding
one more is not doing it any good, but it might not make a difference in
practice.

Anyway, I agree with Julien that his suggestion is the best for ARM. If
the libxl maintainers are willing to accept two different code paths for
this on ARM and x86, then I am fine with it too.
Sorry to be a bit late to this thread -- there's a interface principle
that I think we should at some point have a larger discussion about:
whether "maxmem" means the amount of RAM which the guest sees as RAM,
or whether "maxmem" means the amount of RAM that the administrator
sees as used by the guest.  At the moment tnhere's no consistent
answer actually; but I am strongly of the opinion that for usability
the best answer is for "memory" to be the *total* amount of *host*
memory used by the guest.  In an ideal world, the admin should be able
to do "xl info", see that there is 3000MiB free, and then start a
guest with 3000MiB and expect it to succeed.  At the moment he has to
guess.
I don't want to add to the confusion, but maxmem is often higher than
the actual memory allocated for the guest at any given moment, given
that it's the upper limit enforced by the hypervisor (maxmem and mem are
often different, think about ballooning). So how can it be "the amount
of RAM that the administrator sees as used by the guest"? At best it
could be "the amount of RAM that the administrator sees could be at most
used by the guest" or "the amount of RAM that the administrator sees as
allocated on behalf of the guest at boot".


To confirm, do you include memory allocated by the hypervisor to keep
track of the guest (i.e struc domain, struct vcpu...)?

If not, the problem stays the same because the admin will have to know
how much memory Xen will allocate to keep track of the guest. So if "xl
info" tells you that 3000MiB is free, you will only be able to use
3000MiB - few kilobytes.
That's right, unfortunately all those structs allocated by the
hypervisor are completely unknown to the tootlstack. However they should
be an order of magnitude or two smaller than things like the videoram,
the ethernet blob (on x86) or the ACPI blob. So taking the memory for
ACPI and videoram from the existing maxmem pool without increasing it,
would significantly improve, but not completely solve, the problem
described by George.


Going back to the discussion about how to account for the ACPI blob in
maxmem, let's make this simple, if we increase maxmem by the size of the
ACPI blob:

- the toolstack allocates more RAM than expected (bad)
- when the admin specifies 1GB of RAM, the guest actually gets 1GB of
   usable RAM (good)
- things are faster as Xen and the guest can exploit superpage mappings
   more easily at stage-1 and stage-2 (good)

Let's call this option A.

If we do not increase maxmem:

- the toolstack allocates less RAM, closer to the size specified in the
   VM config file (good)
- the guest gets less usable memory than expected, less than what was
   specified in the VM config file (bad)

Not sure I agree with this, at least for x86/Linux: guest gets 1GB of
usable RAM and part of that RAM stores ACPI stuff. Guest is free to
stash ACPI tables somewhere else or ignore them altogether and use that
memory for whatever it wants.
On ARM it will be a ROM (from guest POV)


In which case I don't see why we should take it from maxmem allocation. I somehow thought that there was a choice of whether to put it in ROM or RAM on ARM but if it's ROM only then I don't think there is an option.

IIUIC the toolstack pretends that the blob goes to memory because that's how its interfaces work but that space is not really what we think about when we set memory/maxmem in the configuration file. Unlike x86.

-boris


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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