aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2024-11-23 16:47:10 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2024-12-21 01:36:19 -0500
commite1cb4f56dc4cfcf1cb1b90479cb35c5a304ff527 (patch)
tree33b22ae5232ad96cbc298a164747386f627264fd
parentbcachefs: trivial btree write buffer refactoring (diff)
downloadlinux-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.c8
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;