[Kimchi-devel] [PATCH] Guest memory utilization.
Daniel Henrique Barboza
dhbarboza82 at gmail.com
Wed Oct 28 17:54:08 UTC 2015
Reviewed-by: Daniel Barboza <dhbarboza82 at gmail.com>
Tested-by: Daniel Barboza <dhbarboza82 at gmail.com>
On 10/28/2015 02:46 PM, pvital at linux.vnet.ibm.com wrote:
> From: Paulo Vital <pvital at linux.vnet.ibm.com>
>
> Add support to capture the guest's memory utilization by using libvirt
> 'virDomainMemoryStats'. The return is the percentage of memory utilization
> in the guest's stats dictionary.
>
> Signed-off-by: Paulo Vital <pvital at linux.vnet.ibm.com>
> ---
> src/wok/plugins/kimchi/docs/API.md | 2 ++
> src/wok/plugins/kimchi/model/vms.py | 15 +++++++++++++++
> src/wok/plugins/kimchi/tests/test_mockmodel.py | 2 +-
> src/wok/plugins/kimchi/tests/test_model.py | 2 +-
> 4 files changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/src/wok/plugins/kimchi/docs/API.md b/src/wok/plugins/kimchi/docs/API.md
> index a9333b5..eb3905f 100644
> --- a/src/wok/plugins/kimchi/docs/API.md
> +++ b/src/wok/plugins/kimchi/docs/API.md
> @@ -107,6 +107,8 @@ server.
> * stats: Virtual machine statistics:
> * cpu_utilization: A number between 0 and 100 which indicates the
> percentage of CPU utilization.
> + * mem_utilization: A number between 0 and 100 which indicates the
> + percentage of memory utilization.
> * net_throughput: Expresses total network throughput for reads and
> writes across all virtual interfaces (kb/s).
> * net_throughput_peak: The highest recent value of 'net_throughput'.
> diff --git a/src/wok/plugins/kimchi/model/vms.py b/src/wok/plugins/kimchi/model/vms.py
> index 60145d0..6e77bae 100644
> --- a/src/wok/plugins/kimchi/model/vms.py
> +++ b/src/wok/plugins/kimchi/model/vms.py
> @@ -896,6 +896,7 @@ class VMModel(object):
> self.stats[vm_uuid].update({'timestamp': timestamp})
>
> self._get_percentage_cpu_usage(vm_uuid, info, seconds)
> + self._get_percentage_mem_usage(vm_uuid, dom, seconds)
> self._get_network_io_rate(vm_uuid, dom, seconds)
> self._get_disk_io_rate(vm_uuid, dom, seconds)
> except Exception as e:
> @@ -914,6 +915,19 @@ class VMModel(object):
>
> self.stats[vm_uuid].update({'cputime': info[4], 'cpu': percentage})
>
> + def _get_percentage_mem_usage(self, vm_uuid, dom, seconds):
> + # Get the guest's memory stats
> + memStats = dom.memoryStats()
> + if memStats:
> + memUsed = memStats.get('available') - memStats.get('unused')
> + else:
> + wok_log.debug('Failed to measure memory usage of the guest.')
> +
> + percentage = max(0.0, min(100.0, ((memUsed * 100.0) /
> + memStats.get('available'))))
> +
> + self.stats[vm_uuid].update({'mem_usage': percentage})
> +
> def _get_network_io_rate(self, vm_uuid, dom, seconds):
> prevNetRxKB = self.stats[vm_uuid].get('netRxKB', 0)
> prevNetTxKB = self.stats[vm_uuid].get('netTxKB', 0)
> @@ -1000,6 +1014,7 @@ class VMModel(object):
> vm_stats = self.stats.get(dom.UUIDString(), {})
> res = {}
> res['cpu_utilization'] = vm_stats.get('cpu', 0)
> + res['mem_utilization'] = vm_stats.get('mem_usage', 0)
> res['net_throughput'] = vm_stats.get('net_io', 0)
> res['net_throughput_peak'] = vm_stats.get('max_net_io', 100)
> res['io_throughput'] = vm_stats.get('disk_io', 0)
> diff --git a/src/wok/plugins/kimchi/tests/test_mockmodel.py b/src/wok/plugins/kimchi/tests/test_mockmodel.py
> index 54a1ac8..7c914b8 100644
> --- a/src/wok/plugins/kimchi/tests/test_mockmodel.py
> +++ b/src/wok/plugins/kimchi/tests/test_mockmodel.py
> @@ -125,7 +125,7 @@ class MockModelTests(unittest.TestCase):
> 'screenshot', 'icon', 'graphics', 'users', 'groups',
> 'access', 'persistent'))
>
> - stats_keys = set(('cpu_utilization',
> + stats_keys = set(('cpu_utilization', 'mem_utilization',
> 'net_throughput', 'net_throughput_peak',
> 'io_throughput', 'io_throughput_peak'))
>
> diff --git a/src/wok/plugins/kimchi/tests/test_model.py b/src/wok/plugins/kimchi/tests/test_model.py
> index 4ae837c..fdbe3b4 100644
> --- a/src/wok/plugins/kimchi/tests/test_model.py
> +++ b/src/wok/plugins/kimchi/tests/test_model.py
> @@ -95,7 +95,7 @@ class ModelTests(unittest.TestCase):
> 'screenshot', 'icon', 'graphics', 'users', 'groups',
> 'access', 'persistent'))
>
> - stats_keys = set(('cpu_utilization',
> + stats_keys = set(('cpu_utilization', 'mem_utilization',
> 'net_throughput', 'net_throughput_peak',
> 'io_throughput', 'io_throughput_peak'))
> info = inst.vm_lookup('test')
More information about the Kimchi-devel
mailing list