From 0ddd0ad96abf55acad06324b26b69a24bde23ac5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Beno=C3=AEt=20Canet?= Date: Fri, 5 Sep 2014 15:46:15 +0200 Subject: [PATCH] block: Extract the BlockAcctStats structure MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Extract the block accounting statistics into a structure so the block device models can hold them in the future. CC: Kevin Wolf CC: Stefan Hajnoczi CC: Max Reitz CC: Eric Blake Signed-off-by: Benoît Canet Signed-off-by: Kevin Wolf --- block.c | 11 ++++++----- block/qapi.c | 19 ++++++++++--------- include/block/block.h | 7 +++++++ include/block/block_int.h | 5 +---- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/block.c b/block.c index 460effe..e90f431 100644 --- a/block.c +++ b/block.c @@ -3363,8 +3363,8 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, bdrv_set_dirty(bs, sector_num, nb_sectors); - if (bs->wr_highest_sector < sector_num + nb_sectors - 1) { - bs->wr_highest_sector = sector_num + nb_sectors - 1; + if (bs->stats.wr_highest_sector < sector_num + nb_sectors - 1) { + bs->stats.wr_highest_sector = sector_num + nb_sectors - 1; } if (bs->growable && ret >= 0) { bs->total_sectors = MAX(bs->total_sectors, sector_num + nb_sectors); @@ -5588,9 +5588,10 @@ bdrv_acct_done(BlockDriverState *bs, BlockAcctCookie *cookie) { assert(cookie->type < BDRV_MAX_IOTYPE); - bs->nr_bytes[cookie->type] += cookie->bytes; - bs->nr_ops[cookie->type]++; - bs->total_time_ns[cookie->type] += get_clock() - cookie->start_time_ns; + bs->stats.nr_bytes[cookie->type] += cookie->bytes; + bs->stats.nr_ops[cookie->type]++; + bs->stats.total_time_ns[cookie->type] += get_clock() - + cookie->start_time_ns; } void bdrv_img_create(const char *filename, const char *fmt, diff --git a/block/qapi.c b/block/qapi.c index 79d1e6a..3d3d30b 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -333,15 +333,16 @@ static BlockStats *bdrv_query_stats(const BlockDriverState *bs) } s->stats = g_malloc0(sizeof(*s->stats)); - s->stats->rd_bytes = bs->nr_bytes[BDRV_ACCT_READ]; - s->stats->wr_bytes = bs->nr_bytes[BDRV_ACCT_WRITE]; - s->stats->rd_operations = bs->nr_ops[BDRV_ACCT_READ]; - s->stats->wr_operations = bs->nr_ops[BDRV_ACCT_WRITE]; - s->stats->wr_highest_offset = bs->wr_highest_sector * BDRV_SECTOR_SIZE; - s->stats->flush_operations = bs->nr_ops[BDRV_ACCT_FLUSH]; - s->stats->wr_total_time_ns = bs->total_time_ns[BDRV_ACCT_WRITE]; - s->stats->rd_total_time_ns = bs->total_time_ns[BDRV_ACCT_READ]; - s->stats->flush_total_time_ns = bs->total_time_ns[BDRV_ACCT_FLUSH]; + s->stats->rd_bytes = bs->stats.nr_bytes[BDRV_ACCT_READ]; + s->stats->wr_bytes = bs->stats.nr_bytes[BDRV_ACCT_WRITE]; + s->stats->rd_operations = bs->stats.nr_ops[BDRV_ACCT_READ]; + s->stats->wr_operations = bs->stats.nr_ops[BDRV_ACCT_WRITE]; + s->stats->wr_highest_offset = + bs->stats.wr_highest_sector * BDRV_SECTOR_SIZE; + s->stats->flush_operations = bs->stats.nr_ops[BDRV_ACCT_FLUSH]; + s->stats->wr_total_time_ns = bs->stats.total_time_ns[BDRV_ACCT_WRITE]; + s->stats->rd_total_time_ns = bs->stats.total_time_ns[BDRV_ACCT_READ]; + s->stats->flush_total_time_ns = bs->stats.total_time_ns[BDRV_ACCT_FLUSH]; if (bs->file) { s->has_parent = true; diff --git a/include/block/block.h b/include/block/block.h index 8f4ad16..f47d66f 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -492,6 +492,13 @@ enum BlockAcctType { BDRV_MAX_IOTYPE, }; +typedef struct BlockAcctStats { + uint64_t nr_bytes[BDRV_MAX_IOTYPE]; + uint64_t nr_ops[BDRV_MAX_IOTYPE]; + uint64_t total_time_ns[BDRV_MAX_IOTYPE]; + uint64_t wr_highest_sector; +} BlockAcctStats; + typedef struct BlockAcctCookie { int64_t bytes; int64_t start_time_ns; diff --git a/include/block/block_int.h b/include/block/block_int.h index 8a61215..20954f3 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -359,10 +359,7 @@ struct BlockDriverState { bool io_limits_enabled; /* I/O stats (display with "info blockstats"). */ - uint64_t nr_bytes[BDRV_MAX_IOTYPE]; - uint64_t nr_ops[BDRV_MAX_IOTYPE]; - uint64_t total_time_ns[BDRV_MAX_IOTYPE]; - uint64_t wr_highest_sector; + BlockAcctStats stats; /* I/O Limits */ BlockLimits bl; -- 2.7.4