diff --git a/load.c b/load.c index 7a90f3ca68fa4017839d0e36a7cf371979b0fdce..06b984953980721023c4431089c3b23e264256b0 100644 --- a/load.c +++ b/load.c @@ -17,16 +17,21 @@ along with MojitO/S. If not, see <https://www.gnu.org/licenses/>. *******************************************************/ -#include <stdio.h> +#include <unistd.h> +#include <fcntl.h> #include <stdlib.h> #define LOAD_BUFFER_SIZE 1024 char buffer[LOAD_BUFFER_SIZE]; +static int load_fid=-1; + +void init_load() { + load_fid = open("/proc/stat", O_RDONLY); +} + void get_load(long long* results) { - FILE* f = fopen("/proc/stat", "rb"); - fgets(buffer, LOAD_BUFFER_SIZE, f); - fclose(f); + pread(load_fid, buffer, LOAD_BUFFER_SIZE-1, 0); int pos=0; while(buffer[pos] > '9' || buffer[pos] < '0') pos++; for(int i=0; i<10; i++) { @@ -35,3 +40,8 @@ void get_load(long long* results) { pos++; } } + +void clean_load() { + close(load_fid); +} + diff --git a/load.h b/load.h index 649f47573604cb202b403dd475222021bd90e5f4..1d344cfff91290610429dd43d4f02920eb876fda 100644 --- a/load.h +++ b/load.h @@ -18,4 +18,6 @@ *******************************************************/ +void init_load(); void get_load(long long* results); +void clean_load(); diff --git a/mojitos.c b/mojitos.c index dd8900c10d44729ba286c2824d7f50668104dec2..9d179a5bea04d123f97b1374cadf68e24cb1e09f 100644 --- a/mojitos.c +++ b/mojitos.c @@ -207,8 +207,10 @@ int main(int argc, char **argv) { // Load initialization long long load_values[10]={0,0,0,0,0,0,0,0,0,0}; long long tmp_load_values[10]={0,0,0,0,0,0,0,0,0,0}; - if(load_mode == 0) + if(load_mode == 0) { + init_load(); get_load(load_values); + } // RAPL initialization _rapl_t* rapl=NULL; @@ -353,6 +355,8 @@ int main(int argc, char **argv) { free(rapl_values); free(tmp_rapl_values); } + if(load_mode == 0) + clean_load(); if(dev!=NULL) clean_network(network_sources); if(infi_path!=NULL)