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 F1945C77B75 for ; Tue, 23 May 2023 15:21:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 85AA26B0074; Tue, 23 May 2023 11:21:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 80A24900002; Tue, 23 May 2023 11:21:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6D1E26B0078; Tue, 23 May 2023 11:21:16 -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 5F73F6B0074 for ; Tue, 23 May 2023 11:21:16 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 2E1481A0642 for ; Tue, 23 May 2023 15:21:16 +0000 (UTC) X-FDA: 80821883352.22.D0BA81A Received: from verein.lst.de (verein.lst.de [213.95.11.211]) by imf29.hostedemail.com (Postfix) with ESMTP id 5CED812001C for ; Tue, 23 May 2023 15:21:13 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=none; dmarc=none; spf=none (imf29.hostedemail.com: domain of hch@lst.de has no SPF policy when checking 213.95.11.211) smtp.mailfrom=hch@lst.de ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684855274; 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; bh=7QDnqWSHruRVjNC/0GVDj+hKP2JMaowdKmACjKUk0SM=; b=yA2lS9fSSigz7AIACCymZU/hruWfiBY5YGaiGwHowyztAf93SBgyL4jdZWg/0zayzaNrm0 wck2UNYd7mhFCgZGbUsg380JVao0TRWU3n877+d4oAg7ITFnwFxl7cWOg6mK89sOQ8FmGd 7FOLnNtYJT4x7/uFkKvKm0G69nfaHrg= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=none; dmarc=none; spf=none (imf29.hostedemail.com: domain of hch@lst.de has no SPF policy when checking 213.95.11.211) smtp.mailfrom=hch@lst.de ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684855274; a=rsa-sha256; cv=none; b=YcraII9Uk2heruQ2EerGX+FYd/Y2393QXPjaC6Ombpqdy6+rercztayzHOI9rVoA23uxtl 8YlC9KH7zpVVEAplTXCMWh6FigOp2+cTNLvj4XgFpCODjyLklfXQgKv/B39ss9FJhyE204 BuakRr3Yd467ntIO4fde/8S3rCPQTCg= Received: by verein.lst.de (Postfix, from userid 2407) id 4B83D6732D; Tue, 23 May 2023 17:21:10 +0200 (CEST) Date: Tue, 23 May 2023 17:21:10 +0200 From: Christoph Hellwig To: Thomas Gleixner Cc: linux-mm@kvack.org, Andrew Morton , Christoph Hellwig , Uladzislau Rezki , Lorenzo Stoakes , Peter Zijlstra , Baoquan He Subject: Re: [patch 2/6] mm/vmalloc: Avoid iterating over per CPU vmap blocks twice Message-ID: <20230523152110.GB12341@lst.de> References: <20230523135902.517032811@linutronix.de> <20230523140002.634591885@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230523140002.634591885@linutronix.de> User-Agent: Mutt/1.5.17 (2007-11-01) X-Rspamd-Queue-Id: 5CED812001C X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: ikz6h5q5ofejbay31eg36ttdiffpgrmy X-HE-Tag: 1684855273-546592 X-HE-Meta: U2FsdGVkX1+ahG9O+m8k2AFJGUts+2UHxSbkgCdTFnk9QmvVyUUzwPC/qepZ8TtUdjRGxxkEPLal1Y0v9f+Oys6SR1PhLiaRgdLH9WyZkpKCYxwb0on3c6KoWEJXt5iqFQaBYImWbEg3M24Y+nLcRTSsV85vZeN9DLuASzy2mQoW+2hUFgDTK+vrKYf2E5PwgT6zyaQVNsEX55PyDVxn1NqM6uaCIQdNV5dJZx0/m+f//vhO/ZuhNMQgbsfX3ZGYKoMTg6I3PWSQj6WGv9XK2XX6oMkBhg4n9pNlmnTfEWVcgbZbHe07rko+Mbh58ybnypdWO+RRIZvjqGh3aZgcQWVCPSnOHhJxJKDqbjaJQ8MP7tPbmWL1DorSKYGYSCLnEkExBSqyDM2buQUhahXjNA2B54MqBQn8pIln4IrxQUyQgl1fofDD70j6rpa+83/uj7Nh6kPL9A9Ldqt45b9okcXelS8/Ycm/miOOnC2Nma573hgdLoDt59X4yYMCRGNDqTEPr1LmNDb+6U6Z4GiJ6mI20X5RxAkCUZXhm5FgQW7M67dGmHAdu5OpjpLJFLF34zGvruxRx13Q5n9e3N5oX1EMp8lgs4e23a9Hw5AvM8pFACleP5/ZfpLVBRcX7sOnNfJvApalUKIo/r9Da18arFH8Lec+VTagoyEXJt4Va2MwDIwsx9SZmZnWNC6UxXSkadVOKjfeNCClDNpNp7B6uwjT+lDgNGg3T3jHY2T7YxefhhMDaibmmbFAf7QzVScDIxyQQRDM+Dha6pQEovZHuVWmeuSvPtRNN9GCgEpTvX6AMsjo6FfybrUM/gPPh/Aseuk3OH6Wf59KAE7AE/uyTyc4mdPM0DY7c+f653CY2/Tj0/cwlJpHH25l0fFRTfzXGIBL4et6nm5GLiOJI45D5qGFHxeanwumUExqLkff4WYmJA7YfzEGNZkN9S53KzvdHar5SICAyC4kQScUzpt 2hQjT+2w Rksy7qbTN87T62MyFJA0h0jg00ugKZaj5xvB0G34XTO7zVEfCYuIh+t5D6A== 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 Tue, May 23, 2023 at 04:02:12PM +0200, Thomas Gleixner wrote: > _vunmap_aliases() walks the per CPU xarrays to find partially unmapped > blocks and then walks the per cpu free lists to purge fragmented blocks. > > Arguably that's waste of CPU cycles and cache lines as the full xarray walk > already touches every block. > > Avoid this double iteration: > > - Split out the code to purge one block and the code to free the local > purge list into helper functions. > > - Try to purge the fragmented blocks in the xarray walk before looking at > their dirty space. > > Signed-off-by: Thomas Gleixner > --- > mm/vmalloc.c | 66 ++++++++++++++++++++++++++++++++++++++--------------------- > 1 file changed, 43 insertions(+), 23 deletions(-) > > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -2086,39 +2086,52 @@ static void free_vmap_block(struct vmap_ > kfree_rcu(vb, rcu_head); > } > > +static bool purge_fragmented_block(struct vmap_block *vb, struct vmap_block_queue *vbq, > + struct list_head *purge_list) Please stick to 80 character lines for the vmalloc code. And while it's personal preference, two tab indents for the continuation make prototypes like this a lot more readable. a lot easier if you > + if (!(vb->free + vb->dirty == VMAP_BBMAP_BITS && vb->dirty != VMAP_BBMAP_BITS)) > + return false; This comes from the old code, but it does looks almost intentionally obsfucated.. if (vb->free + vb->dirty != VMAP_BBMAP_BITS || vb->dirty == VMAP_BBMAP_BITS) actually gets the logic across much better. > + /* prevent further allocs after releasing lock */ > + vb->free = 0; > + /* prevent purging it again */ extra spaces before the comments. Otherwise the refactoring looks nice, thanks.