From: Vasily Averin <vvs@virtuozzo.com> To: Michal Hocko <mhocko@kernel.org> Cc: Johannes Weiner <hannes@cmpxchg.org>, Vladimir Davydov <vdavydov.dev@gmail.com>, Andrew Morton <akpm@linux-foundation.org>, Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>, cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel@openvz.org Subject: [PATCH mm v2] vmalloc: back off when the current task is OOM-killed Date: Tue, 5 Oct 2021 16:52:40 +0300 [thread overview] Message-ID: <83efc664-3a65-2adb-d7c4-2885784cf109@virtuozzo.com> (raw) In-Reply-To: <YVGmMSJ3NrQZjLP8@dhcp22.suse.cz> Huge vmalloc allocation on heavy loaded node can lead to a global memory shortage. Task called vmalloc can have worst badness and be selected by OOM-killer, however taken fatal signal does not interrupt allocation cycle. Vmalloc repeat page allocaions again and again, exacerbating the crisis and consuming the memory freed up by another killed tasks. After a successful completion of the allocation procedure, a fatal signal will be processed and task will be destroyed finally. However it may not release the consumed memory, since the allocated object may have a lifetime unrelated to the completed task. In the worst case, this can lead to the host will panic due to "Out of memory and no killable processes..." This patch allows OOM-killer to break vmalloc cycle, makes OOM more effective and avoid host panic. It does not check oom condition directly, however, and breaks page allocation cycle when fatal signal was received. This may trigger some hidden problems, when caller does not handle vmalloc failures, or when rollaback after failed vmalloc calls own vmallocs inside. However all of these scenarios are incorrect: vmalloc does not guarantee successful allocation, it has never been called with __GFP_NOFAIL and threfore either should not be used for any rollbacks or should handle such errors correctly and not lead to critical failures. Signed-off-by: Vasily Averin <vvs@virtuozzo.com> --- v2: tsk_is_oom_victim() check replaced by fatal_signal_pending(current), removed check inside __alloc_pages_bulk(), according to feedback from mhocko@. Updated patch description. --- mm/vmalloc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index d77830ff604c..71706f5447f0 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2860,6 +2860,9 @@ vm_area_alloc_pages(gfp_t gfp, int nid, struct page *page; int i; + if (fatal_signal_pending(current)) + break; + page = alloc_pages_node(nid, gfp, order); if (unlikely(!page)) break; -- 2.31.1
WARNING: multiple messages have this Message-ID (diff)
From: Vasily Averin <vvs-5HdwGun5lf+gSpxsJD1C4w@public.gmane.org> To: Michal Hocko <mhocko-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Cc: Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>, Vladimir Davydov <vdavydov.dev-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>, Tetsuo Handa <penguin-kernel-1yMVhJb1mP/7nzcFbJAaVXf5DAMn2ifp@public.gmane.org>, cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kernel-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org Subject: [PATCH mm v2] vmalloc: back off when the current task is OOM-killed Date: Tue, 5 Oct 2021 16:52:40 +0300 [thread overview] Message-ID: <83efc664-3a65-2adb-d7c4-2885784cf109@virtuozzo.com> (raw) In-Reply-To: <YVGmMSJ3NrQZjLP8-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org> Huge vmalloc allocation on heavy loaded node can lead to a global memory shortage. Task called vmalloc can have worst badness and be selected by OOM-killer, however taken fatal signal does not interrupt allocation cycle. Vmalloc repeat page allocaions again and again, exacerbating the crisis and consuming the memory freed up by another killed tasks. After a successful completion of the allocation procedure, a fatal signal will be processed and task will be destroyed finally. However it may not release the consumed memory, since the allocated object may have a lifetime unrelated to the completed task. In the worst case, this can lead to the host will panic due to "Out of memory and no killable processes..." This patch allows OOM-killer to break vmalloc cycle, makes OOM more effective and avoid host panic. It does not check oom condition directly, however, and breaks page allocation cycle when fatal signal was received. This may trigger some hidden problems, when caller does not handle vmalloc failures, or when rollaback after failed vmalloc calls own vmallocs inside. However all of these scenarios are incorrect: vmalloc does not guarantee successful allocation, it has never been called with __GFP_NOFAIL and threfore either should not be used for any rollbacks or should handle such errors correctly and not lead to critical failures. Signed-off-by: Vasily Averin <vvs-5HdwGun5lf+gSpxsJD1C4w@public.gmane.org> --- v2: tsk_is_oom_victim() check replaced by fatal_signal_pending(current), removed check inside __alloc_pages_bulk(), according to feedback from mhocko@. Updated patch description. --- mm/vmalloc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index d77830ff604c..71706f5447f0 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2860,6 +2860,9 @@ vm_area_alloc_pages(gfp_t gfp, int nid, struct page *page; int i; + if (fatal_signal_pending(current)) + break; + page = alloc_pages_node(nid, gfp, order); if (unlikely(!page)) break; -- 2.31.1
next prev parent reply other threads:[~2021-10-05 13:54 UTC|newest] Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-10 12:39 [PATCH memcg] memcg: prohibit unconditional exceeding the limit of dying tasks Vasily Averin 2021-09-10 13:04 ` Tetsuo Handa 2021-09-10 13:04 ` Tetsuo Handa 2021-09-10 13:20 ` Vasily Averin 2021-09-10 13:20 ` Vasily Averin 2021-09-10 14:55 ` Michal Hocko 2021-09-13 8:29 ` Vasily Averin 2021-09-13 8:29 ` Vasily Averin 2021-09-13 8:42 ` Michal Hocko 2021-09-13 8:42 ` Michal Hocko 2021-09-17 8:06 ` [PATCH mm] vmalloc: back off when the current task is OOM-killed Vasily Averin 2021-09-17 8:06 ` Vasily Averin 2021-09-19 23:31 ` Andrew Morton 2021-09-19 23:31 ` Andrew Morton 2021-09-20 1:22 ` Tetsuo Handa 2021-09-20 10:59 ` Vasily Averin 2021-09-20 10:59 ` Vasily Averin 2021-09-21 18:55 ` Andrew Morton 2021-09-22 6:18 ` Vasily Averin 2021-09-22 12:27 ` Michal Hocko 2021-09-22 12:27 ` Michal Hocko 2021-09-23 6:49 ` Vasily Averin 2021-09-23 6:49 ` Vasily Averin 2021-09-24 7:55 ` Michal Hocko 2021-09-24 7:55 ` Michal Hocko 2021-09-27 9:36 ` Vasily Averin 2021-09-27 9:36 ` Vasily Averin 2021-09-27 11:08 ` Michal Hocko 2021-09-27 11:08 ` Michal Hocko 2021-10-05 13:52 ` Vasily Averin [this message] 2021-10-05 13:52 ` [PATCH mm v2] " Vasily Averin 2021-10-05 14:00 ` Vasily Averin 2021-10-05 14:00 ` Vasily Averin 2021-10-07 10:47 ` Michal Hocko 2021-10-07 10:47 ` Michal Hocko 2021-10-07 19:55 ` Andrew Morton 2021-10-07 19:55 ` Andrew Morton 2021-09-10 13:07 ` [PATCH memcg] memcg: prohibit unconditional exceeding the limit of dying tasks Vasily Averin 2021-09-10 13:07 ` Vasily Averin 2021-09-13 7:51 ` Vasily Averin 2021-09-13 7:51 ` Vasily Averin 2021-09-13 8:39 ` Michal Hocko 2021-09-13 8:39 ` Michal Hocko 2021-09-13 9:37 ` Vasily Averin 2021-09-13 9:37 ` Vasily Averin 2021-09-13 10:10 ` Michal Hocko 2021-09-13 10:10 ` Michal Hocko 2021-09-13 8:53 ` Michal Hocko 2021-09-13 10:35 ` Vasily Averin 2021-09-13 10:35 ` Vasily Averin 2021-09-13 10:55 ` Michal Hocko 2021-09-13 10:55 ` Michal Hocko 2021-09-14 10:01 ` Vasily Averin 2021-09-14 10:01 ` Vasily Averin 2021-09-14 10:10 ` [PATCH memcg v2] " Vasily Averin 2021-09-14 10:10 ` Vasily Averin 2021-09-16 12:55 ` Michal Hocko 2021-09-16 12:55 ` Michal Hocko 2021-10-05 13:52 ` [PATCH memcg v3] " Vasily Averin 2021-10-05 13:52 ` Vasily Averin 2021-10-05 14:55 ` Michal Hocko 2021-10-05 14:55 ` 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=83efc664-3a65-2adb-d7c4-2885784cf109@virtuozzo.com \ --to=vvs@virtuozzo.com \ --cc=akpm@linux-foundation.org \ --cc=cgroups@vger.kernel.org \ --cc=hannes@cmpxchg.org \ --cc=kernel@openvz.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mhocko@kernel.org \ --cc=penguin-kernel@i-love.sakura.ne.jp \ --cc=vdavydov.dev@gmail.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: linkBe 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.