Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2537029pxj; Mon, 10 May 2021 05:26:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy5/ltMyprC6Haitanlm9H1jgNmok4H1NS2A2NVizD9MoYWHuqB2wdhYGEAuqBH+JkDiKIO X-Received: by 2002:a92:ab09:: with SMTP id v9mr3511912ilh.55.1620649585168; Mon, 10 May 2021 05:26:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620649585; cv=none; d=google.com; s=arc-20160816; b=YNjhFjBLC0xf7kLeOHZ5JHer+rtFXRsKKAjLssZeGu8wz08RZfqNqLtFUNUNiEwALF hU9qz5BB+kGje0we+TGDPZK1Yxdv+7DccnBNG6F3bimrEned/UBpcfYVptiYscS00sbe IttNKtaUOlY7FpLbyXJG3IQhvZwMv5EfRIZng0z3V+O1MvTiFJMswZANv0/GZ3VFMJPz dAGZQytBXAFFAUTNZ/ZGFHhsrWsNpXU0ZllsvLF4aySuZTbemVQSsjaNBltYe9PcwVbv Jrm40k6QhjKzO/SpmtwpJPNdjYovYgYnoSPRedUM73D7Wi0mAA59jXaVWxZ/pqcFXY/7 M2mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=34z4+VB1LaPQW8wqvdFvDxehX0MBYhLdgeUcmmIlEk8=; b=EJC3nePwF1mqlHA9OVYJRc08Pbxs3dENPjo3bfTVmhDc2DFG2NdiY1ABfNPPgSWUKy tAIlb6bCCNEgSo5H51GLZ0ZtbO2ABaJcE4n2OvHK0TlCxRhVEogaEgpn4+XLD1qKzgz6 vf+YdCswnNzM4as192XZot5E3CVCn9ein+FmXxGq1JtkxwbmYGzqQxTUy7r1UI+VAoEL 8tH+8aW3zjNIRpaUQxIYfK+tuZ45HmVuq7XMtcDqmu1WPLkdZ2GxQcfct27BmBdVEEQd yO7mZ7eO6dbcygW0I+HPFbuwJQjublycPefco2PVhWSSwTOq7jRF91B09KKUnC0e2lcW S7FQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=BaHEosit; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k6si13176022jaq.122.2021.05.10.05.26.12; Mon, 10 May 2021 05:26:25 -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=@linuxfoundation.org header.s=korg header.b=BaHEosit; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234949AbhEJMRY (ORCPT + 99 others); Mon, 10 May 2021 08:17:24 -0400 Received: from mail.kernel.org ([198.145.29.99]:44226 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231582AbhEJLIm (ORCPT ); Mon, 10 May 2021 07:08:42 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id C5A7661A06; Mon, 10 May 2021 11:03:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620644638; bh=DBEjp3vtXKDzGhWDxBjLGrFUWCseuDgvdeR6vFo+32c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BaHEositl59Whh6lstL7Py6P5g89Y1ur3w381UqG7XG2NeVCkst6sOQ3Bv3GN+TsZ EZDc3J825BGJqtLqD6WHQs2h4sPVNm6peC1/STDEuI9vwayEW6gSkZNP3QAZWMkwLq 0TujnLENVVQXsp9igsoS1Ppy0ig+85jvUInPPoQo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Uladzislau Rezki (Sony)" , "Paul E. McKenney" , Sasha Levin Subject: [PATCH 5.12 164/384] kvfree_rcu: Use same set of GFP flags as does single-argument Date: Mon, 10 May 2021 12:19:13 +0200 Message-Id: <20210510102020.292195626@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510102014.849075526@linuxfoundation.org> References: <20210510102014.849075526@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Uladzislau Rezki (Sony) [ Upstream commit ee6ddf58475cce8a3d3697614679cd8cb4a6f583 ] Running an rcuscale stress-suite can lead to "Out of memory" of a system. This can happen under high memory pressure with a small amount of physical memory. For example, a KVM test configuration with 64 CPUs and 512 megabytes can result in OOM when running rcuscale with below parameters: ../kvm.sh --torture rcuscale --allcpus --duration 10 --kconfig CONFIG_NR_CPUS=64 \ --bootargs "rcuscale.kfree_rcu_test=1 rcuscale.kfree_nthreads=16 rcuscale.holdoff=20 \ rcuscale.kfree_loops=10000 torture.disable_onoff_at_boot" --trust-make [ 12.054448] kworker/1:1H invoked oom-killer: gfp_mask=0x2cc0(GFP_KERNEL|__GFP_NOWARN), order=0, oom_score_adj=0 [ 12.055303] CPU: 1 PID: 377 Comm: kworker/1:1H Not tainted 5.11.0-rc3+ #510 [ 12.055416] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.12.0-1 04/01/2014 [ 12.056485] Workqueue: events_highpri fill_page_cache_func [ 12.056485] Call Trace: [ 12.056485] dump_stack+0x57/0x6a [ 12.056485] dump_header+0x4c/0x30a [ 12.056485] ? del_timer_sync+0x20/0x30 [ 12.056485] out_of_memory.cold.47+0xa/0x7e [ 12.056485] __alloc_pages_slowpath.constprop.123+0x82f/0xc00 [ 12.056485] __alloc_pages_nodemask+0x289/0x2c0 [ 12.056485] __get_free_pages+0x8/0x30 [ 12.056485] fill_page_cache_func+0x39/0xb0 [ 12.056485] process_one_work+0x1ed/0x3b0 [ 12.056485] ? process_one_work+0x3b0/0x3b0 [ 12.060485] worker_thread+0x28/0x3c0 [ 12.060485] ? process_one_work+0x3b0/0x3b0 [ 12.060485] kthread+0x138/0x160 [ 12.060485] ? kthread_park+0x80/0x80 [ 12.060485] ret_from_fork+0x22/0x30 [ 12.062156] Mem-Info: [ 12.062350] active_anon:0 inactive_anon:0 isolated_anon:0 [ 12.062350] active_file:0 inactive_file:0 isolated_file:0 [ 12.062350] unevictable:0 dirty:0 writeback:0 [ 12.062350] slab_reclaimable:2797 slab_unreclaimable:80920 [ 12.062350] mapped:1 shmem:2 pagetables:8 bounce:0 [ 12.062350] free:10488 free_pcp:1227 free_cma:0 ... [ 12.101610] Out of memory and no killable processes... [ 12.102042] Kernel panic - not syncing: System is deadlocked on memory [ 12.102583] CPU: 1 PID: 377 Comm: kworker/1:1H Not tainted 5.11.0-rc3+ #510 [ 12.102600] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.12.0-1 04/01/2014 Because kvfree_rcu() has a fallback path, memory allocation failure is not the end of the world. Furthermore, the added overhead of aggressive GFP settings must be balanced against the overhead of the fallback path, which is a cache miss for double-argument kvfree_rcu() and a call to synchronize_rcu() for single-argument kvfree_rcu(). The current choice of GFP_KERNEL|__GFP_NOWARN can result in longer latencies than a call to synchronize_rcu(), so less-tenacious GFP flags would be helpful. Here is the tradeoff that must be balanced: a) Minimize use of the fallback path, b) Avoid pushing the system into OOM, c) Bound allocation latency to that of synchronize_rcu(), and d) Leave the emergency reserves to use cases lacking fallbacks. This commit therefore changes GFP flags from GFP_KERNEL|__GFP_NOWARN to GFP_KERNEL|__GFP_NORETRY|__GFP_NOMEMALLOC|__GFP_NOWARN. This combination leaves the emergency reserves alone and can initiate reclaim, but will not invoke the OOM killer. Signed-off-by: Uladzislau Rezki (Sony) Signed-off-by: Paul E. McKenney Signed-off-by: Sasha Levin --- kernel/rcu/tree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index da6f5213fb74..2a739c5fcca5 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -3464,7 +3464,7 @@ static void fill_page_cache_func(struct work_struct *work) for (i = 0; i < rcu_min_cached_objs; i++) { bnode = (struct kvfree_rcu_bulk_data *) - __get_free_page(GFP_KERNEL | __GFP_NOWARN); + __get_free_page(GFP_KERNEL | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN); if (bnode) { raw_spin_lock_irqsave(&krcp->lock, flags); -- 2.30.2