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

Re: [Xen-devel] (v2) Design proposal for RMRR fix

On Thu, Jan 15, 2015 at 9:36 AM, Tian, Kevin <kevin.tian@xxxxxxxxx> wrote:
>> From: Jan Beulich [mailto:JBeulich@xxxxxxxx]
>> Sent: Thursday, January 15, 2015 4:38 PM
>> >>> On 14.01.15 at 19:29, <george.dunlap@xxxxxxxxxxxxx> wrote:
>> > Just to be clear -- what we're talking about here is that at the
>> > do_domain_create() level (called by libxl_domain_create_new()), it will
>> > take a list of pci devices, and the rmrr list above (including "host"
>> > and individual ranges), and generate a list of RMRRs to pass to the
>> > lower layer.  The lower layer will simply see the range, and a "force /
>> > no force" flag, and behave appropriately.  The determination of which
>> > RMRRs to force will be done at the domain_create level.
>> >
>> > Is that about right?
>> That's certainly a sensible model.
> It's really a mess for my outlook to sort multiple threads under same
> topic... so I'll reply to this one after reading through all previous good
> discussions.
> First, sorry that I used '0/1' as a bad example for user options, and thanks
> for your suggestion on a right way defining them.
> I also agree above model. Policy is all decided at domain_create while
> lower layer only reacts to specified regions which have individual policy
> to indicate 'force' or 'not force'.
> We'll need to make that skeleton ready first. Then regarding to config
> interface, how about making some simplification by only considering
> statically-assigned device and hotplug now (leaving migration to future
> based on necessity, and extending that doesn't change low level skeleton)?
> pci option can be extended as:
>         pci = [ 'bdf, rmrr_check=force/try' ]
> domain_create queries Xen hypervisor about RMRRs associated with
> assigned devices, and then mark each region with user specified override.
> User can also specify a rmrr_host option as:
>         rmrr = [ 'host, check=force/try' ]
> when rmrr_host is specified, domain_create queries all RMRRs reported
> in this platform, and mark per-region policy accordingly.
> per-device override is always favored if a conflicting setting in rmrr_host.
> The composed reserved region list is then passed to domain builder,
> which tries to detect and avoid conflicts when populating guest RAM.
> To avoid breaking lowmem/highmem layout, we can define a
> lowmem_guard so if making hole for a region would make lowmem_top
> below lowmem_guard we'll treat this region as a conflict. We may
> either just hardcode the value like 2G (or other reasonable value in your
> mind), or allow user to config e.g.:
>         rmrr = [ 'host, check=force/try', 'lowmem_boundary=2G' ]
> after domain builder, libxl will request actual device assignment to
> Xen hypervisor. At that point, current assignment hypercall needs
> to be extended to include the override value, so Xen will handle
> conflict accordingly when setting up identity map.
> last step is in hvmloader, which is passed with all the necessary RMRR
> information, and then handles potential conflicts accordingly.
> In the future when we think necessary to allow user specify random
> regions for migration usage, it can be easily extended and we can
> argue whether to introduce same override.
> If above high level flow can be agreed, then we can move forward to
> discuss next level detail e.g. how to pass the rmrr list cross different
> components. :-)

I think we're definitely ready to move on.  There are a bunch of tiny
details we could discuss, but those are  mostly minor changes that can
be tweaked when the patches are submitted.


Xen-devel mailing list



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