[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 00/21] Extended I/O accounting
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH v4 00/21] Extended I/O accounting |
Date: |
Tue, 10 Nov 2015 15:07:34 +0000 |
User-agent: |
Mutt/1.5.23 (2015-06-09) |
On Wed, Oct 28, 2015 at 05:32:57PM +0200, Alberto Garcia wrote:
> Here's v4 of the series that implements extended I/O accounting for
> block devices.
>
> Since part of Max's BlockBackend series has already been merged, this
> series can now be applied cleanly on top of the master branch without
> additional dependencies.
>
> Here's the summary of what this series provides:
>
> - New block_acct_failed() and block_acct_invalid() calls.
> We keep track now of the number of successful, failed and invalid
> operations (each one separated into read, write and flush). So from
> the API point of view, BlockDeviceStats contains 6 new fields for
> those.
>
> - idle_time_ns: time since the last I/O operation.
>
> - New BlockDeviceTimedStats struct: it has statistics for the I/O
> during a given interval of time. It keeps minimum, maximum and
> average latencies for read, write and flush operations.
>
> It also keeps the average read and write queue depths.
>
> - New 'stats-intervals' option that allows the user to define the
> intervals used to keep the aforementioned statistics. An arbitrary
> number of intervals can be specified, the length of each one is in
> seconds.
>
> For the API I opted for a colon-separated list of numbers,
>
> stats-intervals=60:3600:86400
>
> I also considered something a different syntax,
>
> stats-intervals.0.length=60,
> stats-intervals.1.length=3600,
> stats-intervals.2.length=86400
>
> This one could be useful if we want to specify any other attribute
> for each interval, but I couldn't come up with any, so I chose the
> simpler solution.
>
> - Two new options, stats-account-invalid and stats-account-failed,
> which allow the user to decide whether to count invalid and failed
> operations when computing the idle time and total latency.
>
> Regards,
>
> Berto
>
> v4:
> - Rebase on top of the current master. This series no longer depends
> on any other.
> - patch 8: clarify that interval_length is in seconds [Stefan]
> - patch 9: rewrite timed_average_sum() so it does not call
> qemu_clock_get_ns() twice [Stefan]
>
> v3: https://lists.gnu.org/archive/html/qemu-block/2015-10/msg00785.html
> - Rebased on top of the current master and on Max's BlockBackend
> series v7
> - patch 4: minor documentation fixes [Stefan]
> - patch 5: s/miliseconds/nanoseconds/ [Stefan]
> - patch 6: dropped, there's no "supports_stats" anymore [Stefan]
> - patch 7 (now 6): explain why block_acct_invalid() does not update
> total_time_ns[] [Stefan]
> - patch 12 (now 11): don't initialize BlockAcctCookie to { 0 }, it's
> not needed.
>
> v2: https://lists.gnu.org/archive/html/qemu-block/2015-10/msg00161.html
> - First complete implementation of the new statistics
>
> v1: https://lists.gnu.org/archive/html/qemu-devel/2015-06/msg03321.html
> - Initial series containing only the timed average infrastructure.
>
> Alberto Garcia (21):
> xen_disk: Account for flush operations
> ide: Account for write operations correctly
> block: define 'clock_type' for the accounting code
> util: Infrastructure for computing recent averages
> block: Add idle_time_ns to BlockDeviceStats
> block: Add statistics for failed and invalid I/O operations
> block: Allow configuring whether to account failed and invalid ops
> block: Compute minimum, maximum and average I/O latencies
> block: Add average I/O queue depth to BlockDeviceTimedStats
> block: New option to define the intervals for collecting I/O
> statistics
> qemu-io: Account for failed, invalid and flush operations
> block: Use QEMU_CLOCK_VIRTUAL for the accounting code in qtest mode
> iotests: Add test for the block device statistics
> nvme: Account for failed and invalid operations
> virtio-blk: Account for failed and invalid operations
> xen_disk: Account for failed and invalid operations
> atapi: Account for failed and invalid operations
> ide: Account for failed and invalid operations
> macio: Account for failed operations
> scsi-disk: Account for failed operations
> block: Update copyright of the accounting code
>
> block/accounting.c | 123 ++++++++++++++-
> block/block-backend.c | 1 +
> block/qapi.c | 51 +++++++
> blockdev.c | 53 +++++++
> hmp.c | 4 +-
> hw/block/nvme.c | 11 +-
> hw/block/virtio-blk.c | 4 +-
> hw/block/xen_disk.c | 27 +++-
> hw/ide/atapi.c | 31 ++--
> hw/ide/core.c | 12 +-
> hw/ide/macio.c | 12 +-
> hw/scsi/scsi-disk.c | 46 ++++--
> include/block/accounting.h | 28 ++++
> include/qemu/timed-average.h | 64 ++++++++
> qapi/block-core.json | 103 ++++++++++++-
> qemu-io-cmds.c | 9 ++
> qmp-commands.hx | 80 +++++++++-
> tests/Makefile | 4 +
> tests/qemu-iotests/136 | 349
> +++++++++++++++++++++++++++++++++++++++++++
> tests/qemu-iotests/136.out | 5 +
> tests/qemu-iotests/group | 1 +
> tests/test-timed-average.c | 90 +++++++++++
> util/Makefile.objs | 1 +
> util/timed-average.c | 231 ++++++++++++++++++++++++++++
> 24 files changed, 1292 insertions(+), 48 deletions(-)
> create mode 100644 include/qemu/timed-average.h
> create mode 100644 tests/qemu-iotests/136
> create mode 100644 tests/qemu-iotests/136.out
> create mode 100644 tests/test-timed-average.c
> create mode 100644 util/timed-average.c
>
> --
> 2.6.1
>
Thanks, applied to my block tree:
https://github.com/stefanha/qemu/commits/block
Stefan
signature.asc
Description: PGP signature
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH v4 00/21] Extended I/O accounting,
Stefan Hajnoczi <=