]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
powerpc/8xx: Map linear kernel RAM with 8M pages
authorChristophe Leroy <christophe.leroy@c-s.fr>
Tue, 9 Feb 2016 16:07:50 +0000 (17:07 +0100)
committerScott Wood <oss@buserror.net>
Fri, 11 Mar 2016 23:18:01 +0000 (17:18 -0600)
commita372acfac51e0d5858f8f6f84da52defcabf054b
tree5e7c1a109e7c1167f1638f9e6f7f0154e09d2eef
parent913a6b3d10d85a032eff2f31254c35e0976f5e32
powerpc/8xx: Map linear kernel RAM with 8M pages

On a live running system (VoIP gateway for Air Trafic Control), over
a 10 minutes period (with 277s idle), we get 87 millions DTLB misses
and approximatly 35 secondes are spent in DTLB handler.
This represents 5.8% of the overall time and even 10.8% of the
non-idle time.
Among those 87 millions DTLB misses, 15% are on user addresses and
85% are on kernel addresses. And within the kernel addresses, 93%
are on addresses from the linear address space and only 7% are on
addresses from the virtual address space.

MPC8xx has no BATs but it has 8Mb page size. This patch implements
mapping of kernel RAM using 8Mb pages, on the same model as what is
done on the 40x.

In 4k pages mode, each PGD entry maps a 4Mb area: we map every two
entries to the same 8Mb physical page. In each second entry, we add
4Mb to the page physical address to ease life of the FixupDAR
routine. This is just ignored by HW.

In 16k pages mode, each PGD entry maps a 64Mb area: each PGD entry
will point to the first page of the area. The DTLB handler adds
the 3 bits from EPN to map the correct page.

With this patch applied, we now get only 13 millions TLB misses
during the 10 minutes period. The idle time has increased to 313s
and the overall time spent in DTLB miss handler is 6.3s, which
represents 1% of the overall time and 2.2% of non-idle time.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Scott Wood <oss@buserror.net>
arch/powerpc/kernel/head_8xx.S
arch/powerpc/mm/8xx_mmu.c [new file with mode: 0644]
arch/powerpc/mm/Makefile
arch/powerpc/mm/mmu_decl.h