• Chunhai Guo's avatar
    erofs: add a reserved buffer pool for lz4 decompression · 0f6273ab
    Chunhai Guo authored
    This adds a special global buffer pool (in the end) for reserved pages.
    
    Using a reserved pool for LZ4 decompression significantly reduces the
    time spent on extra temporary page allocation for the extreme cases in
    low memory scenarios.
    
    The table below shows the reduction in time spent on page allocation for
    LZ4 decompression when using a reserved pool. The results were obtained
    from multi-app launch benchmarks on ARM64 Android devices running the
    5.15 kernel with an 8-core CPU and 8GB of memory. In the benchmark, we
    launched 16 frequently-used apps, and the camera app was the last one in
    each round. The data in the table is the average time of camera app for
    each round.
    
    After using the reserved pool, there was an average improvement of 150ms
    in the overall launch time of our camera app, which was obtained from
    the systrace log.
    
    +--------------+---------------+--------------+---------+
    |              | w/o page pool | w/ page pool |  diff   |
    +--------------+---------------+--------------+---------+
    | Average (ms) |     3434      |      21      | -99.38% |
    +--------------+---------------+--------------+---------+
    
    Based on the benchmark logs, 64 pages are sufficient for 95% of
    scenarios. This value can be adjusted with a module parameter
    `reserved_pages`. The default value is 0.
    
    This pool is currently only used for the LZ4 decompressor, but it can be
    applied to more decompressors if needed.
    Signed-off-by: default avatarChunhai Guo <guochunhai@vivo.com>
    Reviewed-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20240402131523.2703948-1-guochunhai@vivo.comSigned-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
    0f6273ab
internal.h 16.2 KB