| 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": {} } |