|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] PVH CPU hotplug design document
>>> On 12.01.17 at 20:00, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 12/01/17 12:13, Roger Pau Monné wrote:
>> ## Proposed solution using the STAO
>>
>> The general idea of this method is to use the STAO in order to hide the pCPUs
>> from the hardware domain, and provide processor objects for vCPUs in an extra
>> SSDT table.
>>
>> This method requires one change to the STAO, in order to be able to notify
>> the
>> hardware domain of which processors found in ACPI tables are pCPUs. The
>> description of the new STAO field is as follows:
>>
>> | Field | Byte Length | Byte Offset | Description
>> |
>>
>> |--------------------|:-----------:|:-----------:|--------------------------|
>> | Processor List [n] | - | - | A list of ACPI numbers,
>> |
>> | | | | where each number is the
>> |
>> | | | | Processor UID of a
>> |
>> | | | | physical CPU, and should
>> |
>> | | | | be treated specially by
>> |
>> | | | | the OSPM
>> |
>>
>> The list of UIDs in this new field would be matched against the ACPI
>> Processor
>> UID field found in local/x2 APIC MADT structs and Processor objects in the
>> ACPI
>> namespace, and the OSPM should either ignore those objects, or in case it
>> implements pCPU hotplug, it should notify Xen of changes to these objects.
>>
>> The contents of the MADT provided to the hardware domain are also going to be
>> different from the contents of the MADT as found in native ACPI. The local/x2
>> APIC entries for all the pCPUs are going to be marked as disabled.
>>
>> Extra entries are going to be added for each vCPU available to the hardware
>> domain, up to the maximum number of supported vCPUs. Note that supported
>> vCPUs
>> might be different than enabled vCPUs, so it's possible that some of these
>> entries are also going to be marked as disabled. The entries for vCPUs on the
>> MADT are going to use a processor local x2 APIC structure, and the ACPI
>> processor ID of the first vCPU is going to be UINT32_MAX - HVM_MAX_VCPUS, in
>> order to avoid clashes with IDs of pCPUs.
>
> This is slightly problematic. There is no restriction (so far as I am
> aware) on which ACPI IDs the firmware picks for its objects. They need
> not be consecutive, logical, or start from 0.
>
> If STAO is being extended to list the IDs of the physical processor
> objects, we should go one step further and explicitly list the IDs of
> the virtual processor objects. This leaves us flexibility if we have to
> avoid awkward firmware ID layouts.
I don't think we should do this - vCPU IDs are already in MADT. I do,
however, think that we shouldn't name any specific IDs we mean to
use for the vCPU-s, but rather merely guarantee that there won't be
any overlap with the pCPU ones.
>> In order to be able to perform vCPU hotplug, the vCPUs must have an ACPI
>> processor object in the ACPI namespace, so that the OSPM can request
>> notifications and get the value of the \_STA and \_MAT methods. This can be
>> problematic because Xen doesn't know the ACPI name of the other processor
>> objects, so blindly adding new ones can create namespace clashes.
>>
>> This can be solved by using a different ACPI name in order to describe vCPUs
>> in
>> the ACPI namespace. Most hardware vendors tend to use CPU or PR prefixes for
>> the processor objects, so using a 'VP' (ie: Virtual Processor) prefix should
>> prevent clashes.
>
> One system I have to hand (with more than 255 pcpus) uses Cxxx
>
> To avoid namespace collisions, I can't see any option but to parse the
> DSDT/SSDTs to at least confirm that VPxx is available to use.
And additionally using a two character name prefix would significantly
limit the number of vCPU-s we would be able to support going forward.
Just like above, I don't think we should specify the name here at all,
allowing dynamic picking of suitable ones.
>> A Xen GPE device block will be used in order to deliver events related to the
>> vCPUs available to the guest, since Xen doesn't know if there are any bits
>> available in the native GPEs. A SCI interrupt will be injected into the guest
>> in order to trigger the event.
>>
>> The following snippet is a representation of the ASL SSDT code that is
>> proposed
>> for the hardware domain:
>>
>> DefinitionBlock ("SSDT.aml", "SSDT", 5, "Xen", "HVM", 0)
>> {
>> Scope (\_SB)
>> {
>> OperationRegion(XEN, SystemMemory, 0xDEADBEEF, 40)
>> Field(XEN, ByteAcc, NoLock, Preserve) {
>> NCPU, 16, /* Number of vCPUs */
>> MSUA, 32, /* MADT checksum address */
>> MAPA, 32, /* MADT LAPIC0 address */
>> }
[...]
>> Since the position of the XEN data memory area is not know, the hypervisor
>> will
>> have to replace the address 0xdeadbeef with the actual memory address where
>> this structure has been copied. This will involve a memory search of the AML
>> code resulting from the compilation of the above ASL snippet.
>
> This is also slightly risky. If we need to do this, can we get a
> relocation list from the compiled table from iasl?
I expect iasl can't do that, the more that there's not actually any
relocation involved here. I guess we'd need a double compilation
approach, where for both a different address is being specified.
The diff of the two would then allow to create a relocation list.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |