我已经查看了大量有关计算机睡眠、挂起、休眠模式的网络内容,但没有看到任何关于这个看似简单的问题的讨论:
如果有的话,两者之间有什么区别?
- 只需离开一台 Linux 计算机,运行 Ubuntu 22.4 LTS,但它实际上可以是任何发行版和版本,并且
- 明确调用暂停命令,无论是从命令行还是 GUI?
这两种情况都应该使您能够稍后返回到计算机,单击鼠标或键入一个键并“唤醒它”。
如果有区别,区别是什么?如果没有区别,为什么需要 suspend 命令?
顺便问一下,“走开”有名字吗?“睡觉”就是这个意思吗?
我发现这些术语被随意使用,而没有对其各自含义进行任何精确定义。
更新:我为什么要问这个问题?
我发现的与计算机睡眠、挂起或休眠的不同形式相关的大多数资料都假设询问者主要关心的是功耗。这不是我关心的问题。
我担心的是,当我离开计算机时,我是否可以安全地返回到它而不需要重新启动。
我担心的是,我从联想购买了一台相当昂贵的笔记本电脑,配有 nVidia 显卡(这里不涉及技术细节),我无法离开它并可靠地假设当我返回并按下键或单击鼠标时系统会唤醒。有时它有效,有时则无效。似乎明确调用暂停功能更可靠一些,不会经常崩溃,但它不是 100% 可靠,可能 90%。在我之前的电脑上,一台 10 年前的联想笔记本电脑,我不必担心任何这些。
更新 2:更正原文,提到“摆脱 UEFI 下的安全启动”而不是“摆脱 UEFI”作为实现休眠的先决条件。
休眠似乎是实现我想要的功能的最可靠方法,但目前我的电脑无法使用休眠功能,因为我的电脑使用 UEFI 下的安全启动。因此,一个选项是禁用安全启动。我不太情愿这么做,但这似乎是我必须采取的办法。
我主要关心的是可靠性,而不是功耗。
Linux 上的“挂起”具有相当明确的含义,尤其是在 x86_64 平台上(但不限于此)。当人们说“挂起”时,他们的意思是“挂起到 RAM”;只有在硬件不支持此功能的平台上,人们才会考虑“挂起到空闲状态”。我不知道目前有哪些 Linux 平台不支持挂起到 RAM;它们可能存在,但对于您的 PC,“挂起”的意思是“挂起到 RAM”,这一点毋庸置疑,如下所述。
这意味着您停止所有 CPU 核心,将所有设备的状态保存到 RAM,使所有设备进入可以进入睡眠状态并在稍后持续唤醒的状态,真正使它们进入睡眠状态,最后将所有 CPU 核心的寄存器置于明确定义的状态,然后将每个 CPU 核心置于特定的睡眠状态。
在睡眠状态下,CPU 实际上是停止的;只有内存控制器继续运行以刷新 RAM,这样您存储到 RAM 的状态就不会丢失。只有唤醒所需的单元(例如 USB 控制器,这样您就可以按键盘上的按钮来唤醒)才会通电并自主运行。硬盘和 SSD 之类的东西实际上被告知要关闭电源。
(这些睡眠状态在 x86 和您在现实中可能遇到的大多数其他平台上都是定义明确的。进入这些状态是一个有据可查的过程,您必须做一些特定的事情才能唤醒。这完全不是未定义的!)
如果您只是离开,至少有一个 CPU 核心会继续运行,而且即使正在运行的 Linux 系统没有定期执行的操作(每秒更新显示 60 次、向声卡提供样本、更新计数器、维护存储介质,并且通常在后台执行很多操作),它也不会完全关闭。
因此,当您离开时,电源仍然可以为您的整个 CPU 和所有设备供电,并随时准备突然提供大量电力。
挂起模式节省大量电量的另一方面是,您实际上停止了 CPU 的运行!不再运行任何软件。如果您走开,有人在聊天中给您发消息,而您打开了聊天程序,那么您会听到声音。在挂起模式下,这些都不可能发生,因为不再有任何东西在与任何东西“对话”。
停止调度用户空间进程,完成将内容写入存储,使硬件组件进入可关闭状态,将其关闭,将 CPU 状态保存到 RAM,最后将 CPU 核心置于正确的睡眠模式。(您会发现,诸如此类的事情可以
systemctl suspend
做很多事情让您的计算机做好充分准备。)当然,在没有驱动程序和硬件错误的情况下,这是可靠的。实际上,在过去大约 13 年左右的时间里,在得到良好支持的笔记本电脑和台式机硬件上,这并不是一个问题。但也有一些令人讨厌的例外——比如显卡的专有内核驱动程序。但情况已经好转了!所以,总的来说,是的,你可以期待这一点。
似乎你受到了打击,坦率地说,nvidia 应该为此负责,它通过向 Linux 用户销售 GPU 赚了数十亿美元(主要用于机器学习目的,相比之下,游戏玩家/笔记本电脑 GPU 市场相对较小)。
事实并非如此:休眠在 UEFI 机器上工作得很好。事实上,UEFI 引导加载程序中定义更好的引导状态比 BIOS 的混乱更易于取消休眠。此外,如果休眠只在“BIOS”机器上工作,它就根本不存在了。如今,“BIOS”是由实现 UEFI 接口的相同固件模拟的。所以,无论是什么阻止你休眠:都不是你正在 UEFI 机器上运行的事实。
根本不是一个选项,这就是启动你的计算机的方法:)
主要区别在于能耗。以下任何一点可能适用于或不适用于您的系统:
硬盘休眠:传统硬盘(带有旋转磁盘的硬盘)在正常运行期间使用能量来保持盘片旋转。有些硬盘具有节能电子装置,这使得它们在一段时间不使用后停止旋转,但有些硬盘没有,操作系统会在挂起时关闭它们。
CPU 时钟周期:尤其是移动版 CPU 可以使用各种各样的时钟速率。根据经验,CPU 的能耗与其时钟速率的平方相关(这就是为什么现代计算机需要所有复杂的热传递机制 - 它们的时钟速率高得离谱),因此当时钟速率降低到接近零时,可以节省大量能源。
关闭显示器:笔记本电脑/笔记本通常使用约 30% 的电量来为其内部显示器供电(如果使用的话)。关闭它对于这些移动计算机尤其有用,可以延长电池使用寿命。
关闭非必要硬件:有些设备在挂起状态下是不需要的,例如 WLAN 适配器。关闭这些非必要设备还可以节省能源并延长电池使用时间。基本上,在挂起模式下,您只需要 RAM(必须不断刷新以保存其内容)和芯片组的某些部分,也许是 GPU 本地内存的内容 - 大多数其他设备都可以关闭,并在恢复正常运行后快速打开。
问题重新表述后更新
我主要在 POWER 和 System-Z (又名:大型机) 系统上工作,因此我对 PC 硬件不太了解,所以我只能给你一般性的指示:
挂起模式失败的典型问题是图形硬件的重新初始化。许多笔记本电脑的芯片组中集成了 GPU,当再次打开电源时,恢复 GPU 寄存器/状态并不像恢复 CPU 状态那么容易。
首先,确定挂起返回失败后的具体状态:系统完全关闭、GPU 关闭但系统启动、系统和 GPU 启动但 X 关闭等。尝试执行
ping
此操作和/或ssh
执行此操作。如果您可以连接到它:检查
/var/log/kern.log
和/var/log/Xorg.0.log
,可能会有一些有用的信息。您也可以尝试连接串行终端(通过 USB),也许系统已启动,但网络硬件与图形一样关闭。
关于休眠(又称挂起到磁盘)有一点要说:这在许多发行版中经常被禁用,如果要使用它,必须明确重新启用。我没有使用任何 Ubuntu,但这里有一些可能有帮助的链接。