svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm

Mark Johnston markj at freebsd.org
Wed Nov 21 00:51:53 UTC 2018


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 at 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.


More information about the svn-src-head mailing list