调度器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  阅读(37)  评论(0编辑  收藏  举报

导航