0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux电源管理系统结构介绍

电子工程师 来源:蜗窝科技 作者:蜗窝科技 2020-09-14 16:17 次阅读

1. 前言

在这个世界中,任何系统的运转都需要能量。如树木依靠光能生长,如马儿依靠食物奔跑,如计算机系统依靠电能运行。而 能量的获取是有成本的,因此如果能在保证系统运转的基础上,尽量节省对能量的消耗,就会大大提升该系统的生存竞争力。这方面,大自然已经做的很好了,如植 物的落叶,如动物的冬眠,等等。而在计算机的世界里(这里以运行Linux OS的嵌入式系统为例),称作电源管理(Power Management)。

通俗的讲,电源管理就是:“想让马儿跑,不想马吃草”。不过,从能量守恒的角度,想让马儿跑多快、跑多久,就一定要让它吃相应数量的草。那么我们就退而求其次:“只在需要马儿跑时,才让它吃草”。这就是电源管理的核心思想。那方法呢?可以这样:

方法1:不需要马儿跑时,把它杀掉,这样就不吃草了。需要马儿跑时,再养一匹。

在现实世界中,除了傻瓜,应该没人使用这种方法。因为重新养一匹马需要时间----我哪里等得及,需要草----有可能比养一匹闲马需要的更多。

方法2:不需要马儿跑时,让它睡觉,不能睁眼,不能动,不能叫。

先不讲马儿是否愿意一直睡觉,这种方法只能减少马儿吃草的数量,因为它的心脏还在跳动、血液还在流通,这些也消耗能量。不过还好,需要马儿跑时,应该不需要等太久了。

方法3:不是说心脏跳动、血液流通也消耗能量吗?那把这些也停下来好了,能省多少是多少嘛。

确实是好方法,不多得先去问问兽医,能不能搞定。不过以现在的医学水平,估计实现不了啊。

在计算机世界中,上面的方法是再平常不过的了,而且控制的远比这些精细。因为计算机是人类设计出来的,而马儿却是经上帝之手。不过通过马儿的例子,我们可以总结出电源管理的基本行为:

a, 实时的关闭暂时不使用的部分(可称作“工作状态到非工作状态的转移”)。例如手机在口袋时,屏幕没必要亮。

b, 当需要重新使用那些已关闭部分时(可称作“非工作状态到工作状态的转移”),不能有太长时间的等待,且转移过程不能消耗太多的能量。上面的方法1就是一个反面教材,但在计算机的世界里,情况会好很多。

2. Linux电源管理的组成

电 源管理(Power Management)在Linux Kernel中,是一个比较庞大的子系统,涉及到供电(Power Supply)、充电(Charger)、时钟(Clock)、频率(Frequency)、电压(Voltage)、睡眠/唤醒(Suspend /Resume)等方方面面(如下图),蜗蜗会在Linux电源管理系列文章中,对它们一一讲述。

注1:该图片只是一个示意图,并没有划分软件层次,因此模块之间的关系不一定是真正的关系。

在对图片中的这些组件(也可以称作Framework)进行详细描述之前,先在这里了解一下基本概念。

注 2:Framework是一个中间层的软件,提供软件开发的框架。其目有三:一是屏蔽具体的实现细节,固定对上的接口,这样可以方便上层软件的开发和维 护;二是尽可能抽象公共逻辑,并在Framework内实现,以提高重用性、减少开发量;三是向下层提供一系列的回调函数(callback function),下层软件可能面对差别较大的现实,但只要填充这些回调函数,即可完成所有逻辑,减小了开发的难度。

Power Supply,是一个供用户空间程序监控系统的供电状态(电池供电、USB供电、AC供电等等)的class。通俗的讲,它是一个Battery&Charger驱动的Framework

Clock Framework,Clock驱动的Framework,用于统一管理系统的时钟资源

Regulator Framework,Voltage/Current Regulator驱动的Framework。该驱动用于调节CPU等模块的电压和电流

Dynamic Tick/Clock Event,在传统的Linux Kernel中,系统Tick是固定周期(如10ms)的,因此每隔一个Tick,就会产生一个Timer中断。这会唤醒处于Idle或者Sleep状态 的CPU,而很多时候这种唤醒是没有意义的。因此新的Kernel就提出了Dynamic Tick的概念,Tick不再是周期性的,而是根据系统中定时器的情况,不规律的产生,这样可以减少很多无用的Timer中断

CPU Idle,用于控制CPU Idle状态的Framework

Generic PM,传统意义上的Power Management,如Power Off、Suspend to RAM、Suspend to Disk、Hibernate等

Runtime PM and Wakelock,运行时的Power Management,不再需要用户程序的干涉,由Kernel统一调度,实时的关闭或打开设备,以便在使用性能和省电性能之间找到最佳的平衡
注 3:Runtime PM是Linux Kernel亲生的运行时电源管理机制,Wakelock是由Android提出的机制。这两种机制的目的是一样的,因此只需要支持一种即可。另外,由于 Wakelock机制路子太野了,饱受Linux社区的鄙视,因此我们不会对该机制进行太多的描述。

CPU Freq/Device Freq,用于实现CPU以及Device频率调整的Framework

OPP(Operating Performance Point),是指可以使SOCs或者Devices正常工作的电压和频率组合。内核提供这一个Layer,是为了在众多的电压和频率组合中,筛选出一些相对固定的组合,从而使事情变得更为简单一些

PM QOS,所谓的PM QOS,是指系统在指定的运行状态下(不同电压、频率,不同模式之间切换,等等)的工作质量,包括latency、timeout、throughput三个参数,单位分别为us、us和kb/s。通过QOS参数,可以分析、改善系统的性能

3. Kernel中电源管理相关的Source code汇整

在蜗蜗使用的Linux 3.10.29版本的内核中,电源管理有关的Source code分别位于:

  • kernel/power/ *
  • drivers/power/
  • drivers/base/power/*
  • drivers/cpuidle/*
  • drivers/cpufreq/*
  • drivers/devfreq/*
  • include/linux/power_supply.h
  • include/linux/cpuidle.h
  • include/linux/cpufreq.h
  • include/linux/cpu_pm.h
  • include/linux/device.h
  • include/linux/pm.h
  • include/linux/pm domain.h
  • include/linux/pm runtime.h
  • include/linux/pm wakeup.h
  • include/linux/suspend.h
  • Documentation/power/*.txt
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18298

    浏览量

    222303
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10451

    浏览量

    206584
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4424

    浏览量

    126724
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206745
  • 计算机
    +关注

    关注

    19

    文章

    6652

    浏览量

    84573
收藏 人收藏

    评论

    相关推荐

    Linux内核电源管理的整体架构介绍

    Linux电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对于系统
    发表于 07-05 07:00

    Linux系统结构和路径管理

    1.linux系统结构类似windows中的文件夹,在Linux中叫做目录,linux是一个倒树形结构
    发表于 07-25 07:49

    探究Linux电源管理模型

    Linux电源管理/#more探究Linux电源管理模型,并为Tiny4412的LCD驱动添加
    发表于 10-29 06:04

    Linux目录结构

    嵌入式Linux系统编程学习之一目录结构文章目录嵌入式Linux系统编程学习之一目录结构前言一、
    发表于 11-05 08:00

    LINUX电源管理的相关资料分享

    Linux系统suspend和resumeLinux内核 runtime_PM 框架Linux内核电源管理综述
    发表于 11-15 07:10

    Linux电源管理系统架构和驱动

    驱动篇:inux 电源管理系统架构和驱动(一)Linux 电源管理的全局架构
    发表于 01-03 06:36

    Tina Linux 系统介绍

    。ApplicationsApplications 层主要是实现具体的产品功能及交互逻辑,开发者可以开发实现自己的应用程序,提供系统各种能力给到终端用户。SDK结构Tina Linux SDK 主要由构建
    发表于 03-11 15:05

    基于RK3399的Linux kernel中CPU时钟管理介绍

    1、基于RK3399的Linux kernel中CPU时钟管理介绍绝大多数的电子器件都是由时钟驱动其工作的。而SoC芯片或电路板中的时钟以树状结构呈现,按时钟域进行划分,按照不同的时钟
    发表于 06-21 16:00

    PE和系统电源管理的标准接口介绍

    本文档定义了PE和系统电源管理的标准接口,操作系统供应商可将其用于在Arm设备上以不同权限级别工作的监控软件。在管理
    发表于 08-02 12:21

    嵌入式Linux系统的动态电源管理技术

    嵌入式Linux系统的动态电源管理技术 通过用户层制定策略与内核提供管理功能交互,实时调整电源
    发表于 12-23 10:54 782次阅读
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>系统</b>的动态<b class='flag-5'>电源</b><b class='flag-5'>管理</b>技术

    Linux电源管理系统结构的详细介绍

    了,如植 物的落叶,如动物的冬眠,等等。而在计算机的世界里(这里以运行 Linux OS 的嵌入式系统为例),称作电源管理(Power Management)。通俗的讲,
    发表于 11-23 14:48 2次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b><b class='flag-5'>系统</b><b class='flag-5'>结构</b>的详细<b class='flag-5'>介绍</b>

    LINUX电源管理

    Linux系统suspend和resumeLinux内核 runtime_PM 框架Linux内核电源管理综述
    发表于 11-07 19:36 8次下载
    <b class='flag-5'>LINUX</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b>

    Linux电源管理研究笔记—动态电源管理 DPM

    Linux电源管理研究笔记—动态电源管理 DPM
    发表于 01-07 11:56 6次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b>研究笔记—动态<b class='flag-5'>电源</b><b class='flag-5'>管理</b> DPM

    Linux系统 电源管理的组成

    Linux 电源管理的组成 电源管理(Power Management)在 Linux Kern
    的头像 发表于 07-20 11:11 538次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>系统</b> <b class='flag-5'>电源</b><b class='flag-5'>管理</b>的组成

    Linux中内存管理系统开发必知的3个结构概念

    Linux中内存管理系统使用节点(node)、区域(zone)和页(page)三级结构描述物理内存。
    的头像 发表于 08-28 09:34 578次阅读
    <b class='flag-5'>Linux</b>中内存<b class='flag-5'>管理</b>子<b class='flag-5'>系统</b>开发必知的3个<b class='flag-5'>结构</b>概念