From: Luigi Semenzato <semenzato@google.com>
To: Chris Murphy <lists@colorremedies.com>
Cc: Linux Memory Management List <linux-mm@kvack.org>,
Linux PM <linux-pm@vger.kernel.org>
Subject: Re: is hibernation usable?
Date: Thu, 20 Feb 2020 11:44:48 -0800 [thread overview]
Message-ID: <CAA25o9Q=36fiYHtbpcPPmGEPnORm2ZM7MfqRcsvNxsO0Sys9ng@mail.gmail.com> (raw)
In-Reply-To: <CAJCQCtScZg1CP2WTDoOy4-urPbvP_5Hw0H-AKTwHugN9YhdxLg@mail.gmail.com>
On Thu, Feb 20, 2020 at 11:09 AM Chris Murphy <lists@colorremedies.com> wrote:
>
> On Thu, Feb 20, 2020 at 10:16 AM Luigi Semenzato <semenzato@google.com> wrote:
> >
> > I think this is the right group for the memory issues.
> >
> > I suspect that the problem with failed allocations (ENOMEM) boils down
> > to the unreliability of the page allocator. In my experience, under
> > pressure (i.e. pages must be swapped out to be reclaimed) allocations
> > can fail even when in theory they should succeed. (I wish I were
> > wrong and that someone would convincingly correct me.)
>
> What is vm.swappiness set to on your system? A fellow Fedora
> contributor who has consistently reproduced what you describe, has
> discovered he has vm.swappiness=0, and even if it's set to 1, the
> problem no longer happens. And this is not a documented consequence of
> using a value of 0.
I am using the default value of 60.
A zero value should cause all file pages to be discarded before any
anonymous pages are swapped. I wonder if the fellow Fedora
contributor's workload has a lot of file pages, so that discarding
them is enough for the image allocator to succeed. In that case "sync;
echo 1 > /proc/sys/vm/drop_caches" would be a better way of achieving
the same result. (By the way, in my experiments I do that just before
hibernating.)
> > I have a workaround in which I use memcgroups to free pages before
> > starting hibernation. The cgroup request "echo $limit >
> > .../memory.limit_in_bytes" blocks until memory usage in the chosen
> > cgroup is below $limit. However, I have seen this request fail even
> > when there is extra available swap space.
> >
> > The callback for the operation is mem_cgroup_resize_limit() (BTW I am
> > looking at kernel version 4.3.5) and that code has a loop where
> > try_to_free_pages() is called up to retry_count, which is at least 5.
> > Why 5? One suspects that the writer of that code must have also
> > realized that the page freeing request is unreliable and it's worth
> > trying multiple times.
> >
> > So you could try something similar. I don't know if there are
> > interfaces to try_to_free_pages() other than those in cgroups. If
> > not, and you aren't using cgroups, one way might be to start several
> > memory-eating processes (such as "dd if=/dev/zero bs=1G count=1 |
> > sleep infinity") and monitor allocation, then when they use more than
> > 50% of RAM kill them and immediately hibernate before the freed pages
> > are reused. If you can build your custom kernel, maybe it's worth
> > adding a sysfs entry to invoke try_to_free_pages(). You could also
> > change the hibernation code to do that, but having the user-level hook
> > may be more flexible.
>
> Fedora 31+ now uses cgroupsv2. In any case, my use case is making sure
> this works correctly, sanely, with mainline kernels because Fedora
> doesn't do custom things with the kernel.
>
>
>
> --
> Chris Murphy
next prev parent reply other threads:[~2020-02-20 19:45 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-11 19:50 Chris Murphy
2020-02-11 22:23 ` Luigi Semenzato
2020-02-20 2:54 ` Chris Murphy
2020-02-20 2:56 ` Chris Murphy
[not found] ` <CAA25o9T2wwqoopoNRySdZoYkD+vtqRPsB1YPnag=TkOp5D9sYA@mail.gmail.com>
2020-02-20 17:38 ` Luigi Semenzato
2020-02-21 8:49 ` Michal Hocko
2020-02-21 9:04 ` Rafael J. Wysocki
2020-02-21 9:36 ` Michal Hocko
2020-02-21 17:13 ` Luigi Semenzato
2020-02-21 9:46 ` Chris Murphy
[not found] ` <CAJCQCtScZg1CP2WTDoOy4-urPbvP_5Hw0H-AKTwHugN9YhdxLg@mail.gmail.com>
2020-02-20 19:44 ` Luigi Semenzato [this message]
2020-02-20 21:48 ` Chris Murphy
2020-02-27 6:43 ` Chris Murphy
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='CAA25o9Q=36fiYHtbpcPPmGEPnORm2ZM7MfqRcsvNxsO0Sys9ng@mail.gmail.com' \
--to=semenzato@google.com \
--cc=linux-mm@kvack.org \
--cc=linux-pm@vger.kernel.org \
--cc=lists@colorremedies.com \
/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