Existing random zone index generation logic is dependent on the file size. For smaller I/O sizes the random zone index always return a particular section of open zones. As this index is used to return one of the open zones, it was observed that after one of the max_open_zones / job_max_open_zones limit is reached all further I/O's are redirected to only a few open zones till they are full. This patch modifies the random zone index genration logic so that it is uniform across all the open zones. --- zbd.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/zbd.c b/zbd.c index 04c68de..43f12b4 100644 --- a/zbd.c +++ b/zbd.c @@ -1184,11 +1184,12 @@ out: return res; } -/* Anything goes as long as it is not a constant. */ +/* Return random zone index for one of the open zones. */ static uint32_t pick_random_zone_idx(const struct fio_file *f, const struct io_u *io_u) { - return io_u->offset * f->zbd_info->num_open_zones / f->real_file_size; + return (io_u->offset - f->file_offset) * f->zbd_info->num_open_zones / + f->io_size; } /* -- 1.8.3.1