Re: [PATCH RFC] sched/fair: simplfy the work when reweighting entity

From: Dietmar Eggemann
Date: Thu Aug 06 2020 - 13:27:42 EST


On 06/08/2020 04:42, benbjiang(蒋彪) wrote:
>
>
>> On Aug 6, 2020, at 12:21 AM, Dietmar Eggemann <dietmar.eggemann@xxxxxxx> wrote:
>>
>> On 04/08/2020 09:12, Jiang Biao wrote:
>>> If a se is on_rq when reweighting entity, all we need should be
>>> updating the load of cfs_rq, other dequeue/enqueue works could be
>>> redundant, such as,
>>> * account_numa_dequeue/account_numa_enqueue
>>> * list_del/list_add from/into cfs_tasks
>>> * nr_running--/nr_running++
>>
>> I think this could make sense. Have you spotted a code path where this
>> gives you a change?
>>
>> I guess only for a task on the rq, so: entity_is_task(se) && se->on_rq
> Yes, you're right. No other code path I spotted except what you list below.
>
>>
>>> Just simplfy the work. Could be helpful for the hot path.
>>
>> IMHO hotpath is update_cfs_group() -> reweight_entity() but this is only
>> called for '!entity_is_task(se)'.
>>
>> See
>>
>> 3290 if (!gcfs_rq)
>> 3291 return;
>>
>> in update_cfs_group().
> Yes, It is.
> But *nr_running--/nr_running++* works are still redundant for
> ‘!entity_is_task(se)' hot path. :)

True.

> Besides, I guess we could simplify the logic and make it cleaner and
> more readable with this patch.

Yes.

> If it could make sense to you, would you mind if I resend the patch
> with the commit log amended?

LGTM so why not?

>> The 'entity_is_task(se)' case is
>>
>> set_load_weight(struct task_struct *p, ...) -> reweight_task(p, ...) ->
>> reweight_entity(..., &p->se, ...)
>>
>> but here !se->on_rq.
> Yes, indeed.

[...]