squashfs: add the mount parameter theads=<single|multi|percpu>
authorXiaoming Ni <nixiaoming@huawei.com>
Wed, 19 Oct 2022 03:09:29 +0000 (11:09 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 18 Nov 2022 21:55:08 +0000 (13:55 -0800)
commit80f784098ff44e086f68f0e8c98b6c6da8702ec4
treeebc40972366631d083b3d84a7f38a22d1953b3ac
parent4197530bf167d5f15e68c4e4e982368c3d0a0112
squashfs: add the mount parameter theads=<single|multi|percpu>

Patch series 'squashfs: Add the mount parameter "threads="'.

Currently, Squashfs supports multiple decompressor parallel modes.
However, this mode can be configured only during kernel building and does
not support flexible selection during runtime.

In the current patch set, the mount parameter "threads=" is added to allow
users to select the parallel decompressor mode and configure the number of
decompressors when mounting a file system.

"threads=<single|multi|percpu|1|2|3|...>"
The upper limit is num_online_cpus() * 2.

This patch (of 2):

Squashfs supports three decompression concurrency modes:
Single-thread mode: concurrent reads are blocked and the memory
overhead is small.
Multi-thread mode/percpu mode: reduces concurrent read blocking but
increases memory overhead.

The corresponding schema must be fixed at compile time. During mounting,
the concurrent decompression mode cannot be adjusted based on file read
blocking.

The mount parameter theads=<single|multi|percpu> is added to select
the concurrent decompression mode of a single SquashFS file system
image.

Link: https://lkml.kernel.org/r/20221019030930.130456-1-nixiaoming@huawei.com
Link: https://lkml.kernel.org/r/20221019030930.130456-2-nixiaoming@huawei.com
Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com>
Reviewed-by: Phillip Lougher <phillip@squashfs.org.uk>
Cc: Jianguo Chen <chenjianguo3@huawei.com>
Cc: Jubin Zhong <zhongjubin@huawei.com>
Cc: Zhang Yi <yi.zhang@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/squashfs/Kconfig
fs/squashfs/block.c
fs/squashfs/decompressor.c
fs/squashfs/decompressor_multi.c
fs/squashfs/decompressor_multi_percpu.c
fs/squashfs/decompressor_single.c
fs/squashfs/squashfs.h
fs/squashfs/squashfs_fs_sb.h
fs/squashfs/super.c