diff options
author | Martin Baulig <martin@home-of-linux.org> | 1998-08-01 22:03:11 +0000 |
---|---|---|
committer | Martin Baulig <martin@src.gnome.org> | 1998-08-01 22:03:11 +0000 |
commit | 2e454140f124d41aa08081c09ea0efcb0e6293e5 (patch) | |
tree | 4e5967c1509ff6bab5485f897cec977c7cb5d4e0 | |
parent | fc506344eaef84431d8c64288e93e5e5ca90cdd3 (diff) | |
download | libgtop-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-- | ChangeLog | 9 | ||||
-rw-r--r-- | examples/first.c | 5 | ||||
-rw-r--r-- | features.def | 2 | ||||
-rw-r--r-- | include/glibtop/swap.h | 8 | ||||
-rw-r--r-- | kernel/table.h (renamed from kernel/table21/table.h) | 2 | ||||
-rw-r--r-- | kernel/table20/kernel.patch | 10 | ||||
-rw-r--r-- | kernel/table20/main.c | 2 | ||||
-rw-r--r-- | kernel/table20/table.h | 166 | ||||
-rw-r--r-- | sysdeps/kernel/swap.c | 6 | ||||
-rw-r--r-- | sysdeps/linux/swap.c | 17 | ||||
-rw-r--r-- | sysdeps/names/swap.c | 13 |
11 files changed, 59 insertions, 181 deletions
@@ -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"), }; |