Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Nov 2018 13:01:42 -0500
From:      Mark Johnston <markj@freebsd.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm
Message-ID:  <20181121180142.GF67072@raichu>
In-Reply-To: <20181121060716.GE2378@kib.kiev.ua>
References:  <201811202249.wAKMnJxH082469@repo.freebsd.org> <20181121003515.GE2630@raichu> <20181121004239.spk72g2pikvse4y7@smtp.freebsd.org> <20181121005148.GF2630@raichu> <20181121005832.ongabjesxlsd7cqu@smtp.freebsd.org> <20181121060716.GE2378@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Nov 21, 2018 at 08:07:16AM +0200, Konstantin Belousov wrote:
> On Tue, Nov 20, 2018 at 04:58:32PM -0800, Ben Widawsky wrote:
> > On 18-11-20 19:51:48, Mark Johnston wrote:
> > > On Tue, Nov 20, 2018 at 04:42:39PM -0800, Ben Widawsky wrote:
> > > > On 18-11-20 19:35:15, Mark Johnston wrote:
> > > > > On Tue, Nov 20, 2018 at 10:49:19PM +0000, Ben Widawsky wrote:
> > > > > > Author: bwidawsk
> > > > > > Date: Tue Nov 20 22:49:19 2018
> > > > > > New Revision: 340709
> > > > > > URL: https://svnweb.freebsd.org/changeset/base/340709
> > > > > > 
> > > > > > Log:
> > > > > >   linuxkpi: Add some basic swap functions
> > > > > >   
> > > > > >   These are used by kms-drm to determine various heuristics relate
> > > > > >   memory conditions.
> > > > > >   
> > > > > >   The number of free swap pages is just a variable, and it can be
> > > > > >   much cheaper by either adding a new getter, or simply extern'ing
> > > > > >   swap_total. However, this patch opts to use the more expensive,
> > > > > >   existing interface - since this isn't an operation in a high per
> > > > > >   path.
> > > > > >   
> > > > > >   This allows us to remove some more gpl linuxkpi and do the follo
> > > > > >   kms-drm:
> > > > > >   git rm linuxkpi/gplv2/include/linux/swap.h
> > > > > >   
> > > > > >   Reviewed by:    mmacy, Johannes Lundberg <johalun0@gmail.com>
> > > > > >   Approved by:    emaste (mentor)
> > > > > >   Differential Revision:  https://reviews.freebsd.org/D18052
> > > > > > 
> > > > > > Added:
> > > > > >   head/sys/compat/linuxkpi/common/include/linux/swap.h   (contents, props changed)
> > > > > > Modified:
> > > > > >   head/sys/vm/vm_pageout.h
> > > > > >   head/sys/vm/vm_swapout.c
> > > > > > 
> > > > > > [...]
> > > > > > Modified: head/sys/vm/vm_swapout.c
> > > > > > ==============================================================================
> > > > > > --- head/sys/vm/vm_swapout.c	Tue Nov 20 22:24:18 2018	(r340708)
> > > > > > +++ head/sys/vm/vm_swapout.c	Tue Nov 20 22:49:19 2018	(r340709)
> > > > > > @@ -961,3 +961,10 @@ swapout(struct proc *p)
> > > > > >  	p->p_swtick = ticks;
> > > > > >  	return (0);
> > > > > >  }
> > > > > > +
> > > > > > +/* Used to determine if the current process is itself the reaper. */
> > > > > > +bool
> > > > > > +vm_curproc_is_vmproc(void)
> > > > > > +{
> > > > > > +	return curproc == vmproc;
> > > > > > +}
> > > > > 
> > > > > From a look at how this is used, it should probably be pageproc rather
> > > > > than vmproc.  There are various code paths that just check
> > > > > curproc == pageproc inline.
> > > > > 
> > > > 
> > > > Could I trouble you for a quick explanation of the difference between the two?
> > > 
> > > pageproc contains the page daemon and laundry threads, which are
> > > responsible for managing the LRU page queues and writing back dirty
> > > pages.  vmproc's main task is to swap out kernel stacks when the system
> > > is under memory pressure, and swap them back in when necessary.  It's a
> > > somewhat legacy component of the system and isn't required.  You can
> > > build a kernel without it by specifying "options NO_SWAPPING" (which is
> > > a somewhat misleading name), in which vm_swapout_dummy.c is compiled
> > > instead of vm_swapout.c.
> > > 
> > 
> > Thanks for the explanation. I indeed want the page daemon. I will put up a patch
> > to do that the correct way. Thanks.
> 
> What is the intent ? If the goal is to avoid wait for memory in
> deadlock- prone contexts, then you perhaps want to return true for both
> pagedaemon and vm daemon, and might be even the buf daemon threads as
> well.

In this case it's used to enable more aggressive shrinking of GEM
objects.  The function in question is invoked via a lowmem eventhandler,
so the page daemon may indeed be the caller.



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