Linux下的CPU频率调节API(C语言)

4

我希望在Linux(Ubuntu)上的程序中更改CPU(ARM)频率。

是否有C语言的CPU频率缩放和关闭核心API?

如果有,该API能否处理多核CPU中的每个核心?

2个回答

5
在Linux中,有几种方法可以控制频率。您可以使用IA32_PERF_CTL寄存器设置受支持的Intel处理器的电源状态。但是,您也可以使用通过sysfs文件系统导出的cpufreq接口,该接口不仅支持Intel CPU。
您可以查看/sys/devices/system/cpu/cpuX/*中可以更改的参数。以下是一些提示:
关闭频率缩放是通过管理器完成的,该管理器处理将处理器放入不同状态的策略。例如,要获得完整性能,请执行以下操作:
echo performance > /sys/devices/system/cpu/cpuX/cpufreq/scaling_governor

这里有多个调度器,你可以在这里看到:

cat /sys/devices/system/cpu/cpuX/cpufreq/scaling_available_governors

通过文件系统接口访问这些内容很麻烦。你可以使用libudev访问cpufreqs成员。请参见udev文档这里的教程。

有一个关于逐个处理每个内核的限制。它取决于CPU的支持情况。有时两个或多个内核必须以相同的频率运行,这是硬件的简单限制。请查看此帖子获取答案。


1
我不明白为什么通过sysfs更改频率会很麻烦。而且在这里使用libudev库有什么好处。 - Kevin Q

0

你可能需要使用 /sys/proc/ 文件系统,并写入其中的某个文件,例如在 /sys/devices/system/cpu/ 下。

我会研究一下 cpufreq-set动态频率调节 方面的作用。

顺便说一句,你可以使用 system(3) 分叉一个 cpufreq-set 命令。

(我不知道 ARM 处理器在这些方面的特殊性)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接