]> rtime.felk.cvut.cz Git - jailhouse.git/blobdiff - inmates/demos/x86/Membench.c
jailhouse: inmates: bench: Add -R option -- repeats count.
[jailhouse.git] / inmates / demos / x86 / Membench.c
index 4366a303a0487e7f573939f5a0ea92c79a95fa58..43cc9619ee5b48b93a8948f74026af42f4997b9f 100644 (file)
@@ -159,6 +159,7 @@ struct cfg {
        bool write;\r
        unsigned ofs;\r
        bool use_cycles; /* instead of ns */\r
+       unsigned repeats;\r
 };\r
 \r
 struct s {\r
@@ -430,6 +431,8 @@ static void run_benchmark(struct cfg *cfg)
 }\r
 \r
 #ifdef JAILHOUSE\r
+const void * image_end;\r
+\r
 void inmate_main(void)\r
 #else //Linux\r
 int main(int argc, char *argv[])\r
@@ -443,6 +446,7 @@ int main(int argc, char *argv[])
                .write = false,\r
                .ofs = 0,\r
                .use_cycles = false, // i.e. use nanoseconds /\r
+               .repeats = 1\r
        };\r
 #ifdef JAILHOUSE\r
        //initialize UART\r
@@ -457,8 +461,10 @@ int main(int argc, char *argv[])
 \r
        printk("cmdline opts: '%s'\n", cmdline);\r
        comm_region->pm_timer_address = 0x408;\r
+\r
        //parse cmdline\r
        cfg.read_count = cmdline_parse_int("-c", cfg.read_count);\r
+       cfg.repeats = cmdline_parse_int("-R", cfg.repeats);\r
        cfg.ofs = cmdline_parse_int("-o", cfg.ofs);\r
        cfg.sequential = !cmdline_parse_bool("-r");\r
        cfg.size = cmdline_parse_int("-s", cfg.size);\r
@@ -476,8 +482,8 @@ int main(int argc, char *argv[])
               tsc_freq % 1000);\r
 \r
        u8 * start_memreg = (u8 *) array;\r
-\r
-       while ( ((u64) start_memreg )< 0x4000000) {\r
+       u64 end_memreg_addr = (u64) &image_end;\r
+       while ( ((u64) start_memreg )< end_memreg_addr) {\r
                //printk("%p\n",start_memreg);\r
                map_range(start_memreg, HUGE_PAGE_SIZE, MAP_CACHED);\r
                start_memreg += HUGE_PAGE_SIZE;\r
@@ -488,7 +494,7 @@ int main(int argc, char *argv[])
        CPU_ZERO(&cfg.cpu_set);\r
 \r
        int opt;\r
-       while ((opt = getopt(argc, argv, "c:C:o:rs:t:wy")) != -1) {\r
+       while ((opt = getopt(argc, argv, "c:C:o:rs:t:wyR:")) != -1) {\r
                switch (opt) {\r
                case 'c':\r
                        cfg.read_count = atol(optarg);\r
@@ -515,6 +521,9 @@ int main(int argc, char *argv[])
                case 'y':\r
                        cfg.use_cycles = true;\r
                        break;\r
+               case 'R':\r
+                       cfg.repeats = atol(optarg);\r
+                       break;\r
                default: // '?' //\r
                        fprintf(stderr, "Usage: %s ... TODO\n", argv[0]);\r
                        exit(1);\r
@@ -532,26 +541,30 @@ int main(int argc, char *argv[])
        if (cfg.use_cycles)\r
                ccntr_init();\r
 \r
-       if (cfg.size != 0) {\r
-               run_benchmark(&cfg);\r
-       } else {\r
-                unsigned order, size, step;\r
-                for (order = 10; order <= 24; order++) {\r
-                       for (step = 0; step < 2; step++) {\r
-                               size = 1 << order;\r
-                               if (step == 1)\r
-                                       size += size / 2;\r
-\r
-                               cfg.size = size;\r
-                               run_benchmark(&cfg);\r
+       for (;cfg.repeats > 0; cfg.repeats--) {\r
+               if (cfg.size != 0) {\r
+                       run_benchmark(&cfg);\r
+               } else {\r
+                        unsigned order, size, step;\r
+                        for (order = 10; order <= 24; order++) {\r
+                               for (step = 0; step < 2; step++) {\r
+                                       size = 1 << order;\r
+                                       if (step == 1)\r
+                                               size += size / 2;\r
+\r
+                                       cfg.size = size;\r
+                                       run_benchmark(&cfg);\r
+                               }\r
                        }\r
+                       cfg.size = 0;\r
                }\r
        }\r
 \r
+\r
 #ifndef JAILHOUSE\r
        return 0;\r
 #else\r
        comm_region->cell_state = JAILHOUSE_CELL_SHUT_DOWN;\r
-       printk("done!");\r
+       printk("done!\n");\r
 #endif\r
 }\r