OpenCPN-低功耗/CPU调优和PM分析器
cpupower
cpupower是cpufreq-utils的新版本。它允许对CPU进行相当精细的调整。
- 设置一个调速器
- 限制CPU的频率
调速器
调速器是一个小看门狗,它根据任务数量调整CPU的“负载”。 在我们的例子中,按需调速器很有趣(另一个是性能调速器)。 我们不会用cpupower来使用它,而是用pm-profiler来使用它。
限制CPU频率
cpupower为我们提供了设置调速器无法超过的最大频率的可能性。
由于每台计算机都不同,我们不能为任何计算机设置相同的最大频率,事实上,每个CPU都有其最小和最大限制。 因此,我们必须在设置最大限制之前提取最小CPU频率,这些bash行可以为我们做到这一点。
FREQ=$(cpupower frequency-info -l |tail -n 1 |cut -d " " -f 1) # we assume that all cores have the same limit than core 0 cpupower -c all frequency-set -u $FREQ # we don't touch the governor here, pm-profiles does it for us
pm-profiler
pm-profiler是一个脚本,它通过解析配置文件来启用或禁用计算机的功能。 我们不会详细介绍整个配置文件,而只是关注我们更改的部分。
我们创建了一个名为“opencpn”的新配置文件,将调速器设置为ondemand模式并激活任务调度器。 我们还减慢了内核缓冲区写入文件的速度。 此外,我们正在努力增加“预读”缓存。
停止CPU
Linux允许您停止所有核心,除了核心0。 有两种方法可以做到这一点
- 即时方式
- grub参数
我们首先通过执行以下操作来计算我们拥有的已启用核心的数量。
$ grep -c processor /proc/cpuinfo 4
即时方式
这是最简单的方法,因为您只需要一个root shell。 有关文件位于此处。
# ls -1 /sys/devices/system/cpu/cpu*/online /sys/devices/system/cpu/cpu1/online /sys/devices/system/cpu/cpu2/online /sys/devices/system/cpu/cpu3/online
如您所见,cpu0没有在线选项。
文件的内容为0(表示关闭)或1(表示打开)。 因此,我们很容易制作这个脚本来停止所有核心(除了核心0)。
for i in /sys/devices/system/cpu/cpu*/online; do
echo 0 > $i
done
grub方式
我们为此使用了grub2,可能可以使用grub,但我们让您自己找到方法!
您还可以在/etc/default/grub文件中通过在以下行中设置maxcpus=X(X是一个数字)来指定Linux将使用的最大CPU数量:GRUB_CMDLINE_LINUX_DEFAULT。 不要忘记“重建”您的grub。
# grub2-mkconfig -o /boot/grub2/grub.cfg
结果
所有测量均在0.1.5安装上进行。
我们遇到了意想不到的结果,因此,我们在系统什么都不做的时候测量了系统。
1.2 GHz频率
- 调度器 - 1个核心
- 无调度器 - 1个核心
- 无调度器 - 所有核心
2.6 GHz频率
- 无调度器 - 1个核心
- 无调度器 - 所有核心
对于所有测量,pm-profiler都使用我们的配置文件运行,许多事情都被禁用了。
- GMixer applet
- Parcellite applet
- SSH Server
- 蓝牙
我们发现调度器(pm-profiler设置中的CPUFREQ_SCHED_MC_POWER_SAVINGS)消耗的功率(远)高于关闭时。 这里有一张比较我们测量结果的图表。
您可以在此处找到原始数据。 简而言之,我们节省了0.45瓦特,介于最低功耗平均值和先前版本(版本0.1.2)的“参考”功耗平均值之间。
深入挖掘
我们想知道在系统什么都不做的时候,所有的核心是否有用,因此我们在“交叉路口”用2个核心而不是4个核心进行测量。 结果几乎相似,只有峰值的高度有所不同。 由于我们不想犯错并且结果非常接近,因此我们通常测量一次,现在需要测量两次。
这些结果并没有让我们得出明确的结论,但是,似乎拥有多个核心可以平滑峰值。 您可以在此处找到原始数据和图表。

