• Joao Martins's avatar
    mm/sparse-vmemmap: improve memory savings for compound devmaps · 4917f55b
    Joao Martins authored
    A compound devmap is a dev_pagemap with @vmemmap_shift > 0 and it means
    that pages are mapped at a given huge page alignment and utilize uses
    compound pages as opposed to order-0 pages.
    
    Take advantage of the fact that most tail pages look the same (except the
    first two) to minimize struct page overhead.  Allocate a separate page for
    the vmemmap area which contains the head page and separate for the next 64
    pages.  The rest of the subsections then reuse this tail vmemmap page to
    initialize the rest of the tail pages.
    
    Sections are arch-dependent (e.g.  on x86 it's 64M, 128M or 512M) and when
    initializing compound devmap with big enough @vmemmap_shift (e.g.  1G PUD)
    it may cross multiple sections.  The vmemmap code needs to consult @pgmap
    so that multiple sections that all map the same tail data can refer back
    to the first copy of that data for a given gigantic page.
    
    On compound devmaps with 2M align, this mechanism lets 6 pages be saved
    out o...
    4917f55b
vmemmap_dedup.rst 11.1 KB