From: Michael Wang <wangyun@linux.vnet.ibm.com>
To: Peter Zijlstra <a.p.zijlstra@chello.nl>, Ingo Molnar <mingo@elte.hu>
Cc: LKML <linux-kernel@vger.kernel.org>
Subject: [PATCH] sched: Avoid unnecessary work in reweight_entity
Date: Mon, 06 Feb 2012 17:37:48 +0800 [thread overview]
Message-ID: <4F2F9F6C.1090608@linux.vnet.ibm.com> (raw)
From: Michael Wang <wangyun@linux.vnet.ibm.com>
In original code, using account_entity_dequeue and account_entity_enqueue
as a pair will do some work unnecessary, this patch combine the work of
them to save time.
Signed-off-by: Michael Wang <wangyun@linux.vnet.ibm.com>
---
kernel/sched/fair.c | 32 ++++++++++++++++++++++++--------
kernel/sched/sched.h | 8 ++++++++
2 files changed, 32 insertions(+), 8 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 84adb2d..e380518 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -782,11 +782,23 @@ add_cfs_task_weight(struct cfs_rq *cfs_rq, unsigned long weight)
{
cfs_rq->task_weight += weight;
}
+
+static void
+sub_add_cfs_task_weight(struct cfs_rq *cfs_rq, unsigned long sub, unsigned long add)
+{
+ cfs_rq->task_weight -= sub;
+ cfs_rq->task_weight += add;
+}
#else
static inline void
add_cfs_task_weight(struct cfs_rq *cfs_rq, unsigned long weight)
{
}
+
+static void
+sub_add_cfs_task_weight(struct cfs_rq *cfs_rq, unsigned long sub, unsigned long add)
+{
+}
#endif
static void
@@ -938,20 +950,24 @@ static inline void update_entity_shares_tick(struct cfs_rq *cfs_rq)
{
}
# endif /* CONFIG_SMP */
+
static void reweight_entity(struct cfs_rq *cfs_rq, struct sched_entity *se,
unsigned long weight)
{
+ /* commit outstanding execution time */
+ if (cfs_rq->curr == se)
+ update_curr(cfs_rq);
+
if (se->on_rq) {
- /* commit outstanding execution time */
- if (cfs_rq->curr == se)
- update_curr(cfs_rq);
- account_entity_dequeue(cfs_rq, se);
+ update_load_sub_add(&cfs_rq->load, se->load.weight, weight);
+ if (!parent_entity(se)) {
+ update_load_sub_add(&rq_of(cfs_rq), se->load.weight, weight);
+ }
+ if (entity_is_task(se)) {
+ sub_add_cfs_task_weight(cfs_rq, se->load.weight, weight);
+ }
}
-
update_load_set(&se->load, weight);
-
- if (se->on_rq)
- account_entity_enqueue(cfs_rq, se);
}
static void update_cfs_shares(struct cfs_rq *cfs_rq)
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 98c0c26..ec4430f 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -779,6 +779,14 @@ static inline void update_load_sub(struct load_weight *lw, unsigned long dec)
lw->inv_weight = 0;
}
+static inline void update_load_sub_add(struct load_weight *lw, unsigned long dec,
+ unsigned long inc)
+{
+ lw->weight -= dec;
+ lw->weight += inc;
+ lw->inv_weight = 0;
+}
+
static inline void update_load_set(struct load_weight *lw, unsigned long w)
{
lw->weight = w;
--
1.7.4.1
next reply other threads:[~2012-02-06 9:38 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-06 9:37 Michael Wang [this message]
2012-02-06 10:31 ` [PATCH] sched: Avoid unnecessary work in reweight_entity Michael Wang
2012-02-07 2:18 ` Michael Wang
2012-02-07 2:36 ` [PATCH v2] " Michael Wang
2012-02-08 2:10 ` [PATCH v3] sched: " Michael Wang
2012-02-16 14:14 ` [PATCH v4] " Michael Wang
2012-02-16 14:29 ` Peter Zijlstra
2012-02-17 2:28 ` Michael Wang
2012-02-17 6:03 ` [PATCH v5] " Michael Wang
2012-02-18 1:43 ` Michael Wang
2012-02-20 13:08 ` Peter Zijlstra
2012-02-23 10:40 ` Michael Wang
2012-02-24 2:08 ` Michael Wang
2012-02-25 13:56 ` Michael Wang
2012-02-27 4:12 ` Srivatsa Vaddagiri
2012-02-27 5:07 ` Michael Wang
2012-02-27 5:10 ` Srivatsa Vaddagiri
2012-02-27 6:21 ` Michael Wang
2012-02-27 6:44 ` Srivatsa Vaddagiri
2012-02-16 14:32 ` [PATCH v4] " Michael Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F2F9F6C.1090608@linux.vnet.ibm.com \
--to=wangyun@linux.vnet.ibm.com \
--cc=a.p.zijlstra@chello.nl \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).