linux-next/fs/erofs
Chunhai Guo f5ad9f9a60 erofs: free pclusters if no cached folio is attached
Once a pcluster is fully decompressed and there are no attached cached
folios, its corresponding `struct z_erofs_pcluster` will be freed. This
will significantly reduce the frequency of calls to erofs_shrink_scan()
and the memory allocated for `struct z_erofs_pcluster`.

The tables below show approximately a 96% reduction in the calls to
erofs_shrink_scan() and in the memory allocated for `struct
z_erofs_pcluster` after applying this patch. The results were obtained
by performing a test to copy a 4.1GB partition on ARM64 Android devices
running the 6.6 kernel with an 8-core CPU and 12GB of memory.

1. The reduction in calls to erofs_shrink_scan():
+-----------------+-----------+----------+---------+
|                 | w/o patch | w/ patch |  diff   |
+-----------------+-----------+----------+---------+
| Average (times) |   11390   |   390    | -96.57% |
+-----------------+-----------+----------+---------+

2. The reduction in memory released by erofs_shrink_scan():
+-----------------+-----------+----------+---------+
|                 | w/o patch | w/ patch |  diff   |
+-----------------+-----------+----------+---------+
| Average (Byte)  | 133612656 | 4434552  | -96.68% |
+-----------------+-----------+----------+---------+

Signed-off-by: Chunhai Guo <guochunhai@vivo.com>
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20241112043235.546164-1-guochunhai@vivo.com
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
2024-11-18 18:50:13 +08:00
..
compress.h erofs: avoid refcounting short-lived pages 2024-07-11 15:14:26 +08:00
data.c erofs: add SEEK_{DATA,HOLE} support 2024-11-12 10:25:19 +08:00
decompressor_deflate.c erofs: tidy up stream decompressors 2024-07-09 19:04:41 +08:00
decompressor_lzma.c erofs: convert comma to semicolon 2024-07-26 18:48:12 +08:00
decompressor_zstd.c erofs: tidy up stream decompressors 2024-07-09 19:04:41 +08:00
decompressor.c erofs: fix error handling in z_erofs_init_decompressor 2024-09-10 00:46:34 +08:00
dir.c erofs: simplify readdir operation 2024-08-19 11:06:20 +08:00
erofs_fs.h erofs: restrict pcluster size limitations 2024-09-12 23:00:09 +08:00
fileio.c erofs: support compressed inodes for fileio 2024-09-10 15:27:09 +08:00
fscache.c erofs: don't align offset for erofs_read_metabuf() (simple cases) 2024-05-18 01:47:26 +08:00
inode.c erofs: reject inodes with negative i_size 2024-09-12 23:00:09 +08:00
internal.h erofs: sunset struct erofs_workgroup 2024-11-18 18:50:12 +08:00
Kconfig erofs: mark experimental fscache backend deprecated 2024-09-10 15:27:11 +08:00
Makefile erofs: support unencoded inodes for fileio 2024-09-10 15:26:36 +08:00
namei.c erofs_buf: store address_space instead of inode 2024-04-25 00:57:14 -04:00
super.c erofs: use get_tree_bdev_flags() to avoid misleading messages 2024-10-21 14:30:27 +02:00
sysfs.c erofs: clean up erofs_register_sysfs() 2024-09-10 00:46:34 +08:00
xattr.c erofs_buf: store address_space instead of inode 2024-04-25 00:57:14 -04:00
xattr.h erofs: move erofs_xattr_handlers and xattr_handler_map to .rodata 2023-10-09 16:24:17 +02:00
zdata.c erofs: free pclusters if no cached folio is attached 2024-11-18 18:50:13 +08:00
zmap.c Changes since last update: 2024-10-14 11:12:09 -07:00
zutil.c erofs: move erofs_workgroup operations into zdata.c 2024-11-18 18:50:12 +08:00