I wish to set the frequencies of all cores of my Xeon e5-2660 v4 (Broadwell) to the same value to remove variance in timing due to frequency fluctuations
Based on the available advice on this topic, I have tried the following (independently and in combination):
- Set scaling governer to performance
echo -n performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
- Set the maximum and minimum frequencies in a tight range
echo 1990000 > /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq
echo 2010000 > /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
- Disabled the turbo boost option
echo 1 | tee /sys/devices/system/cpu/intel_pstate/no_turbo
- Write the MSR associated with turbo boost
wrmsr --all 0x1a0 0x4000850089
Despite trying the above options, I am getting significant variance in CPU frequencies across different cores. Additionally, the frequency values of each core fluctuates significantly over time (measured using the following command -
cpufreq-info | grep "CPU freq"
Why doesn't this work, and what should I do instead?
System information: Xeon e5-2660 v4 (Broadwell), Debian Stretch (kernel version 4.9)
UPDATE 1: I reverted back to kernel version 3.16 (used in Debian jessie) and I was able to get all cores at nominal frequency using just steps 1 and 3
UPDATE 2: I tested steps 1 and 3 on my laptop (Intel core i5-5300, arch linux, kernel 4.14.15-1) and the 4 logical processors did NOT settle at the nominal frequency. Adds support that the newer kernels make it difficult to control frequency