Date: Thu, 15 Nov 2012 20:21:53 +0200 From: Konstantin Belousov <kostikbel@gmail.com> To: Alan Cox <alc@rice.edu> Cc: alc@freebsd.org, pho@freebsd.org, Sushanth Rai <sushanth_rai@yahoo.com>, StevenSears <Steven.Sears@netapp.com>, "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org> Subject: Re: Memory reserves or lack thereof Message-ID: <20121115182153.GF73505@kib.kiev.ua> In-Reply-To: <50A52722.7050100@rice.edu> References: <20121112133638.GZ73505@kib.kiev.ua> <1352755682.93266.YahooMailClassic@web181701.mail.ne1.yahoo.com> <20121112214808.GH73505@kib.kiev.ua> <50A181C9.7030209@rice.edu> <20121113115445.GK73505@kib.kiev.ua> <50A52722.7050100@rice.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
--SYqiNNNZhxFUWlBJ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Nov 15, 2012 at 11:32:18AM -0600, Alan Cox wrote: > On 11/13/2012 05:54, Konstantin Belousov wrote: > > On Mon, Nov 12, 2012 at 05:10:01PM -0600, Alan Cox wrote: > >> On 11/12/2012 3:48 PM, Konstantin Belousov wrote: > >>> On Mon, Nov 12, 2012 at 01:28:02PM -0800, Sushanth Rai wrote: > >>>> This patch still doesn't address the issue of M_NOWAIT calls driving > >>>> the memory the all the way down to 2 pages, right ? It would be nice= to > >>>> have M_NOWAIT just do non-sleep version of M_WAITOK and M_USE_RESERVE > >>>> flag to dig deep. > >>> This is out of scope of the change. But it is required for any further > >>> adjustements. > >> I would suggest a somewhat different response: > >> > >> The patch does make M_NOWAIT into a "non-sleep version of M_WAITOK" an= d=20 > >> does reintroduce M_USE_RESERVE as a way to specify "dig deep". > >> > >> Currently, both M_NOWAIT and M_WAITOK can drive the cache/free memory= =20 > >> down to two pages. The effect of the patch is to stop M_NOWAIT at two= =20 > >> pages rather than allowing it to continue to zero pages. > >> > >> When you say, "This is out of scope ...", I believe that you are=20 > >> referring to changing two pages into something larger. I agree that= =20 > >> this is out of scope for the current change. > > I referred exactly to the difference between M_USE_RESERVE set or not. > > IMO this is what was asked by the question author. So yes, my mean of > > the 'out of scope' is about tweaking the 'two pages reserve' in some > > way. >=20 > Since M_USE_RESERVE is no longer deprecated in HEAD, here is my proposed > man page update to malloc(9): >=20 > Index: share/man/man9/malloc.9 > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- share/man/man9/malloc.9 (revision 243091) > +++ share/man/man9/malloc.9 (working copy) > @@ -29,7 +29,7 @@ > .\" $NetBSD: malloc.9,v 1.3 1996/11/11 00:05:11 lukem Exp $ > .\" $FreeBSD$ > .\" > -.Dd January 28, 2012 > +.Dd November 15, 2012 > .Dt MALLOC 9 > .Os > .Sh NAME > @@ -153,13 +153,12 @@ if > .Dv M_WAITOK > is specified. > .It Dv M_USE_RESERVE > -Indicates that the system can dig into its reserve in order to obtain the > -requested memory. > -This option used to be called > -.Dv M_KERNEL > -but has been renamed to something more obvious. > -This option has been deprecated and is slowly being removed from the > kernel, > -and so should not be used with any new programming. > +Indicates that the system can use its reserve of memory to satisfy the > +request. > +This option should only be used in combination with > +.Dv M_NOWAIT > +when an allocation failure cannot be tolerated by the caller without > +catastrophic effects on the system. > .El > .Pp > Exactly one of either The text looks fine. Shouldn't the requirement for M_USE_RESERVE be also expressed in KASSERT, like this: diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index d9e4692..f8a4f70 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -353,6 +351,9 @@ malloc2vm_flags(int malloc_flags) { int pflags; =20 + KASSERT((malloc_flags & M_USE_RESERVE) =3D=3D 0 || + (malloc_flags & M_NOWAIT) !=3D 0, + ("M_USE_RESERVE requires M_NOWAIT")); pflags =3D (malloc_flags & M_USE_RESERVE) !=3D 0 ? VM_ALLOC_INTERRUPT : VM_ALLOC_SYSTEM; if ((malloc_flags & M_ZERO) !=3D 0) I understand that this could be added to places of the allocator's entries, but I think that the page allocations are fine too. --SYqiNNNZhxFUWlBJ Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (FreeBSD) iEYEARECAAYFAlClMsEACgkQC3+MBN1Mb4j0IgCg13XFT6XbCsDMN5WoBBDH9PqB ryAAnRYQkuydqqqPVjv2NnCGa+i/QIKQ =iLp8 -----END PGP SIGNATURE----- --SYqiNNNZhxFUWlBJ--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121115182153.GF73505>