Message ID | 1446737696-9749-3-git-send-email-stefano.stabellini@eu.citrix.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, 5 Nov 2015, Stefano Stabellini wrote: > Introduce CONFIG_PARAVIRT and PARAVIRT_TIME_ACCOUNTING on ARM. > > The only paravirt interface supported is pv_time_ops.steal_clock, so no > runtime pvops patching needed. > > This allows us to make use of steal_account_process_tick for stolen > ticks accounting. > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > Acked-by: Christopher Covington <cov@codeaurora.org> > Acked-by: Ian Campbell <ian.campbell@citrix.com> > CC: linux@arm.linux.org.uk > CC: will.deacon@arm.com > CC: nico@linaro.org > CC: marc.zyngier@arm.com > CC: cov@codeaurora.org > CC: arnd@arndb.de > CC: olof@lixom.net Russell, are you OK with this patch? > > Changes in v10: > - replace "---help---" with "help" > > Changes in v7: > - ifdef CONFIG_PARAVIRT the content of paravirt.h. > > Changes in v3: > - improve commit description and Kconfig help text; > - no need to initialize pv_time_ops; > - add PARAVIRT_TIME_ACCOUNTING. > --- > arch/arm/Kconfig | 20 ++++++++++++++++++++ > arch/arm/include/asm/paravirt.h | 20 ++++++++++++++++++++ > arch/arm/kernel/Makefile | 1 + > arch/arm/kernel/paravirt.c | 25 +++++++++++++++++++++++++ > 4 files changed, 66 insertions(+) > create mode 100644 arch/arm/include/asm/paravirt.h > create mode 100644 arch/arm/kernel/paravirt.c > > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > index f1ed110..60be104 100644 > --- a/arch/arm/Kconfig > +++ b/arch/arm/Kconfig > @@ -1823,6 +1823,25 @@ config SWIOTLB > config IOMMU_HELPER > def_bool SWIOTLB > > +config PARAVIRT > + bool "Enable paravirtualization code" > + help > + This changes the kernel so it can modify itself when it is run > + under a hypervisor, potentially improving performance significantly > + over full virtualization. > + > +config PARAVIRT_TIME_ACCOUNTING > + bool "Paravirtual steal time accounting" > + select PARAVIRT > + default n > + help > + Select this option to enable fine granularity task steal time > + accounting. Time spent executing other tasks in parallel with > + the current vCPU is discounted from the vCPU power. To account for > + that, there can be a small performance impact. > + > + If in doubt, say N here. > + > config XEN_DOM0 > def_bool y > depends on XEN > @@ -1836,6 +1855,7 @@ config XEN > select ARCH_DMA_ADDR_T_64BIT > select ARM_PSCI > select SWIOTLB_XEN > + select PARAVIRT > help > Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. > > diff --git a/arch/arm/include/asm/paravirt.h b/arch/arm/include/asm/paravirt.h > new file mode 100644 > index 0000000..8435ff59 > --- /dev/null > +++ b/arch/arm/include/asm/paravirt.h > @@ -0,0 +1,20 @@ > +#ifndef _ASM_ARM_PARAVIRT_H > +#define _ASM_ARM_PARAVIRT_H > + > +#ifdef CONFIG_PARAVIRT > +struct static_key; > +extern struct static_key paravirt_steal_enabled; > +extern struct static_key paravirt_steal_rq_enabled; > + > +struct pv_time_ops { > + unsigned long long (*steal_clock)(int cpu); > +}; > +extern struct pv_time_ops pv_time_ops; > + > +static inline u64 paravirt_steal_clock(int cpu) > +{ > + return pv_time_ops.steal_clock(cpu); > +} > +#endif > + > +#endif > diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile > index af9e59b..3e6e937 100644 > --- a/arch/arm/kernel/Makefile > +++ b/arch/arm/kernel/Makefile > @@ -81,6 +81,7 @@ obj-$(CONFIG_VDSO) += vdso.o > ifneq ($(CONFIG_ARCH_EBSA110),y) > obj-y += io.o > endif > +obj-$(CONFIG_PARAVIRT) += paravirt.o > > head-y := head$(MMUEXT).o > obj-$(CONFIG_DEBUG_LL) += debug.o > diff --git a/arch/arm/kernel/paravirt.c b/arch/arm/kernel/paravirt.c > new file mode 100644 > index 0000000..53f371e > --- /dev/null > +++ b/arch/arm/kernel/paravirt.c > @@ -0,0 +1,25 @@ > +/* > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * Copyright (C) 2013 Citrix Systems > + * > + * Author: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > + */ > + > +#include <linux/export.h> > +#include <linux/jump_label.h> > +#include <linux/types.h> > +#include <asm/paravirt.h> > + > +struct static_key paravirt_steal_enabled; > +struct static_key paravirt_steal_rq_enabled; > + > +struct pv_time_ops pv_time_ops; > +EXPORT_SYMBOL_GPL(pv_time_ops); > -- > 1.7.10.4 >
On Tue, 10 Nov 2015, Stefano Stabellini wrote: > On Thu, 5 Nov 2015, Stefano Stabellini wrote: > > Introduce CONFIG_PARAVIRT and PARAVIRT_TIME_ACCOUNTING on ARM. > > > > The only paravirt interface supported is pv_time_ops.steal_clock, so no > > runtime pvops patching needed. > > > > This allows us to make use of steal_account_process_tick for stolen > > ticks accounting. > > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > > Acked-by: Christopher Covington <cov@codeaurora.org> > > Acked-by: Ian Campbell <ian.campbell@citrix.com> > > CC: linux@arm.linux.org.uk > > CC: will.deacon@arm.com > > CC: nico@linaro.org > > CC: marc.zyngier@arm.com > > CC: cov@codeaurora.org > > CC: arnd@arndb.de > > CC: olof@lixom.net > > > Russell, > are you OK with this patch? Russell, I am going to drop this patch and add a small #ifdef to arch/arm/xen/enlighten.c to be able to use this functionality on arm64. If you change your mind let me know. > > > > > > Changes in v10: > > - replace "---help---" with "help" > > > > Changes in v7: > > - ifdef CONFIG_PARAVIRT the content of paravirt.h. > > > > Changes in v3: > > - improve commit description and Kconfig help text; > > - no need to initialize pv_time_ops; > > - add PARAVIRT_TIME_ACCOUNTING. > > --- > > arch/arm/Kconfig | 20 ++++++++++++++++++++ > > arch/arm/include/asm/paravirt.h | 20 ++++++++++++++++++++ > > arch/arm/kernel/Makefile | 1 + > > arch/arm/kernel/paravirt.c | 25 +++++++++++++++++++++++++ > > 4 files changed, 66 insertions(+) > > create mode 100644 arch/arm/include/asm/paravirt.h > > create mode 100644 arch/arm/kernel/paravirt.c > > > > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > > index f1ed110..60be104 100644 > > --- a/arch/arm/Kconfig > > +++ b/arch/arm/Kconfig > > @@ -1823,6 +1823,25 @@ config SWIOTLB > > config IOMMU_HELPER > > def_bool SWIOTLB > > > > +config PARAVIRT > > + bool "Enable paravirtualization code" > > + help > > + This changes the kernel so it can modify itself when it is run > > + under a hypervisor, potentially improving performance significantly > > + over full virtualization. > > + > > +config PARAVIRT_TIME_ACCOUNTING > > + bool "Paravirtual steal time accounting" > > + select PARAVIRT > > + default n > > + help > > + Select this option to enable fine granularity task steal time > > + accounting. Time spent executing other tasks in parallel with > > + the current vCPU is discounted from the vCPU power. To account for > > + that, there can be a small performance impact. > > + > > + If in doubt, say N here. > > + > > config XEN_DOM0 > > def_bool y > > depends on XEN > > @@ -1836,6 +1855,7 @@ config XEN > > select ARCH_DMA_ADDR_T_64BIT > > select ARM_PSCI > > select SWIOTLB_XEN > > + select PARAVIRT > > help > > Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. > > > > diff --git a/arch/arm/include/asm/paravirt.h b/arch/arm/include/asm/paravirt.h > > new file mode 100644 > > index 0000000..8435ff59 > > --- /dev/null > > +++ b/arch/arm/include/asm/paravirt.h > > @@ -0,0 +1,20 @@ > > +#ifndef _ASM_ARM_PARAVIRT_H > > +#define _ASM_ARM_PARAVIRT_H > > + > > +#ifdef CONFIG_PARAVIRT > > +struct static_key; > > +extern struct static_key paravirt_steal_enabled; > > +extern struct static_key paravirt_steal_rq_enabled; > > + > > +struct pv_time_ops { > > + unsigned long long (*steal_clock)(int cpu); > > +}; > > +extern struct pv_time_ops pv_time_ops; > > + > > +static inline u64 paravirt_steal_clock(int cpu) > > +{ > > + return pv_time_ops.steal_clock(cpu); > > +} > > +#endif > > + > > +#endif > > diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile > > index af9e59b..3e6e937 100644 > > --- a/arch/arm/kernel/Makefile > > +++ b/arch/arm/kernel/Makefile > > @@ -81,6 +81,7 @@ obj-$(CONFIG_VDSO) += vdso.o > > ifneq ($(CONFIG_ARCH_EBSA110),y) > > obj-y += io.o > > endif > > +obj-$(CONFIG_PARAVIRT) += paravirt.o > > > > head-y := head$(MMUEXT).o > > obj-$(CONFIG_DEBUG_LL) += debug.o > > diff --git a/arch/arm/kernel/paravirt.c b/arch/arm/kernel/paravirt.c > > new file mode 100644 > > index 0000000..53f371e > > --- /dev/null > > +++ b/arch/arm/kernel/paravirt.c > > @@ -0,0 +1,25 @@ > > +/* > > + * This program is free software; you can redistribute it and/or modify > > + * it under the terms of the GNU General Public License version 2 as > > + * published by the Free Software Foundation. > > + * > > + * This program is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > + * GNU General Public License for more details. > > + * > > + * Copyright (C) 2013 Citrix Systems > > + * > > + * Author: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > > + */ > > + > > +#include <linux/export.h> > > +#include <linux/jump_label.h> > > +#include <linux/types.h> > > +#include <asm/paravirt.h> > > + > > +struct static_key paravirt_steal_enabled; > > +struct static_key paravirt_steal_rq_enabled; > > + > > +struct pv_time_ops pv_time_ops; > > +EXPORT_SYMBOL_GPL(pv_time_ops); > > -- > > 1.7.10.4 > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ >
Hi Stefano, On 11/20/2015 09:31 AM, Stefano Stabellini wrote: > On Tue, 10 Nov 2015, Stefano Stabellini wrote: >> On Thu, 5 Nov 2015, Stefano Stabellini wrote: >>> Introduce CONFIG_PARAVIRT and PARAVIRT_TIME_ACCOUNTING on ARM. >>> >>> The only paravirt interface supported is pv_time_ops.steal_clock, so no >>> runtime pvops patching needed. >>> >>> This allows us to make use of steal_account_process_tick for stolen >>> ticks accounting. >>> >>> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> >>> Acked-by: Christopher Covington <cov@codeaurora.org> >>> Acked-by: Ian Campbell <ian.campbell@citrix.com> >>> CC: linux@arm.linux.org.uk >>> CC: will.deacon@arm.com >>> CC: nico@linaro.org >>> CC: marc.zyngier@arm.com >>> CC: cov@codeaurora.org >>> CC: arnd@arndb.de >>> CC: olof@lixom.net >> >> >> Russell, >> are you OK with this patch? > > Russell, > > I am going to drop this patch and add a small #ifdef to > arch/arm/xen/enlighten.c to be able to use this functionality on arm64. > > If you change your mind let me know. It appears to me as though he's not copied on this message. Regards, Christopher Covington
On Fri, 20 Nov 2015, Christopher Covington wrote: > Hi Stefano, > > On 11/20/2015 09:31 AM, Stefano Stabellini wrote: > > On Tue, 10 Nov 2015, Stefano Stabellini wrote: > >> On Thu, 5 Nov 2015, Stefano Stabellini wrote: > >>> Introduce CONFIG_PARAVIRT and PARAVIRT_TIME_ACCOUNTING on ARM. > >>> > >>> The only paravirt interface supported is pv_time_ops.steal_clock, so no > >>> runtime pvops patching needed. > >>> > >>> This allows us to make use of steal_account_process_tick for stolen > >>> ticks accounting. > >>> > >>> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > >>> Acked-by: Christopher Covington <cov@codeaurora.org> > >>> Acked-by: Ian Campbell <ian.campbell@citrix.com> > >>> CC: linux@arm.linux.org.uk > >>> CC: will.deacon@arm.com > >>> CC: nico@linaro.org > >>> CC: marc.zyngier@arm.com > >>> CC: cov@codeaurora.org > >>> CC: arnd@arndb.de > >>> CC: olof@lixom.net > >> > >> > >> Russell, > >> are you OK with this patch? > > > > Russell, > > > > I am going to drop this patch and add a small #ifdef to > > arch/arm/xen/enlighten.c to be able to use this functionality on arm64. > > > > If you change your mind let me know. > > It appears to me as though he's not copied on this message. He was. He is now in To:.
On Fri, Nov 20, 2015 at 02:40:31PM +0000, Stefano Stabellini wrote: > On Fri, 20 Nov 2015, Christopher Covington wrote: > > Hi Stefano, > > > > On 11/20/2015 09:31 AM, Stefano Stabellini wrote: > > > On Tue, 10 Nov 2015, Stefano Stabellini wrote: > > >> On Thu, 5 Nov 2015, Stefano Stabellini wrote: > > >>> Introduce CONFIG_PARAVIRT and PARAVIRT_TIME_ACCOUNTING on ARM. > > >>> > > >>> The only paravirt interface supported is pv_time_ops.steal_clock, so no > > >>> runtime pvops patching needed. > > >>> > > >>> This allows us to make use of steal_account_process_tick for stolen > > >>> ticks accounting. > > >>> > > >>> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > > >>> Acked-by: Christopher Covington <cov@codeaurora.org> > > >>> Acked-by: Ian Campbell <ian.campbell@citrix.com> > > >>> CC: linux@arm.linux.org.uk > > >>> CC: will.deacon@arm.com > > >>> CC: nico@linaro.org > > >>> CC: marc.zyngier@arm.com > > >>> CC: cov@codeaurora.org > > >>> CC: arnd@arndb.de > > >>> CC: olof@lixom.net > > >> > > >> > > >> Russell, > > >> are you OK with this patch? > > > > > > Russell, > > > > > > I am going to drop this patch and add a small #ifdef to > > > arch/arm/xen/enlighten.c to be able to use this functionality on arm64. > > > > > > If you change your mind let me know. > > > > It appears to me as though he's not copied on this message. > > He was. He is now in To:. I think the patch is fine. Sorry, but I no longer read every email that passes by due to the amount of email I now receive, and due to the nature of modern email clients with their stupid ideas about how to formulate the To: and Cc: headers for replies[*], I attach no significance to being mentioned in either the To: or Cc: headers. Overall, what this means is it's now difficult to attact my attention to any particular thread. Sorry about that, I have no solution to this problem. * - modern mailers have started to preserve the To: and Cc: headers from the message being replied to, which means that if I'm mentioned in the To: header initially, my address stays in the To: header despite the discussion not being directed _at_ me. Hence, deciding what to reply to based on where my address appears in the headers is meaningless with modern mail clients.
On Fri, 20 Nov 2015, Russell King - ARM Linux wrote: > On Fri, Nov 20, 2015 at 02:40:31PM +0000, Stefano Stabellini wrote: > > On Fri, 20 Nov 2015, Christopher Covington wrote: > > > Hi Stefano, > > > > > > On 11/20/2015 09:31 AM, Stefano Stabellini wrote: > > > > On Tue, 10 Nov 2015, Stefano Stabellini wrote: > > > >> On Thu, 5 Nov 2015, Stefano Stabellini wrote: > > > >>> Introduce CONFIG_PARAVIRT and PARAVIRT_TIME_ACCOUNTING on ARM. > > > >>> > > > >>> The only paravirt interface supported is pv_time_ops.steal_clock, so no > > > >>> runtime pvops patching needed. > > > >>> > > > >>> This allows us to make use of steal_account_process_tick for stolen > > > >>> ticks accounting. > > > >>> > > > >>> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > > > >>> Acked-by: Christopher Covington <cov@codeaurora.org> > > > >>> Acked-by: Ian Campbell <ian.campbell@citrix.com> > > > >>> CC: linux@arm.linux.org.uk > > > >>> CC: will.deacon@arm.com > > > >>> CC: nico@linaro.org > > > >>> CC: marc.zyngier@arm.com > > > >>> CC: cov@codeaurora.org > > > >>> CC: arnd@arndb.de > > > >>> CC: olof@lixom.net > > > >> > > > >> > > > >> Russell, > > > >> are you OK with this patch? > > > > > > > > Russell, > > > > > > > > I am going to drop this patch and add a small #ifdef to > > > > arch/arm/xen/enlighten.c to be able to use this functionality on arm64. > > > > > > > > If you change your mind let me know. > > > > > > It appears to me as though he's not copied on this message. > > > > He was. He is now in To:. > > I think the patch is fine. Thanks > Sorry, but I no longer read every email that passes by due to the amount > of email I now receive, and due to the nature of modern email clients with > their stupid ideas about how to formulate the To: and Cc: headers for > replies[*], I attach no significance to being mentioned in either the To: > or Cc: headers. > > Overall, what this means is it's now difficult to attact my attention to > any particular thread. Sorry about that, I have no solution to this > problem. FWIW as somebody that receives pretty large amounts of emails myself with my name in CC or To, I understand and I don't have a solution either :-( > * - modern mailers have started to preserve the To: and Cc: headers from > the message being replied to, which means that if I'm mentioned in the > To: header initially, my address stays in the To: header despite the > discussion not being directed _at_ me. Hence, deciding what to reply to > based on where my address appears in the headers is meaningless with > modern mail clients. > > -- > FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up > according to speedtest.net. >
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index f1ed110..60be104 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1823,6 +1823,25 @@ config SWIOTLB config IOMMU_HELPER def_bool SWIOTLB +config PARAVIRT + bool "Enable paravirtualization code" + help + This changes the kernel so it can modify itself when it is run + under a hypervisor, potentially improving performance significantly + over full virtualization. + +config PARAVIRT_TIME_ACCOUNTING + bool "Paravirtual steal time accounting" + select PARAVIRT + default n + help + Select this option to enable fine granularity task steal time + accounting. Time spent executing other tasks in parallel with + the current vCPU is discounted from the vCPU power. To account for + that, there can be a small performance impact. + + If in doubt, say N here. + config XEN_DOM0 def_bool y depends on XEN @@ -1836,6 +1855,7 @@ config XEN select ARCH_DMA_ADDR_T_64BIT select ARM_PSCI select SWIOTLB_XEN + select PARAVIRT help Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. diff --git a/arch/arm/include/asm/paravirt.h b/arch/arm/include/asm/paravirt.h new file mode 100644 index 0000000..8435ff59 --- /dev/null +++ b/arch/arm/include/asm/paravirt.h @@ -0,0 +1,20 @@ +#ifndef _ASM_ARM_PARAVIRT_H +#define _ASM_ARM_PARAVIRT_H + +#ifdef CONFIG_PARAVIRT +struct static_key; +extern struct static_key paravirt_steal_enabled; +extern struct static_key paravirt_steal_rq_enabled; + +struct pv_time_ops { + unsigned long long (*steal_clock)(int cpu); +}; +extern struct pv_time_ops pv_time_ops; + +static inline u64 paravirt_steal_clock(int cpu) +{ + return pv_time_ops.steal_clock(cpu); +} +#endif + +#endif diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index af9e59b..3e6e937 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile @@ -81,6 +81,7 @@ obj-$(CONFIG_VDSO) += vdso.o ifneq ($(CONFIG_ARCH_EBSA110),y) obj-y += io.o endif +obj-$(CONFIG_PARAVIRT) += paravirt.o head-y := head$(MMUEXT).o obj-$(CONFIG_DEBUG_LL) += debug.o diff --git a/arch/arm/kernel/paravirt.c b/arch/arm/kernel/paravirt.c new file mode 100644 index 0000000..53f371e --- /dev/null +++ b/arch/arm/kernel/paravirt.c @@ -0,0 +1,25 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Copyright (C) 2013 Citrix Systems + * + * Author: Stefano Stabellini <stefano.stabellini@eu.citrix.com> + */ + +#include <linux/export.h> +#include <linux/jump_label.h> +#include <linux/types.h> +#include <asm/paravirt.h> + +struct static_key paravirt_steal_enabled; +struct static_key paravirt_steal_rq_enabled; + +struct pv_time_ops pv_time_ops; +EXPORT_SYMBOL_GPL(pv_time_ops);