def collect_cpu(cgroup_name, percentile): """ Collect the average CPU utilization over a minute period """ percentages = [] for x in range(0, 60): cgroup_stats_dir = os.path.join(CGROUP_DIR, cgroup_name) cpu_stats = helpers.parse_fk(open(os.path.join(cgroup_stats_dir, 'cpu.stat'), 'r').read()) cpu_usage = helpers.parse_nlsv(open(os.path.join(cgroup_stats_dir, 'cpuacct.usage'), 'r').read()) cpu_quota = helpers.parse_nlsv(open(os.path.join(cgroup_stats_dir, 'cpu.cfs_quota_us'), 'r').read()) cpu_stat_nr_periods_curr = cpu_stats['nr_periods'] cpuacct_usage_curr_in_ns = cpu_usage[0] cpu_cfs_quota_in_us = cpu_quota[0] global cpu_stat_nr_periods_prev global cpuacct_usage_prev_in_ns num_periods_elapsed = cpu_stat_nr_periods_curr - cpu_stat_nr_periods_prev cpuacct_usage_diff_in_ns = cpuacct_usage_curr_in_ns - cpuacct_usage_prev_in_ns max_allowed_cpu_time_in_us = num_periods_elapsed * cpu_cfs_quota_in_us cpu_stat_nr_periods_prev = cpu_stat_nr_periods_curr cpuacct_usage_prev_in_ns = cpuacct_usage_curr_in_ns cpu_usage_percentage = 0 try: cpu_usage_percentage = 100.0 * cpuacct_usage_diff_in_ns / (max_allowed_cpu_time_in_us * 1000) except ZeroDivisionError: pass # TODO by attendees: Add the percentage to a list time.sleep(1) # TODO by attendees: Calculate the percentile using numpy return None
def collect_cpu(cgroup_name): """ Collect the average CPU utilization over a minute period """ cgroup_stats_dir = os.path.join(CGROUP_DIR, cgroup_name) cpu_stats = helpers.parse_fk(open(os.path.join(cgroup_stats_dir, 'cpu.stat'), 'r').read()) global cpu_stat_nr_throttle_prev global cpu_stat_throttled_time_prev cpu_stat_nr_throttle_curr = cpu_stats['nr_throttled'] cpu_stat_throttled_time_curr = cpu_stats['throttled_time'] # TODO by attendees: Calculate the number of throttles since the last measurement time # TODO by attendees: Calculate the amount of time the cgroup is throttled (in ms) since the last measurement time return cpu_stat_nr_throttle, cpu_stat_throttled_time
def collect_cpu(cgroup_name): """ Collect the average CPU utilization over a minute period """ cgroup_stats_dir = os.path.join(CGROUP_DIR, cgroup_name) cpu_stats = helpers.parse_fk(open(os.path.join(cgroup_stats_dir, 'cpu.stat'), 'r').read()) cpu_usage = helpers.parse_nlsv(open(os.path.join(cgroup_stats_dir, 'cpuacct.usage'), 'r').read()) cpu_quota = helpers.parse_nlsv(open(os.path.join(cgroup_stats_dir, 'cpu.cfs_quota_us'), 'r').read()) cpu_stat_nr_periods_curr = cpu_stats['nr_periods'] cpuacct_usage_curr_in_ns = cpu_usage[0] cpu_cfs_quota_in_us = cpu_quota[0] # TODO by attendee: Calculate the CPU utilization. Use the algorithm in the exercise document global cpu_stat_nr_periods_prev global cpuacct_usage_prev_in_ns cpu_stat_nr_periods_prev = cpu_stat_nr_periods_curr cpuacct_usage_prev_in_ns = cpuacct_usage_curr_in_ns cpu_usage_percentage = 0