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

Re: [Xen-devel] [PATCH 1/2] xen, libxc: Introduced XEN_DOMCTL_emulate_each_rep



On 09/17/2015 03:59 PM, Andrew Cooper wrote:
> On 15/09/15 10:19, Razvan Cojocaru wrote:
>> Previously, if vm_event emulation support was enabled, then REP
>> optimizations were disabled when emulating REP-compatible
>> instructions. This patch allows fine-tuning of this behaviour by
>> providing a dedicated libxc helper function.
>>
>> Signed-off-by: Razvan Cojocaru <rcojocaru@xxxxxxxxxxxxxxx>
> 
> This disables all rep optimisations by default, so on its own is
> inappropriate.

REP optimizations are enabled by default. Emulate_each_rep is initially
set to 0, when struct hvm_domain is being initialized, which means that
REP optimizations are enabled. I've tested this and it does work, am I
missing something?

> I am also not sure that an individual domctl subop is appropriate.  Its
> purpose is to undo a performance hit caused by introspection, so should
> live as an introspection subop IMO.

Do you mean xc_monitor_emulate_each_rep() instead of
xc_domain_emulate_each_rep()?

I've placed this in its own domctl subop because it's not introspection
(or vm_event) specific. The change in
xen/arch/x86/hvm/emulate.c enables / disables REP emulation
optimizations regardless of whether there's a vm_event client or not. I
thought this might come handy for somebody else too.

>> ---
>>  tools/libxc/include/xenctrl.h    |   11 +++++++++++
>>  tools/libxc/xc_domain.c          |   18 ++++++++++++++++++
>>  xen/arch/x86/hvm/emulate.c       |    2 +-
>>  xen/common/domctl.c              |    5 +++++
>>  xen/include/asm-x86/hvm/domain.h |    1 +
>>  xen/include/public/domctl.h      |    8 ++++++++
>>  6 files changed, 44 insertions(+), 1 deletion(-)
>>
>> diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
>> index 3482544..4ece851 100644
>> --- a/tools/libxc/include/xenctrl.h
>> +++ b/tools/libxc/include/xenctrl.h
>> @@ -643,6 +643,17 @@ int xc_domain_node_getaffinity(xc_interface *xch,
>>                                 xc_nodemap_t nodemap);
>>  
>>  /**
>> + * This function enables / disables emulation for each REP for a
>> + * REP-compatible instruction.
>> + *
>> + * @parm xch a handle to an open hypervisor interface.
>> + * @parm domid the domain id one wants to get the node affinity of.
>> + * @parm enable if 0 optimize when possible, else emulate each REP.
>> + * @return 0 on success, -1 on failure.
>> + */
>> +int xc_domain_emulate_each_rep(xc_interface *xch, uint32_t domid, int 
>> enable);
>> +
>> +/**
>>   * This function specifies the CPU affinity for a vcpu.
>>   *
>>   * There are two kinds of affinity. Soft affinity is on what CPUs a vcpu
>> diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
>> index e7278dd..19b2e46 100644
>> --- a/tools/libxc/xc_domain.c
>> +++ b/tools/libxc/xc_domain.c
>> @@ -2555,6 +2555,24 @@ int xc_domain_soft_reset(xc_interface *xch,
>>      domctl.domain = (domid_t)domid;
>>      return do_domctl(xch, &domctl);
>>  }
>> +
>> +int xc_domain_emulate_each_rep(xc_interface *xch, uint32_t domid, int 
>> enable)
>> +{
>> +    int ret = -1;
>> +    DECLARE_DOMCTL;
>> +
>> +    domctl.cmd = XEN_DOMCTL_emulate_each_rep;
>> +    domctl.domain = (domid_t)domid;
>> +    domctl.u.emulate_each_rep.op = enable;
>> +
>> +    ret = do_domctl(xch, &domctl);
>> +
>> +    if ( ret == -ESRCH )
>> +        errno = ENOENT;
> 
> Why do you override ESRCH?  ESRCH is the expected error for a missing
> domain.

I shouldn't, really. This is a copy/paste issue - I've copied and
changed a similar function in Xen 4.4, and that code just got carried
over to this patch. I'll remove that check.


Thanks,
Razvan

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