From: "Gregory Haskins" <ghaskins@novell.com>
To: "Pavel Machek" <pavel@ucw.cz>
Cc: <a.p.zijlstra@chello.nl>, <mingo@elte.hu>, <bill.huey@gmail.com>,
<rostedt@goodmis.org>, <kevin@hilman.org>, <tglx@linutronix.de>,
<cminyard@mvista.com>, <dsingleton@mvista.com>,
<dwalker@mvista.com>, "Moiz Kohari" <MKohari@novell.com>,
"Peter Morreale" <PMorreale@novell.com>,
"Sven Dietrich" <SDietrich@novell.com>, <dsaxena@plexity.net>,
<acme@redhat.com>, <ak@suse.de>, <gregkh@suse.de>,
<npiggin@suse.de>, <linux-kernel@vger.kernel.org>,
<linux-rt-users@vger.kernel.org>
Subject: Re: [(RT RFC) PATCH v2 5/9] adaptive real-time lock support
Date: Mon, 25 Feb 2008 17:48:46 -0700 [thread overview]
Message-ID: <47C31B9E.BA47.005A.0@novell.com> (raw)
In-Reply-To: <20080225220313.GG2659@elf.ucw.cz>
>>> On Mon, Feb 25, 2008 at 5:03 PM, in message
<20080225220313.GG2659@elf.ucw.cz>, Pavel Machek <pavel@ucw.cz> wrote:
> Hi!
>
>> +/*
>> + * Adaptive-rtlocks will busywait when possible, and sleep only if
>> + * necessary. Note that the busyloop looks racy, and it is....but we do
>> + * not care. If we lose any races it simply means that we spin one more
>> + * time before seeing that we need to break-out on the next iteration.
>> + *
>> + * We realize this is a relatively large function to inline, but note that
>> + * it is only instantiated 1 or 2 times max, and it makes a measurable
>> + * performance different to avoid the call.
>> + *
>> + * Returns 1 if we should sleep
>> + *
>> + */
>> +static inline int
>> +adaptive_wait(struct rt_mutex *lock, struct rt_mutex_waiter *waiter,
>> + struct adaptive_waiter *adaptive)
>> +{
>> + int sleep = 0;
>> +
>> + for (;;) {
>> + /*
>> + * If the task was re-awoken, break out completely so we can
>> + * reloop through the lock-acquisition code.
>> + */
>> + if (!waiter->task)
>> + break;
>> +
>> + /*
>> + * We need to break if the owner changed so we can reloop
>> + * and safely acquire the owner-pointer again with the
>> + * wait_lock held.
>> + */
>> + if (adaptive->owner != rt_mutex_owner(lock))
>> + break;
>> +
>> + /*
>> + * If we got here, presumably the lock ownership is still
>> + * current. We will use it to our advantage to be able to
>> + * spin without disabling preemption...
>> + */
>> +
>> + /*
>> + * .. sleep if the owner is not running..
>> + */
>> + if (!adaptive->owner->se.on_rq) {
>> + sleep = 1;
>> + break;
>> + }
>> +
>> + /*
>> + * .. or is running on our own cpu (to prevent deadlock)
>> + */
>> + if (task_cpu(adaptive->owner) == task_cpu(current)) {
>> + sleep = 1;
>> + break;
>> + }
>> +
>> + cpu_relax();
>> + }
>> +
>> + put_task_struct(adaptive->owner);
>> +
>> + return sleep;
>> +}
>> +
>
> You want to inline this?
Yes. As the comment indicates, there are 1-2 users tops, and it has a significant impact on throughput (> 5%) to take the hit with a call. I don't think its actually much code anyway...its all comments.
>
>> +static inline void
>> +prepare_adaptive_wait(struct rt_mutex *lock, struct adaptive_waiter
> *adaptive)
> ...
>> +#define prepare_adaptive_wait(lock, busy) {}
>
> This is evil. Use empty inline function instead (same for the other
> function, there you can maybe get away with it).
Ok.
> Pavel
next prev parent reply other threads:[~2008-02-26 0:55 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-25 16:00 [(RT RFC) PATCH v2 0/9] adaptive real-time locks Gregory Haskins
2008-02-25 16:00 ` [(RT RFC) PATCH v2 1/9] allow rt-mutex lock-stealing to include lateral priority Gregory Haskins
2008-03-03 15:13 ` Steven Rostedt
2008-03-03 15:41 ` [(RT RFC) PATCH v2 1/9] allow rt-mutex lock-stealing to includelateral priority Gregory Haskins
2008-03-03 15:55 ` Steven Rostedt
2008-03-03 15:55 ` [(RT RFC) PATCH v2 1/9] allow rt-mutex lock-stealing toincludelateral priority Gregory Haskins
2008-02-25 16:00 ` [(RT RFC) PATCH v2 2/9] sysctl for runtime-control of lateral mutex stealing Gregory Haskins
2008-02-25 21:53 ` Pavel Machek
2008-02-25 22:57 ` Sven-Thorsten Dietrich
2008-02-25 23:00 ` Pavel Machek
2008-02-25 23:40 ` Sven-Thorsten Dietrich
2008-02-26 1:15 ` Gregory Haskins
2008-02-25 16:00 ` [(RT RFC) PATCH v2 3/9] rearrange rt_spin_lock sleep Gregory Haskins
2008-02-25 21:54 ` Pavel Machek
2008-02-26 0:45 ` Gregory Haskins
2008-02-25 16:00 ` [(RT RFC) PATCH v2 4/9] optimize rt lock wakeup Gregory Haskins
2008-03-03 15:37 ` Steven Rostedt
2008-03-03 15:41 ` Gregory Haskins
2008-02-25 16:01 ` [(RT RFC) PATCH v2 5/9] adaptive real-time lock support Gregory Haskins
2008-02-25 22:03 ` Pavel Machek
2008-02-26 0:48 ` Gregory Haskins [this message]
2008-02-26 15:03 ` Gregory Haskins
2008-02-26 18:06 ` Pavel Machek
2008-02-26 18:01 ` Gregory Haskins
2008-02-25 16:01 ` [(RT RFC) PATCH v2 6/9] add a loop counter based timeout mechanism Gregory Haskins
2008-02-25 22:06 ` Pavel Machek
2008-02-25 22:19 ` Greg KH
2008-02-25 22:21 ` Pavel Machek
2008-02-25 22:39 ` Sven-Thorsten Dietrich
2008-02-26 15:09 ` Gregory Haskins
2008-02-25 16:01 ` [(RT RFC) PATCH v2 7/9] adaptive mutexes Gregory Haskins
2008-02-25 22:09 ` Pavel Machek
2008-02-26 0:52 ` Gregory Haskins
2008-02-25 16:01 ` [(RT RFC) PATCH v2 8/9] adjust pi_lock usage in wakeup Gregory Haskins
2008-02-25 22:10 ` Pavel Machek
2008-02-25 16:01 ` [(RT RFC) PATCH v2 9/9] remove the extra call to try_to_take_lock Gregory Haskins
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=47C31B9E.BA47.005A.0@novell.com \
--to=ghaskins@novell.com \
--cc=MKohari@novell.com \
--cc=PMorreale@novell.com \
--cc=SDietrich@novell.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=ak@suse.de \
--cc=bill.huey@gmail.com \
--cc=cminyard@mvista.com \
--cc=dsaxena@plexity.net \
--cc=dsingleton@mvista.com \
--cc=dwalker@mvista.com \
--cc=gregkh@suse.de \
--cc=kevin@hilman.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=npiggin@suse.de \
--cc=pavel@ucw.cz \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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.