首页 > 其他分享 >调度器22—调频-interactive governor分析

调度器22—调频-interactive governor分析

时间:2024-08-23 17:37:25浏览次数:5  
标签:负载 22 timer cpufreq governor 频率 调频 interactive

基于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

相关文章

  • cas:2247545-20-4|Biotin-LC-PEG4-NHS ester|生物素-LC-四聚乙二醇-琥珀酰亚胺酯
    描述Biotin-LC-PEG4-NHSester中的NHS-PEG4-Biotin是一种聚乙二醇化水溶性试剂,用于对抗体、蛋白质和其他含伯胺的大分子进行简单有效的生物素标记。N-羟基琥珀酰亚胺酯(NHS)基团与赖氨酸和N-末端氨基特异性且有效地反应形成稳定的酰胺键。亲水性聚乙二醇(PEG)间隔臂赋予......
  • ACL 2022 SWCC 论文拆解
    引言本文贡献Wearemotivatedtoaddresstheaboveissueswiththegoalofmakingbetteruseofcooccurrenceinformationofevents.Tothisend,wepresentSWCC:aSimultaneousWeaklysupervisedContrastivelearningandClusteringframeworkforeventreprese......
  • 代码随想录day 38 || 322 零钱兑换,279 完全平方数,139 单词拆分
    322零钱找还funccoinChange(coins[]int,amountint)int{ //装满,并且硬币无限,可以类比完全背包问题 //dp[i][j]表示前i个物品装满容量为j的背包所需要的最少物品数量 //递推公式dp[i][j]=min(dp[i-1][j],dp[i][j-w(i)]+1)//不装物品i的物品数量,装物品i的物品数......
  • 【2024-08-22】遇则面对
    20:00饮酒不至狂,对客不至疲。读书以自娱,不强所不知。一窗袖手坐,往往昼漏移。初非能养生,简事颇似之。四时俱可喜,最好新秋时。柴门傍野水,邻叟闲相期。                                        ......
  • 【408DS算法题】022基础-递增输出单链表中的结点值
    Index题目分析实现总结以上内容稍后补全,以下内容来自https://blog.csdn.net/weixin_60702024/article/details/141336041题目分析实现总结分析题目给定单链表的头结点,按照递增的顺序,输出单链表结点的值。分析实现具体实现如下:总结注意delete执行后,只会将......
  • 代码随想录DAY22 - 回溯算法 - 08/21
    目录理论回顾什么是回溯法回溯法的效率回溯法解决的问题如何理解回溯组合题干思路和代码递归法递归优化:剪枝组合总和Ⅲ题干思路和代码递归法递归优化电话号码的字母组合题干思路和代码递归法理论回顾什么是回溯法回溯是一种类似枚举的搜索方法,回溯和......
  • 代码随想录DAY23 - 回溯算法 - 08/22
    组合总和题干题目:给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的所有不同组合,并以列表形式返回。你可以按任意顺序返回这些组合。candidates中的同一个数字可以无限制重复被选取。如果至少......
  • 免输密码全自动登录金山文档Windows客户端 2024年8月22日
     免输密码全自动登录金山文档Windows客户端2024年8月22日  ;免输密码全自动登录金山文档Windows客户端2024年8月22日;;指纹加密U盘&FindText-v9.7-by-FeiYue&Loop-if-break&金山文档&Index-Your-Files&mstsc&零层壹号&WinSCP&USMv5&Acronis-true-Image-2021-WinPE&......
  • Selenium + Python 自动化测试22(PO+数据驱动)
            我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。上一篇我们讨论了PO模式和unittest框架结合起来使用。        本篇文章我们综合一下之前学习的内容,如先将PO模式、数据驱动思想和我们生成HTML报告融合起来,综合的灵活的使用......
  • NOI2022 众数
    经典题目,对于绝对众数只需要考虑这一个序列的中位数在序列中出现次数是否大于一半即可。这道题用线段树合并维护一下就做完了。点击查看代码#include<bits/stdc++.h>#definefirfirst#definesecsecond#defineintlonglong#definemkp(a,b)make_pair(a,b)usingname......