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 86631C369B4 for ; Tue, 15 Apr 2025 02:40:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 496BD2800BB; Mon, 14 Apr 2025 22:40:18 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4456A280075; Mon, 14 Apr 2025 22:40:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2C1112800BB; Mon, 14 Apr 2025 22:40:18 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 05267280075 for ; Mon, 14 Apr 2025 22:40:17 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 36BCD120B19 for ; Tue, 15 Apr 2025 02:40:19 +0000 (UTC) X-FDA: 83334724158.17.FCA01D5 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf20.hostedemail.com (Postfix) with ESMTP id 76BAB1C0003 for ; Tue, 15 Apr 2025 02:40:17 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=g2pAhOLz; spf=pass (imf20.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744684817; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=aHl/Z9s4nujmOJmJ3+sr23NFZCZ38U3X11XyM8VuKPk=; b=snwAPqvLVw/gARUti4Frb/3EkOWxnzRaw5D8PtoKnwTFo/vYR0WmG1zXtfnnUArgERv6Ut 0KECTXMrGr6V4DeGU36TsTI+cgtcRvY5nIDnU19baYjPQK3nc1AyWxD+eTfaowig+Dh9e+ 5vy+vhUxG0X4px6jwpeGQGWrqF4bwC4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744684817; a=rsa-sha256; cv=none; b=F5kijbHfLYy7TfTAQOLeA2PxjwiUwsV9WMKV3EV6N4VL4NTn5gbjzM9oMkeuhofbYqZDTd EswS9G7mbtp25TM9knjzw1fUYU+rgDfiKidPdm+hVSnBEbQ4NV9EfBUGvyc3lCuuAX922t PKM1g5f4xSZ9k7F9Y+UlvMaVp8B9ujU= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=g2pAhOLz; spf=pass (imf20.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744684816; h=from:from: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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=aHl/Z9s4nujmOJmJ3+sr23NFZCZ38U3X11XyM8VuKPk=; b=g2pAhOLzA1h6i64ebfLAUdZjScB3BmpYcvDMxk2h7ZH356BeCRBYqC17YFTvQnCuh+FFEk dbfq0Hp81t6df4yzMdpSHRoOWK4F6Iz6O9mrzoiTT9dLtVKT29NDLhCPpVtwmHTzaooD+Z xSPAfqS6jvBF9zAi8fTr2TjR1ozKBo8= Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-618-Y0MOwrwTNliPZTXflYU4iw-1; Mon, 14 Apr 2025 22:40:12 -0400 X-MC-Unique: Y0MOwrwTNliPZTXflYU4iw-1 X-Mimecast-MFC-AGG-ID: Y0MOwrwTNliPZTXflYU4iw_1744684811 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 4425419560BB; Tue, 15 Apr 2025 02:40:11 +0000 (UTC) Received: from MiWiFi-R3L-srv.redhat.com (unknown [10.72.112.37]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4D45E180AF7C; Tue, 15 Apr 2025 02:40:07 +0000 (UTC) From: Baoquan He To: linux-mm@kvack.org Cc: akpm@linux-foundation.org, urezki@gmail.com, linux-kernel@vger.kernel.org, Baoquan He Subject: [PATCH 3/5] mm/vmalloc.c: optimize code in decay_va_pool_node() a little bit Date: Tue, 15 Apr 2025 10:39:50 +0800 Message-ID: <20250415023952.27850-4-bhe@redhat.com> In-Reply-To: <20250415023952.27850-1-bhe@redhat.com> References: <20250415023952.27850-1-bhe@redhat.com> MIME-Version: 1.0 Content-type: text/plain Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Stat-Signature: 8jb3ynj3e9btrb5e6hpoh8bp4e65w8qc X-Rspam-User: X-Rspamd-Queue-Id: 76BAB1C0003 X-Rspamd-Server: rspam08 X-HE-Tag: 1744684817-845300 X-HE-Meta: U2FsdGVkX1+QP6pmv3GeuFfysoxOXDKhH1Zhc3t3O/raqCrjCo5sOF88c9vqdPHvF3cFyHx2zm30kKaCcpm0r4tSJdu7a8tYyE88HwK7Pf3DQEA9fREBMPsbbIq0ta3butdO3NE/eQsDV0wUaReow+ifKHRhTIv1be96RF2qYgARxrIs4xR38dh30BGu5CR4yBt9kR3vzvA5cJ/qUumpWOkFFy04OjQBkplxpKFH7pd7ax5KkE1wRP/w96oe/IzA/QQbv85sd0H1ILZ+JwAff3WPE33F/GoJmLwu+hocQ5IZcfXAVMrEeuyHnMumDtMrG5zBJIje4ft0KM8Zad83+onh9QX79tJtRSpSjXCL0JKFDpLI4vwHm1uC0sZRxzI/eJSr0NgA3CFWlWP0z9qyE8T7TgaedjZDAQtjFvuuIikqI8t2gRkQP0gTmb0jyLC0HHJztXrs9oyoRuZfRxjwfpjjeVMaVdrh0aZiL7pBkBwCddApLEkaXMwX1NvSYm4jhsqdaaOcu1y+yVmsMu6rDPS6R56xL1ZuSOIGbl3uoaEVfBq6ZlPu27nxhfYBeUExYRbc2bvfwuobRJFkktWw73mfI1asdnNBHJH42LTfOFeC30EK1NUZHzqmz52wA1I7InYseQ9LIFYBVYYFANxleIIQ4UpRok6Q/evgPocAjAz+lWOh8lx697iYsCzmGEWrOTzBVQZvWKHpec1L6Kz4XHMrXjHSlmN4hj+9BBF+JZAb2k4O7vB2fgI7njSW649oCzIvceP92+ATVAqk/9Boz5w6Zcpobzvd8OUqAcdAG70HimXBNeyKI0lVL11JcwecnoZyTWD6eZI3GdI4COqxYpkYV3M7cEZGLRF/gAlaZvhwwh+J0aEheU/2QyZVB96jIsaPvlfeT1GWWfwdmYZrCRasMfIpk3eWMnktYgNEG14ujhwoy6iaMR2FhNmj83YNFEHXR62IFpLzzrNE/uC sj0DN3TQ p7FLw5HO5SLu0+JR2u64wnFrSWv6WcXi1PkYX0qmGlI4nQOo+O9OAeG40hSLNqN8OgUYfmArim2JctmpF9a2it17wscmx6ewflWfxfsoLCOIoAjD3wo30TpeBEHY75orq0IMTHDRSviFa4o/wp3XCA0v7OBk22nw4CUqeGoAV6gy4zjGG/PG6i+P7PvstQrXLBRVZDJU+J7oSUFbkFbmSRv+2p4O3X8OH43/yMQfdSz3JFcbGkLkKjxjUp/2BM80ZNWl1+xM6DAsYegzdA7BpbT5Xxm87nMOl8SMuVlIkPb7RMycahNicI4R7duuHAb+6Dn5IAEyY7MrJakhaVjCgCbFJ9hrJwx+Zjs7VaTVve0ur7FI2mYvqOi6QkGsiyBCjcIXTIO67ZDVC4tzoRLLY2UYvLqVawKV6Bg6z 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: 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