unsigned int bw_avg_time;
unsigned int iops_avg_time;
unsigned int loops;
+ unsigned long long zone_range;
unsigned long long zone_size;
unsigned long long zone_skip;
enum fio_memtype mem_type;
}
/*
- * only really works for sequential io for now, and with 1 file
+ * only really works with 1 file
*/
- if (o->zone_size && td_random(td) && o->open_files == 1)
+ if (o->zone_size && o->open_files == 1)
o->zone_size = 0;
+ /*
+ * If zone_range isn't specified, backward compatibility dictates it
+ * should be made equal to zone_size.
+ */
+ if (o->zone_size && !o->zone_range)
+ o->zone_range = o->zone_size;
+
/*
* Reads can do overwrites, we always need to pre-create the file
*/
if (max_size > f->real_file_size)
max_size = f->real_file_size;
+ if (td->o.zone_range)
+ max_size = td->o.zone_range;
+
max_blocks = max_size / (unsigned long long) td->o.ba[ddir];
if (!max_blocks)
return 0;
*/
if (td->zone_bytes >= td->o.zone_size) {
td->zone_bytes = 0;
- io_u->file->last_pos += td->o.zone_skip;
+ io_u->file->file_offset += td->o.zone_range + td->o.zone_skip;
+ io_u->file->last_pos = io_u->file->file_offset;
td->io_skip_bytes += td->o.zone_skip;
}
.name = "zonesize",
.type = FIO_OPT_STR_VAL,
.off1 = td_var_offset(zone_size),
+ .help = "Amount of data to read per zone",
+ .def = "0",
+ },
+ {
+ .name = "zonerange",
+ .type = FIO_OPT_STR_VAL,
+ .off1 = td_var_offset(zone_range),
.help = "Give size of an IO zone",
.def = "0",
},