|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH v1 14/16] xen: Credit1: sched_smt_cosched support in __runq_tickle() for pinned vcpus.
When a vcpu which is exclusively pinned to a pcpu wakes up, we only have
one option: tickling that exact pcpu.
If sched_smt_cosched is enabled, however, it only makes sense to do that
if pcpu is in a core where vcpus of the domain are running already.
Signed-off-by: Dario Faggioli <dfaggioli@xxxxxxxx>
---
Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
---
xen/common/sched_credit.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c
index e6f55cafc2..9d6071e229 100644
--- a/xen/common/sched_credit.c
+++ b/xen/common/sched_credit.c
@@ -372,6 +372,7 @@ static inline void __runq_tickle(struct csched_vcpu *new)
unsigned int cpu = new->vcpu->processor;
struct csched_vcpu * const cur = CSCHED_VCPU(curr_on_cpu(cpu));
struct csched_private *prv = CSCHED_PRIV(per_cpu(scheduler, cpu));
+ struct csched_pcpu *spc = CSCHED_PCPU(cpu);
cpumask_t mask, idle_mask, *online;
int balance_step, idlers_empty;
@@ -396,9 +397,21 @@ static inline void __runq_tickle(struct csched_vcpu *new)
cpumask_test_cpu(cpu, &idle_mask)) )
{
ASSERT(cpumask_cycle(cpu, new->vcpu->cpu_hard_affinity) == cpu);
- SCHED_STAT_CRANK(tickled_idle_cpu_excl);
- __cpumask_set_cpu(cpu, &mask);
- goto tickle;
+ spin_lock(&spc->core->lock);
+ /*
+ * If SMT co-scheduling of domains is enabled, we can only tickle
+ * either fully idle cores, or cores where new's domain is running
+ * already in (some of) the other thread(s).
+ */
+ if ( !sched_smt_cosched ||
+ spc->core->sdom == NULL || new->sdom == spc->core->sdom )
+ {
+ spin_unlock(&spc->core->lock);
+ SCHED_STAT_CRANK(tickled_idle_cpu_excl);
+ __cpumask_set_cpu(cpu, &mask);
+ goto tickle;
+ }
+ spin_lock(&spc->core->lock);
}
/*
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |