On Wed, Mar 9, 2022 at 10:48 PM Christoph Hellwig <hch@xxxxxxxxxxxxx> wrote: > > On Tue, Mar 08, 2022 at 10:42:09PM -0800, Song Liu wrote: > > RAID arrays check/repair operations benefit a lot from merging requests. > > If we only check the previous entry for merge attempt, many merge will be > > missed. As a result, significant regression is observed for RAID check > > and repair. > > > > Fix this by checking more than just the previous entry when > > plug->multiple_queues == true. > > But this also means really significant CPU overhead for all other > workloads. Would the following check help with these workloads? if (!plug->multiple_queues) break; > > > > > This improves the check/repair speed of a 20-HDD raid6 from 19 MB/s to > > 103 MB/s. > > What driver uses multiple queues for HDDs? > > Can you explain the workload submitted by a md a bit better? I wonder > if we can easily do the right thing straight in the md driver. It is the md sync_thread doing check and repair. Basically, the md thread reads all the disks and computes parity from data. Maybe we should add a new flag to struct blk_plug for this special case? Song