Lines Matching refs:td
25 void queue_io_piece(struct thread_data *td, struct io_piece *ipo) in queue_io_piece() argument
27 flist_add_tail(&ipo->list, &td->io_log_list); in queue_io_piece()
28 td->total_io_size += ipo->len; in queue_io_piece()
31 void log_io_u(const struct thread_data *td, const struct io_u *io_u) in log_io_u() argument
33 if (!td->o.write_iolog_file) in log_io_u()
36 fprintf(td->iolog_f, "%s %s %llu %lu\n", io_u->file->file_name, in log_io_u()
41 void log_file(struct thread_data *td, struct fio_file *f, in log_file() argument
48 if (!td->o.write_iolog_file) in log_file()
55 if (!td->iolog_f) in log_file()
58 fprintf(td->iolog_f, "%s %s\n", f->file_name, act[what]); in log_file()
61 static void iolog_delay(struct thread_data *td, unsigned long delay) in iolog_delay() argument
63 uint64_t usec = utime_since_now(&td->last_issue); in iolog_delay()
67 if (delay < td->time_offset) { in iolog_delay()
68 td->time_offset = 0; in iolog_delay()
72 delay -= td->time_offset; in iolog_delay()
79 while (delay && !td->terminate) { in iolog_delay()
84 usec_sleep(td, this_delay); in iolog_delay()
90 td->time_offset = usec - delay; in iolog_delay()
92 td->time_offset = 0; in iolog_delay()
95 static int ipo_special(struct thread_data *td, struct io_piece *ipo) in ipo_special() argument
106 f = td->files[ipo->fileno]; in ipo_special()
110 ret = td_io_open_file(td, f); in ipo_special()
113 td_verror(td, ret, "iolog open file"); in ipo_special()
116 td_io_close_file(td, f); in ipo_special()
119 td_io_unlink_file(td, f); in ipo_special()
129 int read_iolog_get(struct thread_data *td, struct io_u *io_u) in read_iolog_get() argument
134 while (!flist_empty(&td->io_log_list)) { in read_iolog_get()
137 ipo = flist_first_entry(&td->io_log_list, struct io_piece, list); in read_iolog_get()
139 remove_trim_entry(td, ipo); in read_iolog_get()
141 ret = ipo_special(td, ipo); in read_iolog_get()
154 io_u->file = td->files[ipo->fileno]; in read_iolog_get()
159 iolog_delay(td, ipo->delay); in read_iolog_get()
163 usec_sleep(td, (ipo->delay - elapsed) * 1000); in read_iolog_get()
172 td->done = 1; in read_iolog_get()
176 void prune_io_piece_log(struct thread_data *td) in prune_io_piece_log() argument
181 while ((n = rb_first(&td->io_hist_tree)) != NULL) { in prune_io_piece_log()
183 rb_erase(n, &td->io_hist_tree); in prune_io_piece_log()
184 remove_trim_entry(td, ipo); in prune_io_piece_log()
185 td->io_hist_len--; in prune_io_piece_log()
189 while (!flist_empty(&td->io_hist_list)) { in prune_io_piece_log()
190 ipo = flist_first_entry(&td->io_hist_list, struct io_piece, list); in prune_io_piece_log()
192 remove_trim_entry(td, ipo); in prune_io_piece_log()
193 td->io_hist_len--; in prune_io_piece_log()
201 void log_io_piece(struct thread_data *td, struct io_u *io_u) in log_io_piece() argument
216 if (io_u_should_trim(td, io_u)) { in log_io_piece()
217 flist_add_tail(&ipo->trim_list, &td->trim_list); in log_io_piece()
218 td->trim_entries++; in log_io_piece()
235 if (((!td->o.verifysort) || !td_random(td) || !td->o.overwrite) && in log_io_piece()
236 (file_randommap(td, ipo->file) || td->o.verify == VERIFY_NONE)) { in log_io_piece()
238 flist_add_tail(&ipo->list, &td->io_hist_list); in log_io_piece()
240 td->io_hist_len++; in log_io_piece()
250 p = &td->io_hist_tree.rb_node; in log_io_piece()
276 td->io_hist_len--; in log_io_piece()
277 rb_erase(parent, &td->io_hist_tree); in log_io_piece()
278 remove_trim_entry(td, __ipo); in log_io_piece()
285 rb_insert_color(&ipo->rb_node, &td->io_hist_tree); in log_io_piece()
287 td->io_hist_len++; in log_io_piece()
290 void unlog_io_piece(struct thread_data *td, struct io_u *io_u) in unlog_io_piece() argument
298 rb_erase(&ipo->rb_node, &td->io_hist_tree); in unlog_io_piece()
304 td->io_hist_len--; in unlog_io_piece()
307 void trim_io_piece(struct thread_data *td, const struct io_u *io_u) in trim_io_piece() argument
317 void write_iolog_close(struct thread_data *td) in write_iolog_close() argument
319 fflush(td->iolog_f); in write_iolog_close()
320 fclose(td->iolog_f); in write_iolog_close()
321 free(td->iolog_buf); in write_iolog_close()
322 td->iolog_f = NULL; in write_iolog_close()
323 td->iolog_buf = NULL; in write_iolog_close()
330 static int read_iolog2(struct thread_data *td, FILE *f) in read_iolog2() argument
339 free_release_files(td); in read_iolog2()
377 fileno = get_fileno(td, fname); in read_iolog2()
381 fileno = add_file(td, fname, 0, 1); in read_iolog2()
385 fileno = get_fileno(td, fname); in read_iolog2()
388 fileno = get_fileno(td, fname); in read_iolog2()
428 if (rw != DDIR_INVAL && bytes > td->o.max_bs[rw]) in read_iolog2()
429 td->o.max_bs[rw] = bytes; in read_iolog2()
432 td->o.size += bytes; in read_iolog2()
435 queue_io_piece(td, ipo); in read_iolog2()
444 " read-only\n", td->o.name, writes); in read_iolog2()
451 td->o.td_ddir = TD_DDIR_READ; in read_iolog2()
453 td->o.td_ddir = TD_DDIR_WRITE; in read_iolog2()
455 td->o.td_ddir = TD_DDIR_RW; in read_iolog2()
463 static int init_iolog_read(struct thread_data *td) in init_iolog_read() argument
469 f = fopen(td->o.read_iolog_file, "r"); in init_iolog_read()
477 td_verror(td, errno, "iolog read"); in init_iolog_read()
488 ret = read_iolog2(td, f); in init_iolog_read()
501 static int init_iolog_write(struct thread_data *td) in init_iolog_write() argument
507 f = fopen(td->o.write_iolog_file, "a"); in init_iolog_write()
516 td->iolog_f = f; in init_iolog_write()
517 td->iolog_buf = malloc(8192); in init_iolog_write()
518 setvbuf(f, td->iolog_buf, _IOFBF, 8192); in init_iolog_write()
531 for_each_file(td, ff, i) in init_iolog_write()
532 log_file(td, ff, FIO_LOG_ADD_FILE); in init_iolog_write()
537 int init_iolog(struct thread_data *td) in init_iolog() argument
541 if (td->o.read_iolog_file) { in init_iolog()
548 if (is_blktrace(td->o.read_iolog_file, &need_swap)) in init_iolog()
549 ret = load_blktrace(td, td->o.read_iolog_file, need_swap); in init_iolog()
551 ret = init_iolog_read(td); in init_iolog()
552 } else if (td->o.write_iolog_file) in init_iolog()
553 ret = init_iolog_write(td); in init_iolog()
556 td_verror(td, EINVAL, "failed initializing iolog"); in init_iolog()
576 l->td = p->td; in setup_log()
583 if (l->log_gz && !p->td) in setup_log()
587 p->td->flags |= TD_F_COMPRESS_LOG; in setup_log()
957 static int finish_log(struct thread_data *td, struct io_log *log, int trylock) in finish_log() argument
959 if (td->tp_data) in finish_log()
968 if (td->client_type == FIO_CLIENT_TYPE_GUI) in finish_log()
969 fio_send_iolog(td, log, log->filename); in finish_log()
1091 struct tp_data *tdat = log->td->tp_data; in iolog_flush()
1143 static int write_iops_log(struct thread_data *td, int try) in write_iops_log() argument
1145 struct io_log *log = td->iops_log; in write_iops_log()
1150 return finish_log(td, log, try); in write_iops_log()
1153 static int write_slat_log(struct thread_data *td, int try) in write_slat_log() argument
1155 struct io_log *log = td->slat_log; in write_slat_log()
1160 return finish_log(td, log, try); in write_slat_log()
1163 static int write_clat_log(struct thread_data *td, int try) in write_clat_log() argument
1165 struct io_log *log = td->clat_log; in write_clat_log()
1170 return finish_log(td, log, try); in write_clat_log()
1173 static int write_lat_log(struct thread_data *td, int try) in write_lat_log() argument
1175 struct io_log *log = td->lat_log; in write_lat_log()
1180 return finish_log(td, log, try); in write_lat_log()
1183 static int write_bandw_log(struct thread_data *td, int try) in write_bandw_log() argument
1185 struct io_log *log = td->bw_log; in write_bandw_log()
1190 return finish_log(td, log, try); in write_bandw_log()
1231 void fio_writeout_logs(struct thread_data *td) in fio_writeout_logs() argument
1237 old_state = td_bump_runstate(td, TD_FINISHING); in fio_writeout_logs()
1239 finalize_logs(td); in fio_writeout_logs()
1249 ret = lt->fn(td, log_left != 1); in fio_writeout_logs()
1261 td_restore_runstate(td, old_state); in fio_writeout_logs()