详解Linux cpufreq 机制

从 2.6.0 Linux 内核开始,您可以通过 CPUfreq 子系统动态调整处理器频率。当处理器以较低的时钟速度运行时,它们消耗的电能和产生的热量也相对较少。时钟速度的这种缩放可以控制系统在未全力运行时消耗较少电能。

cpufreq概述

cpufreq的核心功能,是通过调整CPU的电压和频率,来兼顾系统的性能和功耗。在不需要高性能时,降低电压和频率,以降低功耗;在需要高性能时,提高电压和频率,以提高性能。

cpufreq软件框架

对下,cpufreq基于clock、regulator、pmu等模块实现频率和电压的控制。对上,cpufreq通过cpufreq core、cpufreq governor、cpufreq stats等模块以sysfs的形式向用户空间提供频率的查询、控制等接口。内部,cpufreq内部分为core、governor、drivers等模块。

cpufreq调频策略

  • Performance

性能优先,CPU固定工作在其支持的最高频率。

  • Powersave

功耗优先,CPU固定工作在其支持的最低频率。

  • Userspace

系统将变频策略的决策权交给用户态应用程序,并提供了相应的接口供用户态程序设置CPU 频率。

  • Ondemand

按需动态调整CPU频率, 只要CPU负载超过阈值up_threshold就会立即设置为最大频率,其他时候根据负载计算出合适的频率。

  • Conservative

与ondemand不同,Conservative不是一味追求最高频率,而是平滑地调整CPU频率,频率的升降是渐变式的。

  • interactive

基于内核任务调度触发调频callback。在callback函数中统计两次调度之间CPU处于idle和busy的时间,计算出CPU负载调频然后调频。

  • schedutil

schedutil也是基于内核任务调度触发调频callback,与interactive不同的是,schedutil使用的负载来自于内核使用任务负载跟踪技术(PELT/WALT)估计出来的负载。

cpufreq调测命令

  • 查询

以下文件节点均可通过cat命令显示

# ls /sys/devices/system/cpu/cpu0/cpufreq/

affected_cpus //当前策略作用于哪些online corecpuinfo_cur_freq //当前CPU硬件频率cpuinfo_max_freq //CPU硬件支持的最低频率cpuinfo_min_freq //CPU硬件支持的最高频率cpuinfo_transition_latency //硬件支持的切换频率最小间隔related_cpus //online和offline corescaling_available_frequencies //软件支持的频率列表scaling_available_governors //支持的策略列表scaling_cur_freq //软件设置的当前频率,通常与cpuinfo_cpus相同,如果出现硬件问题可能导致不一致scaling_driver //当前使用的driverscaling_governor //当前使用的governorscaling_max_freq //软件governor设置的最高频率scaling_min_freq //软件governor设置的最低频率scaling_setspeed //需将governor类型切换为userspace,才会出现,通过echo修改数值,会切换主频

  • 设置

可以通过 echo配置scaling_governor,scaling_max_freq,scaling_min_freq 例如:echo 1400 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq

cpufreq编译配置

#CPU Frequency scalingCONFIG_CPU_FREQ=y #主开关#CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y #default gov任选某个宏打开即可,决定了cpufreq初始化使用的governor,后续可在init.rc修改文件结点#CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y#CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=yCONFIG_CPU_FREQ_STAT=y #维测开关,查看cpufreq统计信息:/sys/devices/system/cpu/cpu0/cpufreq/stats

cpufreq模块初始化

cpufreq的初始化分为3大阶段,依次是core层、governor层和drivers层。

  • core层

初始化调频通知链表,pure_initcall(init_cpufreq_transition_notifier_list)创建cpufreq文件结点,core_initcall(cpufreq_core_init)

  • governor层

使用cpufreq_register_governor接口注册各个governor到链表中,,例如:

fs_initcall(cpufreq_gov_performance_init);fs_initcall(cpufreq_gov_powersave_init);fs_initcall(cpufreq_gov_userspace_init);fs_initcall(cpufreq_gov_dbs_init);fs_initcall(sugov_register);

  • drivers层

drivers层的初始化在device_initcall或者late_initcall阶段。需要完成以下主要任务:

  1. 调用cpufreq_register_driver注册驱动
  2. 驱动的init回调完成硬件层的初始化,包括clk、regulator、pmu的控制
  3. cpufreq_register_driver接口内部完成policy和governor的设置

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/203009.html<

(0)
运维的头像运维
上一篇2025-04-06 11:56
下一篇 2025-04-06 11:58

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注