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
Esempio n. 3
0
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