我想在 linux(Ubuntu)上的程序中更改 cpu(ARM)频率。
C中是否有任何cpu频率缩放和关闭核心API?
如果有的话,API 可以处理多核 cpu 中的每个核心吗?
有几种方法可以控制 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的支持。有时两个或多个内核必须以相同的频率运行,这是硬件的简单限制。请参阅此帖子以获取答案。
您可能必须使用/sys
和/proc/
文件系统,并写入它们下的某些文件,例如可能在/sys/devices/system/cpu/
我将研究cpufreq-set对动态频率缩放的作用
顺便说一句,您可以使用system(3)
命令cpufreq-set
进行分叉。
(不知道ARM处理器在这些方面的特点)