diff options
author | jeff <jeff@FreeBSD.org> | 2002-11-21 09:17:56 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2002-11-21 09:17:56 +0000 |
commit | de79ec94a5618dc0948e9e4033e44e677d1ae16a (patch) | |
tree | e549a4a4881fff6d10155c78766331a6198d8970 /sys | |
parent | 86248f7d291801590b224272bc6e5b94e6ed5cea (diff) | |
download | FreeBSD-src-de79ec94a5618dc0948e9e4033e44e677d1ae16a.zip FreeBSD-src-de79ec94a5618dc0948e9e4033e44e677d1ae16a.tar.gz |
- Add an event that is triggered when the system is low on memory. This is
intended to be used by significant memory consumers so that they may drain
some of their caches.
Inspired by: phk
Approved by: re
Tested on: x86, alpha
Diffstat (limited to 'sys')
-rw-r--r-- | sys/sys/eventhandler.h | 4 | ||||
-rw-r--r-- | sys/vm/vm_pageout.c | 10 |
2 files changed, 13 insertions, 1 deletions
diff --git a/sys/sys/eventhandler.h b/sys/sys/eventhandler.h index 59b1fc2..1378217 100644 --- a/sys/sys/eventhandler.h +++ b/sys/sys/eventhandler.h @@ -179,5 +179,9 @@ typedef void (*idle_eventhandler_t)(void *, int); #define IDLE_PRI_LAST 20000 EVENTHANDLER_FAST_DECLARE(idle_event, idle_eventhandler_t); +/* Low memory event */ +typedef void (*vm_lowmem_handler_t)(void *, int); +#define LOWMEM_PRI_DEFAULT 0 +EVENTHANDLER_DECLARE(vm_lowmem, vm_lowmem_handler_t); #endif /* SYS_EVENTHANDLER_H */ diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index 1f024e7..ec43082 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -76,6 +76,7 @@ #include <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> +#include <sys/eventhandler.h> #include <sys/lock.h> #include <sys/mutex.h> #include <sys/proc.h> @@ -678,10 +679,17 @@ vm_pageout_scan(int pass) GIANT_REQUIRED; /* + * Decrease registered cache sizes. + */ + EVENTHANDLER_INVOKE(vm_lowmem, 0); + /* + * We do this explicitly after the caches have been drained above. + */ + uma_reclaim(); + /* * Do whatever cleanup that the pmap code can. */ vm_pageout_pmap_collect(); - uma_reclaim(); addl_page_shortage_init = vm_pageout_deficit; vm_pageout_deficit = 0; |