1# SPDX-License-Identifier: GPL-2.0-only 2config 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 29choice 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 41config 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 47config 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 55endchoice 56 57config SQUASHFS_DECOMP_SINGLE 58 depends on SQUASHFS 59 def_bool n 60 61config SQUASHFS_DECOMP_MULTI 62 depends on SQUASHFS 63 def_bool n 64 65config SQUASHFS_DECOMP_MULTI_PERCPU 66 depends on SQUASHFS 67 def_bool n 68 69config 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 help 77 Compile all parallel decompression modes and specify the 78 decompression mode by setting "threads=" during mount. 79 threads=<single|multi|percpu> 80 81 default Decompressor parallelisation is SQUASHFS_DECOMP_SINGLE 82 83choice 84 prompt "Select decompression parallel mode at compile time" 85 depends on SQUASHFS 86 depends on !SQUASHFS_CHOICE_DECOMP_BY_MOUNT 87 help 88 Squashfs now supports three parallelisation options for 89 decompression. Each one exhibits various trade-offs between 90 decompression performance and CPU and memory usage. 91 92 If in doubt, select "Single threaded compression" 93 94config SQUASHFS_COMPILE_DECOMP_SINGLE 95 bool "Single threaded compression" 96 select SQUASHFS_DECOMP_SINGLE 97 help 98 Traditionally Squashfs has used single-threaded decompression. 99 Only one block (data or metadata) can be decompressed at any 100 one time. This limits CPU and memory usage to a minimum. 101 102config SQUASHFS_COMPILE_DECOMP_MULTI 103 bool "Use multiple decompressors for parallel I/O" 104 select SQUASHFS_DECOMP_MULTI 105 help 106 By default Squashfs uses a single decompressor but it gives 107 poor performance on parallel I/O workloads when using multiple CPU 108 machines due to waiting on decompressor availability. 109 110 If you have a parallel I/O workload and your system has enough memory, 111 using this option may improve overall I/O performance. 112 113 This decompressor implementation uses up to two parallel 114 decompressors per core. It dynamically allocates decompressors 115 on a demand basis. 116 117config SQUASHFS_COMPILE_DECOMP_MULTI_PERCPU 118 bool "Use percpu multiple decompressors for parallel I/O" 119 select SQUASHFS_DECOMP_MULTI_PERCPU 120 help 121 By default Squashfs uses a single decompressor but it gives 122 poor performance on parallel I/O workloads when using multiple CPU 123 machines due to waiting on decompressor availability. 124 125 This decompressor implementation uses a maximum of one 126 decompressor per core. It uses percpu variables to ensure 127 decompression is load-balanced across the cores. 128endchoice 129 130config SQUASHFS_XATTR 131 bool "Squashfs XATTR support" 132 depends on SQUASHFS 133 help 134 Saying Y here includes support for extended attributes (xattrs). 135 Xattrs are name:value pairs associated with inodes by 136 the kernel or by users (see the attr(5) manual page). 137 138 If unsure, say N. 139 140config SQUASHFS_ZLIB 141 bool "Include support for ZLIB compressed file systems" 142 depends on SQUASHFS 143 select ZLIB_INFLATE 144 default y 145 help 146 ZLIB compression is the standard compression used by Squashfs 147 file systems. It offers a good trade-off between compression 148 achieved and the amount of CPU time and memory necessary to 149 compress and decompress. 150 151 If unsure, say Y. 152 153config SQUASHFS_LZ4 154 bool "Include support for LZ4 compressed file systems" 155 depends on SQUASHFS 156 select LZ4_DECOMPRESS 157 help 158 Saying Y here includes support for reading Squashfs file systems 159 compressed with LZ4 compression. LZ4 compression is mainly 160 aimed at embedded systems with slower CPUs where the overheads 161 of zlib are too high. 162 163 LZ4 is not the standard compression used in Squashfs and so most 164 file systems will be readable without selecting this option. 165 166 If unsure, say N. 167 168config SQUASHFS_LZO 169 bool "Include support for LZO compressed file systems" 170 depends on SQUASHFS 171 select LZO_DECOMPRESS 172 help 173 Saying Y here includes support for reading Squashfs file systems 174 compressed with LZO compression. LZO compression is mainly 175 aimed at embedded systems with slower CPUs where the overheads 176 of zlib are too high. 177 178 LZO is not the standard compression used in Squashfs and so most 179 file systems will be readable without selecting this option. 180 181 If unsure, say N. 182 183config SQUASHFS_XZ 184 bool "Include support for XZ compressed file systems" 185 depends on SQUASHFS 186 select XZ_DEC 187 help 188 Saying Y here includes support for reading Squashfs file systems 189 compressed with XZ compression. XZ gives better compression than 190 the default zlib compression, at the expense of greater CPU and 191 memory overhead. 192 193 XZ is not the standard compression used in Squashfs and so most 194 file systems will be readable without selecting this option. 195 196 If unsure, say N. 197 198config SQUASHFS_ZSTD 199 bool "Include support for ZSTD compressed file systems" 200 depends on SQUASHFS 201 select ZSTD_DECOMPRESS 202 help 203 Saying Y here includes support for reading Squashfs file systems 204 compressed with ZSTD compression. ZSTD gives better compression than 205 the default ZLIB compression, while using less CPU. 206 207 ZSTD is not the standard compression used in Squashfs and so most 208 file systems will be readable without selecting this option. 209 210 If unsure, say N. 211 212config SQUASHFS_4K_DEVBLK_SIZE 213 bool "Use 4K device block size?" 214 depends on SQUASHFS 215 help 216 By default Squashfs sets the dev block size (sb_min_blocksize) 217 to 1K or the smallest block size supported by the block device 218 (if larger). This, because blocks are packed together and 219 unaligned in Squashfs, should reduce latency. 220 221 This, however, gives poor performance on MTD NAND devices where 222 the optimal I/O size is 4K (even though the devices can support 223 smaller block sizes). 224 225 Using a 4K device block size may also improve overall I/O 226 performance for some file access patterns (e.g. sequential 227 accesses of files in filesystem order) on all media. 228 229 Setting this option will force Squashfs to use a 4K device block 230 size by default. 231 232 If unsure, say N. 233 234config SQUASHFS_EMBEDDED 235 bool "Additional option for memory-constrained systems" 236 depends on SQUASHFS 237 help 238 Saying Y here allows you to specify cache size. 239 240 If unsure, say N. 241 242config SQUASHFS_FRAGMENT_CACHE_SIZE 243 int "Number of fragments cached" if SQUASHFS_EMBEDDED 244 depends on SQUASHFS 245 default "3" 246 help 247 By default SquashFS caches the last 3 fragments read from 248 the filesystem. Increasing this amount may mean SquashFS 249 has to re-read fragments less often from disk, at the expense 250 of extra system memory. Decreasing this amount will mean 251 SquashFS uses less memory at the expense of extra reads from disk. 252 253 Note there must be at least one cached fragment. Anything 254 much more than three will probably not make much difference. 255