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】相关推荐

  1. 【SQL Performance】历史SQL监控(Historical SQL Monitoring ) 功能(12c)

    概述 历史SQL监控使用的例子 关于Automatic Report Capturing 相关视图和程序包 相关参数 参考 概述 Oracle 11g版本 推出了实时SQL监控功能(Real-Time ...

  2. 【《Real-Time Rendering 3rd》 提炼总结】(十二) 渲染管线优化方法论:从瓶颈定位到优化策略

    本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处.   文章链接: https://zhuanlan.zhihu.com/p/32928016 这是一篇很特殊的文章.它将会是这个系列文章主线 ...

  3. 【北邮国院大三上】互联网协议_Internet Protocol_PART B

    北邮国院大三电商在读,全文为PPT机翻+自己理解,仅做整体复习浏览知识点熟悉定义用,不做考前突击复习重点用.有任何问题可评论指出,有需要本文pdf/docx/md/Effiesheet格式的同学请私信 ...

  4. 【转载】【《Real-Time Rendering 3rd》 提炼总结】(十二) 渲染管线优化方法论:从瓶颈定位到优化策略

    本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处.   文章链接: https://zhuanlan.zhihu.com/p/32928016 这是一篇很特殊的文章.它将会是这个系列文章主线 ...

  5. 【北邮国院大三下】Software Engineering 软件工程 Week1

    北邮国院大三电商在读,随课程进行整理知识点.仅整理PPT中相对重要的知识点,内容驳杂并不做期末突击复习用.个人认为相对不重要的细小的知识点不列在其中.如有错误请指出.转载请注明出处,祝您学习愉快. 编 ...

  6. 【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 当前移 ...

  7. 【北邮国院大三下】Logistics and Supply Chain Management 物流与供应链管理 Week2

    北邮国院大三电商在读,随课程进行整理知识点.仅整理PPT中相对重要的知识点,内容驳杂并不做期末突击复习用.个人认为相对不重要的细小的知识点不列在其中.如有错误请指出.转载请注明出处,祝您学习愉快. 编 ...

  8. Java Websocket实例【服务端与客户端实现全双工通讯】

    Java Websocket实例[服务端与客户端实现全双工通讯] 现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP ...

  9. 【SLAM建图和导航仿真实例】(三)- 使用RTAB-MAP进行SLAM建图和导航

    引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建 (二)根据已知地图进行定位和导航 (三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传 ...

  10. 【SLAM建图和导航仿真实例】(一)- 模型构建

    引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建 (二)根据已知地图进行定位和导航 (三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传 ...

最新文章

  1. EditText 长按弹出的上下文菜单
  2. docker build命令详解_『中级篇』docker之java容器运行外置springboot-jar(番外篇)(79)...
  3. nginx php 配置 windows_Windows下配置Nginx使之支持PHP
  4. 变长结构体的临时笔记
  5. gruntjs开发实例
  6. windows系统改装为linux系统_Linux怎么克隆系统?备份系统跟Windows系统有区别吗?...
  7. java spring 过滤器_java – 如何在spring-security中的另一个过滤器之前添加过滤器?...
  8. 华为交换机模拟器_从零开始学习华为路由交换 | 配置缺省静态路由
  9. Java-包、权限修饰符final、static
  10. 界面排版-TableLayout的stretchColumns方法
  11. ESP32 WS2812B灯带 代码
  12. 桌面推演技术前沿及发展趋势
  13. 扫描问题 无法识别计算机,我的扫描枪插进去显示无法识别怎么办
  14. Android 手机做麦克风扩音器demo
  15. 超人工智能语音合成系统问世
  16. 文献标识码与参考文献
  17. 假程序员启示录:房价
  18. SPI通讯介绍 以及读写W25Q64(块,扇区,页的区别)
  19. 冯唐:在江湖上混需要养成的10个好习惯
  20. 学习ASP编程必会的代码

热门文章

  1. Linux下推荐的常用应用程序列表
  2. 如何将html转为report,HTMLReport
  3. 智能交通系统计算机技术应用,计算机技术在智能交通系统中的应用研究
  4. 基于DNS的全局负载均衡(GSLB)详解(上篇)
  5. pdf2swf 转换时报错
  6. 100人同时在线游戏的服务器多少钱一台?
  7. Conda下载Python第三方库(只在Conda环境下载Python,Window里并没有安装)
  8. Ubuntu中Matplotlib绘图的中文乱码
  9. EduChain团队-基于区块链的教育信息管理系统项目会议
  10. 在Linux上创建txt文件,并编辑