From patchwork Sat Oct 23 13:19:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasily Averin X-Patchwork-Id: 12579613 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 93F15C433F5 for ; Sat, 23 Oct 2021 13:19:54 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 34AFC60FE7 for ; Sat, 23 Oct 2021 13:19:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 34AFC60FE7 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id D2FE7940009; Sat, 23 Oct 2021 09:19:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CDFC8940007; Sat, 23 Oct 2021 09:19:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BCE86940009; Sat, 23 Oct 2021 09:19:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0131.hostedemail.com [216.40.44.131]) by kanga.kvack.org (Postfix) with ESMTP id B042B940007 for ; Sat, 23 Oct 2021 09:19:53 -0400 (EDT) Received: from smtpin39.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 640262BFCF for ; Sat, 23 Oct 2021 13:19:53 +0000 (UTC) X-FDA: 78727759866.39.9671E7A Received: from relay.sw.ru (relay.sw.ru [185.231.240.75]) by imf02.hostedemail.com (Postfix) with ESMTP id 15721700177D for ; Sat, 23 Oct 2021 13:19:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=Content-Type:MIME-Version:Date:Message-ID:Subject :From; bh=DX974UacjLa5B8lLKBDGYPr0ueCh9q/0PqGjv1EsfYw=; b=Qqybfz2pU+1i6qU1cl+ n1/Ryq+c0MgrgrTKsIr+zAZ1FcRW64LaQxmTNiUdj22yblJrcLgq8hzUJ6nLnvPsVJAJt72LMbhfw +odGC3WfLkhI4RMty6rnyhpI2Nrq4jD4t5JdjGwt3X6OlFXMtqtk18+4yM2yEuiOzojbz5hH3hs=; Received: from [172.29.1.17] by relay.sw.ru with esmtp (Exim 4.94.2) (envelope-from ) id 1meGw9-006vQI-Bm; Sat, 23 Oct 2021 16:19:49 +0300 From: Vasily Averin Subject: [PATCH memcg v3 1/3] mm, oom: pagefault_out_of_memory: don't force global OOM for dying tasks To: Michal Hocko , Johannes Weiner , Vladimir Davydov , Andrew Morton Cc: Roman Gushchin , Uladzislau Rezki , Vlastimil Babka , Shakeel Butt , Mel Gorman , Tetsuo Handa , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel@openvz.org References: Message-ID: <0828a149-786e-7c06-b70a-52d086818ea3@virtuozzo.com> Date: Sat, 23 Oct 2021 16:19:28 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Rspamd-Queue-Id: 15721700177D Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=virtuozzo.com header.s=relay header.b=Qqybfz2p; spf=pass (imf02.hostedemail.com: domain of vvs@virtuozzo.com designates 185.231.240.75 as permitted sender) smtp.mailfrom=vvs@virtuozzo.com; dmarc=pass (policy=quarantine) header.from=virtuozzo.com X-Stat-Signature: pdwj9nyh5peiq9rzwfxr6pq73d4et9c8 X-Rspamd-Server: rspam06 X-HE-Tag: 1634995189-382557 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Any allocation failure during the #PF path will return with VM_FAULT_OOM which in turn results in pagefault_out_of_memory which in own turn executes out_out_memory() and can kill a random task. An allocation might fail when the current task is the oom victim and there are no memory reserves left. The OOM killer is already handled at the page allocator level for the global OOM and at the charging level for the memcg one. Both have much more information about the scope of allocation/charge request. This means that either the OOM killer has been invoked properly and didn't lead to the allocation success or it has been skipped because it couldn't have been invoked. In both cases triggering it from here is pointless and even harmful. It makes much more sense to let the killed task die rather than to wake up an eternally hungry oom-killer and send him to choose a fatter victim for breakfast. Suggested-by: Michal Hocko Signed-off-by: Vasily Averin Acked-by: Michal Hocko --- mm/oom_kill.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 831340e7ad8b..1deef8c7a71b 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -1137,6 +1137,9 @@ void pagefault_out_of_memory(void) if (mem_cgroup_oom_synchronize(true)) return; + if (fatal_signal_pending(current)) + return; + if (!mutex_trylock(&oom_lock)) return; out_of_memory(&oc);