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