[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 Wed, 20 Jul 2016, Boris Ostrovsky wrote:
> On 07/20/2016 01:28 PM, Stefano Stabellini wrote:
> > On Wed, 20 Jul 2016, Boris Ostrovsky wrote:
> >> On 07/20/2016 09:41 AM, Julien Grall wrote:
> >>>
> >>> On 20/07/2016 14:33, Boris Ostrovsky wrote:
> >>>> On 07/20/2016 08:33 AM, Julien Grall wrote:
> >>>>> Hi,
> >>>>>
> >>>>> On 14/07/16 14:37, Stefano Stabellini wrote:
> >>>>>> On Wed, 13 Jul 2016, Julien Grall wrote:
> >>>>>>> Hello,
> >>>>>>>
> >>>>>>> On 12/07/2016 17:58, Boris Ostrovsky wrote:
> >>>>>>>> On 07/12/2016 12:10 PM, Julien Grall wrote:
> >>>>>>>>> On 12/07/2016 16:08, Boris Ostrovsky wrote:
> >>>>>>>>>> On 07/12/2016 10:57 AM, Shannon Zhao wrote:
> >>>>>>>>> It will affect some others part of the guest if we don't increment
> >>>>>>>>> the
> >>>>>>>>> "maxmem" requested by the user. For ARM the ACPI blob will be
> >>>>>>>>> exposed
> >>>>>>>>> at a specific address that is outside of the guest RAM (see the
> >>>>>>>>> guest
> >>>>>>>>> memory layout in public/arch-arm.h).
> >>>>>>>>>
> >>>>>>>>> We chose this solution over putting in the RAM because the ACPI
> >>>>>>>>> tables
> >>>>>>>>> are not easily relocatable (compare to the device tree, initrd and
> >>>>>>>>> kernel) so we could not take advantage of superpage in both stage-2
> >>>>>>>>> (hypervisor) and stage-1 (kernel) page table.
> >>>>>>>> Maybe this is something ARM-specific then. For x86 we will want to
> >>>>>>>> keep
> >>>>>>>> maxmem unchanged.
> >>>>>>> I don't think what I described in my previous mail is
> >>>>>>> ARM-specific. The
> >>>>>>> pressure will be more important on the TLBs, if Xen does not use
> >>>>>>> superpage in
> >>>>>>> the stage 2 page tables (i.e EPT for x86) no matter the architecture.
> >>>>>>>
> >>>>>>> IHMO, this seems to be a bigger drawback compare to add few more
> >>>>>>> kilobytes to
> >>>>>>> maxmem in the toolstack for the ACPI blob. You will loose them when
> >>>>>>> creating
> >>>>>>> the intermediate page table in any case.
> >>>>>> I agree with Julien. On ARM we have to increase maxmem because I don't
> >>>>>> think that shattering a superpage is acceptable for just a few KBs. In
> >>>>>> fact, it's not much about increasing maxmem, but it's about keeping
> >>>>>> the
> >>>>>> allocation of guest memory to the value passed by the user in
> >>>>>> "memory",
> >>>>>> so that it can be done in the most efficient way possible. (I am
> >>>>>> assuming users are going to allocate VMs of 2048MB, rather than
> >>>>>> 2049MB.)
> >>>>>>
> >>>>>> I wouldn't want to end up adding to the performance tuning page on the
> >>>>>> wiki "Make sure to add 1 more MB to the memory of your VM to get the
> >>>>>> most out of the system."
> >>>>>>
> >>>>>> I know that the location of the ACPI blob on x86 is different in guest
> >>>>>> memory space, but it seems to me that the problem would be the
> >>>>>> same. Do
> >>>>>> you have 1 gigabyte pages in stage-2 on x86? If so, I would think
> >>>>>> twice
> >>>>>> about this. Otherwise, if you only have 4K and 2MB allocations,
> >>>>>> then it
> >>>>>> might not make that much of a difference.
> >>>>> Looking at the x86 code, 1 gigabyte pages seems to be supported.
> >>>>>
> >>>>> Boris, do you have any opinions on this?
> >>>>
> >>>> I don't think I understand the superpage shattering argument.  In x86
> >>>> the tables live in regular RAM and a guest is free to use those
> >>>> addresses as regular memory.
> >>>>
> >>>> This apparently is different from how ARM manages the tables (you said
> >>>> in an earlier message that they are not part of RAM) so I can see that
> >>>> taking memory from RAM allocation to store the tables may affect how
> >>>> mapping is done, potentially causing GB pages to be broken.
> >>>>
> >>>> In fact (and I am totally speculating here) padding memory for x86 may
> >>>> actually *cause* shattering because we will have (for example) 2049MB of
> >>>> RAM to deal with.
> >>> Correct me if I am wrong. On your series you are populating the page
> >>> at a specific address for the ACPI tables separately to the RAM
> >>> allocation. So you will shatter GB pages if the user provides 2048MB
> >>> because the ACPI tables is accounted in the 2048MB.
> >> And to be honest I am not convinced this was a well selected address
> >> (0xfc000000). I am actually thinking about moving it down (this may
> >> require changing dsdt.asl). I don't know whether I will actually do it
> >> in this version but it is certainly a possibility.
> > I don't understand how this statement fits in the discussion.
> >
> > The memory allocation for the ACPI blob is done by the toolstack
> > separately from the rest of guest memory, leading to two separate
> > stage-2 pagetable allocations of less than 1-gigabyte pages. Is that
> > correct?
> 
> 
> If I move the table lower into memory we won't have to do any extra
> allocation. The memory will have been already allocated for the guest,
> we just map it and copy the tables.

I see, thanks for the explanation. I think this could work for ARM too
and should avoid the stage-2 shattering issue described above.

Julien, what do you think? I agree that having the ACPI blob separate
would be cleaner, but using the same allocation scheme as x86 is
important.

_______________________________________________
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®.