Subject: kernel hangs
To: None <macbsd-development@sun-lamp.cs.berkeley.edu, core@sun-lamp.cs.berkeley.edu>
From: Lawrence Kesteloot <lk@milquetoast.engr.sgi.com>
List: macbsd-development
Date: 06/03/1994 13:27:18
I hope this looks familier.  I'm not sure where to go from here>

The reason this is also sent to macbsd is that the pc532 port is
using a modified version of your ncr scsi driver.  I was wondering if 
something similar has been seen in the mac version.  (i.e. is it due
to a polled device driver?)

The pc532 is currently having "hangs" in the kernel.  My last
"good" kernel was May 20.  I just last night got it to the point where
it was hung, except that ps was in core so no disk I/O was required
to run it.  It showed that after a compile (cpp, cc1, as) that make was
getting hung in "short term disk wait" that never got terminated.

a) The cc1 started using a lot of memory.  Swap space went up from 8
blocks to around 800 blocks.

b) as worked just fine after the cc1, but the swap memory use didn't go
down.

c) after as quit, so did cc, and then make got hung: ps reported WCHAN
as thrd_b, STAT as D.  Also, the swap space reported (by the old
swapinfo -- what is it's replacement?) never went down.  It was if the
swap space clean code never ran or whatever code it is that reclaims
swap space at the end of a program.

Is it possible that the new swap code does not expect a polled disk
driver and thus does the wrong thing when it requests a swap in?
Executables appear to be paging correctly.

d) The system works well until some large program requires the swap
space to go up.  Then all disk I/O appears to stop.  Sometimes disk
I/O continues, but the one process is stuck.

Here is some info from ps and ktrace: 

ps aulx (after the "hang" see "make regex.o"

USER   PID %CPU %MEM   VSZ  RSS TT  STAT STARTED       TIME COMMAND            UID   PID  PPID CPU PRI NI   VSZ  RSS WCHAN  STAT TT       TIME COMMAND
root     0  0.0  0.0     0    0 ??  DLs   7:49PM    0:00.02 (swapper)            0     0     0   0 -18  0     0    0 schedu DLs  ??    0:00.02 (swapper)
root     1  0.0  0.0   184  136 ??  Is    7:49PM    0:00.88 /sbin/init --        0     1     0  21  10  0   184  136 wait   Is   ??    0:00.88 /sbin/init --
root     2  0.0  0.0     0   12 ??  DL    7:49PM    0:00.55 (pagedaemon)         0     2     0   2 -21  0     0   12 swpgio DL   ??    0:00.55 (pagedaemon)
root    35  0.0  0.0   104   20 ??  Is    7:51PM    0:00.19 (portmap)            0    35     1   1   2  0   104   20 select Is   ??    0:00.19 (portmap)
root    51  0.0  0.0   144  120 ??  Is    7:51PM    0:02.18 syslogd              0    51     1   0   2  0   144  120 select Is   ??    0:02.18 syslogd
root    65  0.0  0.0    16   32 ??  Ss    7:52PM    0:14.55 update               0    65     1   0  18  0    16   32 pause  Ss   ??    0:14.55 update
root    67  0.0  0.0   252   88 ??  Ss    7:52PM    0:00.81 cron                 0    67     1   0  18  0   252   88 pause  Ss   ??    0:00.81 cron
root    73  0.0  0.0   196  124 ??  Is    7:52PM    0:00.78 lpd                  0    73     1  28   2  0   196  124 select Is   ??    0:00.78 lpd
root    76  0.0  0.0   196  120 ??  Is    7:52PM    0:01.18 (inetd)              0    76     1  31   2  0   196  120 select Is   ??    0:01.18 (inetd)
phil    89  0.0  0.0   452  404 00  Ss    7:52PM    1:26.79 -bash (bash)       203    89     1   4  18  0   452  404 pause  Ss   00    1:26.79 -bash (bash)
phil   100  0.0  0.0   460  452 00  D     8:11PM    0:03.50 make regex.o       203   100    89   4 -18  0   460  452 thrd_b D    00    0:03.50 make regex.o
phil  2342  0.0  0.0   188  140 00  R+    8:34PM    0:00.20 ps aulx            203  2342    89  16  32  0   188  140 -      R+   00    0:00.20 ps aulx

Last 40 lines of a dkump on the make process:

   100 make     NAMI  "syntax.h"
   100 make     RET   stat 0
   100 make     CALL  stat(0x4cb90,0xfdbfccd4)
   100 make     NAMI  "buffer.h"
   100 make     RET   stat 0
   100 make     CALL  break(0x71ffc)
   100 make     RET   break 0
   100 make     CALL  stat(0x4cc30,0xfdbfcc6c)
   100 make     NAMI  "config.h.in"
   100 make     RET   stat 0
   100 make     CALL  stat(0x4cbe0,0xfdbfccd4)
   100 make     NAMI  "config.h"
   100 make     RET   stat 0
   100 make     CALL  stat(0x45280,0xfdbfcc88)
   100 make     NAMI  "/home/othersrc/gnu/emacs-19.24/src/m/ns32000.h"
   100 make     RET   stat 0
   100 make     CALL  stat(0x452c0,0xfdbfcc88)
   100 make     NAMI  "/home/othersrc/gnu/emacs-19.24/src/s/netbsd.h"
   100 make     RET   stat 0
   100 make     CALL  stat(0x4ccc0,0xfdbfccd4)
   100 make     NAMI  "regex.h"
   100 make     RET   stat 0
   100 make     CALL  stat(0x4cb40,0xfdbfcd3c)
   100 make     NAMI  "regex.o"
   100 make     RET   stat -1 errno 2 No such file or directory
   100 make     CALL  fstat(0x1,0xfdbfca70)
   100 make     RET   fstat 0
   100 make     CALL  write(0x1,0x28000,0x65)
   100 make     GIO   fd 1 wrote 101 bytes
       "gcc -c  -Demacs -DHAVE_CONFIG_H  -I. -I/home/othersrc/gnu/emacs-19.24/\
	src             -g -O  regex.c
       "
   100 make     RET   write 101/0x65
   100 make     CALL  vfork
   100 make     RET   vfork 101/0x65
   100 make     CALL  wait4(0xffffffff,0xfdbfcd58,0,0)
   100 make     RET   wait4 101/0x65
   100 make     CALL  stat(0x4cb40,0xfdbfcd50)
   100 make     NAMI  "regex.o"
   100 make     RET   stat 0


Thanks for any help.
--Phil

------------------------------------------------------------------------------