]> rtime.felk.cvut.cz Git - hercules2020/jailhouse-build.git/commitdiff
Update memguard-test
authorMichal Sojka <michal.sojka@cvut.cz>
Tue, 30 Oct 2018 16:17:18 +0000 (17:17 +0100)
committerMichal Sojka <michal.sojka@cvut.cz>
Tue, 30 Oct 2018 16:17:18 +0000 (17:17 +0100)
jailhouse
test/memguard-test.c

index 3b9d2d21ad7a33a2c074ff9f022646016c9d7cb5..ed386072a14157984f59fac37aa0a2682799241a 160000 (submodule)
--- a/jailhouse
+++ b/jailhouse
@@ -1 +1 @@
-Subproject commit 3b9d2d21ad7a33a2c074ff9f022646016c9d7cb5
+Subproject commit ed386072a14157984f59fac37aa0a2682799241a
index 53cc8447a29bf10ccb6b4cad2cd8a8b682788b04..535aa44e1b4e7ca80287869e11677936cc1f910f 100644 (file)
@@ -9,6 +9,7 @@
 #include <unistd.h>
 #include <time.h>
 #include <inttypes.h>
+#include <sys/mman.h>
 
 #ifndef SYS_prem_memguard_check
 #define SYS_prem_memguard_check 793
  * 61    - Memory budget overrun
  * 62    - Timeout
  * 63    - Error */
-#define RET_TIM_POS                    0
-#define RET_MEM_POS                    32
-#define RET_OVER_MEM_POS       61
-#define RET_OVER_TIM_POS       62
+#define MGRET_TIM_POS                  0
+#define MGRET_MEM_POS                  32
+#define MGRET_OVER_MEM_POS     61
+#define MGRET_OVER_TIM_POS     62
 
-#define RET_TIM_MASK           0xFFFFFFFFlu
-#define RET_MEM_MASK           0xFFFFFFlu
-#define RET_OVER_MEM_MASK      0x1lu
-#define RET_OVER_TIM_MASK      0x1lu
+#define MGRET_TIM_MASK         0xFFFFFFFFlu
+#define MGRET_MEM_MASK         0xFFFFFFlu
+#define MGRET_OVER_MEM_MASK    0x1lu
+#define MGRET_OVER_TIM_MASK    0x1lu
 
 #define RANDOM_ARRAY_SIZE 16777216 // 16M * 8 = 128 MB array
 
 uint64_t random_values[RANDOM_ARRAY_SIZE];
-volatile uint64_t sum;
-
 
 
 enum prem_phase {
@@ -55,8 +54,8 @@ struct test_case{
 
 
 static inline void decode_retval(uint64_t retval, uint64_t * timval, uint64_t * cntval){
-       *timval = (retval >> RET_TIM_POS) & RET_TIM_MASK;
-       *cntval = (retval >> RET_MEM_POS) & RET_MEM_MASK;
+       *timval = (retval >> MGRET_TIM_POS) & MGRET_TIM_MASK;
+       *cntval = (retval >> MGRET_MEM_POS) & MGRET_MEM_MASK;
 }
 
 void compute_kernel(int time_ms){
@@ -71,6 +70,8 @@ void compute_kernel(int time_ms){
 }
 
 long memory_kernel(long lines){
+   uint64_t sum = 0;
+
     for(int i = 0; i < lines; i++){
         sum += random_values[(i*8) % RANDOM_ARRAY_SIZE];
     }
@@ -79,6 +80,7 @@ long memory_kernel(long lines){
 
 void random_memory_kernel(long lines) {
     uint32_t index;
+    uint64_t sum = 0;
 
     for(long i=0; i<lines; i++) {
         index = (uint32_t)rand();
@@ -89,8 +91,7 @@ void random_memory_kernel(long lines) {
 
 /* 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 */
+#define MGF_MASK_INT  (1 << 1) /* Mask (disable) low priority interrupts until next memguard call */
 
 long prem_memguard_check(unsigned long timeout,
                    unsigned long memory_budget,
@@ -99,12 +100,28 @@ long prem_memguard_check(unsigned long timeout,
     return syscall(SYS_prem_memguard_check, timeout, memory_budget, flags);
 }
 
+#define MGTEST(timeout_us, mem_budget, flags, code)                    \
+    do {                                                               \
+       long retval = prem_memguard_check(timeout_us, mem_budget, flags); \
+       code;                                                           \
+       retval = prem_memguard_check(0, 0, 0);                          \
+       printf("%-31s flags:%d m_ovr:%ld t_ovr:%ld mem:%d->%ld time:%d->%ld\n", \
+              #code, flags,                                            \
+              (retval >> MGRET_OVER_MEM_POS) & 1,                      \
+              (retval >> MGRET_OVER_TIM_POS) & 1,                      \
+              mem_budget, (retval >> MGRET_MEM_POS) & MGRET_MEM_MASK,  \
+              timeout_us, (retval >> MGRET_TIM_POS) & MGRET_TIM_MASK); \
+    } while (0)
+
 int main(int argc, char *argv[])
 {
     cpu_set_t set;
     int cpu = 0;
-    long retval;
-    uint64_t timval, cntval;
+
+    char bla[1];
+
+    for (int i = 0; i < RANDOM_ARRAY_SIZE; i++)
+       random_values[i] = i;
 
     if (argc > 1)
        cpu = atoi(argv[1]);
@@ -116,64 +133,17 @@ int main(int argc, char *argv[])
        err(1, "sched_setaffinity");
     printf("Pinned to CPU %d\n", cpu);
 
-    printf("X1\n");
-    fflush(stdout);
-    //prem_memguard_check(950000, 1933440000, 1);
-    retval = prem_memguard_check(100000, 1000, MGF_PERIODIC | MGF_MASK_INT);
-    compute_kernel(1000);
-    //prem_memguard_check(0, 0, 1);
-
-       /* First result does not make sense */
-    decode_retval(retval, &timval, &cntval);
-       printf("tim: %lu cnt: %lu\n", timval, cntval);
-       
-    printf("X2\n");
-    fflush(stdout);
-    //prem_memguard_check(1050000, 2136960000, 1);
-    retval = prem_memguard_check(1050000, 2136960000, 0);
-    compute_kernel(1000);
-    //prem_memguard_check(0, 0, 1);
-    
-    decode_retval(retval, &timval, &cntval);
-       printf("tim: %lu cnt: %lu\n", timval, cntval);
-
-    printf("X3\n");
-    fflush(stdout);
-    //prem_memguard_check(1000000, 500, 1);
-    retval = prem_memguard_check(100000, 500, MGF_PERIODIC);
-    memory_kernel(100000000);
-    //prem_memguard_check(0, 0, 1);
-    
-    decode_retval(retval, &timval, &cntval);
-       printf("tim: %lu cnt: %lu\n", timval, cntval);
-
-    printf("X4\n");
-    fflush(stdout);
-    //prem_memguard_check(1000000, 1500, 1);
-    retval = prem_memguard_check(1000000, 15000000, 0);
-    memory_kernel(100000000);
-    //prem_memguard_check(0, 0, 1);
-    
-    decode_retval(retval, &timval, &cntval);
-       printf("tim: %lu cnt: %lu\n", timval, cntval);
-
-    printf("X5\n");
-    fflush(stdout);
-    //prem_memguard_check(1000000, 10000, 1);
-    retval = prem_memguard_check(1000000, 100000, 0);
-    random_memory_kernel(100000000);
-    //prem_memguard_check(0, 0, 1);
-    
-    decode_retval(retval, &timval, &cntval);
-       printf("tim: %lu cnt: %lu\n", timval, cntval);
-
-    printf("X6\n");
-    fflush(stdout);
-    //prem_memguard_check(1000000, 10000000, 1);
-    retval = prem_memguard_check(1000000, 100000000, 0);
-    random_memory_kernel(100000000);
-
-    prem_memguard_check(0, 0, 0);
+    volatile long x;
+    MGTEST(100000, 1000, MGF_PERIODIC | MGF_MASK_INT, compute_kernel(1000));
+    MGTEST(1050000, 2136960000, 0,                   compute_kernel(1000));
+    MGTEST(100000, 500, MGF_PERIODIC, memory_kernel(100000000));
+
+    for (int i = 1; i <= 10; i++)
+       MGTEST(1000000, 500, 0, x=memory_kernel(1000000));
+
+    MGTEST(1000000, 500, 0, x=memory_kernel(100000000));
+    MGTEST(1000000, 100000, 0,                               random_memory_kernel(100000000));
+    MGTEST(1000000, 100000000, 0,                    random_memory_kernel(100000000));
 
     return 0;
 }