|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 2/7] xen: credit: (micro) optimize csched_runq_steal().
On Fri, Apr 7, 2017 at 5:56 PM, Dario Faggioli
<dario.faggioli@xxxxxxxxxx> wrote:
> Chacking whether or not a vCPU can be 'stolen'
"Checking" -- I'll fix this one on check-in. :-)
> from a peer pCPU's runqueue is relatively cheap.
>
> Therefore, let's do that as early as possible,
> avoiding potentially useless complex checks, and
> cpumask manipulations.
>
> Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx>
Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx>
> ---
> Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
> Cc: Anshul Makkar <anshul.makkar@xxxxxxxxxx>
> ---
> Changes from v2:
> * add an assert enforcing the old !is_running check inside the
> is_migrateable() function.
>
> Changes from v1:
> * fixed a typo in a comment.
> ---
> xen/common/sched_credit.c | 22 ++++++++++++++--------
> 1 file changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c
> index 63a8675..59ed4ca 100644
> --- a/xen/common/sched_credit.c
> +++ b/xen/common/sched_credit.c
> @@ -708,12 +708,15 @@ static inline int
> __csched_vcpu_is_migrateable(struct vcpu *vc, int dest_cpu, cpumask_t *mask)
> {
> /*
> - * Don't pick up work that's in the peer's scheduling tail or hot on
> - * peer PCPU. Only pick up work that prefers and/or is allowed to run
> - * on our CPU.
> + * Don't pick up work that's hot on peer PCPU, or that can't (or
> + * would prefer not to) run on cpu.
> + *
> + * The caller is supposed to have already checked that vc is also
> + * not running.
> */
> - return !vc->is_running &&
> - !__csched_vcpu_is_cache_hot(vc) &&
> + ASSERT(!vc->is_running);
> +
> + return !__csched_vcpu_is_cache_hot(vc) &&
> cpumask_test_cpu(dest_cpu, mask);
> }
>
> @@ -1622,7 +1625,9 @@ csched_runq_steal(int peer_cpu, int cpu, int pri, int
> balance_step)
> BUG_ON( is_idle_vcpu(vc) );
>
> /*
> - * If the vcpu has no useful soft affinity, skip this vcpu.
> + * If the vcpu is still in peer_cpu's scheduling tail, or if it
> + * has no useful soft affinity, skip it.
> + *
> * In fact, what we want is to check if we have any "soft-affine
> * work" to steal, before starting to look at "hard-affine work".
> *
> @@ -1633,8 +1638,9 @@ csched_runq_steal(int peer_cpu, int cpu, int pri, int
> balance_step)
> * vCPUs with useful soft affinities in some sort of bitmap
> * or counter.
> */
> - if ( balance_step == CSCHED_BALANCE_SOFT_AFFINITY
> - && !__vcpu_has_soft_affinity(vc, vc->cpu_hard_affinity) )
> + if ( vc->is_running ||
> + (balance_step == CSCHED_BALANCE_SOFT_AFFINITY
> + && !__vcpu_has_soft_affinity(vc, vc->cpu_hard_affinity)) )
> continue;
>
> csched_balance_cpumask(vc, balance_step, cpumask_scratch);
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> https://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |