xen: add steal_clock support on x86
Subsystems (6)
Juergen Gross
maintainerPATCH v2 1/1 xen: add steal_clock support on x86
The pv_time_ops structure contains a function pointer for the "steal_clock" functionality used only by KVM and Xen on ARM. Xen on x86 uses its own mechanism to account for the "stolen" time a thread wasn't able to run due to hypervisor scheduling.
Add support in Xen arch independent time handling for this feature by moving it out of the arm arch into drivers/xen and remove the x86 Xen hack.
---
V2: remove the x86 do_stolen_accounting() hack
--- arch/arm/xen/enlighten.c | 17 ++--------------- arch/x86/xen/time.c | 44 ++------------------------------------------ drivers/xen/time.c | 19 +++++++++++++++++++ include/linux/kernel_stat.h | 1 - include/xen/xen-ops.h | 1 + kernel/sched/cputime.c | 10 ---------- 6 files changed, 24 insertions(+), 68 deletions(-)
arch/arm/xen/enlighten.c +2 -15
@@ -84,19 +84,6 @@ int xen_unmap_domain_gfn_range(struct vm_area_struct *vma, }EXPORT_SYMBOL_GPL (xen_unmap_domain_gfn_range); -static unsigned long long xen_stolen_accounting (int cpu) -{ -struct vcpu_runstate_info state; - -BUG_ON (cpu !=smp_processor_id ()); - -xen_get_runstate_snapshot (&state); - -WARN_ON (state.state != RUNSTATE_running); - -return state.time[RUNSTATE_runnable] + state.time[RUNSTATE_offline]; -} -static void xen_read_wallclock (struct timespec64 *ts) {u32 version;
@@ -355,8 +342,8 @@ static int __init xen_guest_init(void)register_cpu_notifier (&xen_cpu_notifier); - pv_time_ops.steal_clock = xen_stolen_accounting; -static_key_slow_inc (¶virt_steal_enabled); +xen_time_setup_guest (); +if (xen_initial_domain ())pvclock_gtod_register_notifier (&xen_pvclock_gtod_notifier);
arch/x86/xen/time.c +2 -42
68 lines not on this page · raw message
drivers/xen/time.c +19 -0
@@ -75,6 +75,15 @@ bool xen_vcpu_stolen(int vcpu)return per_cpu (xen_runstate, vcpu).state == RUNSTATE_runnable; } +static u64 xen_steal_clock (int cpu) +{ +struct vcpu_runstate_info state; + +BUG_ON (cpu !=smp_processor_id ()); +xen_get_runstate_snapshot (&state); +return state.time[RUNSTATE_runnable] + state.time[RUNSTATE_offline]; +} +void xen_setup_runstate_info (int cpu) {struct vcpu_register_runstate_memory_area area;
@@ -86,3 +95,13 @@ void xen_setup_runstate_info(int cpu)BUG (); } +void __init xen_time_setup_guest (void ) +{ + pv_time_ops.steal_clock = xen_steal_clock; + +static_key_slow_inc (¶virt_steal_enabled); +/* +* We can't set paravirt_steal_rq_enabled as this would require the +* capability to read another cpu's runstate info. +*/ +}
include/linux/kernel_stat.h +0 -1
@@ -92,7 +92,6 @@ static inline void account_process_tick(struct task_struct *tsk, int user)extern void account_process_tick (struct task_struct *,int user);#endif -extern void account_steal_ticks (unsigned long ticks);extern void account_idle_ticks (unsigned long ticks);#endif /* _LINUX_KERNEL_STAT_H */
include/xen/xen-ops.h +1 -0
@@ -21,6 +21,7 @@ void xen_resume_notifier_unregister(struct notifier_block *nb);bool xen_vcpu_stolen (int vcpu);void xen_setup_runstate_info (int cpu); +void __init xen_time_setup_guest (void );void xen_get_runstate_snapshot (struct vcpu_runstate_info *res);int xen_setup_shutdown_event (void );
kernel/sched/cputime.c +0 -10
@@ -490,16 +490,6 @@ void account_process_tick(struct task_struct *p, int user_tick) }/* -* Account multiple ticks of steal time. -* @p: the process from which the cpu time has been stolen -* @ticks: number of stolen ticks -*/ -void account_steal_ticks (unsigned long ticks) -{ -account_steal_time (jiffies_to_cputime (ticks)); -} - -/* * Account multiple ticks of idle time. * @ticks: number of stolen ticks */
Signature · 1 line
2.6.6
Juergen Gross
maintainerQuoted 10 lines · Juergen Gross
The
pv_time_opsstructure contains a function pointer for the "steal_clock" functionality used only by KVM and Xen on ARM. Xen on x86 uses its own mechanism to account for the "stolen" time a thread wasn't able to run due to hypervisor scheduling.Add support in Xen arch independent time handling for this feature by moving it out of the arm arch into
drivers/xenand remove the x86 Xen hack.Signed-off-by Juergen Gross <[email protected]>
After creating an arm cross environment I found a build error on arm. V3 coming soon.
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel
Juergen Gross
maintainerQuoted 10 lines · Juergen Gross
The
pv_time_opsstructure contains a function pointer for the "steal_clock" functionality used only by KVM and Xen on ARM. Xen on x86 uses its own mechanism to account for the "stolen" time a thread wasn't able to run due to hypervisor scheduling.Add support in Xen arch independent time handling for this feature by moving it out of the arm arch into
drivers/xenand remove the x86 Xen hack.Signed-off-by Juergen Gross <[email protected]>
After creating an arm cross environment I found a build error on arm. V3 coming soon.
Juergen