Messages in this thread | | | Subject | Re: [PATCH v2] block: Limit number of items taken from the I/O scheduler in one go | From | Jens Axboe <> | Date | Thu, 23 Apr 2020 15:30:01 -0600 |
| |
On 4/23/20 3:05 PM, Salman Qazi wrote: > Flushes bypass the I/O scheduler and get added to hctx->dispatch > in blk_mq_sched_bypass_insert. This can happen while a kworker is running > hctx->run_work work item and is past the point in > blk_mq_sched_dispatch_requests where hctx->dispatch is checked. > > The blk_mq_do_dispatch_sched call is not guaranteed to end in bounded time, > because the I/O scheduler can feed an arbitrary number of commands. > > Since we have only one hctx->run_work, the commands waiting in > hctx->dispatch will wait an arbitrary length of time for run_work to be > rerun. > > A similar phenomenon exists with dispatches from the software queue. > > The solution is to poll hctx->dispatch in blk_mq_do_dispatch_sched and > blk_mq_do_dispatch_ctx and return from the run_work handler and let it > rerun.
Any changes since v1? It's customary to put that in here too, below the --- lines.
-- Jens Axboe
| |