diff options
author | Richard Braun <rbraun@sceen.net> | 2016-09-20 22:59:42 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2016-09-21 00:21:08 +0200 |
commit | 783ad37f65384994dfa5387ab3847a8a4d77b90b (patch) | |
tree | b79f445a9fe53680cca9484fc3e02a32d6859e5c /vm/vm_pageout.c | |
parent | 38aca37c00548f9b31bf17e74ab4a36c73521782 (diff) | |
download | gnumach-783ad37f65384994dfa5387ab3847a8a4d77b90b.tar.gz gnumach-783ad37f65384994dfa5387ab3847a8a4d77b90b.tar.bz2 gnumach-783ad37f65384994dfa5387ab3847a8a4d77b90b.zip |
Redefine what an external page is
Instead of a "page considered external", which apparently takes into
account whether a page is dirty or not, redefine this property to
reliably mean "is in an external object".
This commit mostly deals with the impact of this change on the page
allocation interface.
* i386/intel/pmap.c (pmap_page_table_page_alloc): Update call to
vm_page_grab.
* kern/slab.c (kmem_pagealloc_physmem): Use vm_page_grab instead of
vm_page_grab_contig.
(kmem_pagefree_physmem): Use vm_page_release instead of
vm_page_free_contig.
* linux/dev/glue/block.c (alloc_buffer, device_read): Update call
to vm_page_grab.
* vm/vm_fault.c (vm_fault_page): Update calls to vm_page_grab and
vm_page_convert.
* vm/vm_map.c (vm_map_copy_steal_pages): Update call to vm_page_grab.
* vm/vm_page.h (struct vm_page): Remove `extcounted' member.
(vm_page_external_limit, vm_page_external_count): Remove extern
declarations.
(vm_page_convert, vm_page_grab): Update declarations.
(vm_page_release, vm_page_grab_phys_addr): New function declarations.
* vm/vm_pageout.c (VM_PAGE_EXTERNAL_LIMIT): Remove macro.
(VM_PAGE_EXTERNAL_TARGET): Likewise.
(vm_page_external_target): Remove variable.
(vm_pageout_scan): Remove specific handling of external pages.
(vm_pageout): Don't set vm_page_external_limit and
vm_page_external_target.
* vm/vm_resident.c (vm_page_external_limit): Remove variable.
(vm_page_insert, vm_page_replace, vm_page_remove): Update external
page tracking.
(vm_page_convert): RemoveĀ `external' parameter.
(vm_page_grab): Likewise. Remove specific handling of external pages.
(vm_page_grab_phys_addr): Update call to vm_page_grab.
(vm_page_release): Remove `external' parameter and remove specific
handling of external pages.
(vm_page_wait): Remove specific handling of external pages.
(vm_page_alloc): Update call to vm_page_grab.
(vm_page_free): Update call to vm_page_release.
* xen/block.c (device_read): Update call to vm_page_grab.
* xen/net.c (device_write): Likewise.
Diffstat (limited to 'vm/vm_pageout.c')
-rw-r--r-- | vm/vm_pageout.c | 41 |
1 files changed, 0 insertions, 41 deletions
diff --git a/vm/vm_pageout.c b/vm/vm_pageout.c index e0bd9880..a36c9905 100644 --- a/vm/vm_pageout.c +++ b/vm/vm_pageout.c @@ -109,21 +109,6 @@ #define VM_PAGE_FREE_MIN(free) (100 + (free) * 8 / 100) #endif /* VM_PAGE_FREE_MIN */ -/* When vm_page_external_count exceeds vm_page_external_limit, - * allocations of externally paged pages stops. - */ - -#ifndef VM_PAGE_EXTERNAL_LIMIT -#define VM_PAGE_EXTERNAL_LIMIT(free) ((free) / 2) -#endif /* VM_PAGE_EXTERNAL_LIMIT */ - -/* Attempt to keep the number of externally paged pages less - * than vm_pages_external_target. - */ -#ifndef VM_PAGE_EXTERNAL_TARGET -#define VM_PAGE_EXTERNAL_TARGET(free) ((free) / 4) -#endif /* VM_PAGE_EXTERNAL_TARGET */ - /* * When the number of free pages falls below vm_page_free_reserved, * only vm-privileged threads can allocate pages. vm-privilege @@ -162,8 +147,6 @@ unsigned int vm_pageout_reserved_internal = 0; unsigned int vm_pageout_reserved_really = 0; -unsigned int vm_page_external_target = 0; - unsigned int vm_pageout_burst_max = 0; unsigned int vm_pageout_burst_min = 0; unsigned int vm_pageout_burst_wait = 0; /* milliseconds per page */ @@ -633,7 +616,6 @@ void vm_pageout_scan(void) simple_lock(&vm_page_queue_free_lock); free_count = vm_page_mem_free(); if ((free_count >= vm_page_free_target) && - (vm_page_external_count <= vm_page_external_target) && (vm_page_free_wanted == 0)) { vm_page_unlock_queues(); break; @@ -783,21 +765,6 @@ void vm_pageout_scan(void) if (!m->dirty) m->dirty = pmap_is_modified(m->phys_addr); - if (m->external) { - /* Figure out if we still care about this - page in the limit of externally managed pages. - Clean pages don't actually cause system hosage, - so it's ok to stop considering them as - "consumers" of memory. */ - if (m->dirty && !m->extcounted) { - m->extcounted = TRUE; - vm_page_external_count++; - } else if (!m->dirty && m->extcounted) { - m->extcounted = FALSE; - vm_page_external_count--; - } - } - /* If we don't actually need more memory, and the page is not dirty, put it on the tail of the inactive queue and move on to the next page. */ @@ -954,14 +921,6 @@ void vm_pageout(void) free_after_reserve = vm_page_mem_free() - vm_page_free_reserved; - if (vm_page_external_limit == 0) - vm_page_external_limit = - VM_PAGE_EXTERNAL_LIMIT (free_after_reserve); - - if (vm_page_external_target == 0) - vm_page_external_target = - VM_PAGE_EXTERNAL_TARGET (free_after_reserve); - if (vm_page_free_min == 0) vm_page_free_min = vm_page_free_reserved + VM_PAGE_FREE_MIN(free_after_reserve); |