All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Cleber Rosa <crosa@redhat.com>,
	qemu-block@nongnu.org, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Max Reitz <mreitz@redhat.com>,
	Wainer dos Santos Moschetta <wainersm@redhat.com>,
	Caio Carrara <ccarrara@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [Qemu-devel] [RFC PATCH 2/2] qemu-img: consider a zero number of I/O requests an invalid count
Date: Mon, 12 Nov 2018 15:38:45 +0100	[thread overview]
Message-ID: <a6993de7-340f-848a-809b-2d07e2923fc7@redhat.com> (raw)
In-Reply-To: <20181109221213.7310-3-crosa@redhat.com>

On 9/11/18 23:12, Cleber Rosa wrote:
> It's debatable whether it makes sense to consider the bench command
> successful when no I/O requests will be performed.  This changes the
> behavior to consider a zero count of I/O requests an invalid value.
> While at it, avoid using signed types for number of I/O requests.
> 
> The image file used, is a simple raw image with 1K size.  There's a
> obvious trade off between creating and reusing those images.  This is
> an experiment in sharing those among tests.  It was created using:
> 
>   mkdir -p tests/data/images/empty
>   cd tests/data/images/empty
>   qemu-img create raw 1K
> 
> This relies on the Test's "get_data()", which by default looks for
> data files on sources that map to various levels of specificity of a
> test: file, test and additionally with variant and a symlink.
> 
> One other possibility with regards to in-tree images, is to extend the
> Test's "get_data()" API (which is extensible by design) and make the
> common images directory a "source".  The resulting API usage would be
> similar to:
> 
>     self.get_data("empty/raw", source="common_images")
> 
> or simply:
> 
>     self.get_data("empty/raw")
> 
> To look for "empty/raw" in any of the available sources.  That would
> make the symlink unnecessary.
> 
> Reference: https://avocado-framework.readthedocs.io/en/65.0/api/core/avocado.core.html#avocado.core.test.TestData
> Signed-off-by: Cleber Rosa <crosa@redhat.com>
> ---
>   qemu-img.c                                  |   8 ++---
>   tests/acceptance/qemu_img_bench.py          |  34 ++++++++++++++++++++
>   tests/acceptance/qemu_img_bench.py.data/img |   1 +
>   tests/data/images/empty/raw                 | Bin 0 -> 1024 bytes
>   4 files changed, 39 insertions(+), 4 deletions(-)
>   create mode 100644 tests/acceptance/qemu_img_bench.py
>   create mode 120000 tests/acceptance/qemu_img_bench.py.data/img
>   create mode 100644 tests/data/images/empty/raw
> 
> diff --git a/qemu-img.c b/qemu-img.c
> index 4c96db7ba4..7ffcdd1589 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -3960,7 +3960,7 @@ typedef struct BenchData {
>       int bufsize;
>       int step;
>       int nrreq;
> -    int n;
> +    unsigned int n;
>       int flush_interval;
>       bool drain_on_flush;
>       uint8_t *buf;
> @@ -4051,7 +4051,7 @@ static int img_bench(int argc, char **argv)
>       bool quiet = false;
>       bool image_opts = false;
>       bool is_write = false;
> -    int count = 75000;
> +    unsigned int count = 75000;
>       int depth = 64;
>       int64_t offset = 0;
>       size_t bufsize = 4096;
> @@ -4098,7 +4098,7 @@ static int img_bench(int argc, char **argv)
>           {
>               unsigned long res;
>   
> -            if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
> +            if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > UINT_MAX || res <= 0) {

res is unsigned so can't be < 0.

>                   error_report("Invalid request count specified");
>                   return 1;
>               }
> @@ -4248,7 +4248,7 @@ static int img_bench(int argc, char **argv)
>           .flush_interval = flush_interval,
>           .drain_on_flush = drain_on_flush,
>       };
> -    printf("Sending %d %s requests, %d bytes each, %d in parallel "
> +    printf("Sending %u %s requests, %d bytes each, %d in parallel "
>              "(starting at offset %" PRId64 ", step size %d)\n",
>              data.n, data.write ? "write" : "read", data.bufsize, data.nrreq,
>              data.offset, data.step);
> diff --git a/tests/acceptance/qemu_img_bench.py b/tests/acceptance/qemu_img_bench.py
> new file mode 100644
> index 0000000000..327524ad8f
> --- /dev/null
> +++ b/tests/acceptance/qemu_img_bench.py
> @@ -0,0 +1,34 @@
> +# Test for the basic qemu-img bench command
> +#
> +# Copyright (c) 2018 Red Hat, Inc.
> +#
> +# Author:
> +#  Cleber Rosa <crosa@redhat.com>
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2 or
> +# later.  See the COPYING file in the top-level directory.
> +
> +import os
> +
> +from avocado_qemu import QemuImgTest
> +from avocado.utils import process
> +
> +
> +class Bench(QemuImgTest):
> +    """
> +    Runs the qemu-img tool with the bench command and different
> +    options and verifies the expected outcome.
> +
> +    :avocado: enable
> +    """
> +    def check_invalid_count(self, count):
> +        cmd = "%s bench -c %d %s" % (self.qemu_img_bin, count, self.get_data("img"))
> +        result = process.run(cmd, ignore_status=True)
> +        self.assertEqual(1, result.exit_status)
> +        self.assertIn(b"Invalid request count", result.stderr)
> +
> +    def test_zero_count(self):
> +        self.check_invalid_count(0)
> +
> +    def test_negative_count(self):
> +        self.check_invalid_count(-1)
> diff --git a/tests/acceptance/qemu_img_bench.py.data/img b/tests/acceptance/qemu_img_bench.py.data/img
> new file mode 120000
> index 0000000000..6d01ef2e85
> --- /dev/null
> +++ b/tests/acceptance/qemu_img_bench.py.data/img
> @@ -0,0 +1 @@
> +../../data/images/empty/raw
> \ No newline at end of file
> diff --git a/tests/data/images/empty/raw b/tests/data/images/empty/raw
> new file mode 100644
> index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20
> GIT binary patch
> literal 1024
> ScmZQz7zLvtFd70QH3R?z00031
> 
> literal 0
> HcmV?d00001
> 

  reply	other threads:[~2018-11-12 14:38 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-09 22:12 [Qemu-devel] [RFC PATCH 0/2] Acceptance tests for qemu-img Cleber Rosa
2018-11-09 22:12 ` [Qemu-devel] [RFC PATCH 1/2] Acceptance Tests: add QemuImgTest base class Cleber Rosa
2018-11-09 22:12 ` [Qemu-devel] [RFC PATCH 2/2] qemu-img: consider a zero number of I/O requests an invalid count Cleber Rosa
2018-11-12 14:38   ` Philippe Mathieu-Daudé [this message]
2018-11-12 15:04     ` Cleber Rosa
2018-11-12 10:49 ` [Qemu-devel] [RFC PATCH 0/2] Acceptance tests for qemu-img Kevin Wolf
2018-11-12 14:59   ` Cleber Rosa
2018-11-12 15:11     ` Daniel P. Berrangé
2018-11-12 16:00     ` Kevin Wolf
2018-11-12 17:36       ` Cleber Rosa
2018-11-13  9:39         ` Markus Armbruster
2018-11-13 13:50           ` Daniel P. Berrangé
2018-11-13 14:41             ` Cleber Rosa
2018-11-13 12:18         ` Kevin Wolf
2018-11-13 13:26           ` Eduardo Habkost
2018-11-13 13:51             ` Kevin Wolf
2018-11-13 13:56               ` Eduardo Habkost
2018-11-13 14:20               ` Cleber Rosa
2018-11-13 14:32                 ` Eduardo Habkost
2018-11-13 14:43                   ` Cleber Rosa
2018-11-13 14:51                     ` Eduardo Habkost
2018-11-13 14:15           ` Cleber Rosa
2018-11-13 15:38             ` 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=a6993de7-340f-848a-809b-2d07e2923fc7@redhat.com \
    --to=philmd@redhat.com \
    --cc=ccarrara@redhat.com \
    --cc=crosa@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=wainersm@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.