freebsd-skq/sys/vm
Alan Cox 51321f7c31 Significantly reduce the cost, i.e., run time, of calls to madvise(...,
MADV_DONTNEED) and madvise(..., MADV_FREE).  Specifically, introduce a new
pmap function, pmap_advise(), that operates on a range of virtual addresses
within the specified pmap, allowing for a more efficient implementation of
MADV_DONTNEED and MADV_FREE.  Previously, the implementation of
MADV_DONTNEED and MADV_FREE relied on per-page pmap operations, such as
pmap_clear_reference().  Intuitively, the problem with this implementation
is that the pmap-level locks are acquired and released and the page table
traversed repeatedly, once for each resident page in the range
that was specified to madvise(2).  A more subtle flaw with the previous
implementation is that pmap_clear_reference() would clear the reference bit
on all mappings to the specified page, not just the mapping in the range
specified to madvise(2).

Since our malloc(3) makes heavy use of madvise(2), this change can have a
measureable impact.  For example, the system time for completing a parallel
"buildworld" on a 6-core amd64 machine was reduced by about 1.5% to 2.0%.

Note: This change only contains pmap_advise() implementations for a subset
of our supported architectures.  I will commit implementations for the
remaining architectures after further testing.  For now, a stub function is
sufficient because of the advisory nature of pmap_advise().

Discussed with: jeff, jhb, kib
Tested by:      pho (i386), marcel (ia64)
Sponsored by:   EMC / Isilon Storage Division
2013-08-29 15:49:05 +00:00
..
_vm_radix.h On all the architectures, avoid to preallocate the physical memory 2013-08-09 11:28:55 +00:00
default_pager.c Switch the vm_object mutex to be a rwlock. This will enable in the 2013-03-09 02:32:23 +00:00
device_pager.c Different consumers of the struct vm_page abuse pageq member to keep 2013-08-10 17:36:42 +00:00
memguard.c - Add a statically allocated memguard arena since it is needed very early 2013-08-13 22:40:43 +00:00
memguard.h Replace kernel virtual address space allocation with vmem. This provides 2013-08-07 06:21:20 +00:00
phys_pager.c The soft and hard busy mechanism rely on the vm object lock to work. 2013-08-09 11:11:11 +00:00
pmap.h Significantly reduce the cost, i.e., run time, of calls to madvise(..., 2013-08-29 15:49:05 +00:00
redzone.c Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs. 2011-11-07 15:43:11 +00:00
redzone.h
sg_pager.c Different consumers of the struct vm_page abuse pageq member to keep 2013-08-10 17:36:42 +00:00
swap_pager.c Remove the deprecated VM_ALLOC_RETRY flag for the vm_page_grab(9). 2013-08-22 07:39:53 +00:00
swap_pager.h Do not map the swap i/o pbufs if the geom provider for the swap 2013-03-19 14:39:27 +00:00
uma_core.c Different consumers of the struct vm_page abuse pageq member to keep 2013-08-10 17:36:42 +00:00
uma_dbg.c - Add a per-zone lock for zones without kegs. 2013-06-20 19:08:12 +00:00
uma_dbg.h
uma_int.h Different consumers of the struct vm_page abuse pageq member to keep 2013-08-10 17:36:42 +00:00
uma.h - Resolve bucket recursion issues by passing a cookie with zone flags 2013-06-26 00:57:38 +00:00
vm_extern.h Replace kernel virtual address space allocation with vmem. This provides 2013-08-07 06:21:20 +00:00
vm_fault.c On all the architectures, avoid to preallocate the physical memory 2013-08-09 11:28:55 +00:00
vm_glue.c Remove the deprecated VM_ALLOC_RETRY flag for the vm_page_grab(9). 2013-08-22 07:39:53 +00:00
vm_init.c - Use an arbitrary but reasonably large import size for kva on architectures 2013-08-19 23:02:39 +00:00
vm_kern.c Add new mmap(2) flags to permit applications to request specific virtual 2013-08-16 21:13:55 +00:00
vm_kern.h - Add a statically allocated memguard arena since it is needed very early 2013-08-13 22:40:43 +00:00
vm_map.c Significantly reduce the cost, i.e., run time, of calls to madvise(..., 2013-08-29 15:49:05 +00:00
vm_map.h Add new mmap(2) flags to permit applications to request specific virtual 2013-08-16 21:13:55 +00:00
vm_meter.c Switch the vm_object mutex to be a rwlock. This will enable in the 2013-03-09 02:32:23 +00:00
vm_mmap.c Add new mmap(2) flags to permit applications to request specific virtual 2013-08-16 21:13:55 +00:00
vm_object.c Remove the deprecated VM_ALLOC_RETRY flag for the vm_page_grab(9). 2013-08-22 07:39:53 +00:00
vm_object.h On all the architectures, avoid to preallocate the physical memory 2013-08-09 11:28:55 +00:00
vm_page.c Significantly reduce the cost, i.e., run time, of calls to madvise(..., 2013-08-29 15:49:05 +00:00
vm_page.h Remove the deprecated VM_ALLOC_RETRY flag for the vm_page_grab(9). 2013-08-22 07:39:53 +00:00
vm_pageout.c - Eliminate the vm object lock from the active queue scan. It is not 2013-08-21 22:39:19 +00:00
vm_pageout.h Move what remains of vm/vm_contig.c into vm/vm_pageout.c, where similar 2012-07-18 05:21:34 +00:00
vm_pager.c - Add a general purpose resource allocator, vmem, from NetBSD. It was 2013-06-28 03:51:20 +00:00
vm_pager.h - Add a general purpose resource allocator, vmem, from NetBSD. It was 2013-06-28 03:51:20 +00:00
vm_param.h Remove unused definition for CTL_VM_NAMES. 2013-08-09 23:47:43 +00:00
vm_phys.c Different consumers of the struct vm_page abuse pageq member to keep 2013-08-10 17:36:42 +00:00
vm_phys.h Split the pagequeues per NUMA domains, and split pageademon process 2013-08-07 16:36:38 +00:00
vm_radix.c Addendum to r254141: The call to vm_radix_insert() in vm_page_cache() can 2013-08-23 17:27:12 +00:00
vm_radix.h Addendum to r254141: The call to vm_radix_insert() in vm_page_cache() can 2013-08-23 17:27:12 +00:00
vm_reserv.c Refactor vm_page_alloc()'s interactions with vm_reserv_alloc_page() and 2013-05-12 16:50:18 +00:00
vm_reserv.h Refactor vm_page_alloc()'s interactions with vm_reserv_alloc_page() and 2013-05-12 16:50:18 +00:00
vm_unix.c - Improve readability of sys_obreak(). 2013-01-11 09:58:35 +00:00
vm_zeroidle.c Split the pagequeues per NUMA domains, and split pageademon process 2013-08-07 16:36:38 +00:00
vm.h rename scheduler->swapper and SI_SUB_RUN_SCHEDULER->SI_SUB_LAST 2013-07-24 09:45:31 +00:00
vnode_pager.c The soft and hard busy mechanism rely on the vm object lock to work. 2013-08-09 11:11:11 +00:00
vnode_pager.h Account the writeable shared mappings backed by file in the vnode 2012-02-23 21:07:16 +00:00