Пример #1
0
int
cpu_times_percent(CpuTimes *ret) {
  static CpuTimes last_cpu_times;

  CpuTimes t1 = last_cpu_times;
  int r = cpu_times(&last_cpu_times);

  if(r < 0) {
    log_warn("Couldnt fetch cpu_times");
    return -1;
  }

  double all_delta = sum_cpu_time(&last_cpu_times) - sum_cpu_time(&t1);

  ret->user = f_diff_percent(last_cpu_times.user, t1.user, all_delta);
  ret->system = f_diff_percent(last_cpu_times.system, t1.system, all_delta);
  ret->idle = f_diff_percent(last_cpu_times.idle, t1.idle, all_delta);
  ret->nice = f_diff_percent(last_cpu_times.nice, t1.nice, all_delta);
  ret->iowait = f_diff_percent(last_cpu_times.iowait, t1.iowait, all_delta);
  ret->irq = f_diff_percent(last_cpu_times.irq, t1.irq, all_delta);
  ret->softirq = f_diff_percent(last_cpu_times.softirq, t1.softirq, all_delta);
  ret->steal = f_diff_percent(last_cpu_times.steal, t1.steal, all_delta);
  ret->guest = f_diff_percent(last_cpu_times.guest, t1.guest, all_delta);
  ret->guest_nice = f_diff_percent(last_cpu_times.guest_nice, t1.guest_nice, all_delta);

  return 0;
}
Пример #2
0
static double
calc_cpu_busy_diff(CpuTimes *t1, CpuTimes *t2) {
  double t1_all = sum_cpu_time(t1);
  double t1_busy = t1_all - t1->idle;

  double t2_all = sum_cpu_time(t2);
  double t2_busy = t2_all - t2->idle;

  if(t2_busy <= t1_busy)
    return 0.0;

  double busy_delta = t2_busy - t1_busy;
  double all_delta = t2_all - t1_all;
  double busy_perc = (busy_delta / all_delta) * 100;
  return busy_perc;
}
Пример #3
0
static double calculate_cpu_util_percentage(CpuTimes *t1, CpuTimes *t2) {
  double t1_all = sum_cpu_time(t1);
  double t2_all = sum_cpu_time(t2);
  double t1_busy = t1_all - t1->idle;
  double t2_busy = t2_all - t2->idle;
  double busy_delta, all_delta, busy_percentage;

  /* This exists in psutils. We'll put it in if we actually find it */
  /* if (t2_busy < t1_busy)  */
  /*   return 0.0; /\* Indicates a precision problem *\/ */

  busy_delta = t2_busy - t1_busy;
  all_delta = t2_all - t1_all;
  busy_percentage = (busy_delta / all_delta) * 100;
  return busy_percentage;
}
Пример #4
0
int
cpu_times_percent_per_cpu(CpuTimes **ret) {
  static int last_cpu_count;
  static CpuTimes* last_cpu_times;

  CpuTimes *t1 = last_cpu_times;
  int cpus = cpu_times_per_cpu(&last_cpu_times);
  check(cpus > 0, "Couldn't find a cpu");

  if(t1 == NULL) {
    t1 = calloc(cpus, sizeof(CpuTimes));
    last_cpu_count = cpus;
  }

  *ret = calloc(cpus, sizeof(CpuTimes));
  check_mem(*ret);

  int min_cpus = min(cpus, last_cpu_count);
  int i;
  for(i=0;i < min_cpus; i++) {
    //(*ret)[i] = calc_cpu_busy_diff(t1+i, last_cpu_times+i);
    double all_delta = sum_cpu_time(last_cpu_times+i) - sum_cpu_time(t1+i);

    (*ret+i)->user = f_diff_percent((last_cpu_times+i)->user, (t1+i)->user, all_delta);
    (*ret+i)->system = f_diff_percent((last_cpu_times+i)->system, (t1+i)->system, all_delta);
    (*ret+i)->idle = f_diff_percent((last_cpu_times+i)->idle, (t1+i)->idle, all_delta);
    (*ret+i)->nice = f_diff_percent((last_cpu_times+i)->nice, (t1+i)->nice, all_delta);
    (*ret+i)->iowait = f_diff_percent((last_cpu_times+i)->iowait, (t1+i)->iowait, all_delta);
    (*ret+i)->irq = f_diff_percent((last_cpu_times+i)->irq, (t1+i)->irq, all_delta);
    (*ret+i)->softirq = f_diff_percent((last_cpu_times+i)->softirq, (t1+i)->softirq, all_delta);
    (*ret+i)->steal = f_diff_percent((last_cpu_times+i)->steal, (t1+i)->steal, all_delta);
    (*ret+i)->guest = f_diff_percent((last_cpu_times+i)->guest, (t1+i)->guest, all_delta);
    (*ret+i)->guest_nice = f_diff_percent((last_cpu_times+i)->guest_nice, (t1+i)->guest_nice, all_delta);

  }

  last_cpu_count = cpus;
  free(t1);
  return min_cpus;

error:
  free(t1);
  return -1;

}
Пример #5
0
static CpuTimes *calculate_cpu_times_percentage(CpuTimes *t1, CpuTimes *t2) {
  CpuTimes *ret;
  double all_delta = sum_cpu_time(t2) - sum_cpu_time(t1);
  ret = (CpuTimes *)calloc(1, sizeof(CpuTimes));
  check_mem(ret);

  ret->user = 100 * (t2->user - t1->user) / all_delta;
  ret->system = 100 * (t2->system - t1->system) / all_delta;
  ret->idle = 100 * (t2->idle - t1->idle) / all_delta;
  ret->nice = 100 * (t2->nice - t1->nice) / all_delta;
  ret->iowait = 100 * (t2->iowait - t1->iowait) / all_delta;
  ret->irq = 100 * (t2->irq - t1->irq) / all_delta;
  ret->softirq = 100 * (t2->softirq - t1->softirq) / all_delta;
  ret->steal = 100 * (t2->steal - t1->steal) / all_delta;
  ret->guest = 100 * (t2->guest - t1->guest) / all_delta;
  ret->guest_nice = 100 * (t2->guest_nice - t1->guest_nice) / all_delta;
  return ret;

error:
  free(ret);
  return NULL;
}