Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Oct 2011 10:44:21 +0200
From:      Razmig K <strontium90@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   Re: Measuring memory footprint in C/C++ code on FreeBSD
Message-ID:  <4EA130E5.9060807@gmail.com>
In-Reply-To: <4EA0610B.90206@gmail.com>
References:  <4EA0610B.90206@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Le 20.10.2011 19:57, Razmig K a écrit :
> the memory footprint in C/C++ code for a program running under FreeBSD
> and Linux in terms of total process size including heap objects

     Well getrusage does actually exist in Linux, but its behaviour 
isn't the same as on FreeBSD; struct rusage memory usage information 
fields ru_ixrss (shared text), ru_idrss (unshared data) and ru_isrss 
(unshared stack) are always zero.
     To test and understand the behaviour of getrusage on FreeBSD, I 
have written a small C++ program that allocates several large double 
arrays on the stack as well as on the heap with few loops to delay 
execution, and tried using the aforementioned fields, in addition to 
ru_maxrss (max resident size) to deduce memory usage information of the 
program as reported by top, namely fields RES and SIZE, but somehow I 
didn't manage to get a result matching that of the latter.
     First of all, I'm not sure if I interpret man getrusage correctly. 
For ru_ixrss, it says that it is an "integral" value indicating the 
amount of memory used by the text segment that was also shared among 
other processes, and is expressed in units of kilobytes * 
ticks-of-execution, where ticks are statistics clock ticks, the 
statistics clock having a frequency of sysconf(_SC_CLK_TCK) ticks per 
second. Does this imply that I need to divide ru_ixrss by 
sysconf(_SC_CLK_TCK) * a certain number of seconds? In that case, what 
do I use for the latter? ru_stime or ru_utime?
     I have observed that unlike ru_idrss, ru_ixrss and ru_isrss depend 
on execution time which contradicts the manpage, since all three fields 
are supposed to be specified in the same unit.
     Lastly, I don't see how to use getrusage to deduce information on 
the program's heap use. As I said in my first message, I need to measure 
the memory footprint in terms of total process size including heap objects.
     Thanks again for any tips.


     ~Razmig





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4EA130E5.9060807>