• Nicholas Piggin's avatar
    powerpc/64s/hash: Add a SLB preload cache · 5434ae74
    Nicholas Piggin authored
    When switching processes, currently all user SLBEs are cleared, and a
    few (exec_base, pc, and stack) are preloaded. In trivial testing with
    small apps, this tends to miss the heap and low 256MB segments, and it
    will also miss commonly accessed segments on large memory workloads.
    
    Add a simple round-robin preload cache that just inserts the last SLB
    miss into the head of the cache and preloads those at context switch
    time. Every 256 context switches, the oldest entry is removed from the
    cache to shrink the cache and require fewer slbmte if they are unused.
    
    Much more could go into this, including into the SLB entry reclaim
    side to track some LRU information etc, which would require a study of
    large memory workloads. But this is a simple thing we can do now that
    is an obvious win for common workloads.
    
    With the full series, process switching speed on the context_switch
    benchmark on POWER9/hash (with kernel speculation security masures
    disabled) increases from 140K/s to 178K/s (27%).
    
    POWER8 does not change much (within 1%), it's unclear why it does not
    see a big gain like POWER9.
    
    Booting to busybox init with 256MB segments has SLB misses go down
    from 945 to 69, and with 1T segments 900 to 21. These could almost all
    be eliminated by preloading a bit more carefully with ELF binary
    loading.
    Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    5434ae74
process.c 56 KB