[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/2] virtio-balloon: export all balloon statisti
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [PATCH 1/2] virtio-balloon: export all balloon statistics |
Date: |
Mon, 22 Feb 2016 14:27:19 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 |
On 02/20/2016 12:54 AM, Denis V. Lunev wrote:
> From: Igor Redko <address@hidden>
>
> We are making experiments with different autoballooning strategies
> based on the guest behavior. Thus we need to experiment with different
> guest statistics. For now every counter change requires QEMU recompilation
> and dances with Libvirt.
>
> This patch introduces transport for unrecognized counters in virtio-balloon.
> This transport can be used for measuring benefits from using new
> balloon counters, before submitting any patches. Current alternative
> is 'guest-exec' transport which isn't made for such delicate matters
> and can influence test results.
>
> Originally all counters with tag >= VIRTIO_BALLOON_S_NR were ignored.
> Instead of this we keep first (VIRTIO_BALLOON_S_NR + 32) counters from the
> queue and pass unrecognized ones with the following names: 'x-stat-XXXX',
> where XXXX is a tag number in hex. Defined counters are reported with their
> regular names.
The name implies experimental, so apps like libvirt shouldn't rely on
it; while it does fill a gap for making development easier, so I'm in
favor of the idea.
> @@ -133,12 +132,20 @@ static void balloon_stats_get_all(Object *obj, Visitor
> *v, const char *name,
> if (err) {
> goto out_end;
> }
> - for (i = 0; i < VIRTIO_BALLOON_S_NR; i++) {
> - visit_type_uint64(v, balloon_stat_names[i], &s->stats[i], &err);
> + for (i = 0; !err && i < s->stats_cnt; i++) {
Why are you checking for err here? You cannot enter the loop with err
set...
> + if (s->stats[i].tag < VIRTIO_BALLOON_S_NR) {
> + visit_type_uint64(v, balloon_stat_names[s->stats[i].tag],
> + &s->stats[i].val, &err);
> + } else {
> + gchar *str = g_strdup_printf("x-stat-%04x", s->stats[i].tag);
> + visit_type_uint64(v, str, &s->stats[i].val, &err);
> + g_free(str);
> + }
> if (err) {
> break;
> }
...and you cannot exit the loop with it set. Therefore the check is dead
code.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature