On Thu, 19 Sep 2019, Damien Le Moal wrote: > > This is exactly the sort of difference one might expect to see from > > the commit f664a3cc17b7 ("scsi: kill off the legacy IO path") you > > identified as the cause of the problem. With multiqueue I/O, it's not > > surprising to see multiple sequences of block numbers. > > > > Add it's not at all surprising that a consumer-grade USB storage device > > might do a much worse job of handling non-sequential writes than > > sequential ones. > > > > Which leads to a simple question for the SCSI or block-layer > > maintainers: Is there a sysfs setting Andrea can tweak which will > > effectively restrict a particular disk device down to a single I/O > > queue, forcing sequential access? > > The scheduling inefficiency you are seeing may be coming from the fact that the > block layer does a direct issue of requests, bypassing the elevator, under some > conditions. One of these is sync requests on a multiqueue device. We hit this > problem on Zoned disks which can easily return an error for write requests > without the elevator throttling writes per zones (zone write locking). This > problem was discovered by Hans (on CC). Is there any way for Andrea to check whether this is the underlying cause? > I discussed this with Hannes yesterday and we think we have a fix, but we'll > need to do a lot of testing as all block devices are potentially impacted by the > change, including stacked drivers (DM). Performance regression is scary with any > change in that area (see blk_mq_make_request() and use of > blk_mq_try_issue_directly() vs blk_mq_sched_insert_request()). No doubt Andrea will be happy to test your fix when it's ready. Alan Stern