X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=fio.c;h=4a02f2ebee198584e477f5e6b8749447c6f94463;hb=8de43fd22302237a2b35515ff869fde514dfc76d;hp=ad2282d7516fe7fc0033b3bc721a12b16d370fe1;hpb=5bfc35d7abe2582dc54127ca1d6e03792c9d62f5;p=fio.git diff --git a/fio.c b/fio.c index ad2282d7..4a02f2eb 100644 --- a/fio.c +++ b/fio.c @@ -52,6 +52,7 @@ int temp_stall_ts; unsigned long done_secs = 0; static struct fio_mutex *startup_mutex; +static struct fio_mutex *writeout_mutex; static volatile int fio_abort; static int exit_value; static struct itimerval itimer; @@ -733,7 +734,7 @@ static int init_io_u(struct thread_data *td) { struct io_u *io_u; unsigned int max_bs; - int i, max_units; + int cl_align, i, max_units; char *p; max_units = td->o.iodepth; @@ -761,10 +762,20 @@ static int init_io_u(struct thread_data *td) else p = td->orig_buffer; + cl_align = os_cache_line_size(); + for (i = 0; i < max_units; i++) { + void *ptr; + if (td->terminate) return 1; - io_u = malloc(sizeof(*io_u)); + + if (posix_memalign(&ptr, cl_align, sizeof(*io_u))) { + log_err("fio: posix_memalign=%s\n", strerror(errno)); + break; + } + + io_u = ptr; memset(io_u, 0, sizeof(*io_u)); INIT_FLIST_HEAD(&io_u->list); @@ -1076,6 +1087,7 @@ static void *thread_main(void *data) td->ts.io_bytes[0] = td->io_bytes[0]; td->ts.io_bytes[1] = td->io_bytes[1]; + fio_mutex_down(writeout_mutex); if (td->ts.bw_log) { if (td->o.bw_log_file) { finish_log_named(td, td->ts.bw_log, @@ -1086,7 +1098,7 @@ static void *thread_main(void *data) if (td->ts.slat_log) { if (td->o.lat_log_file) { finish_log_named(td, td->ts.slat_log, - td->o.lat_log_file, "clat"); + td->o.lat_log_file, "slat"); } else finish_log(td, td->ts.slat_log, "slat"); } @@ -1097,6 +1109,7 @@ static void *thread_main(void *data) } else finish_log(td, td->ts.clat_log, "clat"); } + fio_mutex_up(writeout_mutex); if (td->o.exec_postrun) { if (system(td->o.exec_postrun) < 0) log_err("fio: postrun %s failed\n", td->o.exec_postrun); @@ -1544,6 +1557,7 @@ int main(int argc, char *argv[]) } startup_mutex = fio_mutex_init(0); + writeout_mutex = fio_mutex_init(1); set_genesis_time(); @@ -1561,5 +1575,6 @@ int main(int argc, char *argv[]) } fio_mutex_remove(startup_mutex); + fio_mutex_remove(writeout_mutex); return exit_value; }