Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Sep 2010 12:46:39 -0400
From:      Ben Kelly <ben@wanderview.com>
To:        Andriy Gapon <avg@icyb.net.ua>
Cc:        stable@freebsd.org, Willem Jan Withagen <wjw@digiware.nl>, fs@freebsd.org, Jeremy Chadwick <freebsd@jdc.parodius.com>
Subject:   Re: Still getting kmem exhausted panic
Message-ID:  <71D54408-4B97-4F7A-BD83-692D8D23461A@wanderview.com>
In-Reply-To: <4CA21809.7090504@icyb.net.ua>
References:  <4CA1D06C.9050305@digiware.nl> <20100928115047.GA62142__15392.0458550148$1285675457$gmane$org@icarus.home.lan> <4CA1DDE9.8090107@icyb.net.ua> <20100928132355.GA63149@icarus.home.lan> <4CA1EF69.4040402@icyb.net.ua> <FE116FEC-714D-4BF5-86D8-E29BFA713C69@wanderview.com> <4CA21809.7090504@icyb.net.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

On Sep 28, 2010, at 12:30 PM, Andriy Gapon wrote:

> on 28/09/2010 18:50 Ben Kelly said the following:
>>=20
>> On Sep 28, 2010, at 9:36 AM, Andriy Gapon wrote:
>>> Well, no time for me to dig through all that history. arc_max should =
be a
>>> hard limit and it is now. If it ever wasn't then it was a bug.
>>=20
>> I believe the size of the arc could exceed the limit if your working =
set was
>> larger than arc_max.  The arc can't (couldn't then, anyway) evict =
data that is
>> still referenced.
>=20
> I think that you are correct and I was wrong.
> ARC would still allocate a new buffer even if it's at or above arc_max =
and can not
> re-use any exisiting buffer.
> But I think that this is more likely to happen with "tiny" ARC size.  =
I have hard
> time imagining a workload at which gigabytes of data would be =
simultaneously and
> continuously used (see below for definition of "used").
>=20
>> A contributing factor at the time was that the page daemon did not =
take into
>> account back pressure from the arc when deciding which pages to move =
from
>> active to inactive, etc.  So data was more likely to be referenced =
and
>> therefore forced to remain in the arc.
>=20
> I don't think that this is what happened and I don't think that =
pagedaemon has
> anything to do with the discussed issue.
> I think that ARC buffers exist independently of pagedaemon and page =
cache.
> I think that they are held only during time when I/O is happening to =
or from them.


Hmm.  My server is currently idle with no I/O happening:

  kstat.zfs.misc.arcstats.c: 25165824
  kstat.zfs.misc.arcstats.c_max: 46137344
  kstat.zfs.misc.arcstats.size: 91863156

If what you say is true, this shouldn't happen, should it?  This system =
is an i386 machine with kmem max at 800M and arc set to 40M.  This is =
running head from April 6, 2010, so it is a bit old, though.

At one point I had patches running on my system that triggered the =
pagedaemon based on arc load and it did allow me to keep my arc below =
the max.  Or at least I thought it did.

In any case, I've never really been able to wrap my head around the VFS =
layer and how it interacts with zfs.  So I'm more than willing to =
believe I'm confused.  Any insights are greatly appreciated.

Thanks!

- Ben=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?71D54408-4B97-4F7A-BD83-692D8D23461A>