Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2503130pxj; Mon, 10 May 2021 04:41:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz4NRhjEaOp47+33MidZVkdgpTLGxE9aQtPKaI7k8auUZBRUXyNhka3RxTjMTZMLGMH70Ue X-Received: by 2002:a17:907:d27:: with SMTP id gn39mr25164054ejc.389.1620646906042; Mon, 10 May 2021 04:41:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620646906; cv=none; d=google.com; s=arc-20160816; b=skDV8C49OQJ0IvOckPkCxtaH3EqJNJ0AAA+xW90d3FTiojLMJdYQDw6R36hMceU3H3 U7UYBysISqIp72FgaJhd+TpWvn/UCaoL8gw7rIVUFJ20C0KasL4l2cams4RNDNBpMz2q as8cshIBWJaaLy28uFSi4uvbhQnSywMgBL7qLg3CqDgdyCFC8mI8F6yhBvuLaXC8jiLy 5CIAarSsoLf1a5hhOg2sls6pBD8NlHyjAiC9p4OQrODWWAnG1AtnRNU+dAmeulzdoURE mylLXAxjLOnJh1YeyzB4SU+hcAy53zqe25D1SJqP57zbmT3tT7sCToUj80773KkXU9fN WN/A== 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=d21vzgpWuUjwn6sGwQY8w+fsLgzVftfSjMV4Cye4bSo=; b=AGo5Gr+R6s9+LlZU7wGtvSFviV/QkmyobszCATXX9MaG8WEc9ZcqJs0WpDdzKlV5fy +qYow4IZ4VwcnGJNJaqMLNg3HsakL6JM3DnpwkkWbA+z+ShoeXej2N8FfqAbC32b/KpM 2R+1Xj23FhNkg0N6wO+BJSHv3m4Z9ZIERhfe93PwnG42KPFPyTgBKZC90XmIHEMebwEk Wdc56XqXNlftS6kUICv7gyf9ZJPpefLiUEw7Dosf+ToV82No431vh7ZxLl2PnhM8DR7U J1Ux3ih9fL/aVHvE+qMinrJpjxbC6go7UT2npuGRNh0x8p3bFrsodO3IPuY/P5q0X9DM NSbw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=xya3ZiwB; 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 v13si13293643ejb.671.2021.05.10.04.41.22; Mon, 10 May 2021 04:41:46 -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=xya3ZiwB; 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 S235904AbhEJLaU (ORCPT + 99 others); Mon, 10 May 2021 07:30:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:52740 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234803AbhEJK5F (ORCPT ); Mon, 10 May 2021 06:57:05 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id C512261628; Mon, 10 May 2021 10:49:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620643763; bh=Etj5HNpgOpYf10PfWhvmQ7mY025ULDvcMk3hlMAlskA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=xya3ZiwBjI2pgyEpNO7o25kWThCayaVNIc9RIwhkfPHXTAT7IPMoySJjar/xen/AA cVVqxhRejYDOauyuOhc1NFKMKb32xLcOzX9QbgQNfBryTroRRgJUuOzvyZdKIgUKjC 6fBlTfQ37VcmmTrWe5+t2aC+1zmhkz55ED2y8rP8= 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.11 149/342] kvfree_rcu: Use same set of GFP flags as does single-argument Date: Mon, 10 May 2021 12:18:59 +0200 Message-Id: <20210510102015.012294263@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510102010.096403571@linuxfoundation.org> References: <20210510102010.096403571@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 ce17b8477442..84a3fe09630b 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -3439,7 +3439,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