From: Mike Galbraith <efault@gmx.de>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Thomas Gleixner <tglx@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>,
linux-rt-users <linux-rt-users@vger.kernel.org>,
Steven Rostedt <rostedt@goodmis.org>
Subject: [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()
Date: Fri, 06 Jan 2017 09:13:23 +0100 [thread overview]
Message-ID: <1483690403.11478.8.camel@gmx.de> (raw)
In-Reply-To: <20161223163213.szj43nv7rnelkbty@linutronix.de>
radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()
Having no preload, which turns accounting off for non-rt kernels, trying to
allocate coming from shmem_fault() when memcg is full sends us scurrying off
to pagefault_out_of_memory(), with dramatic (usually terminal) consequences.
LTP's madvise06 testcase triggers this quite well, and per gitk, the below
was the beginning of RT memcg woes.
58e698af4c63 radix-tree: account radix_tree_node to memory cgroup
Turn memcg accounting off for RT in the problematic path.
Signed-off-by: Mike Galbraith <efault@gmx.de>
Cc: stable-rt@vger.kernel.org # +v4.6-rt
---
lib/radix-tree.c | 7 +++++++
1 file changed, 7 insertions(+)
--- a/lib/radix-tree.c
+++ b/lib/radix-tree.c
@@ -303,6 +303,13 @@ radix_tree_node_alloc(struct radix_tree_
if (!gfpflags_allow_blocking(gfp_mask) && !in_interrupt()) {
struct radix_tree_preload *rtp;
+#if defined(CONFIG_PREEMPT_RT_FULL) && defined(CONFIG_MEMCG)
+ /*
+ * Arriving here from shmem_fault() and meeting a full memcg
+ * will send us to pagefault_out_of_memory(), and a dead box.
+ */
+ gfp_mask &= ~__GFP_ACCOUNT;
+#endif
/*
* Even if the caller has preloaded, try to allocate from the
* cache first for the new node to get accounted to the memory
next prev parent reply other threads:[~2017-01-06 8:13 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-23 16:32 [ANNOUNCE] v4.9-rt1 Sebastian Andrzej Siewior
2016-12-26 6:54 ` [patch-rt] kvm: Convert pvclock_gtod_sync_lock to raw_spinlock_t Mike Galbraith
2017-01-20 16:44 ` Sebastian Andrzej Siewior
2017-01-20 17:32 ` Mike Galbraith
2016-12-26 7:00 ` [rfc patch-rt] posix_cpu_timers: Kill hotplug cpu notifier Mike Galbraith
2017-01-20 16:46 ` Sebastian Andrzej Siewior
2017-01-20 17:29 ` Mike Galbraith
2017-01-20 17:34 ` Sebastian Andrzej Siewior
2017-01-20 17:56 ` Mike Galbraith
2016-12-31 8:20 ` [patch-rt] softirq: Move ksoftirqd_running() under !CONFIG_PREEMPT_RT_FULL Mike Galbraith
2017-01-20 17:21 ` Sebastian Andrzej Siewior
2017-01-06 8:13 ` Mike Galbraith [this message]
2017-01-06 8:28 ` [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc() Mike Galbraith
2017-01-06 8:55 ` Michal Hocko
2017-01-06 10:52 ` Mike Galbraith
2017-01-06 12:20 ` Mike Galbraith
2017-01-06 12:44 ` Mike Galbraith
2017-01-25 15:06 ` Sebastian Andrzej Siewior
2017-01-26 3:42 ` Mike Galbraith
2017-01-08 8:32 ` {patch-rt] cpuset: Convert callback_lock to raw_spinlock_t Mike Galbraith
2017-01-25 15:45 ` Sebastian Andrzej Siewior
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=1483690403.11478.8.camel@gmx.de \
--to=efault@gmx.de \
--cc=bigeasy@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.