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个核心进行测量。 结果几乎相似,只有峰值的高度有所不同。 由于我们不想犯错并且结果非常接近,因此我们通常测量一次,现在需要测量两次。

这些结果并没有让我们得出明确的结论,但是,似乎拥有多个核心可以平滑峰值。 您可以在此处找到原始数据和图表。

源代码