Skip to content
Snippets Groups Projects
Commit 64dd7f88 authored by Georges Da Costa's avatar Georges Da Costa
Browse files

refactors Intel Rapl

parent c348a8df
Branches
No related tags found
1 merge request!11Intel rapl
......@@ -60,21 +60,25 @@ struct IntelRapl {
int *fids;
uint64_t *values;
uint64_t *tmp_values;
uint64_t *modulo;
};
typedef struct IntelRapl IntelRapl;
void add_rapl_source(IntelRapl *rapl, char *name, char *energy_uj)
void add_rapl_source(IntelRapl *rapl, char *name, uint64_t modulo, char *energy_uj)
{
rapl->nb += 1;
rapl->names = realloc(rapl->names, sizeof(char **)*rapl->nb);
rapl->fids = realloc(rapl->fids, sizeof(int *)*rapl->nb);
rapl->modulo = realloc(rapl->modulo, sizeof(uint64_t)*rapl->nb);
rapl->names[rapl->nb - 1] = malloc(strlen(name) + 1);
strcpy(rapl->names[rapl->nb - 1], name);
//printf("%s\n", energy_uj);
rapl->modulo[rapl->nb - 1] = modulo;
int fd = open(energy_uj, O_RDONLY);
if (fd < 0) {
......@@ -102,6 +106,28 @@ void _get_rapl(uint64_t *values, IntelRapl *rapl)
}
}
int add_rapl_source_from_str(IntelRapl *rapl, const char*name_base, const int i) {
char buffer[BUFFER_SIZE];
snprintf(buffer, BUFFER_SIZE, name_base, i);
strcat(buffer, "name");
char *tmp = get_rapl_string(buffer);
if (tmp == NULL)
return 0;
append(tmp, i, MAX_HEADER); // tmp contains the name with its index. ex: dram0
snprintf(buffer, BUFFER_SIZE, name_base, i);
strcat(buffer, "name");
uint64_t modulo = strtoull(get_rapl_string(buffer), NULL, 10);
snprintf(buffer, BUFFER_SIZE, name_base, i);
strcat(buffer, "energy_uj");
add_rapl_source(rapl, tmp, modulo, buffer);
free(tmp);
return 1;
}
unsigned int init_rapl(char *none, void **ptr)
{
......@@ -110,38 +136,25 @@ unsigned int init_rapl(char *none, void **ptr)
rapl->nb = 0;
rapl->names = NULL;
rapl->fids = NULL;
rapl->modulo = NULL;
char buffer[BUFFER_SIZE];
char *name_base = "/sys/devices/virtual/powercap/intel-rapl/intel-rapl:%d/%s";
char *name_sub = "/sys/devices/virtual/powercap/intel-rapl/intel-rapl:%d/intel-rapl:%d:%d/%s";
char *name_base = "/sys/devices/virtual/powercap/intel-rapl/intel-rapl:%d/";
char *name_sub = "/sys/devices/virtual/powercap/intel-rapl/intel-rapl:%d/intel-rapl:%d:%s/";
for (unsigned int i = 0;; i++) {
snprintf(buffer, BUFFER_SIZE, name_base, i, "name");
char *tmp = get_rapl_string(buffer);
if (tmp == NULL) {
break;
}
append(tmp, i, MAX_HEADER);
snprintf(buffer, BUFFER_SIZE, name_base, i, "energy_uj");
add_rapl_source(rapl, tmp, buffer);
free(tmp);
for (unsigned int j = 0;; j++) {
snprintf(buffer, BUFFER_SIZE, name_sub, i, i, j, "name");
char *tmp_sub = get_rapl_string(buffer);
if(!add_rapl_source_from_str(rapl, name_base, i))
break;
if (tmp_sub == NULL) {
break;
}
for (unsigned int j = 0;; j++) {
snprintf(buffer, BUFFER_SIZE, name_sub, i, i, "%d");
append(tmp_sub, i, MAX_HEADER);
snprintf(buffer, BUFFER_SIZE, name_sub, i, i, j, "energy_uj");
add_rapl_source(rapl, tmp_sub, buffer);
if(!add_rapl_source_from_str(rapl, buffer, j))
break;
free(tmp_sub);
}
}
}
rapl->values = calloc(sizeof(uint64_t), rapl->nb);
......@@ -159,6 +172,13 @@ unsigned int get_rapl(uint64_t *results, void *ptr)
IntelRapl *state = (IntelRapl *) ptr;
_get_rapl(state->tmp_values, state);
fprintf(stderr, "RAPL\t");
for (unsigned int i = 0; i < state->nb; i++) {
fprintf(stderr, "%" PRIu64 "\t", state->values[i]);
}
fprintf(stderr, "\n");
for (unsigned int i = 0; i < state->nb; i++) {
results[i] = modulo_substraction(state->tmp_values[i], state->values[i]);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment