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

Mark Johnston markj at FreeBSD.org
Fri Aug 26 17:28:59 UTC 2016


Author: markj
Date: Fri Aug 26 17:28:57 2016
New Revision: 304851
URL: https://svnweb.freebsd.org/changeset/base/304851

Log:
  Clean up the background laundering tunables a bit.
  
  Reviewed by:	alc

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	Fri Aug 26 14:58:57 2016	(r304850)
+++ user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c	Fri Aug 26 17:28:57 2016	(r304851)
@@ -177,6 +177,7 @@ static int vm_pageout_update_period;
 static int disable_swap_pageouts;
 static int lowmem_period = 10;
 static time_t lowmem_uptime;
+static u_int vm_background_launder_target;
 
 #if defined(NO_SWAPPING)
 static int vm_swap_enabled = 0;
@@ -231,15 +232,19 @@ SYSCTL_INT(_vm, OID_AUTO, act_scan_laund
 	CTLFLAG_RW, &act_scan_laundry_weight, 0,
 	"weight given to clean vs. dirty pages in active queue scans");
 
-static u_int bkgrd_launder_rate = 4096;
-SYSCTL_UINT(_vm, OID_AUTO, bkgrd_launder_rate,
-	CTLFLAG_RW, &bkgrd_launder_rate, 0,
+SYSCTL_UINT(_vm, OID_AUTO, background_launder_target,
+	CTLFLAG_RW, &vm_background_launder_target, 0,
+	"background laundering target, in pages");
+
+static u_int vm_background_launder_rate = 4096;
+SYSCTL_UINT(_vm, OID_AUTO, background_launder_rate,
+	CTLFLAG_RW, &vm_background_launder_rate, 0,
 	"background laundering rate, in kilobytes per second");
 
-static u_int bkgrd_launder_max = 20 * 1024;
-SYSCTL_UINT(_vm, OID_AUTO, bkgrd_launder_max,
-	CTLFLAG_RW, &bkgrd_launder_max, 0,
-	"background laundering cap in kilobytes");
+static u_int vm_background_launder_max = 20 * 1024;
+SYSCTL_UINT(_vm, OID_AUTO, background_launder_max,
+	CTLFLAG_RW, &vm_background_launder_max, 0,
+	"background laundering cap, in kilobytes");
 
 #define VM_PAGEOUT_PAGE_COUNT 16
 int vm_pageout_page_count = VM_PAGEOUT_PAGE_COUNT;
@@ -1181,8 +1186,7 @@ vm_pageout_laundry_worker(void *arg)
 		if (target == 0 && wakeups != last_launder &&
 		    ndirty * isqrt(wakeups - last_launder) >= nclean) {
 			last_launder = wakeups;
-			target = starting_target =
-			    (vm_cnt.v_free_target - vm_cnt.v_free_min) / 10;
+			target = starting_target = vm_background_launder_target;
 		}
 		/*
 		 * We have a non-zero background laundering target.  If we've
@@ -1193,17 +1197,16 @@ vm_pageout_laundry_worker(void *arg)
 		 * proceed at the background laundering rate.
 		 */
 		if (target > 0) {
-			if (last_launder == wakeups) {
-				if (starting_target - target >=
-				    bkgrd_launder_max * PAGE_SIZE / 1024)
-					target = 0;
-			} else {
+			if (last_launder != wakeups) {
 				last_launder = wakeups;
 				starting_target = target;
+			} else if (starting_target - target >=
+			    vm_background_launder_max * PAGE_SIZE / 1024) {
+				target = 0;
 			}
 
-			launder = bkgrd_launder_rate * PAGE_SIZE / 1024 /
-			    VM_LAUNDER_INTERVAL;
+			launder = vm_background_launder_rate * PAGE_SIZE / 1024;
+			launder /= VM_LAUNDER_INTERVAL;
 			if (launder < target)
 				launder = target;
 		}
@@ -1988,6 +1991,14 @@ vm_pageout_init(void)
 	/* XXX does not really belong here */
 	if (vm_page_max_wired == 0)
 		vm_page_max_wired = vm_cnt.v_free_count / 3;
+
+	/*
+	 * Target amount of memory to move out of the laundry queue during a
+	 * background laundering.  This is proportional to the amount of system
+	 * memory.
+	 */
+	vm_background_launder_target = (vm_cnt.v_free_target -
+	    vm_cnt.v_free_min) / 10;
 }
 
 /*


More information about the svn-src-user mailing list