uint64_t current_us, end_us;
clock_gettime(CLOCK_MONOTONIC, &ts);
end_us = ts.tv_sec * 1000000 + ts.tv_nsec / 1000 + time_ms * 1000;
- do{
- clock_gettime(CLOCK_MONOTONIC, &ts);
- current_us = ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
- }while(current_us < end_us);
+ do {
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+ current_us = ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
+ } while (current_us < end_us);
}
long memory_kernel(long lines){
void random_memory_kernel(long lines) {
uint32_t index;
-
+
for(long i=0; i<lines; i++) {
index = (uint32_t)rand();
index = index % RANDOM_ARRAY_SIZE;
}
}
-long prem_memguard_check(unsigned long phase,
+/* Memguard flags */
+#define MGF_PERIODIC (1 << 0) /* Chooses between periodic or one-shot budget replenishment */
+#define MGF_RET_STATS (1 << 1) /* Return statistics since the last call (cache misses, time, ...?) */
+#define MGF_MASK_INT (1 << 2) /* Mask (disable) low priority interrupts until next memguard call */
+
+long prem_memguard_check(unsigned long timeout,
unsigned long memory_budget,
- unsigned long timeout)
+ unsigned long flags)
{
- return syscall(SYS_prem_memguard_check, phase, memory_budget, timeout);
+ return syscall(SYS_prem_memguard_check, timeout, memory_budget, flags);
}
int main(int argc, char *argv[])
{
cpu_set_t set;
- int cpu = 0;
+ int cpu = 0;
- if (argc > 1)
- cpu = atoi(argv[1]);
+ if (argc > 1)
+ cpu = atoi(argv[1]);
- /* Ensure that memory phase starts and ends on the same CPU */
- CPU_ZERO(&set);
- CPU_SET(cpu, &set);
- if (sched_setaffinity(getpid(), sizeof(set), &set) < 0)
- err(1, "sched_setaffinity");
- printf("Pinned to CPU %d\n", cpu);
+ /* Ensure that memory phase starts and ends on the same CPU */
+ CPU_ZERO(&set);
+ CPU_SET(cpu, &set);
+ if (sched_setaffinity(getpid(), sizeof(set), &set) < 0)
+ err(1, "sched_setaffinity");
+ printf("Pinned to CPU %d\n", cpu);
printf("X1\n");
fflush(stdout);
- //prem_memguard_check(950000, 1933440000, 1);
- prem_memguard_check(950000, 1933440000, 1);
+ //prem_memguard_check(950000, 1933440000, 1);
+ prem_memguard_check(100000, 1000, MGF_PERIODIC);
compute_kernel(1000);
- prem_memguard_check(0, 0, 1);
-
+ //prem_memguard_check(0, 0, 1);
+
printf("X2\n");
fflush(stdout);
//prem_memguard_check(1050000, 2136960000, 1);
- prem_memguard_check(1050000, 2136960000, 1);
+ prem_memguard_check(1050000, 2136960000, 0);
compute_kernel(1000);
- prem_memguard_check(0, 0, 1);
-
+ //prem_memguard_check(0, 0, 1);
+
printf("X3\n");
fflush(stdout);
//prem_memguard_check(1000000, 500, 1);
- prem_memguard_check(1000000, 5000000, 1);
+ prem_memguard_check(100000, 500, MGF_PERIODIC);
memory_kernel(100000000);
- prem_memguard_check(0, 0, 1);
-
+ //prem_memguard_check(0, 0, 1);
+
printf("X4\n");
fflush(stdout);
//prem_memguard_check(1000000, 1500, 1);
- prem_memguard_check(1000000, 15000000, 1);
+ prem_memguard_check(1000000, 15000000, 0);
memory_kernel(100000000);
- prem_memguard_check(0, 0, 1);
-
+ //prem_memguard_check(0, 0, 1);
+
printf("X5\n");
fflush(stdout);
//prem_memguard_check(1000000, 10000, 1);
- prem_memguard_check(1000000, 100000, 1);
+ prem_memguard_check(1000000, 100000, 0);
random_memory_kernel(100000000);
- prem_memguard_check(0, 0, 1);
-
+ //prem_memguard_check(0, 0, 1);
+
printf("X6\n");
fflush(stdout);
//prem_memguard_check(1000000, 10000000, 1);
- prem_memguard_check(1000000, 100000000, 1);
+ prem_memguard_check(1000000, 100000000, 0);
random_memory_kernel(100000000);
- prem_memguard_check(0, 0, 1);
- return 0;
+ prem_memguard_check(0, 0, 0);
+
+ return 0;
}