All of lore.kernel.org
 help / color / mirror / Atom feed
* [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 1/2] virtio-balloon: export all " Denis V. Lunev
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ 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] 9+ messages in thread

* [Qemu-devel] [PATCH 1/2] virtio-balloon: export all balloon statistics
  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
  2016-02-24  7:50 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: Denis V. Lunev @ 2016-02-24  7:50 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>
---
 configure                          | 12 ++++++++++++
 hw/virtio/virtio-balloon.c         | 32 ++++++++++++++++++++++++++------
 include/hw/virtio/virtio-balloon.h |  3 ++-
 3 files changed, 40 insertions(+), 7 deletions(-)

diff --git a/configure b/configure
index 0aa249b..a51b85c 100755
--- a/configure
+++ b/configure
@@ -314,6 +314,7 @@ vhdx=""
 numa=""
 tcmalloc="no"
 jemalloc="no"
+unknown_balloon_stats="no"
 
 # parse CC options first
 for opt do
@@ -1141,6 +1142,10 @@ for opt do
   ;;
   --enable-jemalloc) jemalloc="yes"
   ;;
+  --enable-unknown-balloon-stats) unknown_balloon_stats="yes"
+  ;;
+  --disable-unknown-balloon-stats) unknown_balloon_stats="no"
+  ;;
   *)
       echo "ERROR: unknown option $opt"
       echo "Try '$0 --help' for more information"
@@ -1363,6 +1368,8 @@ disabled with --disable-FEATURE, default is enabled if available:
   numa            libnuma support
   tcmalloc        tcmalloc support
   jemalloc        jemalloc support
+  unknown-balloon-stats  report unknown balloon statistics counters
+  ;;
 
 NOTE: The object files are built at the place where configure is launched
 EOF
@@ -4776,6 +4783,7 @@ echo "bzip2 support     $bzip2"
 echo "NUMA host support $numa"
 echo "tcmalloc support  $tcmalloc"
 echo "jemalloc support  $jemalloc"
+echo "unknown balloon stat counters support  $unknown_balloon_stats"
 
 if test "$sdl_too_old" = "yes"; then
 echo "-> Your SDL version is too old - please upgrade to have SDL support"
@@ -5324,6 +5332,10 @@ if test "$rdma" = "yes" ; then
   echo "CONFIG_RDMA=y" >> $config_host_mak
 fi
 
+if test "$unknown_balloon_stats" = "yes" ; then
+  echo "CONFIG_UNKNOWN_BALLOON_STATS=y" >> $config_host_mak
+fi
+
 # Hold two types of flag:
 #   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
 #                                     a thread we have a handle to
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index a382f43..6629145 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,22 @@ 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; 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 {
+#if defined(CONFIG_UNKNOWN_BALLOON_STATS)
+            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);
+#endif
+        }
         if (err) {
             break;
         }
     }
+
     error_propagate(errp, err);
     err = NULL;
     visit_end_struct(v, &err);
@@ -273,10 +282,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] 9+ 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 ` [Qemu-devel] [PATCH 1/2] virtio-balloon: export all " Denis V. Lunev
@ 2016-02-24  7:50 ` Denis V. Lunev
  2016-02-24 14:34 ` [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics Michael S. Tsirkin
  2016-03-01 13:44 ` Denis V. Lunev
  3 siblings, 0 replies; 9+ 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] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics
  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 1/2] virtio-balloon: export all " Denis V. Lunev
  2016-02-24  7:50 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev
@ 2016-02-24 14:34 ` Michael S. Tsirkin
  2016-02-24 15:33   ` Denis V. Lunev
  2016-03-01 13:44 ` Denis V. Lunev
  3 siblings, 1 reply; 9+ messages in thread
From: Michael S. Tsirkin @ 2016-02-24 14:34 UTC (permalink / raw)
  To: Denis V. Lunev; +Cc: Igor Redko, qemu-devel

On Wed, Feb 24, 2016 at 10:50:46AM +0300, Denis V. Lunev wrote:
> New counter from the Linux kernel +

It is in AKPM's linux-next kernel but I will revert it there if
the suggested interface extension is not submitted
to the Virtio ABI committee soon.


> 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] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics
  2016-02-24 14:34 ` [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics Michael S. Tsirkin
@ 2016-02-24 15:33   ` Denis V. Lunev
  2016-02-24 15:39     ` Michael S. Tsirkin
  0 siblings, 1 reply; 9+ messages in thread
From: Denis V. Lunev @ 2016-02-24 15:33 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: Igor Redko, qemu-devel

On 02/24/2016 05:34 PM, Michael S. Tsirkin wrote:
> On Wed, Feb 24, 2016 at 10:50:46AM +0300, Denis V. Lunev wrote:
>> New counter from the Linux kernel +
> It is in AKPM's linux-next kernel but I will revert it there if
> the suggested interface extension is not submitted
> to the Virtio ABI committee soon.
>
>
can you pls pinpoint the contact and procedure then.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics
  2016-02-24 15:33   ` Denis V. Lunev
@ 2016-02-24 15:39     ` Michael S. Tsirkin
  2016-02-26 17:58       ` Denis V. Lunev
  0 siblings, 1 reply; 9+ messages in thread
From: Michael S. Tsirkin @ 2016-02-24 15:39 UTC (permalink / raw)
  To: Denis V. Lunev; +Cc: Igor Redko, qemu-devel

On Wed, Feb 24, 2016 at 06:33:38PM +0300, Denis V. Lunev wrote:
> On 02/24/2016 05:34 PM, Michael S. Tsirkin wrote:
> >On Wed, Feb 24, 2016 at 10:50:46AM +0300, Denis V. Lunev wrote:
> >>New counter from the Linux kernel +
> >It is in AKPM's linux-next kernel but I will revert it there if
> >the suggested interface extension is not submitted
> >to the Virtio ABI committee soon.
> >
> >
> can you pls pinpoint the contact and procedure then.

https://www.oasis-open.org/committees/comments/index.php?wg_abbrev=virtio

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics
  2016-02-24 15:39     ` Michael S. Tsirkin
@ 2016-02-26 17:58       ` Denis V. Lunev
  0 siblings, 0 replies; 9+ messages in thread
From: Denis V. Lunev @ 2016-02-26 17:58 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: Igor Redko, qemu-devel

On 02/24/2016 06:39 PM, Michael S. Tsirkin wrote:
> On Wed, Feb 24, 2016 at 06:33:38PM +0300, Denis V. Lunev wrote:
>> On 02/24/2016 05:34 PM, Michael S. Tsirkin wrote:
>>> On Wed, Feb 24, 2016 at 10:50:46AM +0300, Denis V. Lunev wrote:
>>>> New counter from the Linux kernel +
>>> It is in AKPM's linux-next kernel but I will revert it there if
>>> the suggested interface extension is not submitted
>>> to the Virtio ABI committee soon.
>>>
>>>
>> can you pls pinpoint the contact and procedure then.
> https://www.oasis-open.org/committees/comments/index.php?wg_abbrev=virtio
>
done with comment submission.

Can we proceed with this version if you do not like v2?

Den

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics
  2016-02-24  7:50 [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics Denis V. Lunev
                   ` (2 preceding siblings ...)
  2016-02-24 14:34 ` [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics Michael S. Tsirkin
@ 2016-03-01 13:44 ` Denis V. Lunev
  2016-03-01 17:16   ` Michael S. Tsirkin
  3 siblings, 1 reply; 9+ messages in thread
From: Denis V. Lunev @ 2016-03-01 13:44 UTC (permalink / raw)
  Cc: Igor Redko, qemu-devel, Michael S. Tsirkin

On 02/24/2016 10:50 AM, Denis V. Lunev wrote:
> 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
>
>
any decision on this?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics
  2016-03-01 13:44 ` Denis V. Lunev
@ 2016-03-01 17:16   ` Michael S. Tsirkin
  0 siblings, 0 replies; 9+ messages in thread
From: Michael S. Tsirkin @ 2016-03-01 17:16 UTC (permalink / raw)
  To: Denis V. Lunev; +Cc: Igor Redko, qemu-devel

On Tue, Mar 01, 2016 at 04:44:34PM +0300, Denis V. Lunev wrote:
> On 02/24/2016 10:50 AM, Denis V. Lunev wrote:
> >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
> >
> >
> any decision on this?

Thanks, I will queue this up.

-- 
MST

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-03-01 17:16 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 1/2] virtio-balloon: export all " Denis V. Lunev
2016-02-24  7:50 ` [Qemu-devel] [PATCH 2/2] virtio-balloon: add 'available' counter Denis V. Lunev
2016-02-24 14:34 ` [Qemu-devel] [PATCH v3 0/2] virtio-balloon: improve balloon statistics Michael S. Tsirkin
2016-02-24 15:33   ` Denis V. Lunev
2016-02-24 15:39     ` Michael S. Tsirkin
2016-02-26 17:58       ` Denis V. Lunev
2016-03-01 13:44 ` Denis V. Lunev
2016-03-01 17:16   ` Michael S. Tsirkin

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.