views:

317

answers:

1

I want to know how much my application uses CPU time of each core while executing as well as the length of time it takes for program to end. for the latter I use linux "time" command. for the former I think I must use something like "mpstat". however I want mpstat to generate some logs only during my application execution and I don't know if it is possible to do so. Can anyone help me on this?

+1  A: 

I would write a wrapper script to launch your application which would take care of starting and stopping mpstat for you -- just before your application launches, and killing it just after it exits.

In this quick example, we launch mpstat backgrounded with its stdout/err redirected to a log file.. we then launch whatever your app is (whatever you pass on the command line after the logfile name) using the standard "time" command.. finally we kill the backgrounded mpstat once the application returns/exits. you can of course launch mpstat using any command line parameters you like.. here we simply launch it with a 1 second period for reports and no end condition.

$ cat test.sh
mpstat 1 2>&1 > $1 &
pid=$!
shift
time $*
kill $pid

$ ./test.sh logfile.log sleep 5

real    0m5.005s
user    0m0.004s
sys     0m0.000s

$ cat logfile.log
Linux 2.6.31-15-generic-pae (-desktop)  12/03/2009      _i686_  (4 CPU)

12:55:58 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
12:55:59 PM  all    1.25    0.00    1.75    0.00    0.00    0.00    0.00    0.00   96.99
12:56:00 PM  all    0.25    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.51
12:56:01 PM  all    0.50    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.50
12:56:02 PM  all    0.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00   99.50
12:56:03 PM  all    0.49    0.00    0.49    0.00    0.00    0.00    0.00    0.00   99.02
Helter Scelter