diff options
author | 2024-11-23 16:47:10 -0500 | |
---|---|---|
committer | 2024-12-21 01:36:19 -0500 | |
commit | e1cb4f56dc4cfcf1cb1b90479cb35c5a304ff527 (patch) | |
tree | 33b22ae5232ad96cbc298a164747386f627264fd | |
parent | bcachefs: trivial btree write buffer refactoring (diff) | |
download | linux-rng-e1cb4f56dc4cfcf1cb1b90479cb35c5a304ff527.tar.xz linux-rng-e1cb4f56dc4cfcf1cb1b90479cb35c5a304ff527.zip |
bcachefs: Bias reads more in favor of faster device
Per reports of performance issues on mixed multi device filesystems
where we're issuing too much IO to the spinning rust - tweak this
algorithm.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/extents.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/bcachefs/extents.c b/fs/bcachefs/extents.c index 98bb680b3860..83aeceb68847 100644 --- a/fs/bcachefs/extents.c +++ b/fs/bcachefs/extents.c @@ -89,6 +89,14 @@ static inline bool ptr_better(struct bch_fs *c, u64 l1 = dev_latency(c, p1.ptr.dev); u64 l2 = dev_latency(c, p2.ptr.dev); + /* + * Square the latencies, to bias more in favor of the faster + * device - we never want to stop issuing reads to the slower + * device altogether, so that we can update our latency numbers: + */ + l1 *= l1; + l2 *= l2; + /* Pick at random, biased in favor of the faster device: */ return bch2_rand_range(l1 + l2) > l1; |