6.2 sporadically locks up

pluknet pluknet at gmail.com
Tue Jun 16 15:03:37 UTC 2009


2009/6/16 John Baldwin <jhb at freebsd.org>:
> On Tuesday 16 June 2009 6:23:47 am pluknet wrote:
>> Hi all.
>>
>> This is one of livelocks we have on a weekly basis.
>> Yes, we do still use ULE scheduler on 6.2 and not moved to 7 yet.
>> Any thought?
>>
>> db> ps
>>  pid  ppid  pgrp   uid   state   wmesg     wchan    cmd
>> 70304 69700 69670     0  R                           sh
>> 70303 70292 93818  3572  RL      CPU 2               chrsh
>> 70302 70294 93818  3572  R                           crond
>> 70299 93818 93818     0  R       CPU 1               crond
>> 70298 93818 93818     0  R                           crond
>> 70294 93818 93818  3572  S       piperd   0xd1d8d330 crond
>> 70292 93818 93818  3572  R                           crond
>> 70284 70279 70040 10229  S       biord    0xdbe2e4e8 perl5.8.8
>> 70283 70278 93818 10229  SL      biord    0xdbd70710 exim-4.63-0
>> 70279 70040 70040 10229  S       wait     0xc9005860 sh
>> 70278 69996 93818 10229  S       wait     0xcaf4ac90 sh
>> 70191  4680  4680  9738  S       select   0xc0a12944 httpd
>> 70190  4796  4796 10008  R                           httpd
>> 70188  5043  5043 30532  RL                          httpd
>> 70043 69999 70043  3572  Ss      select   0xc0a12944 wget
>> 70042 70000 70042  3572  Ss      select   0xc0a12944 wget
>> 70041 70001 70041  3572  Ss      select   0xc0a12944 wget
>> 70040 69996 70040 10229  Ss      piperd   0xca35e990 perl5.8.8
>> 70039 70002 70039  3572  Ss      select   0xc0a12944 wget
>
> This is not a full listing so one cannot assume it is a deadlock.

Ok, usually that listing doesn't show anything interesting in this
sort of lockup.
I'll share a full ps output next time (sure, rather soon).

>
>> db> show lockchain Giant
>> thread -3420549 (pid 434, ) ??? (0xc099cb0c)
>
> You would use 'show lock' or perhaps 'show turnstile' with specific lock
> variables.  'show lockchain' needs a TID or PID.

Ok.
As for turnstile, it showed nothing at all, hence omitted.

>
>> db> show allpcpu
>> cpuid        = 0
>> curthread    = 0xc7cfec80: pid 18 "swi4: clock sio"
>>
>> cpuid        = 1
>> curthread    = 0xc99f9960: pid 70299 "crond"
>>
>> cpuid        = 2
>> curthread    = 0xc99f9af0: pid 70303 "chrsh"
>>
>> cpuid        = 3
>> curthread    = 0xd087d320: pid 69700 "sh"
>>
>> cpuid        = 4
>> curthread    = 0xc98f84b0: pid 69604 "httpd"
>>
>> cpuid        = 5
>> curthread    = 0xcaebe190: pid 69598 "httpd"
>>
>> cpuid        = 6
>> curthread    = 0xc7cfe960: pid 27 "irq17: bce1 aacu0"
>>
>> cpuid        = 7
>> curthread    = 0xc837fe10: pid 69711 "arcconf"
>
> This is far more useful output than the truncated 'ps'.  From this, all of the
> CPUs are busy (in at least some deadlocks, all the CPUs would be idle
> instead).  There are several deadlocks fixed since 6.2 that I am aware of,
> but this doesn't look like any of those.  I'm not sure why you aren't getting
> useful stack traces of running threads.

I'll do next time. I thought it would be similar to bt PID output and
simply didn't include.

As for allpcpu, I often see the picture, when one CPU runs the "irq17:
bce1 aacu0" thread
and another one runs arcconf. I wonder if that might be a source of
bad locking or races, or..
The arcconf utility uses ioctl that goes into aac/aacu(4) internals.

> Perhaps DDB in 6.2 doesn't know to
> look in stoppcbs[].  Hmm, looks like 6.2 only does that if you are using
> KDB_STOP_NMI.  Are you using that kernel option?  If not, you probably want
> to.

No, I'm not. Will that add an additional visible overhead on a running system?

>
> --
> John Baldwin
>

Thank you.

-- 
wbr,
pluknet


More information about the freebsd-stable mailing list