2003-02-11 12:22:52

by Maneesh Soni

[permalink] [raw]
Subject: [2.5.60] dcachebench sleeps

Hi,

With 2.5.60, dcachebench no more completes. All threads
go to sleep as below. Last time I tested was with an intermediated BK diff
(diff-bk-030204-2.5.59) and it was working fine.

I tried "./dcachebench -p 4 -b junk" on a 4-way SMP with pre-epmtion ON.

dcachebench is available at
http://www-124.ibm.com/developerworks/opensource/linuxperf/dcachebench/dcachebench.html

dcachebench S 00000082 2336648 1082 952 1083 (NOTLB)
Call Trace:
[<c011f327>] sys_wait4+0x237/0x270
[<c0118710>] default_wake_function+0x0/0x20
[<c014ae31>] sys_llseek+0xb1/0xd0
[<c0118710>] default_wake_function+0x0/0x20
[<c010aa0f>] syscall_call+0x7/0xb

dcachebench S 00000086 4500872 1083 1082 1084 (NOTLB)
Call Trace:
[<c0128084>] sys_pause+0x14/0x20
[<c010aa0f>] syscall_call+0x7/0xb

dcachebench S 00000082 4286241224 1084 1082 1085 1083 (NOTLB)
Call Trace:
[<c0114113>] smp_apic_timer_interrupt+0x113/0x140
[<c0128084>] sys_pause+0x14/0x20
[<c010aa0f>] syscall_call+0x7/0xb

dcachebench S 00000086 4287956936 1085 1082 1086 1084 (NOTLB)
Call Trace:
[<c0128084>] sys_pause+0x14/0x20
[<c010aa0f>] syscall_call+0x7/0xb

dcachebench S 00000086 4287513032 1086 1082 1085 (NOTLB)
Call Trace:
[<c0128084>] sys_pause+0x14/0x20
[<c010aa0f>] syscall_call+0x7/0xb


Regards,
Maneesh



--
Maneesh Soni
IBM Linux Technology Center,
IBM India Software Lab, Bangalore.
Phone: +91-80-5044999 email: [email protected]
http://lse.sourceforge.net/


2003-02-11 20:08:16

by Linus Torvalds

[permalink] [raw]
Subject: Re: [2.5.60] dcachebench sleeps

In article <[email protected]>,
Maneesh Soni <[email protected]> wrote:
>
>With 2.5.60, dcachebench no more completes. All threads
>go to sleep as below. Last time I tested was with an intermediated BK diff
>(diff-bk-030204-2.5.59) and it was working fine.

This should be fixed in the current BK tree. And for the non-BK-users,
here's the relevant changeset..

Linus

---
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# ChangeSet 1.997.1.20 -> 1.997.1.21
# kernel/signal.c 1.67 -> 1.68
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/02/11 [email protected] 1.997.1.21
# If we set TIF_SIGPENDING for SIGCONT, we have to wake up any sleeping
# tasks (even if we don't otherwise need to wake anything up), since
# otherwise later signals would see that signals are already pending and
# wouldn't cause wakeups.
# --------------------------------------------
#
diff -Nru a/kernel/signal.c b/kernel/signal.c
--- a/kernel/signal.c Tue Feb 11 12:13:43 2003
+++ b/kernel/signal.c Tue Feb 11 12:13:43 2003
@@ -619,6 +619,7 @@
rm_from_queue(SIG_KERNEL_STOP_MASK, &p->signal->shared_pending);
t = p;
do {
+ unsigned int state;
rm_from_queue(SIG_KERNEL_STOP_MASK, &t->pending);

/*
@@ -635,9 +636,12 @@
* Wake up the stopped thread _after_ setting
* TIF_SIGPENDING
*/
- if (!sigismember(&t->blocked, SIGCONT))
+ state = TASK_STOPPED;
+ if (!sigismember(&t->blocked, SIGCONT)) {
set_tsk_thread_flag(t, TIF_SIGPENDING);
- wake_up_state(t, TASK_STOPPED);
+ state |= TASK_INTERRUPTIBLE;
+ }
+ wake_up_state(t, state);

t = next_thread(t);
} while (t != p);

2003-02-12 04:46:55

by Maneesh Soni

[permalink] [raw]
Subject: Re: [2.5.60] dcachebench sleeps

On Wed, Feb 12, 2003 at 12:48:05AM +0000, Linus Torvalds wrote:
> In article <[email protected]>,
> Maneesh Soni <[email protected]> wrote:
> >
> >With 2.5.60, dcachebench no more completes. All threads
> >go to sleep as below. Last time I tested was with an intermediated BK diff
> >(diff-bk-030204-2.5.59) and it was working fine.
>
> This should be fixed in the current BK tree. And for the non-BK-users,
> here's the relevant changeset..
>
> Linus


Yes.. this fixes the dcachebench problem.

Thanks,
Maneesh



> ---
> # This is a BitKeeper generated patch for the following project:
> # Project Name: Linux kernel tree
> # This patch format is intended for GNU patch command version 2.5 or higher.
> # This patch includes the following deltas:
> # ChangeSet 1.997.1.20 -> 1.997.1.21
> # kernel/signal.c 1.67 -> 1.68
> #
> # The following is the BitKeeper ChangeSet Log
> # --------------------------------------------
> # 03/02/11 [email protected] 1.997.1.21
> # If we set TIF_SIGPENDING for SIGCONT, we have to wake up any sleeping
> # tasks (even if we don't otherwise need to wake anything up), since
> # otherwise later signals would see that signals are already pending and
> # wouldn't cause wakeups.
> # --------------------------------------------
> #
> diff -Nru a/kernel/signal.c b/kernel/signal.c
> --- a/kernel/signal.c Tue Feb 11 12:13:43 2003
> +++ b/kernel/signal.c Tue Feb 11 12:13:43 2003
> @@ -619,6 +619,7 @@
> rm_from_queue(SIG_KERNEL_STOP_MASK, &p->signal->shared_pending);
> t = p;
> do {
> + unsigned int state;
> rm_from_queue(SIG_KERNEL_STOP_MASK, &t->pending);
>
> /*
> @@ -635,9 +636,12 @@
> * Wake up the stopped thread _after_ setting
> * TIF_SIGPENDING
> */
> - if (!sigismember(&t->blocked, SIGCONT))
> + state = TASK_STOPPED;
> + if (!sigismember(&t->blocked, SIGCONT)) {
> set_tsk_thread_flag(t, TIF_SIGPENDING);
> - wake_up_state(t, TASK_STOPPED);
> + state |= TASK_INTERRUPTIBLE;
> + }
> + wake_up_state(t, state);
>
> t = next_thread(t);
> } while (t != p);
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

--
Maneesh Soni
IBM Linux Technology Center,
IBM India Software Lab, Bangalore.
Phone: +91-80-5044999 email: [email protected]
http://lse.sourceforge.net/