Re: [PATCH] erofs: cap Zstandard stream pool size
Gao Xiang <[email protected]> Tue, 28 Jul 2026 14:40:26 +0800
| Newsgroups | org.ozlabs.lists.linux-erofs,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Hi Xusheng, On Tue, Jul 28, 2026 at 10:18:31AM +0800, Zhan Xusheng wrote: > From: Zhan Xusheng <[email protected]> > > fs/erofs/decompressor_zstd.c sizes the module-global Zstandard stream > pool from num_possible_cpus() when the zstd_streams module parameter is > unset, and z_erofs_load_zstd_config() then preallocates one workspace per > stream, grown to the largest dictionary of any mounted image (up to > Z_EROFS_ZSTD_MAX_DICT_SIZE, i.e. Z_EROFS_PCLUSTER_MAX_SIZE). On high-CPU > systems this can pin a large amount of vmalloc-backed decoder state until > the erofs module is unloaded, mirroring the LZMA case fixed in commit > c9b47e6b2311 ("erofs: cap LZMA stream pool size"). > > Bound the default stream count by a new > CONFIG_EROFS_FS_ZIP_ZSTD_DEFAULT_MAX_STREAMS option, default 16, while > preserving the per-image workspace sizing. An explicit zstd_streams > module parameter is still honoured as-is. > > Fixes: 7c35de4df105 ("erofs: Zstandard compression support") > Signed-off-by: Zhan Xusheng <[email protected]> Thanks for the patch. Unlike LZMA, each Zstandard only takes 1MiB at most (although erofs-utils only generates 4MiB LZ77 dictionary at most for LZMA, but on-disk format allows 8MiB so just in case.) So I think for Zstandard, 1MiB each stream should fulfill to most platforms (and for embedded systems for example, the vendors should control the dictionary size when generating the image; but for servers, I think 1MiB at most for each server CPU is OK). Unless there is a particular need, I don't expect every decompressor need a strict customized Kconfig for this (of course, DEFLATE and LZ4 takes 32k/64k so it doesn't matter.) Thanks, Gao Xiang