void enumerate_cpus(void) { ifstream file; char line[1024]; int number = -1; char vendor[128]; int family = 0; int model = 0; file.open("/proc/cpuinfo", ios::in); if (!file) return; /* Not all /proc/cpuinfo include "vendor_id\t". */ vendor[0] = '\0'; while (file) { file.getline(line, sizeof(line)); if (strncmp(line, "vendor_id\t",10) == 0) { char *c; c = strchr(line, ':'); if (c) { c++; if (*c == ' ') c++; strncpy(vendor,c, 127); } } if (strncmp(line, "processor\t",10) == 0) { char *c; c = strchr(line, ':'); if (c) { c++; number = strtoull(c, NULL, 10); } } if (strncmp(line, "cpu family\t",11) == 0) { char *c; c = strchr(line, ':'); if (c) { c++; family = strtoull(c, NULL, 10); } } if (strncmp(line, "model\t",6) == 0) { char *c; c = strchr(line, ':'); if (c) { c++; model = strtoull(c, NULL, 10); } } if (strncasecmp(line, "bogomips\t", 9) == 0) { if (number == -1) { /* Not all /proc/cpuinfo include "processor\t". */ number = 0; } if (number >= 0) { handle_one_cpu(number, vendor, family, model); set_max_cpu(number); number = -2; } } } file.close(); if (access("/sys/class/drm/card0/power/rc6_residency_ms", R_OK) == 0) handle_i965_gpu(); perf_events = new perf_power_bundle(); if (!perf_events->add_event("power:cpu_idle")){ perf_events->add_event("power:power_start"); perf_events->add_event("power:power_end"); } if (!perf_events->add_event("power:cpu_frequency")) perf_events->add_event("power:power_frequency"); }
void enumerate_cpus(void) { ifstream file; char line[1024]; int number = -1; char vendor[128]; int family = 0; int model = 0; file.open("/proc/cpuinfo", ios::in); if (!file) return; while (file) { file.getline(line, sizeof(line)); if (strncmp(line, "vendor_id\t",10) == 0) { char *c; c = strchr(line, ':'); if (c) { c++; if (*c == ' ') c++; strncpy(vendor,c, 127); } } if (strncmp(line, "processor\t",10) == 0) { char *c; c = strchr(line, ':'); if (c) { c++; number = strtoull(c, NULL, 10); } } if (strncmp(line, "cpu family\t",11) == 0) { char *c; c = strchr(line, ':'); if (c) { c++; family = strtoull(c, NULL, 10); } } if (strncmp(line, "model\t",6) == 0) { char *c; c = strchr(line, ':'); if (c) { c++; model = strtoull(c, NULL, 10); } } if (strncasecmp(line, "bogomips\t", 9) == 0) { handle_one_cpu(number, vendor, family, model); set_max_cpu(number); } } file.close(); perf_events = new perf_power_bundle(); perf_events->add_event("power:power_frequency"); perf_events->add_event("power:power_start"); perf_events->add_event("power:power_end"); }