How to reliably measure user time (getrusage(2))

Ulrich Spoerlein q at uni.de
Tue Jan 11 01:41:01 PST 2005


Hi all,

I need to measure the time spent in user mode for rather short-lived
processes. Sadly the results vary highly

% while true;do \time -p woptsa tsplib/pla7397/pla7397.tsp 2>&1|sed -n /user/p;done
user 1.13
user 0.67
user 0.65
user 0.65
user 0.64
user 0.65
% while true;do \time -p woptsa tsplib/pla7397/pla7397.tsp 2>&1|sed -n /user/p;sleep 1;done
user 1.22
user 0.87
user 0.75
user 0.67
user 0.86
user 0.74
% while true;do \time -p woptsa tsplib/pla7397/pla7397.tsp 2>&1|sed -n /user/p;sleep 3;done
user 1.24
user 1.23
user 1.27
user 1.27
user 1.10
user 1.19

I fail to see how sleeping or waiting between consecutive runs could
affect user time. Everything from page faults to I/O is handled inside
the kernel, so it shouldn't affect user-time, no?

The only library function not taking constant time I could think of
would be malloc(3), is that a possibility?

Inside the program I'm using getrusage(2) to measure the time my program
is executing.  kern.hz is set to 1000, this is on a 5-STABLE 1.5GHz
Pentium-M. What to do?

Ulrich Spoerlein
-- 
 PGP Key ID: F0DB9F44				Encrypted mail welcome!
Fingerprint: F1CE D062 0CA9 ADE3 349B  2FE8 980A C6B5 F0DB 9F44
Ok, which part of "Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn."
didn't you understand?


More information about the freebsd-questions mailing list