缩小CPU频率

时间:2016-09-19 08:55:58

标签: c linux cpu-usage cpu-speed

有没有办法告诉内核我不需要全部CPU能力?

基本上,我想在等待另一个进程时进行一些计算。但我不需要全部CPU功率。由于计算期间的CPU负载仍为100%,因此频率很高。我想告诉内核我对降低CPU频率感到满意,以节省能源。

我想尝试使用较低的频率进行计算而不是使用全频率进行计算,而是尝试以较低的频率进行计算,以便当其他进程完成并且频率可以缩放时,CPU不处于较低的C状态再回来。

4 个答案:

答案 0 :(得分:3)

这对多进程系统没有任何意义,特别是在Linux中没有。 CPU频率是一个非常基本的参数,它会影响计算机上运行的所有内容 - 包括其他进程和操作系统本身。

如果您的程序会调整CPU频率,它不仅会决定自身的优先级,还会决定计算机中所有的优先级,包括操作系统。这在桌面系统上是不可能的,仅仅因为单个应用程序进程决定了甚至操作系统都不敢干涉的事情也没有任何意义。

如果优先考虑节省电力,您应该寻找与某些桌面Linux解决方案完全不同的替代方案。 PC计算机只关心1)速度,2)速度以及3)速度。

您要求的东西在实时嵌入式系统中很常见,其中CPU具有“睡眠模式”,可以从中唤醒以执行某些操作,然后再回到睡眠状态。这种系统通常也可以摆弄内部PLL来调整它们自己的频率,但这种解决方案很少见。行业标准的做法是以最大速度执行所有计算,然后恢复到省电睡眠模式。

答案 1 :(得分:1)

在多核的情况下 - 有一种方法可以为中断指定某个cpu核心。通过这种方式,您可以将某个CPU保存到某个进程: 找到任务使用的irq号:

cat /proc/interrupts

寻找您的irq号码。 让我们说irp数是99,所以为了设置核心#2来处理这个irq,请执行:

echo 2 > /proc/irq/99/smp_affinity

通过这种方式,您可以保存某个核心来处理您的特殊过程。

答案 2 :(得分:0)

您实际上可以使用nice()告诉内核您的进程可以使用低于正常的调度优先级。这有效地减少了进程使用CPU的时间片数(通常有利于同时运行的其他进程)。

在一些更现代的系统上,如果这会显着降低整体CPU负载,那么CPU 可能最终决定以更低的频率运行。但是你通常不会直接影响这个决定。

注意:根据系统的不同,您可能无法恢复原始的nice值(即再次按比例放大优先级),而无需使用适当的权限运行。

如果您的应用程序受到I / O限制并且没有做浪费等待CPU周期的愚蠢事情,那么就没有必要恢复减少您的好价值 - 现代CPU和操作系统应该能够检测到当系统主要闲置并自动降级时,它们自己。

答案 3 :(得分:0)

相应地修改scalling_goverance。 “ scaling_governor”功能可为CPU设置静态频率。

频率值必须在scaling_min_freq和scaling_max_freq之间。

当CPU频率调节器设置为“节能”模式时,CPU设置为最低静态频率(在scale_min_freq和scale_max_freq的边界内)。

在目标上的以下路径中签入 猫/ sys / devices / system / cpu / cpu * / cpufreq / scaling_available_governors 并通过写入以下内容来选择所需的缩放比例治理 回声“节能” / sys / devices / system / cpu / cpu * / cpufreq / scaling_governor