summaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-11-13 09:59:36 -0500
committerChris Mason <chris.mason@oracle.com>2008-11-13 09:59:36 -0500
commit6f3577bdc768e6dae3c4d419e89b5a904f470728 (patch)
tree69d0df75fe55f7c4e9b2f1a1651478e37a3d2920 /fs/btrfs
parent5b050f04c8ce911c5b6831305a24d70eab95e732 (diff)
downloadop-kernel-dev-6f3577bdc768e6dae3c4d419e89b5a904f470728.zip
op-kernel-dev-6f3577bdc768e6dae3c4d419e89b5a904f470728.tar.gz
Btrfs: Improve metadata read latencies
This fixes latency problems on metadata reads by making sure they don't go through the async submit queue, and by tuning down the amount of readahead done during btree searches. Also, the btrfs bdi congestion function is tuned to ignore the number of pending async bios and checksums pending. There is additional code that throttles new async bios now and the congestion function doesn't need to worry about it anymore. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r--fs/btrfs/ctree.c8
-rw-r--r--fs/btrfs/disk-io.c6
2 files changed, 7 insertions, 7 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
index f82f8db..ac61c50 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -1285,16 +1285,16 @@ static noinline void reada_for_search(struct btrfs_root *root,
}
search = btrfs_node_blockptr(node, nr);
if ((search >= lowest_read && search <= highest_read) ||
- (search < lowest_read && lowest_read - search <= 32768) ||
- (search > highest_read && search - highest_read <= 32768)) {
+ (search < lowest_read && lowest_read - search <= 16384) ||
+ (search > highest_read && search - highest_read <= 16384)) {
readahead_tree_block(root, search, blocksize,
btrfs_node_ptr_generation(node, nr));
nread += blocksize;
}
nscan++;
- if (path->reada < 2 && (nread > (256 * 1024) || nscan > 32))
+ if (path->reada < 2 && (nread > (64 * 1024) || nscan > 32))
break;
- if(nread > (1024 * 1024) || nscan > 128)
+ if(nread > (256 * 1024) || nscan > 128)
break;
if (search < lowest_read)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 1bb54d6..3b0e974 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -605,7 +605,7 @@ static int btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,
BUG_ON(ret);
return btrfs_map_bio(BTRFS_I(inode)->root, rw, bio,
- mirror_num, 1);
+ mirror_num, 0);
}
return btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info,
inode, rw, bio, mirror_num, 0,
@@ -1139,11 +1139,11 @@ static int btrfs_congested_fn(void *congested_data, int bdi_bits)
struct list_head *cur;
struct btrfs_device *device;
struct backing_dev_info *bdi;
-
+#if 0
if ((bdi_bits & (1 << BDI_write_congested)) &&
btrfs_congested_async(info, 0))
return 1;
-
+#endif
list_for_each(cur, &info->fs_devices->devices) {
device = list_entry(cur, struct btrfs_device, dev_list);
if (!device->bdev)
OpenPOWER on IntegriCloud