#include "be.hh" #include "options.hh" #include "llc.hh" #include #include #include #include bool is_frozen; FILE* f = NULL; void init_BE_core() { const char* state_file = "/sys/fs/cgroup/freezer/0/freezer.state"; f = fopen(state_file, "w"); if (f) { system("echo THAWED > /sys/fs/cgroup/freezer/0/freezer.state"); is_frozen = false; } else { std::cerr << "Couldn't open file: " << state_file << std::endl << "(Did you init the cgroup freezer system?)" << std::endl; exit(EXIT_FAILURE); } } void unfreeze_BE_core() { if (is_frozen) { if (debug) { std::cout << "BE core THAWED." << std::endl; } system("echo THAWED > /sys/fs/cgroup/freezer/0/freezer.state"); is_frozen = false; } } void freeze_BE_core(int fd) { if (!is_frozen) { if (debug) { std::cout << "BE core FROZEN!" << std::endl; } if (test_cgroup_overhead) { system("echo FROZEN > /sys/fs/cgroup/freezer/0/freezer.state"); long long count_at_freeze = query_BE_monitor(fd); std::cout << "Froze at " << count_at_freeze << " misses." << std::endl; std::cout << "Sleeping for 10 seconds..." << std::endl; sleep(10); long long count_at_awake = query_BE_monitor(fd); long long slipped_accesses = count_at_awake - count_at_freeze; std::cout << "Slipped accesses: " << slipped_accesses << std::endl; } else { system("echo FROZEN > /sys/fs/cgroup/freezer/0/freezer.state"); } is_frozen = true; } } void close_BE_core() { fclose(f); }