Linux 系统休眠状态 System Sleep Status

系统休眠状态 System Sleep Status

简介

Linux内核包含多种休眠状态,目前主要是4种:

状态ACPI等级动作进入方式
Suspend-to-idleS0冻结用户空间程序
停止时间管理
IO设为低功耗状态
echo freeze > /sys/power/state

echo s2idle > /sys/power/mem_state
echo mem > /sys/power/state
StandbyS1包含Suspend-to-idle所有动作
非引导cpu下线
echo standby > /sys/power/state

echo shallow > /sys/power/mem_state
echo mem > /sys/power/state
Suspend-to-RAMS3包含Standby所有动作
内存外所有设备进入低功耗状态
内存自动刷新
echo deep > /sys/power/mem_state
echo mem > /sys/power/state
HibernationS4创建内存快照保存至disk
内核停止所有系统活动
唤醒设备外所有设备进入低功耗状态
echo disk > /sys/power/state

状态描述

Suspend-to-Idel

也称为Suspend-to-Idel,纯软件的、轻量级的挂起,简称S2I或S2Idle。通过冻结用户空间操作、暂停timekeeping并将IO设备设为低功耗状态来降低能耗。这样做cpu可以在挂起时进入更深层次的闲置。

系统会由于内(In-bind)中断而被唤醒,所以理论上所有可产生内中断的设备都可以作为S2I的唤醒设备。

此状态可以在不支持待机(standby)或suspend-to-RAM的平台上使用,也可以与任何更深的系统挂起一起使用,从而减少恢复时延。如果设置了CONFIG_SUSPEND,则始终支持该选项。

Standby

称为待机,提供适度并实际的节能。没有工作状态丢失。

除了S2I中的方法,其还会使得非boot的cpu下线,同时使得所有低级系统功能挂起。这样做能更节能,但恢复时间更长。

相较于S2I,可以唤醒系统的设备更少,并且可能需要依赖平台设置来进行唤醒。

如果CPNFIG_SUSPEND支持,且平台向内核提供了对该选项的支持,则支持进入待机状态。

ACPI系统上,此状态映射到S1状态。

Suspend-to-RAM

将系统状态保存至RAM,简称STR或S2RAM。提供显著节能,除了内存外所有资源处于低功耗状态。内存应设置为自动刷新从而保存内容。standby中所有操作也会执行。在ACPI系统上,内核将控制转移给平台固件BIOS,作为S2RAM的最后一步。

设备和cpu状态保存到内存中,大多情况下所有外设总线都会断电。设备应该具有转换为开启的能力。

ACPI系统上S2RAM需要平台固件提供最小引导代码来恢复系统。

可以将系统从S2RAM唤醒的设备更少,并且需要平台来实现唤醒功能。

需要CONFIG_SUSPEND和平台支持,在ACPI系统上映射为S3。

Hibernation

全称休眠,也被称为Suspend-to-Disk或STD,提供更强的节能功能。在没有底层平台支持的情况下也能使用。但是需要底层代码来恢复系统,从而为底层CPU架构提供支持。

休眠与挂起有很大区别,需要三次系统状态改变才能进入休眠,需要两次系统状态改变才能恢复。

首先,当触发休眠时,内核停止所有系统活动,并创建内存快照映像,从而写入持久存储设备(如Disk)。接下来,系统进入某种状态,保存快照映像。最后系统进入低功耗状态,除了少量的唤醒设备外,几乎所有硬件组件(包括内存)都断电。

写入快照映像后,系统进入特殊的低功耗状态,如ACPI的S4状态,或者干脆关闭电源。关闭电源意味着最小的功耗。进入特殊功耗状态允许额外的唤醒方式,如笔记本开盖或者键盘按下。

唤醒后,控制转移到运行加载引导程序的固件,内核新实例会在持久存储设备(如Disk)中查找休眠映像,如果找到,则加载到内存中。接下来,停止系统中的所有活动,恢复内核用映像内容覆盖自身,并跳转到存储在映像中的原始内核中的一个特殊的区域(称为“映像内核”),这是需要特定于体系结构的低级代码的地方。最后,映像内核将系统恢复到休眠前状态,并允许用户空间再次运行。

如果设置了CONFIG_HIBERNATION内核配置选项,则支持休眠。但是,只有当对给定CPU体系结构的支持包括用于系统恢复的低级代码时,才能设置此选项。

sysfs

电源子系统提供了统一的sysfs接口,位于/sys/power中,包含下列属性:

  1. state
    包含一串系统支持的睡眠状态名称列表,通过向此节点写入睡眠状态会导致系统向相应状态转换。
    可能包含disk, freeze, standby和mem。

    输入值系统进入状态ACPI状态命令
    diskhibernationS4echo disk > /sys/power/state
    freezesuspend-to-idleS0echo freeze > /sys/power/state
    standbystandbyS1echo standby > /sys/power/state
    mem由mem_sleep确定--

不支持上述睡眠状态,则节点不存在。

  1. mem_state
    该文件包含一组系统支持的挂起变量,允许用户孔家选择变量与上面的mem关联。
    可能存在的名称:s2idle,shallow, deep,分别对应上面的suspend-to-idle, standby和suspend-to-RAM。

    输入值系统进入状态ACPI状态命令
    s2idlesuspend-to-idleS0echo s2idle > /sys/power/mem_state
    echo mem > /sys/power/state
    shallowstandbyS1echo shallow > /sys/power/mem_state
    echo mem > /sys/power/state
    deepsuspend-to-RAMS3echo deep > /sys/power/mem_state
    echo mem > /sys/power/state

state中与当前mem关联的挂起状态将以方括号包裹。

  1. disk
    此节点控制休眠模式,其告知内核创建休眠镜像之后做什么。

    1. platform
      将系统置于特殊低功耗状态(如ACPI S4)来提供额外的唤醒选项,并允许平台固件采用简化的唤醒路径。
      仅仅在平台提供相应的机制时可用,即创建休眠镜像后再进入睡眠的机制,比如ACPI提供这样的机制。
    2. shutdown
      关闭系统。
    3. reboot
      重启系统,大多用于诊断功能使用。
    4. suspend
      混合系统挂起。将系统挂起至mem_sleep描述的睡眠状态。如果系统从此状态醒来,则丢弃休眠镜像并继续。否则使用镜像使用镜像恢复系统状态。
      仅系统挂起支持时可执行。
    5. test_resume
      诊断操作。加载镜像,就像系统刚刚从休眠中唤醒,并且正在运行的内核实例为恢复实例,随后就是全系统唤醒。

    将上述任意内容填入此文件将导致启动相关休眠流程。当前选择的流程以方框包裹,这表示相关流程将在disk写入state文件中后(触发了休眠流程),创建并保存镜像之后执行此流程。

  2. image_size
    一个非负整数的字符串,控制休眠镜像的上限,以字节为单位。
    休眠内核尽可能以此大小来降低存储空间,如果不成功,则会以实际为准。
    0表示最小镜像,默认情况下设置为可用RAM大小的2/5。

  3. pm_trace
    控制PM trace机制,保存RTC内存中通过reboot产生的最近的挂起和恢复事件点。帮助debug在系统挂起或恢复期间产生的硬件死锁(hard lock)或reboot。
    默认情况下值为0,如果值为1,挂起/恢复事件将会保存在RTC内存中,覆写掉原有的RTC信息,从而在恢复后寻找导致崩溃的信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值