* [Qemu-devel] [PATCH 0/2] virtio-balloon: improve balloon statistics @ 2016-02-20 7:54 Denis V. Lunev 2016-02-20 7:54 ` [Qemu-devel] [PATCH 1/2] virtio-balloon: export all " Denis V. Lunev 2016-02-20 7:54 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev 0 siblings, 2 replies; 7+ messages in thread From: Denis V. Lunev @ 2016-02-20 7:54 UTC (permalink / raw) Cc: Denis V. Lunev, Michael S. Tsirkin, qemu-devel, Igor Redko New counter from the Linux kernel + generic framework to pass currently unknown counters via QMP for debug purposes. Signed-off-by: Denis V. Lunev <den@openvz.org> CC: Igor Redko <redkoi@virtuozzo.com> CC: Michael S. Tsirkin <mst@redhat.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 1/2] virtio-balloon: export all balloon statistics 2016-02-20 7:54 [Qemu-devel] [PATCH 0/2] virtio-balloon: improve balloon statistics Denis V. Lunev @ 2016-02-20 7:54 ` Denis V. Lunev 2016-02-22 21:27 ` Eric Blake 2016-02-20 7:54 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev 1 sibling, 1 reply; 7+ messages in thread From: Denis V. Lunev @ 2016-02-20 7:54 UTC (permalink / raw) Cc: Igor Redko, Michael S. Tsirkin, qemu-devel, Denis V. Lunev From: Igor Redko <redkoi@virtuozzo.com> 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. Signed-off-by: Igor Redko <redkoi@virtuozzo.com> Signed-off-by: Denis V. Lunev <den@openvz.org> CC: Michael S. Tsirkin <mst@redhat.com> --- hw/virtio/virtio-balloon.c | 30 ++++++++++++++++++++++++------ include/hw/virtio/virtio-balloon.h | 3 ++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index a382f43..cc551a3 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -66,8 +66,7 @@ static const char *balloon_stat_names[] = { */ static inline void reset_stats(VirtIOBalloon *dev) { - int i; - for (i = 0; i < VIRTIO_BALLOON_S_NR; dev->stats[i++] = -1); + dev->stats_cnt = 0; } static bool balloon_stats_supported(const VirtIOBalloon *s) @@ -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++) { + 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; } } + error_propagate(errp, err); err = NULL; visit_end_struct(v, &err); @@ -273,10 +280,21 @@ static void virtio_balloon_receive_stats(VirtIODevice *vdev, VirtQueue *vq) == sizeof(stat)) { uint16_t tag = virtio_tswap16(vdev, stat.tag); uint64_t val = virtio_tswap64(vdev, stat.val); + int i; offset += sizeof(stat); - if (tag < VIRTIO_BALLOON_S_NR) - s->stats[tag] = val; + for (i = 0; i < s->stats_cnt; i++) { + if (s->stats[i].tag == tag) { + break; + } + } + if (i < ARRAY_SIZE(s->stats)) { + s->stats[i].tag = tag; + s->stats[i].val = val; + if (s->stats_cnt <= i) { + s->stats_cnt = i + 1; + } + } } s->stats_vq_offset = offset; diff --git a/include/hw/virtio/virtio-balloon.h b/include/hw/virtio/virtio-balloon.h index 35f62ac..5c8730e 100644 --- a/include/hw/virtio/virtio-balloon.h +++ b/include/hw/virtio/virtio-balloon.h @@ -36,7 +36,8 @@ typedef struct VirtIOBalloon { VirtQueue *ivq, *dvq, *svq; uint32_t num_pages; uint32_t actual; - uint64_t stats[VIRTIO_BALLOON_S_NR]; + VirtIOBalloonStatModern stats[VIRTIO_BALLOON_S_NR + 32]; + uint16_t stats_cnt; VirtQueueElement *stats_vq_elem; size_t stats_vq_offset; QEMUTimer *stats_timer; -- 2.1.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] virtio-balloon: export all balloon statistics 2016-02-20 7:54 ` [Qemu-devel] [PATCH 1/2] virtio-balloon: export all " Denis V. Lunev @ 2016-02-22 21:27 ` Eric Blake 0 siblings, 0 replies; 7+ messages in thread From: Eric Blake @ 2016-02-22 21:27 UTC (permalink / raw) To: Denis V. Lunev; +Cc: Igor Redko, qemu-devel, Michael S. Tsirkin [-- Attachment #1: Type: text/plain, Size: 2248 bytes --] On 02/20/2016 12:54 AM, Denis V. Lunev wrote: > From: Igor Redko <redkoi@virtuozzo.com> > > 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 [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 604 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter 2016-02-20 7:54 [Qemu-devel] [PATCH 0/2] virtio-balloon: improve balloon statistics Denis V. Lunev 2016-02-20 7:54 ` [Qemu-devel] [PATCH 1/2] virtio-balloon: export all " Denis V. Lunev @ 2016-02-20 7:54 ` Denis V. Lunev 2016-02-22 21:28 ` Eric Blake 1 sibling, 1 reply; 7+ messages in thread From: Denis V. Lunev @ 2016-02-20 7:54 UTC (permalink / raw) Cc: Denis V. Lunev, Michael S. Tsirkin, qemu-devel, Igor Redko The patch for the kernel part is in linux-next already: commit ac88e7c908b920866e529862f2b2f0129b254ab2 Author: Igor Redko <redkoi@virtuozzo.com> Date: Thu Feb 18 09:23:01 2016 +1100 virtio_balloon: export 'available' memory to balloon statistics Add a new field, VIRTIO_BALLOON_S_AVAIL, to virtio_balloon memory statistics protocol, corresponding to 'Available' in /proc/meminfo. Signed-off-by: Denis V. Lunev <den@openvz.org> CC: Igor Redko <redkoi@virtuozzo.com> CC: Michael S. Tsirkin <mst@redhat.com> --- hw/virtio/virtio-balloon.c | 1 + include/standard-headers/linux/virtio_balloon.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index cc551a3..b052dfb 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -53,6 +53,7 @@ static const char *balloon_stat_names[] = { [VIRTIO_BALLOON_S_MINFLT] = "stat-minor-faults", [VIRTIO_BALLOON_S_MEMFREE] = "stat-free-memory", [VIRTIO_BALLOON_S_MEMTOT] = "stat-total-memory", + [VIRTIO_BALLOON_S_AVAIL] = "stat-available-memory", [VIRTIO_BALLOON_S_NR] = NULL }; diff --git a/include/standard-headers/linux/virtio_balloon.h b/include/standard-headers/linux/virtio_balloon.h index 2e2a6dc..0df7c2e 100644 --- a/include/standard-headers/linux/virtio_balloon.h +++ b/include/standard-headers/linux/virtio_balloon.h @@ -51,7 +51,8 @@ struct virtio_balloon_config { #define VIRTIO_BALLOON_S_MINFLT 3 /* Number of minor faults */ #define VIRTIO_BALLOON_S_MEMFREE 4 /* Total amount of free memory */ #define VIRTIO_BALLOON_S_MEMTOT 5 /* Total amount of memory */ -#define VIRTIO_BALLOON_S_NR 6 +#define VIRTIO_BALLOON_S_AVAIL 6 /* Amount of available memory in guest */ +#define VIRTIO_BALLOON_S_NR 7 /* * Memory statistics structure. -- 2.1.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter 2016-02-20 7:54 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev @ 2016-02-22 21:28 ` Eric Blake 0 siblings, 0 replies; 7+ messages in thread From: Eric Blake @ 2016-02-22 21:28 UTC (permalink / raw) To: Denis V. Lunev; +Cc: Igor Redko, qemu-devel, Michael S. Tsirkin [-- Attachment #1: Type: text/plain, Size: 952 bytes --] On 02/20/2016 12:54 AM, Denis V. Lunev wrote: > The patch for the kernel part is in linux-next already: > commit ac88e7c908b920866e529862f2b2f0129b254ab2 > Author: Igor Redko <redkoi@virtuozzo.com> > Date: Thu Feb 18 09:23:01 2016 +1100 > > virtio_balloon: export 'available' memory to balloon statistics > > Add a new field, VIRTIO_BALLOON_S_AVAIL, to virtio_balloon memory > statistics protocol, corresponding to 'Available' in /proc/meminfo. > > Signed-off-by: Denis V. Lunev <den@openvz.org> > CC: Igor Redko <redkoi@virtuozzo.com> > CC: Michael S. Tsirkin <mst@redhat.com> > --- > hw/virtio/virtio-balloon.c | 1 + > include/standard-headers/linux/virtio_balloon.h | 3 ++- > 2 files changed, 3 insertions(+), 1 deletion(-) Reviewed-by: Eric Blake <eblake@redhat.com> -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 604 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v2 0/2] virtio-balloon: improve balloon statistics @ 2016-02-23 14:59 Denis V. Lunev 2016-02-23 14:59 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev 0 siblings, 1 reply; 7+ messages in thread From: Denis V. Lunev @ 2016-02-23 14:59 UTC (permalink / raw) Cc: Denis V. Lunev, Michael S. Tsirkin, qemu-devel, Igor Redko New counter from the Linux kernel + generic framework to pass currently unknown counters via QMP for debug purposes. Signed-off-by: Denis V. Lunev <den@openvz.org> CC: Igor Redko <redkoi@virtuozzo.com> CC: Michael S. Tsirkin <mst@redhat.com> Changes from v1: - removed !err in patch 1 by suggestion from Eric ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter 2016-02-23 14:59 [Qemu-devel] [PATCH v2 0/2] virtio-balloon: improve balloon statistics Denis V. Lunev @ 2016-02-23 14:59 ` Denis V. Lunev 0 siblings, 0 replies; 7+ messages in thread From: Denis V. Lunev @ 2016-02-23 14:59 UTC (permalink / raw) Cc: Denis V. Lunev, Michael S. Tsirkin, qemu-devel, Igor Redko The patch for the kernel part is in linux-next already: commit ac88e7c908b920866e529862f2b2f0129b254ab2 Author: Igor Redko <redkoi@virtuozzo.com> Date: Thu Feb 18 09:23:01 2016 +1100 virtio_balloon: export 'available' memory to balloon statistics Add a new field, VIRTIO_BALLOON_S_AVAIL, to virtio_balloon memory statistics protocol, corresponding to 'Available' in /proc/meminfo. Signed-off-by: Denis V. Lunev <den@openvz.org> Reviewed-by: Eric Blake <eblake@redhat.com> CC: Igor Redko <redkoi@virtuozzo.com> CC: Michael S. Tsirkin <mst@redhat.com> --- hw/virtio/virtio-balloon.c | 1 + include/standard-headers/linux/virtio_balloon.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index 1740293..123d3c7 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -53,6 +53,7 @@ static const char *balloon_stat_names[] = { [VIRTIO_BALLOON_S_MINFLT] = "stat-minor-faults", [VIRTIO_BALLOON_S_MEMFREE] = "stat-free-memory", [VIRTIO_BALLOON_S_MEMTOT] = "stat-total-memory", + [VIRTIO_BALLOON_S_AVAIL] = "stat-available-memory", [VIRTIO_BALLOON_S_NR] = NULL }; diff --git a/include/standard-headers/linux/virtio_balloon.h b/include/standard-headers/linux/virtio_balloon.h index 2e2a6dc..0df7c2e 100644 --- a/include/standard-headers/linux/virtio_balloon.h +++ b/include/standard-headers/linux/virtio_balloon.h @@ -51,7 +51,8 @@ struct virtio_balloon_config { #define VIRTIO_BALLOON_S_MINFLT 3 /* Number of minor faults */ #define VIRTIO_BALLOON_S_MEMFREE 4 /* Total amount of free memory */ #define VIRTIO_BALLOON_S_MEMTOT 5 /* Total amount of memory */ -#define VIRTIO_BALLOON_S_NR 6 +#define VIRTIO_BALLOON_S_AVAIL 6 /* Amount of available memory in guest */ +#define VIRTIO_BALLOON_S_NR 7 /* * Memory statistics structure. -- 2.1.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics @ 2016-02-24 7:50 Denis V. Lunev 2016-02-24 7:50 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev 0 siblings, 1 reply; 7+ messages in thread From: Denis V. Lunev @ 2016-02-24 7:50 UTC (permalink / raw) Cc: Denis V. Lunev, Michael S. Tsirkin, qemu-devel, Igor Redko New counter from the Linux kernel + generic framework to pass currently unknown counters via QMP for debug purposes. Signed-off-by: Denis V. Lunev <den@openvz.org> CC: Igor Redko <redkoi@virtuozzo.com> CC: Michael S. Tsirkin <mst@redhat.com> Changes from v2: - put "export unknown counters" code under ifdef Changes from v1: - removed !err in patch 1 by suggestion from Eric ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter 2016-02-24 7:50 [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics Denis V. Lunev @ 2016-02-24 7:50 ` Denis V. Lunev 0 siblings, 0 replies; 7+ messages in thread From: Denis V. Lunev @ 2016-02-24 7:50 UTC (permalink / raw) Cc: Denis V. Lunev, Michael S. Tsirkin, qemu-devel, Igor Redko The patch for the kernel part is in linux-next already: commit ac88e7c908b920866e529862f2b2f0129b254ab2 Author: Igor Redko <redkoi@virtuozzo.com> Date: Thu Feb 18 09:23:01 2016 +1100 virtio_balloon: export 'available' memory to balloon statistics Add a new field, VIRTIO_BALLOON_S_AVAIL, to virtio_balloon memory statistics protocol, corresponding to 'Available' in /proc/meminfo. Signed-off-by: Denis V. Lunev <den@openvz.org> CC: Igor Redko <redkoi@virtuozzo.com> CC: Michael S. Tsirkin <mst@redhat.com> --- hw/virtio/virtio-balloon.c | 1 + include/standard-headers/linux/virtio_balloon.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index 6629145..3193f44 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -53,6 +53,7 @@ static const char *balloon_stat_names[] = { [VIRTIO_BALLOON_S_MINFLT] = "stat-minor-faults", [VIRTIO_BALLOON_S_MEMFREE] = "stat-free-memory", [VIRTIO_BALLOON_S_MEMTOT] = "stat-total-memory", + [VIRTIO_BALLOON_S_AVAIL] = "stat-available-memory", [VIRTIO_BALLOON_S_NR] = NULL }; diff --git a/include/standard-headers/linux/virtio_balloon.h b/include/standard-headers/linux/virtio_balloon.h index 2e2a6dc..0df7c2e 100644 --- a/include/standard-headers/linux/virtio_balloon.h +++ b/include/standard-headers/linux/virtio_balloon.h @@ -51,7 +51,8 @@ struct virtio_balloon_config { #define VIRTIO_BALLOON_S_MINFLT 3 /* Number of minor faults */ #define VIRTIO_BALLOON_S_MEMFREE 4 /* Total amount of free memory */ #define VIRTIO_BALLOON_S_MEMTOT 5 /* Total amount of memory */ -#define VIRTIO_BALLOON_S_NR 6 +#define VIRTIO_BALLOON_S_AVAIL 6 /* Amount of available memory in guest */ +#define VIRTIO_BALLOON_S_NR 7 /* * Memory statistics structure. -- 2.1.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-02-24 7:51 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-02-20 7:54 [Qemu-devel] [PATCH 0/2] virtio-balloon: improve balloon statistics Denis V. Lunev 2016-02-20 7:54 ` [Qemu-devel] [PATCH 1/2] virtio-balloon: export all " Denis V. Lunev 2016-02-22 21:27 ` Eric Blake 2016-02-20 7:54 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev 2016-02-22 21:28 ` Eric Blake -- strict thread matches above, loose matches on Subject: below -- 2016-02-23 14:59 [Qemu-devel] [PATCH v2 0/2] virtio-balloon: improve balloon statistics Denis V. Lunev 2016-02-23 14:59 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev 2016-02-24 7:50 [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics Denis V. Lunev 2016-02-24 7:50 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev
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.