tech-kern archive

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

UVM / pmap assertion under load

Trying to get a stress test consisting of a bunch of fsx, fsstress and dbench
running this combination leads within minutes to a failed assertion
"(npte & PG_RW) != 0" in file x86/x86/pmap.c.

With some tracing I always get the same pattern:

- fsx gets a trap(), user memory, write.
-> the uobj is a vnode with VI_WRMAPDIRTY set.

- uvm_fault_lower() has to call uvm_fault_lower_io() as uobjpage is zero.
- short before uvm_fault_lower_io() has a chance to re-lock uobj another thread
  comes through genfs_do_putpages() and clears VI_WRMAPDIRTY.

- uvm_fault_lower_direct() sees UVM_OBJ_NEEDS_WRITEFAULT() and clears

- pmap_enter_ma() fires the assertion "(npte & PG_RW) != 0".

~ one of ten times I get the assertion
  "(uobj == NULL || !UVM_OBJ_IS_CLEAN(uobjpage->uobject) ||
            (uobjpage->flags & PG_CLEAN) != 0);"
  which may be related.

Any ideas?
Juergen Hannken-Illjes - - TU Braunschweig 

Home | Main Index | Thread Index | Old Index