summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authorsmh <smh@FreeBSD.org>2014-10-10 00:12:16 +0000
committersmh <smh@FreeBSD.org>2014-10-10 00:12:16 +0000
commit227e0641478d6ec14ae84c216f886f45300c123d (patch)
tree2c92681f0b14057f8f38ca69aeab6e9cb9e88935 /sys/vm
parente926a5c769cb5f122840c693a82ff7e44820590e (diff)
downloadFreeBSD-src-227e0641478d6ec14ae84c216f886f45300c123d.zip
FreeBSD-src-227e0641478d6ec14ae84c216f886f45300c123d.tar.gz
MFC r270759:
Refactor ZFS ARC reclaim logic to be more VM cooperative MFC r270861: Ensure that ZFS ARC free memory checks include cached pages MFC r272483: Refactor ZFS ARC reclaim checks and limits Sponsored by: Multiplay
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_pageout.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index 373637d..3154ce3 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -76,6 +76,7 @@
__FBSDID("$FreeBSD$");
#include "opt_vm.h"
+#include "opt_kdtrace.h"
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
@@ -89,6 +90,7 @@ __FBSDID("$FreeBSD$");
#include <sys/racct.h>
#include <sys/resourcevar.h>
#include <sys/sched.h>
+#include <sys/sdt.h>
#include <sys/signalvar.h>
#include <sys/smp.h>
#include <sys/vnode.h>
@@ -115,10 +117,14 @@ __FBSDID("$FreeBSD$");
/* the kernel process "vm_pageout"*/
static void vm_pageout(void);
+static void vm_pageout_init(void);
static int vm_pageout_clean(vm_page_t);
static void vm_pageout_scan(struct vm_domain *vmd, int pass);
static void vm_pageout_mightbe_oom(struct vm_domain *vmd, int pass);
+SYSINIT(pagedaemon_init, SI_SUB_KTHREAD_PAGE, SI_ORDER_FIRST, vm_pageout_init,
+ NULL);
+
struct proc *pageproc;
static struct kproc_desc page_kp = {
@@ -126,9 +132,13 @@ static struct kproc_desc page_kp = {
vm_pageout,
&pageproc
};
-SYSINIT(pagedaemon, SI_SUB_KTHREAD_PAGE, SI_ORDER_FIRST, kproc_start,
+SYSINIT(pagedaemon, SI_SUB_KTHREAD_PAGE, SI_ORDER_SECOND, kproc_start,
&page_kp);
+SDT_PROVIDER_DEFINE(vm);
+SDT_PROBE_DEFINE(vm, , , vm__lowmem_cache);
+SDT_PROBE_DEFINE(vm, , , vm__lowmem_scan);
+
#if !defined(NO_SWAPPING)
/* the kernel process "vm_daemon"*/
static void vm_daemon(void);
@@ -663,6 +673,7 @@ vm_pageout_grow_cache(int tries, vm_paddr_t low, vm_paddr_t high)
* may acquire locks and/or sleep, so they can only be invoked
* when "tries" is greater than zero.
*/
+ SDT_PROBE0(vm, , , vm__lowmem_cache);
EVENTHANDLER_INVOKE(vm_lowmem, 0);
/*
@@ -925,6 +936,7 @@ vm_pageout_scan(struct vm_domain *vmd, int pass)
/*
* Decrease registered cache sizes.
*/
+ SDT_PROBE0(vm, , , vm__lowmem_scan);
EVENTHANDLER_INVOKE(vm_lowmem, 0);
/*
* We do this explicitly after the caches have been
@@ -1650,15 +1662,11 @@ vm_pageout_worker(void *arg)
}
/*
- * vm_pageout is the high level pageout daemon.
+ * vm_pageout_init initialises basic pageout daemon settings.
*/
static void
-vm_pageout(void)
+vm_pageout_init(void)
{
-#if MAXMEMDOM > 1
- int error, i;
-#endif
-
/*
* Initialize some paging parameters.
*/
@@ -1704,6 +1712,17 @@ vm_pageout(void)
/* XXX does not really belong here */
if (vm_page_max_wired == 0)
vm_page_max_wired = cnt.v_free_count / 3;
+}
+
+/*
+ * vm_pageout is the high level pageout daemon.
+ */
+static void
+vm_pageout(void)
+{
+#if MAXMEMDOM > 1
+ int error, i;
+#endif
swap_pager_swap_init();
#if MAXMEMDOM > 1
OpenPOWER on IntegriCloud