From: Kent Overstreet Date: Sat, 23 Nov 2024 21:47:10 +0000 (-0500) Subject: bcachefs: Bias reads more in favor of faster device X-Git-Tag: v6.14-rc1~204^2~156 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e1cb4f56dc4cfcf1cb1b90479cb35c5a304ff527;p=thirdparty%2Fkernel%2Flinux.git 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 --- diff --git a/fs/bcachefs/extents.c b/fs/bcachefs/extents.c index 98bb680b3860b..83aeceb688479 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;