Re: Maybe a VM bug in 2.4.18-18 from RH 8.0?

Andrea Arcangeli
2002-12-07T00:14:59Z

On Fri, Dec 06, 2002 at 04:01:24PM -0800, Andrew Morton wrote:
> William Lee Irwin III wrote:
> >
> > ...
> > A 16KB or 64KB kernel allocation unit would then annihilate
>
> You want to be careful about this:
>
> CPU: L1 I cache: 16K, L1 D cache: 16K
>
> Because instantiating a 16k page into user pagetables in
> one hit means that it must all be zeroed. With these large
> pagesizes that means that the application is likely to get
> 100% L1 misses against the new page, whereas it currently
> gets 100% hits.
>
> I'd expect this performance dropoff to occur when going from 8k
> to 16k. By the time you get to 32k it would be quite bad.
>
> One way to address this could be to find a way of making the
> pages present, but still cause a fault on first access. Then
> have a special-case fastpath in the fault handler to really wipe
> the page just before it is used. I don't know how though - maybe
> _PAGE_USER?

I think taking the page fault itself is the biggest overhead that would
be nice to avoid on every second virtually consecutive page, if we've to
take the page fault on every page we could as well do the rest of the
work that should not that big compared to the overhead of
entering/exiting kernel and preparing to handle the fault.

>
> get_user_pages() would need attention too - you don't want to
> allow the user to perform O_DIRECT writes of uninitialised
> pages to their files...

Andrea