Date: Wed, 17 Jan 2001 22:34:20 +0100 From: Daniel Rock <D.Rock@t-online.de> To: Hajimu UMEMOTO <ume@FreeBSD.ORG> Cc: current@FreeBSD.ORG, hackers@FreeBSD.ORG Subject: Re: number of processes forked since boot Message-ID: <3A660FDC.ABAB10F5@t-online.de> References: <20010116.025742.74757685.ume@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Hajimu UMEMOTO schrieb:
>
> Hi,
>
> I wish to obtain number of processes forked since boot from userland.
> So, I made a patch to intend to commit.
> Any comment?
I have done a similar approach. I was inspired by the "vmstat -s" output of
Solaris.
Therefor my solution was integrated into the vmmeter structure. Adding sysctl
variables
would be trivial though.
Warning: The diff is from a very old source tree. It may not apply cleanly.
But
the modifications are trivial and should be easily spotted.
--
Daniel
[-- Attachment #2 --]
Index: sys/kern/kern_exec.c
===================================================================
RCS file: /data/cvs/src/sys/kern/kern_exec.c,v
retrieving revision 1.116
diff -u -r1.116 kern_exec.c
--- sys/kern/kern_exec.c 2000/09/21 09:04:17 1.116
+++ sys/kern/kern_exec.c 2000/09/21 17:34:09
@@ -47,6 +47,7 @@
#include <sys/shm.h>
#include <sys/sysctl.h>
#include <sys/vnode.h>
+#include <sys/vmmeter.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
@@ -374,7 +375,10 @@
}
if (error == 0)
+ {
+ ++cnt.v_exec;
return (0);
+ }
exec_fail:
if (imgp->vmspace_destroyed) {
Index: sys/kern/kern_fork.c
===================================================================
RCS file: /data/cvs/src/sys/kern/kern_fork.c,v
retrieving revision 1.82
diff -u -r1.82 kern_fork.c
--- sys/kern/kern_fork.c 2000/09/14 23:07:39 1.82
+++ sys/kern/kern_fork.c 2000/09/15 23:07:29
@@ -55,6 +55,7 @@
#include <sys/ktr.h>
#include <sys/ktrace.h>
#include <sys/unistd.h>
+#include <sys/vmmeter.h>
#include <sys/jail.h>
#include <vm/vm.h>
@@ -105,6 +106,7 @@
if (error == 0) {
p->p_retval[0] = p2->p_pid;
p->p_retval[1] = 0;
+ ++cnt.v_fork;
}
return error;
}
@@ -122,6 +124,7 @@
if (error == 0) {
p->p_retval[0] = p2->p_pid;
p->p_retval[1] = 0;
+ ++cnt.v_vfork;
}
return error;
}
Index: sys/sys/vmmeter.h
===================================================================
RCS file: /data/cvs/src/sys/sys/vmmeter.h,v
retrieving revision 1.21
diff -u -r1.21 vmmeter.h
--- sys/sys/vmmeter.h 1999/12/29 04:24:49 1.21
+++ sys/sys/vmmeter.h 1999/12/31 02:41:29
@@ -92,6 +92,9 @@
u_int v_pageout_free_min; /* min number pages reserved for kernel */
u_int v_interrupt_free_min; /* reserved number of pages for int code */
u_int v_free_severe; /* severe depletion of pages below this pt */
+ u_int v_fork;
+ u_int v_vfork;
+ u_int v_exec;
};
#ifdef _KERNEL
Index: usr.bin/vmstat/vmstat.c
===================================================================
RCS file: /data/cvs/src/usr.bin/vmstat/vmstat.c,v
retrieving revision 1.39
diff -u -r1.39 vmstat.c
--- usr.bin/vmstat/vmstat.c 2000/05/05 16:07:10 1.39
+++ usr.bin/vmstat/vmstat.c 2000/05/07 21:11:18
@@ -599,6 +599,12 @@
(void)printf("%9u cpu context switches\n", sum.v_swtch);
(void)printf("%9u device interrupts\n", sum.v_intr);
(void)printf("%9u software interrupts\n", sum.v_soft);
+ (void)printf("%9u forks\n", sum.v_fork);
+ (void)printf("%9u vforks\n", sum.v_vfork);
+ (void)printf("%9u execs\n", sum.v_exec);
+#ifdef vax
+ (void)printf("%9u pseudo-dma dz interrupts\n", sum.v_pdma);
+#endif
(void)printf("%9u traps\n", sum.v_trap);
(void)printf("%9u system calls\n", sum.v_syscall);
(void)printf("%9u swap pager pageins\n", sum.v_swapin);
@@ -731,7 +737,7 @@
errx(1, "malloc");
kread(X_INTRCNT, intrcnt, (size_t)nintr);
kread(X_INTRNAMES, intrname, (size_t)inamlen);
- (void)printf("interrupt total rate\n");
+ (void)printf("interrupt total rate\n");
inttotal = 0;
nintr /= sizeof(long);
while (--nintr >= 0) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3A660FDC.ABAB10F5>
