summaryrefslogtreecommitdiff
path: root/vm/vm_resident.c
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2012-09-23 00:25:13 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2012-09-23 00:28:40 +0200
commit9eacb0eab6eb8e35bb26ab3db660973fddf9e8fb (patch)
tree03d50c74d110f2bab3a8fb2ebac9eb7aca0313c4 /vm/vm_resident.c
parentf5f6f62357b90e1ce1eb24f2929314b0d84078d0 (diff)
Provide basic page cache statistics
* Makefrag.am (EXTRA_DIST): Add kern/gnumach.srv. (include_mach_HEADERS): Add include/mach/gnumach.defs and include/mach/vm_cache_statistics.h (nodist_libkernel_a_SOURCES): Add kern/gnumach.server.defs.c, kern/gnumach.server.h, kern/gnumach.server.c, kern/gnumach.server.msgids, kern/gnumach.server.defs. * include/mach/mach_types.h: Add #include <mach/vm_cache_statistics.h>. * kern/ipc_kobject.c (ipc_kobject_server): Declare and call gnumach_server_routine. * vm/vm_object.c (vm_object_cached_pages): New variable. (vm_object_cached_pages_lock_data): Likewise. (vm_object_deallocate): Update number of cached pages. (vm_object_lookup): Likewise. (vm_object_lookup_name): Likewise. (vm_object_destroy): Likewise. (vm_object_enter): Likewise. * vm/vm_object.h (ref_count): Declare as int. (resident_page_count): Likewise. (vm_object_cached_count): Add extern declaration. (vm_object_cached_pages): Likewise. (vm_object_cached_pages_lock_data): Likewise. (vm_object_cached_pages_update): New macro. * vm/vm_resident.c (vm_page_insert): Assert resident page count doesn't overflow, update number of cached pages as appropriate. (vm_page_replace): Likewise. (vm_page_remove): Update number of cached pages as appropriate. * vm/vm_user.c: Add #include <mach/vm_cache_statistics.h>. (vm_cache_statistics): New function. * vm/vm_user.h: Add #include <mach/mach_types.h>. (vm_cache_statistics): New declaration. * include/mach/gnumach.defs: New file.
Diffstat (limited to 'vm/vm_resident.c')
-rw-r--r--vm/vm_resident.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/vm/vm_resident.c b/vm/vm_resident.c
index ae71a74..581a9c4 100644
--- a/vm/vm_resident.c
+++ b/vm/vm_resident.c
@@ -517,6 +517,10 @@ void vm_page_insert(
*/
object->resident_page_count++;
+ assert(object->resident_page_count >= 0);
+
+ if (object->can_persist && (object->ref_count == 0))
+ vm_object_cached_pages_update(1);
/*
* Detect sequential access and inactivate previous page.
@@ -585,6 +589,10 @@ void vm_page_replace(
m->tabled = FALSE;
object->resident_page_count--;
+ if (object->can_persist
+ && (object->ref_count == 0))
+ vm_object_cached_pages_update(-1);
+
/*
* Return page to the free list.
* Note the page is not tabled now, so this
@@ -616,6 +624,10 @@ void vm_page_replace(
*/
object->resident_page_count++;
+ assert(object->resident_page_count >= 0);
+
+ if (object->can_persist && (object->ref_count == 0))
+ vm_object_cached_pages_update(1);
}
/*
@@ -671,6 +683,9 @@ void vm_page_remove(
mem->object->resident_page_count--;
mem->tabled = FALSE;
+
+ if (mem->object->can_persist && (mem->object->ref_count == 0))
+ vm_object_cached_pages_update(-1);
}
/*