summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremie Koenig <jk@jk.fr.eu.org>2010-08-25 12:03:16 +0000
committerJeremie Koenig <jk@jk.fr.eu.org>2010-08-30 14:31:33 +0200
commit164db73bb35173f45a7eaba1984c3169cba778e8 (patch)
tree12b9c954a1f0922bc19832410da64b1d8162535d
parente1c831a43ac1945db5a52ee6873856b9399dca76 (diff)
Add swap information to the top-level stat file
* rootdir.c (rootdir_gc_meminfo): Add swap information. * TODO: Update.
-rw-r--r--TODO1
-rw-r--r--rootdir.c30
2 files changed, 29 insertions, 2 deletions
diff --git a/TODO b/TODO
index b4a39b0..241c61a 100644
--- a/TODO
+++ b/TODO
@@ -1,2 +1 @@
-* Add swap information
* Threads in /proc/[pid]/task/[n]
diff --git a/rootdir.c b/rootdir.c
index 204bc02..419f774 100644
--- a/rootdir.c
+++ b/rootdir.c
@@ -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;
}