Merge tag 'for-6.6-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave...
[platform/kernel/linux-starfive.git] / fs / squashfs / Kconfig
1 # SPDX-License-Identifier: GPL-2.0-only
2 config SQUASHFS
3         tristate "SquashFS 4.0 - Squashed file system support"
4         depends on BLOCK
5         help
6           Saying Y here includes support for SquashFS 4.0 (a Compressed
7           Read-Only File System).  Squashfs is a highly compressed read-only
8           filesystem for Linux.  It uses zlib, lzo or xz compression to
9           compress both files, inodes and directories.  Inodes in the system
10           are very small and all blocks are packed to minimise data overhead.
11           Block sizes greater than 4K are supported up to a maximum of 1 Mbytes
12           (default block size 128K).  SquashFS 4.0 supports 64 bit filesystems
13           and files (larger than 4GB), full uid/gid information, hard links and
14           timestamps.
15
16           Squashfs is intended for general read-only filesystem use, for
17           archival use (i.e. in cases where a .tar.gz file may be used), and in
18           embedded systems where low overhead is needed.  Further information
19           and tools are available from http://squashfs.sourceforge.net.
20
21           If you want to compile this as a module ( = code which can be
22           inserted in and removed from the running kernel whenever you want),
23           say M here.  The module will be called squashfs.  Note that the root
24           file system (the one containing the directory /) cannot be compiled
25           as a module.
26
27           If unsure, say N.
28
29 choice
30         prompt "File decompression options"
31         depends on SQUASHFS
32         help
33           Squashfs now supports two options for decompressing file
34           data.  Traditionally Squashfs has decompressed into an
35           intermediate buffer and then memcopied it into the page cache.
36           Squashfs now supports the ability to decompress directly into
37           the page cache.
38
39           If unsure, select "Decompress file data into an intermediate buffer"
40
41 config SQUASHFS_FILE_CACHE
42         bool "Decompress file data into an intermediate buffer"
43         help
44           Decompress file data into an intermediate buffer and then
45           memcopy it into the page cache.
46
47 config SQUASHFS_FILE_DIRECT
48         bool "Decompress files directly into the page cache"
49         help
50           Directly decompress file data into the page cache.
51           Doing so can significantly improve performance because
52           it eliminates a memcpy and it also removes the lock contention
53           on the single buffer.
54
55 endchoice
56
57 config SQUASHFS_DECOMP_SINGLE
58         depends on SQUASHFS
59         def_bool n
60
61 config SQUASHFS_DECOMP_MULTI
62         depends on SQUASHFS
63         def_bool n
64
65 config SQUASHFS_DECOMP_MULTI_PERCPU
66         depends on SQUASHFS
67         def_bool n
68
69 config SQUASHFS_CHOICE_DECOMP_BY_MOUNT
70         bool "Select the parallel decompression mode during mount"
71         depends on SQUASHFS
72         default n
73         select SQUASHFS_DECOMP_SINGLE
74         select SQUASHFS_DECOMP_MULTI
75         select SQUASHFS_DECOMP_MULTI_PERCPU
76         select SQUASHFS_MOUNT_DECOMP_THREADS
77         help
78           Compile all parallel decompression modes and specify the
79           decompression mode by setting "threads=" during mount.
80           default Decompressor parallelisation is SQUASHFS_DECOMP_SINGLE
81
82 choice
83         prompt "Select decompression parallel mode at compile time"
84         depends on SQUASHFS
85         depends on !SQUASHFS_CHOICE_DECOMP_BY_MOUNT
86         help
87           Squashfs now supports three parallelisation options for
88           decompression.  Each one exhibits various trade-offs between
89           decompression performance and CPU and memory usage.
90
91           If in doubt, select "Single threaded compression"
92
93 config SQUASHFS_COMPILE_DECOMP_SINGLE
94         bool "Single threaded compression"
95         select SQUASHFS_DECOMP_SINGLE
96         help
97           Traditionally Squashfs has used single-threaded decompression.
98           Only one block (data or metadata) can be decompressed at any
99           one time.  This limits CPU and memory usage to a minimum.
100
101 config SQUASHFS_COMPILE_DECOMP_MULTI
102         bool "Use multiple decompressors for parallel I/O"
103         select SQUASHFS_DECOMP_MULTI
104         help
105           By default Squashfs uses a single decompressor but it gives
106           poor performance on parallel I/O workloads when using multiple CPU
107           machines due to waiting on decompressor availability.
108
109           If you have a parallel I/O workload and your system has enough memory,
110           using this option may improve overall I/O performance.
111
112           This decompressor implementation uses up to two parallel
113           decompressors per core.  It dynamically allocates decompressors
114           on a demand basis.
115
116 config SQUASHFS_COMPILE_DECOMP_MULTI_PERCPU
117         bool "Use percpu multiple decompressors for parallel I/O"
118         select SQUASHFS_DECOMP_MULTI_PERCPU
119         help
120           By default Squashfs uses a single decompressor but it gives
121           poor performance on parallel I/O workloads when using multiple CPU
122           machines due to waiting on decompressor availability.
123
124           This decompressor implementation uses a maximum of one
125           decompressor per core.  It uses percpu variables to ensure
126           decompression is load-balanced across the cores.
127 endchoice
128
129 config SQUASHFS_MOUNT_DECOMP_THREADS
130         bool "Add the mount parameter 'threads=' for squashfs"
131         depends on SQUASHFS
132         depends on SQUASHFS_DECOMP_MULTI
133         default n
134         help
135           Use threads= to set the decompression parallel mode and the number of threads.
136           If SQUASHFS_CHOICE_DECOMP_BY_MOUNT=y
137               threads=<single|multi|percpu|1|2|3|...>
138           else
139               threads=<2|3|...>
140           The upper limit is num_online_cpus() * 2.
141
142 config SQUASHFS_XATTR
143         bool "Squashfs XATTR support"
144         depends on SQUASHFS
145         help
146           Saying Y here includes support for extended attributes (xattrs).
147           Xattrs are name:value pairs associated with inodes by
148           the kernel or by users (see the attr(5) manual page).
149
150           If unsure, say N.
151
152 config SQUASHFS_ZLIB
153         bool "Include support for ZLIB compressed file systems"
154         depends on SQUASHFS
155         select ZLIB_INFLATE
156         default y
157         help
158           ZLIB compression is the standard compression used by Squashfs
159           file systems.  It offers a good trade-off between compression
160           achieved and the amount of CPU time and memory necessary to
161           compress and decompress.
162
163           If unsure, say Y.
164
165 config SQUASHFS_LZ4
166         bool "Include support for LZ4 compressed file systems"
167         depends on SQUASHFS
168         select LZ4_DECOMPRESS
169         help
170           Saying Y here includes support for reading Squashfs file systems
171           compressed with LZ4 compression.  LZ4 compression is mainly
172           aimed at embedded systems with slower CPUs where the overheads
173           of zlib are too high.
174
175           LZ4 is not the standard compression used in Squashfs and so most
176           file systems will be readable without selecting this option.
177
178           If unsure, say N.
179
180 config SQUASHFS_LZO
181         bool "Include support for LZO compressed file systems"
182         depends on SQUASHFS
183         select LZO_DECOMPRESS
184         help
185           Saying Y here includes support for reading Squashfs file systems
186           compressed with LZO compression.  LZO compression is mainly
187           aimed at embedded systems with slower CPUs where the overheads
188           of zlib are too high.
189
190           LZO is not the standard compression used in Squashfs and so most
191           file systems will be readable without selecting this option.
192
193           If unsure, say N.
194
195 config SQUASHFS_XZ
196         bool "Include support for XZ compressed file systems"
197         depends on SQUASHFS
198         select XZ_DEC
199         help
200           Saying Y here includes support for reading Squashfs file systems
201           compressed with XZ compression.  XZ gives better compression than
202           the default zlib compression, at the expense of greater CPU and
203           memory overhead.
204
205           XZ is not the standard compression used in Squashfs and so most
206           file systems will be readable without selecting this option.
207
208           If unsure, say N.
209
210 config SQUASHFS_ZSTD
211         bool "Include support for ZSTD compressed file systems"
212         depends on SQUASHFS
213         select ZSTD_DECOMPRESS
214         help
215           Saying Y here includes support for reading Squashfs file systems
216           compressed with ZSTD compression.  ZSTD gives better compression than
217           the default ZLIB compression, while using less CPU.
218
219           ZSTD is not the standard compression used in Squashfs and so most
220           file systems will be readable without selecting this option.
221
222           If unsure, say N.
223
224 config SQUASHFS_4K_DEVBLK_SIZE
225         bool "Use 4K device block size?"
226         depends on SQUASHFS
227         help
228           By default Squashfs sets the dev block size (sb_min_blocksize)
229           to 1K or the smallest block size supported by the block device
230           (if larger).  This, because blocks are packed together and
231           unaligned in Squashfs, should reduce latency.
232
233           This, however, gives poor performance on MTD NAND devices where
234           the optimal I/O size is 4K (even though the devices can support
235           smaller block sizes).
236
237           Using a 4K device block size may also improve overall I/O
238           performance for some file access patterns (e.g. sequential
239           accesses of files in filesystem order) on all media.
240
241           Setting this option will force Squashfs to use a 4K device block
242           size by default.
243
244           If unsure, say N.
245
246 config SQUASHFS_EMBEDDED
247         bool "Additional option for memory-constrained systems"
248         depends on SQUASHFS
249         help
250           Saying Y here allows you to specify cache size.
251
252           If unsure, say N.
253
254 config SQUASHFS_FRAGMENT_CACHE_SIZE
255         int "Number of fragments cached" if SQUASHFS_EMBEDDED
256         depends on SQUASHFS
257         default "3"
258         help
259           By default SquashFS caches the last 3 fragments read from
260           the filesystem.  Increasing this amount may mean SquashFS
261           has to re-read fragments less often from disk, at the expense
262           of extra system memory.  Decreasing this amount will mean
263           SquashFS uses less memory at the expense of extra reads from disk.
264
265           Note there must be at least one cached fragment.  Anything
266           much more than three will probably not make much difference.