Signed-off-by: Jens Axboe <axboe@kernel.dk>
return 0;
if (write_bw_log) {
return 0;
if (write_bw_log) {
- setup_log(&agg_io_log[DDIR_READ], 0);
- setup_log(&agg_io_log[DDIR_WRITE], 0);
+ setup_log(&agg_io_log[DDIR_READ], 0, IO_LOG_TYPE_BW);
+ setup_log(&agg_io_log[DDIR_WRITE], 0, IO_LOG_TYPE_BW);
}
startup_mutex = fio_mutex_init(0);
}
startup_mutex = fio_mutex_init(0);
goto err;
if (td->o.write_lat_log) {
goto err;
if (td->o.write_lat_log) {
- setup_log(&td->lat_log, td->o.log_avg_msec);
- setup_log(&td->slat_log, td->o.log_avg_msec);
- setup_log(&td->clat_log, td->o.log_avg_msec);
+ setup_log(&td->lat_log, td->o.log_avg_msec, IO_LOG_TYPE_LAT);
+ setup_log(&td->slat_log, td->o.log_avg_msec, IO_LOG_TYPE_SLAT);
+ setup_log(&td->clat_log, td->o.log_avg_msec, IO_LOG_TYPE_CLAT);
}
if (td->o.write_bw_log)
}
if (td->o.write_bw_log)
- setup_log(&td->bw_log, td->o.log_avg_msec);
+ setup_log(&td->bw_log, td->o.log_avg_msec, IO_LOG_TYPE_BW);
if (td->o.write_iops_log)
if (td->o.write_iops_log)
- setup_log(&td->iops_log, td->o.log_avg_msec);
+ setup_log(&td->iops_log, td->o.log_avg_msec, IO_LOG_TYPE_IOPS);
if (!td->o.name)
td->o.name = strdup(jobname);
if (!td->o.name)
td->o.name = strdup(jobname);
-void setup_log(struct io_log **log, unsigned long avg_msec)
+void setup_log(struct io_log **log, unsigned long avg_msec, int log_type)
{
struct io_log *l = malloc(sizeof(*l));
memset(l, 0, sizeof(*l));
l->nr_samples = 0;
l->max_samples = 1024;
{
struct io_log *l = malloc(sizeof(*l));
memset(l, 0, sizeof(*l));
l->nr_samples = 0;
l->max_samples = 1024;
+ l->log_type = log_type;
l->log = malloc(l->max_samples * sizeof(struct io_sample));
l->avg_msec = avg_msec;
*log = l;
l->log = malloc(l->max_samples * sizeof(struct io_sample));
l->avg_msec = avg_msec;
*log = l;
+enum {
+ IO_LOG_TYPE_LAT = 1,
+ IO_LOG_TYPE_CLAT,
+ IO_LOG_TYPE_SLAT,
+ IO_LOG_TYPE_BW,
+ IO_LOG_TYPE_IOPS,
+};
+
/*
* Dynamically growing data sample log
*/
/*
* Dynamically growing data sample log
*/
unsigned long max_samples;
struct io_sample *log;
unsigned long max_samples;
struct io_sample *log;
/*
* Windowed average, for logging single entries average over some
* period of time.
/*
* Windowed average, for logging single entries average over some
* period of time.
extern void init_disk_util(struct thread_data *);
extern void update_rusage_stat(struct thread_data *);
extern void update_io_ticks(void);
extern void init_disk_util(struct thread_data *);
extern void update_rusage_stat(struct thread_data *);
extern void update_io_ticks(void);
-extern void setup_log(struct io_log **, unsigned long);
+extern void setup_log(struct io_log **, unsigned long, int);
extern void finish_log(struct thread_data *, struct io_log *, const char *);
extern void finish_log_named(struct thread_data *, struct io_log *, const char *, const char *);
extern void __finish_log(struct io_log *, const char *);
extern void finish_log(struct thread_data *, struct io_log *, const char *);
extern void finish_log_named(struct thread_data *, struct io_log *, const char *, const char *);
extern void __finish_log(struct io_log *, const char *);