Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1308544 > unrolled thread
| Started by | Frederic Weisbecker <fweisbec@gmail.com> |
|---|---|
| First post | 2016-01-13 17:10 +0100 |
| Last post | 2016-01-13 17:10 +0100 |
| Articles | 1 — 1 participant |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 1/4] sched: Don't account tickless CPU load on tick Frederic Weisbecker <fweisbec@gmail.com> - 2016-01-13 17:10 +0100
| From | Frederic Weisbecker <fweisbec@gmail.com> |
|---|---|
| Date | 2016-01-13 17:10 +0100 |
| Subject | [PATCH 1/4] sched: Don't account tickless CPU load on tick |
| Message-ID | <qQw9J-2at-37@gated-at.bofh.it> |
The cpu load update on tick doesn't care about dynticks and as such is
buggy when occuring on nohz ticks (including idle ticks) as it resets
the jiffies snapshot that was recorded on nohz entry. We eventually
ignore the potentially long tickless load that happened before the
tick.
We can fix this in two ways:
1) Handle the tickless load, but then we must make sure that a freshly
woken task's load doesn't get accounted as the whole previous tickless
load.
2) Ignore nohz ticks and delay the accounting to the nohz exit point.
For simplicity, this patch propose to fix the issue with the second
solution.
Cc: Byungchul Park <byungchul.park@lge.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Chris Metcalf <cmetcalf@ezchip.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: Luiz Capitulino <lcapitulino@redhat.com>
Cc: Paul E . McKenney <paulmck@linux.vnet.ibm.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
kernel/sched/fair.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 1093873..b849ea8 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -4518,10 +4518,20 @@ void update_cpu_load_nohz(int active)
*/
void update_cpu_load_active(struct rq *this_rq)
{
- unsigned long load = weighted_cpuload(cpu_of(this_rq));
+ unsigned long load;
+
+ /*
+ * If the tick is stopped, we can't reliably update the
+ * load without risking to spuriously account the weight
+ * of a freshly woken task as the whole weight of a long
+ * tickless period.
+ */
+ if (tick_nohz_tick_stopped())
+ return;
/*
* See the mess around update_idle_cpu_load() / update_cpu_load_nohz().
*/
+ load = weighted_cpuload(cpu_of(this_rq));
this_rq->last_load_update_tick = jiffies;
__update_cpu_load(this_rq, load, 1, 1);
}
--
2.6.4
Back to top | Article view | linux.kernel
csiph-web