Recent changes (master)
The following changes since commit ca65714c48bcd4fc601e3c04163e2422352be9ca:
null: drop unneeded casts from void* to non-void* (2018-01-16 08:32:39 -0700)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to 2ea93f982e728343f823c2cf63b4674a104575bf:
Switch last_was_sync and terminate to bool and pack better (2018-01-24 20:22:50 -0700)
----------------------------------------------------------------
Jens Axboe (2):
Add suppor for logging fsync (and friends) latencies Switch last_was_sync and terminate to bool and pack better
fio.h | 4 +- io_u.c | 18 +++++-- libfio.c | 4 +- server.h | 2 +- stat.c | 175 ++++++++++++++++++++++++++++++++++++++++++--------------------- stat.h | 4 ++ 6 files changed, 140 insertions(+), 67 deletions(-)
---
Diff of recent changes:
fio.h +2 -2
@@ -228,9 +228,9 @@ struct thread_data {pid_t pid;char *orig_buffer;size_t orig_buffer_size; -volatile int terminate;volatile int runstate; -unsigned int last_was_sync; +volatile bool terminate; +bool last_was_sync;enum fio_ddir last_ddir;int mmapfd;
io_u.c +13 -5
@@ -1921,7 +1921,8 @@ static void account_io_completion(struct thread_data *td, struct io_u *io_u,if (no_reduce &&per_unit_log (td->iops_log))add_iops_sample (td, io_u, bytes); - } + }else if (ddir_sync (idx) && !td->o.disable_clat) +add_sync_clat_sample (&td->ts, llnsec);if (td->ts.nr_block_infos && io_u->ddir ==DDIR_TRIM ) {uint32_t *info =io_u_block_info (td, io_u);
@@ -1959,6 +1960,12 @@ static void file_log_write_comp(const struct thread_data *td, struct fio_file *f f->last_write_idx =0 ; } +static bool should_account (struct thread_data *td) +{ +return ramp_time_over (td) && (td->runstate ==TD_RUNNING || + td->runstate ==TD_VERIFYING ); +} +static void io_completed (struct thread_data *td,struct io_u **io_u_ptr,struct io_completion_data *icd) {
@@ -1987,15 +1994,17 @@ static void io_completed(struct thread_data *td, struct io_u **io_u_ptr, }if (ddir_sync (ddir)) { - td->last_was_sync =1 ; + td->last_was_sync = true;if (f) { f->first_write =-1ULL ; f->last_write =-1ULL ; } +if (should_account (td)) +account_io_completion (td, io_u, icd, ddir, io_u->buflen);return ; } - td->last_was_sync =0 ; + td->last_was_sync = false; td->last_ddir = ddir;if (!io_u->error &&ddir_rw (ddir)) {
@@ -2013,8 +2022,7 @@ static void io_completed(struct thread_data *td, struct io_u **io_u_ptr,if (ddir ==DDIR_WRITE )file_log_write_comp (td, f, io_u->offset, bytes); -if (ramp_time_over (td) && (td->runstate ==TD_RUNNING || - td->runstate ==TD_VERIFYING )) +if (should_account (td))account_io_completion (td, io_u, icd, ddir, bytes); icd->bytes_done[ddir] += bytes;
libfio.c +2 -2
@@ -98,7 +98,7 @@ static void reset_io_counters(struct thread_data *td, int all) td->zone_bytes =0 ; - td->last_was_sync =0 ; + td->last_was_sync = false; td->rwmix_issues =0 ;/*
@@ -230,7 +230,7 @@ void fio_mark_td_terminate(struct thread_data *td) {fio_gettime (&td->terminate_time,NULL );write_barrier (); - td->terminate =1 ; + td->terminate = true; }void fio_terminate_threads (unsigned int group_id)
server.h +1 -1
@@ -49,7 +49,7 @@ struct fio_net_cmd_reply { };enum { -FIO_SERVER_VER =69 , +FIO_SERVER_VER =70 ,FIO_SERVER_MAX_FRAGMENT_PDU =1024 ,FIO_SERVER_MAX_CMD_MB =2048 ,
stat.c +118 -57
292 lines not on this page · raw message
stat.h +4 -0
@@ -162,6 +162,7 @@ struct thread_stat {struct io_stat clat_stat[DDIR_RWDIR_CNT ];/* completion latency */ struct io_stat slat_stat[DDIR_RWDIR_CNT ];/* submission latency */ struct io_stat lat_stat[DDIR_RWDIR_CNT ];/* total latency */ +struct io_stat sync_stat;/* fsync etc stats */ struct io_stat bw_stat[DDIR_RWDIR_CNT ];/* bandwidth stats */ struct io_stat iops_stat[DDIR_RWDIR_CNT ];/* IOPS stats */
@@ -188,6 +189,7 @@ struct thread_stat {uint32_t io_u_lat_u[FIO_IO_U_LAT_U_NR ];uint32_t io_u_lat_m[FIO_IO_U_LAT_M_NR ];uint32_t io_u_plat[DDIR_RWDIR_CNT ][FIO_IO_U_PLAT_NR ]; +uint32_t io_u_sync_plat[FIO_IO_U_PLAT_NR ];uint32_t pad;uint64_t total_io_u[DDIR_RWDIR_CNT ];
@@ -318,6 +320,8 @@ extern void add_iops_sample(struct thread_data *, struct io_u *, unsigned int);extern void add_bw_sample (struct thread_data *,struct io_u *,unsigned int ,unsigned long long ); +extern void add_sync_clat_sample (struct thread_stat *ts, +unsigned long long nsec);extern int calc_log_samples (void );extern struct io_log *agg_io_log[DDIR_RWDIR_CNT ];