From: Yuly Finkelberg <liquidicecube@gmail.com>
To: linux-kernel@vger.kernel.org
Subject: Scheduler: Spinning until tasks are STOPPED
Date: Sat, 7 May 2005 02:31:24 -0400 [thread overview]
Message-ID: <92df3175050506233110a19a60@mail.gmail.com> (raw)
Hi,
I sent a message regarding this issue earlier, but after re-reading
it, I realized that it wasn't very clear. Hopefully, this will
clarify things a little bit:
I have a strange scheduling issue: a bunch of worker tasks are all waiting
on a wait queue. Each task is woken up by the preceeding, does some work,
wakes up the next one, and then sends a SIGSTOP to itself. The last task however
does not stop itself, but instead yield()s until all tasks have reached state
TASK_STOPPED.
The code looks like this (irrelevant parts cut out):
...
ret = wait_event_interruptible(waitq, next_in_line == myself);
...
(some work)
...
next_in_line = next;
ret = wakeup_next_one();
if (!last_one)
send_sig(SIGSTOP, current, 1);
else
spin_until_all_stopped()
When run with 50 tasks, normally this works well. However sometimes one of the
tasks (never the last one) gets stuck between calling wakeup_next_one() and
between sending the signal. It accumulates system time, and its stack looks
like (no pending signals, ti_flags is clear):
c55e7ad0 00000086 c55e6000 c55e7a94 00000046 c55e6000 c55e7ad0 c0109c2d
00000000 c0497800 00000001 d38da344 0013bc9c c5632840 00071931 d3d93161
0013bc9c c55d546c c05d3960 0000270f c05d3960 c55e6000 c0106f25 c05d3960
Call Trace:
[<c0106f25>] need_resched+0x27/0x32
(yes, this is not a mistake: this is ALL the stack reported by show_stack())
Normally the spinning task will magically get released after "a while", where
few seconds < "a while" < 10 minutes and sometimes even longer.
So the mystery is -
1. Why does the task spin for so long ?
2. Where does it spin ? (the kernel stack doesn't hint on anything...)
3. How can I find out #2 ?
4. How to fix it ?
5. Is there a better way to make sure a specific task is STOPPED ?
Currently running 2.6.8.1 and 2.6.9 (UP, PREEMPT). I'd appreciate any
help here...
next reply other threads:[~2005-05-07 6:31 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-07 6:31 Yuly Finkelberg [this message]
2005-05-07 7:12 ` Scheduler: Spinning until tasks are STOPPED Nick Piggin
2005-05-07 17:36 ` Yuly Finkelberg
2005-05-08 4:00 ` Nick Piggin
2005-05-09 0:10 ` Yuly Finkelberg
[not found] ` <92df317505050817071d852623@mail.gmail.com>
2005-05-09 6:05 ` Nick Piggin
[not found] <41r8S-6Y0-13@gated-at.bofh.it>
[not found] ` <41rLz-7zl-5@gated-at.bofh.it>
[not found] ` <41BrD-79c-29@gated-at.bofh.it>
2005-05-07 22:38 ` Bodo Eggert <harvested.in.lkml@posting.7eggert.dyndns.org>
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=92df3175050506233110a19a60@mail.gmail.com \
--to=liquidicecube@gmail.com \
--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 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.