【cpufreq】【governor】【performance】
cpufreq的governor中performance实际上是最简单粗暴的,因为他直接将freq上升到最高
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt#include <linux/cpufreq.h>
#include <linux/init.h>
#include <linux/module.h>// 回调函数响应具体的事件
static int cpufreq_governor_performance(struct cpufreq_policy *policy,unsigned int event)
{switch (event) {case CPUFREQ_GOV_START:case CPUFREQ_GOV_LIMITS:pr_debug("setting to %u kHz because of event %u\n", policy->max, event);__cpufreq_driver_target(policy, policy->max,CPUFREQ_RELATION_H);break;default:break;}return 0;
}#ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE_MODULE
static
#endif
struct cpufreq_governor cpufreq_gov_performance = {.name = "performance",.governor = cpufreq_governor_performance,.owner = THIS_MODULE,
};static int __init cpufreq_gov_performance_init(void)
{return cpufreq_register_governor(&cpufreq_gov_performance);
}static void __exit cpufreq_gov_performance_exit(void)
{cpufreq_unregister_governor(&cpufreq_gov_performance);
}MODULE_AUTHOR("xxxxxx");
MODULE_DESCRIPTION("CPUfreq policy governor 'performance'");
MODULE_LICENSE("GPL");// 序号是5
fs_initcall(cpufreq_gov_performance_init);
module_exit(cpufreq_gov_performance_exit);
注册和移除governor都是添加或者从内核的链表中添加或者移除
//将governor注册到cpufreq core中之后才能通过policy的governor和policy相互关联,才能被使用
int cpufreq_register_governor(struct cpufreq_governor *governor)
{int err;if (!governor)return -EINVAL;if (cpufreq_disabled())return -ENODEV;// mutex互斥体用来保护较长的临界区mutex_lock(&cpufreq_governor_mutex);governor->initialized = 0;err = -EBUSY;if (!find_governor(governor->name)) {err = 0;// 将governor添加到governor的list里面去// 核心层定义了一个全局链表变量,cpufreq_governor_listlist_add(&governor->governor_list, &cpufreq_governor_list);}mutex_unlock(&cpufreq_governor_mutex);return err;
}
EXPORT_SYMBOL_GPL(cpufreq_register_governor);void cpufreq_unregister_governor(struct cpufreq_governor *governor)
{struct cpufreq_policy *policy;unsigned long flags;if (!governor)return;if (cpufreq_disabled())return;/* clear last_governor for all inactive policies */read_lock_irqsave(&cpufreq_driver_lock, flags);for_each_inactive_policy(policy) {if (!strcmp(policy->last_governor, governor->name)) {policy->governor = NULL;strcpy(policy->last_governor, "\0");}}read_unlock_irqrestore(&cpufreq_driver_lock, flags);mutex_lock(&cpufreq_governor_mutex);list_del(&governor->governor_list);mutex_unlock(&cpufreq_governor_mutex);return;
}
EXPORT_SYMBOL_GPL(cpufreq_unregister_governor);
至于后面的接受事件的回调函数。。。
【cpufreq】【governor】【performance】相关推荐
- 【SQL Performance】历史SQL监控(Historical SQL Monitoring ) 功能(12c)
概述 历史SQL监控使用的例子 关于Automatic Report Capturing 相关视图和程序包 相关参数 参考 概述 Oracle 11g版本 推出了实时SQL监控功能(Real-Time ...
- 【《Real-Time Rendering 3rd》 提炼总结】(十二) 渲染管线优化方法论:从瓶颈定位到优化策略
本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处. 文章链接: https://zhuanlan.zhihu.com/p/32928016 这是一篇很特殊的文章.它将会是这个系列文章主线 ...
- 【北邮国院大三上】互联网协议_Internet Protocol_PART B
北邮国院大三电商在读,全文为PPT机翻+自己理解,仅做整体复习浏览知识点熟悉定义用,不做考前突击复习重点用.有任何问题可评论指出,有需要本文pdf/docx/md/Effiesheet格式的同学请私信 ...
- 【转载】【《Real-Time Rendering 3rd》 提炼总结】(十二) 渲染管线优化方法论:从瓶颈定位到优化策略
本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处. 文章链接: https://zhuanlan.zhihu.com/p/32928016 这是一篇很特殊的文章.它将会是这个系列文章主线 ...
- 【北邮国院大三下】Software Engineering 软件工程 Week1
北邮国院大三电商在读,随课程进行整理知识点.仅整理PPT中相对重要的知识点,内容驳杂并不做期末突击复习用.个人认为相对不重要的细小的知识点不列在其中.如有错误请指出.转载请注明出处,祝您学习愉快. 编 ...
- 【TA-霜狼_may-《百人计划》】图形3.7 移动端TP(D)R架构
[TA-霜狼_may-<百人计划>]图形3.7 移动端TP(D)R架构 @[TOC]([TA-霜狼_may-<百人计划>]图形3.7 移动端TP(D)R架构 3.7.1 当前移 ...
- 【北邮国院大三下】Logistics and Supply Chain Management 物流与供应链管理 Week2
北邮国院大三电商在读,随课程进行整理知识点.仅整理PPT中相对重要的知识点,内容驳杂并不做期末突击复习用.个人认为相对不重要的细小的知识点不列在其中.如有错误请指出.转载请注明出处,祝您学习愉快. 编 ...
- Java Websocket实例【服务端与客户端实现全双工通讯】
Java Websocket实例[服务端与客户端实现全双工通讯] 现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP ...
- 【SLAM建图和导航仿真实例】(三)- 使用RTAB-MAP进行SLAM建图和导航
引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建 (二)根据已知地图进行定位和导航 (三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传 ...
- 【SLAM建图和导航仿真实例】(一)- 模型构建
引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建 (二)根据已知地图进行定位和导航 (三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传 ...
最新文章
- EditText 长按弹出的上下文菜单
- docker build命令详解_『中级篇』docker之java容器运行外置springboot-jar(番外篇)(79)...
- nginx php 配置 windows_Windows下配置Nginx使之支持PHP
- 变长结构体的临时笔记
- gruntjs开发实例
- windows系统改装为linux系统_Linux怎么克隆系统?备份系统跟Windows系统有区别吗?...
- java spring 过滤器_java – 如何在spring-security中的另一个过滤器之前添加过滤器?...
- 华为交换机模拟器_从零开始学习华为路由交换 | 配置缺省静态路由
- Java-包、权限修饰符final、static
- 界面排版-TableLayout的stretchColumns方法
- ESP32 WS2812B灯带 代码
- 桌面推演技术前沿及发展趋势
- 扫描问题 无法识别计算机,我的扫描枪插进去显示无法识别怎么办
- Android 手机做麦克风扩音器demo
- 超人工智能语音合成系统问世
- 文献标识码与参考文献
- 假程序员启示录:房价
- SPI通讯介绍 以及读写W25Q64(块,扇区,页的区别)
- 冯唐:在江湖上混需要养成的10个好习惯
- 学习ASP编程必会的代码