All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Akihiko Odaki <akihiko.odaki@daynix.com>
Cc: qemu-devel@nongnu.org,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"David Hildenbrand" <david@redhat.com>,
	"Dmitry Osipenko" <dmitry.osipenko@collabora.com>,
	"Laurent Vivier" <lvivier@redhat.com>,
	qemu-arm@nongnu.org, "Mahmoud Mandour" <ma.mandourr@gmail.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Sriram Yagnaraman" <sriram.yagnaraman@ericsson.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Peter Xu" <peterx@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"John Snow" <jsnow@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Fabiano Rosas" <farosas@suse.de>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Alexandre Iooss" <erdnaxe@crans.org>
Subject: Re: [PATCH v2 05/14] contrib/plugins: add a scaling factor to the ips arg
Date: Mon, 19 May 2025 15:54:00 +0100	[thread overview]
Message-ID: <8734d0slbr.fsf@draig.linaro.org> (raw)
In-Reply-To: <cabfe49b-38af-4ecc-a338-1fe175dd7226@daynix.com> (Akihiko Odaki's message of "Sat, 10 May 2025 13:42:38 +0900")

Akihiko Odaki <akihiko.odaki@daynix.com> writes:

> On 2025/05/06 21:57, Alex Bennée wrote:
>> It's easy to get lost in zeros while setting the numbers of
>> instructions per second. Add a scaling suffix to make things simpler.
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
>> ---
>> v2
>>    - normalise the suffix before a full strcmp0
>>    - check endptr actually set
>>    - fix checkpatch
>> ---
>>   contrib/plugins/ips.c | 36 +++++++++++++++++++++++++++++++++++-
>>   1 file changed, 35 insertions(+), 1 deletion(-)
>> diff --git a/contrib/plugins/ips.c b/contrib/plugins/ips.c
>> index e5297dbb01..9b166a7d6c 100644
>> --- a/contrib/plugins/ips.c
>> +++ b/contrib/plugins/ips.c
>> @@ -20,6 +20,8 @@
>>     QEMU_PLUGIN_EXPORT int qemu_plugin_version =
>> QEMU_PLUGIN_VERSION;
>>   +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
>> +
>
> G_N_ELEMENTS() is already available.
>
>>   /* how many times do we update time per sec */
>>   #define NUM_TIME_UPDATE_PER_SEC 10
>>   #define NSEC_IN_ONE_SEC (1000 * 1000 * 1000)
>> @@ -129,6 +131,18 @@ static void plugin_exit(qemu_plugin_id_t id, void *udata)
>>       qemu_plugin_scoreboard_free(vcpus);
>>   }
>>   +typedef struct {
>> +    const char *suffix;
>> +    unsigned long multipler;
>
> I prefer to have an explicitly-sized type: uint32_t in this case. It
> also saves typing several characters as a bonus.

4Ghz would be a reasonable size and that would overflow a simple
uint32_t unless we start casting.

>
>> +} scale_entry;
>
> docs/devel/style.rst says
>> Structured type names are in CamelCase; harder to type but standing
>> out.
>
>> +
>> +/* a bit like units.h but not binary */
>> +static scale_entry scales[] = {
>> +    { "khz", 1000 },
>> +    { "mhz", 1000 * 1000 },
>> +    { "ghz", 1000 * 1000 * 1000 },
>
> Having "hz" as suffixes look a bit awkard. "1 giga instructions per
> second" sounds natural, but "1 gigahertz instructions per second"
> doesn't to me. Practically, it would be easier to just type "g"
> instead of "ghz".
>
> util/cutils.c has similar code though I guess a plugin cannot be
> linked to it.
>
>> +};
>> +
>>   QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
>>                                              const qemu_info_t *info, int argc,
>>                                              char **argv)
>> @@ -137,12 +151,32 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
>>           char *opt = argv[i];
>>           g_auto(GStrv) tokens = g_strsplit(opt, "=", 2);
>>           if (g_strcmp0(tokens[0], "ips") == 0) {
>> -            max_insn_per_second = g_ascii_strtoull(tokens[1], NULL, 10);
>> +            char *endptr = NULL;
>> +            max_insn_per_second = g_ascii_strtoull(tokens[1], &endptr, 10);
>>               if (!max_insn_per_second && errno) {
>>                   fprintf(stderr, "%s: couldn't parse %s (%s)\n",
>>                           __func__, tokens[1], g_strerror(errno));
>>                   return -1;
>>               }
>> +
>> +            if (endptr && *endptr != 0) {
>> +                g_autofree gchar *lower = g_utf8_strdown(endptr, -1);
>> +                unsigned long scale = 0;
>> +
>> +                for (int j = 0; j < ARRAY_SIZE(scales); j++) {
>> +                    if (g_strcmp0(lower, scales[j].suffix) == 0) {
>> +                        scale = scales[j].multipler;
>> +                        break;
>> +                    }
>> +                }
>> +
>> +                if (scale) {
>> +                    max_insn_per_second *= scale;
>> +                } else {
>> +                    fprintf(stderr, "bad suffix: %s\n", endptr);
>> +                    return -1;
>> +                }
>> +            }
>>           } else {
>>               fprintf(stderr, "option parsing failed: %s\n", opt);
>>               return -1;

I've fixed the other cases.

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro

  reply	other threads:[~2025-05-19 14:54 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-06 12:57 [PATCH v2 00/14] Maintainer updates for May (testing, plugins, virtio-gpu) Alex Bennée
2025-05-06 12:57 ` [PATCH v2 01/14] tests/docker: expose $HOME/.cache/qemu as docker volume Alex Bennée
2025-05-06 12:57 ` [PATCH v2 02/14] gitlab: disable debug info on CI builds Alex Bennée
2025-05-06 12:57 ` [PATCH v2 03/14] tests/tcg: make aarch64 boot.S handle different starting modes Alex Bennée
2025-05-10  4:21   ` Akihiko Odaki
2025-05-14 13:51     ` Alex Bennée
2025-05-06 12:57 ` [PATCH v2 04/14] Running with --enable-ubsan leads to a qtest failure Alex Bennée
2025-05-10  4:27   ` Akihiko Odaki
2025-05-06 12:57 ` [PATCH v2 05/14] contrib/plugins: add a scaling factor to the ips arg Alex Bennée
2025-05-10  4:42   ` Akihiko Odaki
2025-05-19 14:54     ` Alex Bennée [this message]
2025-05-19 23:24       ` Akihiko Odaki
2025-05-06 12:57 ` [PATCH v2 06/14] contrib/plugins: allow setting of instructions per quantum Alex Bennée
2025-05-10  4:45   ` Akihiko Odaki
2025-05-19 15:14     ` Alex Bennée
2025-05-06 12:57 ` [PATCH v2 07/14] MAINTAINERS: add myself to virtio-gpu for Odd Fixes Alex Bennée
2025-05-06 12:57 ` [PATCH v2 08/14] MAINTAINERS: add Akihiko and Dmitry as reviewers Alex Bennée
2025-05-06 12:57 ` [PATCH v2 09/14] hw/display: re-arrange memory region tracking Alex Bennée
2025-05-06 12:57 ` [PATCH v2 10/14] virtio-gpu: fix hang under TCG when unmapping blob Alex Bennée
2025-05-06 12:57 ` [PATCH v2 11/14] virtio-gpu: refactor async blob unmapping Alex Bennée
2025-05-06 12:57 ` [PATCH v2 12/14] ui/gtk-gl-area: Remove extra draw call in refresh Alex Bennée
2025-05-10  4:52   ` Akihiko Odaki
2025-05-10 12:12     ` Dmitry Osipenko
2025-05-11  4:47       ` Akihiko Odaki
2025-05-12 17:01         ` Kim, Dongwon
2025-05-18  4:56           ` Akihiko Odaki
2025-05-06 12:57 ` [PATCH v2 13/14] docs: Create a uniquelabel Sphinx extension Alex Bennée
2025-05-06 12:57 ` [PATCH v2 14/14] docs: Use uniquelabel in qemu-block-drivers.rst.inc Alex Bennée

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=8734d0slbr.fsf@draig.linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=akihiko.odaki@daynix.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=david@redhat.com \
    --cc=dmitry.osipenko@collabora.com \
    --cc=erdnaxe@crans.org \
    --cc=farosas@suse.de \
    --cc=jsnow@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=ma.mandourr@gmail.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=peterx@redhat.com \
    --cc=philmd@linaro.org \
    --cc=pierrick.bouvier@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=sriram.yagnaraman@ericsson.com \
    --cc=thuth@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.