diff options
author | Benoît Canet <benoit.canet@nodalink.com> | 2014-09-05 15:46:15 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2014-09-10 10:41:29 +0200 |
commit | 0ddd0ad96abf55acad06324b26b69a24bde23ac5 (patch) | |
tree | e1f834a9b89fb4802bc08a24b70e1e3a7c19332c | |
parent | 1a7044bb62ca490b8742ac17d40bb774b7a9048e (diff) | |
download | qemu-0ddd0ad96abf55acad06324b26b69a24bde23ac5.zip qemu-0ddd0ad96abf55acad06324b26b69a24bde23ac5.tar.gz qemu-0ddd0ad96abf55acad06324b26b69a24bde23ac5.tar.bz2 |
block: Extract the BlockAcctStats structure
Extract the block accounting statistics into a structure so the block device
models can hold them in the future.
CC: Kevin Wolf <kwolf@redhat.com>
CC: Stefan Hajnoczi <stefanha@redhat.com>
CC: Max Reitz <mreitz@redhat.com>
CC: Eric Blake <eblake@redhat.com>
Signed-off-by: Benoît Canet <benoit.canet@nodalink.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r-- | block.c | 11 | ||||
-rw-r--r-- | block/qapi.c | 19 | ||||
-rw-r--r-- | include/block/block.h | 7 | ||||
-rw-r--r-- | include/block/block_int.h | 5 |
4 files changed, 24 insertions, 18 deletions
@@ -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; |