Author: rstone
Date: Thu Aug 20 20:28:51 2015
New Revision: 286970
URL: https://svnweb.freebsd.org/changeset/base/286970

Log:
  Prevent ticks rollover from preventing vm_lowmem event
  
  Currently vm_pageout_scan() uses a ticks-based scheme to rate-limit
  the number of times that the vm_lowmem event will happen.  However
  if no events happen for long enough for ticks to roll over, this
  leaves us in a long window in which vm_lowmem events will not
  happen.
  
  Replace the use of ticks with time_t to prevent rollover from ever
  being an issue.
  
  Reviewed by:  ian
  MFC after:    3 weeks
  Sponsored by: EMC / Isilon Storage Division
  Differential Revision:        https://reviews.freebsd.org/D3439

Modified:
  head/sys/vm/vm_pageout.c

Modified: head/sys/vm/vm_pageout.c
==============================================================================
--- head/sys/vm/vm_pageout.c    Thu Aug 20 19:39:15 2015        (r286969)
+++ head/sys/vm/vm_pageout.c    Thu Aug 20 20:28:51 2015        (r286970)
@@ -93,6 +93,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/sdt.h>
 #include <sys/signalvar.h>
 #include <sys/smp.h>
+#include <sys/time.h>
 #include <sys/vnode.h>
 #include <sys/vmmeter.h>
 #include <sys/rwlock.h>
@@ -171,7 +172,7 @@ static int vm_pageout_update_period;
 static int defer_swap_pageouts;
 static int disable_swap_pageouts;
 static int lowmem_period = 10;
-static int lowmem_ticks;
+static time_t lowmem_uptime;
 
 #if defined(NO_SWAPPING)
 static int vm_swap_enabled = 0;
@@ -1034,7 +1035,7 @@ vm_pageout_scan(struct vm_domain *vmd, i
         * some.  We rate limit to avoid thrashing.
         */
        if (vmd == &vm_dom[0] && pass > 0 &&
-           (ticks - lowmem_ticks) / hz >= lowmem_period) {
+           (time_uptime - lowmem_uptime) >= lowmem_period) {
                /*
                 * Decrease registered cache sizes.
                 */
@@ -1045,7 +1046,7 @@ vm_pageout_scan(struct vm_domain *vmd, i
                 * drained above.
                 */
                uma_reclaim();
-               lowmem_ticks = ticks;
+               lowmem_uptime = time_uptime;
        }
 
        /*
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to