调度器22—调频-interactive governor分析
基于msm-4.4
一、概述
Interactive Governor实现调频的核心思想是通过选择最小的频率来满足目标负载。这个过程涉及两个主要因素:系统频率的平均频率 loadadjfreq 和系统设定好的目标负载 target load。Interactive Governor 通过 choose_freq() 函数来选择频率,目的是使选频后的系统工作负载小于或等于目标负载。这个选择过程基于一个核心思想,即在满足性能需求的同时,尽可能降低CPU的频率,以实现能效优化。
具体来说,Interactive Governor 的工作机制包括:
(1) 计算CPU的空闲时间:通过 get_cpu_idle_time() 函数计算当前CPU的空闲时间(包括 iowait 时间),这是评估CPU负载的重要指标。
(2) 选择频率:基于计算出的空闲时间和设定的目标负载,choose_freq() 函数选择能够满足或低于目标负载的最小频率。这个过程确保了CPU在不需要全速运行时能够降低频率,从而节省能源。
(3) 动态调整:通过监控系统的负载变化,Interactive Governor 能够动态地调整CPU频率。当系统负载增加时,它会相应地提高频率以确保性能;反之,当负载降低时,则会降低频率以节省能源。
这种调频策略有助于平衡系统性能和能源效率,特别是在服务器和数据中心环境中,其中大量的计算资源可能大部分时间都处于低负载状态,通过动态调频可以有效降低能耗。
实现位置:msm-4.4/drivers/cpufreq/cpufreq_interactive.c
二、部分实现梳理
1. 创建一个线程负责调频:
cpufreq_interactive_init //cpufreq_interactive.c kthread_create(cpufreq_interactive_speedchange_task, NULL, "cfinteractive") //线程名 "cfinteractive" cpufreq_interactive_speedchange_task //cpufreq_interactive.c __cpufreq_driver_target cpufreq_driver->target() //调用驱动的target回调去调频 msm_cpufreq_target
2. 唤醒这个线程的路径:
cpufreq_interactive_hrtimer get_policyinfo //初始化为定时器的回调函数 cpufreq_interactive_timer store_boost store_boostpulse cpufreq_interactive_boost cpufreq_interactive_init //创建线程 "cfinteractive" 后就唤醒 wake_up_process_no_notif(speedchange_task)
3. choose_freq() 的调用路径:
cpufreq_interactive_timer_resched cpufreq_interactive_timer_start ppol->policy_timer.function cpufreq_interactive_timer load_notifier_block.notifier_call load_change_callback ppol->notif_timer.function cpufreq_interactive_hrtimer cpufreq_interactive_timer choose_freq
这个governor做的不好,即使没有选中它,资源也已经占用了,可以直接remove它,不编译它了。
posted on 2024-08-23 17:39 Hello-World3 阅读(69) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2018-08-23 udev学习笔记汇总
2017-08-23 Ubuntu配置操作总结