Open GoogleCodeExporter opened 8 years ago
Can you put a load just on one core to get a stable multiplier of 27 on that
core for a bit a longer time (like more than 1s)? I am not 100% sure if the
Open Hardware Monitor just missed the short moments when a core was running at
27, or if the implementation is wrong in the Open Hardware Monitor.
Right now the Open Hardware Monitor just reads the multiplier from the MSR
(IA32_PERF_STATUS) and calculates the current core speed based on the TSC
multiplier and the current TSC frequency. If there is a better method (and you
want to share it), I would be interested of course.
Original comment by moel.mich
on 10 Feb 2011 at 2:03
Even when the CPU is running at x27 IA32_PERF_STATUS will return x26! What I
do is check if the current is > max none turbo and when it is use
IA32_FIXED_CTR1 and IA32_TSC to work out what the actual ratio is. I do this
all in my driver in kernel mode. Your code will also need to do
save/enable/restore of IA32_FIXED_CTR_GLBL and IA32_FIXED_CTR_CTRL. You should
use the Global\Access_MSR_PERF_GLOBAL_CTRL mutex to interlock access to these
MSRs with other programs. You will need different code for Sandy Bridge.
Original comment by r...@rh-software.com
on 10 Feb 2011 at 2:23
Thank you very much for your input. It is good to know that the MSR does not
pick up the higher turbo modes (although this is a stupid "feature").
To use the performance counters in an accurate way it will have to be done in
kernel mode. And then there is still the potential problem of interference (in
both directions) with other software accessing them without locking any mutex.
Outside pure kernel code long time intervals would be required for usable
results, which would cause even more interference problems. In any case,
something like this should be added to the kernel code once a new driver is
written.
Original comment by moel.mich
on 10 Feb 2011 at 3:16
Original issue reported on code.google.com by
r...@rh-software.com
on 10 Feb 2011 at 1:18Attachments: