diff options
author | Satoshi Asami <asami@FreeBSD.org> | 1995-11-14 22:48:42 +0000 |
---|---|---|
committer | Satoshi Asami <asami@FreeBSD.org> | 1995-11-14 22:48:42 +0000 |
commit | b0e19222a0d342a863422771541552db302ff073 (patch) | |
tree | 3abfcdfe39adb4a82cb971d87fdacde58dc1a9e1 /sysutils/xperfmon3 | |
parent | 3579254c2d1c7318deddfe4d4e2aca1a7bf847c4 (diff) | |
download | ports-b0e19222a0d342a863422771541552db302ff073.tar.gz ports-b0e19222a0d342a863422771541552db302ff073.zip |
Notes
Diffstat (limited to 'sysutils/xperfmon3')
-rw-r--r-- | sysutils/xperfmon3/files/patch-aa | 991 | ||||
-rw-r--r-- | sysutils/xperfmon3/files/patch-ab | 90 |
2 files changed, 521 insertions, 560 deletions
diff --git a/sysutils/xperfmon3/files/patch-aa b/sysutils/xperfmon3/files/patch-aa index b1bb2a9aa9a8..c73a0099d29f 100644 --- a/sysutils/xperfmon3/files/patch-aa +++ b/sysutils/xperfmon3/files/patch-aa @@ -1,561 +1,432 @@ -diff -c -N ../xperfmon++/DEADJOE ./DEADJOE -*** ../xperfmon++/DEADJOE Thu Jan 1 00:00:00 1970 ---- ./DEADJOE Tue Mar 14 21:09:19 1995 -*************** -*** 0 **** ---- 1,9 ---- -+ -+ *** Modified files in JOE when it aborted on Tue Mar 14 21:09:19 1995 -+ *** JOE was aborted by signal 15 -+ -+ *** File '(Unnamed)' -+ bsd_system.c -+ -+ *** File '(Unnamed)' -+ nfs -diff -c -N ../xperfmon++/Imakefile ./Imakefile -*** ../xperfmon++/Imakefile Wed Jul 27 20:29:29 1994 ---- ./Imakefile Wed Mar 15 12:47:26 1995 -*************** -*** 17,31 **** - SYS_MODULE= sgi_system - #endif +diff -u ../xperfmon++.orig/Imakefile ./Imakefile +--- ../xperfmon++.orig/Imakefile Wed Jul 27 22:29:29 1994 ++++ ./Imakefile Sun Nov 12 00:07:24 1995 +@@ -17,15 +17,21 @@ + SYS_MODULE= sgi_system + #endif + +-EXTRA_LIBRARIES = $(SUNFLAGS) $(MIPSFLAGS) $(SGIFLAGS) ++#if defined (i386BsdArchitecture) ++BSDFLAGS= -lkvm ++SYS_MODULE= bsd_system ++CC= gcc ++#endif ++ ++EXTRA_LIBRARIES = $(SUNFLAGS) $(MIPSFLAGS) $(SGIFLAGS) $(BSDFLAGS) + + INSTPGMFLAGS = $(INSTKMEMFLAGS) + LOCAL_LIBRARIES = $(XAWLIB) $(XTOOLLIB) $(XMULIB) $(XLIB) + INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11 +-# INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11 -I/usr/include/bsd +- CDEBUGFLAGS = -O +- SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c nfs.c +- OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o nfs.o ++# SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c nfs.c ++# OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o nfs.o ++ SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c ++ OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o + + ComplexProgramTarget(xperfmon++) + +diff -u ../xperfmon++.orig/README ./README +--- ../xperfmon++.orig/README Wed Jul 27 22:29:30 1994 ++++ ./README Sun Nov 12 00:07:24 1995 +@@ -18,3 +18,20 @@ + Research Center, rsmith@proteus.arc.nasa.gov. Imake will build for correct + O/S if x11r5 is fully installed in all the right places. + ++ ++3-15-95 Completely new port of systemdependent file (bsd_system.c) for FreeBSD-2.X ++ by Lars Köller @University of Rostock, Germany. ++ E-Mail: <lars.koeller@odie.physik2.uni-rostock.de> ++ ++8-16-95 Quick and dirty workaround of -geometry option bug. ++ But there are still some side effects when changing the geometry. ++ Fix memory leak in bsd_system.c ++ by Lars Köller @University of Rostock, Germany. ++ E-Mail: <lars.koeller@odie.physik2.uni-rostock.de> ++ ++30-10-95 Change 'Free Mem' graph to 'Free Swap' cause the FreeBSD memory system ++ tries to minimize the free unused amount of memory. ++ Include basic support for FreeBSD > 2.1. ++ Number of interrupts now independent from ++ by Lars Köller @University of Rostock, Germany. ++ E-Mail: <lars.koeller@odie.physik2.uni-rostock.de> +diff -u ../xperfmon++.orig/TimeChart.h ./TimeChart.h +--- ../xperfmon++.orig/TimeChart.h Wed Jul 27 22:29:31 1994 ++++ ./TimeChart.h Sun Nov 12 00:07:24 1995 +@@ -88,12 +88,12 @@ + #define XtCFillRect "FillRect" + + #define XtNgetValue "getValue" +-#define XtNhighlight "highlight" ++/* #define XtNhighlight "highlight" */ + #define XtNjumpScroll "jumpScroll" + #define XtNminScale "minScale" + #define XtNscale "scale" + #define XtNfillRect "fillRect" +-#define XtNupdate "update" ++/* #define XtNupdate "update" */ + #define XtNvmunix "vmunix" -! EXTRA_LIBRARIES = $(SUNFLAGS) $(MIPSFLAGS) $(SGIFLAGS) - - INSTPGMFLAGS = $(INSTKMEMFLAGS) - LOCAL_LIBRARIES = $(XAWLIB) $(XTOOLLIB) $(XMULIB) $(XLIB) - INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11 -! # INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11 -I/usr/include/bsd -! CDEBUGFLAGS = -O -! SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c nfs.c -! OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o nfs.o - - ComplexProgramTarget(xperfmon++) - ---- 17,37 ---- - SYS_MODULE= sgi_system - #endif - -! #if defined (i386BsdArchitecture) -! BSDFLAGS= -lkvm -! SYS_MODULE= bsd_system -! CC= gcc -! #endif -! -! EXTRA_LIBRARIES = $(SUNFLAGS) $(MIPSFLAGS) $(SGIFLAGS) $(BSDFLAGS) - - INSTPGMFLAGS = $(INSTKMEMFLAGS) - LOCAL_LIBRARIES = $(XAWLIB) $(XTOOLLIB) $(XMULIB) $(XLIB) - INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11 -! # SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c nfs.c -! # OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o nfs.o -! SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c -! OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o - - ComplexProgramTarget(xperfmon++) - -diff -c -N ../xperfmon++/README ./README -*** ../xperfmon++/README Wed Jul 27 20:29:30 1994 ---- ./README Wed Mar 15 12:42:44 1995 -*************** -*** 18,20 **** ---- 18,24 ---- - Research Center, rsmith@proteus.arc.nasa.gov. Imake will build for correct - O/S if x11r5 is fully installed in all the right places. - -+ -+ 3-15-95 Completely new port of systemdependent file (bsd_system.c) for FreeBSD-2.X -+ by Lars Köller @University of Rostock, Germany. -+ E-Mail: <lars.koeller@odie.physik2.uni-rostock.de> -diff -c -N ../xperfmon++/TimeChart.h ./TimeChart.h -*** ../xperfmon++/TimeChart.h Wed Jul 27 20:29:31 1994 ---- ./TimeChart.h Thu Mar 9 15:59:28 1995 -*************** -*** 88,99 **** - #define XtCFillRect "FillRect" - - #define XtNgetValue "getValue" -! #define XtNhighlight "highlight" - #define XtNjumpScroll "jumpScroll" - #define XtNminScale "minScale" - #define XtNscale "scale" - #define XtNfillRect "fillRect" -! #define XtNupdate "update" - #define XtNvmunix "vmunix" - - typedef struct _TimeChartRec *TimeChartWidget; ---- 88,99 ---- - #define XtCFillRect "FillRect" - - #define XtNgetValue "getValue" -! /* #define XtNhighlight "highlight" */ - #define XtNjumpScroll "jumpScroll" - #define XtNminScale "minScale" - #define XtNscale "scale" - #define XtNfillRect "fillRect" -! /* #define XtNupdate "update" */ - #define XtNvmunix "vmunix" - - typedef struct _TimeChartRec *TimeChartWidget; -diff -c -N ../xperfmon++/XPerfmon++.ad.FreeBSD ./XPerfmon++.ad.FreeBSD -*** ../xperfmon++/XPerfmon++.ad.FreeBSD Thu Jan 1 00:00:00 1970 ---- ./XPerfmon++.ad.FreeBSD Wed Mar 15 10:26:56 1995 -*************** -*** 0 **** ---- 1,37 ---- -+ ! the following specification would set all highAlarm values to 99998. -+ ! this will turn on a green color background for all graphs, even if no other -+ ! resources are set for that graph. Note that if this specification is -+ ! commented out, the "NFS Server" graph background will be the application -+ ! default color, unless some other resource file has specified it. -+ ! *PerfChart.highAlarm: 99998 -+ *perfChartUser.highAlarm: 95 -+ *perfChartUser.highWarn: 75 -+ -+ *perfChartSystem.highAlarm: 40 -+ *perfChartSystem.highWarn: 25 -+ -+ *perfChartIdle.lowWarn: 10 -+ *perfChartIdle.lowAlarm: 5 -+ -+ *perfChartFree.lowWarn: 400 -+ *perfChartFree.lowAlarm: 150 -+ -+ *perfChartDisk.highWarn: 50 -+ *perfChartDisk.highAlarm: 100 -+ -+ *perfChartIntrpts.highWarn: 500 -+ *perfChartIntrpts.highAlarm: 1000 -+ -+ *perfChartInput.highWarn: 500 -+ *perfChartInput.highAlarm: 1000 -+ -+ *perfChartOutput.highWarn: 500 -+ *perfChartOutput.highAlarm: 1000 -+ -+ *perfChartCollision.highWarn: 20 -+ *perfChartCollision.highAlarm: 50 -+ -+ *perfChartNFSClient.highWarn: 100 -+ *perfChartNFSClient.highAlarm: 200 -+ *font: 6x13 -+ -diff -c -N ../xperfmon++/bsd_system.c ./bsd_system.c -*** ../xperfmon++/bsd_system.c Thu Jan 1 00:00:00 1970 ---- ./bsd_system.c Thu Mar 23 09:32:02 1995 -*************** -*** 0 **** ---- 1,412 ---- -+ /* -+ * Perfmon Performance Monitor -+ * -+ * Copyright 1985, Massachusetts Institute of Technology -+ * Copyright 1989, PCS Computer Systeme GmbH, West Germany -+ * Copyright 1994, Sterling Software @ NASA-Ames Research Center -+ * Copyright 1995, Regents of the University of California, -+ * Lars Köller <lars.koeller@odie.physik2.uni-rostock.de -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of PCS and Sterling Software not be used in advertising or -+ * publicity pertaining to distribution of the software without specific, -+ * written prior permission. PCS and Sterling Software makes no representations about the -+ * suitability of this software for any purpose. It is provided "as is" -+ * without express or implied warranty. -+ * -+ * PCS & STERLING SOFTWARE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL -+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL PCS & STERLING SOFTWARE -+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ * -+ * Original Author: Emanuel Jay Berkenbilt, MIT Project Athena -+ * Author: Thomas A. Baghli, PCS Computer Systeme GmbH, West Germany -+ * tom@meepmeep.pcs.com -+ * 1994 Revision -+ * Author: Roger Smith, Sterling Software @ NASA-Ames Research Center -+ * Moffett Field, California, rsmith@proteus.arc.nasa.gov -+ * 1995 FreeBSD 2.x Version -+ * Author: Lars Koeller, Univerity of Rostock, Germany -+ * lars.koeller@odie.physik2.uni-rostock.de -+ */ -+ -+ /* This file contains only system functions - that is the functions that -+ * get the information the performance monitor is monitoring. No calls -+ * to any X routines should be made here. The reason for doing this is -+ * so that as the X toolkit becomes available and the X window system -+ * improves no changes will have to be made to this file, and as this -+ * program is made available for a new type of machine, only this file -+ * will need to be changed. -+ */ -+ #include <X11/IntrinsicP.h> -+ -+ #include "system.h" -+ -+ #include <stdio.h> -+ #include <strings.h> -+ #include <unistd.h> -+ #include <paths.h> -+ #include <kvm.h> -+ #include <nlist.h> -+ #include <limits.h> -+ #include <errno.h> -+ -+ #include <sys/file.h> -+ #include <sys/param.h> -+ #include <sys/socket.h> -+ #include <sys/sysctl.h> -+ #include <sys/dkstat.h> -+ #include <sys/buf.h> -+ #include <sys/vmmeter.h> -+ #include <vm/vm.h> -+ #include <net/if.h> -+ #include <netinet/in.h> -+ -+ #include <sys/mount.h> -+ #include <nfs/nfsv2.h> -+ #include <nfs/nfs.h> -+ -+ #include "is.h" -+ -+ #ifndef TRUE -+ #define TRUE 1 -+ #define FALSE 0 -+ #endif -+ -+ #define WANT_STAT(x) (poss_stats[(x)] != NO_STAT) -+ -+ /* -+ Function Prototypes -+ */ -+ static void kread(int, void *, size_t); -+ -+ /* -+ Variables & Structs -+ */ -+ static unsigned long *intrcnt; -+ static int nintr, hz; -+ static kvm_t *kd; -+ static char errbuf[_POSIX2_LINE_MAX]; -+ static char dr_name[DK_NDRIVE][DK_NAMELEN]; -+ static double etime; -+ static char *defdrives[] = { "wd0", "wd1", "sd0", "sd1" }; -+ static int num_stats, poss_stats[NUM_POSSIBLE_STATS]; -+ -+ int current_values[NUM_GRAPHS]; -+ stat_type stats; -+ -+ extern Widget perfmon[NUM_GRAPHS]; -+ -+ static struct packet { -+ int input, output, collisions; -+ } packets, old_packets; -+ -+ static struct nfsstats nfsstats; -+ static struct _nfsStats { -+ int nfsServer, nfsClient; -+ } nfsStats, old_nfsStats; -+ -+ struct nlist nl[] = { -+ #define X_CPTIME 0 -+ { "_cp_time" }, -+ #define X_TOTAL 1 -+ { "_total" }, -+ #define X_SUM 2 -+ { "_cnt" }, -+ #define X_BOOTTIME 3 -+ { "_boottime" }, -+ #define X_DKXFER 4 -+ { "_dk_xfer" }, -+ #define X_HZ 5 -+ { "_hz" }, -+ #define N_IFNET 6 -+ { "_ifnet" }, -+ #define X_DK_NAMES 7 -+ { "_dk_names"}, -+ #define X_DK_NDRIVE 8 -+ { "_dk_ndrive" }, -+ #define X_INTRCNT 9 -+ { "_intrcnt" }, -+ #define X_EINTRCNT 10 -+ { "_eintrcnt" }, -+ { "" }, -+ }; -+ -+ struct { -+ long time[CPUSTATES]; -+ long xfer[DK_NDRIVE]; -+ struct vmtotal Total; -+ struct vmmeter Sum; -+ struct vmmeter Rate; -+ int interrupts; -+ } s, s1; -+ -+ #define total s.Total -+ #define rate s.Rate -+ #define sum s.Sum -+ #define pgtok(a) ((a) * sum.v_page_size >> 10) -+ -+ -+ /* -+ This routine does all necessary setting up of structures -+ that will handle system calls. -+ */ -+ void sys_setup() -+ { -+ get_namelist("/kernel", _PATH_KMEM); -+ collect_stats(); -+ etime = 1.0; -+ } -+ -+ -+ /* -+ Update the data structures -+ */ -+ void update_stats() -+ { -+ int state; -+ double pct, tot;; -+ -+ collect_stats(); -+ -+ tot = 0; -+ for (state = 0; state < CPUSTATES; ++state) -+ tot += s.time[state]; -+ if (tot) -+ pct = 100 / tot; -+ else -+ pct = 0; -+ current_values[USER_CPU_PERCENTAGE] = (s.time[CP_USER] + s.time[CP_NICE]) * pct; -+ current_values[SYSTEM_CPU_PERCENTAGE] = (s.time[CP_SYS] + s.time[CP_INTR]) * pct;; -+ current_values[IDLE_CPU_PERCENTAGE] = s.time[CP_IDLE] * pct; -+ -+ if (perfmon[FREE_MEM]) -+ current_values[FREE_MEM] = pgtok(total.t_free); -+ if (perfmon[DISK_TRANSFERS]) -+ current_values[DISK_TRANSFERS] = total_disk_transfers(); -+ if (perfmon[INTERRUPTS]) -+ current_values[INTERRUPTS] = s.interrupts - s1.interrupts; -+ if (perfmon[INPUT_PACKETS]) -+ current_values[INPUT_PACKETS] = packets.input - old_packets.input; -+ if (perfmon[OUTPUT_PACKETS]) -+ current_values[OUTPUT_PACKETS] = packets.output - old_packets.output; -+ if (perfmon[COLLISION_PACKETS]) -+ current_values[COLLISION_PACKETS] = packets.collisions - old_packets.collisions; -+ if (perfmon[NFS_CLIENT_CALLS]) -+ current_values[NFS_CLIENT_CALLS] = nfsStats.nfsClient - old_nfsStats.nfsClient; -+ if (perfmon[NFS_SERVER_CALLS]) -+ current_values[NFS_SERVER_CALLS] = nfsStats.nfsServer - old_nfsStats.nfsServer; -+ } -+ -+ -+ /* -+ Collect the overall disk transfer rates -+ */ -+ int -+ total_disk_transfers() -+ { -+ register int i, total_xfers = 0; -+ -+ for(i=0; i < DK_NDRIVE; i++) -+ total_xfers += s.xfer[i]; -+ return(total_xfers/etime); -+ } -+ -+ -+ /* -+ Collect all the data -+ */ -+ collect_stats() -+ { -+ off_t ifnetaddr; -+ register int i, tmp; -+ int mib[3], size, state; -+ -+ kread(X_CPTIME, s.time, sizeof(s.time)); -+ kread(X_DKXFER, s.xfer, sizeof(s.xfer)); -+ kread(X_SUM, &sum, sizeof(sum) ); -+ size = sizeof(total); -+ mib[0] = CTL_VM; -+ mib[1] = VM_METER; -+ if (sysctl(mib, 2, &total, &size, NULL, 0) < 0) { -+ printf("Can't get kerninfo: %s\n", strerror(errno)); -+ bzero(&total, sizeof(total)); -+ } -+ -+ nintr = nl[X_EINTRCNT].n_value - nl[X_INTRCNT].n_value; -+ intrcnt = (unsigned long *) malloc((size_t) nintr); -+ nintr /= sizeof(long); -+ kread(X_INTRCNT, intrcnt, (size_t) nintr*sizeof(long)); -+ s1.interrupts = s.interrupts; -+ s.interrupts = 0; -+ for (i = 0; i < nintr; i++) -+ s.interrupts += *(intrcnt + i); -+ -+ etime = 0; -+ for (i=0; i < DK_NDRIVE; i++) { -+ tmp = s.xfer[i]; -+ s.xfer[i] -= s1.xfer[i]; -+ s1.xfer[i] = tmp; -+ } -+ for (i=0; i < CPUSTATES; i++) { -+ tmp = s.time[i]; -+ s.time[i] -= s1.time[i]; -+ s1.time[i] = tmp; -+ etime += s.time[i]; -+ } -+ if(etime == 0.) -+ etime = 1.; -+ etime /= hz; -+ -+ /* -+ Collect the Network-Traffic -+ */ -+ -+ if (nl[N_IFNET].n_value != 0) { -+ struct ifnet ifnet; -+ kread(N_IFNET, &ifnetaddr, sizeof(ifnetaddr)); -+ old_packets = packets; -+ packets.input = packets.output = packets.collisions = 0; -+ while (ifnetaddr) { -+ kvm_read(kd, ifnetaddr, &ifnet, sizeof ifnet ); -+ packets.input += ifnet.if_ipackets; -+ packets.output += ifnet.if_opackets; -+ packets.collisions += ifnet.if_collisions; -+ ifnetaddr = (u_long) ifnet.if_next; -+ } -+ } -+ -+ /* -+ Collect the NFS and RPC Calls -+ */ -+ -+ size = sizeof(nfsstats); -+ mib[0] = CTL_FS; -+ mib[1] = MOUNT_NFS; -+ mib[2] = NFS_NFSSTATS; -+ -+ if (sysctl( mib, 3, &nfsstats, &size, NULL, 0) < 0) -+ return; -+ else { -+ old_nfsStats = nfsStats; -+ -+ nfsStats.nfsClient = nfsstats.rpccnt[NFSPROC_GETATTR] + -+ nfsstats.rpccnt[NFSPROC_SETATTR] + -+ nfsstats.rpccnt[NFSPROC_LOOKUP] + -+ nfsstats.rpccnt[NFSPROC_READLINK] + -+ nfsstats.rpccnt[NFSPROC_READ] + -+ nfsstats.rpccnt[NFSPROC_WRITE] + -+ nfsstats.rpccnt[NFSPROC_CREATE] + -+ nfsstats.rpccnt[NFSPROC_REMOVE] + -+ nfsstats.rpccnt[NFSPROC_RENAME] + -+ nfsstats.rpccnt[NFSPROC_LINK] + -+ nfsstats.rpccnt[NFSPROC_SYMLINK] + -+ nfsstats.rpccnt[NFSPROC_MKDIR] + -+ nfsstats.rpccnt[NFSPROC_RMDIR] + -+ nfsstats.rpccnt[NFSPROC_READDIR] + -+ nfsstats.rpccnt[NFSPROC_STATFS] + -+ nfsstats.rpccnt[NQNFSPROC_READDIRLOOK] + -+ nfsstats.rpccnt[NQNFSPROC_GETLEASE] + -+ nfsstats.rpccnt[NQNFSPROC_VACATED] + -+ nfsstats.rpccnt[NQNFSPROC_EVICTED]; -+ -+ nfsStats.nfsServer = nfsstats.srvrpccnt[NFSPROC_GETATTR] + -+ nfsstats.srvrpccnt[NFSPROC_SETATTR] + -+ nfsstats.srvrpccnt[NFSPROC_LOOKUP] + -+ nfsstats.srvrpccnt[NFSPROC_READLINK] + -+ nfsstats.srvrpccnt[NFSPROC_READ] + -+ nfsstats.srvrpccnt[NFSPROC_WRITE] + -+ nfsstats.srvrpccnt[NFSPROC_CREATE] + -+ nfsstats.srvrpccnt[NFSPROC_REMOVE] + -+ nfsstats.srvrpccnt[NFSPROC_RENAME] + -+ nfsstats.srvrpccnt[NFSPROC_LINK] + -+ nfsstats.srvrpccnt[NFSPROC_SYMLINK] + -+ nfsstats.srvrpccnt[NFSPROC_MKDIR] + -+ nfsstats.srvrpccnt[NFSPROC_RMDIR] + -+ nfsstats.srvrpccnt[NFSPROC_READDIR] + -+ nfsstats.srvrpccnt[NFSPROC_STATFS] + -+ nfsstats.srvrpccnt[NQNFSPROC_READDIRLOOK] + -+ nfsstats.srvrpccnt[NQNFSPROC_GETLEASE] + -+ nfsstats.srvrpccnt[NQNFSPROC_VACATED] + -+ nfsstats.srvrpccnt[NQNFSPROC_EVICTED]; -+ } -+ } -+ -+ -+ /* -+ Reads the nlist from the kernel -+ */ -+ int -+ get_namelist(kernel_name, memory_name) -+ char *kernel_name, *memory_name; -+ { -+ time_t now; -+ time_t boottime; -+ register int i, c; -+ int nintv; -+ -+ kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf); -+ if (kd == 0) { -+ (void)fprintf(stderr, "xperfmon++: kvm_openfiles: %s\n", errbuf); -+ exit(1); -+ } -+ -+ if ((c = kvm_nlist(kd, nl)) != 0) { -+ if (c > 0) { -+ (void)fprintf(stderr,"xperfmon++: undefined symbols:"); -+ for (c = 0; c < sizeof(nl)/sizeof(nl[0]); c++) -+ if (nl[c].n_type == 0) -+ fprintf(stderr, " %s", nl[c].n_name); -+ (void)fputc('\n', stderr); -+ } else -+ (void)fprintf(stderr, "xperfmon++: kvm_nlist: %s\n", kvm_geterr(kd)); exit(1); -+ } -+ -+ kread(X_BOOTTIME, &boottime, sizeof(boottime)); -+ kread(X_HZ, &hz, sizeof(hz)); -+ for (i = 0; i < DK_NDRIVE; i++) { -+ strcpy(dr_name[i], "xx"); -+ } -+ time(&now); -+ nintv = now - boottime; -+ if (nintv <= 0 || nintv > 60*60*24*365*10) { -+ fprintf(stderr, -+ "Time makes no sense... namelist must be wrong.\n"); -+ exit(1); -+ } -+ return(nintv); -+ } -+ -+ -+ /* -+ Kread reads something from the kernel, given its nlist index. -+ */ -+ static void -+ kread(nlx, addr, size) -+ int nlx; -+ void *addr; -+ size_t size; -+ { -+ char *sym; -+ -+ if (nl[nlx].n_type == 0 || nl[nlx].n_value == 0) { -+ sym = nl[nlx].n_name; -+ if (*sym == '_') -+ ++sym; -+ (void)fprintf(stderr, -+ "xpermon++: symbol %s not defined\n", sym); -+ exit(1); -+ } -+ if (kvm_read(kd, nl[nlx].n_value, addr, size) != size) { -+ sym = nl[nlx].n_name; -+ if (*sym == '_') -+ ++sym; -+ (void)fprintf(stderr, "xperfmon++: %s: %s\n", sym, kvm_geterr(kd)); -+ exit(1); -+ } -+ } + typedef struct _TimeChartRec *TimeChartWidget; +diff -u ../xperfmon++.orig/XPerfmon++.ad ./XPerfmon++.ad +--- ../xperfmon++.orig/XPerfmon++.ad Wed Jul 27 22:29:32 1994 ++++ ./XPerfmon++.ad Sun Nov 12 00:07:23 1995 +@@ -4,24 +4,37 @@ + ! commented out, the "NFS Server" graph background will be the application + ! default color, unless some other resource file has specified it. + ! *PerfChart.highAlarm: 99998 ++*perfChartUser.highAlarm: 95 ++*perfChartUser.highWarn: 75 ++ ++*perfChartSystem.highAlarm: 40 ++*perfChartSystem.highWarn: 25 ++ + *perfChartIdle.lowWarn: 10 + *perfChartIdle.lowAlarm: 5 +-*perfChartUser.highAlarm: 90 +-*perfChartUser.highWarn: 75 +-*perfChartSystem.highAlarm: 90 +-*perfChartSystem.highWarn: 75 +-*perfChartFree.lowWarn: 2000 +-*perfChartFree.lowAlarm: 1000 +-*perfChartDisk.highWarn: 25 +-*perfChartDisk.highAlarm: 50 +-*perfChartIntrpts.highWarn: 500 +-*perfChartIntrpts.highAlarm: 750 +-*perfChartInput.highWarn: 300 +-*perfChartInput.highAlarm: 500 +-*perfChartOutput.highWarn: 300 +-*perfChartOutput.highAlarm: 500 ++ ++*perfChartSwap.highWarn: 50 ++*perfChartSwap.highAlarm: 100 ++ ++*perfChartDisk.highWarn: 50 ++*perfChartDisk.highAlarm: 100 ++ ++*perfChartIntrpts.highWarn: 400 ++*perfChartIntrpts.highAlarm: 600 ++ ++*perfChartInput.highWarn: 500 ++*perfChartInput.highAlarm: 1000 ++ ++*perfChartOutput.highWarn: 500 ++*perfChartOutput.highAlarm: 1000 ++ + *perfChartCollision.highWarn: 20 + *perfChartCollision.highAlarm: 50 +-*perfChartNFSClient.highWarn: 200 +-*perfChartNFSClient.highAlarm: 400 ++ ++*perfChartNFSClient.highWarn: 100 ++*perfChartNFSClient.highAlarm: 200 ++ ++*perfChartNFSServer.highWarn: 100 ++*perfChartNFSServer.highAlarm: 200 + *font: 6x13 ++ +Only in .: bsd_system.c +diff -u ../xperfmon++.orig/misc.c ./misc.c +--- ../xperfmon++.orig/misc.c Wed Jul 27 22:29:33 1994 ++++ ./misc.c Sun Nov 12 00:07:24 1995 +@@ -58,7 +58,7 @@ + int i, keycode, length = 0; + /* PerfmonWidget pw = (PerfmonWidget) w;*/ + +- length = XLookupString(event, strbuf, STRBUFSIZE, &keycode, NULL); ++ length = XLookupString((XKeyEvent *)event, strbuf, STRBUFSIZE, (KeySym *)&keycode, NULL); + switch (keycode) { + case 'Q': + case 'q': +diff -u ../xperfmon++.orig/system.h ./system.h +--- ../xperfmon++.orig/system.h Wed Jul 27 22:29:34 1994 ++++ ./system.h Sun Nov 12 00:07:24 1995 +@@ -149,7 +149,11 @@ + "User", + "System", + "Idle", ++#ifdef __FreeBSD__ ++ "Swap", ++#else + "Free", ++#endif + "Disk", + "Interrupts", + "Input", +@@ -162,7 +166,11 @@ + "User", + "System", + "Idle", ++#ifdef __FreeBSD__ ++ "Swap", ++#else + "Free", ++#endif + "Disk", + "Intrpts", + "Input", +@@ -175,7 +183,11 @@ + "CPU", + "CPU", + "CPU", ++#ifdef __FreeBSD__ ++ "Usage (MB)", ++#else + "Memory", ++#endif + "Transfers", + "", + "Packets", +diff -u ../xperfmon++.orig/xperfmon++.man ./xperfmon++.man +--- ../xperfmon++.orig/xperfmon++.man Wed Jul 27 22:29:39 1994 ++++ ./xperfmon++.man Sun Nov 12 00:14:56 1995 +@@ -94,8 +94,8 @@ + .B \-idlecpu | \+idlecpu + Graph \fIIdle\fP CPU Percentage. + .TP 26 +-.B \-freemem | \+freemem +-Graph \fIFree Memory\fP. ++.B \-{freemem/usedswap} | \+{freemem/usedswap} ++Graph \fIFree Memory/Used Swap (Operating system dependent, swap only for FreeBSD)\fP. + .TP 26 + .B \-diskxfr | \+diskxfr + Graph \fIDisk Transfers\fP per interval period. +@@ -176,8 +176,8 @@ + .B idle + Set \fIlimit\fP value for Idle CPU Percentage. + .TP 12 +-.B mem +-Set \fIlimit\fP value for Free Memory. ++.B mem/swap ++Set \fIlimit\fP value for Free Memory/Used Swap (OS dependent, swap only for FreeBSD). + .TP 12 + .B disk + Set \fIlimit\fP value for Disk Transfers. +@@ -314,7 +314,7 @@ + Set System CPU Percentage resource. + .TP 16 + .B Free +-Set Free Memory resource. ++Set Free Memory/Swap resource. + .TP 16 + .B Disk + Set Disk Transfer count resource. +diff -u ../xperfmon++.orig/xperfmon.c ./xperfmon.c +--- ../xperfmon++.orig/xperfmon.c Wed Jul 27 22:29:39 1994 ++++ ./xperfmon.c Sun Nov 12 00:13:55 1995 +@@ -58,6 +58,10 @@ + * + */ + ++#ifdef __FreeBSD__ ++#include <osreldate.h> ++#endif ++ + #include <stdio.h> + #include <X11/IntrinsicP.h> + #include <X11/StringDefs.h> +@@ -94,6 +98,11 @@ + { NULL, NULL }, + }; + ++/* LK!!! */ ++#define MIN_WIDTH 240 ++#define MIN_HEIGHT 430 ++ ++ + #define XtNinterval "interval" + #define XtNcount "count" + #define XtCCount "Count" +@@ -171,11 +180,17 @@ + static XrmOptionDescRec optionDescList[] = { + { "-interval", ".interval", XrmoptionSepArg, (caddr_t) NULL}, + { "-immediate", "*PerfChart.immediate", XrmoptionNoArg, "True" }, +- ++#if __FreeBSD_version >= 199504 ++ { "-lowswapAlarm", "*perfChartFree.lowAlarm", XrmoptionSepArg, NULL }, ++ { "-lowswapWarn", "*perfChartFree.lowWarn", XrmoptionSepArg, NULL }, ++ { "-highswapAlarm", "*perfChartFree.highAlarm", XrmoptionSepArg, NULL }, ++ { "-highswapWarn", "*perfChartFree.highWarn", XrmoptionSepArg, NULL }, ++#else + { "-lowmemAlarm", "*perfChartFree.lowAlarm", XrmoptionSepArg, NULL }, + { "-lowmemWarn", "*perfChartFree.lowWarn", XrmoptionSepArg, NULL }, + { "-highmemAlarm", "*perfChartFree.highAlarm", XrmoptionSepArg, NULL }, + { "-highmemWarn", "*perfChartFree.highWarn", XrmoptionSepArg, NULL }, ++#endif + + { "-lowuserAlarm", "*perfChartUser.lowAlarm", XrmoptionSepArg, NULL }, + { "-lowuserWarn", "*perfChartUser.lowWarn", XrmoptionSepArg, NULL }, +@@ -237,8 +252,13 @@ + { "+systemcpu", XtNsystemcpuAdd, XrmoptionNoArg, "TRUE" }, + { "-idlecpu", XtNidlecpuSub, XrmoptionNoArg, "True" }, + { "+idlecpu", XtNidlecpuAdd, XrmoptionNoArg, "TRUE" }, ++#if __FreeBSD_version >= 199504 ++ { "-usedswap", XtNfreememSub, XrmoptionNoArg, "True" }, ++ { "+usedswap", XtNfreememAdd, XrmoptionNoArg, "TRUE" }, ++#else + { "-freemem", XtNfreememSub, XrmoptionNoArg, "True" }, + { "+freemem", XtNfreememAdd, XrmoptionNoArg, "TRUE" }, ++#endif + { "-diskxfr", XtNdiskxfrSub, XrmoptionNoArg, "True" }, + { "+diskxfr", XtNdiskxfrAdd, XrmoptionNoArg, "TRUE" }, + { "-interrupts", XtNinterruptsSub , XrmoptionNoArg, "True" }, +@@ -344,7 +364,11 @@ + fprintf(stderr, " [{-+}usercpu] ({remove|add} usercpu to list of graphs\n"); + fprintf(stderr, " [{-+}systemcpu] ({remove|add} systemcpu to list of graphs\n"); + fprintf(stderr, " [{-+}idlecpu] ({remove|add} idlecpu to list of graphs\n"); ++#if __FreeBSD_version >= 199504 ++ fprintf(stderr, " [{-+}usedswap] ({remove|add} usedswap to list of graphs\n"); ++#else + fprintf(stderr, " [{-+}freemem] ({remove|add} freemem to list of graphs\n"); ++#endif + fprintf(stderr, " [{-+}diskxfr] ({remove|add} disk transfers to list of graphs\n"); + fprintf(stderr, " [{-+}interrupts] ({remove|add} interrupts to list of graphs\n"); + fprintf(stderr, " [{-+}inputpkts] ({remove|add} input packets to list of graphs\n"); +@@ -361,10 +385,18 @@ + fprintf(stderr, " [-high*Alarm {value}] ( Set High Alarm value for *)\n"); + fprintf(stderr, " [-high*Warn {value}] ( Set High Warning value for *)\n"); + fprintf(stderr, " Where \"*\" is one of the following:\n"); ++#if __FreeBSD_version >= 199504 ++ fprintf(stderr, " [swap | user | sys | idle | disk | intrpts |\n"); ++#else + fprintf(stderr, " [mem | user | sys | idle | disk | intrpts |\n"); ++#endif + fprintf(stderr, " input | output | collision | nfsclient | nfsserver]\n"); + fprintf(stderr, " For Example:\n"); ++#if __FreeBSD_version >= 199504 ++ fprintf(stderr, " [-lowswapAlarm {value}] ( Set low Free Swap Alarm Value)\n"); ++#else + fprintf(stderr, " [-lowmemAlarm {value}] ( Set low Free Memory Alarm Value)\n"); ++#endif + fprintf(stderr, "WARNING: It is an error condition to set both a high, and a low, limit warning or alarm.\n"); + exit(1); + } +@@ -386,6 +418,7 @@ + time(&timeStamp); + return; + } ++ + /*ARGSUSED*/ + void handleResize( w, unused, event, contin2disp ) + Widget w; +@@ -419,9 +452,15 @@ + break; + + } +- if ( neww < 250 + 10 ) { +- neww = 250 + 10; +- w->core.width = 250 + 10; ++ if ( neww < MIN_WIDTH + 10 ) { ++ neww = MIN_WIDTH + 10; ++ w->core.width = MIN_WIDTH + 10; ++ XtResizeWindow(w); ++ } ++/* LK!!! */ ++ if ( newh < MIN_HEIGHT + 10 ) { ++ newh = MIN_HEIGHT + 10; ++ w->core.height = MIN_HEIGHT + 10; + XtResizeWindow(w); + } + if ( appData.debug ) +@@ -436,6 +475,7 @@ + Dimension boxH = labelBox->core.height; + Dimension timeH = timechart->core.height; + Dimension newWidgetH = (newh - (boxH+8) - (timeH+10) - hOverHead) / appData.numGraphsOn; ++ + if ( oldWidth == neww && oldHeight == newh ) return; + + if ( appData.debug ) +@@ -464,6 +504,9 @@ + int argc; + char **argv; + { ++/* LK!!! */ ++ Dimension neww, newh, timeH, newWidgetH, hOverHead, boxH; ++ + Arg arg; + Pixmap icon_pixmap = None; + Widget loadParent, pappaBox; +@@ -540,7 +583,6 @@ + xperfmon_width, xperfmon_height)); + XtSetValues(appData.toplevel, &arg, 1); + } +- + /* create windows */ + + pappaBox = XtVaCreateManagedWidget("PappaBox", boxWidgetClass, appData.toplevel, +@@ -553,8 +595,24 @@ + c = (char *) ((long) &hostname[0] + (int) strlen(hostname)); + sprintf(c, "\nUpdate Interval = %5.1f secs", (float)(appData.interval*appData.ms_per_sec)/1000.0); + ++/* LK!!! quick and dirty hack */ ++ XtRealizeWidget(appData.toplevel); ++ ++ neww = appData.toplevel->core.width; ++ newh = appData.toplevel->core.height; ++ if ( neww < MIN_WIDTH + 10) { ++ neww = MIN_WIDTH + 10; ++ appData.toplevel->core.width = MIN_WIDTH + 10; ++ XtResizeWindow(appData.toplevel); ++ } ++ if ( newh < MIN_HEIGHT + 10) { ++ newh = MIN_HEIGHT + 10; ++ appData.toplevel->core.height = MIN_HEIGHT + 10; ++ XtResizeWindow(appData.toplevel); ++ } ++ neww -= 10; + labelBox = XtVaCreateManagedWidget("LabelBox", labelWidgetClass, pappaBox, +- XtNwidth, 250, ++ XtNwidth, neww, + /* XtNheight, 16,*/ + XtNjustify, XtJustifyLeft, + XtNinternalHeight, 0, +@@ -562,6 +620,13 @@ + XtNlabel, hostname, + XtNborderWidth, 0, + NULL); ++ ++/* same as in handleResize */ ++ hOverHead = 5 * appData.numGraphsOn; ++ boxH = labelBox->core.height; ++ timeH = 18; ++ newWidgetH = (newh - (boxH+8) - (timeH+10) - hOverHead) / appData.numGraphsOn; ++ + /* build the graph widgets */ + + for ( i=0; i<NUM_GRAPHS; i++ ) { +@@ -570,8 +635,8 @@ + perfmon[i] = XtVaCreateManagedWidget(hostname, perfChartWidgetClass, pappaBox, + XtNtopLabel, topNames[i], + XtNbotLabel, botNames[i], +- XtNwidth, 250, +- XtNheight, 36, ++ XtNwidth, neww, ++ XtNheight, newWidgetH, + XtNupdate, appData.interval*appData.ms_per_sec, + XtNfillRect, (int)appData.fill, + XtNjumpScroll, 1, +@@ -580,7 +645,7 @@ + } + timechart = XtVaCreateManagedWidget("timeChart", timeChartWidgetClass, pappaBox, + XtNfromVert, perfmon[1], +- XtNwidth, 250, ++ XtNwidth, neww, + XtNheight, 18, + XtNupdate, appData.interval*appData.ms_per_sec, + XtNjumpScroll, 1, +@@ -590,7 +655,7 @@ + + for ( i=0; i<NUM_GRAPHS; i++ ) + if ( appData.graphOn[i] ) +- XtAddCallback(perfmon[i], XtNgetValue, update_stat, i); ++ XtAddCallback(perfmon[i], XtNgetValue, update_stat, (XtPointer)i); + + appData.interval_id = XtAppAddTimeOut(appData.app_context, + appData.interval*appData.ms_per_sec, start_graphs, (caddr_t) appData.toplevel); +@@ -598,3 +663,4 @@ + XtRealizeWidget(appData.toplevel); + XtAppMainLoop(appData.app_context); + } ++ diff --git a/sysutils/xperfmon3/files/patch-ab b/sysutils/xperfmon3/files/patch-ab new file mode 100644 index 000000000000..e88c216bb74f --- /dev/null +++ b/sysutils/xperfmon3/files/patch-ab @@ -0,0 +1,90 @@ +diff -u ../xperfmon++.orig/StripCharP.h ./StripCharP.h +--- ../xperfmon++.orig/StripCharP.h Wed Jul 27 22:29:30 1994 ++++ ./StripCharP.h Sun Nov 12 00:07:24 1995 +@@ -62,10 +62,12 @@ + #define HIGHLIGHT 1 << 1 + #define ALL_GCS (FOREGROUND | HIGHLIGHT) + ++#define NUM_VALUES 2048 ++ + /* New fields for the PerfChart widget instance record */ + + typedef struct { +- double valuedata[2048]; /* record of data points */ ++ double valuedata[NUM_VALUES]; /* record of data points */ + Pixel fgpixel; /* color index for graph */ + Pixel hipixel; /* color index for lines */ + Pixel warnColor; +diff -u ../xperfmon++.orig/StripChart.c ./StripChart.c +--- ../xperfmon++.orig/StripChart.c Wed Jul 27 22:29:30 1994 ++++ ./StripChart.c Sun Nov 12 00:07:24 1995 +@@ -215,8 +215,23 @@ + static void Initialize (greq, gnew) + Widget greq, gnew; + { ++ int i; ++ + PerfChartWidget w = (PerfChartWidget)gnew; + ++ /* ++ * XXX The missing initializations have been made obvious by FreeBSD 2.2's ++ * new (`phk') malloc that doesn't initialize the malloc'ed areas to 0. ++ * Perhaps more bogons will lurk around, but the floating arithmetic ones ++ * have been the most annoying ones since they most likely cause a trap ++ * at startup time. ++ * ++ * Strange that people in the 90's still rely on malloc() ++ * returning an initialized region. ++ */ ++ for ( i = 0; i < NUM_VALUES; i++ ) ++ w->strip_chart.valuedata[i] = 0.0; ++ + /* if we are working with a mono screen then turn off all warnings and alarms */ + + if ( mono_screen ) { +@@ -343,19 +358,19 @@ + + if ( checkValue >= w->strip_chart.highAlarm ) { /* check for high alarm */ + if ( w->strip_chart.currentBG != w->strip_chart.alarmColor ) { +- XtVaSetValues(w, XtNbackground, w->strip_chart.alarmColor, NULL ); ++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.alarmColor, NULL ); + w->strip_chart.currentBG = w->strip_chart.alarmColor; + } + } + else if ( checkValue >= w->strip_chart.highWarn ) { /* check for high warning */ + if ( w->strip_chart.currentBG != w->strip_chart.warnColor ) { +- XtVaSetValues(w, XtNbackground, w->strip_chart.warnColor, NULL ); ++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.warnColor, NULL ); + w->strip_chart.currentBG = w->strip_chart.warnColor; + } + } + else { + if ( w->strip_chart.currentBG != w->strip_chart.okColor ) { /* reset to okColor? */ +- XtVaSetValues(w, XtNbackground, w->strip_chart.okColor, NULL ); ++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.okColor, NULL ); + w->strip_chart.currentBG = w->strip_chart.okColor; + } + } +@@ -373,19 +388,19 @@ + + if ( checkValue <= w->strip_chart.lowAlarm ) { /* check for low alarm */ + if ( w->strip_chart.currentBG != w->strip_chart.alarmColor ) { +- XtVaSetValues(w, XtNbackground, w->strip_chart.alarmColor, NULL ); ++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.alarmColor, NULL ); + w->strip_chart.currentBG = w->strip_chart.alarmColor; + } + } + else if ( checkValue <= w->strip_chart.lowWarn ) { /* check for low warning */ + if ( w->strip_chart.currentBG != w->strip_chart.warnColor ) { +- XtVaSetValues(w, XtNbackground, w->strip_chart.warnColor, NULL ); ++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.warnColor, NULL ); + w->strip_chart.currentBG = w->strip_chart.warnColor; + } + } + else { + if ( w->strip_chart.currentBG != w->strip_chart.okColor ) { /* reset to okColor? */ +- XtVaSetValues(w, XtNbackground, w->strip_chart.okColor, NULL ); ++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.okColor, NULL ); + w->strip_chart.currentBG = w->strip_chart.okColor; + } + } |