From mboxrd@z Thu Jan 1 00:00:00 1970 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 1E813C77B61 for ; Mon, 10 Apr 2023 09:03:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9687328000A; Mon, 10 Apr 2023 05:03:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8F139280002; Mon, 10 Apr 2023 05:03:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 792D928000A; Mon, 10 Apr 2023 05:03:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 62DDE280002 for ; Mon, 10 Apr 2023 05:03:43 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 3433E1602B9 for ; Mon, 10 Apr 2023 09:03:43 +0000 (UTC) X-FDA: 80664893526.25.4CE476A Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by imf04.hostedemail.com (Postfix) with ESMTP id 451F740010 for ; Mon, 10 Apr 2023 09:03:37 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf04.hostedemail.com: domain of wubo@huaweicloud.com designates 45.249.212.56 as permitted sender) smtp.mailfrom=wubo@huaweicloud.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1681117421; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CUzIBBcYHUS8dnbpPFBioAyzYLkW7BJs+ai/03OUfe8=; b=4j/NgZLJtBbTHTQvd5AdtGJj4f8A88OiaScid09LevtrCj6EX7caSPMn9pRRs7kwrUEvER StiUp+hxVrAJu6qg/2amZQ732pljb1PbPdzXSYM+LMwAcxJ8FPdmp04I9AsJDZIVTj7hNC XkqmMkcQaoLRbUVkut0XNPev8JyNeuo= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf04.hostedemail.com: domain of wubo@huaweicloud.com designates 45.249.212.56 as permitted sender) smtp.mailfrom=wubo@huaweicloud.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681117421; a=rsa-sha256; cv=none; b=6k6JI7AoDLHS2zx+IstMnEsFAQlNFR28bsqiltiTEmeUy2ktvBYn0ule/w1JGd6UMkm2hB jhE/dHr4jfF1ZNlDLHbLeGF2qH5mVMMLSEOWkjLuanyMrbKhsQOorHvrKhKmir9xWsoifG 7obWGo8lTMaphkZt+h7ZeJ4sW5EiYWs= Received: from mail02.huawei.com (unknown [172.30.67.153]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4Pw30z18wDz4f3nqc for ; Mon, 10 Apr 2023 17:03:31 +0800 (CST) Received: from [10.174.179.189] (unknown [10.174.179.189]) by APP4 (Coremail) with SMTP id gCh0CgCnXLDj0DNkTYRoHA--.49143S2; Mon, 10 Apr 2023 17:03:32 +0800 (CST) Message-ID: Date: Mon, 10 Apr 2023 17:03:31 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.7.0 Subject: Re: [RFC PATCHv2] mm: introduce defer free for cma To: "zhaoyang.huang" , Andrew Morton , Minchan Kim , Joonsoo Kim , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Zhaoyang Huang , ke.wang@unisoc.com References: <1681116395-18633-1-git-send-email-zhaoyang.huang@unisoc.com> Content-Language: en-US From: Wu Bo In-Reply-To: <1681116395-18633-1-git-send-email-zhaoyang.huang@unisoc.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-CM-TRANSID:gCh0CgCnXLDj0DNkTYRoHA--.49143S2 X-Coremail-Antispam: 1UD129KBjvJXoWxuFyruFWkJry5AFyDXr48Xrb_yoW5ZrW7pF 1rGry5ArWrJrnF9rW3ZaykuryYvrs2kFy3KrZ7C343JF9xJFnxXw48C3WUAF1rGrykWF4I qFWYgasF93WUtFDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUyKb4IE77IF4wAFF20E14v26r4j6ryUM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rwA2F7IY1VAKz4 vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7Cj xVAFwI0_Cr0_Gr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I 0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40E x7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8JwAm72CE4IkC6x 0Yz7v_Jr0_Gr1lF7xvr2IY64vIr41lc7I2V7IY0VAS07AlzVAYIcxG8wCF04k20xvY0x0E wIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E74 80Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0 I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVCF04 k26cxKx2IYs7xG6rW3Jr0E3s1lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY 1x0267AKxVWUJVW8JbIYCTnIWIevJa73UjIFyTuYvjxUrR6zUUUUU X-CM-SenderInfo: pzxe0q5kxd4v5lfo033gof0z/ X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 451F740010 X-Stat-Signature: xmbok7731s3uhf1zrno1bdkj9t9p47p4 X-HE-Tag: 1681117417-423884 X-HE-Meta: U2FsdGVkX1+f8CQSjuglKQerTkoDTyX1vOq+NCN4iLA3qjtczLuoOaUZSPydIvoE8/EZTJJlWdNSwTkJw156dqdiqwJZlUsl6EuraNCgXQ7wYs+8IJm53UgAZCYlQKYZPlWfytKoTRu8pH76N+Dav/8duspSOTF5/azxbUUxBUeisZY38PzFLAIla0F/r97bfXu0tRFVRgKHH5WAetWQQ47ElvKAxSCVGKOhlD+PsIN7aqgjKNL9YzBfWSfwrK6qe9E52oHAfom4eqbaFvcazFA2Os78WOWKwLb3An78O+/0nUvGBvMNdB0rGimjk3ify1sbbrfTU/b3eflyUYWUSaij8YF4RXuwSgmCPsEBt7XquR7dJyM4Rmt+yyZCM4RLJz1GbU6i0oQ5v8kAnyZ8cUxundLqCyw1roqFtDE+Vlg4+H4cV49lNaVY2HFUg4JoQ4UFSNRul+5KgRcyncxPClojmHGMLaSC5ZVXwZNM2JlcdLlTdjYsfTciBGh5IgJKdLvkWP02TR+mVhzJqF3VdQ0Hon7PTwd/EvNop5wSQms0btULRboR7MqZcaMN3USiki8x9AlNPXd2Woi/L1chWtiUAqabUSYt/gdpV0hoTs2qtHsG9gB7UeJdGL9xxMZMM+YyDDhj88T6vUCaXUFMGtnqyf9yrCSxkAL64+bF0kBV3eaCucjZac6O9SW7SEkXUk9uxlN82Mj7dfrHf3tviqf5R6EbesCwSM+pf8QJMnYPPUghWoncX3uqReG8UcLQcB8XvqsgJsPMbg3S8VwNFPTpIbAdiSFr6iRKkBh1ll9w2D8XwOItB1Pa3IPFNGGgVgt1Haufy3MWIbarEaqEbhLV56ZSUbokA4RY2KuQnBrdkM3IpGIFCyf2BlBfVJ/ZiqQ2n2SkbNDe7wvPSpe+uxQMIT3RW0kg4TwcFKZk6XvEpm59wx3GzGrIP5cAveschFN8faaGCVsZIKmJ76E NUUsAHDX f+N6Jow66Fe4X3npWpim2xmIngQiw1oq1u0LTSzhq/3qCwLIY2KONaodrEcXTJTogT2AYotnI+IihCA/nb57Svm13+vdrwd2E0x19wur5JyGNCcXf+ChYDZMaiHLwvARknEwPEXi4kf/fYUsvTDAhqt7/deTSsb6JuFCG+66ze3SYwZgsjj68jURXymu56HezPbUmgaa6pPy77cTCTIScFJRXa6l+0YmPhAc80A9glYXa5/vsRrKLWeOCiw== 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: On 2023/4/10 16:46, zhaoyang.huang wrote: > From: Zhaoyang Huang > > Continues page blocks are expensive for the system. Introducing defer free > mechanism to buffer some which make the allocation easier. The shrinker will > ensure the page block can be reclaimed when there is memory pressure. > > Signed-off-by: Zhaoyang Huang > --- > v2: fix build warning and regist shrinker > --- > --- > mm/cma.c | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- > mm/cma.h | 11 +++++ > 2 files changed, 160 insertions(+), 2 deletions(-) > > diff --git a/mm/cma.c b/mm/cma.c > index 4a978e0..6d2fd24 100644 > --- a/mm/cma.c > +++ b/mm/cma.c > @@ -39,6 +39,10 @@ > unsigned cma_area_count; > static DEFINE_MUTEX(cma_mutex); > > +static unsigned long cma_defer_free_count(struct shrinker *shrinker, > + struct shrink_control *sc); > +static unsigned long cma_defer_free_scan(struct shrinker *shrinker, > + struct shrink_control *sc); > phys_addr_t cma_get_base(const struct cma *cma) > { > return PFN_PHYS(cma->base_pfn); > @@ -153,6 +157,20 @@ static int __init cma_init_reserved_areas(void) > } > core_initcall(cma_init_reserved_areas); > > +static unsigned long cma_free_get(struct cma *cma) > +{ > + unsigned long used; > + unsigned long val; > + > + spin_lock_irq(&cma->lock); > + /* pages counter is smaller than sizeof(int) */ > + used = bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma)); > + val = cma->count - ((u64)used << cma->order_per_bit); > + spin_unlock_irq(&cma->lock); > + > + return val; > +} > + > void __init cma_reserve_pages_on_error(struct cma *cma) > { > cma->reserve_pages_on_error = true; > @@ -212,6 +230,13 @@ int __init cma_init_reserved_mem(phys_addr_t base, phys_addr_t size, > cma_area_count++; > totalcma_pages += (size / PAGE_SIZE); > > + cma->batch = cma->count >> 1; > + cma->shrinker.count_objects = cma_defer_free_count; > + cma->shrinker.scan_objects = cma_defer_free_scan; > + cma->shrinker.seeks = DEFAULT_SEEKS; > + cma->shrinker.batch = 0; > + > + register_shrinker(&cma->shrinker, "cma-shrinker"); > return 0; > } > > @@ -411,6 +436,46 @@ static void cma_debug_show_areas(struct cma *cma) > static inline void cma_debug_show_areas(struct cma *cma) { } > #endif > > +static int cma_defer_area_fetch(struct cma *cma, unsigned long pfn, > + unsigned long count) > +{ > + struct cma_defer_free_area *area; > + unsigned long new_pfn; > + int ret = -1; > + > + if (!atomic64_read(&cma->defer_count)) > + return ret; > + if (count <= atomic64_read(&cma->defer_count)) { > + spin_lock_irq(&cma->lock); > + list_for_each_entry(area, &cma->defer_free, list) { > + /*area found for given pfn and count*/ > + if (pfn >= area->pfn && count <= area->count) { > + list_del(&area->list); > + /*set bits for allocated pfn*/ > + bitmap_set(cma->bitmap, pfn - cma->base_pfn, count); > + kfree(area); > + atomic64_sub(count, &cma->defer_count); > + /*release the rest pfn to cma*/ > + if (!list_empty(&cma->defer_free) && (pfn == area->pfn)) { There is a null pointer reference here?