X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=stat.c;h=977796cd59dd9a8682f32f80973a8973f62f977d;hb=e69d6e30c8b82082cb440e926037bc1a91710856;hp=beeceb7359372c51616dc10b898311cd2edfb90e;hpb=8879fd15550a5edac3f4fdab6f98badb18dea18c;p=fio.git diff --git a/stat.c b/stat.c index beeceb73..977796cd 100644 --- a/stat.c +++ b/stat.c @@ -8,49 +8,7 @@ #include #include "fio.h" - -/* - * Cheesy number->string conversion, complete with carry rounding error. - */ -static char *num2str(unsigned long num, int maxlen, int base, int pow2) -{ - char postfix[] = { ' ', 'K', 'M', 'G', 'P', 'E' }; - unsigned int thousand; - char *buf; - int i; - - if (pow2) - thousand = 1024; - else - thousand = 1000; - - buf = malloc(128); - - for (i = 0; base > 1; i++) - base /= thousand; - - do { - int len, carry = 0; - - len = sprintf(buf, "%'lu", num); - if (len <= maxlen) { - if (i >= 1) { - buf[len] = postfix[i]; - buf[len + 1] = '\0'; - } - return buf; - } - - if ((num % thousand) >= (thousand / 2)) - carry = 1; - - num /= thousand; - num += carry; - i++; - } while (i <= 5); - - return buf; -} +#include "diskutil.h" void update_rusage_stat(struct thread_data *td) { @@ -700,8 +658,11 @@ static inline void add_stat_sample(struct io_stat *is, unsigned long data) } static void __add_log_sample(struct io_log *iolog, unsigned long val, - enum fio_ddir ddir, unsigned long time) + enum fio_ddir ddir, unsigned int bs, + unsigned long time) { + const int nr_samples = iolog->nr_samples; + if (iolog->nr_samples == iolog->max_samples) { int new_size = sizeof(struct io_sample) * iolog->max_samples*2; @@ -709,48 +670,50 @@ static void __add_log_sample(struct io_log *iolog, unsigned long val, iolog->max_samples <<= 1; } - iolog->log[iolog->nr_samples].val = val; - iolog->log[iolog->nr_samples].time = time; - iolog->log[iolog->nr_samples].ddir = ddir; + iolog->log[nr_samples].val = val; + iolog->log[nr_samples].time = time; + iolog->log[nr_samples].ddir = ddir; + iolog->log[nr_samples].bs = bs; iolog->nr_samples++; } static void add_log_sample(struct thread_data *td, struct io_log *iolog, - unsigned long val, enum fio_ddir ddir) + unsigned long val, enum fio_ddir ddir, + unsigned int bs) { - __add_log_sample(iolog, val, ddir, mtime_since_now(&td->epoch)); + __add_log_sample(iolog, val, ddir, bs, mtime_since_now(&td->epoch)); } -void add_agg_sample(unsigned long val, enum fio_ddir ddir) +void add_agg_sample(unsigned long val, enum fio_ddir ddir, unsigned int bs) { struct io_log *iolog = agg_io_log[ddir]; - __add_log_sample(iolog, val, ddir, mtime_since_genesis()); + __add_log_sample(iolog, val, ddir, bs, mtime_since_genesis()); } void add_clat_sample(struct thread_data *td, enum fio_ddir ddir, - unsigned long usec) + unsigned long usec, unsigned int bs) { struct thread_stat *ts = &td->ts; add_stat_sample(&ts->clat_stat[ddir], usec); if (ts->clat_log) - add_log_sample(td, ts->clat_log, usec, ddir); + add_log_sample(td, ts->clat_log, usec, ddir, bs); } void add_slat_sample(struct thread_data *td, enum fio_ddir ddir, - unsigned long usec) + unsigned long usec, unsigned int bs) { struct thread_stat *ts = &td->ts; add_stat_sample(&ts->slat_stat[ddir], usec); if (ts->slat_log) - add_log_sample(td, ts->slat_log, usec, ddir); + add_log_sample(td, ts->slat_log, usec, ddir, bs); } -void add_bw_sample(struct thread_data *td, enum fio_ddir ddir, +void add_bw_sample(struct thread_data *td, enum fio_ddir ddir, unsigned int bs, struct timeval *t) { struct thread_stat *ts = &td->ts; @@ -764,7 +727,7 @@ void add_bw_sample(struct thread_data *td, enum fio_ddir ddir, add_stat_sample(&ts->bw_stat[ddir], rate); if (ts->bw_log) - add_log_sample(td, ts->bw_log, rate, ddir); + add_log_sample(td, ts->bw_log, rate, ddir, bs); fio_gettime(&ts->stat_sample_time[ddir], NULL); ts->stat_io_bytes[ddir] = td->this_io_bytes[ddir];