I wanted to experiment with DVFS on Intel SandyBridge and through the Intel Manual 3B, I see that the DVFS is achieved on SandyBridge using Enhanced Intel SpeedStep.
It says that IA32_PERF_CTL could be set to achieve DVFS. However the Manual does not explain how to set the lower 16 bits in IA32_PERF_CTL to achieve this. I went across searching on different forums to ascertain how to set this to no avail. However, what I could learn is that the 16 bits are divided into two 8-bit blocks that specify the Multiplier and VID.
I also found that the multiplier can be found on intel sandy bridge as
I am using a Xeon E5-2680 with 2.7GHz. The https://www-ssl.intel.com/content/dam/www/public/us/en/documents/datasheets/xeon-e5-1600-2600-vol-1-... data sheet says the BCLK0 and BCLK1 are 100MHz(Table:6-11). So the current multiplier seems to be 27. The VID range is 0.60V-1.35V.
1. Now if I have to scale the frequency, do the go about changing 8-MSB(15-8) to any value lesser than 27 only?
2. Or do I need to change the 8-LSB(7-0) between 0.6 and 1.35V.
I am aware that SandyBridge has a limited set of P-states from P0 to PN and I just can't go about setting the 16-bits as per my will.
So, What I basically wanna know is how do I do DVFS on SandyBridge?
PS: Please correct me if my understanding so far is incorrect.
Thanks in advance.
Could you get any info on this? I know of the tool cpu_freq that can be used for DVFS but I just wanted to know if it can be achieved just by setting the MSR.
I was able to ask around and get this response:
The easiest way to achieve what you are trying to do is to isto 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.
http://ark.intel.com/products/64583/Intel-Xeon-Processor-E5-2680-20M-Cache-2_70-GHz-8_00-GTs-Intel-Q... ARK | Intel&# 174; Xeon&# 174; Processor E5-2680 (20M Cache, 2.70 GHz, 8.00 GT/s Intel&# 174; QPI)
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 "https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Power_Management_Guide... CPUfreq Setup".
Next, the step-by-step explanation for checking the available frequencies and setting the required frequency can be found in "https://software.intel.com/en-us/articles/enhanced-intel-speedstepr-technology-and-demand-based-swit... Enhanced Intel SpeedStep® Technology and Demand-Based Switching on Linux".
Hope this helps.