Re: [RFC PATCH] bcache: reduce gc latency by processing less nodes and sleep less time
Robert Pang <[email protected]> Fri, 5 Sep 2025 15:43:29 -0700
| Newsgroups | org.kernel.vger.linux-bcache |
|---|---|
| Message-ID | <CAJhEC04owpJMN_7+0kkNeJnFsUDjcv1JapgRqOnkOfyUCpN8pA@mail.gmail.com> |
Hi Coly, Thank you for your new patch. I have reviewed the patch, and it is much simpler and cleaner indeed. In addition, I have run the 24-hour stress tests and can confirm that it brings noticeable performance improvement. For our 4kb writethrough workload, your patch further reduces the median (P50) latency during garbage collection from about 20 ms in the previous approach [1] to 4 ms [2]. And I did not observe any issues during my testing. This is a great step forward. I look forward to seeing this patch submitted soon. And please feel free to add me to the sign-off list if it fits. Best regards, Robert Pang [1] https://gist.github.com/robert-pang/a22b7c5dee2600be3260f4db57e5776d [2] https://gist.github.com/robert-pang/05b17921a83d59afc8aab28b5d9e9e0d On Thu, Aug 28, 2025 at 9:25 AM Coly Li <[email protected]> wrote: > > Hi Robert, > > Your patch breaks the emwa_add() method to maintain the gc stats numbers. So I have to look for another method but try to get similar benchmark results as yours did. > > Hi Mingzhe, > > The dynamic sleep interval and gc nodes patch is kind of over complicated IMHO. So I compose a simplified one based on the idea from you and Robert. > > > Can you all help to review and test this RFC patch? Hope it may work out. Thanks for your help in advance. > > Coly Li > > > > > 2025年8月29日 00:16,[email protected] 写道: > > > > When bcache device is busy for high I/O loads, there are two methods to > > reduce the garbage collection latency, > > - Process less nodes in eac loop of incremental garbage collection in > > btree_gc_recurse(). > > - Sleep less time between two full garbage collection in > > bch_btree_gc(). > > > > This patch introduces to hleper routines to provide different garbage > > collection nodes number and sleep intervel time. > > - btree_gc_min_nodes() > > If there is no front end I/O, return 128 nodes to process in each > > incremental loop, otherwise only 10 nodes are returned. Then front I/O > > is able to access the btree earlier. > > - btree_gc_sleep_ms() > > If there is no synchronized wait for bucket allocation, sleep 100 ms > > between two incremental GC loop. Othersize only sleep 10 ms before > > incremental GC loop. Then a faster GC may provide available buckets > > earlier, to avoid most of bcache working threads from being starved by > > buckets allocation. > > > > The idea is inspired by works from Mingzhe Zou and Robert Pang, but much > > simpler and the expected behavior is more predictable. > > > > Signed-off-by: Coly Li <[email protected]> > > Cc: Robert Pang <[email protected]> > > Cc: Mingzhe Zou <[email protected]> > > --- > > [snipped] >