Messages in this thread Patch in this message | | | Date | Thu, 09 May 2013 09:24:22 +0800 | From | Alex Shi <> | Subject | Re: [PATCH v5 6/7] sched: consider runnable load average in move_tasks |
| |
Paul,
I am wondering if the following patch needed. The wakeuped migrated task will __synchronize_entity_decay(se); in migrate_task_fair, then it needs to set `se->avg.last_runnable_update -= (-se->avg.decay_count) << 20' before update_entity_load_avg, in order to avoid slept time is updated twice for se.avg.load_avg_contrib in both __syncchronize and update_entity_load_avg.
but if the slept task is waked up from self cpu, it miss the last_runnable_update before update_entity_load_avg(se, 0, 1), so the slept time was used twice in both functions. Is that right?
Regards Alex --- diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index a80ae94..1b49e97 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1532,7 +1532,8 @@ static inline void enqueue_entity_load_avg(struct cfs_rq *cfs_rq, } wakeup = 0; } else { - __synchronize_entity_decay(se); + se->avg.last_runnable_update += __synchronize_entity_decay(se) + << 20; } /* migrated tasks did not contribute to our blocked load */ if (wakeup) { subtract_blocked_load_contrib(cfs_rq, se->avg.load_avg_contrib); update_entity_load_avg(se, 0, 1); }
-- Thanks Alex
| |