aura  0.1
 All Data Structures Functions Variables Modules Pages
dummy-benchmark.c
1 #include <aura/aura.h>
2 
3 #include <inttypes.h>
4 #include <math.h>
5 #include <stdio.h>
6 #include <time.h>
7 
8 #define TRANSPORT "dummy"
9 
10 long current_time(void)
11 {
12  long ms; // Milliseconds
13  time_t s; // Seconds
14  struct timespec spec;
15 
16  clock_gettime(CLOCK_REALTIME, &spec);
17 
18  s = spec.tv_sec;
19  ms = s * 1000 + round(spec.tv_nsec / 1.0e6); // Convert nanoseconds to milliseconds
20 
21  //return (long) clock();
22  return ms;
23 }
24 //Shut up unhandled warning
25 void unhandled_cb(struct aura_node *dev,
26  struct aura_buffer *retbuf,
27  void *arg)
28 {
29 
30 }
31 
32 
33 long run_first(struct aura_node *n)
34 {
35  struct aura_buffer *retbuf;
36  int i;
37  long start = current_time();
38  for (i=0; i<90000; i++) {
39  aura_call(n, "echo_u16", &retbuf, 0x0102);
40  aura_buffer_release(retbuf);
41  aura_call(n, "echo_u8", &retbuf, 0x0102);
42  aura_buffer_release(retbuf);
43  aura_call(n, "echo_u32", &retbuf, 0x0102);
44  aura_buffer_release(retbuf);
45  aura_call(n, "echo_u64", &retbuf, 0x0102);
46  aura_buffer_release(retbuf);
47  }
48  return current_time() - start;
49 
50 }
51 
52 long run_second(struct aura_node *n)
53 {
54  struct aura_buffer *buf;
55  long start = current_time();
56  int i;
57  for (i=0; i<90000; i++) {
58  buf = aura_buffer_request(n, (rand() % 512) + 1);
60  }
61  return current_time() - start;
62 }
63 
64 void average_aggregate(struct aura_node *n, long (*test)(struct aura_node *n), int runs, char *lbl)
65 {
66  long v = 0;
67  int i;
68  for (i=0; i<runs; i++)
69  v+=test(n);
70  v/=runs;
71  printf("%lu \t ms avg of %d runs (%s)\n", v, runs, lbl);
72 }
73 
74 int main() {
75  slog_init(NULL, 0);
76  int num_runs = 5;
77 #ifdef AURA_USE_BUFFER_POOL
78  printf("Buffer pool enabled!");
79 #else
80  printf("Buffer pool disabled!");
81 #endif
82 
83  struct aura_node *n = aura_open(TRANSPORT, NULL);
84  printf("+GC -PREHEAT\n");
85  aura_unhandled_evt_cb(n, unhandled_cb, (void *) 0);
86  average_aggregate(n, run_first, num_runs, "call test");
87 // average_aggregate(n, run_second, num_runs, "alloc/dealloc test");
88  aura_close(n);
89 
90  n = aura_open(TRANSPORT, NULL);
91 
92  printf("+GC +PREHEAT\n");
93  aura_unhandled_evt_cb(n, unhandled_cb, (void *) 0);
94  aura_bufferpool_preheat(n, 512, 10);
95  average_aggregate(n, run_first, num_runs, "call test");
96 // average_aggregate(n, run_second, num_runs, "alloc/dealloc test");
97  aura_close(n);
98 
99  n = aura_open(TRANSPORT, NULL);
100 
101  printf("-GC -PREHEAT\n");
102  aura_unhandled_evt_cb(n, unhandled_cb, (void *) 0);
103  n->gc_threshold = -1;
104  average_aggregate(n, run_first, num_runs, "call test");
105 // average_aggregate(n, run_second, num_runs, "alloc/dealloc test");
106  aura_close(n);
107 
108  return 0;
109 }
110 
111 
struct aura_buffer * aura_buffer_request(struct aura_node *nd, int size)
Definition: buffer.c:40
void aura_bufferpool_preheat(struct aura_node *nd, int size, int count)
Definition: buffer.c:147
int aura_call(struct aura_node *node, const char *name, struct aura_buffer **retbuf,...)
Definition: aura.c:666
struct aura_node * aura_open(const char *name, const char *opts)
Definition: aura.c:34
void aura_unhandled_evt_cb(struct aura_node *node, void(*cb)(struct aura_node *node, struct aura_buffer *buf, void *arg), void *arg)
Definition: aura.c:314
void aura_buffer_release(struct aura_buffer *buf)
Definition: buffer.c:80
void aura_close(struct aura_node *node)
Definition: aura.c:102