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
No related branches found
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