From owner-svn-src-user@freebsd.org Fri Aug 26 17:28:58 2016 Return-Path: Delivered-To: svn-src-user@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E7B05B7591D for ; Fri, 26 Aug 2016 17:28:58 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C391166A; Fri, 26 Aug 2016 17:28:58 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u7QHSwe5013777; Fri, 26 Aug 2016 17:28:58 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u7QHSv2V013776; Fri, 26 Aug 2016 17:28:57 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201608261728.u7QHSv2V013776@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Fri, 26 Aug 2016 17:28:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r304851 - user/alc/PQ_LAUNDRY/sys/vm X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Aug 2016 17:28:59 -0000 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; } /*