zbd: Improve random zone index generation logic
authorAnkit Kumar <ankit.kumar@samsung.com>
Wed, 4 Aug 2021 11:23:08 +0000 (16:53 +0530)
committerJens Axboe <axboe@kernel.dk>
Wed, 4 Aug 2021 13:26:01 +0000 (07:26 -0600)
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.

It reverts part of the commit 6463db6c1
('fio: fix interaction between offset/size limited threads and
"max_open_zones"')

Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Reviewed-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
zbd.c

diff --git a/zbd.c b/zbd.c
index 04c68dea28c64bb51b850f7df4fad0953713ad3d..43f12b456f5e9a134ae1820caec48b2e8b9d9a96 100644 (file)
--- 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;
 }
 
 /*