diff options
| author | Salman Qazi <[email protected]> | 2020-04-24 08:03:21 -0700 |
|---|---|---|
| committer | Jens Axboe <[email protected]> | 2020-04-24 09:16:56 -0600 |
| commit | 28d65729b050977d8a9125e6726871e83bd22124 (patch) | |
| tree | 7327602a47637499b372cf7e95c5a432c5ea6940 /tools/perf/scripts/python/bin/stackcollapse-record | |
| parent | 895d47759bdc4a8452e36ad3f7bc4324c9251932 (diff) | |
block: Limit number of items taken from the I/O scheduler in one go
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.
Signed-off-by: Salman Qazi <[email protected]>
Reviewed-by: Ming Lei <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Diffstat (limited to 'tools/perf/scripts/python/bin/stackcollapse-record')
0 files changed, 0 insertions, 0 deletions