bool write;\r
unsigned ofs;\r
bool use_cycles; /* instead of ns */\r
+ unsigned repeats;\r
};\r
\r
struct s {\r
.write = false,\r
.ofs = 0,\r
.use_cycles = false, // i.e. use nanoseconds /\r
+ .repeats = 1\r
};\r
#ifdef JAILHOUSE\r
//initialize UART\r
\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
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
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
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