• Palmer Dabbelt's avatar
    Merge patch series "Svvptc extension to remove preventive sfence.vma" · 7e340f4f
    Palmer Dabbelt authored
    Alexandre Ghiti <alexghiti@rivosinc.com> says:
    
    In RISC-V, after a new mapping is established, a sfence.vma needs to be
    emitted for different reasons:
    
    - if the uarch caches invalid entries, we need to invalidate it otherwise
      we would trap on this invalid entry,
    - if the uarch does not cache invalid entries, a reordered access could fail
      to see the new mapping and then trap (sfence.vma acts as a fence).
    
    We can actually avoid emitting those (mostly) useless and costly sfence.vma
    by handling the traps instead:
    
    - for new kernel mappings: only vmalloc mappings need to be taken care of,
      other new mapping are rare and already emit the required sfence.vma if
      needed.
      That must be achieved very early in the exception path as explained in
      patch 3, and this also fixes our fragile way of dealing with vmalloc faults.
    
    - for new user mappings: Svvptc makes update_mmu_cache() a no-op but we can
      take some gratuitous page faults (which are very unlikely though).
    
    Patch 1 and 2 introduce Svvptc extension probing.
    
    On our uarch that does not cache invalid entries and a 6.5 kernel, the
    gains are measurable:
    
    * Kernel boot:                  6%
    * ltp - mmapstress01:           8%
    * lmbench - lat_pagefault:      20%
    * lmbench - lat_mmap:           5%
    
    Here are the corresponding numbers of sfence.vma emitted:
    
    * Ubuntu boot to login:
    Before: ~630k sfence.vma
    After:  ~200k sfence.vma
    
    * ltp - mmapstress01
    Before: ~45k
    After:  ~6.3k
    
    * lmbench - lat_pagefault
    Before: ~665k
    After:   832 (!)
    
    * lmbench - lat_mmap
    Before: ~546k
    After:   718 (!)
    
    Thanks to Ved and Matt Evans for triggering the discussion that led to
    this patchset!
    
    * b4-shazam-merge:
      riscv: Stop emitting preventive sfence.vma for new userspace mappings with Svvptc
      riscv: Stop emitting preventive sfence.vma for new vmalloc mappings
      dt-bindings: riscv: Add Svvptc ISA extension description
      riscv: Add ISA extension parsing for Svvptc
    
    Link: https://lore.kernel.org/r/20240717060125.139416-1-alexghiti@rivosinc.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    7e340f4f
init.c 49.6 KB