Thread (72 messages) 72 messages, 4 authors, 2021-02-22

[PATCH v15 31/42] btrfs: zoned: do not use async metadata checksum on zoned filesystems

flat view
STALE2055d REVIEWED: 2 (2M)

From: Naohiro Aota <naohiro.aota@wdc.com>
Date: 2021-02-04 10:31:15
Also in: linux-fsdevel
Subsystem: btrfs file system, filesystems (vfs and infrastructure), the rest · Maintainers: David Sterba, Alexander Viro, Christian Brauner, Linus Torvalds

1 review trailer.

On zoned filesystems, btrfs uses per-FS zoned_meta_io_lock to serialize
the metadata write IOs.

Even with this serialization, write bios sent from btree_write_cache_pages
can be reordered by async checksum workers as these workers are per CPU and
not per zone.

To preserve write BIO ordering, we disable async metadata checksum on a
zoned filesystem. This does not result in lower performance with HDDs as a
single CPU core is fast enough to do checksum for a single zone write
stream with the maximum possible bandwidth of the device. If multiple zones
are being written simultaneously, HDD seek overhead lowers the achievable
maximum bandwidth, resulting again in a per zone checksum serialization not
affecting the performance.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 fs/btrfs/disk-io.c | 2 ++
 1 file changed, 2 insertions(+)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 458bb27e0327..6e16f556ed75 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -871,6 +871,8 @@ static blk_status_t btree_submit_bio_start(struct inode *inode, struct bio *bio,
 static int check_async_write(struct btrfs_fs_info *fs_info,
 			     struct btrfs_inode *bi)
 {
+	if (btrfs_is_zoned(fs_info))
+		return 0;
 	if (atomic_read(&bi->sync_writers))
 		return 0;
 	if (test_bit(BTRFS_FS_CSUM_IMPL_FAST, &fs_info->flags))
-- 
2.30.0
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help