summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--configure.in2
-rw-r--r--examples/pprint.c6
-rw-r--r--features.def2
-rw-r--r--include/glibtop/cpu.h17
-rw-r--r--sysdeps/linux/cpu.c49
6 files changed, 76 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index de044054..b5186838 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2005-01-03 Benoît Dejean <TazForEver@dlfp.org>
+
+ * examples/pprint.c: (pprint_get_cpu):
+ * features.def:
+ * include/glibtop/cpu.h:
+ * sysdeps/linux/cpu.c: (glibtop_init_cpu_s), (glibtop_get_cpu_s):
+ Added I/O and IRQ wait time to glibtop_cpu. Closes #160443.
+
+ * configure.in: Post-release bump 2.9.4
+
2004-12-29 Benoît Dejean <tazforever@dlfp.org>
* lib/read_data.c: (glibtop_read_data_l):
diff --git a/configure.in b/configure.in
index 1a26645b..cf027731 100644
--- a/configure.in
+++ b/configure.in
@@ -8,7 +8,7 @@ AC_CANONICAL_SYSTEM
LIBGTOP_MAJOR_VERSION=2
LIBGTOP_MINOR_VERSION=9
-LIBGTOP_MICRO_VERSION=3
+LIBGTOP_MICRO_VERSION=4
LIBGTOP_VERSION=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION.$LIBGTOP_MICRO_VERSION
AM_INIT_AUTOMAKE(libgtop, $LIBGTOP_VERSION)
diff --git a/examples/pprint.c b/examples/pprint.c
index cba8db64..55afa92c 100644
--- a/examples/pprint.c
+++ b/examples/pprint.c
@@ -41,12 +41,18 @@ static void pprint_get_cpu()
PPRINT(nice, "%llu");
PPRINT(sys, "%llu");
PPRINT(idle, "%llu");
+ PPRINT(iowait, "%llu");
+ PPRINT(irq, "%llu");
+ PPRINT(softirq, "%llu");
PPRINT(frequency, "%llu");
PPRINT_ARRAY(xcpu_total, GLIBTOP_NCPU, "%llu");
PPRINT_ARRAY(xcpu_user, GLIBTOP_NCPU, "%llu");
PPRINT_ARRAY(xcpu_nice, GLIBTOP_NCPU, "%llu");
PPRINT_ARRAY(xcpu_sys, GLIBTOP_NCPU, "%llu");
PPRINT_ARRAY(xcpu_idle, GLIBTOP_NCPU, "%llu");
+ PPRINT_ARRAY(xcpu_iowait, GLIBTOP_NCPU, "%llu");
+ PPRINT_ARRAY(xcpu_irq, GLIBTOP_NCPU, "%llu");
+ PPRINT_ARRAY(xcpu_softirq, GLIBTOP_NCPU, "%llu");
PPRINT(xcpu_flags, "%llx");
FOOTER_PPRINT();
}
diff --git a/features.def b/features.def
index 7cf18500..ea4d30e0 100644
--- a/features.def
+++ b/features.def
@@ -1,4 +1,4 @@
-void|cpu|ulong(total,user,nice,sys,idle,frequency,xcpu_total[4],xcpu_user[4],xcpu_nice[4],xcpu_sys[4],xcpu_idle[4])
+void|cpu|ulong(total,user,nice,sys,idle,iowait,irq,softirq,frequency,xcpu_total[4],xcpu_user[4],xcpu_nice[4],xcpu_sys[4],xcpu_idle[4],xcpu_iowait[4],xcpu_irq[4],xcpu_softirq[4])
void|mem|ulong(total,used,free,shared,buffer,cached,user,locked)
void|swap|ulong(total,used,free,pagein,pageout)
void|uptime|double(uptime,idletime)
diff --git a/include/glibtop/cpu.h b/include/glibtop/cpu.h
index c22c9c37..3de3a4c4 100644
--- a/include/glibtop/cpu.h
+++ b/include/glibtop/cpu.h
@@ -41,9 +41,16 @@ G_BEGIN_DECLS
#define GLIBTOP_XCPU_NICE 8
#define GLIBTOP_XCPU_SYS 9
#define GLIBTOP_XCPU_IDLE 10
-#define GLIBTOP_XCPU_FLAGS 11
+#define GLIBTOP_XCPU_FLAGS 11
-#define GLIBTOP_MAX_CPU 12
+#define GLIBTOP_CPU_IOWAIT 12
+#define GLIBTOP_CPU_IRQ 13
+#define GLIBTOP_CPU_SOFTIRQ 14
+#define GLIBTOP_XCPU_IOWAIT 15
+#define GLIBTOP_XCPU_IRQ 16
+#define GLIBTOP_XCPU_SOFTIRQ 17
+
+#define GLIBTOP_MAX_CPU 18
/* Nobody should really be using more than 4 processors. */
#define GLIBTOP_NCPU 4
@@ -58,12 +65,18 @@ struct _glibtop_cpu
nice, /* GLIBTOP_CPU_NICE */
sys, /* GLIBTOP_CPU_SYS */
idle, /* GLIBTOP_CPU_IDLE */
+ iowait, /* GLIBTOP_CPU_IOWAIT */
+ irq, /* GLIBTOP_CPU_IRQ */
+ softirq, /* GLIBTOP_CPU_SOFTIRQ */
frequency, /* GLIBTOP_CPU_FREQUENCY */
xcpu_total [GLIBTOP_NCPU], /* GLIBTOP_XCPU_TOTAL */
xcpu_user [GLIBTOP_NCPU], /* GLIBTOP_XCPU_USER */
xcpu_nice [GLIBTOP_NCPU], /* GLIBTOP_XCPU_NICE */
xcpu_sys [GLIBTOP_NCPU], /* GLIBTOP_XCPU_SYS */
xcpu_idle [GLIBTOP_NCPU], /* GLIBTOP_XCPU_IDLE */
+ xcpu_iowait [GLIBTOP_NCPU], /* GLIBTOP_XCPU_IOWAIT */
+ xcpu_irq [GLIBTOP_NCPU], /* GLIBTOP_XCPU_IRQ */
+ xcpu_softirq [GLIBTOP_NCPU], /* GLIBTOP_XCPU_SOFTIRQ */
xcpu_flags; /* GLIBTOP_XCPU_IDLE */
};
diff --git a/sysdeps/linux/cpu.c b/sysdeps/linux/cpu.c
index 7b4669db..e84ae2b9 100644
--- a/sysdeps/linux/cpu.c
+++ b/sysdeps/linux/cpu.c
@@ -37,6 +37,14 @@ static const unsigned long _glibtop_sysdeps_cpu_smp =
(1L << GLIBTOP_XCPU_NICE) + (1L << GLIBTOP_XCPU_SYS) +
(1L << GLIBTOP_XCPU_IDLE);
+static const unsigned long _glibtop_sysdeps_cpu_2_6 =
+(1L << GLIBTOP_CPU_IOWAIT) + (1L << GLIBTOP_CPU_IRQ) +
+(1L << GLIBTOP_CPU_SOFTIRQ);
+
+static const unsigned long _glibtop_sysdeps_cpu_smp_2_6 =
+(1L << GLIBTOP_XCPU_IOWAIT) + (1L << GLIBTOP_XCPU_IRQ) +
+(1L << GLIBTOP_XCPU_SOFTIRQ);
+
/* Init function. */
void
@@ -46,6 +54,15 @@ glibtop_init_cpu_s (glibtop *server)
if (server->ncpu)
server->sysdeps.cpu |= _glibtop_sysdeps_cpu_smp;
+
+
+ if(server->os_version_code >= LINUX_VERSION_CODE(2, 6, 0))
+ {
+ server->sysdeps.cpu |= _glibtop_sysdeps_cpu_2_6;
+
+ if (server->ncpu)
+ server->sysdeps.cpu |= _glibtop_sysdeps_cpu_smp_2_6;
+ }
}
/* Provides information about cpu usage. */
@@ -76,9 +93,15 @@ glibtop_get_cpu_s (glibtop *server, glibtop_cpu *buf)
buf->idle = strtoull (p, &p, 0);
/* 2.6 kernel */
- buf->idle += strtoull(p, &p, 0); /* "iowait" */
- buf->sys += strtoull(p, &p, 0); /* "irq" */
- buf->sys += strtoull(p, &p, 0); /* "softirq" */
+ if(server->os_version_code >= LINUX_VERSION_CODE(2, 6, 0))
+ {
+ buf->iowait = strtoull(p, &p, 0);
+ buf->irq = strtoull(p, &p, 0);
+ buf->softirq = strtoull(p, &p, 0);
+
+ buf->idle += buf->iowait;
+ buf->sys += buf->irq + buf->softirq;
+ }
buf->total = buf->user + buf->nice + buf->sys + buf->idle;
@@ -104,9 +127,15 @@ glibtop_get_cpu_s (glibtop *server, glibtop_cpu *buf)
buf->xcpu_idle [i] = strtoull (p, &p, 0);
/* 2.6 kernel */
- buf->xcpu_idle [i] += strtoull(p, &p, 0); /* "iowait" */
- buf->xcpu_sys [i] += strtoull(p, &p, 0); /* "irq" */
- buf->xcpu_sys [i] += strtoull(p, &p, 0); /* "softirq" */
+ if(server->os_version_code >= LINUX_VERSION_CODE(2, 6, 0))
+ {
+ buf->xcpu_iowait [i] = strtoull(p, &p, 0);
+ buf->xcpu_irq [i] = strtoull(p, &p, 0);
+ buf->xcpu_softirq [i] = strtoull(p, &p, 0);
+
+ buf->xcpu_idle [i] += buf->xcpu_iowait [i];
+ buf->xcpu_sys [i] += buf->xcpu_irq [i] + buf->xcpu_softirq [i];
+ }
buf->xcpu_total[i] = buf->xcpu_user [i] \
+ buf->xcpu_nice [i] \
@@ -116,4 +145,12 @@ glibtop_get_cpu_s (glibtop *server, glibtop_cpu *buf)
if(i >= 2) /* ok, that's a real SMP */
buf->flags |= _glibtop_sysdeps_cpu_smp;
+
+ if(server->os_version_code >= LINUX_VERSION_CODE(2, 6, 0))
+ {
+ buf->flags |= _glibtop_sysdeps_cpu_2_6;
+
+ if(i >= 2) /* ok, that's a real SMP */
+ buf->flags |= _glibtop_sysdeps_cpu_smp_2_6;
+ }
}