def get_cpu_usage(cr): time.sleep(STABILIZATION_DURATION) cpu_usage_start = utils.get_cpu_usage() time.sleep(MEASUREMENT_DURATION) cpu_usage_end = utils.get_cpu_usage() return utils.compute_active_cpu_time(cpu_usage_start, cpu_usage_end) * 100
def test_compute_active_cpu_time(self): start_usage = { 'user': 900, 'nice': 10, 'system': 90, 'idle': 10000, 'iowait': 500, 'irq': 100, 'softirq': 50, 'steal': 150, 'guest': 170, 'guest_nice': 30 } end_usage = { 'user': 1800, 'nice': 20, 'system': 180, 'idle': 13000, 'iowait': 2000, 'irq': 200, 'softirq': 100, 'steal': 300, 'guest': 340, 'guest_nice': 60 } usage = utils.compute_active_cpu_time(start_usage, end_usage) self.assertAlmostEqual(usage, 0.25)
def compute_active_cpu_time(self, cpu_usage_start, cpu_usage_end): """Computes the fraction of CPU time spent non-idling. This function should be invoked using before/after values from calls to get_cpu_usage(). """ return utils.compute_active_cpu_time(cpu_usage_start, cpu_usage_end)
def test_cpu_usage(self): """ Runs the video cpu usage test. @param local_path: the path to the video file. @returns a dictionary that contains the test result. """ cpu_usage_start = utils.get_cpu_usage() time.sleep(MEASUREMENT_DURATION) cpu_usage_end = utils.get_cpu_usage() return utils.compute_active_cpu_time(cpu_usage_start, cpu_usage_end) * 100
def _get_cpu_usage(self): """Compute percent CPU in active use over the sample interval. Note: This method introduces a sleep period into the test, equal to 90% of the sample interval. @returns float of percent active use of CPU. """ # Time between measurements is ~90% of the sample interval. measurement_time_delta = SAMPLE_INTERVAL * 0.90 cpu_usage_start = utils.get_cpu_usage() time.sleep(measurement_time_delta) cpu_usage_end = utils.get_cpu_usage() return utils.compute_active_cpu_time(cpu_usage_start, cpu_usage_end) * 100
def sample(self, fps_info): """Gets a fps sample with system state.""" vmstat = self.get_vmstat() vmstat_diff = self.VMStat( *[(end - start) for start, end in zip(self._prev_vmstat, vmstat)]) self._prev_vmstat = vmstat cpustat = utils.get_cpu_usage() cpuload = utils.compute_active_cpu_time(self._prev_cpustat, cpustat) self._prev_cpustat = cpustat mem_info_in_kb = utils.get_meminfo() # Converts mem_info from KB to MB. mem_info = collections.namedtuple( 'MemInfo', mem_info_in_kb._fields)(*[v / float(1024) for v in mem_info_in_kb]) consumer_pids = self._get_consumer_pid_func() logging.info('Consumers %s', consumer_pids) consumer_rss, consumer_swap = self.get_consumer_meminfo(consumer_pids) # fps_info = (frame_info, frame_times) fps_count = len([f for f in fps_info[0] if f != ' ']) sample = self.Sample( pswpin=vmstat_diff.pswpin, pswpout=vmstat_diff.pswpout, free_mem=mem_info.MemFree, buff_mem=mem_info.Buffers, cached_mem=mem_info.Cached, anon_mem=mem_info.Active_anon + mem_info.Inactive_anon, file_mem=mem_info.Active_file + mem_info.Inactive_file, swap_free=mem_info.SwapFree, swap_used=mem_info.SwapTotal - mem_info.SwapFree, consumer_num=len(consumer_pids), consumer_rss=consumer_rss, consumer_swap=consumer_swap, cpuload=cpuload, fps=fps_count) logging.info(sample) with self._samples_lock: self._samples.append(sample)
def stop(self): return utils.compute_active_cpu_time( self.start_cpu_usage_, utils.get_cpu_usage())