我正在使用内核 4.4.0-116-generic(但早期版本也是如此)和 16 GB RAM 运行 XUbuntu 16.04。我使用的是“传统”硬盘驱动器(无 SSD),而我的 swappiness 为 0(RAM 很少满)。
我在休眠时遇到了以下情况:休眠正常需要不到 2 分钟,但从它恢复需要很多很多时间,直到应用程序响应(今天需要 10 多分钟才能到达 light-locker 提示)。
我不认为这是可用的(从休眠状态恢复比启动到新会话并重新打开程序需要更多时间)。
我怎样才能提高性能?我是唯一遇到这些问题的人吗?
诚然,现在的内存使用量是 8.8 GB,但让我烦恼的是休眠和恢复时间之间的差异。我从其他问题中了解到,这可能是因为在休眠期间,内核冻结了所有进程并将 RAM 整块转储到交换,而在恢复时它只是让进程在交换中请求它们的页面。
这是一个有效的解释吗?如果是这样,为什么要这样做,因为从硬盘驱动器读取大块比随机访问更快?我可以将休眠配置为不以这种方式进行吗?问题“在从休眠状态恢复时恢复内存中/交换页面状态”似乎相关,但我不知道足够多的页面来真正理解它们是否在做什么(“注意标记哪些页面在磁盘上和在RAM,然后在恢复时恢复这个确切的状态”)很有用,我也不知道该怎么做。
我认为您的经历对于冬眠也很常见。磁盘挂起,尤其是在使用旋转磁盘时。
从内核文档中,提到了一种解决方法,它似乎与您发布的链接的想法有关。如果我做对了,这只会立即清空交换,而不是逐步恢复。但它仍然必须读取所有使用的交换,并且可能需要一些时间。
您可能想要测试的是suspend-to-ram或suspend-to-both ,这在Arch Wiki中有很好的解释。基本上:
根据您的环境,如何启动挂起/休眠方法,您可以配置它,例如在 XFCE 中使用xfce4-power-manager GUI。
在阅读了此线程中共享的有用链接并尝试了一些事情之后,以下是对我有用的方法。
默认
/sys/power/image_size
设置为 RAM 的 2/5。我的系统 RAM 为 12 Gb,交换文件大小为 8 Gb。在这种情况下/sys/power/image_size
,大约为 5 Gb。休眠时,如果内存使用量超过此限制,系统需要很长时间才能恢复。增加到
/sys/power/image_size
8 Gb(交换内存大小)后,恢复时间大大改善!内核文档说它可以安全地增加
/sys/power/image_size
. 系统 RAM 的 2/5 的默认限制看起来太低了。