diff options
author | Anssi Hannula <anssi.hannula@iki.fi> | 2023-11-07 11:46:53 +0200 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2024-04-17 00:04:24 -0400 |
commit | e0e6b13d0ea7330234a6fe51ec3ba13ef884735e (patch) | |
tree | 232342342e75b3785158b834d6f15d56e4fd01f2 | |
parent | 187ba4f31537cf926cbd9849ee6848c9251ff8e5 (diff) | |
download | e2fsprogs-e0e6b13d0ea7330234a6fe51ec3ba13ef884735e.tar.gz |
resize2fs: avoid constantly flushing while moving blocks
resize2fs block_mover() flushes data after each extent and, curiously,
only if progress indicator is enabled, every inode_blocks_per_group
blocks.
This significantly affects performance, e.g. on a tested large
filesystem on top of MD-RAID6+LVM+dm-crypt these flush calls reduce the
operation rate from approx. 500MB/s to 5MB/s, causing extremely long
shrinking times for large size deltas (70TB in my case).
Since this step performs just plain data copying and does not e.g. save
any progress/checkpoint information or similar metadata, it seems like
this flushing is of very limited usefulness, especially when considering
the (in some cases) 100x performance impact.
Remove the mid-operation flushes and only flush after all blocks have
been moved.
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
Link: https://lore.kernel.org/r/20231107094920.4056281-1-anssi.hannula@iki.fi
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r-- | resize/resize2fs.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/resize/resize2fs.c b/resize/resize2fs.c index 5eeb7d446..46540501d 100644 --- a/resize/resize2fs.c +++ b/resize/resize2fs.c @@ -1863,7 +1863,6 @@ static errcode_t block_mover(ext2_resize_t rfs) old_blk += c; moved += c; if (rfs->progress) { - io_channel_flush(fs->io); retval = (rfs->progress)(rfs, E2_RSZ_BLOCK_RELOC_PASS, moved, to_move); @@ -1871,9 +1870,10 @@ static errcode_t block_mover(ext2_resize_t rfs) goto errout; } } while (size > 0); - io_channel_flush(fs->io); } + io_channel_flush(fs->io); + errout: if (badblock_list) { if (!retval && bb_modified) |