lkml.org 
[lkml]   [2014]   [Aug]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Subject[PATCH v4 0/6] sched: Add on_rq states and remove several double rq locks
From
Date

This series aims to get rid of some places where locks of two RQs are held
at the same time.

Patch [1/6] is a fix/preparation. It's new in v4 version of series.

Patch [2/6] is a preparation/cleanup. It replaces old (task_struct::on_rq == 1)
with new (task_struct::on_rq == ONRQ_QUEUED) everywhere. No functional changes.

Patch [3/6] is main in the series. It introduces new ONRQ_MIGRATING state and
teaches scheduler to understand it (we need little changes in try_to_wake_up()
and task_rq_lock() family). This will be used in the following way:

(we are changing task's rq)

raw_spin_lock(&src_rq->lock);

p = ...; /* Some src_rq task */

dequeue_task(src_rq, p, 0);
p->on_rq = ONRQ_MIGRATING;
set_task_cpu(p, dst_cpu);
raw_spin_unlock(&src_rq->lock);

/*
* Now p is dequeued, and both
* RQ locks are unlocked, but
* its on_rq is not zero.
* Nobody can manipulate p
* while it's migrating,
* even when spinlocks are
* unlocked.
*/

raw_spin_lock(&dst_rq->lock);
p->on_rq = ONRQ_QUEUED;
enqueue_task(dst_rq, p, 0);
raw_spin_unlock(&dst_rq->lock);

Patches [4,5,6/6] remove double locks and use new ONRQ_MIGRATING state.
They allow unlocked using of 3-4 function, which looks safe for me.

The profit is double_rq_lock() is not need now, so we reduce the
total time when RQs are locked.



---

v4: New patch [1/6]

Kirill Tkhai (6):
sched/fair: Fix reschedule which is generated on throttled cfs_rq
sched: Wrapper for checking task_struct::on_rq
sched: Teach scheduler to understand ONRQ_MIGRATING state
sched: Remove double_rq_lock() from __migrate_task()
sched/fair: Remove double_lock_balance() from active_load_balance_cpu_stop()
sched/fair: Remove double_lock_balance() from load_balance()


kernel/sched/core.c | 115 +++++++++++++++++-------------
kernel/sched/deadline.c | 14 ++--
kernel/sched/fair.c | 174 +++++++++++++++++++++++++++++++---------------
kernel/sched/rt.c | 16 ++--
kernel/sched/sched.h | 13 +++
kernel/sched/stop_task.c | 2 -
6 files changed, 212 insertions(+), 122 deletions(-)

--
Signed-off-by: Kirill Tkhai <ktkhai@parallels.com>




\
 
 \ /
  Last update: 2014-08-06 10:21    [W:0.022 / U:0.160 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site