From: "stephane eranian" <eranian@googlemail.com>
To: linux-kernel@vger.kernel.org
Cc: ia64 <linux-ia64@vger.kernel.org>,
"Stephane Eranian" <eranian@gmail.com>,
"Corey J Ashford" <cjashfor@us.ibm.com>
Subject: runqueue locks in schedule()
Date: Wed, 16 Jan 2008 16:29:10 -0800 [thread overview]
Message-ID: <7c86c4470801161629t3870da59hb6ac371c44126b07@mail.gmail.com> (raw)
Hello,
As suggested by people on this list, I have changed perfmon2 to use
the high resolution
timers as the interface to allow timeout-based event set multiplexing.
This works around
the problems I had with tickless-enabled kernels.
Multiplexing is supported in per-thread as well. In that case, the
timeout measures virtual
time. When the thread is context switched out, we need to save the
remainder of the timeout
and cancel the timer. When the thread is context switched in, we need
to reinstall the timer.
These timer save/restore operations have to be done in the switch_to()
code near the end
of schedule().
There are situations where hrtimer_start() may end up trying to
acquire the runqueue lock.
This happens on a context switch where the current thread is blocking
(not preempted) and
the new timeout happens to be either in the past or just expiring.
We've run into such situations
with simple tests.
On all architectures, but IA-64, it seems thet the runqueue lock is
held until the end of schedule().
On IA-64, the lock is released BEFORE switch_to() for some reason I
don't quite remember. That
may not even be needed anymore.
The early unlocking is controlled by a macro named __ARCH_WANT_UNLOCKED_CTXSW.
Defining this macros on X86 (or PPC) fixed our problem.
It is not clear to me why the runqueue lock needs to be held up until
the end of schedule() on some
platforms and not on others. Not that releasing the lock earlier does
not necessarily introduce
more overhead because the lock is never re-acquired later in the
schedule() function.
Question:
- is it safe to release the lock before switch_to() on all architectures?
Thanks.
next reply other threads:[~2008-01-17 0:29 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-17 0:29 stephane eranian [this message]
2008-01-17 13:24 ` Peter Zijlstra
2008-01-18 2:07 ` Nick Piggin
2008-01-18 6:33 ` stephane eranian
2008-01-18 8:28 ` Nick Piggin
2008-02-23 14:50 ` stephane eranian
2008-02-23 20:40 ` Peter Zijlstra
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=7c86c4470801161629t3870da59hb6ac371c44126b07@mail.gmail.com \
--to=eranian@googlemail.com \
--cc=cjashfor@us.ibm.com \
--cc=eranian@gmail.com \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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
all inboxes | Powered by JetHome®