summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Baulig <martin@home-of-linux.org>1998-08-01 22:03:11 +0000
committerMartin Baulig <martin@src.gnome.org>1998-08-01 22:03:11 +0000
commit2e454140f124d41aa08081c09ea0efcb0e6293e5 (patch)
tree4e5967c1509ff6bab5485f897cec977c7cb5d4e0
parentfc506344eaef84431d8c64288e93e5e5ca90cdd3 (diff)
downloadlibgtop-2e454140f124d41aa08081c09ea0efcb0e6293e5.tar.gz
Added `pagein' and `pageout'.
1998-08-01 Martin Baulig <martin@home-of-linux.org> * include/glibtop/swap.h (glibtop_swap): Added `pagein' and `pageout'. * kernel/table20/table.h: Removed. * kernel/table21/table.h: Removed. * kernel/table.h: Added. Things are now binary compatible between both kernel versions.
-rw-r--r--ChangeLog9
-rw-r--r--examples/first.c5
-rw-r--r--features.def2
-rw-r--r--include/glibtop/swap.h8
-rw-r--r--kernel/table.h (renamed from kernel/table21/table.h)2
-rw-r--r--kernel/table20/kernel.patch10
-rw-r--r--kernel/table20/main.c2
-rw-r--r--kernel/table20/table.h166
-rw-r--r--sysdeps/kernel/swap.c6
-rw-r--r--sysdeps/linux/swap.c17
-rw-r--r--sysdeps/names/swap.c13
11 files changed, 59 insertions, 181 deletions
diff --git a/ChangeLog b/ChangeLog
index 46d52453..86acc872 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+1998-08-01 Martin Baulig <martin@home-of-linux.org>
+
+ * include/glibtop/swap.h (glibtop_swap): Added `pagein' and `pageout'.
+
+ * kernel/table20/table.h: Removed.
+ * kernel/table21/table.h: Removed.
+ * kernel/table.h: Added. Things are now binary compatible between
+ both kernel versions.
+
1998-07-30 Martin Baulig <martin@home-of-linux.org>
* acconfig.h (u_int64_t, int64_t): Added.
diff --git a/examples/first.c b/examples/first.c
index e3703714..979003db 100644
--- a/examples/first.c
+++ b/examples/first.c
@@ -86,8 +86,9 @@ main (int argc, char *argv [])
for (c = 0; c < PROFILE_COUNT; c++)
glibtop_get_swap (&data.swap);
- printf ("Swap (0x%08Lx): %Lu, %Lu, %Lu\n", data.swap.flags,
- data.swap.total, data.swap.used, data.swap.free);
+ printf ("Swap (0x%08Lx): %Lu, %Lu, %Lu, %Lu, %Lu\n",
+ data.swap.flags, data.swap.total, data.swap.used,
+ data.swap.free, data.swap.pagein, data.swap.pageout);
for (c = 0; c < PROFILE_COUNT; c++)
glibtop_get_uptime (&data.uptime);
diff --git a/features.def b/features.def
index a941f887..574ed49d 100644
--- a/features.def
+++ b/features.def
@@ -1,6 +1,6 @@
void|cpu|ulong(total,user,nice,sys,idle,frequency)
void|mem|ulong(total,used,free,shared,buffer,cached,user,locked)
-void|swap|ulong(total,used,free)
+void|swap|ulong(total,used,free,pagein,pageout)
void|uptime|double(uptime,idletime)
void|loadavg|double(loadavg[0],loadavg[1],loadavg[2])
void|shm_limits|ulong(shmmax,shmmin,shmmni,shmseg,shmall)
diff --git a/include/glibtop/swap.h b/include/glibtop/swap.h
index c85aac93..542abaaa 100644
--- a/include/glibtop/swap.h
+++ b/include/glibtop/swap.h
@@ -30,8 +30,10 @@ __BEGIN_DECLS
#define GLIBTOP_SWAP_TOTAL 0
#define GLIBTOP_SWAP_USED 1
#define GLIBTOP_SWAP_FREE 2
+#define GLIBTOP_SWAP_PAGEIN 3
+#define GLIBTOP_SWAP_PAGEOUT 4
-#define GLIBTOP_MAX_SWAP 3
+#define GLIBTOP_MAX_SWAP 5
typedef struct _glibtop_swap glibtop_swap;
@@ -40,7 +42,9 @@ struct _glibtop_swap
u_int64_t flags,
total, /* GLIBTOP_SWAP_TOTAL */
used, /* GLIBTOP_SWAP_USED */
- free; /* GLIBTOP_SWAP_FREE */
+ free, /* GLIBTOP_SWAP_FREE */
+ pagein, /* GLIBTOP_SWAP_PAGEIN */
+ pageout; /* GLIBTOP_SWAP_PAGEOUT */
};
#define glibtop_get_swap(swap) glibtop_get_swap_l(glibtop_global_server, swap)
diff --git a/kernel/table21/table.h b/kernel/table.h
index 2b5788d4..9136f537 100644
--- a/kernel/table21/table.h
+++ b/kernel/table.h
@@ -53,6 +53,8 @@ struct table_swap
unsigned long total; /* Total swap space */
unsigned long used; /* Used swap space */
unsigned long free; /* Free swap space */
+ unsigned long pagein; /* Total # of pages swapped in */
+ unsigned long pageout; /* Total # of pages swapped out */
};
/* Load average */
diff --git a/kernel/table20/kernel.patch b/kernel/table20/kernel.patch
index 0ac00716..37654b3d 100644
--- a/kernel/table20/kernel.patch
+++ b/kernel/table20/kernel.patch
@@ -28,14 +28,16 @@ diff -ur linux-2.0.32/Makefile linux-hacked/Makefile
diff -ur linux-2.0.32/arch/i386/kernel/entry.S linux-hacked/arch/i386/kernel/entry.S
--- linux-2.0.32/arch/i386/kernel/entry.S Tue Sep 16 23:42:45 1997
+++ linux-hacked/arch/i386/kernel/entry.S Thu Jun 11 21:37:20 1998
-@@ -699,4 +699,6 @@
+@@ -699,4 +699,8 @@
.long SYMBOL_NAME(sys_mremap)
.long 0,0
.long SYMBOL_NAME(sys_vm86)
- .space (NR_syscalls-166)*4
-+ .long 0
++ .long 0,0,0,0 /* 170 */
++ .long 0,0,0,0,0,0,0,0,0,0 /* 180 */
++ .long 0,0,0,0,0,0,0
+ .long SYMBOL_NAME(sys_table)
-+ .space (NR_syscalls-168)*4
++ .space (NR_syscalls-188)*4
diff -ur linux-2.0.32/include/asm-i386/unistd.h linux-hacked/include/asm-i386/unistd.h
--- linux-2.0.32/include/asm-i386/unistd.h Fri Mar 22 07:34:02 1996
+++ linux-hacked/include/asm-i386/unistd.h Thu Jun 11 21:37:03 1998
@@ -43,7 +45,7 @@ diff -ur linux-2.0.32/include/asm-i386/unistd.h linux-hacked/include/asm-i386/un
#define __NR_sched_rr_get_interval 161
#define __NR_nanosleep 162
#define __NR_mremap 163
-+#define __NR_table 168
++#define __NR_table 188
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
#define _syscall0(type,name) \
diff --git a/kernel/table20/main.c b/kernel/table20/main.c
index e85ddbfc..b5397eba 100644
--- a/kernel/table20/main.c
+++ b/kernel/table20/main.c
@@ -257,6 +257,8 @@ sys_table (int type, union table *buf, const void *param)
tbl.swap.total = i.totalswap;
tbl.swap.used = i.totalswap - i.freeswap;
tbl.swap.free = i.freeswap;
+ tbl.swap.pagein = kstat.pswpin;
+ tbl.swap.pageout = kstat.pswpout;
break;
case TABLE_LOADAVG:
tbl.loadavg.loadavg [0] = (double) avenrun [0] / (1 << FSHIFT);
diff --git a/kernel/table20/table.h b/kernel/table20/table.h
deleted file mode 100644
index 51aabf62..00000000
--- a/kernel/table20/table.h
+++ /dev/null
@@ -1,166 +0,0 @@
-#ifndef _LINUX_TABLE_H
-#define _LINUX_TABLE_H
-
-#ifdef _KERNEL
-#include <linux/types.h>
-#else
-#define NR_TASKS 512
-#endif
-
-#define TABLE_VERSION 0
-#define TABLE_CPU 1
-#define TABLE_MEM 2
-#define TABLE_SWAP 3
-#define TABLE_LOADAVG 4
-#define TABLE_UPTIME 5
-#define TABLE_PROCLIST 6
-#define TABLE_PROC_UID 7
-#define TABLE_PROC_MEM 8
-#define TABLE_PROC_SEGMENT 9
-#define TABLE_PROC_TIME 10
-#define TABLE_PROC_STATE 11
-#define TABLE_PROC_SIGNAL 12
-#define TABLE_PROC_KERNEL 13
-
-/* CPU Usage (in jiffies = 1/100th seconds) */
-
-struct table_cpu
-{
- unsigned long total; /* Total CPU Time */
- unsigned long user; /* CPU Time in User Mode */
- unsigned long nice; /* CPU Time in User Mode (nice) */
- unsigned long sys; /* CPU Time in System Mode */
- unsigned long idle; /* CPU Time in the Idle Task */
- unsigned long frequency; /* Tick frequency */
-};
-
-/* Memory Usage (in bytes) */
-
-struct table_mem
-{
- unsigned long total; /* Total physical memory */
- unsigned long used; /* Used memory size */
- unsigned long free; /* Free memory size */
- unsigned long shared; /* Shared memory size */
- unsigned long buffer; /* Size of buffers */
- unsigned long cached; /* Size of cached memory */
-};
-
-/* Swap Space (in bytes) */
-
-struct table_swap
-{
- unsigned long total; /* Total swap space */
- unsigned long used; /* Used swap space */
- unsigned long free; /* Free swap space */
-};
-
-/* Load average */
-
-struct table_loadavg
-{
- double loadavg [3];
- unsigned nr_running;
- unsigned nr_tasks;
- unsigned last_pid;
-};
-
-/* Uptime */
-
-struct table_uptime
-{
- unsigned long uptime;
- unsigned long idle;
-};
-
-/* Process list. */
-
-struct table_proclist
-{
- int nr_running, nr_tasks, last_pid;
- unsigned pids [NR_TASKS];
-};
-
-/* Information about processes. */
-
-struct table_proc_state
-{
- long state;
- unsigned long flags;
- char comm[16];
-};
-
-struct table_proc_uid
-{
- int uid, euid, suid, fsuid;
- int gid, egid, sgid, fsgid;
- int pid, pgrp, ppid;
- int session;
- unsigned int tty;
- int tpgid;
- long priority;
- long counter;
- long def_priority;
-};
-
-struct table_proc_mem
-{
- unsigned long context;
- unsigned long start_code, end_code, start_data, end_data;
- unsigned long start_brk, brk, start_stack, start_mmap;
- unsigned long arg_start, arg_end, env_start, env_end;
- unsigned long rss, rlim, total_vm, locked_vm;
-};
-
-struct table_proc_segment
-{
- unsigned long vsize;
- int size, resident, shared;
- int trs, lrs, drs, dt;
-};
-
-struct table_proc_time
-{
- long utime, stime, cutime, cstime, start_time;
- unsigned long timeout, policy, rt_priority;
- unsigned long it_real_value, it_prof_value, it_virt_value;
- unsigned long it_real_incr, it_prof_incr, it_virt_incr;
-};
-
-struct table_proc_signal
-{
- sigset_t signal;
- sigset_t blocked; /* bitmap of masked signals */
- sigset_t ignored; /* mask of ignored signals */
- sigset_t caught; /* mask of caught signals */
-};
-
-struct table_proc_kernel
-{
- unsigned long keip, kesp, wchan;
- unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
- unsigned long nswap, cnswap;
-};
-
-/* Union */
-
-union table
-{
- struct table_cpu cpu;
- struct table_mem mem;
- struct table_swap swap;
- struct table_loadavg loadavg;
- struct table_uptime uptime;
- struct table_proclist proclist;
- struct table_proc_uid proc_uid;
- struct table_proc_mem proc_mem;
- struct table_proc_segment proc_segment;
- struct table_proc_time proc_time;
- struct table_proc_state proc_state;
- struct table_proc_signal proc_signal;
- struct table_proc_kernel proc_kernel;
-};
-
-#endif /* _LINUX_IPC_H */
-
-
diff --git a/sysdeps/kernel/swap.c b/sysdeps/kernel/swap.c
index cb7643e9..818994dd 100644
--- a/sysdeps/kernel/swap.c
+++ b/sysdeps/kernel/swap.c
@@ -27,7 +27,8 @@
static unsigned long _glibtop_sysdeps_swap =
(1 << GLIBTOP_SWAP_TOTAL) + (1 << GLIBTOP_SWAP_USED) +
-(1 << GLIBTOP_SWAP_FREE);
+(1 << GLIBTOP_SWAP_FREE) + (1 << GLIBTOP_SWAP_PAGEIN) +
+(1 << GLIBTOP_SWAP_PAGEOUT);
/* Provides information about swap usage. */
@@ -48,4 +49,7 @@ glibtop_get_swap_s (glibtop *server, glibtop_swap *buf)
buf->total = tbl.swap.total;
buf->used = tbl.swap.used;
buf->free = tbl.swap.free;
+
+ buf->pagein = tbl.swap.pagein;
+ buf->pageout = tbl.swap.pageout;
}
diff --git a/sysdeps/linux/swap.c b/sysdeps/linux/swap.c
index 85ef484d..abcfbed3 100644
--- a/sysdeps/linux/swap.c
+++ b/sysdeps/linux/swap.c
@@ -23,9 +23,12 @@
#include <glibtop/error.h>
#include <glibtop/swap.h>
+#include <fcntl.h>
+
static unsigned long _glibtop_sysdeps_swap =
(1 << GLIBTOP_SWAP_TOTAL) + (1 << GLIBTOP_SWAP_USED) +
-(1 << GLIBTOP_SWAP_FREE);
+(1 << GLIBTOP_SWAP_FREE) + (1 << GLIBTOP_SWAP_PAGEIN) +
+(1 << GLIBTOP_SWAP_PAGEOUT);
#define FILENAME "/proc/meminfo"
@@ -34,6 +37,8 @@ static unsigned long _glibtop_sysdeps_swap =
void
glibtop_get_swap_s (glibtop *server, glibtop_swap *buf)
{
+ char buffer [BUFSIZ+1], *ptr;
+ int fd, len;
FILE *f;
glibtop_init_s (&server, 0, 0);
@@ -49,4 +54,14 @@ glibtop_get_swap_s (glibtop *server, glibtop_swap *buf)
&buf->total, &buf->used, &buf->free);
fclose (f);
+
+ fd = open ("/proc/stat", O_RDONLY);
+ len = read (fd, buffer, BUFSIZ);
+ close (fd);
+
+ ptr = strstr (buffer, "\nswap");
+ if (ptr == NULL) return;
+
+ sscanf (ptr, "\nSwap: %Lu %Lu\n",
+ &buf->pagein, &buf->pageout);
}
diff --git a/sysdeps/names/swap.c b/sysdeps/names/swap.c
index 8e45f803..f40f86ad 100644
--- a/sysdeps/names/swap.c
+++ b/sysdeps/names/swap.c
@@ -23,24 +23,29 @@
const char *glibtop_names_swap [GLIBTOP_MAX_SWAP] =
{
- "total", "used", "free"
+ "total", "used", "free", "pagein", "pageout"
};
const unsigned glibtop_types_swap [GLIBTOP_MAX_SWAP] =
{
- GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG
+ GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG,
+ GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG
};
const char *glibtop_labels_swap [GLIBTOP_MAX_SWAP] =
{
N_("Total Swap Space"),
N_("Used Swap Space"),
- N_("Free Swap Space")
+ N_("Free Swap Space"),
+ N_("Page In"),
+ N_("Page Out"),
};
const char *glibtop_descriptions_swap [GLIBTOP_MAX_SWAP] =
{
N_("Total Swap Space"),
N_("Used Swap Space"),
- N_("Free Swap Space")
+ N_("Free Swap Space"),
+ N_("Total number of swap pages that have been brought in"),
+ N_("Total number of swap pages that have been brought out"),
};