tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: uvm_pageactivate, uvm_pageenqueue and uvm_pageqlock



On Thu, Jun 05, 2008 at 01:34:38PM +0900, YAMAMOTO Takashi wrote:

> > Hi,
> > 
> > With fork-intensive workloads there is a huge amount of contention on
> > uvm_pageqlock. Most of it comes from uvm_fault_internal, which passes
> > hints to the page replacement policy on ~every fault.
> > 
> > This patch changes uvm_pageactivate() and uvm_pageenqueue() to do an
> > unlocked check to see if operation actually needs to be done. Only if
> > true does it acquire the lock and call into the page replacement policy
> > to do the work.
> > 
> >     http://www.netbsd.org/~ad/activate.diff
> > 
> > I am not sure what should happen for clockpro's uvmpdpol_pageisactive_p(),
> > though.
> > 
> > Comments?
> > 
> > Thanks,
> > Andrew
> 
> how do you think about retiring explicit activate calls and
> setting page's reference bit using atomic ops instead?

Here's a better patch than the one I posted earlier:

        http://www.netbsd.org/~ad/uvm.diff

Some notes:

- It doesn't work yet. :-)

- One significant change is to merge pqflags and wire_count into a single
  field, so we can CAS on them safely. It may not be needed.

- It's a lot more complicated than I wanted and will have to wait until
  later. 

What about making all pages available to the page scanner for inspection,
instead of enqueueing and dequeueing them regularly? I think that with more
than 1 CPU, it's likely to cost a lot less CPU time than we currently waste
spinning on uvm_pageqlock.

Andrew


Home | Main Index | Thread Index | Old Index