Example #1
0
    def test_get_samples(self):
        next_value = iter((
            virt_inspector.MemoryBandwidthStats(total=1892352, local=1802240),
            virt_inspector.MemoryBandwidthStats(total=1081344, local=90112),
        ))

        def inspect_memory_bandwidth(instance, duration):
            return next(next_value)

        self.inspector.inspect_memory_bandwidth = mock.Mock(
            side_effect=inspect_memory_bandwidth)
        mgr = manager.AgentManager(0, self.CONF)

        def _check_memory_bandwidth_total(expected_usage):
            pollster = memory.MemoryBandwidthTotalPollster(self.CONF)

            samples = list(pollster.get_samples(mgr, {}, [self.instance]))
            self.assertEqual(1, len(samples))
            self.assertEqual(set(['memory.bandwidth.total']),
                             set([s.name for s in samples]))
            self.assertEqual(expected_usage, samples[0].volume)

        def _check_memory_bandwidth_local(expected_usage):
            pollster = memory.MemoryBandwidthLocalPollster(self.CONF)

            samples = list(pollster.get_samples(mgr, {}, [self.instance]))
            self.assertEqual(1, len(samples))
            self.assertEqual(set(['memory.bandwidth.local']),
                             set([s.name for s in samples]))
            self.assertEqual(expected_usage, samples[0].volume)

        _check_memory_bandwidth_total(1892352)
        _check_memory_bandwidth_local(90112)
Example #2
0
    def inspect_memory_bandwidth(self, instance, duration=None):
        domain = self._get_domain_not_shut_off_or_raise(instance)

        try:
            stats = self.connection.domainListGetStats(
                [domain], libvirt.VIR_DOMAIN_STATS_PERF)
            perf = stats[0][1]
            return virt_inspector.MemoryBandwidthStats(total=perf["perf.mbmt"],
                                                       local=perf["perf.mbml"])
        except (KeyError, AttributeError) as e:
            # NOTE(sileht): KeyError if for libvirt >=2.0.0,<2.3.0, the perf
            # subsystem ws existing but not  these attributes
            # https://github.com/libvirt/libvirt/commit/bae660869de0612bee2a740083fb494c27e3f80c
            msg = _('Perf is not supported by current version of libvirt, and '
                    'failed to inspect memory bandwidth of %(instance_uuid)s, '
                    'can not get info from libvirt: %(error)s') % {
                        'instance_uuid': instance.id,
                        'error': e
                    }
            raise virt_inspector.NoDataException(msg)
        # domainListGetStats might launch an exception if the method or
        # mbmt/mbml perf event is not supported by the underlying hypervisor
        # being used by libvirt.
        except libvirt.libvirtError as e:
            msg = _('Failed to inspect memory bandwidth of %(instance_uuid)s, '
                    'can not get info from libvirt: %(error)s') % {
                        'instance_uuid': instance.id,
                        'error': e
                    }
            raise virt_inspector.NoDataException(msg)