基于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它,不编译它了。
标签:负载,22,timer,cpufreq,governor,频率,调频,interactive From: https://www.cnblogs.com/hellokitty2/p/18376703