CONFIG_PIN_TLB experiments
Marcelo Tosatti
marcelo.tosatti at cyclades.com
Thu May 5 05:22:38 EST 2005
Hi,
On Tue, May 03, 2005 at 11:14:39AM -0700, Conn Clark wrote:
> Marcelo Tosatti wrote:
> >Hi 8xx folks,
>
> <SNIP>
>
> >
> >Actually, CONFIG_PIN_TLB slowdowns the system, as expected (there are only
> >28 usable TLB's instead of 32).
> >
> >
> >v2.6 CONFIG_PIN_TLB:
> >I-TLB userspace misses: 162113
> >I-TLB kernel misses: 135911
> >D-TLB userspace misses: 289452
> >D-TLB kernel misses: 257039
> >
> >v2.6 without CONFIG_PIN_TLB:
> >I-TLB userspace misses: 160828
> >I-TLB kernel misses: 134746
> >D-TLB userspace misses: 253557
> >D-TLB kernel misses: 227383
> >
> >
>
> Considering that the TLB kernel misses are higher with tlb pinning it
> appears as though the pinned TLBs are not marked as valid.
Yep
>
> >The following BDI output shows the pinned, 8MByte data page mapping
> >present,
> >at 0xc0000000.
> >
> >BDI>rds 826
> >SPR 826 : 0x00007f00 32512
> >BDI>rms 792 0x0c001C00
> >BDI>rms 824 1
> >BDI>rds 824
> >SPR 824 : 0xc00000f0 -1073741584
> >BDI>rds 825
> >SPR 825 : 0x00000fe0 4064
> >BDI>rds 826
> >SPR 826 : 0x00007fff 32767 <- "0x00007fff" was 0x00007f00"
> >initially. I tried enabling
> > usermode access without
> > success.
> >
> >There are several 4Kb mappings inside the range covered by this 8Mb TLB
> >entry, for example:
> >
> >BDI>rms 792 0x0c000200
> >BDI>rms 824 1
> >BDI>rds 824
> >SPR 824 : 0xc0224f17 -1071493353
> >BDI>rds 825
> >SPR 825 : 0x002241e0 2245088
> >BDI>rds 826
> >SPR 826 : 0x00007f00 32512
> >
> >And more, without so much detail:
> >SPR 824 : 0xc0224f17 -1071493353
> >SPR 824 : 0xc01fbf17 -1071661289
> >SPR 824 : 0xc0246f17 -1071354089
> >SPR 824 : 0xc023ff17 -1071382761
> >SPR 824 : 0xc7e35f17 - 941400297
> >SPR 824 : 0xc0244f17 -1071362281
> >SPR 824 : 0xc023ef17 -1071386857
> >
> >Note that protection (SPR 826) is exactly the same as the 8Mbyte page
> >protection.
> >Why is the translation mechanism rejection the pinned mappings?
> >
> >Dan, have you ever seen this work? Am I misunderstanding how the pinned
> >entries are supposed to work?
>
> When you load the Mx_EPN of the pinned area is the EV bit being set?
Yep.
"MD_RAM1" (SPR 826) is set:
SPR 826 : 0x00007fff 32767 <- "0x00007fff" was 0x00007f00"
Bits 17 and 18 are set. Their meaning is: "Change bit for DTLB entry" and
"Entry valid flag" respectively.
Bits 19...23 are also set, they represent supervisor access. Note that
bit 23 "supervisor access type" is set: 0 is read-only, 1 is read-write.
so everything looks OK here.
"MD_RAM0":
SPR 825 : 0x00000fe0 4064
Bits 20...26 are set.
20-22: 8Mbyte page set.
23-26: APGI (access protection group in 1's complement) set. It is
zero (1111 in 1's complement).
27: guarded memory not set.
"MD_CAM":
SPR 824 : 0xc00000f0 -1073741584
Bits 24-27 are set.
24-26 is "page size" (111 = 8Mb) and 27 indicates "shared page"
(ASID comparisong disabled).
The 8Mbyte page is used at boot, from "start_here" until "MMU_init()"
gets called...
The manual says, section "9.3 Address Translation"
"When TLB logic detects that a new effective page number (EPN) overlaps
one in the TLB (when taking into account page sizes, subpage validity flags,
user/supervisor state, etc. the new EPN is written and the old one is
invalidated."
I'm trying to boot a kernel which does not create kernel pte's
from 0xc000000 till 0xc080000.
More information about the Linuxppc-embedded
mailing list