Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp4618085pxb; Tue, 5 Oct 2021 06:58:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxrMZ0o2axVjyYBB6iMPZ3QfnCIvKc9IcAs1XXo0xdUDGqlRxsa/kecXjrhWCAYNJSvMEjD X-Received: by 2002:a17:907:3e05:: with SMTP id hp5mr23944324ejc.527.1633442280117; Tue, 05 Oct 2021 06:58:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633442280; cv=none; d=google.com; s=arc-20160816; b=XpHVEz72H/yNGf+cYCPy0WbM9dD2HDqxpRnl8SA3MSd5uvef3owUlKaiJ2pAzWSrd4 e9HifqeVmiz3qy+uqy0EcrzvDPZZqUylZddzJ6/yYqwbDqiYUkNMahMgxV1VKB5zZiAN p2yWu8cyZBpzgL1G4wO2lV3Um16bId2+NgAoRGPyLUFCWidPLK2Ptk0LtMECMrbYrfGe iGsrOskMW4UVxSaS2zaVgZjHaf7U+41SeeVtsMWgqkRF0P2at0h4SnYiGrf6kVUQxw5N UFBLkYphADNOuKk/h33nW8IUIO637s1+FHtpL4wM0UHQtuAQumxfZTKuyYvRJwiyCCfG wcKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:references:cc :to:subject:from:dkim-signature; bh=wDI2KAde98v08hZLs6870emZXeENggnRAUE1+E9iwPs=; b=fdvpq6Y9vthA8abyAIl/Sodj847LEVjMHYTbBELVlvP1eJ+z9gfySfJwS83a+4JU0N xCBTRQ38N9B/VD/pPtFs8CaAtj+XBR58X2hMAoBjbfC/sWsh3ua0TJtoDUM6VoTTVqvl jiU7fVyH+sw7seeYihpA7BOpx4ZzQ/qh/IIOFhJHfIW8kKTwiQoI1G/QEX3AoMCsBnEM 2h5E6H9yXTKy9+lUKZgeUESQTp1t5oNIBXPGLYKKazD3BCh+8D5fzuD67x/JSHJaqrN5 RrRfCU0S9+idKtu26ih85k+IRoAI6TR26e6LGdcozK4prYXvz2Ge6ilWfMlhJ4W38o24 BEmQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=oe9Kw+Jm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z7si14979325edp.58.2021.10.05.06.57.35; Tue, 05 Oct 2021 06:58:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=oe9Kw+Jm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235878AbhJENzw (ORCPT + 99 others); Tue, 5 Oct 2021 09:55:52 -0400 Received: from relay.sw.ru ([185.231.240.75]:57734 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236218AbhJENyc (ORCPT ); Tue, 5 Oct 2021 09:54:32 -0400 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=wDI2KAde98v08hZLs6870emZXeENggnRAUE1+E9iwPs=; b=oe9Kw+Jm7+nbWFTV/Mq f4d5MqyA4aoEKGe4haLjvSTVgBY5nmczJxUHvbdrhMOPYTZI26Ez+l+IEUw0f2RoKpUIFqrnSdWjN b1hryhqynKHFg0wMWtCGJYS2T/TUUGi9X2qQwEowdyg8ogYZJAPcVQdAYmZSTLnKnjTaLsdCpv4=; Received: from [10.93.0.56] by relay.sw.ru with esmtp (Exim 4.94.2) (envelope-from ) id 1mXks4-0054Uo-N0; Tue, 05 Oct 2021 16:52:40 +0300 From: Vasily Averin Subject: [PATCH mm v2] vmalloc: back off when the current task is OOM-killed To: Michal Hocko Cc: Johannes Weiner , Vladimir Davydov , Andrew Morton , Tetsuo Handa , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel@openvz.org References: Message-ID: <83efc664-3a65-2adb-d7c4-2885784cf109@virtuozzo.com> Date: Tue, 5 Oct 2021 16:52:40 +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-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.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 --- 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