From: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
To: Michal Hocko <mhocko@kernel.org>
Cc: syzbot <syzbot+77e6b28a7a7106ad0def@syzkaller.appspotmail.com>,
hannes@cmpxchg.org, akpm@linux-foundation.org, guro@fb.com,
kirill.shutemov@linux.intel.com, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, rientjes@google.com,
syzkaller-bugs@googlegroups.com, yang.s@alibaba-inc.com,
Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
Petr Mladek <pmladek@suse.com>
Subject: Re: INFO: rcu detected stall in shmem_fault
Date: Wed, 10 Oct 2018 23:19:21 +0900 [thread overview]
Message-ID: <127c73bd-2c7b-6ef0-3c6d-5e01d43bdf5b@i-love.sakura.ne.jp> (raw)
In-Reply-To: <20181010113500.GH5873@dhcp22.suse.cz>
On 2018/10/10 20:35, Michal Hocko wrote:
>>>> What should we do if memcg-OOM found no killable task because the allocating task
>>>> was oom_score_adj == -1000 ? Flooding printk() until RCU stall watchdog fires
>>>> (which seems to be caused by commit 3100dab2aa09dc6e ("mm: memcontrol: print proper
>>>> OOM header when no eligible victim left") because syzbot was terminating the test
>>>> upon WARN(1) removed by that commit) is not a good behavior.
>>>
>>> We definitely want to inform about ineligible oom victim. We might
>>> consider some rate limiting for the memcg state but that is a valuable
>>> information to see under normal situation (when you do not have floods
>>> of these situations).
>>>
>>
>> But if the caller cannot be noticed by SIGKILL from the OOM killer,
>> allowing the caller to trigger the OOM killer again and again (until
>> global OOM killer triggers) is bad.
>
> There is simply no other option. Well, except for failing the charge
> which has been considered and refused because it could trigger
> unexpected error paths and that breaking the isolation on rare cases
> when of the misconfiguration is acceptable. We can reconsider that
> but you should bring really good arguments on the table. I was very
> successful doing that.
>
By the way, how do we avoid this flooding? Something like this?
include/linux/sched.h | 1 +
mm/oom_kill.c | 11 +++++++++++
2 files changed, 12 insertions(+)
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 977cb57..58eff50 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -723,6 +723,7 @@ struct task_struct {
#endif
#ifdef CONFIG_MEMCG
unsigned in_user_fault:1;
+ unsigned memcg_oom_no_eligible_warned:1;
#ifdef CONFIG_MEMCG_KMEM
unsigned memcg_kmem_skip_account:1;
#endif
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
index f10aa53..ff0fa65 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -1106,6 +1106,13 @@ bool out_of_memory(struct oom_control *oc)
select_bad_process(oc);
/* Found nothing?!?! */
if (!oc->chosen) {
+#ifdef CONFIG_MEMCG
+ if (is_memcg_oom(oc)) {
+ if (current->memcg_oom_no_eligible_warned)
+ return false;
+ current->memcg_oom_no_eligible_warned = 1;
+ }
+#endif
dump_header(oc, NULL);
pr_warn("Out of memory and no killable processes...\n");
/*
@@ -1115,6 +1122,10 @@ bool out_of_memory(struct oom_control *oc)
*/
if (!is_sysrq_oom(oc) && !is_memcg_oom(oc))
panic("System is deadlocked on memory\n");
+#ifdef CONFIG_MEMCG
+ } else if (is_memcg_oom(oc)) {
+ current->memcg_oom_no_eligible_warned = 0;
+#endif
}
if (oc->chosen && oc->chosen != (void *)-1UL)
oom_kill_process(oc, !is_memcg_oom(oc) ? "Out of memory" :
--
1.8.3.1
next prev parent reply other threads:[~2018-10-10 14:19 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-10 0:08 INFO: rcu detected stall in shmem_fault syzbot
2018-10-10 0:12 ` Tetsuo Handa
2018-10-10 4:11 ` David Rientjes
2018-10-10 7:55 ` Dmitry Vyukov
2018-10-10 9:13 ` Michal Hocko
2018-10-10 9:33 ` Dmitry Vyukov
2018-10-10 9:02 ` Michal Hocko
2018-10-10 8:59 ` Michal Hocko
2018-10-10 10:43 ` Tetsuo Handa
2018-10-10 11:35 ` Michal Hocko
2018-10-10 11:48 ` Sergey Senozhatsky
2018-10-10 12:25 ` Michal Hocko
2018-10-10 12:29 ` Dmitry Vyukov
2018-10-10 12:36 ` Dmitry Vyukov
2018-10-10 13:10 ` Tetsuo Handa
2018-10-10 13:17 ` Dmitry Vyukov
2018-10-11 1:17 ` Sergey Senozhatsky
2018-10-10 15:17 ` Sergey Senozhatsky
2018-10-10 14:19 ` Tetsuo Handa [this message]
2018-10-10 15:11 ` [RFC PATCH] memcg, oom: throttle dump_header for memcg ooms without eligible tasks Michal Hocko
2018-10-10 15:11 ` Michal Hocko
2018-10-11 6:37 ` Tetsuo Handa
2018-10-11 6:37 ` Tetsuo Handa
2018-10-12 10:47 ` Tetsuo Handa
2018-10-12 10:47 ` Tetsuo Handa
2018-10-12 11:20 ` Johannes Weiner
2018-10-12 12:08 ` Michal Hocko
2018-10-12 12:10 ` Tetsuo Handa
2018-10-12 12:41 ` Johannes Weiner
2018-10-12 12:58 ` Tetsuo Handa
2018-10-13 11:09 ` Tetsuo Handa
2018-10-13 11:22 ` Johannes Weiner
2018-10-13 11:28 ` Tetsuo Handa
2018-10-15 8:19 ` Michal Hocko
2018-10-15 10:57 ` Tetsuo Handa
2018-10-15 11:24 ` Michal Hocko
2018-10-15 12:47 ` Tetsuo Handa
2018-10-15 13:35 ` Michal Hocko
2018-10-16 0:55 ` Tetsuo Handa
2018-10-16 9:20 ` Michal Hocko
2018-10-16 11:05 ` Tetsuo Handa
2018-10-16 11:17 ` Michal Hocko
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=127c73bd-2c7b-6ef0-3c6d-5e01d43bdf5b@i-love.sakura.ne.jp \
--to=penguin-kernel@i-love.sakura.ne.jp \
--cc=akpm@linux-foundation.org \
--cc=guro@fb.com \
--cc=hannes@cmpxchg.org \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=pmladek@suse.com \
--cc=rientjes@google.com \
--cc=sergey.senozhatsky.work@gmail.com \
--cc=sergey.senozhatsky@gmail.com \
--cc=syzbot+77e6b28a7a7106ad0def@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.com \
--cc=yang.s@alibaba-inc.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 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.