qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Alberto Garcia <berto@igalia.com>,
	Markus Armbruster <armbru@redhat.com>,
	qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>,
	John Snow <jsnow@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: [Qemu-devel] [PATCH v7 14/39] block: Remove wr_highest_sector from BlockAcctStats
Date: Mon, 19 Oct 2015 17:53:20 +0200	[thread overview]
Message-ID: <1445270025-22999-15-git-send-email-mreitz@redhat.com> (raw)
In-Reply-To: <1445270025-22999-1-git-send-email-mreitz@redhat.com>

BlockAcctStats contains statistics about the data transferred from and
to the device; wr_highest_sector does not fit in with the rest.

Furthermore, those statistics are supposed to be specific for a certain
device and not necessarily for a BDS (see the comment above
bdrv_get_stats()); on the other hand, wr_highest_sector may be a rather
important information to know for each BDS. When BlockAcctStats is
finally removed from the BDS, we will want to keep wr_highest_sector in
the BDS.

Finally, wr_highest_sector is renamed to wr_highest_offset and given the
appropriate meaning. Externally, it is represented as an offset so there
is no point in doing something different internally. Its definition is
changed to match that in qapi/block-core.json which is "the offset after
the greatest byte written to". Doing so should not cause any harm since
if external programs tried to calculate the volume usage by
(wr_highest_offset + 512) / volume_size, after this patch they will just
assume the volume to be full slightly earlier than before.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
---
 block/accounting.c         | 8 --------
 block/io.c                 | 4 +++-
 block/qapi.c               | 4 ++--
 include/block/accounting.h | 3 ---
 include/block/block_int.h  | 3 +++
 qmp-commands.hx            | 4 ++--
 6 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/block/accounting.c b/block/accounting.c
index 01d594f..a423560 100644
--- a/block/accounting.c
+++ b/block/accounting.c
@@ -47,14 +47,6 @@ void block_acct_done(BlockAcctStats *stats, BlockAcctCookie *cookie)
 }
 
 
-void block_acct_highest_sector(BlockAcctStats *stats, int64_t sector_num,
-                               unsigned int nb_sectors)
-{
-    if (stats->wr_highest_sector < sector_num + nb_sectors - 1) {
-        stats->wr_highest_sector = sector_num + nb_sectors - 1;
-    }
-}
-
 void block_acct_merge_done(BlockAcctStats *stats, enum BlockAcctType type,
                       int num_requests)
 {
diff --git a/block/io.c b/block/io.c
index 5311473..b80044b 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1151,7 +1151,9 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs,
 
     bdrv_set_dirty(bs, sector_num, nb_sectors);
 
-    block_acct_highest_sector(&bs->stats, sector_num, nb_sectors);
+    if (bs->wr_highest_offset < offset + bytes) {
+        bs->wr_highest_offset = offset + bytes;
+    }
 
     if (ret >= 0) {
         bs->total_sectors = MAX(bs->total_sectors, sector_num + nb_sectors);
diff --git a/block/qapi.c b/block/qapi.c
index 355ba32..0360126 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -350,13 +350,13 @@ static BlockStats *bdrv_query_stats(const BlockDriverState *bs,
     s->stats->wr_operations = bs->stats.nr_ops[BLOCK_ACCT_WRITE];
     s->stats->rd_merged = bs->stats.merged[BLOCK_ACCT_READ];
     s->stats->wr_merged = bs->stats.merged[BLOCK_ACCT_WRITE];
-    s->stats->wr_highest_offset =
-        bs->stats.wr_highest_sector * BDRV_SECTOR_SIZE;
     s->stats->flush_operations = bs->stats.nr_ops[BLOCK_ACCT_FLUSH];
     s->stats->wr_total_time_ns = bs->stats.total_time_ns[BLOCK_ACCT_WRITE];
     s->stats->rd_total_time_ns = bs->stats.total_time_ns[BLOCK_ACCT_READ];
     s->stats->flush_total_time_ns = bs->stats.total_time_ns[BLOCK_ACCT_FLUSH];
 
+    s->stats->wr_highest_offset = bs->wr_highest_offset;
+
     if (bs->file) {
         s->has_parent = true;
         s->parent = bdrv_query_stats(bs->file->bs, query_backing);
diff --git a/include/block/accounting.h b/include/block/accounting.h
index 4c406cf..66637cd 100644
--- a/include/block/accounting.h
+++ b/include/block/accounting.h
@@ -40,7 +40,6 @@ typedef struct BlockAcctStats {
     uint64_t nr_ops[BLOCK_MAX_IOTYPE];
     uint64_t total_time_ns[BLOCK_MAX_IOTYPE];
     uint64_t merged[BLOCK_MAX_IOTYPE];
-    uint64_t wr_highest_sector;
 } BlockAcctStats;
 
 typedef struct BlockAcctCookie {
@@ -52,8 +51,6 @@ typedef struct BlockAcctCookie {
 void block_acct_start(BlockAcctStats *stats, BlockAcctCookie *cookie,
                       int64_t bytes, enum BlockAcctType type);
 void block_acct_done(BlockAcctStats *stats, BlockAcctCookie *cookie);
-void block_acct_highest_sector(BlockAcctStats *stats, int64_t sector_num,
-                               unsigned int nb_sectors);
 void block_acct_merge_done(BlockAcctStats *stats, enum BlockAcctType type,
                            int num_requests);
 
diff --git a/include/block/block_int.h b/include/block/block_int.h
index e79d8c0..b8e1c59 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -402,6 +402,9 @@ struct BlockDriverState {
     /* I/O stats (display with "info blockstats"). */
     BlockAcctStats stats;
 
+    /* Offset after the highest byte written to */
+    uint64_t wr_highest_offset;
+
     /* I/O Limits */
     BlockLimits bl;
 
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 2b52980..d7cf0ff 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -2520,8 +2520,8 @@ Each json-object contain the following:
     - "wr_total_time_ns": total time spend on writes in nano-seconds (json-int)
     - "rd_total_time_ns": total time spend on reads in nano-seconds (json-int)
     - "flush_total_time_ns": total time spend on cache flushes in nano-seconds (json-int)
-    - "wr_highest_offset": Highest offset of a sector written since the
-                           BlockDriverState has been opened (json-int)
+    - "wr_highest_offset": The offset after the greatest byte written to the
+                           BlockDriverState since it has been opened (json-int)
     - "rd_merged": number of read requests that have been merged into
                    another request (json-int)
     - "wr_merged": number of write requests that have been merged into
-- 
2.6.1

  parent reply	other threads:[~2015-10-19 15:54 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-19 15:53 [Qemu-devel] [PATCH v7 00/39] blockdev: BlockBackend and media Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 01/39] block: Remove host floppy support Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 02/39] block: Set BDRV_O_INCOMING in bdrv_fill_options() Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 03/39] blockdev: Allow creation of BDS trees without BB Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 04/39] iotests: Only create BB if necessary Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 05/39] block: Make bdrv_is_inserted() return a bool Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 06/39] block: Add blk_is_available() Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 07/39] block: Make bdrv_is_inserted() recursive Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 08/39] block/raw_bsd: Drop raw_is_inserted() Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 09/39] block: Invoke change media CB before NULLing drv Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 10/39] hw/block/fdc: Implement tray status Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 11/39] hw/usb-storage: Check whether BB is inserted Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 12/39] block: Fix BB AIOCB AioContext without BDS Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 13/39] block: Move guest_block_size into BlockBackend Max Reitz
2015-10-19 15:53 ` Max Reitz [this message]
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 15/39] block: Move BlockAcctStats " Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 16/39] block: Move I/O status and error actions into BB Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 17/39] block/throttle-groups: Make incref/decref public Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 18/39] block: Add BlockBackendRootState Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 19/39] block: Make some BB functions fall back to BBRS Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 20/39] block: Fail requests to empty BlockBackend Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 21/39] block: Prepare remaining BB functions for NULL BDS Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 22/39] block: Add blk_insert_bs() Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 23/39] block: Prepare for NULL BDS Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 24/39] blockdev: Do not create BDS for empty drive Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 25/39] blockdev: Pull out blockdev option extraction Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 26/39] blockdev: Allow more options for BB-less BDS tree Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 27/39] block: Add blk_remove_bs() Max Reitz
2015-10-20  8:33   ` Kevin Wolf
2015-10-21 13:47     ` Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 28/39] blockdev: Add blockdev-open-tray Max Reitz
2015-10-23 13:22   ` Kevin Wolf
2015-10-23 14:22     ` Max Reitz
2015-10-23 13:26   ` Kevin Wolf
2015-10-23 14:26     ` Max Reitz
2015-10-23 14:45       ` Kevin Wolf
2015-10-23 15:25         ` Max Reitz
2015-10-23 15:44           ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 29/39] blockdev: Add blockdev-close-tray Max Reitz
2015-10-23 13:43   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 30/39] blockdev: Add blockdev-remove-medium Max Reitz
2015-10-23 13:45   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 31/39] blockdev: Add blockdev-insert-medium Max Reitz
2015-10-21 11:49   ` Alberto Garcia
2015-10-21 13:47     ` Max Reitz
2015-10-23 13:39       ` Kevin Wolf
2015-10-23 14:04         ` Max Reitz
2015-10-23 13:42   ` Kevin Wolf
2015-10-23 14:35     ` Max Reitz
2015-10-23 14:52       ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 32/39] blockdev: Implement eject with basic operations Max Reitz
2015-10-23 13:54   ` Kevin Wolf
2015-10-23 14:42     ` Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 33/39] blockdev: Implement change " Max Reitz
2015-10-23 14:11   ` Kevin Wolf
2015-10-23 14:43     ` Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 34/39] block: Inquire tray state before tray-moved events Max Reitz
2015-10-23 14:16   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 35/39] qmp: Introduce blockdev-change-medium Max Reitz
2015-10-23 14:25   ` Kevin Wolf
2015-10-23 15:08     ` Max Reitz
2015-10-26 12:14   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 36/39] hmp: Use blockdev-change-medium for change command Max Reitz
2015-10-26 12:13   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 37/39] blockdev: read-only-mode for blockdev-change-medium Max Reitz
2015-10-26 12:13   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 38/39] hmp: Add read-only-mode option to change command Max Reitz
2015-10-26 12:12   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 39/39] iotests: Add test for change-related QMP commands Max Reitz
2015-10-26 13:46   ` Kevin Wolf
2015-10-20 11:10 ` [Qemu-devel] [PATCH v7 00/39] blockdev: BlockBackend and media Kevin Wolf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1445270025-22999-15-git-send-email-mreitz@redhat.com \
    --to=mreitz@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berto@igalia.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).