Virtio balloon memory statistics
================================

The virtio balloon driver supports guest memory statistics reporting. These
statistics are available to QEMU users as QOM (QEMU Object Model) device
properties via a polling mechanism.

Before querying the available stats, clients first have to enable polling.
This is done by writing a time interval value (in seconds) to the
guest-stats-polling-interval property. This value can be:

  > 0
       enables polling in the specified interval. If polling is already
       enabled, the polling time interval is changed to the new value

  0
       disables polling. Previous polled statistics are still valid and
       can be queried.

Once polling is enabled, the virtio-balloon device in QEMU will start
polling the guest's balloon driver for new stats in the specified time
interval.

To retrieve those stats, clients have to query the guest-stats property,
which will return a dictionary containing:

  * A key named 'stats', containing all available stats. If the guest
    doesn't support a particular stat, or if it couldn't be retrieved,
    its value will be -1. Currently, the following stats are supported:

      - stat-swap-in
      - stat-swap-out
      - stat-major-faults
      - stat-minor-faults
      - stat-free-memory
      - stat-total-memory
      - stat-available-memory
      - stat-disk-caches
      - stat-htlb-pgalloc
      - stat-htlb-pgfail

  * A key named last-update, which contains the last stats update
    timestamp in seconds. Since this timestamp is generated by the host,
    a buggy guest can't influence its value. The value is 0 if the guest
    has not updated the stats (yet).

It's also important to note the following:

 - Previously polled statistics remain available even if the polling is
   later disabled

 - As noted above, if a guest doesn't support a particular stat its value
   will always be -1. However, it's also possible that a guest temporarily
   couldn't update one or even all stats. If this happens, just wait for
   the next update

 - Polling can be enabled even if the guest doesn't have stats support
   or the balloon driver wasn't loaded in the guest. If this is the case
   and stats are queried, last-update will be 0.

 - The polling timer is only re-armed when the guest responds to the
   statistics request. This means that if a (buggy) guest doesn't ever
   respond to the request the timer will never be re-armed, which has
   the same effect as disabling polling

Here are a few examples. QEMU is started with ``-device virtio-balloon``,
which generates ``/machine/peripheral-anon/device[1]`` as the QOM path for
the balloon device.

Enable polling with 2 seconds interval::

  { "execute": "qom-set",
               "arguments": { "path": "/machine/peripheral-anon/device[1]",
               "property": "guest-stats-polling-interval", "value": 2 } }

  { "return": {} }

Change polling to 10 seconds::

  { "execute": "qom-set",
               "arguments": { "path": "/machine/peripheral-anon/device[1]",
               "property": "guest-stats-polling-interval", "value": 10 } }

  { "return": {} }

Get stats::

  { "execute": "qom-get",
               "arguments": { "path": "/machine/peripheral-anon/device[1]",
               "property": "guest-stats" } }
  {
    "return": {
        "stats": {
            "stat-swap-out": 0,
            "stat-free-memory": 844943360,
            "stat-minor-faults": 219028,
            "stat-major-faults": 235,
            "stat-total-memory": 1044406272,
            "stat-swap-in": 0
        },
        "last-update": 1358529861
    }
  }

Disable polling::

  { "execute": "qom-set",
               "arguments": { "path": "/machine/peripheral-anon/device[1]",
               "property": "stats-polling-interval", "value": 0 } }

  { "return": {} }
