From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38772) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XSTE2-0000MS-6U for qemu-devel@nongnu.org; Fri, 12 Sep 2014 11:57:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XSTDu-0000jq-JS for qemu-devel@nongnu.org; Fri, 12 Sep 2014 11:57:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:55869) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XSTDu-0000jU-CI for qemu-devel@nongnu.org; Fri, 12 Sep 2014 11:57:22 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s8CFvKTh005483 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Fri, 12 Sep 2014 11:57:21 -0400 From: Kevin Wolf Date: Fri, 12 Sep 2014 17:56:52 +0200 Message-Id: <1410537426-9917-9-git-send-email-kwolf@redhat.com> In-Reply-To: <1410537426-9917-1-git-send-email-kwolf@redhat.com> References: <1410537426-9917-1-git-send-email-kwolf@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL 08/22] block: Extract the BlockAcctStats structure List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com From: Beno=C3=AEt Canet Extract the block accounting statistics into a structure so the block dev= ice models can hold them in the future. CC: Kevin Wolf CC: Stefan Hajnoczi CC: Max Reitz CC: Eric Blake Signed-off-by: Beno=C3=AEt 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(BlockD= riverState *bs, =20 bdrv_set_dirty(bs, sector_num, nb_sectors); =20 - if (bs->wr_highest_sector < sector_num + nb_sectors - 1) { - bs->wr_highest_sector =3D sector_num + nb_sectors - 1; + if (bs->stats.wr_highest_sector < sector_num + nb_sectors - 1) { + bs->stats.wr_highest_sector =3D sector_num + nb_sectors - 1; } if (bs->growable && ret >=3D 0) { bs->total_sectors =3D MAX(bs->total_sectors, sector_num + nb_sec= tors); @@ -5588,9 +5588,10 @@ bdrv_acct_done(BlockDriverState *bs, BlockAcctCook= ie *cookie) { assert(cookie->type < BDRV_MAX_IOTYPE); =20 - bs->nr_bytes[cookie->type] +=3D cookie->bytes; - bs->nr_ops[cookie->type]++; - bs->total_time_ns[cookie->type] +=3D get_clock() - cookie->start_tim= e_ns; + bs->stats.nr_bytes[cookie->type] +=3D cookie->bytes; + bs->stats.nr_ops[cookie->type]++; + bs->stats.total_time_ns[cookie->type] +=3D get_clock() - + cookie->start_time_ns; } =20 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 BlockDriv= erState *bs) } =20 s->stats =3D g_malloc0(sizeof(*s->stats)); - s->stats->rd_bytes =3D bs->nr_bytes[BDRV_ACCT_READ]; - s->stats->wr_bytes =3D bs->nr_bytes[BDRV_ACCT_WRITE]; - s->stats->rd_operations =3D bs->nr_ops[BDRV_ACCT_READ]; - s->stats->wr_operations =3D bs->nr_ops[BDRV_ACCT_WRITE]; - s->stats->wr_highest_offset =3D bs->wr_highest_sector * BDRV_SECTOR_= SIZE; - s->stats->flush_operations =3D bs->nr_ops[BDRV_ACCT_FLUSH]; - s->stats->wr_total_time_ns =3D bs->total_time_ns[BDRV_ACCT_WRITE]; - s->stats->rd_total_time_ns =3D bs->total_time_ns[BDRV_ACCT_READ]; - s->stats->flush_total_time_ns =3D bs->total_time_ns[BDRV_ACCT_FLUSH]= ; + s->stats->rd_bytes =3D bs->stats.nr_bytes[BDRV_ACCT_READ]; + s->stats->wr_bytes =3D bs->stats.nr_bytes[BDRV_ACCT_WRITE]; + s->stats->rd_operations =3D bs->stats.nr_ops[BDRV_ACCT_READ]; + s->stats->wr_operations =3D bs->stats.nr_ops[BDRV_ACCT_WRITE]; + s->stats->wr_highest_offset =3D + bs->stats.wr_highest_sector * BDRV_SECTOR_SIZE; + s->stats->flush_operations =3D bs->stats.nr_ops[BDRV_ACCT_FLUSH]; + s->stats->wr_total_time_ns =3D bs->stats.total_time_ns[BDRV_ACCT_WRI= TE]; + s->stats->rd_total_time_ns =3D bs->stats.total_time_ns[BDRV_ACCT_REA= D]; + s->stats->flush_total_time_ns =3D bs->stats.total_time_ns[BDRV_ACCT_= FLUSH]; =20 if (bs->file) { s->has_parent =3D 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, }; =20 +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; =20 /* 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; =20 /* I/O Limits */ BlockLimits bl; --=20 1.8.3.1