I was able to ask around and get this response:
The easiest way to achieve what you are trying to do is to is
to disable package C3/C6 and Turbo in BIOS. Then write the value 100h to
the FREQUENCY_FLOOR_OVERRIDE MSR(0A00h). This will keep the processor
from entering C3 or C6 and it will still enter C1E but when it does instead of
dropping to the default 1.2Ghz it will stay at 2.7Ghz since you set the floor
to 100h. But it is important that Turbo is disabled in conjunction with
these other settings.
Thanks for your reply.
I am not trying to put the processor in turbo mode. I want to see what doesn't changing the frequency at different levels lower than the default processor frequency, affect my program performance.
To put it directly, I want to know how to set the bits of IA32_PERF_CTL correctly. If I understand correctly, there are certain discrete values of frequency on which the processor can operate. I want to know how to find these frequency points below the default processor frequency where the processor can operate and thereby convert these points to proper values in IA32_PERF_CTL.
Let me know if you think I have err'd in my understanding.
this is not turbo mode this is locking it at 2.70GHz and disabling DVFS.
This processor has a max turbo mode of 3.5GHz.
the default lowest speed is 1.2GHz.
Sorry for the long delay in replying.
I wasn't able to directly change the bits as I would have liked. But, I got around the problem by using CPUfreq driver to change the frequency. The way to set it up on your machine running unix is explained very well in the guide "CPUfreq Setup".
Next, the step-by-step explanation for checking the available frequencies and setting the required frequency can be found in "Enhanced Intel SpeedStep® Technology and Demand-Based Switching on Linux".
Hope this helps.