tech-kern archive

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

Re: rbtree for uvm_pagelookup()



On Mon, Jun 02, 2008 at 12:15:23PM +0100, Andrew Doran wrote:

> This replaces the global page hash with a per-object red-black tree. Memory
> consumption should be lower than with the hash and it seems to speed up
> build.sh slightly on a MP system.
> 
>       http://www.netbsd.org/~ad/pagelookup.diff

Here's an updated diff that does a few more things. A lot of the change is
mechanical.

- rbtree for uvm_pagelookup() as before.

- Make page colour index and pagezero state per-cpu.

- When freeing a page, put it onto the global freelist as we do now and
  also onto a per-cpu freelist. When allocating, prefer pages from the local
  cpu, which are likely to have their contents in local cache. If we find
  none, try the global list.

- On x86, don't bother using sse to copy/zero pages on demand.  It turns out
  not to be worth it.

- On x86, re-enable zeroing pages in the idle loop and there use the sse
  instructions so we don't blow out the cache.

I'm going to do the last two anyway, but any comments on the rest?

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

Here's how it affects build.sh -j16 release on an 8-core system. All are
using hand-compiled gcc 4.3.0 for bootstrap.

        http://www.netbsd.org/~ad/build.png

Andrew


Home | Main Index | Thread Index | Old Index