Linux cpufreq 简介

一、为什么要 CPU 变频

CPU变频即改变CPU运行时的频率,CPU在不同的频率下运行时所需的电压不同,频率越高,所需的电压也随之升高,因此在移动设备领域,为了节省功耗,在系统suspend或者load较小时,让CPU运行在较低的频点,可以减少CPU的功耗,从而延长设备的续航时间。

 

二、与CPU变频相关的模块

1) OPP

    用来描述cpu支持的频率和电压组合,cpu变频时,governor会从支持的频率中选择一个最优的频率,因此opp提供的是cpu可运行的频率范围。

2) governor

    动态调整CPU频率的一种机制,常用的governor有Performance,Powersave,Userspace, Ondemand等,后续文章会详细介绍

3) clk

    改变CPU的工作频率,就是通过改变cpu 的clk来实现的。

 

CPU freq framework

CPU freq framwork是整个cpu变频的核心,其主要包含三部分的功能:

1)cpufreq driver可通过其提供的API 注册到framework中

2)cpufreq governor可通过其提供的API实现CPU变频及注册governor到framework中

3)提供一系统的sysfs文件节点,供用户空间限制系统频率及debug使用

 

三、如何控制CPU的频率?

1)通过sysfs节点

在/sys/devices/system/cpu/cpu0/cpufreq目录下有如下节点:

cpuinfo_min_freq:处理器可以运行的最低频点(KHz)

cpuinfo_max_freq:处理器可以运行的最高频点(KHz)

scaling_available_governors:系统支持的governors

scaling_governor: 如通过echo userspace > scaling_governor命令可以将governor切换为userspace governor

cpuinfo_cur_freq: 从硬件上获得的CPU 频率(KHz)即CPU真正运行的频率

scaling_available_frequencies:CPU 可运行的频点列表

scaling_min_freq and scaling_max_freq:通过这两个节点,可以限制CPU运行的频率范围

scaling_cur_freq:cpufreq governor 和 cpufreq core决定的cpu 频率,可能和cpuinfo_cur_freq读到的频率不一样

scaling_setspeed:在governor 为userspace时有效,可将cpu频率设置为scaling_min_freq and scaling_max_freq之间的某个特定频率

 

2)governor 自动变频

以sugov(schedutil governor)为例,描述governor变频的大致过程。

    sugov_work->
        __cpufreq_driver_target->
            __target_index->
                cpufreq_driver->target_index
                        clk_set_rate //改变cpu的clock
                        regulator_set_voltage_tol //改变电压

 

注意:如果是升频,则需要先升电压,再降频;如果是降频,则先降频,再降电压

 

发布了9 篇原创文章 · 获赞 4 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览