]> git.ipfire.org Git - thirdparty/linux.git/commit
erofs: free pclusters if no cached folio is attached
authorChunhai Guo <guochunhai@vivo.com>
Tue, 12 Nov 2024 04:32:35 +0000 (21:32 -0700)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Mon, 18 Nov 2024 10:50:13 +0000 (18:50 +0800)
commitf5ad9f9a603f829d11ca31a0a4049e16091e8c13
tree467eeabb0a98926daa90ad7ecdb522cb7aaca40b
parentbf1aa03980f4eb1599b866ccd2c4ac577ef56a8a
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>
fs/erofs/zdata.c