Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: weird hangs in current (ghc, gnucash)



On Sun, Oct 22, 2023 at 10:37:54PM +0200, Thomas Klausner wrote:
> I've just updated my kernel from 10.99.10 to 10.99.10 (~ Oct 11 to Oct
> 20) to test the rge(4) changes, and started a bulk build, and the
> packages using ghc seem to wait for something and make no progress.
...
> I see one other new weird behaviour on that machine - gnucash doesn't
> finish starting up.

I've backed out ad's changes from the 13th, and both problems are gone.

I'll attach my local change.

Andrew, can you please take a look?

Thanks,
 Thomas
Module Name:    src
Committed By:   ad
Date:           Fri Oct 13 18:48:56 UTC 2023

Modified Files:
        src/sys/kern: kern_condvar.c kern_sleepq.c
        src/sys/rump/librump/rumpkern: locks.c locks_up.c
        src/sys/sys: condvar.h lwp.h

Log Message:
Add cv_fdrestart() (better name suggestions welcome):

Like cv_broadcast(), but make any LWPs that share the same file descriptor
table as the caller return ERESTART when resuming.  Used to dislodge LWPs
waiting for I/O that prevent a file descriptor from being closed, without
upsetting access to the file (not descriptor) made from another direction.


To generate a diff of this commit:
cvs rdiff -u -r1.59 -r1.60 src/sys/kern/kern_condvar.c
cvs rdiff -u -r1.83 -r1.84 src/sys/kern/kern_sleepq.c
cvs rdiff -u -r1.86 -r1.87 src/sys/rump/librump/rumpkern/locks.c
cvs rdiff -u -r1.12 -r1.13 src/sys/rump/librump/rumpkern/locks_up.c
cvs rdiff -u -r1.17 -r1.18 src/sys/sys/condvar.h
cvs rdiff -u -r1.227 -r1.228 src/sys/sys/lwp.h


Module Name:    src
Committed By:   ad
Date:           Fri Oct 13 18:50:39 UTC 2023

Modified Files:
        src/sys/kern: uipc_socket.c uipc_syscalls.c
        src/sys/sys: socketvar.h

Log Message:
Use cv_fdrestart() to implement fo_restart.


To generate a diff of this commit:
cvs rdiff -u -r1.305 -r1.306 src/sys/kern/uipc_socket.c
cvs rdiff -u -r1.208 -r1.209 src/sys/kern/uipc_syscalls.c
cvs rdiff -u -r1.165 -r1.166 src/sys/sys/socketvar.h


Module Name:    src
Committed By:   ad
Date:           Fri Oct 13 19:07:09 UTC 2023

Modified Files:
        src/sys/ddb: db_command.c db_interface.h db_xxx.c
        src/sys/kern: sys_pipe.c
        src/sys/sys: pipe.h
        src/usr.bin/fstat: fstat.c

Log Message:
Simplify/streamline pipes a little bit:

- Allocate only one struct pipe not two (no need to be bidirectional here).
- Then use f_flag (FREAD/FWRITE) to figure out what to do in the fileops.
- Never wake the other side or acquire long-term (I/O) lock unless needed.
- Whenever possible, defer wakeups until after locks have been released.
- Do some things locklessly in pipe_ioctl() and pipe_poll().

Some notable results:

- -30% latency on a 486DX2/66 doing 1 byte ping-pong within a single process.
- 2.5x less lock contention during "make cleandir" of src on a 48 CPU machine.
- 1.5x bandwith with 1kB messages on the same 48 CPU machine (8kB: same b/w).


To generate a diff of this commit:
cvs rdiff -u -r1.186 -r1.187 src/sys/ddb/db_command.c
cvs rdiff -u -r1.41 -r1.42 src/sys/ddb/db_interface.h
cvs rdiff -u -r1.77 -r1.78 src/sys/ddb/db_xxx.c
cvs rdiff -u -r1.164 -r1.165 src/sys/kern/sys_pipe.c
cvs rdiff -u -r1.39 -r1.40 src/sys/sys/pipe.h
cvs rdiff -u -r1.118 -r1.119 src/usr.bin/fstat/fstat.c

Attachment: ad.backed.out.diff.gz
Description: Binary data



Home | Main Index | Thread Index | Old Index