diff options
author | Thomas Bushnell <thomas@gnu.org> | 1999-06-27 23:52:11 +0000 |
---|---|---|
committer | Thomas Bushnell <thomas@gnu.org> | 1999-06-27 23:52:11 +0000 |
commit | 6339d07d670de57411d1825e300f2a78bfaf01f7 (patch) | |
tree | 49fb264a1f470becc74967a1651f8b2348d72032 /vm/vm_page.h | |
parent | 3ad230669bd394f4e77a3c2fada222ba60daf861 (diff) | |
download | gnumach-6339d07d670de57411d1825e300f2a78bfaf01f7.tar.gz gnumach-6339d07d670de57411d1825e300f2a78bfaf01f7.tar.bz2 gnumach-6339d07d670de57411d1825e300f2a78bfaf01f7.zip |
1999-06-27 Thomas Bushnell, BSG <tb@mit.edu>
* vm/vm_resident.c (vm_page_external_count): Define variable.
(vm_page_grab): New argument `external'. All callers changed.
Keep track of number of externally managed pages. Don't let
non-privileged threads exceed the externally-managed page limit.
(vm_page_grab_contiguous_pages): New argument `external'. All
callers changed. Keep track of number of externally managed
pages. Don't let non-privileged threads exceed the
externally-managed page limit.
(vm_page_convert): New argument `external'. All callers changed.
(vm_page_release): New argument `external'. All callers
changed. Keep track of number of externally managed pages.
(vm_page_bootstrap): Initialize M->external.
* vm/vm_page.h (vm_page_external_limit, vm_page_external_count):
New variables.
(struct vm_page): New members `external' and `extcounted'.
* vm/vm_pageout.c (vm_pageout): Initialize vm_page_external_limit
and vm_page_external_target.
(VM_PAGE_EXTERNAL_LIMIT, VM_PAGE_EXTERNAL_TARGET): New macro.
(vm_pageout_external_target): New variable.
(vm_pageout_scan): Regard "too many externally managed pages" as a
reason to keep doing work, but if that's the only reason we're
doing work, then the only thing we do is schedule cleaning of
pages. Help keep track of the number of externally managed pages
that we care about.
* vm/vm_pageout.c (VM_PAGEOUT_BURST_WAIT): Reduce to 10ms/page.
(VM_PAGEOUT_EMPTY_WAIT): Reduce to 75 ms.
(VM_PAGE_FREE_RESERVED): Increase to 50 pages.
(VM_PAGEOUT_RESERVED_INTERNAL): Adjust to `(reserve) - 25'.
(VM_PAGEOUT_RESERVED_REALLY): Adjust to `(reserve) - 40'.
Diffstat (limited to 'vm/vm_page.h')
-rw-r--r-- | vm/vm_page.h | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/vm/vm_page.h b/vm/vm_page.h index f7fa80a3..6ca1c0c1 100644 --- a/vm/vm_page.h +++ b/vm/vm_page.h @@ -93,6 +93,8 @@ struct vm_page { laundry:1, /* page is being cleaned now (P)*/ free:1, /* page is on free list (P) */ reference:1, /* page has been used (P) */ + external:1, /* page considered external (P) */ + extcounted:1, /* page counted in ext counts (P) */ :0; /* (force to 'long' boundary) */ #ifdef ns32000 int pad; /* extra space for ns32000 bit ops */ @@ -184,6 +186,17 @@ extern int vm_page_free_reserved; /* How many pages reserved to do pageout */ extern int vm_page_laundry_count; /* How many pages being laundered? */ +extern +int vm_page_external_limit; /* Max number of pages for external objects */ + +/* Only objects marked with the extcounted bit are included in this total. + Pages which we scan for possible pageout, but which are not actually + dirty, don't get considered against the external page limits any more + in this way. */ +extern +int vm_page_external_count; /* How many pages for external objects? */ + + decl_simple_lock_data(extern,vm_page_queue_lock)/* lock on active and inactive page queues */ @@ -209,9 +222,9 @@ extern vm_page_t vm_page_lookup( vm_offset_t offset); extern vm_page_t vm_page_grab_fictitious(void); extern void vm_page_release_fictitious(vm_page_t); -extern boolean_t vm_page_convert(vm_page_t); +extern boolean_t vm_page_convert(vm_page_t, boolean_t); extern void vm_page_more_fictitious(void); -extern vm_page_t vm_page_grab(void); +extern vm_page_t vm_page_grab(boolean_t); extern void vm_page_release(vm_page_t); extern void vm_page_wait(void (*)(void)); extern vm_page_t vm_page_alloc( |