linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: Anshuman Khandual <anshuman.khandual@arm.com>, linux-mm@kvack.org
Cc: Andrew Morton <akpm@linux-foundation.org>,
	David Hildenbrand <david@redhat.com>,
	Ryan Roberts <ryan.roberts@arm.com>,
	"Mike Rapoport (IBM)" <rppt@kernel.org>,
	Arnd Bergmann <arnd@arndb.de>,
	x86@kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-fsdevel@vger.kernel.org, kasan-dev@googlegroups.com,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH V2 0/7] mm: Use pxdp_get() for accessing page table entries
Date: Wed, 25 Sep 2024 12:05:33 +0200	[thread overview]
Message-ID: <f40ea8bf-0862-41a7-af19-70bfbd838568@csgroup.eu> (raw)
In-Reply-To: <20240917073117.1531207-1-anshuman.khandual@arm.com>



Le 17/09/2024 à 09:31, Anshuman Khandual a écrit :
> This series converts all generic page table entries direct derefences via
> pxdp_get() based helpers extending the changes brought in via the commit
> c33c794828f2 ("mm: ptep_get() conversion"). First it does some platform
> specific changes for m68k and x86 architecture.
> 
> This series has been build tested on multiple architecture such as x86,
> arm64, powerpc, powerpc64le, riscv, and m68k etc.

Seems like this series imply sub-optimal code with unnecessary reads.

Lets take a simple exemple : function mm_find_pmd() in mm/rmap.c

On a PPC32 platform (2 level pagetables):

Before the patch:

00001b54 <mm_find_pmd>:
     1b54:	80 63 00 18 	lwz     r3,24(r3)
     1b58:	54 84 65 3a 	rlwinm  r4,r4,12,20,29
     1b5c:	7c 63 22 14 	add     r3,r3,r4
     1b60:	4e 80 00 20 	blr

Here, the function reads mm->pgd, then calculates and returns a pointer 
to the PMD entry corresponding to the address.

After the patch:

00001b54 <mm_find_pmd>:
     1b54:	81 23 00 18 	lwz     r9,24(r3)
     1b58:	54 84 65 3a 	rlwinm  r4,r4,12,20,29
     1b5c:	7d 49 20 2e 	lwzx    r10,r9,r4	<= useless read
     1b60:	7c 69 22 14 	add     r3,r9,r4
     1b64:	7d 49 20 2e 	lwzx    r10,r9,r4	<= useless read
     1b68:	7d 29 20 2e 	lwzx    r9,r9,r4	<= useless read
     1b6c:	4e 80 00 20 	blr

Here, the function also reads mm->pgd and still calculates and returns a 
pointer to the PMD entry corresponding to the address. But in addition 
to that it reads three times that entry while doing nothing at all with 
the value read.

On PPC32, PMD/PUD/P4D are single entry tables folded into the 
corresponding PGD entry, it is therefore pointless to read the 
intermediate entries.

Christophe


      parent reply	other threads:[~2024-09-25 10:05 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-17  7:31 Anshuman Khandual
2024-09-17  7:31 ` [PATCH V2 1/7] m68k/mm: Change pmd_val() Anshuman Khandual
2024-09-17  8:40   ` Ryan Roberts
2024-09-17 10:20   ` David Hildenbrand
2024-09-17 10:27     ` Ryan Roberts
2024-09-17 10:30       ` David Hildenbrand
2024-09-17  7:31 ` [PATCH V2 2/7] x86/mm: Drop page table entry address output from pxd_ERROR() Anshuman Khandual
2024-09-17 10:22   ` David Hildenbrand
2024-09-17 11:19     ` Dave Hansen
2024-09-17 11:25       ` Anshuman Khandual
2024-09-17 11:31       ` David Hildenbrand
2024-09-17  7:31 ` [PATCH V2 3/7] mm: Use ptep_get() for accessing PTE entries Anshuman Khandual
2024-09-17  8:44   ` Ryan Roberts
2024-09-17 10:28   ` David Hildenbrand
2024-09-18  6:32     ` Anshuman Khandual
2024-09-19  8:04       ` David Hildenbrand
2024-09-19  9:20         ` Anshuman Khandual
2024-09-17  7:31 ` [PATCH V2 4/7] mm: Use pmdp_get() for accessing PMD entries Anshuman Khandual
2024-09-17 10:05   ` Ryan Roberts
2024-09-18 18:57   ` kernel test robot
2024-09-19  7:21     ` Anshuman Khandual
2024-09-18 19:07   ` kernel test robot
2024-09-19  7:12     ` Anshuman Khandual
2024-09-17  7:31 ` [PATCH V2 5/7] mm: Use pudp_get() for accessing PUD entries Anshuman Khandual
2024-09-17  7:31 ` [PATCH V2 6/7] mm: Use p4dp_get() for accessing P4D entries Anshuman Khandual
2024-09-17  7:31 ` [PATCH V2 7/7] mm: Use pgdp_get() for accessing PGD entries Anshuman Khandual
2024-09-18 20:30   ` kernel test robot
2024-09-19  7:55     ` Anshuman Khandual
2024-09-19  9:11       ` Russell King (Oracle)
2024-09-19 15:48         ` Ryan Roberts
2024-09-19 17:06           ` Russell King (Oracle)
2024-09-19 17:49             ` Ryan Roberts
2024-09-19 20:25               ` Russell King (Oracle)
2024-09-20  6:57                 ` Ryan Roberts
2024-09-20  9:47                   ` Russell King (Oracle)
2024-09-23 15:21                     ` Ryan Roberts
2024-09-25 10:05 ` Christophe Leroy [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f40ea8bf-0862-41a7-af19-70bfbd838568@csgroup.eu \
    --to=christophe.leroy@csgroup.eu \
    --cc=akpm@linux-foundation.org \
    --cc=anshuman.khandual@arm.com \
    --cc=arnd@arndb.de \
    --cc=david@redhat.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=rppt@kernel.org \
    --cc=ryan.roberts@arm.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox