On Tue, 2014-05-06 at 03:42 +0000, Alan Cox wrote:
> Author: alc
> Date: Tue May  6 03:42:04 2014
> New Revision: 265418
> URL: http://svnweb.freebsd.org/changeset/base/265418
> 
> Log:
>   Prior to r254304, a separate function, vm_pageout_page_stats(), was used to
>   periodically update the reference status of the active pages.  This function
>   was called, instead of vm_pageout_scan(), when memory was not scarce.  The
>   objective was to provide up to date reference status for active pages in
>   case memory did become scarce and active pages needed to be deactivated.
>   
>   The active page queue scan performed by vm_pageout_page_stats() was
>   virtually identical to that performed by vm_pageout_scan(), and so r254304
>   eliminated vm_pageout_page_stats().  Instead, vm_pageout_scan() is
>   called with the parameter "pass" set to zero.  The intention was that when
>   pass is zero, vm_pageout_scan() would only scan the active queue.  However,
>   the variable page_shortage can still be greater than zero when memory is not
>   scarce and vm_pageout_scan() is called with pass equal to zero.
>   Consequently, the inactive queue may be scanned and dirty pages laundered
>   even though that was not intended by r254304.  This revision fixes that.
>   
>   Reported by:        avg
>   MFC after:  1 week
>   Sponsored by:       EMC / Isilon Storage Division
> 
> Modified:
>   head/sys/vm/vm_pageout.c
> 
> Modified: head/sys/vm/vm_pageout.c
> ==============================================================================
> --- head/sys/vm/vm_pageout.c  Tue May  6 03:38:04 2014        (r265417)
> +++ head/sys/vm/vm_pageout.c  Tue May  6 03:42:04 2014        (r265418)
> @@ -942,13 +942,15 @@ vm_pageout_scan(struct vm_domain *vmd, i
>        */
>       addl_page_shortage = 0;
>  
> -     deficit = atomic_readandclear_int(&vm_pageout_deficit);
> -
>       /*
>        * Calculate the number of pages we want to either free or move
>        * to the cache.
>        */
> -     page_shortage = vm_paging_target() + deficit;
> +     if (pass > 0) {
> +             deficit = atomic_readandclear_int(&vm_pageout_deficit);
> +             page_shortage = vm_paging_target() + deficit;
> +     } else
> +             page_shortage = deficit = 0;
>  
>       /*
>        * maxlaunder limits the number of dirty pages we flush per scan.
> 

Does this address the observation that several folks have made on
current@ that pages are being pushed to swap much more agressively than
in the past, even when the system doesn't seem short of memory?

-- Ian


_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to