mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Gao Xiang <hsiangkao@linux.alibaba.com>
To: linux-erofs@lists.ozlabs.org, Chao Yu <chao@kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Gao Xiang <hsiangkao@linux.alibaba.com>
Subject: [PATCH v2 00/16] erofs: prepare for folios, deduplication and kill PG_error
Date: Fri, 15 Jul 2022 23:41:47 +0800	[thread overview]
Message-ID: <20220715154203.48093-1-hsiangkao@linux.alibaba.com> (raw)

Hi folks,

I've been doing this for almost 2 months, the main point of this is
to support large folios and rolling hash deduplication for compressed
data.

This patchset is as a start of this work targeting for the next 5.20,
it introduces a flexable range representation for (de)compressed buffers
instead of too relying on page(s) directly themselves, so large folios
can laterly base on this work.  Also, this patchset gets rid of all
PG_error flags in the decompression code. It's a cleanup as a result
as well.

In addition, this patchset kicks off rolling hash deduplication for
compressed data by introducing fully-referenced multi-reference
pclusters first instead of reporting fs corruption if one pcluster
is introduced by several differnt extents.  The full implementation
is expected to be finished in the merge window after the next.  One
of my colleagues is actively working on the userspace part of this
feature.

However, it's still easy to verify fully-referenced multi-reference
pcluster by constructing some image by hand (see attachment):

Dataset: 300M
seq-read (data-deduplicated, read_ahead_kb 8192): 1095MiB/s
seq-read (data-deduplicated, read_ahead_kb 4096): 771MiB/s
seq-read (data-deduplicated, read_ahead_kb 512):  577MiB/s
seq-read (vanilla, read_ahead_kb 8192):           364MiB/s

Finally, this patchset survives ro-fsstress on my side.

Thanks,
Gao Xiang

Changes since v1:
 - rename left pagevec words to bvpage (Yue Hu);

Gao Xiang (16):
  erofs: get rid of unneeded `inode', `map' and `sb'
  erofs: clean up z_erofs_collector_begin()
  erofs: introduce `z_erofs_parse_out_bvecs()'
  erofs: introduce bufvec to store decompressed buffers
  erofs: drop the old pagevec approach
  erofs: introduce `z_erofs_parse_in_bvecs'
  erofs: switch compressed_pages[] to bufvec
  erofs: rework online page handling
  erofs: get rid of `enum z_erofs_page_type'
  erofs: clean up `enum z_erofs_collectmode'
  erofs: get rid of `z_pagemap_global'
  erofs: introduce struct z_erofs_decompress_backend
  erofs: try to leave (de)compressed_pages on stack if possible
  erofs: introduce z_erofs_do_decompressed_bvec()
  erofs: record the longest decompressed size in this round
  erofs: introduce multi-reference pclusters (fully-referenced)

 fs/erofs/compress.h     |   2 +-
 fs/erofs/decompressor.c |   2 +-
 fs/erofs/zdata.c        | 785 +++++++++++++++++++++++-----------------
 fs/erofs/zdata.h        | 119 +++---
 fs/erofs/zpvec.h        | 159 --------
 5 files changed, 496 insertions(+), 571 deletions(-)
 delete mode 100644 fs/erofs/zpvec.h

-- 
2.24.4


             reply	other threads:[~2022-07-15 15:42 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-15 15:41 Gao Xiang [this message]
2022-07-15 15:41 ` [PATCH v2 01/16] erofs: get rid of unneeded `inode', `map' and `sb' Gao Xiang
2022-07-15 15:41 ` [PATCH v2 02/16] erofs: clean up z_erofs_collector_begin() Gao Xiang
2022-07-15 15:41 ` [PATCH v2 03/16] erofs: introduce `z_erofs_parse_out_bvecs()' Gao Xiang
2022-07-15 15:41 ` [PATCH v2 04/16] erofs: introduce bufvec to store decompressed buffers Gao Xiang
2022-07-15 15:41 ` [PATCH v2 05/16] erofs: drop the old pagevec approach Gao Xiang
2022-07-15 15:41 ` [PATCH v2 06/16] erofs: introduce `z_erofs_parse_in_bvecs' Gao Xiang
2022-07-15 15:41 ` [PATCH v2 07/16] erofs: switch compressed_pages[] to bufvec Gao Xiang
2022-07-15 15:41 ` [PATCH v2 08/16] erofs: rework online page handling Gao Xiang
2022-07-15 15:41 ` [PATCH v2 09/16] erofs: get rid of `enum z_erofs_page_type' Gao Xiang
2022-07-15 15:41 ` [PATCH v2 10/16] erofs: clean up `enum z_erofs_collectmode' Gao Xiang
2022-07-15 15:41 ` [PATCH v2 11/16] erofs: get rid of `z_pagemap_global' Gao Xiang
2022-07-15 15:41 ` [PATCH v2 12/16] erofs: introduce struct z_erofs_decompress_backend Gao Xiang
2022-07-15 15:42 ` [PATCH v2 13/16] erofs: try to leave (de)compressed_pages on stack if possible Gao Xiang
2022-07-15 15:42 ` [PATCH v2 14/16] erofs: introduce z_erofs_do_decompressed_bvec() Gao Xiang
2022-07-15 15:42 ` [PATCH v2 15/16] erofs: record the longest decompressed size in this round Gao Xiang
2022-07-15 15:42 ` [PATCH v2 16/16] erofs: introduce multi-reference pclusters (fully-referenced) Gao Xiang
2022-07-21 14:31 ` [PATCH v2 00/16] erofs: prepare for folios, deduplication and kill PG_error Chao Yu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220715154203.48093-1-hsiangkao@linux.alibaba.com \
    --to=hsiangkao@linux.alibaba.com \
    --cc=chao@kernel.org \
    --cc=linux-erofs@lists.ozlabs.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®