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 9CA61C77B75 for ; Tue, 16 May 2023 07:45:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1D174900003; Tue, 16 May 2023 03:45:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 15A7D900002; Tue, 16 May 2023 03:45:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F14B6900003; Tue, 16 May 2023 03:45:15 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id DD0FF900002 for ; Tue, 16 May 2023 03:45:15 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id B2B55120170 for ; Tue, 16 May 2023 07:45:15 +0000 (UTC) X-FDA: 80795332590.18.D686804 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf19.hostedemail.com (Postfix) with ESMTP id ED2DE1A001D for ; Tue, 16 May 2023 07:45:13 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=rIvMj1Jm; spf=pass (imf19.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684223114; 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=AI4MxFX/nCDbLoP8rNmQlcI2Y05K/cb+1FZxTZP5deM=; b=ifiGTX23KD1+QKnbidQetqKeVy3qFibgLiMeWsmk6KwEabw3KRSa1QAlPpH2kyIPHABm/J ZTS1ZVgNLUuj8m2WaKik8x6+rByAECl8yqd80s1bnbB1O2BoxL7PUWW18/eU4FYxs45tOB DfOSlsb5ejKupORYu62Hi7cDkt4oHTg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684223114; a=rsa-sha256; cv=none; b=7ckaLLzDRqXNudkGV7kVu9FhJ61BXrePzf0D6/4HgBDPNZusOcdi+2OxJL1Aj+nRWxmKMR hnDCMEmuTfBQOEYyoL3UhkzmM/ihHZFxDFPGU91k9UnQELF+Xza+ivf07liLN5pi6YoRIL QMZIxDz7r1k7whkGInxbjR/uXyDeaL0= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=rIvMj1Jm; spf=pass (imf19.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id CAA8F61766; Tue, 16 May 2023 07:45:12 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1E556C433D2; Tue, 16 May 2023 07:45:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684223112; bh=7BlG4EAaAQ/2PfJOByK6/yL6MquEqFQSgp+HP1sIrO0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=rIvMj1JmRgzYN1y+iVKqKvOkJp/1DmVR5JlVAwph4mcKzBnAFR1M+UEX/2O3Y+dYv DMj5yrVMHmmg2CPbXLrmFwOXJHHx2cL0finNLS6cke3kiK2QtuKhUD8pMyrYYIJaXH nmcAcHCoPmUrEyHKoc3eY30kwGjwvdx111WWwQl56Eup8W48WkJACGL6YCET7SooA4 iJCWfehbNamCnfrj19DFONCzV5WGoEg0eEIMKBIFXvVwhCnxy2HIanrNdWsPq9f/hH PzUfoASABgYdCIyv32R57oCFO7DoPQbxl67VxGeeguaFbQUXT04PrAJybbPO2nzJPv UhUDEraTb2alQ== Date: Tue, 16 May 2023 10:45:05 +0300 From: Mike Rapoport To: Yuanchu Xie Cc: Andrew Morton , "Liam R . Howlett" , Yang Shi , Zach O'Keefe , Peter Xu , "Kirill A . Shutemov" , Matthew Wilcox , Pasha Tatashin , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH] mm: pagemap: restrict pagewalk to the requested range Message-ID: References: <20230515172608.3558391-1-yuanchu@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230515172608.3558391-1-yuanchu@google.com> X-Rspamd-Queue-Id: ED2DE1A001D X-Stat-Signature: umudfoca133ekgokd5pg3d7bobq84u9y X-Rspam-User: X-Rspamd-Server: rspam09 X-HE-Tag: 1684223113-491879 X-HE-Meta: U2FsdGVkX18NcCaSFhMhGLBGcVePzewdWTEeysTxWmt59lFNEN7VZO+Gnvr51ePYhX3cHQTNvUZrHViAEgwMvpLFhVxj2AgaUBWCQ4z7axIxOVRjan2l/hZnPxWBG5z5DDG2Ko82rDJb/QNtJCCjy6I4alvzqLraW2iP+WD6Bdp2cemOeH5hSlf4sOyIL+PtbSjEaeqBBf0ak0EMSZztn3uTuu975DpYUZ5j21BuWUo462vXnIob7zQ72UaC9UY0fy/ShGQcTVeYB2zQpYwvHk72f5mwK+PS+AMCtv6NMpEJXnmcRgYc64LVCeTw6M1jFKjNlRbgYGxP2qPtN8lN5m9WpVgFjPihEp4Q0jvI2bdjxat4csIQNO5Bdfiw//kl5K2gdZak1swVZk0bBkKPgBquXNMCGluDetX0hiRdPa95kpLS4mlTlPIDN9Bwq9+a/KG02bFrjea5dZ9GioGokIot/rJNaNpkz6plX/80aaYSMQ6dw9Z6TkJLsWZPJLYD837+ZGteNBkYlK4hRljPDDKfoyhJBDgcGSWWBwQ+YgUwVNat2zPV8hd562YnhS1JMwEsLRfBdwktfRDgmjSklACEGlJ0FA0I3wZ9NpV+YeP9uzHY97CO4QI3QnNbpxQ3chMhJb39r2enTIYjsbzWLtuw9gekVJ6qwDazwuzQYpnh+FBwIZ8ig9flDLp1NaNrfnApVbsgAFI2Ob7rYv+GFZV0X+OfhHUh8eNt+Cs9aOJjc0jD/a8AWgh6NxerxgPUkWJY5gBSulJ0WYWAsxi12u3YrZelDGZavSjzemP0RZFWjQ1KO8eBheFrFoH67phWM7Px3NVe5XtVLXAFW1GjFnKgAVTkfdIHF6OwZ4IbFMIhyC9AkG3FkVgcmPBUCSrGQzP1QnK2T8AWDFexeXQBqQdVHuHPVL35poClPk7B7jZZGRV/GTlCty7PX0Ec4WJ3SIbuPyW93ZO54bN6b0X tcqxY0l7 fUqCNzvb2stGexYMljf3ly7zONaZJfKCh4zltrN2kztXX2buz6xel9hEx4OwOsgJnZF6101d82s0G9fNmuGHOxQyICQitrXh+lVOwq0IelCY519XnlcDoMPYgifde/L8N9pKz3rmYFYGf5LE/4baQEfEwEKH2r7G7EGN8hOyABJLBXm23OqEtskl6Aj8alnSplEVtnfmH2I9QMZ4et+ub0VMubeFUB24oW2h2zabYIBaqBcgo/1qhQ4K8AzErIenA8dRyqXfgiwXaOjghZkSHMdb9G9bbeFTyb4PYeaezGZTZl//cimt3tWryTS8IuY4uYt+xVWxIrnvoxYw2fblPO/RnKGWx/fmfFk858axh0uloKDfivm3gR4DTew== 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 16, 2023 at 01:26:08AM +0800, Yuanchu Xie wrote: > The pagewalk in pagemap_read reads one PTE past the end of the requested > range, and stops when the buffer runs out of space. While it produces > the right result, the extra read is unnecessary and less performant. > > I timed the following command before and after this patch: > dd count=100000 if=/proc/self/pagemap of=/dev/null > The results are consistently within 0.001s across 5 runs. > > Before: > 100000+0 records in > 100000+0 records out > 51200000 bytes (51 MB) copied, 0.0763159 s, 671 MB/s > > real 0m0.078s > user 0m0.012s > sys 0m0.065s > > After: > 100000+0 records in > 100000+0 records out > 51200000 bytes (51 MB) copied, 0.0487928 s, 1.0 GB/s > > real 0m0.050s > user 0m0.011s > sys 0m0.039s > > Signed-off-by: Yuanchu Xie Acked-by: Mike Rapoport (IBM) > --- > fs/proc/task_mmu.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c > index 420510f6a545..6259dd432eeb 100644 > --- a/fs/proc/task_mmu.c > +++ b/fs/proc/task_mmu.c > @@ -1689,23 +1689,23 @@ static ssize_t pagemap_read(struct file *file, char __user *buf, > /* watch out for wraparound */ > start_vaddr = end_vaddr; > if (svpfn <= (ULONG_MAX >> PAGE_SHIFT)) { > + unsigned long end; > + > ret = mmap_read_lock_killable(mm); > if (ret) > goto out_free; > start_vaddr = untagged_addr_remote(mm, svpfn << PAGE_SHIFT); > mmap_read_unlock(mm); > + > + end = start_vaddr + ((count / PM_ENTRY_BYTES) << PAGE_SHIFT); > + if (end >= start_vaddr && end < mm->task_size) > + end_vaddr = end; > } > > /* Ensure the address is inside the task */ > if (start_vaddr > mm->task_size) > start_vaddr = end_vaddr; > > - /* > - * The odds are that this will stop walking way > - * before end_vaddr, because the length of the > - * user buffer is tracked in "pm", and the walk > - * will stop when we hit the end of the buffer. > - */ > ret = 0; > while (count && (start_vaddr < end_vaddr)) { > int len; > -- > 2.40.1.606.ga4b1b128d6-goog > > -- Sincerely yours, Mike.