Kernel hang on 6.x

John Baldwin jhb at freebsd.org
Thu Jan 11 03:12:52 UTC 2007


On Wednesday 10 January 2007 19:15, Brad L. Chisholm wrote:
> On Wed, Jan 10, 2007 at 05:53:24PM -0500, John Baldwin wrote:
> > On Wednesday 10 January 2007 16:52, Brad L. Chisholm wrote:
> > > 
> > > I work with Brian, and have been helping him analyze this problem.  We have
> > > been able to generate kernel dumps, and have also done some additional
> > > analysis under ddb.  Here is a summary of our analysis so far.  Suggestions
> > > as to how to proceed from here are most welcome.
> > 
> > How much swap do you have?  You might have run out of buckets in the
> > swap_zone before you ran out of swap space, in which case the kernel
> > deadlocks rather than killing the hog like it does when it runs out of
> > swap space.  I added a printf to catch this on HEAD recently that will
> > be MFC'd soonish.  You can try bumping up kern.maxswzone (loader tunable).
> > 
> 
> It has a 32GB swap partition.  We have also run it configured with an 
> additional 32GB swap file, for a total of 64GB.  Changing the amount of
> swap did not seem to affect the hang.  However, as I mentioned in my
> previous post, the hang appears to always occur when ~14GB of swap have
> been consumed, regardless of the amount of swap or physmen configured.
> This does make it sound like a limit (such as swap_zone buckets) has 
> been reached.
> 
> I notice the following in the vm.zone output captured just prior to 
> a hang.  Does this value correspond to the swap_zone you were referring
> to?  This looks like a limit may have been reached.
> 
> SWAPMETA:        288,   116519, 116519,      0,   116543

yep, that's exactly the issue you are hitting.
 
> I don't seem to be able to query kern.maxswzone on our 6.2-BETA2 image:
> 
> # sysctl kern.maxswzone
> sysctl: unknown oid 'kern.maxswzone'
> 
> Is it available in 6.x, or is it something newer?

It's only a tunable, not available as a sysctl.  You can figure out the
current size from the vmstat output above, then do some math to figure
out a good guess to use based on how much swap it had in use when it
locked up.  For example, right now you have 116519 objects of size 288, so
33557472 bytes allocated.  You said you die when 14 GB out of 64 total is
used, so you should probably try taking that value and multiplying it by
64 / 14.  That gives a result of 153405586.  However, you really want to
round this up to a multiple of 288 (because the kernel rounds it down to
a multiple of 288), so I'd use a value of at least 153405792.  And yes,
that means you are setting aside a little over 146 MB of wired, physical
RAM just to hold metadata for your swap. :)

-- 
John Baldwin


More information about the freebsd-hackers mailing list