From: Nick Piggin <nickpiggin@yahoo.com.au>
To: Howard Chu <hyc@symas.com>
Cc: Lee Revell <rlrevell@joe-job.com>,
Robert Hancock <hancockr@shaw.ca>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: sched_yield() makes OpenLDAP slow
Date: Sun, 21 Aug 2005 10:36:06 +1000 [thread overview]
Message-ID: <4307CC76.8060308@yahoo.com.au> (raw)
In-Reply-To: <43079FA9.700@symas.com>
Howard Chu wrote:
> Lee Revell wrote:
>
>> On Sat, 2005-08-20 at 11:38 -0700, Howard Chu wrote:
>> > But I also found that I needed to add a new yield(), to work around
>> > yet another unexpected issue on this system - we have a number of
>> > threads waiting on a condition variable, and the thread holding the
>> > mutex signals the var, unlocks the mutex, and then immediately
>> > relocks it. The expectation here is that upon unlocking the mutex,
>> > the calling thread would block while some waiting thread (that just
>> > got signaled) would get to run. In fact what happened is that the
>> > calling thread unlocked and relocked the mutex without allowing any
>> > of the waiting threads to run. In this case the only solution was
>> > to insert a yield() after the mutex_unlock().
>>
>> That's exactly the behavior I would expect. Why would you expect
>> unlocking a mutex to cause a reschedule, if the calling thread still
>> has timeslice left?
>
>
> That's beside the point. Folks are making an assertion that
> sched_yield() is meaningless; this example demonstrates that there are
> cases where sched_yield() is essential.
>
The point is, with SCHED_OTHER scheduling, sched_yield() need not
do anything. It may not let any other tasks run.
The fact that it does on Linux is because we do attempt to do
something expected... but the simple matter is that you can't realy
on it to do what you expect.
I'm not sure exactly how you would solve the above problem, but I'm
sure it can be achieved using mutexes (for example, you could have
a queue where every thread waits on its own private mutex).... but I
don't do much userspace C programming sorry.
Send instant messages to your online friends http://au.messenger.yahoo.com
next prev parent reply other threads:[~2005-08-21 0:36 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4D8eT-4rg-31@gated-at.bofh.it>
2005-08-20 3:20 ` sched_yield() makes OpenLDAP slow Robert Hancock
2005-08-20 4:18 ` Nick Piggin
2005-08-20 18:38 ` Howard Chu
2005-08-20 20:57 ` Lee Revell
2005-08-20 21:24 ` Howard Chu
2005-08-21 0:36 ` Nick Piggin [this message]
2005-08-21 11:33 ` Nikita Danilov
2005-08-22 8:06 ` Howard Chu
2005-08-20 21:50 ` Lee Revell
2005-08-21 1:04 ` Robert Hancock
2005-08-22 11:44 ` linux-os (Dick Johnson)
2005-08-22 14:26 ` Robert Hancock
2005-08-23 11:17 ` linux-os (Dick Johnson)
2005-08-23 12:07 ` Denis Vlasenko
2005-08-24 3:37 ` Lincoln Dale
2006-01-24 22:59 e100 oops on resume Stefan Seyfried
2006-01-24 23:21 ` Mattia Dongili
2006-01-25 9:02 ` Olaf Kirch
2006-01-25 12:11 ` Olaf Kirch
2006-01-25 13:51 ` sched_yield() makes OpenLDAP slow Howard Chu
2006-01-25 14:38 ` Robert Hancock
2006-01-25 17:49 ` Christopher Friesen
2006-01-26 1:07 ` David Schwartz
2006-01-26 8:30 ` Helge Hafting
2006-01-26 9:01 ` Nick Piggin
2006-01-26 10:50 ` Nikita Danilov
[not found] <5uZqb-4fo-15@gated-at.bofh.it>
2006-01-14 22:47 ` Robert Hancock
-- strict thread matches above, loose matches on Subject: below --
2006-01-14 19:29 Howard Chu
[not found] <43057641.70700@symas.com.suse.lists.linux.kernel>
[not found] ` <17157.45712.877795.437505@gargle.gargle.HOWL.suse.lists.linux.kernel>
[not found] ` <430666DB.70802@symas.com.suse.lists.linux.kernel>
2005-08-20 13:48 ` Andi Kleen
2005-08-21 19:47 ` Florian Weimer
2005-08-22 5:09 ` Howard Chu
2005-08-22 13:06 ` Andi Kleen
2005-08-22 18:47 ` Howard Chu
2005-08-22 13:20 ` Florian Weimer
2005-08-22 23:19 ` Howard Chu
2005-08-19 6:03 Howard Chu
2005-08-19 6:34 ` Nick Piggin
2005-08-19 6:59 ` Chris Wedgwood
2005-08-19 22:45 ` Howard Chu
2005-08-19 10:21 ` Nikita Danilov
2005-08-19 23:10 ` Howard Chu
2005-08-20 13:23 ` Nikita Danilov
2005-08-20 19:49 ` Howard Chu
2005-08-20 22:08 ` Nikita Danilov
[not found] <4303DB48.8010902@develer.com.suse.lists.linux.kernel>
[not found] ` <20050818010703.GA13127@nineveh.rivenstone.net.suse.lists.linux.kernel>
[not found] ` <4303F967.6000404@yahoo.com.au.suse.lists.linux.kernel>
[not found] ` <43054D9A.7090509@develer.com.suse.lists.linux.kernel>
2005-08-19 3:19 ` Andi Kleen
2005-08-19 3:30 ` Bernardo Innocenti
2005-08-18 0:50 Bernardo Innocenti
2005-08-18 0:47 ` Con Kolivas
2005-08-18 10:48 ` Maciej Soltysiak
2005-08-18 1:07 ` Joseph Fannin
2005-08-18 2:25 ` Bernardo Innocenti
2005-08-18 2:58 ` Nick Piggin
2005-08-19 3:10 ` Bernardo Innocenti
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=4307CC76.8060308@yahoo.com.au \
--to=nickpiggin@yahoo.com.au \
--cc=hancockr@shaw.ca \
--cc=hyc@symas.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rlrevell@joe-job.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox