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

Re: [Xen-devel] [PATCH v3 5/6] ioreq-server: add support for multiple servers



On Fri, Mar 14, 2014 at 11:52 AM, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
> On Wed, 2014-03-05 at 14:48 +0000, Paul Durrant wrote:
>> The legacy 'catch-all' server is always created with id 0. Secondary
>> servers will have an id ranging from 1 to a limit set by the toolstack
>> via the 'max_emulators' build info field. This defaults to 1 so ordinarily
>> no extra special pages are reserved for secondary emulators. It may be
>> increased using the secondary_device_emulators parameter in xl.cfg(5).
>> There's no clear limit to apply to the number of emulators so I've not
>> applied one.
>>
>> Because of the re-arrangement of the special pages in a previous patch we
>> only need the addition of parameter HVM_PARAM_NR_IOREQ_SERVERS to determine
>> the layout of the shared pages for multiple emulators. Guests migrated in
>> from hosts without this patch will be lacking the save record which stores
>> the new parameter and so the guest is assumed to only have had a single
>> emulator.
>>
>> Added some more emacs boilerplate to xenctrl.h and xenguest.h
>>
>> Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
>> ---
>>  docs/man/xl.cfg.pod.5            |    7 +
>>  tools/libxc/xc_domain.c          |  175 +++++++
>>  tools/libxc/xc_domain_restore.c  |   20 +
>>  tools/libxc/xc_domain_save.c     |   12 +
>>  tools/libxc/xc_hvm_build_x86.c   |   24 +-
>>  tools/libxc/xenctrl.h            |   51 ++
>>  tools/libxc/xenguest.h           |   12 +
>>  tools/libxc/xg_save_restore.h    |    1 +
>>  tools/libxl/libxl.h              |    8 +
>>  tools/libxl/libxl_create.c       |    3 +
>>  tools/libxl/libxl_dom.c          |    1 +
>>  tools/libxl/libxl_types.idl      |    1 +
>>  tools/libxl/xl_cmdimpl.c         |    3 +
>>  xen/arch/x86/hvm/hvm.c           |  964 
>> ++++++++++++++++++++++++++++++++++++--
>>  xen/arch/x86/hvm/io.c            |    2 +-
>>  xen/include/asm-x86/hvm/domain.h |   23 +-
>>  xen/include/asm-x86/hvm/hvm.h    |    3 +-
>>  xen/include/asm-x86/hvm/io.h     |    2 +-
>>  xen/include/public/hvm/hvm_op.h  |   70 +++
>>  xen/include/public/hvm/ioreq.h   |    1 +
>>  xen/include/public/hvm/params.h  |    4 +-
>>  21 files changed, 1324 insertions(+), 63 deletions(-)
>>
>> diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
>> index e15a49f..0226c55 100644
>> --- a/docs/man/xl.cfg.pod.5
>> +++ b/docs/man/xl.cfg.pod.5
>> @@ -1281,6 +1281,13 @@ specified, enabling the use of XenServer PV drivers 
>> in the guest.
>>  This parameter only takes effect when device_model_version=qemu-xen.
>>  See F<docs/misc/pci-device-reservations.txt> for more information.
>>
>> +=item B<secondary_device_emulators=NUMBER>
>> +
>> +If a number of secondary device emulators (i.e. in addition to
>> +qemu-xen or qemu-xen-traditional) are to be invoked to support the
>> +guest then this parameter can be set with the count of how many are
>> +to be used. The default value is zero.
>
> This is an odd thing to expose to the user. Surely (lib)xl should be
> launching these things while building the domain and therefore know how
> many there are the config options should be things like
> "use_split_dm_for_foo=1" or device_emulators = ["/usr/bin/first-dm",
> "/usr/local/bin/second-dm"] or something.

I think the idea was that someone may want to hot-plug such an
emulated device later.

I agree that long-term, the standard should be to specify secondary
device models in the config file and have libxl / xl figure out how
many there are.  But I don't think that means that having a way to
specify it explicitly is a bad idea; and I think for development
purposes it might make sense to start with it manually specified and
add the support for multiple emulators in the config file later.

[snip]

>>          xc_set_hvm_param(xch, dom, HVM_PARAM_ACPI_IOPORTS_LOCATION, 1);
>> diff --git a/tools/libxc/xc_domain_save.c b/tools/libxc/xc_domain_save.c
>> index 42c4752..3293e29 100644
>> --- a/tools/libxc/xc_domain_save.c
>> +++ b/tools/libxc/xc_domain_save.c
>> @@ -1731,6 +1731,18 @@ int xc_domain_save(xc_interface *xch, int io_fd, 
>> uint32_t dom, uint32_t max_iter
>>              PERROR("Error when writing the viridian flag");
>>              goto out;
>>          }
>> +
>> +        chunk.id = XC_SAVE_ID_HVM_NR_IOREQ_SERVERS;
>> +        chunk.data = 0;
>> +        xc_get_hvm_param(xch, dom, HVM_PARAM_NR_IOREQ_SERVERS,
>> +                         (unsigned long *)&chunk.data);
>> +
>> +        if ( (chunk.data != 0) &&
>
> Can this ever be 0 for an HVM guest?

If we end up making PVH basically a degenerate case of HVM (without a
device model), then something like this may.

 -George

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


 


Rackspace

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