| 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: | 
 |  | 
 |   o 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 | 
 |  | 
 |   o 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 '-balloon virtio', 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": {} } |