Date: Wed, 22 Aug 2001 02:06:34 +0900 From: Mitsuru IWASAKI <iwasaki@jp.FreeBSD.org> To: peter@wemm.org Cc: iwasaki@jp.FreeBSD.org, arch@FreeBSD.ORG, audit@FreeBSD.ORG, kumabu@t3.rim.or.jp Subject: Re: CFR: Timing to enable CR4.PGE bit Message-ID: <20010822020634P.iwasaki@jp.FreeBSD.org> In-Reply-To: <20010817072149.0BCD63811@overcee.netplex.com.au> References: <20010809035801V.iwasaki@jp.FreeBSD.org> <20010817072149.0BCD63811@overcee.netplex.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, thanks peter for your comments. > > Index: locore.s > > =================================================================== > > RCS file: /home/ncvs/src/sys/i386/i386/locore.s,v > > retrieving revision 1.144 > > diff -u -r1.144 locore.s > > --- locore.s 2001/07/12 06:32:50 1.144 > > +++ locore.s 2001/08/08 17:49:28 > > @@ -374,6 +374,12 @@ > > movl IdlePTD,%esi > > movl %esi,PCB_CR3(%eax) > > > > + testl $CPUID_PGE, R(cpu_feature) > > + jz 1f > > + movl %cr4, %eax > > + orl $CR4_PGE, %eax > > + movl %eax, %cr4 > > +1: > > pushl physfree /* value of first for init386(f > irst) */ > > call init386 /* wire 386 chip for unix opera > tion */ > > > > @@ -718,13 +724,6 @@ > > */ > > > > create_pagetables: > > - > > - testl $CPUID_PGE, R(cpu_feature) > > - jz 1f > > - movl %cr4, %eax > > - orl $CR4_PGE, %eax > > - movl %eax, %cr4 > > -1: > > > > /* Find end of kernel image (rounded up to a page boundary). */ > > movl $R(_end),%esi > > This part is fine. OK, I'll commit this one first. > However: > > > Also I have another thing to be confirmed. Should we utilize TLB by > > enabling PGE bit at very later stage? I think it would be more > > efficient to cache page entries with G flag in multi-user environment, > > not in kernel bootstrap. If we enable PGE bit in locore.s, TLB could > > be occupied by entries which is referenced by initialization code > > (yes, most of them are executed only once). > > # but I could be wrong... > > The G bit does not "lock" the TLB entries in. All it does is stop > unnecessary flushes when %cr3 is changed. If entries are not used > for a short while, they will be recycled when the TLB slot is needed > for something else soon enough. ie: this should not be a problem. My point is that users need higher system performance in multi-user environment rather than in kernel bootstrap. Also PGE bit has effects in multi-user environment where %cr3 is changed frequently. I think enabling PGE in early stage of kernel bootstrap won't give us performance advantages, entries which is used in bootstrap will remain in the TLB as Intel's document says; ---- 3.7. TRANSLATION LOOKASIDE BUFFERS (TLBS) [snip] When the processor loads a page-directory or page-table entry for a global page into a TLB, the entry will remain in the TLB indefinitely. The only way to deterministically invalidate global page entries is to clear the PGE flag and then invalidate the TLBs or to use the INVLPG instruction to invalidate individual page-directory or page-table entries in the TLBs. ---- According to i386/locore.s, it seems that PTEs for kernel text, data, bss and symbols have PG_G bit, I worry that it is enough many to fill TLB slot out... > Regardless of my doubts above, I do have a problem with the patch... > It only works for the PPro/p2/p3 and not the p4. Is this intentional? > All have the CPUID_PGE bit. I think the test for cpu_id & 0x600 is > bogus and should be removed. Understood. Thanks for pointing it out. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010822020634P.iwasaki>