Merged the timing and measurement stuff together and cleaned it up a bit
[akaros.git] / user / null.c
1 // null app
2 #include <inc/lib.h>
3 #include <inc/types.h>
4 #include <inc/syscall.h>
5 #include <inc/x86.h>
6 #include <inc/measure.h>
7 #include <inc/null.h>
8 #include <inc/timer.h>
9
10 #ifdef __DEPUTY__
11 #pragma nodeputy
12 #endif
13
14 #define NUM_ITERATIONS  100000
15 uint64_t times[NUM_ITERATIONS];
16
17 uint64_t total(uint64_t (COUNT(length) array)[], int length)
18 {
19         uint64_t sum = 0;
20         for(int i=0; i<length; i++) {
21                 sum+=array[i];
22         }
23         return sum;
24         //return (length > 0) ? sum/((uint64_t)length) : 0;
25 }
26
27 void umain(void)
28 {
29         TAGGED_TIMING_BEGIN(tst);
30         async_desc_t *desc1, *desc2;
31         async_rsp_t rsp1, rsp2;
32         cache_buster_async(&desc1, 20, 0xdeadbeef);
33         cache_buster_async(&desc2, 10, 0xcafebabe);
34         waiton_async_call(desc1, &rsp1);
35         waiton_async_call(desc2, &rsp2);
36         //measure_function(sys_null(), NUM_ITERATIONS, "sys_null");
37         //measure_function(asm volatile("nop;"), NUM_ITERATIONS, "nop");
38         //measure_function(cprintf("Reg Sync call  \n"), 10, "printf");
39         //measure_function_async(cprintf_async(&desc, "Cross-Core call\n"), desc, 10,\
40         //                       1, "Async Printf");
41         // Note this won't actually do 100 inner runs (first parameter).  will stop
42         // making calls beyond the ring size and won't wait on any extra calls.
43         measure_async_call(null_async(&desc), desc, 100, 100, "Async Null");
44         
45     TAGGED_TIMING_END(tst);
46         // Spin to make sure we don't have any resources deallocated before done
47         while(1);
48 }