我正在尝试控制笔记本电脑的时钟,并且使用 cpupower 取得了“一半成功”,我能够限制时钟,但是每当程序(或者更好的是 marios 程序)开始运行并要求更多的 CPU 时,系统就会忽略限制。
这样说好像它不起作用,但实际上当限制限制时 CPU 会在其中工作,但如果强制过度它也会忽略。
在 Windows 上我使用了 ThrottleStop,只有在出现“系统中断”时才会出现此问题,否则 CPU 始终在施加的限制内运行。
是否有人有解决方案可以让我限制时钟并且系统始终尊重这一点?
答案1
目前您正在使用 acpi-cpufreq CPU 频率调节驱动程序。此答案针对 intel_pstate CPU 频率调节驱动程序,建议您返回该驱动程序进行此工作。为什么?因为这样更简单。
虽然您的处理器是 i3-2328M,但本文的示例是 i7-2600K。
首先,检查你的限制:
$ grep . /sys/devices/system/cpu/intel_pstate/*
/sys/devices/system/cpu/intel_pstate/max_perf_pct:100
/sys/devices/system/cpu/intel_pstate/min_perf_pct:42
/sys/devices/system/cpu/intel_pstate/no_turbo:0
/sys/devices/system/cpu/intel_pstate/num_pstates:23
/sys/devices/system/cpu/intel_pstate/status:active
/sys/devices/system/cpu/intel_pstate/turbo_pct:18
现在假设我想将最大 CPU 频率限制为其功能的 60%:
echo 60 | sudo tee /sys/devices/system/cpu/intel_pstate/max_perf_pct
我将使用 turbostat 来演示:
sudo turbostat --Summary --quiet --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,IRQ --interval 15
Busy% Bzy_MHz IRQ PkgTmp PkgWatt
0.03 1606 844 26 3.69 <<< No load
0.80 3130 3492 26 4.50
3.91 3770 5791 39 9.53
12.52 3799 16078 41 22.84 <<< 100% load on one CPU
12.52 3799 16077 43 22.97
12.53 3309 16168 38 19.44
12.53 2300 16019 38 12.03 <<< Limit to 60% of max (to nearest P state)
12.53 2300 16069 37 12.03
12.53 2300 16007 38 12.03
100.00 2300 120463 43 33.79 << Increase load to all CPUs
100.00 2300 120467 44 33.81
12.53 2300 16045 38 12.04 << Decrease load back to only 1 CPU
12.53 2300 16053 38 12.04
3.34 2295 4756 31 5.95 <<< Load removed
0.03 1600 689 30 3.74
0.07 1816 885 33 3.76