Skip to content

Commit

Permalink
Fix hangs due to iodepth_low
Browse files Browse the repository at this point in the history
With some combinations of iodepth, iodepth_batch, iodepth_batch_complete,
and io_depth_low, do_io hangs after reaping the first set of completions
since io_u_queued_complete is called requesting more completions than
td->cur_depth.

Example printing min_evts and td->cur_depth in the do/while loop:
waiting on min=96 cd=627
waiting on min=96 cd=531
waiting on min=96 cd=435
waiting on min=96 cd=339
waiting on min=96 cd=243
waiting on min=96 cd=147
waiting on min=96 cd=51
Jobs: 12 (f=12): [r(12)] [43.8% done] [0KB/0KB/0KB /s] [0/0/0 iops] [eta 00m:09s]
...
Jobs: 12 (f=12): [r(12)] [0.0% done] [0KB/0KB/0KB /s] [0/0/0 iops] [eta 2863d:18h:28m:38s]
<fio never exits>

Fix this by adjusting min_evts to the current_depth if that is smaller.

Tested with a jobfile including:
iodepth=1011
iodepth_batch=96
iodepth_batch_complete=96
iodepth_low=1
runtime=15
time_based

Modified by Jens to fix the check, and move it into
io_u_queued_complete() instead of at the caller site.

Signed-off-by: Jens Axboe <axboe@fb.com>
  • Loading branch information
Robert Elliott authored and axboe committed Sep 4, 2014
1 parent 9a4424c commit 5fb4b36
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions io_u.c
Original file line number Diff line number Diff line change
Expand Up @@ -1792,6 +1792,8 @@ int io_u_queued_complete(struct thread_data *td, int min_evts,

if (!min_evts)
tvp = &ts;
else if (min_evts > td->cur_depth)
min_evts = td->cur_depth;

ret = td_io_getevents(td, min_evts, td->o.iodepth_batch_complete, tvp);
if (ret < 0) {
Expand Down

0 comments on commit 5fb4b36

Please sign in to comment.