Commit | Line | Data |
---|---|---|
ec8f24b7 | 1 | # SPDX-License-Identifier: GPL-2.0-only |
22635ec9 AD |
2 | config SQUASHFS |
3 | tristate "SquashFS 4.0 - Squashed file system support" | |
4 | depends on BLOCK | |
22635ec9 AD |
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 | |
681ffe2e PL |
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 | |
4b676d2d | 14 | timestamps. |
22635ec9 AD |
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), | |
395cf969 PB |
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. | |
22635ec9 AD |
26 | |
27 | If unsure, say N. | |
28 | ||
0d455c12 PL |
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 | ||
80f78409 XN |
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 | |
fb40fe04 | 76 | select SQUASHFS_MOUNT_DECOMP_THREADS |
80f78409 XN |
77 | help |
78 | Compile all parallel decompression modes and specify the | |
79 | decompression mode by setting "threads=" during mount. | |
80f78409 XN |
80 | default Decompressor parallelisation is SQUASHFS_DECOMP_SINGLE |
81 | ||
d208383d | 82 | choice |
80f78409 | 83 | prompt "Select decompression parallel mode at compile time" |
d208383d | 84 | depends on SQUASHFS |
80f78409 | 85 | depends on !SQUASHFS_CHOICE_DECOMP_BY_MOUNT |
d208383d PL |
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 | ||
80f78409 | 93 | config SQUASHFS_COMPILE_DECOMP_SINGLE |
d208383d | 94 | bool "Single threaded compression" |
80f78409 | 95 | select SQUASHFS_DECOMP_SINGLE |
d208383d PL |
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 | ||
80f78409 | 101 | config SQUASHFS_COMPILE_DECOMP_MULTI |
d208383d | 102 | bool "Use multiple decompressors for parallel I/O" |
80f78409 | 103 | select SQUASHFS_DECOMP_MULTI |
d208383d PL |
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 | ||
80f78409 | 116 | config SQUASHFS_COMPILE_DECOMP_MULTI_PERCPU |
d208383d | 117 | bool "Use percpu multiple decompressors for parallel I/O" |
80f78409 | 118 | select SQUASHFS_DECOMP_MULTI_PERCPU |
d208383d PL |
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. | |
d208383d PL |
127 | endchoice |
128 | ||
fb40fe04 XN |
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 | ||
637d5c9a | 142 | config SQUASHFS_XATTR |
01e5b4e4 PL |
143 | bool "Squashfs XATTR support" |
144 | depends on SQUASHFS | |
01e5b4e4 PL |
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 | ||
cc6d3497 PL |
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 | ||
62421645 PL |
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 | ||
79cb8ced CJ |
180 | config SQUASHFS_LZO |
181 | bool "Include support for LZO compressed file systems" | |
182 | depends on SQUASHFS | |
183 | select LZO_DECOMPRESS | |
4b676d2d PL |
184 | help |
185 | Saying Y here includes support for reading Squashfs file systems | |
70f23fd6 | 186 | compressed with LZO compression. LZO compression is mainly |
4b676d2d PL |
187 | aimed at embedded systems with slower CPUs where the overheads |
188 | of zlib are too high. | |
79cb8ced | 189 | |
4b676d2d PL |
190 | LZO is not the standard compression used in Squashfs and so most |
191 | file systems will be readable without selecting this option. | |
22635ec9 | 192 | |
4b676d2d PL |
193 | If unsure, say N. |
194 | ||
7a43ae52 PL |
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 | |
70f23fd6 | 201 | compressed with XZ compression. XZ gives better compression than |
7a43ae52 PL |
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 | ||
87bf54bb SP |
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 | ||
7657cacf PL |
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 | ||
4b676d2d PL |
246 | config SQUASHFS_EMBEDDED |
247 | bool "Additional option for memory-constrained systems" | |
22635ec9 | 248 | depends on SQUASHFS |
22635ec9 AD |
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. |