Ejemplo n.º 1
0
    def test_get_samples(self):
        next_value = iter((
            virt_inspector.CPUStats(time=1 * (10**6), number=2),
            virt_inspector.CPUStats(time=3 * (10**6), number=2),
            # cpu_time resets on instance restart
            virt_inspector.CPUStats(time=2 * (10**6), number=2),
        ))

        def inspect_cpus(name):
            return six.next(next_value)

        self.inspector.inspect_cpus = mock.Mock(side_effect=inspect_cpus)

        mgr = manager.AgentManager()
        pollster = cpu.CPUPollster()

        def _verify_cpu_metering(expected_time):
            cache = {}
            samples = list(pollster.get_samples(mgr, cache, [self.instance]))
            self.assertEqual(1, len(samples))
            self.assertEqual(set(['cpu']), set([s.name for s in samples]))
            self.assertEqual(expected_time, samples[0].volume)
            self.assertEqual(2, samples[0].resource_metadata.get('cpu_number'))
            # ensure elapsed time between polling cycles is non-zero
            time.sleep(0.001)

        _verify_cpu_metering(1 * (10**6))
        _verify_cpu_metering(3 * (10**6))
        _verify_cpu_metering(2 * (10**6))
Ejemplo n.º 2
0
    def test_get_counters(self):
        self.inspector.inspect_cpus(self.instance.name).AndReturn(
            virt_inspector.CPUStats(time=1 * (10 ** 6), number=2))
        self.inspector.inspect_cpus(self.instance.name).AndReturn(
            virt_inspector.CPUStats(time=3 * (10 ** 6), number=2))
        # cpu_time resets on instance restart
        self.inspector.inspect_cpus(self.instance.name).AndReturn(
            virt_inspector.CPUStats(time=2 * (10 ** 6), number=2))
        self.mox.ReplayAll()

        mgr = manager.AgentManager()
        pollster = pollsters.CPUPollster()

        def _verify_cpu_metering(zero, expected_time):
            counters = list(pollster.get_counters(mgr, self.instance))
            self.assertEquals(len(counters), 2)
            self.assertEqual(set([c.name for c in counters]),
                             set(pollster.get_counter_names()))
            assert counters[0].name == 'cpu_util'
            assert (counters[0].volume == 0.0 if zero else
                    counters[0].volume > 0.0)
            assert counters[1].name == 'cpu'
            assert counters[1].volume == expected_time
            # ensure elapsed time between polling cycles is non-zero
            time.sleep(0.001)

        _verify_cpu_metering(True, 1 * (10 ** 6))
        _verify_cpu_metering(False, 3 * (10 ** 6))
        _verify_cpu_metering(False, 2 * (10 ** 6))
Ejemplo n.º 3
0
    def test_get_samples(self):
        self.inspector.inspect_cpus(self.instance.name).AndReturn(
            virt_inspector.CPUStats(time=1 * (10 ** 6), number=2))
        self.inspector.inspect_cpus(self.instance.name).AndReturn(
            virt_inspector.CPUStats(time=3 * (10 ** 6), number=2))
        # cpu_time resets on instance restart
        self.inspector.inspect_cpus(self.instance.name).AndReturn(
            virt_inspector.CPUStats(time=2 * (10 ** 6), number=2))
        self.mox.ReplayAll()

        mgr = manager.AgentManager()
        pollster = cpu.CPUPollster()

        def _verify_cpu_metering(expected_time):
            cache = {}
            samples = list(pollster.get_samples(mgr, cache, self.instance))
            self.assertEquals(len(samples), 1)
            self.assertEqual(set([s.name for s in samples]),
                             set(['cpu']))
            assert samples[0].volume == expected_time
            self.assertEquals(samples[0].resource_metadata.get('cpu_number'),
                              2)
            # ensure elapsed time between polling cycles is non-zero
            time.sleep(0.001)

        _verify_cpu_metering(1 * (10 ** 6))
        _verify_cpu_metering(3 * (10 ** 6))
        _verify_cpu_metering(2 * (10 ** 6))
Ejemplo n.º 4
0
 def inspect_cpus(self, instance):
     domain = self._get_domain_not_shut_off_or_raise(instance)
     # TODO(gordc): this can probably be cached since it can be used to get
     # all data related
     stats = self.connection.domainListGetStats([domain])
     dom_stat = stats[0][1]
     return virt_inspector.CPUStats(number=dom_stat['vcpu.current'],
                                    time=dom_stat['cpu.time'])
Ejemplo n.º 5
0
    def inspect_cpus(self, instance_name):
        (cpu_clock_used, cpu_count,
         uptime) = self._utils.get_cpu_metrics(instance_name)
        host_cpu_clock, host_cpu_count = self._utils.get_host_cpu_info()

        cpu_percent_used = (cpu_clock_used / float(host_cpu_clock * cpu_count))
        # Nanoseconds
        cpu_time = (long(uptime * cpu_percent_used) * 1000)

        return virt_inspector.CPUStats(number=cpu_count, time=cpu_time)
Ejemplo n.º 6
0
    def inspect_cpus(self, instance):
        instance_name = util.instance_name(instance)
        (cpu_clock_used,
         cpu_count, uptime) = self._utils.get_cpu_metrics(instance_name)

        cpu_percent_used = cpu_clock_used / self._host_max_cpu_clock

        # Nanoseconds
        cpu_time = (int(uptime * cpu_percent_used) * units.k)

        return virt_inspector.CPUStats(number=cpu_count, time=cpu_time)
Ejemplo n.º 7
0
    def test_get_samples_no_caching(self):
        cpu_stats = virt_inspector.CPUStats(time=1 * (10**6), number=2)
        self.inspector.inspect_cpus = mock.Mock(return_value=cpu_stats)

        mgr = manager.AgentManager()
        pollster = cpu.CPUPollster()

        cache = {}
        samples = list(pollster.get_samples(mgr, cache, [self.instance]))
        self.assertEqual(1, len(samples))
        self.assertEqual(10**6, samples[0].volume)
        self.assertEqual(0, len(cache))
Ejemplo n.º 8
0
    def test_get_samples_no_caching(self):
        self.inspector.inspect_cpus(self.instance.name).AndReturn(
            virt_inspector.CPUStats(time=1 * (10 ** 6), number=2))
        self.mox.ReplayAll()

        mgr = manager.AgentManager()
        pollster = cpu.CPUPollster()

        cache = {}
        samples = list(pollster.get_samples(mgr, cache, self.instance))
        self.assertEquals(len(samples), 1)
        self.assertEquals(samples[0].volume, 10 ** 6)
        self.assertEquals(len(cache), 0)
Ejemplo n.º 9
0
    def inspect_cpus(self, instance):
        """Inspect the CPU statistics for an instance.

        :param instance: the target instance
        :return: the number of CPUs and cumulative CPU time
        """
        uuid = self._puuid(instance)
        cur_date, cur_metric = self.vm_metrics.get_latest_metric(uuid)

        # If the current metric is none, then the instance can not be found in
        # the sample set.  An error should be raised.
        if cur_metric is None:
            raise virt_inspector.InstanceNotFoundException(
                _('VM %s not found in PowerVM Metrics Sample.') %
                instance.name)

        cpu_time = (cur_metric.processor.util_cap_proc_cycles +
                    cur_metric.processor.util_uncap_proc_cycles)
        return virt_inspector.CPUStats(number=cur_metric.processor.virt_procs,
                                       time=cpu_time)
Ejemplo n.º 10
0
 def inspect_cpus(self, instance):
     domain = self._get_domain_not_shut_off_or_raise(instance)
     dom_info = domain.info()
     return virt_inspector.CPUStats(number=dom_info[3], time=dom_info[4])
Ejemplo n.º 11
0
 def inspect_cpus(self, instance):
     inst_stat = self._get_inst_stat('cpumem', instance)
     return virt_inspector.CPUStats(number=inst_stat['guest_cpus'],
                                    time=inst_stat['used_cpu_time'])
Ejemplo n.º 12
0
 def inspect_cpus(self, instance_name):
     domain = self._lookup_by_name(instance_name)
     (_, _, _, num_cpu, cpu_time) = domain.info()
     return virt_inspector.CPUStats(number=num_cpu, time=cpu_time)
Ejemplo n.º 13
0
 def inspect_cpus(self, instance_name):
     domain = self._lookup_by_name(instance_name)
     dom_info = domain.info()
     return virt_inspector.CPUStats(number=dom_info[3], time=dom_info[4])