*BSD News Article 33661


Return to BSD News archive

Path: sserve!newshost.anu.edu.au!harbinger.cc.monash.edu.au!msuinfo!agate!howland.reston.ans.net!gatech!newsxfer.itd.umich.edu!zip.eecs.umich.edu!yeshua.marcam.com!news.kei.com!travelers.mail.cornell.edu!newsstand.cit.cornell.edu!news.graphics.cornell.edu!ghost.dsi.unimi.it!mirage.unipv.it!gilda!gallo
From: gallo@unipv.it (Piera Gallo)
Newsgroups: comp.unix.bsd
Subject: Help needed on kmem!
Date: 1 Aug 1994 12:13:10 GMT
Organization: Pavia University
Lines: 88
Message-ID: <31iosm$ao3@mirage.unipv.it>
NNTP-Posting-Host: gilda.unipv.it
X-Newsreader: TIN [version 1.2 PL2]



I am a student of Performance Evaluation Laboratory at University of
Pavia, Italy.
Currently I am working at the realization of a software tool for emulating
system load and for benchmarking of UNIX based distributed systems with
Prof. M. Calzarossa.
One of our major objectives is to get the largest amount of information as 
possible about process resource usage with the minimum overhead.
At the beginning we were not concerned with directly reading the kernel 
data structure in order to get resource usage; rather we preferrred, 
for simplicity, to employ the "getrusage" system call.
Unfortunately the "getrusage" as it is, is of no help for me.
I need to get the resource usage of a process, which is a nephew
(child of a child) of the process where I am calling the "getrusage".
Such a system call succeed in getting the resource usage of all terminated 
child at any level (nephew, child of a child of a child, and so on) but
it is able to display the resource usage of a nephew only if the first level 
child, which is father of it, is already terminated.
In my program I attempt to get such an information when the first level
child has not yet terminated. 
So I am compelled to find an alternative solution and the best way to do it 
is to read directly the kernel data structure.
Throught the nlist function is possible to examine the symbol table of the
kernel executable file /vmunix, in order to find the offset of the kernel 
variables in the /dev/kmem special file.
Unfortunately I do not know the names and the meaning of kernel variables 
and then I am not able to get any information.
I am interested to get the same information as the getrusage system call.
Such a system call returns the following structure:

     struct  rusage {
             struct timeval ru_utime;        /* user time used */
             struct timeval ru_stime;        /* system time used */
             int     ru_maxrss;
             int     ru_ixrss;       /* integral shared text size */
             int     ru_ismrss       /* integral shared memory size */
             int     ru_idrss;       /* integral unshared data size */
             int     ru_isrss;       /* integral unshared stack size */
             int     ru_minflt;      /* page reclaims */
             int     ru_majflt;      /* page faults */
             int     ru_nswap;       /* swaps */
             int     ru_inblock;     /* block input operations */
             int     ru_oublock;     /* block output operations */
             int     ru_msgsnd;      /* messages sent */
             int     ru_msgrcv;      /* messages received */
             int     ru_nsignals;    /* signals received */
             int     ru_nvcsw;       /* voluntary context switches */
             int     ru_nivcsw;      /* involuntary context switches */
     };

The first question is to get a list (with explanation) of the kernel
variables (that are system dependent) like that used in TOP (a pubblic
domain user/process UNIX display):
	_avenrun
	_ccpu
	_cp_time
	_mpid
        _proc

In this way I should be able to get the same information about process 
resources usage as with the "getrusage" system call.
Another question is about the behaviour of the "getrusage" system call 
if it is due to its implementation or to the way the kernel itself updates 
its internal variable.
I have seen in the include file proc.h that the "struct proc" has a field
struct rusage *p_ru and I have seen that the "getrusage" BSD implementation
reads such a field to get the information about process resources usage.
The question is if it is possible to get access to the process table in the
same way as for the other kernel variable and, if it is not, in which way 
is possible to do it.

If you have something interesting for our  work, or some paper (or book)
about this topic, it would be very nice of you if you will
send it to me. 
Thank you in advance for the attention you will give to me.

Best regards,

	Piera Gallo
	University of Pavia
	Dept. of Computer Science
	Via Abbiategrasso, 209
	I-27100 Pavia (Italy)

	Phone: (+39) 382 505369
	Fax:   (+39) 382 505373