【发布时间】:2012-07-31 00:07:44
【问题描述】:
我想在 linux(Ubuntu) 上的程序中更改 cpu(ARM) 频率。
C 中是否有任何 cpu 频率缩放和关闭核心 API?
如果有,API 可以处理多核 cpu 中的每个核心吗?
【问题讨论】:
我想在 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 documentation和here。
单独处理每个核心的一个限制。这取决于CPU的支持。有时两个或多个内核必须以相同的频率运行,这是硬件的简单限制。请参阅此post 以获取答案。
【讨论】:
您可能必须使用/sys 和/proc/ 文件系统,并写入它们下的某个文件,例如或许在/sys/devices/system/cpu/下
我会调查cpufreq-set 对dynamic frequency scaling 做了什么
顺便说一句,您可以使用system(3) 和cpufreq-set 命令进行分叉。
(我不知道ARM处理器在这些方面的特点)
【讨论】: