From: root Date: Mon, 29 Aug 2005 12:45:44 +0000 (+0200) Subject: [PATCH] stats update X-Git-Tag: blktrace-0.99~231 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=afd2d7adffbd1b556fde00759bc48163bb0f2170;p=blktrace.git [PATCH] stats update Split stats into per-cpu and don't display empty stats --- diff --git a/CHANGELOG b/CHANGELOG index 481908a..e671d72 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,7 @@ for blkparse to see as well. - Always store trace data in big endian format - Oops, don't clear rb_root in sort_entries() + - Account dispathces as well, split stats into per-cpu 20050827: - Various cleanups and killing unused variables 20050826: diff --git a/blkparse.c b/blkparse.c index c9f72d1..2193793 100644 --- a/blkparse.c +++ b/blkparse.c @@ -24,7 +24,9 @@ struct per_file_info { unsigned long long start_time; unsigned long qreads, qwrites, creads, cwrites, mreads, mwrites; + unsigned long ireads, iwrites; unsigned long long qread_kb, qwrite_kb, cread_kb, cwrite_kb; + unsigned long long iread_kb, iwrite_kb; }; static struct rb_root rb_root; @@ -78,6 +80,18 @@ static inline void account_c(struct per_file_info *pfi, int rw, } } +static inline void account_i(struct per_file_info *pfi, int rw, + unsigned int bytes) +{ + if (rw) { + pfi->iwrites++; + pfi->iwrite_kb += bytes >> 10; + } else { + pfi->ireads++; + pfi->iread_kb += bytes >> 10; + } +} + static void output(char *s) { printf("%s", s); @@ -231,6 +245,7 @@ static void dump_trace_fs(struct blk_io_trace *t, struct per_file_info *pfi) log_queue(t, 'R'); break; case __BLK_TA_ISSUE: + account_i(pfi, w, t->bytes); log_issue(t, 'D'); break; case __BLK_TA_COMPLETE: @@ -260,11 +275,13 @@ static void dump_pfi_stats(struct per_file_info *pfi) { printf("\tReads:\n"); printf("\t\tQueued: %'8lu, %'8LuKiB\n", pfi->qreads, pfi->qread_kb); + printf("\t\tDispatched %'8lu, %'8LuKiB\n", pfi->ireads, pfi->iread_kb); printf("\t\tCompleted: %'8lu, %'8LuKiB\n", pfi->creads, pfi->cread_kb); printf("\t\tMerges: %'8lu\n", pfi->mreads); printf("\tWrites:\n"); printf("\t\tQueued: %'8lu, %'8LuKiB\n", pfi->qwrites,pfi->qwrite_kb); + printf("\t\tDispatched %'8lu, %'8LuKiB\n", pfi->iwrites,pfi->iwrite_kb); printf("\t\tCompleted: %'8lu, %'8LuKiB\n", pfi->cwrites,pfi->cwrite_kb); printf("\t\tMerges: %'8lu\n", pfi->mwrites); } @@ -279,6 +296,9 @@ static void show_stats(int nfiles) for (i = 0; i < nfiles; i++) { pfi = &per_file_info[i]; + if (!pfi->nelems) + continue; + foo.qreads += pfi->qreads; foo.qwrites += pfi->qwrites; foo.creads += pfi->creads; @@ -412,7 +432,7 @@ int main(int argc, char *argv[]) memset(&rb_root, 0, sizeof(rb_root)); memset(per_file_info, 0, sizeof(per_file_info)); - for (max_cpus = 0, i = 0, nfiles = 0; i < MAX_CPUS; i++) { + for (max_cpus = 0, i = 0, nfiles = 0; i < MAX_CPUS; i++, nfiles++, max_cpus++) { struct per_file_info *pfi = &per_file_info[i]; struct stat st; void *tb; @@ -423,6 +443,8 @@ int main(int argc, char *argv[]) snprintf(pfi->fname, sizeof(pfi->fname)-1,"%s_out.%d", dev, i); if (stat(pfi->fname, &st) < 0) break; + if (!st.st_size) + continue; snprintf(pfi->ofname, sizeof(pfi->ofname)-1, "%s_log.%d", dev, i); pfi->ofp = fopen(pfi->ofname, "w"); @@ -440,6 +462,7 @@ int main(int argc, char *argv[]) perror(pfi->fname); break; } + if (read(pfi->fd, tb, st.st_size) != st.st_size) { fprintf(stderr, "error reading\n"); break; @@ -450,8 +473,6 @@ int main(int argc, char *argv[]) break; close(pfi->fd); - nfiles++; - max_cpus++; pfi->nelems = ret; printf("\t%2d %10s %15d\n", i, pfi->fname, pfi->nelems);