diff options
author | Jeremie Koenig <jk@jk.fr.eu.org> | 2010-08-25 12:03:16 +0000 |
---|---|---|
committer | Jeremie Koenig <jk@jk.fr.eu.org> | 2010-08-30 14:31:33 +0200 |
commit | cc1b191e53042a9938daf92ce84e869dda592868 (patch) | |
tree | b9ba7438c0c80e2fcc7e76dc87f00255a3f85dfe | |
parent | f708dd1262df8033d4709dbba1da026e8b92f669 (diff) |
Add swap information to the top-level stat file
* rootdir.c (rootdir_gc_meminfo): Add swap information.
* TODO: Update.
-rw-r--r-- | rootdir.c | 30 |
1 files changed, 29 insertions, 1 deletions
@@ -1,7 +1,10 @@ #include <mach/vm_param.h> #include <mach/vm_statistics.h> +#include <mach/default_pager.h> +#include <hurd/paths.h> #include <stdio.h> #include <unistd.h> +#include <fcntl.h> #include <sys/time.h> #include <sys/utsname.h> #include <sys/stat.h> @@ -102,6 +105,22 @@ out: } static error_t +get_swapinfo (default_pager_info_t *info) +{ + mach_port_t defpager; + error_t err; + + defpager = file_name_lookup (_SERVERS_DEFPAGER, O_READ, 0); + if (defpager == MACH_PORT_NULL) + return errno; + + err = default_pager_info (defpager, info); + mach_port_deallocate (mach_task_self (), defpager); + + return err; +} + +static error_t rootdir_gc_version (void *hook, char **contents, ssize_t *contents_len) { struct utsname uts; @@ -223,6 +242,7 @@ rootdir_gc_meminfo (void *hook, char **contents, ssize_t *contents_len) host_basic_info_data_t hbi; mach_msg_type_number_t cnt; struct vm_statistics vmstats; + default_pager_info_t swap; error_t err; err = vm_statistics (mach_task_self (), &vmstats); @@ -234,6 +254,10 @@ rootdir_gc_meminfo (void *hook, char **contents, ssize_t *contents_len) if (err) return err; + err = get_swapinfo (&swap); + if (err) + return err; + assert (cnt == HOST_BASIC_INFO_COUNT); *contents_len = asprintf (contents, "MemTotal: %14lu kB\n" @@ -241,13 +265,17 @@ rootdir_gc_meminfo (void *hook, char **contents, ssize_t *contents_len) "Active: %14lu kB\n" "Inactive: %14lu kB\n" "Mlocked: %14lu kB\n" + "SwapTotal:%14lu kB\n" + "SwapFree: %14lu kB\n" , /* TODO: check that these are really 1024-bytes kBs. */ (long unsigned) hbi.memory_size / 1024, (long unsigned) vmstats.free_count * PAGE_SIZE / 1024, (long unsigned) vmstats.active_count * PAGE_SIZE / 1024, (long unsigned) vmstats.inactive_count * PAGE_SIZE / 1024, - (long unsigned) vmstats.wire_count * PAGE_SIZE / 1024); + (long unsigned) vmstats.wire_count * PAGE_SIZE / 1024, + (long unsigned) swap.dpi_total_space / 1024, + (long unsigned) swap.dpi_free_space / 1024); return 0; } |