• Alan Cox's avatar
    Introduce a new mechanism for relocating virtual pages to a new physical · c869e672
    Alan Cox authored
    address and use this mechanism when:
    
    1. kmem_alloc_{attr,contig}() can't find suitable free pages in the physical
       memory allocator's free page lists.  This replaces the long-standing
       approach of scanning the inactive and inactive queues, converting clean
       pages into PG_CACHED pages and laundering dirty pages.  In contrast, the
       new mechanism does not use PG_CACHED pages nor does it trigger a large
       number of I/O operations.
    
    2. on 32-bit MIPS processors, uma_small_alloc() and the pmap can't find
       free pages in the physical memory allocator's free page lists that are
       covered by the direct map.  Tested by: adrian
    
    3. ttm_bo_global_init() and ttm_vm_page_alloc_dma32() can't find suitable
       free pages in the physical memory allocator's free page lists.
    
    In the coming months, I expect that this new mechanism will be applied in
    other places.  For example, balloon drivers should use relocation to
    minimize fragmentation of the guest physical address space.
    
    Make vm_phys_alloc_contig() a little smarter (and more efficient in some
    cases).  Specifically, use vm_phys_segs[] earlier to avoid scanning free
    page lists that can't possibly contain suitable pages.
    
    Reviewed by:	kib, markj
    Glanced at:	jhb
    Discussed with:	jeff
    Sponsored by:	EMC / Isilon Storage Division
    Differential Revision:	https://reviews.freebsd.org/D4444
    c869e672