从休眠状态恢复时恢复内存/交换页面状态

从休眠状态恢复时恢复内存/交换页面状态

我是 Linux 休眠支持的忠实粉丝,它在我尝试过的所有(诚然稍旧的)硬件上运行得非常好。与完全关机和开机相比,我更喜欢它。

不过,关于休眠的一件事困扰了我一段时间:休眠的系统在恢复后总是反应迟缓且无响应。刚通电后不是很快。旧硬件会加剧这种情况,但在较新的系统上也会发生稍微显着的程度。

这似乎是因为内核只将[内核级]操作所必需的页面交换回工作内存,恢复内核的基本工作状态,并让用户空间在各个进程将它们需要的页面交换回工作内存时只搅动一段时间RAM 在他们自己的蒸汽下。

这在实践中效果不太好,因为系统最初的功能就好像某个大型进程迫使所有内容完全交换到磁盘。屏幕上的任何内容都会很快换回,但切换到另一个进程时,您将等待几秒钟也交换回内存。在较旧的硬件上 - 我的例子是 Core 2 ThinkPad T60 - “几秒钟”甚至可能是几分钟。

经过一番思考后,我最近意识到这个问题有一个非常简单的解决方案:记下标记磁盘和 RAM 中页面的标签,然后在恢复时恢复这个确切的状态。当然,恢复过程可能会多花 10 秒左右,但我不在乎 - 我会拥有一个快速的系统。

我想知道是否有任何晦涩的内核编译选项可以启用此类功能,或者我可以设置一些配置来近似这种行为?

笔记:我不认为swapoff -a; swapon -a有可行的解决方案;当挂起的用户空间重新启动时,所有加载的进程都在尝试执行代码并努力将自己交换回 RAM,从而导致大量磁盘 I/O。尝试破坏交换区域只会加剧飓风,并且实际上比内核恢复需要更长的时间才能完成全部恢复用户空间之前的 RAM。

相关内容