[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PULL 30/31] qemu-img bench: Implement -S (step size)
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PULL 30/31] qemu-img bench: Implement -S (step size) |
Date: |
Wed, 8 Jun 2016 11:16:56 +0200 |
With this new option, qemu-img bench can be told to advance the current
offset after each request by a different value than the buffer size.
This is useful for controlling the conditions for cluster allocation in
image formats (e.g. qcow2 cluster allocation with COW in front of the
request, or COW areas that aren't overwritten immediately).
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Denis V. Lunev <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
---
qemu-img-cmds.hx | 4 ++--
qemu-img.c | 25 +++++++++++++++++++++----
qemu-img.texi | 6 ++++--
3 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
index 117d0f9..05a2991 100644
--- a/qemu-img-cmds.hx
+++ b/qemu-img-cmds.hx
@@ -10,9 +10,9 @@ STEXI
ETEXI
DEF("bench", img_bench,
- "bench [-c count] [-d depth] [-f fmt] [-n] [-o offset] [--pattern=pattern]
[-q] [-s buffer_size] [-t cache] [-w] filename")
+ "bench [-c count] [-d depth] [-f fmt] [-n] [-o offset] [--pattern=pattern]
[-q] [-s buffer_size] [-S step_size] [-t cache] [-w] filename")
STEXI
address@hidden bench [-c @var{count}] [-d @var{depth}] [-f @var{fmt}] [-n] [-o
@var{offset}] address@hidden [-q] [-s @var{buffer_size}] [-t @var{cache}] [-w]
@var{filename}
address@hidden bench [-c @var{count}] [-d @var{depth}] [-f @var{fmt}] [-n] [-o
@var{offset}] address@hidden [-q] [-s @var{buffer_size}] [-S @var{step_size}]
[-t @var{cache}] [-w] @var{filename}
ETEXI
DEF("check", img_check,
diff --git a/qemu-img.c b/qemu-img.c
index 480ef8d..c5e2638 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -3465,6 +3465,7 @@ typedef struct BenchData {
uint64_t image_size;
bool write;
int bufsize;
+ int step;
int nrreq;
int n;
uint8_t *buf;
@@ -3501,7 +3502,7 @@ static void bench_cb(void *opaque, int ret)
exit(EXIT_FAILURE);
}
b->in_flight++;
- b->offset += b->bufsize;
+ b->offset += b->step;
b->offset %= b->image_size;
}
}
@@ -3518,6 +3519,7 @@ static int img_bench(int argc, char **argv)
int64_t offset = 0;
size_t bufsize = 4096;
int pattern = 0;
+ size_t step = 0;
int64_t image_size;
BlockBackend *blk = NULL;
BenchData data = {};
@@ -3533,7 +3535,7 @@ static int img_bench(int argc, char **argv)
{"pattern", required_argument, 0, OPTION_PATTERN},
{0, 0, 0, 0}
};
- c = getopt_long(argc, argv, "hc:d:f:no:qs:t:w", long_options, NULL);
+ c = getopt_long(argc, argv, "hc:d:f:no:qs:S:t:w", long_options, NULL);
if (c == -1) {
break;
}
@@ -3601,6 +3603,20 @@ static int img_bench(int argc, char **argv)
bufsize = sval;
break;
}
+ case 'S':
+ {
+ int64_t sval;
+ char *end;
+
+ sval = qemu_strtosz_suffix(optarg, &end, QEMU_STRTOSZ_DEFSUFFIX_B);
+ if (sval < 0 || sval > INT_MAX || *end) {
+ error_report("Invalid step size specified");
+ return 1;
+ }
+
+ step = sval;
+ break;
+ }
case 't':
ret = bdrv_parse_cache_mode(optarg, &flags, &writethrough);
if (ret < 0) {
@@ -3651,15 +3667,16 @@ static int img_bench(int argc, char **argv)
.blk = blk,
.image_size = image_size,
.bufsize = bufsize,
+ .step = step ?: bufsize,
.nrreq = depth,
.n = count,
.offset = offset,
.write = is_write,
};
printf("Sending %d %s requests, %d bytes each, %d in parallel "
- "(starting at offset %" PRId64 ")\n",
+ "(starting at offset %" PRId64 ", step size %d)\n",
data.n, data.write ? "write" : "read", data.bufsize, data.nrreq,
- data.offset);
+ data.offset, data.step);
data.buf = blk_blockalign(blk, data.nrreq * data.bufsize);
memset(data.buf, pattern, data.nrreq * data.bufsize);
diff --git a/qemu-img.texi b/qemu-img.texi
index 9bffad2..ccc0b51 100644
--- a/qemu-img.texi
+++ b/qemu-img.texi
@@ -131,14 +131,16 @@ Skip the creation of the target volume
Command description:
@table @option
address@hidden bench [-c @var{count}] [-d @var{depth}] [-f @var{fmt}] [-n] [-o
@var{offset}] address@hidden [-q] [-s @var{buffer_size}] [-t @var{cache}] [-w]
@var{filename}
address@hidden bench [-c @var{count}] [-d @var{depth}] [-f @var{fmt}] [-n] [-o
@var{offset}] address@hidden [-q] [-s @var{buffer_size}] [-S @var{step_size}]
[-t @var{cache}] [-w] @var{filename}
Run a simple sequential I/O benchmark on the specified image. If @code{-w} is
specified, a write test is performed, otherwise a read test is performed.
A total number of @var{count} I/O requests is performed, each @var{buffer_size}
bytes in size, and with @var{depth} requests in parallel. The first request
-starts at the position given by @var{offset}.
+starts at the position given by @var{offset}, each following request increases
+the current position by @var{step_size}. If @var{step_size} is not given,
address@hidden is used for its value.
If @code{-n} is specified, the native AIO backend is used if possible. On
Linux, this option only works if @code{-t none} or @code{-t directsync} is
--
1.8.3.1
- [Qemu-block] [PULL 22/31] raw-posix: Fetch max sectors for host block device, (continued)
- [Qemu-block] [PULL 22/31] raw-posix: Fetch max sectors for host block device, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 19/31] migration/block: Convert load to BlockBackend, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 14/31] qed: Convert to bdrv_co_pwrite_zeroes(), Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 20/31] migration/block: Convert saving to BlockBackend, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 15/31] raw-posix: Convert to bdrv_co_pwrite_zeroes(), Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 23/31] qcow2: avoid extra flushes in qcow2, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 27/31] qemu-img bench, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 28/31] qemu-img bench: Sequential writes, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 25/31] blockdev: clean up error handling in do_open_tray, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 21/31] block: assert that bs->request_alignment is a power of 2, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 30/31] qemu-img bench: Implement -S (step size),
Kevin Wolf <=
- [Qemu-block] [PULL 24/31] block: Fix bdrv_all_delete_snapshot() error handling, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 29/31] qemu-img bench: Make start offset configurable, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 26/31] block: Don't emulate natively supported pwritev flags, Kevin Wolf, 2016/06/08
- [Qemu-block] [PULL 31/31] qemu-img bench: Add --flush-interval, Kevin Wolf, 2016/06/08
- Re: [Qemu-block] [Qemu-devel] [PULL 00/31] Block layer patches, Peter Maydell, 2016/06/08