linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: heechul@illinois.edu (heechul Yun)
To: linux-arm-kernel@lists.infradead.org
Subject: Unnecessary cache-line flush on page table updates ?
Date: Fri, 1 Jul 2011 14:42:00 -0700	[thread overview]
Message-ID: <BANLkTi=KVnzBKcd83c9T3P20VAv-ggqR4g@mail.gmail.com> (raw)
In-Reply-To: <20110701101019.GA1723@e102109-lin.cambridge.arm.com>

Great.

Removing the PTE flush seems to have a noticeable performance
difference in my test. The followings are lmbench 3.0a performance
result measured on a Cortex A9 SMP platform. So far, I did not have
any problem while doing various test.

=========
mm-patch:
=========
Pagefaults on /tmp/XXX: 3.0759 microseconds
Process fork+exit: 464.5414 microseconds
Process fork+execve: 785.4944 microseconds
Process fork+/bin/sh -c: 488.6204 microseconds

=========
original:
=========
Pagefaults on /tmp/XXX: 3.6209 microseconds
Process fork+exit: 485.5236 microseconds
Process fork+execve: 820.0613 microseconds
Process fork+/bin/sh -c: 2966.3828 microseconds

Heechul

On Fri, Jul 1, 2011 at 3:10 AM, Catalin Marinas <catalin.marinas@arm.com> wrote:
> On Fri, Jul 01, 2011 at 08:04:42AM +0100, heechul Yun wrote:
>> Based on TRM of Cortex A9, the MMU reads page table entries from L1-D
>> cache not from memory. Then I think we do not need to flush the cache
>> line in the following code because MMU will always see up-to-date view
>> of page table in both UP and SMP systems.
>>
>> linux/arch/arm/mm/proc-v7.S
>>
>> ENTRY(cpu_v7_set_pte_ext)
>> ? ? ? ...
>> ? ? ? ? mcr ? ? p15, 0, r0, c7, c10, 1 ? ? ? ? ?@ flush_pte from
>> D-cache // why we need this in A9?
>> ? ? ? ? ?
>>
>> If this is a necessary one, could you please explain the reason? Thanks.
>
> No, it's not necessary, only that this file is used by other processors
> as well. The solution below checks the ID_MMFR3[23:20] bits (coherent
> walk) and avoid flushing if the value is 1. The same could be done for
> PMD entries, though that's less critical than the PTEs.
>
> Please note that the patch is not fully tested.
>
> 8<--------------------
>
> From 67bd5ebdf622637f8293286146441e6292713c3d Mon Sep 17 00:00:00 2001
> From: Catalin Marinas <catalin.marinas@arm.com>
> Date: Fri, 1 Jul 2011 10:57:07 +0100
> Subject: [PATCH] ARMv7: Do not clean the PTE coherent page table walk is supported
>
> This patch adds a check for the ID_MMFR3[23:20] bits (coherent walk) and
> only cleans the D-cache corresponding to a PTE if coherent page table
> walks are not supported.
>
> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
> ---
> ?arch/arm/mm/proc-v7.S | ? ?4 +++-
> ?1 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
> index 8013afc..fc5b36f 100644
> --- a/arch/arm/mm/proc-v7.S
> +++ b/arch/arm/mm/proc-v7.S
> @@ -166,7 +166,9 @@ ENTRY(cpu_v7_set_pte_ext)
> ?ARM( ?str ? ? r3, [r0, #2048]! )
> ?THUMB( ? ? ? ?add ? ? r0, r0, #2048 )
> ?THUMB( ? ? ? ?str ? ? r3, [r0] )
> - ? ? ? mcr ? ? p15, 0, r0, c7, c10, 1 ? ? ? ? ?@ flush_pte
> + ? ? ? mrc ? ? p15, 0, r3, c0, c1, 7 ? ? ? ? ? @ read ID_MMFR3
> + ? ? ? tst ? ? r3, #0xf << 20 ? ? ? ? ? ? ? ? ?@ check the coherent walk bits
> + ? ? ? mcreq ? p15, 0, r0, c7, c10, 1 ? ? ? ? ?@ flush_pte
> ?#endif
> ? ? ? ?mov ? ? pc, lr
> ?ENDPROC(cpu_v7_set_pte_ext)
>
> --
> Catalin
>

  reply	other threads:[~2011-07-01 21:42 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-01  7:04 Unnecessary cache-line flush on page table updates ? heechul Yun
2011-07-01 10:10 ` Catalin Marinas
2011-07-01 21:42   ` heechul Yun [this message]
2011-07-04  9:45     ` Catalin Marinas
2011-07-04 10:02       ` Russell King - ARM Linux
2011-07-04 10:43         ` Catalin Marinas
2011-07-04 11:13           ` Russell King - ARM Linux
2011-07-04 15:58             ` Catalin Marinas
2011-07-04 19:58               ` Russell King - ARM Linux
2011-07-04 23:20                 ` Russell King - ARM Linux
2011-07-06 16:05                   ` Catalin Marinas
2011-07-06 18:08                     ` Russell King - ARM Linux
2011-07-11 16:49                       ` Catalin Marinas
2011-07-11 17:01                         ` Russell King - ARM Linux
2011-07-12 13:09                           ` Catalin Marinas
2011-07-15 16:24                             ` Russell King - ARM Linux
2011-07-05 10:07                 ` Catalin Marinas
2011-07-04 21:55             ` Russell King - ARM Linux
2011-07-05  9:26               ` Catalin Marinas
2011-07-05  9:46                 ` Russell King - ARM Linux
2011-07-06 15:52                   ` Catalin Marinas
2011-07-06 15:55                     ` Russell King - ARM Linux
2011-07-06 16:15                       ` Catalin Marinas
2011-07-05 10:48                 ` Russell King - ARM Linux
2011-07-05 13:54                   ` Catalin Marinas
2011-07-05 14:15                     ` Russell King - ARM Linux
2011-07-05 14:40                       ` Catalin Marinas
2011-07-04 13:05           ` Russell King - ARM Linux
2011-07-04 13:15             ` Catalin Marinas
2011-07-04 14:59       ` heechul Yun
2011-07-04 21:24     ` heechul Yun

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='BANLkTi=KVnzBKcd83c9T3P20VAv-ggqR4g@mail.gmail.com' \
    --to=heechul@illinois.edu \
    --cc=linux-arm-kernel@lists.infradead.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;
as well as URLs for NNTP newsgroup(s).