Subject: Re: Improving the arm32 pmap
To: Steve Woodford <scw@wasabisystems.com>
From: Jason R Thorpe <thorpej@wasabisystems.com>
List: port-arm
Date: 01/13/2003 12:41:49
On Mon, Jan 13, 2003 at 12:14:17PM +0000, Steve Woodford wrote:
> So, I'm soliciting opinions on what's wrong with the existing pmap, and
> suggestions on either how to bend existing code into shape, or how to do
> things differently/better with new code.
Off the top of my head:
* Way way way too much I$ frobbing happens in the current pmap.
It seems as if in the current code, everytime the D$ is futzed
with, so is the I$. This is a silly big-hammer approach, and
certainly could be optimized.
For user pmaps, I suggest a strategy like the one used by the
Alpha pmap. That is, do not do ANY user I$ frobbing until the
actual return to userspace by a proc/lwp using that pmap. A
side-effect is that you'd have to nail the entire I$ if the pmap
is marked as needing I$-sync, but that may still be faster.
(Note that with this strategy, you would still do any write-back
neccessary while in the kernel, just would skip the I$ flush part
of the step until userret().)
If it ends up not working out, at the very least the pmap needs
to be made more intelligent about when it actually needs to futz
with the I$. Tracking exec permission in the PV entry would be
a good start. (No exec'able mappings will ever be kenter'd, so
you don't need to worry about it there.)
* Right now, the "PTPT" (the page table that maps the pmap's
page tables) is mapped at multiple addresses. This means
that it cannot be accessed in a cached fashion. Really, all
page table management in the current pmap is gross, and it
really needs to be revisited.
--
-- Jason R. Thorpe <thorpej@wasabisystems.com>