From patchwork Thu Apr 20 08:32:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "zhaoyang.huang" X-Patchwork-Id: 13218143 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id BEAA1C77B73 for ; Thu, 20 Apr 2023 08:33:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 06F7A900003; Thu, 20 Apr 2023 04:33:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 01E5E900002; Thu, 20 Apr 2023 04:33:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E766B900003; Thu, 20 Apr 2023 04:33:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id DBB4D900002 for ; Thu, 20 Apr 2023 04:33:55 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 98E8F1601E9 for ; Thu, 20 Apr 2023 08:33:55 +0000 (UTC) X-FDA: 80701106430.07.CAD68F7 Received: from SHSQR01.spreadtrum.com (unknown [222.66.158.135]) by imf18.hostedemail.com (Postfix) with ESMTP id 174A71C0011 for ; Thu, 20 Apr 2023 08:33:51 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=none; spf=pass (imf18.hostedemail.com: domain of zhaoyang.huang@unisoc.com designates 222.66.158.135 as permitted sender) smtp.mailfrom=zhaoyang.huang@unisoc.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1681979633; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding:in-reply-to: references; bh=iiWOKtHtIyydA4AgntJEknjCMUl8hqeYHFcPBaGXHDs=; b=FHVUbGYh7FQF0lA2bnqxe1KLuOgyGXJSBjynnsX4oASUG+cgAmdX5UTNdb+687zcsCoOVc F+dCaT0+Xik84/YeTwvZV8adgFR2SQbZbLf6ecrzD2ivMo7O0UDaq7+1pXrv+aHYGU5ioY xeopb1yKmUjuzIZN652rJZmeW4OImh0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681979633; a=rsa-sha256; cv=none; b=3MXAh9QaFNdCk4Fc4YujFofh4IrVAde1MG/rrcp8ILC7ys5JcIcFLaWev6K5IOeX/hC3yf paiIr81gBxgbzUb/WJ1Q6FtRfFkzsAwqoEAIH7nYcIorRRCSXfybVC4uuwGXSPmRvEIhMq Z25M89W3cLPTsXWs0mffymTv5RE1AZQ= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=none; spf=pass (imf18.hostedemail.com: domain of zhaoyang.huang@unisoc.com designates 222.66.158.135 as permitted sender) smtp.mailfrom=zhaoyang.huang@unisoc.com; dmarc=none Received: from SHSend.spreadtrum.com (bjmbx01.spreadtrum.com [10.0.64.7]) by SHSQR01.spreadtrum.com with ESMTP id 33K8XHKT064222; Thu, 20 Apr 2023 16:33:17 +0800 (+08) (envelope-from zhaoyang.huang@unisoc.com) Received: from bj03382pcu.spreadtrum.com (10.0.74.65) by BJMBX01.spreadtrum.com (10.0.64.7) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Thu, 20 Apr 2023 16:33:13 +0800 From: "zhaoyang.huang" To: Andrew Morton , , , Zhaoyang Huang , Subject: [PATCHv2] mm: skip CMA pages when they are not available Date: Thu, 20 Apr 2023 16:32:57 +0800 Message-ID: <1681979577-11360-1-git-send-email-zhaoyang.huang@unisoc.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-Originating-IP: [10.0.74.65] X-ClientProxiedBy: SHCAS01.spreadtrum.com (10.0.1.201) To BJMBX01.spreadtrum.com (10.0.64.7) X-MAIL: SHSQR01.spreadtrum.com 33K8XHKT064222 X-Rspam-User: X-Rspamd-Queue-Id: 174A71C0011 X-Rspamd-Server: rspam09 X-Stat-Signature: xfts3dxh75gcrm7f9prsm5p6tupnkj76 X-HE-Tag: 1681979631-949159 X-HE-Meta: U2FsdGVkX1+AA+EZffGyqn0WQpcQU5IbZA1H1G/9PTF/+URZSpLjDDG+O1jROiAhP4EA7qxFL2Rfp8BY7YBwT0z1XAg3oruvhCnfWQKzK7wTUZizPl2ikcxzgvDbAv5lUqYsh8dx264g03gSxX8A4719a/E/QBD7uVNBwyMi2xQk+ZSFDa45mOrdx/sdeLTSaL0dEbcJpMqpuimey51Ntab64aIygPm3SEXe2mTfKbrL/zhUoKvl5ZPx3G/dtGPA8h9UOEk9qXfxslGbEGVrB2BhdsXGJ3zNEcN+3y9vKXsxUcYqiZPRR1UPptfKa9hLtJLGXqo1vL6n0kvCieOn1rYJYKRIrvQfWbA2dnXfcAbh5+QBr2duQ7sLyroP4qutEauwnzHcqa66HLu5UGqvtscqJJfqj5wdFMcbN4NVkuFyjbzzPQrexz7KcYFl/lLF+waL0oPfQUlFfLY9CdAr8Py1CxLbfcMVLURNyLJ6nbx/3wCyYXWvoCAp4Mfj6uTYwQLU+Yh/m5vmiSAMqdmwNNAYhQ5QzXWcTp1CtkTAtDicbGnKDtxQMIzvLJ02dQgiuvgleFqW+rvbTVM2j+NbiMQxgWAyuas91D4JD7MS6e27z9VlOYWHg6rcFaObFD23j/WLJUs8GiEDxJdj7dFmfmp+08H1vCOuA+dZHz3aM8484d2KT+RpNQBLIgBNSA/shBR/PWk37CjdeEBDYJGcS8Ch+f9wKNmO33tycfqHYWLEqLzhcQuwe2mFcyqsbTWBx6U6NqXFnB9h2F0BVf2u1eXjvFX2IUIWdXWUtyC4BS6pi51bjMfTl55YeOvCUy9O+MDbF0nr/WDP5RAXQWEH8UypSzIMQQ/gh33IOJOJLjPZvgDHP6wpGfGH3PYs80/0cCbtseweWlrEFrrC2pFS0FsW3xDNkd61w0M6g1pwwOcnBgHC657IhR2zElbmoEYX3GUfUqM66IBmRKzl6P8 RVrb4W0u 3Urja6O1zMm83i2wHL8sVdHtsZ0I8yE61UpVaZQqh/w8a5f4k56cR+2ARoRPjK4xaSJCJ8gVNMNVktYgnyGWZeX6jHoILwUXgZgcFa7U8rUyuykJn7IUo74CPRzdIBNUhCS0FVG+Be4cTj2GBIZKKBD34KSG9We98rM5y6R04N2pj5QLaidE6O8co/3u6eRdT7ThFpTvteq9l5BtMOPSpji7b96XgBZT1flCKTtFe4L5QUa1qy8Du9ZVm3BAuEbABBhp7SXZps34L8AIprTwyDQhv/wilmcET3B0qWl5dV6F46rxXM08AofzfnKcJgOYvMi71 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: From: Zhaoyang Huang This patch fixes unproductive reclaiming of CMA pages by skipping them when they are not available for current context. It is arise from bellowing OOM issue, which caused by large proportion of MIGRATE_CMA pages among free pages. There has been commit(168676649) to fix it by trying CMA pages first instead of fallback in rmqueue. I would like to propose another one from reclaiming perspective. 04166 < 4> [ 36.172486] [03-19 10:05:52.172] ActivityManager: page allocation failure: order:0, mode:0xc00(GFP_NOIO), nodemask=(null),cpuset=foreground,mems_allowed=0 0419C < 4> [ 36.189447] [03-19 10:05:52.189] DMA32: 0*4kB 447*8kB (C) 217*16kB (C) 124*32kB (C) 136*64kB (C) 70*128kB (C) 22*256kB (C) 3*512kB (C) 0*1024kB 0*2048kB 0*4096kB = 35848kB 0419D < 4> [ 36.193125] [03-19 10:05:52.193] Normal: 231*4kB (UMEH) 49*8kB (MEH) 14*16kB (H) 13*32kB (H) 8*64kB (H) 2*128kB (H) 0*256kB 1*512kB (H) 0*1024kB 0*2048kB 0*4096kB = 3236kB ...... 041EA < 4> [ 36.234447] [03-19 10:05:52.234] SLUB: Unable to allocate memory on node -1, gfp=0xa20(GFP_ATOMIC) 041EB < 4> [ 36.234455] [03-19 10:05:52.234] cache: ext4_io_end, object size: 64, buffer size: 64, default order: 0, min order: 0 041EC < 4> [ 36.234459] [03-19 10:05:52.234] node 0: slabs: 53,objs: 3392, free: 0 Signed-off-by: Zhaoyang Huang --- v2: update commit message and fix build error when CONFIG_CMA is not set --- --- mm/vmscan.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index bd6637f..19fb445 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2225,10 +2225,16 @@ static unsigned long isolate_lru_folios(unsigned long nr_to_scan, unsigned long nr_skipped[MAX_NR_ZONES] = { 0, }; unsigned long skipped = 0; unsigned long scan, total_scan, nr_pages; + bool cma_cap = true; + struct page *page; LIST_HEAD(folios_skipped); total_scan = 0; scan = 0; + if ((IS_ENABLED(CONFIG_CMA)) && !current_is_kswapd() + && (gfp_migratetype(sc->gfp_mask) != MIGRATE_MOVABLE)) + cma_cap = false; + while (scan < nr_to_scan && !list_empty(src)) { struct list_head *move_to = src; struct folio *folio; @@ -2239,12 +2245,17 @@ static unsigned long isolate_lru_folios(unsigned long nr_to_scan, nr_pages = folio_nr_pages(folio); total_scan += nr_pages; - if (folio_zonenum(folio) > sc->reclaim_idx) { + page = &folio->page; + + if ((folio_zonenum(folio) > sc->reclaim_idx) +#ifdef CONFIG_CMA + || (get_pageblock_migratetype(page) == MIGRATE_CMA && !cma_cap) +#endif + ) { nr_skipped[folio_zonenum(folio)] += nr_pages; move_to = &folios_skipped; goto move; } - /* * Do not count skipped folios because that makes the function * return with no isolated folios if the LRU mostly contains