Graphical console in stable/10 stuck on heavy writing

David Xu davidxu at freebsd.org
Wed Dec 25 02:29:19 UTC 2013


On 2013/12/23 08:47, Mark Martinec wrote:
> FreeBSD amd64, recent stable/10:
>
> When running some task on a graphical console window
> and that task writes lots of output to a console, the
> console gets stuck after some time (like 20 minutes),
> output stops, keyboard appears unresponsive, alt-ctrl-Fn
> is unable to switch consoles - but the machine seems
> otherwise sane: I can log in over ssh, file system and
> processes are healthy, CPU not busy.
>
> This was first noticed trying to rebuild kde from
> ports in a console window. Same happened when bulk
> updating packages from a remote site and the pkg update
> was busily writing its output to a console.
>
> The same heavy tasks (e.g. ports rebuild) can run
> just fine in an ssh session, or in a konsole / xterm.
>
> As a final proof, I tried a perl one-liner which
> writes a line (a count and some text) ten times per
> second: it manages to screw up the console window
> in about 6 minutes.
>
> Interestingly, while the console output is stuck
> and I blindly type a command on a keyboard (no echo),
> then run a shutdown from another (ssh) session,
> the console output gets unstuck during shutdown,
> rapidly displays the missing lines, including the
> echo of a command typed blindly previously, along
> with its output.
>
> Btw, this never happened on this machine while it was
> running 9.2 or older versions.
>
> Anybody seen this or can reproduce it?
>
>    Mark


This is a longstanding bug. Years ago I found this, it seems there is
a race between kernel tty code and select syscall, although I had read
some code and do not know where it is.
I can reproduce it by running command "find /" in gnome terminal,
and switch between some windows and when I come back to the terminal
window, the find process gets stuck at "ttyout" state.

davidxu at demo:~%ps xaHl | grep find
  1001 1247 1195   0  -8  0  10276   1952 piperd   S+    0   0:00.00 
grep find
  1001 1239 1225   0  21  0  14100   6740 ttyout   S+    1   0:02.05 find /

davidxu at demo:~%procstat -h -k 1239
  1239 100187 find             -                mi_switch sleepq_switch 
sleepq_catch_signals sleepq_wait_sig _cv_wait_sig tty_wait ttydisc_write 
ttydev_write devfs_write_f dofilewrite kern_writev sys_write syscall 
Xint0x80_syscall


davidxu at demo:~%ps xaHl | grep gnome-terminal
  1001 1193    1   0  21  0  99852  23232 select   S    v0   0:15.97 
gnome-terminal
  1001 1193    1   0  21  0  99852  23232 select   S    v0   0:01.79 
gnome-terminal
  1001 1193    1   0  21  0  99852  23232 select   I    v0   0:00.00 
gnome-terminal
  1001 1256 1195   0  21  0    344    236 -        R+    0   0:00.00 
grep gnome-terminal
davidxu at demo:~%ps xaHl |
davidxu at demo:~%procstat -k 1193
   PID    TID COMM             TDNAME           KSTACK 

  1193 100202 gnome-terminal   -                mi_switch sleepq_switch 
sleepq_catch_signals sleepq_timedwait_sig _cv_timedwait_sig_sbt 
seltdwait sys_poll syscall Xint0x80_syscall
  1193 100206 gnome-terminal   -                mi_switch sleepq_switch 
sleepq_catch_signals sleepq_wait_sig _cv_wait_sig seltdwait sys_poll 
syscall Xint0x80_syscall
  1193 100209 gnome-terminal   -                mi_switch sleepq_switch 
sleepq_catch_signals sleepq_wait_sig _cv_wait_sig seltdwait sys_poll 
syscall Xint0x80_syscall





More information about the freebsd-stable mailing list