All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kirill Tkhai <tkhai@yandex.ru>
To: linux-kernel@vger.kernel.org
Cc: nicolas.pitre@linaro.org, peterz@infradead.org, pjt@google.com,
	oleg@redhat.com, rostedt@goodmis.org, umgwanakikbuti@gmail.com,
	ktkhai@parallels.com, tim.c.chen@linux.intel.com,
	mingo@kernel.org
Subject: [PATCH v3 0/5] sched: Add on_rq states and remove several double rq locks
Date: Thu, 31 Jul 2014 01:42:35 +0400	[thread overview]
Message-ID: <20140730213219.27604.11218.stgit@localhost> (raw)

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

Patch [1/5] 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 [2/5] 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 os 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 [3,4,5/5] 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.

---

Kirill Tkhai (5):
      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      |  172 +++++++++++++++++++++++++++++++---------------
 kernel/sched/rt.c        |   16 ++--
 kernel/sched/sched.h     |   13 +++
 kernel/sched/stop_task.c |    2 -
 6 files changed, 211 insertions(+), 121 deletions(-)

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

             reply	other threads:[~2014-07-30 21:44 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-30 21:42 Kirill Tkhai [this message]
2014-07-30 21:42 ` [PATCH v3 1/5] sched: Wrapper for checking task_struct::on_rq Kirill Tkhai
2014-07-30 21:42 ` [PATCH v3 2/5] sched: Teach scheduler to understand ONRQ_MIGRATING state Kirill Tkhai
2014-07-30 21:42 ` [PATCH v3 3/5] sched: Remove double_rq_lock() from __migrate_task() Kirill Tkhai
2014-07-30 21:43 ` [PATCH v3 4/5] sched/fair: Remove double_lock_balance() from active_load_balance_cpu_stop() Kirill Tkhai
2014-07-30 21:43 ` [PATCH v3 5/5] sched/fair: Remove double_lock_balance() from load_balance() Kirill Tkhai

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=20140730213219.27604.11218.stgit@localhost \
    --to=tkhai@yandex.ru \
    --cc=ktkhai@parallels.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=nicolas.pitre@linaro.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pjt@google.com \
    --cc=rostedt@goodmis.org \
    --cc=tim.c.chen@linux.intel.com \
    --cc=umgwanakikbuti@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.