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

[Xen-changelog] [xen stable-4.6] xen/arm: introduce vwfi parameter



commit 82fde4fa369969db64ccd421c399b5557feffa34
Author:     Stefano Stabellini <sstabellini@xxxxxxxxxx>
AuthorDate: Wed Mar 1 11:43:15 2017 -0800
Commit:     Stefano Stabellini <sstabellini@xxxxxxxxxx>
CommitDate: Tue Mar 7 11:26:58 2017 -0800

    xen/arm: introduce vwfi parameter
    
    Introduce new Xen command line parameter called "vwfi", which stands for
    virtual wfi. The default is "trap": Xen traps guest wfi and wfe
    instructions. In the case of wfi, Xen calls vcpu_block on the guest
    vcpu; in the case of guest wfe, Xen calls vcpu_yield on the guest vcpu.
    The behavior can be changed by setting vwfi to "native", in that case
    Xen doesn't trap neither wfi nor wfe, running them in guest context.
    
    The result is strong reduction in irq latency (from 5000ns to 2000ns,
    measured using https://github.com/edgarigl/tbm, the physical timer, and
    1 pcpu dedicated to 1 vcpu). The downside is that the scheduler thinks
    that the guest is busy when actually is sleeping, leading to suboptimal
    scheduling decisions.
    
    Signed-off-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
    Reviewed-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx>
    Reviewed-by: Julien Grall <julien.grall@xxxxxxx>
---
 docs/misc/xen-command-line.markdown | 15 +++++++++++++++
 xen/arch/arm/traps.c                | 17 +++++++++++++++--
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/docs/misc/xen-command-line.markdown 
b/docs/misc/xen-command-line.markdown
index b8f5f67..d99a20a 100644
--- a/docs/misc/xen-command-line.markdown
+++ b/docs/misc/xen-command-line.markdown
@@ -1491,6 +1491,21 @@ Note that if **watchdog** option is also specified vpmu 
will be turned off.
 As the virtualisation is not 100% safe, don't use the vpmu flag on
 production systems (see http://xenbits.xen.org/xsa/advisory-163.html)!
 
+### vwfi
+> `= trap | native
+
+> Default: `trap`
+
+WFI is the ARM instruction to "wait for interrupt". WFE is similar and
+means "wait for event". This option, which is ARM specific, changes the
+way guest WFI and WFE are implemented in Xen. By default, Xen traps both
+instructions. In the case of WFI, Xen blocks the guest vcpu; in the case
+of WFE, Xen yield the guest vcpu. When setting vwfi to `native`, Xen
+doesn't trap either instruction, running them in guest context. Setting
+vwfi to `native` reduces irq latency significantly. It can also lead to
+suboptimal scheduling decisions, but only when the system is
+oversubscribed (i.e., in total there are more vCPUs than pCPUs).
+
 ### watchdog
 > `= force | <boolean>`
 
diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index 1c13b05..5dbc8be 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -98,6 +98,19 @@ static int debug_stack_lines = 40;
 
 integer_param("debug_stack_lines", debug_stack_lines);
 
+static enum {
+       TRAP,
+       NATIVE,
+} vwfi;
+
+static void __init parse_vwfi(const char *s)
+{
+       if ( !strcmp(s, "native") )
+               vwfi = NATIVE;
+       else
+               vwfi = TRAP;
+}
+custom_param("vwfi", parse_vwfi);
 
 void __cpuinit init_traps(void)
 {
@@ -124,8 +137,8 @@ void __cpuinit init_traps(void)
 
     /* Setup hypervisor traps */
     WRITE_SYSREG(HCR_PTW|HCR_BSU_INNER|HCR_AMO|HCR_IMO|HCR_FMO|HCR_VM|
-                 HCR_TWE|HCR_TWI|HCR_TSC|HCR_TAC|HCR_SWIO|HCR_TIDCP|HCR_FB,
-                 HCR_EL2);
+                 (vwfi != NATIVE ? (HCR_TWI|HCR_TWE) : 0) |
+                 HCR_TSC|HCR_TAC|HCR_SWIO|HCR_TIDCP|HCR_FB,HCR_EL2);
     isb();
 }
 
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.6

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

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