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 A63D7C369BD for ; Wed, 16 Apr 2025 13:50:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 66CBA6B020E; Wed, 16 Apr 2025 09:50:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 616226B020F; Wed, 16 Apr 2025 09:50:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4B7CB6B0246; Wed, 16 Apr 2025 09:50:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 2C5906B020E for ; Wed, 16 Apr 2025 09:50:33 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 75728C05D2 for ; Wed, 16 Apr 2025 13:50:34 +0000 (UTC) X-FDA: 83340041988.19.131C844 Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by imf15.hostedemail.com (Postfix) with ESMTP id 804C1A0003 for ; Wed, 16 Apr 2025 13:50:32 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="Ysm/x9aQ"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf15.hostedemail.com: domain of urezki@gmail.com designates 209.85.167.51 as permitted sender) smtp.mailfrom=urezki@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744811432; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Qz/kM7z+Cf6qmCgmVZXIwpgfudi7qnPo/gQOd9cA2Mo=; b=L5K8sl155VWBkG4Hm1/cjZdA/WLuGs+Q9uyU+p+IP9xHG3H6YUmWAt2Gchwsl9aSkdJcNJ oqYbVYs1Bm1S6fFgceMa+1hlatu4Wp9PFp1/mVJ3LrI1uD1MLvafrK+J/2TRuo1JW4rl5s o43Jt+46/HZNQmZDdTm4Iz3fH/XR+/M= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="Ysm/x9aQ"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf15.hostedemail.com: domain of urezki@gmail.com designates 209.85.167.51 as permitted sender) smtp.mailfrom=urezki@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744811432; a=rsa-sha256; cv=none; b=muPQcALgaTmvSSNlyr4itCwXqDSIZ7aCaT5mvIcIe4u5VsKW+w5spdey9sB/pO6sfpmaoP Mm/CKv7+ojke3FYQUQ47UrONyRb+Fg6HvuhMo1U3l6vI9vkq2+3Oo1pkNaWMPY6UJfdu0p sO60lZTjkFCu9tbksqpYqhgmrYFZgVk= Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-54addb5a139so7585348e87.0 for ; Wed, 16 Apr 2025 06:50:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744811431; x=1745416231; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:from:to:cc:subject:date:message-id:reply-to; bh=Qz/kM7z+Cf6qmCgmVZXIwpgfudi7qnPo/gQOd9cA2Mo=; b=Ysm/x9aQVI+cuCnKfaN6A/lZ/9Vxa5wa5OCbBDzDpr4+K0SHInVeyvr4ASDtoGOqNE pJTh2Ikz9T0nJqJ4KjLTrv4lygEJjZKoZ7KuhMuEdIj6gzodhTvxvkm/fCRg4WhM6NDB DVZ/OkHVKPSRcAw+m8wR7w+ULP0U3V+S6WZgddz1HO7q/SkYOilAocgl6syyRJrHdY5V 0rS+mLa2Ff7/xFrGwcFJ9wmrS7SNQeIVOQL7oenIJIvumxxtOABg/M/JT4eP4Vq3vCvN 5LhIDy0Mf9/fT1yepSUEdEgudCgswdQ+8bP5zoYJ71Ye7KZxLfUE3cG80YqVinEPiBz2 9h8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744811431; x=1745416231; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Qz/kM7z+Cf6qmCgmVZXIwpgfudi7qnPo/gQOd9cA2Mo=; b=BcbZglZ2/ZHjAS+6iAv7YeCh84vOQeDmPEDJrYiohv0x5uUm6TBn4aZ2evbzjnXLZE NdxQcHjTiN45BmeNusTPSgD5jkNJnjAnYfFLr9CeCzR3+p0/91eA3eDsj6RWZoFsS/SN 7lwg2GR7MLHTMqBmjz7OhjYnqwOInKrzyvDs12MYanHB4+bffJtbqf2e9AhYQxSi6CrF l+s7dMoTYv4PS/U0wjpUPIyyMGp7aLporcwjqkJb7O1govZ/yKeUPNElsdsZmARNgM3A WuD0GloX1RW5hD38W+PqSqmHlMgkD6CZH1mAhNSDRhW0lO+T1+8kVwZlB+hr6OccsmG6 a4Lw== X-Gm-Message-State: AOJu0YzmmIFHhySCLxYU7EgCrYDJr+9HC7nXEAIZKFvEum6XpSXl2gHD h9PPKwAhuBEcjZhl2iQeKrcN63kYttFOcnSLfcN2KZd/z9ioh/I1 X-Gm-Gg: ASbGncutdxILPdY9MsqoTD0VW9YizYiZjCd79QxAjbArZKfycTBEX/ZVYPVegqMSREn sKcKD0I5zY5tG3t53/uNqe5DRRqCiXKUUpI1JjuknIQyPjHsyZ4Vr/caJTEbNUUZTodBqUI6DGB vJjuKBDTb4aLbEDrBVI/7CgBfoxvLzAYlCD+bS6gFw2xsuf0FL5VdH0kuPebBFWR5ms70oETKoR Eht/k+kO5CC86Xwaq1j2csT02nn8rSbOt9YeYN9CfYIuRnRMWY9JFz2xlHTg3/am4oOaAtPkO2n uOYoEnajw1XtxK4xlz6HsBZR1YeQspzwRFEdhhVOPo/UN1zMPCUIKCyInZ/jsBtd1dXz X-Google-Smtp-Source: AGHT+IG3SR/JrSxS7Hp9wDEWjryCRKGfud7qFC6YuLJcuuxb2V0WRAZnz0EpA3wF4xfmIvB4KIHF1w== X-Received: by 2002:a05:651c:244:b0:30d:dad4:e06f with SMTP id 38308e7fff4ca-3107f694abbmr8064061fa.2.1744811430417; Wed, 16 Apr 2025 06:50:30 -0700 (PDT) Received: from pc636 (host-90-233-217-52.mobileonline.telia.com. [90.233.217.52]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-30f465d5ca7sm23418681fa.66.2025.04.16.06.50.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Apr 2025 06:50:29 -0700 (PDT) From: Uladzislau Rezki X-Google-Original-From: Uladzislau Rezki Date: Wed, 16 Apr 2025 15:50:27 +0200 To: Baoquan He Cc: linux-mm@kvack.org, akpm@linux-foundation.org, urezki@gmail.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/5] mm/vmalloc.c: optimize code in decay_va_pool_node() a little bit Message-ID: References: <20250415023952.27850-1-bhe@redhat.com> <20250415023952.27850-4-bhe@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250415023952.27850-4-bhe@redhat.com> X-Stat-Signature: unkqnsronxwomcehf4o8r9fcoe97g9ks X-Rspamd-Queue-Id: 804C1A0003 X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1744811432-612819 X-HE-Meta: U2FsdGVkX18nwJl7j+s75MXYy+NPBSejnmC05KcKpmYgr4gnJZnw38jfIYXtop55ms1Jss0at6nWTSK8JxN7JXzm9l2zNQmGVffxp3Afq4vxmhhMthpAWphjClL9iRdcEPcmIDPnI8k/Og055xSlPwCGKHG/VwjfITPe9DT4RejyZ1zZuZAE4sTtpycWvw1Ikg4X0UAqXGl4pPOwL8lW8xuLQR14emog/7PgyFQYzcbx2aXsMvJ6dHCo1IfhUZsakQE7bN5Xx4s7z+qP9Z13m/0od/HtM5tUm+ZZFXfbq87XcjUEa5hFnyVmppVjQqai/Uls2HM9DomtuGETWF5BeM63Y+OYVcoKeWRHz+M3+qyQ5Pt2jQJmX3Z+ZRyYenxEAZJemU6JbQX1aH8IQWHprTTWy7SLlLbu4O1AtlEsO2hbAe1fMovQMWc0TKmctPg34XsrKgAThx+woITIl5gkI1SMInqQZs+jg+08/Ok37QIuk3o9VihJhBA8JooQqarFhuyABS1YWJmV8H/E+m2hj16puKR1Bt0O1OvYiBUDHjsB819OpKGcNQkM8IyY/2i6OCWleA9lVM/1BdjxHsJfjW/JrPRZW1jej/VbxJxPQvd5IXEvZ7DtykzVfDWt58lIo3eKdNPfHjRitn5bZQxn55XtTnDtD+Iy2mMnAIgTrbx+2wOaFpdkoyb+8QA7J3oIZL+92wq9kBoEXc0WJNbzFLL44EsSBVE9F9MjBIIFkrGQxjA1J/vMkd39VIlqQ4JMKzqZQnrYGSICUuDTTddj2hOC0XdZ2/lesmBdLv1lz/LXhoRRAy5wqkWbGYsvQRJs7Ki9ZxmsOuad5Zjxqz8msiA7HEC2uO8lQ0WM7jYF8pqDwlrtWBLDs5wv4MF+qymhioRcJM0TjNbDTcQpN93404I4CWX4Zeyx5FQmo4QA3kT8qWh3JSf68AkeP7o34lpgWn6a8v5BeaACrHZ102l 1zMnLJZL OdsIMgk0vf5UwX2hmKOEDurDJChyiR5MmYprf+O5QQXDWF81gpHDOFEVugRH+Z2+9vhv/Rf/GWxeLd2v+uo2X7AXbeeTT99gJKOSu1p6kmZcrXSDnkTvjeVDZ8pkqx+YUgTzC17nySCN3I1HRKL5xb2WljlayfeqXv41napVQ8nWEgGjErDM/4YCc+dv/gtlrA6P8dHDAH1xvI68jWtOnzh5ko2Dt8Rxyt5nTx5HsB+IOm1cqnV/QcKJT9KM4I/8di4cS04K3x12tt3Y/wGFXNEhve/12KaN++JSG+biCvD0x8s+ejiE/hJ9NNv5W1de88NhhWIikpymx2Apd5VgSB68PIKcdYPm0PpiQuPv+nCihSgovAaz8mqOD05frrW2DEB0cVgBUB8nrYQ50/VBk/dLuaQ0++eNcR49NYLBJpDFTZyMJL+aNy92JKCcQcM7DlqulyYdLLgiOso1Cz+3EyfPb9f/JVpIzLcV+KEdSNAH06lgC4NNDZF7avw== 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: List-Subscribe: List-Unsubscribe: On Tue, Apr 15, 2025 at 10:39:50AM +0800, Baoquan He wrote: > When purge lazily freed vmap areas, VA stored in vn->pool[] will also be > taken away into free vmap tree partially or completely accordingly, that > is done in decay_va_pool_node(). When doing that, for each pool of node, > the whole list is detached from the pool for handling. At this time, > that pool is empty. It's not necessary to update the pool size each time > when one VA is removed and addded into free vmap tree. > > Here change code to update the pool size when attaching the pool back. > > Signed-off-by: Baoquan He > --- > mm/vmalloc.c | 23 +++++++++++------------ > 1 file changed, 11 insertions(+), 12 deletions(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 488d69b56765..bf735c890878 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -2150,7 +2150,7 @@ decay_va_pool_node(struct vmap_node *vn, bool full_decay) > LIST_HEAD(decay_list); > struct rb_root decay_root = RB_ROOT; > struct vmap_area *va, *nva; > - unsigned long n_decay; > + unsigned long n_decay, len; > int i; > > for (i = 0; i < MAX_VA_SIZE_PAGES; i++) { > @@ -2164,22 +2164,20 @@ decay_va_pool_node(struct vmap_node *vn, bool full_decay) > list_replace_init(&vn->pool[i].head, &tmp_list); > spin_unlock(&vn->pool_lock); > > - if (full_decay) > - WRITE_ONCE(vn->pool[i].len, 0); > + len = n_decay = vn->pool[i].len; > + WRITE_ONCE(vn->pool[i].len, 0); > > /* Decay a pool by ~25% out of left objects. */ > - n_decay = vn->pool[i].len >> 2; > + if (!full_decay) > + n_decay >>= 2; > + len -= n_decay; > > list_for_each_entry_safe(va, nva, &tmp_list, list) { > + if (!n_decay) > + break; > list_del_init(&va->list); > merge_or_add_vmap_area(va, &decay_root, &decay_list); > - > - if (!full_decay) { > - WRITE_ONCE(vn->pool[i].len, vn->pool[i].len - 1); > - > - if (!--n_decay) > - break; > - } > + n_decay--; > } > > /* > @@ -2188,9 +2186,10 @@ decay_va_pool_node(struct vmap_node *vn, bool full_decay) > * can populate the pool therefore a simple list replace > * operation takes place here. > */ > - if (!full_decay && !list_empty(&tmp_list)) { > + if (!list_empty(&tmp_list)) { > spin_lock(&vn->pool_lock); > list_replace_init(&tmp_list, &vn->pool[i].head); > + vn->pool[i].len = len; > spin_unlock(&vn->pool_lock); > } > } > -- > 2.41.0 > Which Linux version this patch is based on? I can not apply it. Small nits: diff --git a/mm/vmalloc.c b/mm/vmalloc.c index c909b8fea6eb..0ae53c997219 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2150,7 +2150,7 @@ decay_va_pool_node(struct vmap_node *vn, bool full_decay) LIST_HEAD(decay_list); struct rb_root decay_root = RB_ROOT; struct vmap_area *va, *nva; - unsigned long n_decay, len; + unsigned long n_decay, pool_len; int i; for (i = 0; i < MAX_VA_SIZE_PAGES; i++) { @@ -2164,21 +2164,20 @@ decay_va_pool_node(struct vmap_node *vn, bool full_decay) list_replace_init(&vn->pool[i].head, &tmp_list); spin_unlock(&vn->pool_lock); - len = n_decay = vn->pool[i].len; + pool_len = n_decay = vn->pool[i].len; WRITE_ONCE(vn->pool[i].len, 0); /* Decay a pool by ~25% out of left objects. */ if (!full_decay) n_decay >>= 2; - len -= n_decay; + pool_len -= n_decay; list_for_each_entry_safe(va, nva, &tmp_list, list) { - if (!n_decay) + if (!n_decay--) break; list_del_init(&va->list); merge_or_add_vmap_area(va, &decay_root, &decay_list); - n_decay--; } /* @@ -2190,7 +2189,7 @@ decay_va_pool_node(struct vmap_node *vn, bool full_decay) if (!list_empty(&tmp_list)) { spin_lock(&vn->pool_lock); list_replace_init(&tmp_list, &vn->pool[i].head); - vn->pool[i].len = len; + vn->pool[i].len = pool_len; spin_unlock(&vn->pool_lock); } } on top of this? a) decay in "if" statement, no need extra line; b) rename len to something obvious - pool_len. -- Uladzislau Rezki