[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] CSCHED: Optimize __runq_tickle to reduce IPIs
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1270533572 -3600 # Node ID a3f52abcd7da9efb7bd88ab829cb638ffb4e35ef # Parent aef25086c71c0f640379741acbc251d37755f889 CSCHED: Optimize __runq_tickle to reduce IPIs Limiting the number of idle cpus tickled for vcpu migration purpose to ONLY ONE to get rid of a lot of IPI events which may impact the average cpu idle residency time. The default on option 'tickle_one_idle_cpu=0' can be used to disable this optimization if needed. Signed-off-by: Wei Gang <gang.wei@xxxxxxxxx> --- xen/common/sched_credit.c | 22 ++++++++++++++++++++-- 1 files changed, 20 insertions(+), 2 deletions(-) diff -r aef25086c71c -r a3f52abcd7da xen/common/sched_credit.c --- a/xen/common/sched_credit.c Tue Apr 06 06:56:20 2010 +0100 +++ b/xen/common/sched_credit.c Tue Apr 06 06:59:32 2010 +0100 @@ -228,6 +228,11 @@ static void burn_credits(struct csched_v svc->start_time += (credits * MILLISECS(1)) / CSCHED_CREDITS_PER_MSEC; } +static int opt_tickle_one_idle __read_mostly = 1; +boolean_param("tickle_one_idle_cpu", opt_tickle_one_idle); + +DEFINE_PER_CPU(unsigned int, last_tickle_cpu) = 0; + static inline void __runq_tickle(unsigned int cpu, struct csched_vcpu *new) { @@ -265,8 +270,21 @@ __runq_tickle(unsigned int cpu, struct c } else { - CSCHED_STAT_CRANK(tickle_idlers_some); - cpus_or(mask, mask, csched_priv.idlers); + cpumask_t idle_mask; + + cpus_and(idle_mask, csched_priv.idlers, new->vcpu->cpu_affinity); + if ( !cpus_empty(idle_mask) ) + { + CSCHED_STAT_CRANK(tickle_idlers_some); + if ( opt_tickle_one_idle ) + { + this_cpu(last_tickle_cpu) = + cycle_cpu(this_cpu(last_tickle_cpu), idle_mask); + cpu_set(this_cpu(last_tickle_cpu), mask); + } + else + cpus_or(mask, mask, idle_mask); + } cpus_and(mask, mask, new->vcpu->cpu_affinity); } } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |