diff options
author | Peter Wemm <peter@FreeBSD.org> | 2002-07-12 07:56:11 +0000 |
---|---|---|
committer | Peter Wemm <peter@FreeBSD.org> | 2002-07-12 07:56:11 +0000 |
commit | f1b665c8fe3c87d9baf30ea71abacecb5345238c (patch) | |
tree | 8b641ea8c1ce08eac805ae6a630e6c6139bca09e /sys/kern | |
parent | 90833c99de4bdef6b8446b1b3dbea61a86c56aa9 (diff) | |
download | src-f1b665c8fe3c87d9baf30ea71abacecb5345238c.tar.gz src-f1b665c8fe3c87d9baf30ea71abacecb5345238c.zip |
Revive backed out pmap related changes from Feb 2002. The highlights are:
- It actually works this time, honest!
- Fine grained TLB shootdowns for SMP on i386. IPI's are very expensive,
so try and optimize things where possible.
- Introduce ranged shootdowns that can be done as a single IPI.
- PG_G support for i386
- Specific-cpu targeted shootdowns. For example, there is no sense in
globally purging the TLB cache for where we are stealing a page from
the local unshared process on the local cpu. Use pm_active to track
this.
- Add some instrumentation for the tlb shootdown code.
- Rip out SMP code from <machine/cpufunc.h>
- Try and fix some very bogus PG_G and PG_PS interactions that were bad
enough to cause vm86 bios calls to break. vm86 depended on our existing
bugs and this was the cause of the VESA panics last time.
- Fix the silly one-line error that caused the 'panic: bad pte' last time.
- Fix a couple of other silly one-line errors that should have caused more
pain than they did.
Some more work is needed:
- pmap_{zero,copy}_page[_idle]. These can be done without IPI's if we
have a hook in cpu_switch.
- The IPI handlers need some cleanup. I have a bogus %ds load that can
be avoided.
- APTD handling is rather bogus and appears to be a large source of
global TLB IPI shootdowns for no really good reason.
I see speedups of between 1.5% and ~4% on buildworlds in a while 1 loop.
I expect to see a bigger difference when there is significant pageout
activity or the system otherwise has memory shortages.
I have backed out a few optimizations that I had been using over the last
few days in order to be a little more conservative. I'll revisit these
again over the next few days as the dust settles.
New option: DISABLE_PG_G - In case I missed something.
Notes
Notes:
svn path=/head/; revision=99862
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/subr_witness.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/kern/subr_witness.c b/sys/kern/subr_witness.c index 73934cb2e3a7..444b087a2880 100644 --- a/sys/kern/subr_witness.c +++ b/sys/kern/subr_witness.c @@ -223,6 +223,9 @@ static struct witness_order_list_entry order_lists[] = { { "icu", &lock_class_mtx_spin }, #ifdef SMP { "smp rendezvous", &lock_class_mtx_spin }, +#if defined(__i386__) && defined(APIC_IO) + { "tlb", &lock_class_mtx_spin }, +#endif #endif { "clk", &lock_class_mtx_spin }, { "mutex profiling lock", &lock_class_mtx_spin }, |