Date: Wed, 10 Jan 2007 22:11:38 -0500 From: John Baldwin <jhb@freebsd.org> To: "Brad L. Chisholm" <blc@bsdwins.com> Cc: freebsd-hackers@freebsd.org Subject: Re: Kernel hang on 6.x Message-ID: <200701102211.39412.jhb@freebsd.org> In-Reply-To: <20070111001534.GA319@bsdone.bsdwins.com> References: <20070110215207.GA85834@bsdone.bsdwins.com> <200701101753.24716.jhb@freebsd.org> <20070111001534.GA319@bsdone.bsdwins.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200701102211.39412.jhb>