Message ID | 20231107094920.4056281-1-anssi.hannula@iki.fi |
---|---|
State | Accepted |
Headers | show |
Series | [e2fsprogs] resize2fs: avoid constantly flushing while moving blocks | expand |
On Tue, 07 Nov 2023 11:46:53 +0200, Anssi Hannula wrote: > 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). > > [...] Applied, thanks! [1/1] resize2fs: avoid constantly flushing while moving blocks commit: e0e6b13d0ea7330234a6fe51ec3ba13ef884735e Best regards,
diff --git a/resize/resize2fs.c b/resize/resize2fs.c index 5eeb7d44..46540501 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)
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> --- resize/resize2fs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)