From: Luigi Semenzato <semenzato@google.com>
To: linux-mm@kvack.org
Cc: Luigi Semenzato <semenzato@google.com>
Subject: [PATCH 1/2] Documentation: clarify limitations of hibernation
Date: Fri, 27 Dec 2019 13:34:38 -0800 [thread overview]
Message-ID: <20191227213439.139123-2-semenzato@google.com> (raw)
In-Reply-To: <20191227213439.139123-1-semenzato@google.com>
Entering hibernation (suspend-to-disk) will fail if the kernel
cannot allocate enough memory to create a snapshot of all pages
in use; i.e., if memory in use is over 1/2 of total RAM. This
patch makes this limitation clearer in the documentation. Without
it, users may assume that hibernation can replace suspend-to-RAM
when in fact its functionality is more limited.
Signed-off-by: Luigi Semenzato <semenzato@google.com>
---
Documentation/admin-guide/pm/sleep-states.rst | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/Documentation/admin-guide/pm/sleep-states.rst b/Documentation/admin-guide/pm/sleep-states.rst
index cd3a28cb81f4..fd0072eb8c03 100644
--- a/Documentation/admin-guide/pm/sleep-states.rst
+++ b/Documentation/admin-guide/pm/sleep-states.rst
@@ -112,7 +112,9 @@ Hibernation
This state (also referred to as Suspend-to-Disk or STD) offers the greatest
energy savings and can be used even in the absence of low-level platform support
for system suspend. However, it requires some low-level code for resuming the
-system to be present for the underlying CPU architecture.
+system to be present for the underlying CPU architecture. Additionally, the
+current implementation can enter the hibernation state only when memory
+pressure is low (see "Limitations" below).
Hibernation is significantly different from any of the system suspend variants.
It takes three system state changes to put it into hibernation and two system
@@ -149,6 +151,20 @@ Hibernation is supported if the :c:macro:`CONFIG_HIBERNATION` kernel
configuration option is set. However, this option can only be set if support
for the given CPU architecture includes the low-level code for system resume.
+Limitations of Hibernation
+==========================
+
+When entering hibernation, the kernel tries to allocate a chunk of memory large
+enough to contain a copy of all pages in use, to use it for the system
+snapshot. If the allocation fails, the system cannot hibernate and the
+operation fails with ENOMEM. This will happen, for instance, when the total
+amount of anonymous pages (process data) exceeds 1/2 of total RAM.
+
+One possible workaround (besides terminating enough processes) is to force
+excess anonymous pages out to swap before hibernating. This can be achieved
+with memcgroups, by lowering memory usage limits with ``echo <new limit> >
+/dev/cgroup/memory/<group>/memory.mem.usage_in_bytes``. However, the latter
+operation is not guaranteed to succeed.
Basic ``sysfs`` Interfaces for System Suspend and Hibernation
=============================================================
--
2.24.1.735.g03f4e72817-goog
next prev parent reply other threads:[~2019-12-27 21:34 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-27 21:34 [PATCH 0/2] clarify limitations of hibernation Luigi Semenzato
2019-12-27 21:34 ` Luigi Semenzato [this message]
2019-12-28 0:23 ` [PATCH 1/2] Documentation: " Chris Down
2019-12-28 0:25 ` Chris Down
2020-01-02 19:29 ` Luigi Semenzato
2019-12-27 21:34 ` [PATCH 2/2] pm: add more logging on hibernation failure Luigi Semenzato
-- strict thread matches above, loose matches on Subject: below --
2019-12-26 22:02 [PATCH 0/2] clarify limitations of hibernation Luigi Semenzato
2019-12-26 22:02 ` [PATCH 1/2] Documentation: " Luigi Semenzato
2020-01-06 12:53 ` Michal Hocko
2020-01-06 19:08 ` Luigi Semenzato
2020-01-08 11:49 ` Michal Hocko
2020-01-24 16:37 ` Luigi Semenzato
2020-01-27 14:16 ` Michal Hocko
2020-01-27 16:13 ` Luigi Semenzato
2020-01-27 16:28 ` Rafael J. Wysocki
2020-01-27 17:21 ` Luigi Semenzato
2020-01-30 20:50 ` Rafael J. Wysocki
2020-01-30 21:10 ` Luigi Semenzato
2020-01-30 21:29 ` Rafael J. Wysocki
2020-01-30 21:36 ` Luigi Semenzato
2020-01-27 16:14 ` Rafael J. Wysocki
2020-01-07 10:04 ` Rafael J. Wysocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191227213439.139123-2-semenzato@google.com \
--to=semenzato@google.com \
--cc=linux-mm@kvack.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).