[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] credit: generalize __vcpu_has_soft_affinity()
commit 3582093e013824bc66ce87c3a0615772b856a7a9 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Fri Mar 6 16:56:53 2015 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri Mar 6 16:56:53 2015 +0100 credit: generalize __vcpu_has_soft_affinity() As pointed out in the discussion of the patch at http://lists.xenproject.org/archives/html/xen-devel/2015-02/msg03256.html generalizing the conditions here means code elsewhere doesn't need to take into consideration internals of how load balancing in the credit scheduler works. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx> Reviewed-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> --- xen/common/sched_credit.c | 25 ++++++++++++------------- 1 files changed, 12 insertions(+), 13 deletions(-) diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c index 156b43b..bec67ff 100644 --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -279,24 +279,23 @@ __runq_remove(struct csched_vcpu *svc) /* * Hard affinity balancing is always necessary and must never be skipped. - * OTOH, if the vcpu's soft affinity is full (it spans all the possible - * pcpus) we can safely avoid dealing with it entirely. + * But soft affinity need only be considered when it has a functionally + * different effect than other constraints (such as hard affinity, cpus + * online, or cpupools). * - * A vcpu's soft affinity is also deemed meaningless in case it has empty - * intersection with mask, to cover the cases where using the soft affinity - * mask seems legit, but would instead led to trying to schedule the vcpu - * on _no_ pcpu! Typical use cases are for mask to be equal to the vcpu's - * hard affinity, or to the && of hard affinity and the set of online cpus - * in the domain's cpupool. + * Soft affinity only needs to be considered if: + * * The cpus in the cpupool are not a subset of soft affinity + * * The hard affinity is not a subset of soft affinity + * * There is an overlap between the soft affinity and the mask which is + * currently being considered. */ static inline int __vcpu_has_soft_affinity(const struct vcpu *vc, const cpumask_t *mask) { - if ( cpumask_full(vc->cpu_soft_affinity) - || !cpumask_intersects(vc->cpu_soft_affinity, mask) ) - return 0; - - return 1; + return !cpumask_subset(cpupool_online_cpumask(vc->domain->cpupool), + vc->cpu_soft_affinity) && + !cpumask_subset(vc->cpu_hard_affinity, vc->cpu_soft_affinity) && + cpumask_intersects(vc->cpu_soft_affinity, mask); } /* -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |