• Palmer Dabbelt's avatar
    Merge patch series "riscv: enable EFFICIENT_UNALIGNED_ACCESS and DCACHE_WORD_ACCESS" · 17f2c308
    Palmer Dabbelt authored
    Jisheng Zhang <jszhang@kernel.org> says:
    
    Some riscv implementations such as T-HEAD's C906, C908, C910 and C920
    support efficient unaligned access, for performance reason we want
    to enable HAVE_EFFICIENT_UNALIGNED_ACCESS on these platforms. To
    avoid performance regressions on non efficient unaligned access
    platforms, HAVE_EFFICIENT_UNALIGNED_ACCESS can't be globally selected.
    
    To solve this problem, runtime code patching based on the detected
    speed is a good solution. But that's not easy, it involves lots of
    work to modify vairous subsystems such as net, mm, lib and so on.
    This can be done step by step.
    
    So let's take an easier solution: add support to efficient unaligned
    access and hide the support under NONPORTABLE.
    
    patch1 introduces RISCV_EFFICIENT_UNALIGNED_ACCESS which depends on
    NONPORTABLE, if users know during config time that the kernel will be
    only run on those efficient unaligned access hw platforms, they can
    enable it. Obviously, generic unified kernel Image shouldn't enable it.
    
    patch2 adds support DCACHE_WORD_ACCESS when MMU and
    RISCV_EFFICIENT_UNALIGNED_ACCESS.
    
    Below test program and step shows how much performance can be improved:
    
     $ cat tt.c
     #include <sys/types.h>
     #include <sys/stat.h>
     #include <unistd.h>
    
     #define ITERATIONS 1000000
    
     #define PATH "123456781234567812345678123456781"
    
     int main(void)
     {
             unsigned long i;
             struct stat buf;
    
             for (i = 0; i < ITERATIONS; i++)
                     stat(PATH, &buf);
    
             return 0;
     }
    
     $ gcc -O2 tt.c
     $ touch 123456781234567812345678123456781
     $ time ./a.out
    
    Per my test on T-HEAD C910 platforms, the above test performance is
    improved by about 7.5%.
    
    * b4-shazam-merge:
      riscv: select DCACHE_WORD_ACCESS for efficient unaligned access HW
      riscv: introduce RISCV_EFFICIENT_UNALIGNED_ACCESS
    
    Link: https://lore.kernel.org/r/20231225044207.3821-1-jszhang@kernel.orgSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    17f2c308
Kconfig 29.7 KB