Issue with the output of likwid-perfctr in daemon mode - possibly a problem of scale.

16 views
Skip to first unread message

Ro

unread,
May 31, 2012, 6:30:16 PM5/31/12
to likwid-developers, rosa...@uci.edu
Hi all,

While executing the benchmark 470.lbm from SPEC CPU2006 - or any other
type of load - on S0:0, I launch the following command as I am
interested to the phase behavior of programs:

$likwid-perfctr -g ENERGY -c S0:0 -d 1000ms > output.txt

In the output file, output.txt, I have groups of entries as follows:
...
PWR_PKG_ENERGY 2.000000e+00 3.626260e+05
Runtime [s] 2.000000e+00 2.975957e-04
Runtime rdtsc [s] 2.000000e+00 1.000000e+00
Clock [MHz] 2.000000e+00 3.096180e+03
CPI 2.000000e+00 1.297534e+00
Energy [J] 2.000000e+00 3.626260e+05
Power [W] 2.000000e+00 3.626260e+05
...

I understand, that given the sampling interval is 1 second, the
numbers corresponding to Energy and Power are equal but let's
look at a sample entry:

Energy [J] 2.000000e+00 3.626260e+05

What is the meaning of the two numbers above. I assume that the energy
is the second number and the first number is the count. But, if this
is the case, how is it possible that the energy and so the power are
so high? Is it a problem of scale - mW instead of W?

I am using likwid 2.3 on Linux 3.0.0 (the distribution is Ubuntu
11.10)

Thank you for your time.

moebiusband

unread,
Jun 2, 2012, 4:19:26 PM6/2/12
to likwid-developers
Hi ,

thanks for your report.

In the output in timeline mode the first number is always the
timestamp, the second number the actual result for the period.

And yes you are right, there is a scale missing. I forgot it for the
timeline mode. You can easily fix this yourself if you do not want to
wait for the next release.

Just add to the following snippet (its line 347, routine
perfmon_readCountersThread_sandybridge in file ./src/includes/
perfmon_sandybridge.h):

else if (perfmon_threadData[thread_id].counters[i].type ==
POWER)
{
perfmon_threadData[thread_id].counters[i].counterData
=
power_read(cpu_id,
perfmon_threadData[thread_id].counters[i].configRegister);
}

the scale:

else if (perfmon_threadData[thread_id].counters[i].type ==
POWER)
{
perfmon_threadData[thread_id].counters[i].counterData
=
power_info.energyUnit * power_read(cpu_id,
perfmon_threadData[thread_id].counters[i].configRegister);
}

Then the result should be correct. You can also put 1s instead of
1000ms for the frequency. Also be aware that the ENERGY measurements
is always for the package (== socket). So even if you only measure 1
core you get the result for the package.

Thank you again for reporting this error.

Greetings,

Jan
Reply all
Reply to author
Forward
0 new messages