Commit 24ab9cd8 authored by Chris Mason's avatar Chris Mason

Btrfs: Raise thresholds for metadata writeback

Btrfs metadata writeback is fairly expensive.  Once a tree block is written
it must be cowed before it can be changed again.  The btree writepages
code has a threshold based on a count of dirty btree bytes which is
updated as IO is sent out.

This changes btree_writepages to skip the writeout if there are less
than 32MB of dirty bytes from the btrees, improving performance
across many workloads.
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 4434c33c
...@@ -556,7 +556,7 @@ static int btree_writepages(struct address_space *mapping, ...@@ -556,7 +556,7 @@ static int btree_writepages(struct address_space *mapping,
if (wbc->sync_mode == WB_SYNC_NONE) { if (wbc->sync_mode == WB_SYNC_NONE) {
u64 num_dirty; u64 num_dirty;
u64 start = 0; u64 start = 0;
unsigned long thresh = 8 * 1024 * 1024; unsigned long thresh = 32 * 1024 * 1024;
if (wbc->for_kupdate) if (wbc->for_kupdate)
return 0; return 0;
...@@ -690,7 +690,7 @@ struct extent_buffer *btrfs_find_create_tree_block(struct btrfs_root *root, ...@@ -690,7 +690,7 @@ struct extent_buffer *btrfs_find_create_tree_block(struct btrfs_root *root,
int btrfs_write_tree_block(struct extent_buffer *buf) int btrfs_write_tree_block(struct extent_buffer *buf)
{ {
return btrfs_fdatawrite_range(buf->first_page->mapping, buf->start, return btrfs_fdatawrite_range(buf->first_page->mapping, buf->start,
buf->start + buf->len - 1, WB_SYNC_NONE); buf->start + buf->len - 1, WB_SYNC_ALL);
} }
int btrfs_wait_tree_block_writeback(struct extent_buffer *buf) int btrfs_wait_tree_block_writeback(struct extent_buffer *buf)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment