Subject: Re: tty/thread machine starvation/lockups with 4.99.40 (sparc64)
To: Rafal Boni <rafal@pobox.com>
From: Erik Fair <fair@netbsd.org>
List: current-users
Date: 12/12/2007 18:10:03
I/O to ttys has been the proximate cause of UNIX process unhappiness  
since time-immemorial. You can't kill (or swap) a process involved in  
DMA I/O (the subsequently completed I/O would then end up in some  
other process' memory, which would be ... bad), so the kernel doesn't  
permit that.

In the case of ttys, where a device (or a user!) on the other end can  
use flow control to stop the I/O for an arbitrary amount of time (an  
eternity when CPU clocks are measured in MHz/GHz), you now have a  
process waiting on that I/O to complete that otherwise can't be  
manipulated at all until I/O completion, save for manipulation in the  
most dire/dangerous ways (e.g. DDB).

If you want to watch real badness, hit ^S on a UNIX console, and wait  
a while. Depending on how many processes want to spew on the console,  
and how often, the process table will eventually fill up with  
unkillable processes, or ... zombies. This is one reason why syslogd 
(8) exists.

The described behavior could also be caused by a lost I/O completion  
interrupt.

Just out of curiosity, if you put asterisk on the back side of a pty  
(e.g. with script(1), screen(1), ssh(1), etc), does the hang still  
happen? Or is asterisk directly opening /dev/console itself?

	Erik <fair@netbsd.org>