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))
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))
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))
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'])
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)
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)
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))
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)
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)
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])
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'])
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)
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])