ubuntu 中的 suspend 究竟是如何工作的?

aze*_*ati 3 suspend power-management hard-drive

我想知道在 Ubuntu 中挂起究竟是如何进行的,

  1. 是否有任何硬件完全断电或它们的过程只是最小化?
  2. 除了屏幕,还有哪些部分被搁置或断电?
  3. 如果在暂停时有任何功耗,我怎么知道它是多少以及我的笔记本电脑在电池耗尽之前能够恢复多久?
  4. 硬盘究竟会发生什么,在不损坏硬盘的情况下随身携带笔记本电脑是否安全?

Col*_*ing 8

当机器进入挂起状态时,内核会冻结(停止)用户空间程序和内核线程。然后内核将遍历所有设备并调用每个驱动程序上的挂起方法。每个驱动程序都知道如何将硬件置于深度睡眠状态(甚至关闭电源)(相反,在恢复发生时将其恢复到正常运行状态)。此时硬件应该处于低功耗状态(因此硬盘将被关闭)。

内核唤醒代码地址写入 ACPI FADT 表指定的地址,然后写入 x86 电源管理控制寄存器;这有效地关闭了处理器,但将内存保持在自刷新模式。

当恢复发生时,CPU 重新启动,在固件 (BIOS/UEFI) 中的一小段时间后跳转到内核提供的唤醒地址,内核跳回保护模式并恢复其状态。然后它遍历驱动程序,这些驱动程序恢复所有设备。然后冻结的进程被解冻,内核返回到用户空间。

所以回答你的问题:

1 和 2:设备驱动程序尝试将设备置于最深睡眠状态,有些设备可以断电,有些可能只是处于深度睡眠状态,消耗很少的电量。这取决于硬件和设备驱动程序。

内存正在刷新,它永远不会断电。CPU 已有效停止,但实际完全关闭电源的数量取决于 CPU 型号。

  1. 确定正在使用多少功率的一种方法是使用固件测试套件 s3power 测试;我建议让机器进入深度睡眠 30 分钟并测量电池电量消耗以估计挂起期间的电量使用情况:

移除交流电源,然后运行:

sudo apt-get install fwts
sudo fwts s3power --s3power-sleep-delay=1800
Run Code Online (Sandbox Code Playgroud)

..等待 1800 秒(30 分钟),它应该重新开机并给出估计值。

  1. 硬盘断电,可安全携带。