We had the same problem, this is how we 'work-around' the problem :-)
--------------
Index: uvm_fault.c
===================================================================
RCS file: /cvsroot/netbsd-current/netbsd1.6/sys/uvm/uvm_fault.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -r1.2 -r1.3
538c538,541
< vaddr_t startva, objaddr, currva, offset;
---
> #ifdef NEW_ALGORITHM
> int t;
> #endif
> vaddr_t startva, objaddr, currva, offset;
1163c1166,1174
< if (anon == NULL || uvmexp.swpgonly == uvmexp.swpages) {
---
>
> #ifdef NEW_ALGORITHM
> t = uvmexp.active + uvmexp.inactive + uvmexp.free;
> if (anon == NULL || (uvmexp.swpgonly == uvmexp.swpages &&
> uvmexp.filepages <= ((t * uvmexp.filemin) >> 8) &&
> uvmexp.execpages <= ((t * uvmexp.execmin) >> 8))) {
> #else
> if (anon == NULL || (uvmexp.swpgonly == uvmexp.swpages)) {
> #endif
1579c1590,1598
< if (anon == NULL || uvmexp.swpgonly == uvmexp.swpages) {
---
>
> #ifdef NEW_ALGORITHM
> t = uvmexp.active + uvmexp.inactive + uvmexp.free;
> if (anon == NULL || (uvmexp.swpgonly == uvmexp.swpages &&
> uvmexp.filepages <= ((t * uvmexp.filemin) >> 8) &&
> uvmexp.execpages <= ((t * uvmexp.execmin) >> 8))) {
> #else
> if (anon == NULL || (uvmexp.swpgonly == uvmexp.swpages)) {
> #endif