Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Jun 2016 15:16:44 +0200
From:      Fabian Keil <freebsd-listen@fabiankeil.de>
To:        freebsd-hackers@freebsd.org
Subject:   Re: vnlru_proc() draining unrelated uma zones
Message-ID:  <20160615151644.2cb4bb18@fabiankeil.de>
In-Reply-To: <20160615131024.GA38613@kib.kiev.ua>
References:  <20160615140516.3cba6001@fabiankeil.de> <20160615131024.GA38613@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_/F/51+cUv.CodI73CJOgx1Eg
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Konstantin Belousov <kostikbel@gmail.com> wrote:

> On Wed, Jun 15, 2016 at 02:05:16PM +0200, Fabian Keil wrote:
> > While looking into two uma-related issues[0] I noticed that
> > vnlru_proc() is calling uma_reclaim() even though the intention
> > seems to be to merely drain the vnode-related zones.
> >=20
> > According to uma.h, uma_reclaim() "should only be called by
> > the page out daemon", presumably because of the overhead
> > and side-effects.
> >=20
> > I've been using this patch for a couple of weeks and didn't
> > notice any regressions:
> >=20
> > diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
> > index 2767826..2c65ce1 100644
> > --- a/sys/kern/vfs_subr.c
> > +++ b/sys/kern/vfs_subr.c
> > @@ -1107,8 +1107,10 @@ vnlru_proc(void)
> >                         vfs_unbusy(mp);
> >                 }
> >                 mtx_unlock(&mountlist_mtx);
> > -               if (onumvnodes > desiredvnodes && numvnodes <=3D desire=
dvnodes)
> > -                       uma_reclaim();
> > +               if (onumvnodes > desiredvnodes && numvnodes <=3D desire=
dvnodes) {
> > +                       zone_drain(vnode_zone);
> > +                       zone_drain(vnodepoll_zone);
> > +               } =20
> You listed two obvious zones which cache allocations related to vnodes,
> but there are much more.  E.g. on some systems there are FFS inodes attac=
hed
> to most vnodes, on other there are znodes.  What about rangelocks, fifos,
> namecache data etc ?  What about malloc zones where some other allocs
> to handle vnodes are done ?
>=20
> Practically, significant part of the kernel memory allocations is rooted
> in the vnode handling, and when we shrink the vnode cache due to neccessi=
ty,
> we should shrink that second-level caches as well.  Since it is very hard
> to properly enumerate that items, the shortcut is used.

I see. Thanks for the explanation.

Fabian

--Sig_/F/51+cUv.CodI73CJOgx1Eg
Content-Type: application/pgp-signature
Content-Description: OpenPGP digital signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iEYEARECAAYFAldhVTwACgkQBYqIVf93VJ0LwACghPx3MPeTrlgc1BB+gHqM8jVs
Ty0An2IYn4ctqbXkU5Zznu+eu9UKJF93
=yNg5
-----END PGP SIGNATURE-----

--Sig_/F/51+cUv.CodI73CJOgx1Eg--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160615151644.2cb4bb18>