如何调试缓慢休眠

如何调试缓慢休眠

我有几台运行最新版 Ubuntu 20.04 的 PC/笔记本,目前 Ubuntu 存储库默认提供 64 位内核 5.4.0-74-generic。其中一台是相当普通的 PC,配备 Intel i3 CPU,自从我从 18.04 升级到 20.04 后,休眠时间略长于 2 分钟。

我发现的有关调试休眠的各种资源大多涉及唤醒或完全挂起失败,但不包括需要很长时间的挂起到磁盘的情况。唤醒工作正常,只需几秒钟。我如何才能找出休眠需要这么长时间的原因?有没有类似systemd-analyze blame休眠的方法?

到目前为止,我添加了initcall_debug no_console_suspendin GRUB_CMDLINE_LINUX_DEFAULT/etc/default/grub它确实显示了控制台,但是,没有显示任何内容来解释长时间。它显示网络接口的“检测到硬件单元挂起”。但这出现在休眠开始时,我猜这是预期的行为。

我用systemctl hibernate它来启动它。即使在控制台上以 root 身份运行且没有其他登录用户或用户进程,也需要 2 分钟才能关机。

答案1

我的建议:

  1. 决定要提问 @ askubuntu.com并认真对待;)收集数据,用最少的设置重现问题,并具体化。

  2. 确保有足够的交换空间。该命令free给出了 RAM(“Mem”)和交换空间的数量。交换空间的总量应大于总 RAM。我意识到我在某些时候添加了 RAM,但没有增加交换分区的大小。编辑(2021-06-07):大小差异约为 1GB。增加大小后,休眠速度不断加快,但我仍然认为这是由于保存交换分区的 SSD 写入速度发生变化而导致的。(另请参阅下一点。)

  3. 冬眠应该多快?本质上,在挂起到磁盘期间,所有 RAM 都会写入磁盘。RAM 的数量和磁盘的写入速度决定了所需的时间。我查找了我的交换分区,并使用检查了将其清零需要多长时间dd if=/dev/zerodd报告的速度为 108 MB/s。写入 7 GB 需要约 65 秒。我的 PC 有 8 GB。因此,我应该预计休眠至少需要一分钟。

  4. 尝试拆件调试系统:卸下不需要的硬件。全新启动后立即休眠,无论是否先登录。

  5. 添加initcall_debug no_console_suspend按照问题所述进入内核命令行。

目前,我猜测我经历缓慢休眠的原因是:我添加了 RAM(因此休眠需要更长时间),我忘记增加交换空间以匹配添加的 RAM(我有 7G 交换但 8G RAM),并且 SSD 的写入速度随着时间的推移而下降(至少降低了 2 倍)。

进一步推荐阅读:

相关内容