94ef8e0795
allocations can be merged either forwards or backwards, meaning no new entries will be added to the list, and some can even be merged in both directions, resulting in a surplus entry. This code typically reduces the number of map entries in the kernel_map by an order of magnitude or more. It also makes possible recovery from the pathological case of "5000 processes created and then killed", which leaves behind a large number of map entries. The only forward merge case not covered is the instance of an amap that has to be extended backwards (WIP). Note that this only affects processes, not the kernel (the kernel doesn't use amaps), and that merge opportunities like this come up *very* rarely, if at all. Eg, after being up for eight days, I see only three failures in this regard, and even those are most likely due to programs I'm developing to exercise this case. Code reviewed by thorpej, matt, christos, mrg, chuq, chuck, perry, tls, and probably others. I'd like to thank my mother, the Hollywood Foreign Press... |
||
---|---|---|
.. | ||
Makefile | ||
uvm_amap_i.h | ||
uvm_amap.c | ||
uvm_amap.h | ||
uvm_anon.c | ||
uvm_anon.h | ||
uvm_aobj.c | ||
uvm_aobj.h | ||
uvm_bio.c | ||
uvm_ddb.h | ||
uvm_device.c | ||
uvm_device.h | ||
uvm_extern.h | ||
uvm_fault_i.h | ||
uvm_fault.c | ||
uvm_fault.h | ||
uvm_glue.c | ||
uvm_glue.h | ||
uvm_init.c | ||
uvm_io.c | ||
uvm_km.c | ||
uvm_km.h | ||
uvm_loan.c | ||
uvm_loan.h | ||
uvm_map_i.h | ||
uvm_map.c | ||
uvm_map.h | ||
uvm_meter.c | ||
uvm_mmap.c | ||
uvm_object.h | ||
uvm_page_i.h | ||
uvm_page.c | ||
uvm_page.h | ||
uvm_pager_i.h | ||
uvm_pager.c | ||
uvm_pager.h | ||
uvm_param.h | ||
uvm_pdaemon.c | ||
uvm_pdaemon.h | ||
uvm_pglist.c | ||
uvm_pglist.h | ||
uvm_pmap.h | ||
uvm_prot.h | ||
uvm_stat.c | ||
uvm_stat.h | ||
uvm_swap.c | ||
uvm_swap.h | ||
uvm_unix.c | ||
uvm_user.c | ||
uvm_vnode.c | ||
uvm.h |