X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=iolog.c;h=e805eaef9a94595cb5327becf0eb931362179b8a;hp=1af31cb3bd30804f4754c48b9f841fd7006736f9;hb=919e789d0999bf13ef1ae670c536d2aef3709894;hpb=905e3d4ff8d01a4402186e1ad1f5f1fbbb6b7ef4 diff --git a/iolog.c b/iolog.c index 1af31cb3..e805eaef 100644 --- a/iolog.c +++ b/iolog.c @@ -516,9 +516,36 @@ void setup_log(struct io_log **log, unsigned long avg_msec, int log_type) *log = l; } +#ifdef CONFIG_SETVBUF +static void *set_file_buffer(FILE *f) +{ + size_t size = 1048576; + void *buf; + + buf = malloc(size); + setvbuf(f, buf, _IOFBF, size); + return buf; +} + +static void clear_file_buffer(void *buf) +{ + free(buf); +} +#else +static void *set_file_buffer(FILE *f) +{ + return NULL; +} + +static void clear_file_buffer(void *buf) +{ +} +#endif + void __finish_log(struct io_log *log, const char *name) { unsigned int i; + void *buf; FILE *f; f = fopen(name, "a"); @@ -527,6 +554,8 @@ void __finish_log(struct io_log *log, const char *name) return; } + buf = set_file_buffer(f); + for (i = 0; i < log->nr_samples; i++) { fprintf(f, "%lu, %lu, %u, %u\n", (unsigned long) log->log[i].time, @@ -535,6 +564,7 @@ void __finish_log(struct io_log *log, const char *name) } fclose(f); + clear_file_buffer(buf); free(log->log); free(log); } @@ -628,7 +658,6 @@ enum { CLAT_LOG_MASK = 8, IOPS_LOG_MASK = 16, - ALL_LOG_MASK = 31, ALL_LOG_NR = 5, }; @@ -662,7 +691,7 @@ static struct log_type log_types[] = { void fio_writeout_logs(struct thread_data *td) { - unsigned int log_mask = ALL_LOG_MASK; + unsigned int log_mask = 0; unsigned int log_left = ALL_LOG_NR; int old_state, i; @@ -677,11 +706,11 @@ void fio_writeout_logs(struct thread_data *td) struct log_type *lt = &log_types[i]; int ret; - if (log_mask & lt->mask) { + if (!(log_mask & lt->mask)) { ret = lt->fn(td, log_left != 1); if (!ret) { log_left--; - log_mask &= ~lt->mask; + log_mask |= lt->mask; } } }