Linux电源管理2

Linux电源管理2(基于Linux6.6)---Generic PM介绍


一、概述

在嵌入式Linux普及之前的PC或服务器时代,由于人们主要关注计算机的计算能力和处理性能,对电源消耗并不特别关心,因此发展出了这种粗放的、静态的、被动的电源管理机制。

1.1、Linux Generic Power Management 的表现形式

在Linux操作系统中,与Generic PM相关的操作通常包括系统关机、重启等操作的界面,以及电源管理属性的设置。电源管理属性可以配置系统在不同供电模式下(如AC Power、Battery等)处于Inactive状态多久后,系统关闭Display或进入Sleep状态。

1.2、主要概念与功能

  1. Shutdown:即关机,意味着不再使用计算机。
  2. Restart:即重启系统,重启过程中不再使用计算机。
  3. Hibernate:可翻译为冬眠。在计算机界,设计师们借用了动物冬眠的概念,在不需要使用计算机时,将它当前的所有现场(执行的程序、显示器显示的图像、正在播放的声音等)保存到一些断电不会丢失的存储器中(如硬盘中),然后将计算机关闭。重新开启后,系统会从存储器中将关闭前的现场读取出来并恢复,此时从使用者的角度看,计算机就像没有关闭过一样。
  4. Sleep:即睡眠。与Hibernate相比,Sleep不需要将现场保存到断电不丢失的存储器中,而是将现场保存在内存中,因此唤醒速度更快。但代价是内存需要保持供电,从而消耗一定的能量。
  5. Auto Sleep:可以设置系统处于Inactive状态多久后自动进入Sleep状态,以避免无谓的能量消耗。
  6. Auto put display to Sleep:原理与Auto Sleep类似,只是操作的对象是显示器等显示设备。

二、 Generic Power Management 架构

2.1、Generic Power Management框图

在介绍完Generic PM的基本概念后,来看一下它在Linux内核中的整体实现,并抽象出简单的软件架构,以便再后续的文章中,对Generic PM的主要组成部分进行更为细致的分析。具体如下:

根据上面的描述可知,Generic PM主要处理关机、重启、冬眠(Hibernate)、睡眠(Sleep,在Kernel中也称作Suspend)。

2.2、Generic Power Management 架构

Linux 的电源管理架构可以分为以下几个关键组件和层次:

电源管理核心(PM Core)

电源管理核心是 Linux 中所有电源管理操作的基础,它提供了一个统一的框架,用于管理系统电源状态以及各个设备的电源状态。

  • 电源管理框架(PM Framework):这是电源管理的核心组件,提供了一组接口和机制,使得内核能够管理设备的电源状态。
  • PM 事件和回调:Linux 内核支持通过事件驱动的方式处理电源管理。例如,设备驱动可以注册回调函数,响应系统进入休眠或恢复时的事件。
  • 睡眠模式(Sleep States)
    • 休眠(Suspend):将系统的一部分硬件(如 CPU)置于低功耗模式,但仍然保持内存内容。
    • 休眠到硬盘(Hibernate):将系统状态保存到硬盘,然后关机。
    • 关机(Power Off):彻底关闭系统。

设备电源管理(Device Power Management)

设备电源管理在内核层面提供了对设备状态的控制。每个设备都可以有自己的电源状态,这些状态通常包括:

  • D0(设备工作状态):设备正常工作。
  • D1, D2(设备低功耗状态):设备进入较低功耗状态,但仍可快速恢复。
  • D3(设备完全关闭状态):设备不再供电,不能响应操作。

设备电源管理通过设备驱动程序中的接口进行控制,每个设备驱动都可以声明该设备是否支持电源管理,以及如何管理该设备的电源。

ACPI(高级配置和电源管理接口)

ACPI 是操作系统与硬件进行通信的标准,它提供了对系统电源管理的高级控制。ACPI 主要用于现代计算机的电源管理和硬件配置。

  • ACPI 电源管理:通过 ACPI 表(如 DSDTSSDT)和方法,操作系统可以控制系统的电源状态(例如,系统休眠或关机)。
  • ACPI 表:定义了系统硬件的电源状态、热插拔支持等。操作系统通过解析这些表来了解如何管理硬件电源。
  • ACPI 事件:ACPI 也负责触发与电源管理相关的硬件事件(例如,电池电量低、温度过高等)。

CPU 电源管理

在 CPU 电源管理方面,Linux 提供了对多种处理器节能技术的支持,特别是支持 CPU 动态频率和电压调节(DVFS)技术。CPU 电源管理主要有以下几个方面:

  • 动态电压频率调整(DVFS):根据 CPU 的负载情况动态调整其工作频率和电压,以降低功耗。
  • CPU 空闲管理:当 CPU 空闲时,系统会使用不同的空闲状态来降低功耗,常见的空闲状态包括:
    • C0:CPU 处于工作状态。
    • C1、C2、C3(深度休眠状态):CPU 进入低功耗状态。

内存管理与电源管理

内存的电源管理主要涉及在系统处于低功耗模式时如何保留内存内容,常见的技术包括:

  • 休眠(Suspend to RAM):将系统的内存内容保留在 RAM 中,同时将大部分其他硬件设备置于低功耗状态。
  • 休眠到硬盘(Hibernate):将内存内容保存到硬盘,关闭所有硬件,然后在需要时从硬盘恢复系统状态。

电池管理

电池管理是笔记本电脑等便携设备中至关重要的部分。Linux 提供了一些工具和驱动来管理电池的充电和放电状态:

  • ACPI 电池驱动:提供了接口来获取电池的状态、充电情况、电池剩余时间等信息。
  • TLP(TLP Power Management):提供了电池优化策略,帮助延长电池使用寿命。

2.3、电源管理接口与用户空间

在用户空间,Linux 提供了多个工具和接口来管理电源状态:

  • /sys/class/power_supply:提供了电池和电源供应的信息,例如电池电量、电压、健康状态等。
  • /sys/devices/system/cpu/cpu*/cpufreq:通过这些接口,用户可以管理 CPU 的频率和功耗模式。
  • pm-utils:这是一个用户空间的工具集,用于简化电源管理操作,如挂起、恢复等。
  • systemd:提供了对系统休眠、挂起等功能的管理,可以通过 systemd 配置和控制系统的电源管理行为。

2.4、Power Management 策略

Linux 支持多种电源管理策略:

  • 自动电源管理:内核根据系统负载和硬件设备状态自动选择合适的电源管理策略。
  • 用户配置:用户可以通过工具(如 cpupowertlp)手动配置电源策略。
  • 动态调节:系统根据运行时的条件(如 CPU 温度、电池电量等)动态调整电源管理策略。

2.5、电源管理驱动模型

设备驱动程序通常会实现特定的电源管理功能。对于每个设备,驱动需要注册回调函数,这些回调函数在设备电源状态变化时被调用。常见的回调函数包括:

  • suspend:当系统进入休眠状态时,设备需要执行此回调来关闭或降低功耗。
  • resume:当系统恢复时,设备需要执行此回调来恢复正常操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值