Linux cpuidle framework(2)_cpuidle core
作者:wowo 发布于:2014-12-30 22:38 分类:电源管理子系统
cpuidle core是cpuidle framework的核心模块,负责抽象出cpuidle device、cpuidle driver和cpuidle governor三个实体,并提供如下功能(可参考“Linux cpuidle framework(1)_概述和软件架构”中的软件架构):
1)向底层的cpuidle driver模块提供cpudile device和cpuidle driver的注册/注销接口。
2)向cpuidle governors提供governor的注册接口。
3)提供全局的cpuidle机制的开、关、暂停、恢复等功能。
4)向用户空间程序提供governor选择的接口。
5)向kernel sched中的cpuidle entry提供cpuidle的级别选择、进入等接口,以方便调用。
本文会以这些功能为线索,逐一展开,分析cpuidle framework的实现思路和实现原理。
标签: Linux framework core cpuidle
Linux时间子系统之(四):timekeeping
作者:linuxer 发布于:2014-12-29 18:03 分类:时间子系统
timekeeping模块是一个提供时间服务的基础模块。Linux内核提供各种time line,real time clock,monotonic clock、monotonic raw clock等,timekeeping模块就是负责跟踪、维护这些timeline的,并且向其他模块(timer相关模块、用户空间的时间服务等)提供 服务,而timekeeping模块维护timeline的基础是基于clocksource模块和tick模块。通过tick模块的tick事件,可以 周期性的更新time line,通过clocksource模块、可以获取tick之间更精准的时间信息。
本文熟悉介绍timekeeping的一些基础概念,接着会介绍该模块初始化的过程,此后会从上至下介绍该模块提供的服务、该模块如何和tick模块交互以及如何和clocksource模块交互,最后介绍电源管理相关的内容。
Linux电源管理(13)_Driver的电源管理
作者:Physh 发布于:2014-12-26 18:31 分类:电源管理子系统
首先,回想一下wowo电源管理系列文章中提到的几个PM特性:
B. Wake Lock
C. Auto Sleep
这篇文章就简单简单整理一下以上特性的在Driver中的使用场景,理解可能有偏差,大家多指教。
Linux时间子系统之(三):用户空间接口函数
作者:linuxer 发布于:2014-12-24 15:48 分类:时间子系统
从应用程序的角度看,内核需要提供的和时间相关的服务有三种:
1、和系统时间相关的服务。例如,在向数据库写入一条记录的时候,需要记录操作时间(何年何月何日何时)。
2、让进程睡眠一段时间
3、和timer相关的服务。在一段指定的时间过去后,kernel要alert用户进程
本文主要描述和时间子系统相关的用户空间接口函数知识。
Linux时间子系统之(一):时间的基本概念
作者:linuxer 发布于:2014-12-23 12:22 分类:时间子系统
本文使用Q & A的方式来和大家以前探讨一下时间的基本概念标签: 时间基础
Linux时间子系统系列文章之目录
作者:linuxer 发布于:2014-12-23 9:59 分类:时间子系统
本文对近期要撰写的Linux时间子系统的相关文章进行规划。
另外,需要说明的是这里的时间概念就是牛顿经典力学中的时间,一般而言,当进入微观领域(例如原子或者各种基本粒子级别)或者宏观领域(整个银河系啊、宇宙大爆炸什么的)的时候,时间变成一个相对的概念,不过还是让物理学家去研究吧。
标签: Linux时间子系统
Linux电源管理(12)_Hibernate功能
作者:Physh 发布于:2014-12-22 11:51 分类:电源管理子系统
本文简要分析了Linux一种Hibernation实现机制——Swap Suspend的是实现方法。本文会尽量从机制出发,不会深入代码分析,如果您感兴趣,可以参照附件给出的流程图,阅读内核代码,相信您也可以找到其中乐趣。
A. Swap Suspend的原因
B. 如何实现STF
C. Swap Suspend的关键
标签: Kernel hibernation
Linux cpuidle framework(1)_概述和软件架构
作者:wowo 发布于:2014-12-17 23:04 分类:电源管理子系统
在计算机系统中,CPU的功能是执行程序,总结起来就是我们在教科书上学到的:取指、译码、执行。那么问题来了,如果没有程序要执行,CPU要怎么办?也许您会说,停掉就是了啊。确实,是要停掉,但何时停、怎么停,却要仔细斟酌,因为实际的软硬件环境是非常复杂的。
我们回到Linux kernel上,Linux系统中,CPU被两类程序占用:一类是进程(或线程),也称进程上下文;另一类是各种中断、异常的处理程序,也称中断上下文。
进程的存在,是用来处理事务的,如读取用户输入并显示在屏幕上。而事务总有处理完的时候,如用户不再输入,也没有新的内容需要在屏幕上显示。此时这个进程就可以让出CPU,但会随时准备回来(如用户突然有按键动作)。同理,如果系统没有中断、异常事件,CPU就不会花时间在中断上下文。
在Linux kernel中,这种CPU的无所事事的状态,被称作idle状态,而cpuidle framework,就是为了管理这种状态。
注:cpuidle framework系列文章会以ARM64作为示例平台,由于ARM64刚刚发布不久,较早版本的kernel没有相关的代码,因此选用了最新的3.18-rc4版本的kernel。
关于spin_lock的问题
作者:Physh 发布于:2014-12-12 14:10 分类:Linux内核分析
spin_lock的分析文章Google一下有很多,这里只是分享一些关于spin_lock思考过的问题。标签: spin_lock
Linux时间子系统之(十二):periodic tick
tick device layer是clock event core模块的用户,tick device layer利用clock event core模块提供的接口实现了各种tick device功能:周期性tick、tickless mode、broadcast tick等。本文从最简单的周期性tick开始,描述tick device的基本概念以及周期性tick的工作原理。功能
最新评论
文章分类
随机文章
文章存档
- 2024年2月(1)
- 2023年5月(1)
- 2022年10月(1)
- 2022年8月(1)
- 2022年6月(1)
- 2022年5月(1)
- 2022年4月(2)
- 2022年2月(2)
- 2021年12月(1)
- 2021年11月(5)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(3)
- 2020年3月(3)
- 2020年2月(2)
- 2020年1月(3)
- 2019年12月(3)
- 2019年5月(4)
- 2019年3月(1)
- 2019年1月(3)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(2)
- 2018年8月(1)
- 2018年6月(1)
- 2018年5月(1)
- 2018年4月(7)
- 2018年2月(4)
- 2018年1月(5)
- 2017年12月(2)
- 2017年11月(2)
- 2017年10月(1)
- 2017年9月(5)
- 2017年8月(4)
- 2017年7月(4)
- 2017年6月(3)
- 2017年5月(3)
- 2017年4月(1)
- 2017年3月(8)
- 2017年2月(6)
- 2017年1月(5)
- 2016年12月(6)
- 2016年11月(11)
- 2016年10月(9)
- 2016年9月(6)
- 2016年8月(9)
- 2016年7月(5)
- 2016年6月(8)
- 2016年5月(8)
- 2016年4月(7)
- 2016年3月(5)
- 2016年2月(5)
- 2016年1月(6)
- 2015年12月(6)
- 2015年11月(9)
- 2015年10月(9)
- 2015年9月(4)
- 2015年8月(3)
- 2015年7月(7)
- 2015年6月(3)
- 2015年5月(6)
- 2015年4月(9)
- 2015年3月(9)
- 2015年2月(6)
- 2015年1月(6)
- 2014年12月(17)
- 2014年11月(8)
- 2014年10月(9)
- 2014年9月(7)
- 2014年8月(12)
- 2014年7月(6)
- 2014年6月(6)
- 2014年5月(9)
- 2014年4月(9)
- 2014年3月(7)
- 2014年2月(3)
- 2014年1月(4)