diff --git a/ceilometer/compute/virt/libvirt/inspector.py b/ceilometer/compute/virt/libvirt/inspector.py index 4847e269e1..80fc29e15c 100755 --- a/ceilometer/compute/virt/libvirt/inspector.py +++ b/ceilometer/compute/virt/libvirt/inspector.py @@ -151,7 +151,10 @@ class LibvirtInspector(virt_inspector.Inspector): memory_swap_in = memory_swap_out = None memory_stats = domain.memoryStats() # Stat provided from libvirt is in KB, converting it to MB. - if 'available' in memory_stats and 'unused' in memory_stats: + if 'usable' in memory_stats and 'available' in memory_stats: + memory_used = (memory_stats['available'] - + memory_stats['usable']) / units.Ki + elif 'available' in memory_stats and 'unused' in memory_stats: memory_used = (memory_stats['available'] - memory_stats['unused']) / units.Ki if 'rss' in memory_stats: diff --git a/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py b/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py index 4b19ab8bb6..ed30732c28 100755 --- a/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py +++ b/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py @@ -474,6 +474,27 @@ class TestLibvirtInspection(base.BaseTestCase): self.assertIsNone(stats.memory_swap_in) self.assertIsNone(stats.memory_swap_out) + def test_inspect_memory_with_usable(self): + domain = mock.Mock() + domain.info.return_value = (0, 0, 0, 2, 999999) + domain.memoryStats.return_value = {'available': 76800, + 'rss': 30000, + 'swap_in': 5120, + 'swap_out': 8192, + 'unused': 25600, + 'usable': 51200} + conn = mock.Mock() + conn.domainListGetStats.return_value = [({}, {})] + conn.lookupByUUIDString.return_value = domain + + with mock.patch('ceilometer.compute.virt.libvirt.utils.' + 'refresh_libvirt_connection', return_value=conn): + stats = self.inspector.inspect_instance(self.instance, None) + self.assertEqual(25600 / units.Ki, stats.memory_usage) + self.assertEqual(30000 / units.Ki, stats.memory_resident) + self.assertEqual(5120 / units.Ki, stats.memory_swap_in) + self.assertEqual(8192 / units.Ki, stats.memory_swap_out) + def test_inspect_perf_events_libvirt_less_than_2_3_0(self): domain = mock.Mock() domain.info.return_value = (0, 0, 51200, 2, 999999) diff --git a/releasenotes/notes/use-usable-metric-if-available-970ee58e8fdeece6.yaml b/releasenotes/notes/use-usable-metric-if-available-970ee58e8fdeece6.yaml new file mode 100644 index 0000000000..28ef3d3db6 --- /dev/null +++ b/releasenotes/notes/use-usable-metric-if-available-970ee58e8fdeece6.yaml @@ -0,0 +1,3 @@ +--- +features: + - use memory usable metric from libvirt memoryStats if available.