svn commit: r307661 - user/alc/PQ_LAUNDRY/sys/vm

Alan Cox alc at FreeBSD.org
Wed Oct 19 22:19:39 UTC 2016


Author: alc
Date: Wed Oct 19 22:19:38 2016
New Revision: 307661
URL: https://svnweb.freebsd.org/changeset/base/307661

Log:
  Always pause() for a short interval after sending a batch of dirty pages
  to secondary storage.  Previously, another laundering run could start
  right after sending the batch, which is not what we intended.
  
  Use different wait messages when the laundry thread pauses versus sleeps.
  
  Reviewed by:	markj

Modified:
  user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c

Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c	Wed Oct 19 21:50:57 2016	(r307660)
+++ user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c	Wed Oct 19 22:19:38 2016	(r307661)
@@ -1214,7 +1214,7 @@ trybackground:
 		}
 
 dolaundry:
-		if (launder > 0)
+		if (launder > 0) {
 			/*
 			 * Because of I/O clustering, the number of laundered
 			 * pages could exceed "target" by the maximum size of
@@ -1222,20 +1222,18 @@ dolaundry:
 			 */
 			target -= min(vm_pageout_launder(domain, launder,
 			    in_shortfall), target);
+			pause("laundp", hz / VM_LAUNDER_INTERVAL);
+		}
 
 		/*
-		 * Sleep for a little bit if we're in the middle of a laundering
-		 * run or a pagedaemon thread has signalled us since the last run
-		 * started.  Otherwise, wait for a kick from the pagedaemon.
+		 * If we're not currently laundering pages and the page daemon
+		 * hasn't posted a new request, sleep until the page daemon
+		 * kicks us.
 		 */
 		vm_pagequeue_lock(pq);
-		if (target > 0 || vm_laundry_request != VM_LAUNDRY_IDLE) {
-			vm_pagequeue_unlock(pq);
-			pause("laundr", hz / VM_LAUNDER_INTERVAL);
-			vm_pagequeue_lock(pq);
-		} else
+		if (target == 0 && vm_laundry_request == VM_LAUNDRY_IDLE)
 			(void)mtx_sleep(&vm_laundry_request,
-			    vm_pagequeue_lockptr(pq), PVM, "laundr", 0);
+			    vm_pagequeue_lockptr(pq), PVM, "launds", 0);
 
 		/*
 		 * If the pagedaemon has indicated that it's in shortfall, start


More information about the svn-src-user mailing list