All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] btrfs: per-fs compression workspace manager
@ 2025-08-14  5:33 Qu Wenruo
  2025-08-14  5:33 ` [PATCH 1/7] btrfs: add an fs_info parameter for " Qu Wenruo
                   ` (7 more replies)
  0 siblings, 8 replies; 12+ messages in thread
From: Qu Wenruo @ 2025-08-14  5:33 UTC (permalink / raw)
  To: linux-btrfs

Currently btrfs utilizes the following components at a per-module basis:

- Folios pool
  A per-module pool for compressed data.
  All folios in the pool are page sized.

- Workspace
  A workspace is a compression algorithm specific structure, providing
  things like extra memory buffer and compression level handling.

- Workspace manager
  The workspace manager is managing the above workspaces for each
  algorithm.

All the folio pool/workspaces are using the fixed PAGE_SIZE buffer size,
this is fine for now as even for block size (bs) < page size (ps) cases,
a larger buffer size won't cause huge problems except wasting memories.

However if we're going to support bs > ps, this fixed PAGE_SIZE buffer
and per-module shared folios pool/workspaces will not work at all.

To address this problem, this series will move the workspace and
workspace manager into a per-fs basis, so that different fses (with
different block size) can have their own workspaces.

This brings a small memory usage reduce for bs < ps cases.
Now zlib/lzo/zstd will only allocate buffer using block size.

This is especially useful for lzo compression algorithm, as lzo is an
one-short compression algorithm, it doesn't support multi-shot (aka,
swapping input/output buffer halfway) compress/decompress.

Thus btrfs goes per-block compression for LZO, and compressed result
will never go larger than a block (or btrfs will just give up).
In that case, a 64K page sized buffer will waste 7/8th of the buffer.

This is part 1 of the preparation for btrfs bs > ps support.

Qu Wenruo (7):
  btrfs: add an fs_info parameter for compression workspace manager
  btrfs: add workspace manager initialization for zstd
  btrfs: add generic workspace manager initialization
  btrfs: migrate to use per-fs workspace manager
  btrfs: cleanup the per-module workspace managers
  btrfs: rename btrfs_compress_op to btrfs_compress_levels
  btrfs: reduce workspace buffer space to block size

 fs/btrfs/compression.c | 186 ++++++++++++++++++++++++-----------------
 fs/btrfs/compression.h |  49 +++++------
 fs/btrfs/disk-io.c     |   4 +
 fs/btrfs/fs.h          |  13 +++
 fs/btrfs/lzo.c         |  25 +++---
 fs/btrfs/zlib.c        |  16 ++--
 fs/btrfs/zstd.c        | 143 ++++++++++++++++---------------
 7 files changed, 248 insertions(+), 188 deletions(-)

-- 
2.50.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2025-08-18 22:14 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-14  5:33 [PATCH 0/7] btrfs: per-fs compression workspace manager Qu Wenruo
2025-08-14  5:33 ` [PATCH 1/7] btrfs: add an fs_info parameter for " Qu Wenruo
2025-08-14  5:33 ` [PATCH 2/7] btrfs: add workspace manager initialization for zstd Qu Wenruo
2025-08-18 15:08   ` David Sterba
2025-08-18 22:14     ` Qu Wenruo
2025-08-14  5:33 ` [PATCH 3/7] btrfs: add generic workspace manager initialization Qu Wenruo
2025-08-18 15:12   ` David Sterba
2025-08-14  5:33 ` [PATCH 4/7] btrfs: migrate to use per-fs workspace manager Qu Wenruo
2025-08-14  5:33 ` [PATCH 5/7] btrfs: cleanup the per-module workspace managers Qu Wenruo
2025-08-14  5:33 ` [PATCH 6/7] btrfs: rename btrfs_compress_op to btrfs_compress_levels Qu Wenruo
2025-08-14  5:33 ` [PATCH 7/7] btrfs: reduce workspace buffer space to block size Qu Wenruo
2025-08-18 15:13 ` [PATCH 0/7] btrfs: per-fs compression workspace manager David Sterba

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.