• Ryan Roberts's avatar
    arm64: mm: Don't remap pgtables per-cont(pte|pmd) block · 5c63db59
    Ryan Roberts authored
    A large part of the kernel boot time is creating the kernel linear map
    page tables. When rodata=full, all memory is mapped by pte. And when
    there is lots of physical ram, there are lots of pte tables to populate.
    The primary cost associated with this is mapping and unmapping the pte
    table memory in the fixmap; at unmap time, the TLB entry must be
    invalidated and this is expensive.
    
    Previously, each pmd and pte table was fixmapped/fixunmapped for each
    cont(pte|pmd) block of mappings (16 entries with 4K granule). This means
    we ended up issuing 32 TLBIs per (pmd|pte) table during the population
    phase.
    
    Let's fix that, and fixmap/fixunmap each page once per population, for a
    saving of 31 TLBIs per (pmd|pte) table. This gives a significant boot
    speedup.
    
    Execution time of map_mem(), which creates the kernel linear map page
    tables, was measured on different machines with different RAM configs:
    
                   | Apple M2 VM | Ampere Altra| Ampere Altra| Ampere Altra
                   | VM, 16G     | VM, 64G     | VM, 256G    | Metal, 512G
    ---------------|-------------|-------------|-------------|-------------
                   |   ms    (%) |   ms    (%) |   ms    (%) |    ms    (%)
    ---------------|-------------|-------------|-------------|-------------
    before         |  168   (0%) | 2198   (0%) | 8644   (0%) | 17447   (0%)
    after          |   78 (-53%) |  435 (-80%) | 1723 (-80%) |  3779 (-78%)
    Signed-off-by: default avatarRyan Roberts <ryan.roberts@arm.com>
    Tested-by: default avatarItaru Kitayama <itaru.kitayama@fujitsu.com>
    Tested-by: default avatarEric Chanudet <echanude@redhat.com>
    Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
    Reviewed-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20240412131908.433043-2-ryan.roberts@arm.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    5c63db59
mmu.c 40.1 KB