[Xfce4-commits] <xfce4-taskmanager:master> Display Swap usage in Solaris implementation
Mike Massonnet
noreply at xfce.org
Tue May 18 21:50:01 CEST 2010
Updating branch refs/heads/master
to bbd591fd23d2c24f11bafaf658fefd38f4e490c8 (commit)
from bb79501cfb37aef94e00b564a9a042eb7395cba8 (commit)
commit bbd591fd23d2c24f11bafaf658fefd38f4e490c8
Author: Mike Massonnet <mmassonnet at xfce.org>
Date: Mon May 17 03:18:10 2010 +0200
Display Swap usage in Solaris implementation
The Swap usage is retrieved through swapctl(). Also on a separate change, read
the CPU time from the nanosecs instead of ticks for increased precision.
src/task-manager-solaris.c | 51 +++++++++++++++++++++++++++++++++----------
1 files changed, 39 insertions(+), 12 deletions(-)
diff --git a/src/task-manager-solaris.c b/src/task-manager-solaris.c
index afb8344..dfea945 100644
--- a/src/task-manager-solaris.c
+++ b/src/task-manager-solaris.c
@@ -17,6 +17,7 @@
#include <fcntl.h>
#include <procfs.h>
#include <sys/procfs.h>
+#include <sys/swap.h>
#include <glib.h>
@@ -36,6 +37,7 @@ get_memory_usage (guint64 *memory_total, guint64 *memory_free, guint64 *memory_c
{
kstat_t *ksp;
kstat_named_t *knp;
+ gint n;
if (!kc)
init_stats();
@@ -49,13 +51,37 @@ get_memory_usage (guint64 *memory_total, guint64 *memory_free, guint64 *memory_c
*memory_free = getpagesize () * knp->value.ui64;
*memory_cache = 0;
- if (!(ksp = kstat_lookup (kc, "unix", 0, "vminfo")))
- return FALSE;
- kstat_read (kc, ksp, NULL);
- // TODO read swap usage
- //knp = kstat_data_lookup (ksp, "...");
- *swap_total = 0;
- *swap_free = 0;
+ *swap_total = *swap_free = 0;
+ if ((n = swapctl (SC_GETNSWP, NULL)) > 0)
+ {
+ struct swaptable *st;
+ struct swapent *swapent;
+ gchar path[MAXPATHLEN];
+ gint i;
+
+ if ((st = malloc (sizeof (int) + n * sizeof (swapent_t))) == NULL)
+ return FALSE;
+ st->swt_n = n;
+
+ swapent = st->swt_ent;
+ for (i = 0; i < n; i++, swapent++)
+ swapent->ste_path = path;
+
+ if ((swapctl (SC_LIST, st)) == -1)
+ {
+ free (st);
+ return FALSE;
+ }
+
+ swapent = st->swt_ent;
+ for (i = 0; i < n; i++, swapent++)
+ {
+ *swap_total += swapent->ste_pages * getpagesize ();
+ *swap_free += swapent->ste_free * getpagesize ();
+ }
+
+ free (st);
+ }
return TRUE;
}
@@ -113,16 +139,17 @@ get_cpu_usage (gushort *cpu_count, gfloat *cpu_user, gfloat *cpu_system)
}
else if (!g_strcmp0 (ksp->ks_module, "cpu") && !g_strcmp0 (ksp->ks_name, "sys"))
{
- // TODO switch ticks to nsec for better precision
kstat_read (kc, ksp, NULL);
- knp = kstat_data_lookup (ksp, "cpu_ticks_user");
- ticks_user += knp->value.ul;
- knp = kstat_data_lookup (ksp, "cpu_ticks_kernel");
- ticks_system += knp->value.ul;
+ knp = kstat_data_lookup (ksp, "cpu_nsec_user");
+ ticks_user += knp->value.ul / 100000;
+ knp = kstat_data_lookup (ksp, "cpu_nsec_kernel");
+ ticks_system += knp->value.ul / 100000;
}
}
get_cpu_percent (0, ticks_user, cpu_user, ticks_system, cpu_system);
+ *cpu_user /= 100.0;
+ *cpu_system /= 100.0;
*cpu_count = _cpu_count;
return TRUE;
More information about the Xfce4-commits
mailing list