Subject: Re: Extreme slowdown
To: Reinoud Zandijk <imago@kabel065011.kabel.utwente.nl>
From: Richard Earnshaw <rearnsha@buzzard.freeserve.co.uk>
List: port-arm32
Date: 02/24/2001 22:35:22
> Hi Richard,
> 
> On Sat, 24 Feb 2001, Richard Earnshaw wrote:
> > There are some nasty diagnostics in pmap.c, which should probably be moved
> > to DEBUG.
> >
> > arm32/pmap.c:
> > #ifdef DIAGNOSTIC
> >                 for (npv = pv; npv; npv = npv->pv_next)
> >                         if (pmap == npv->pv_pmap && va == npv->pv_va)
> >                                 panic("pmap_enter_pv: already in pv_tab pv
> > %p: %
> > 08lx/%p/%p",
> >                                     pv, pv->pv_va, pv->pv_pmap, pv->
> > pv_next);
> > #endif
> 
> 've moved this one to PMAP_DEBUG since this is one of the things that
> really slow down the machine ... without this few likes the system time
> usage is again within limits and is about 0.5-1% again running top =)

Yep, on the configure gnumake test, removing this is good for 4-6 seconds 
off the system time.

> 
> > [there seem to be 3 cases like this one, note it uses vm_physseg_find,
> > which is horrendously expensive (does a binary search)!]
> > #ifdef DIAGNOSTIC
> >         int bank, off;
> >
> >         if ((bank = vm_physseg_find(atop(pa), &off)) != -1) {
> >                 struct pv_entry *pv;
> >
> >                 pv = &vm_physmem[bank].pmseg.pvent[off];
> >                 if (pv->pv_pmap != NULL)
> >                         panic("pmap_kenter_pa: %08lx multiply mapped\n",
> > pa);
> >         }
> > #endif
> 
> Well Richard, can you point out where these parts are? I cant find them !!
> :(( wierd eh?
> 

Nope, 'cos they are in my own pmap mods, not in the official sources :-)

I'm about to start dusting these down for general release.

R.