aura  0.1
 All Data Structures Functions Variables Modules Pages
transport-bench.c
1 #include <aura/aura.h>
2 #include <aura/private.h>
3 
4 static char *randstring(size_t length) {
5 
6  static char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.-#'?!";
7  char *randomString = NULL;
8 
9  if (length) {
10  randomString = malloc(sizeof(char) * (length +1));
11 
12  if (randomString) {
13  int n ;
14  for (n = 0;n < length;n++) {
15  int key = rand() % (int)(sizeof(charset) -1);
16  randomString[n] = charset[key];
17  }
18 
19  randomString[length] = '\0';
20  }
21  }
22 
23  return randomString;
24 }
25 
26 static int num_methods = 8192;
27 static int dummy_open(struct aura_node *node, const char *opts)
28 {
29  num_methods = atoi(opts);
30  if (!num_methods)
31  BUG(node, "Bad opts for bench transort");
32  slog(1, SLOG_INFO, "Opening lookup-bench transport, %d methods", num_methods);
33  return 0;
34 }
35 
36 
37 static void dummy_populate_etable(struct aura_node *node)
38 {
39  struct aura_export_table *etbl = aura_etable_create(node, num_methods);
40  if (!etbl)
41  BUG(node, "Failed to create etable");
42 
43  int i = num_methods;
44 
45  while (i--) {
46  char *tmp = randstring(16);
47  aura_etable_add(etbl, tmp, "1", "1");
48  free(tmp);
49  }
50 
51  aura_etable_activate(etbl);
52 }
53 
54 static void dummy_close(struct aura_node *node)
55 {
56  slog(1, SLOG_INFO, "Closing lookup-bench transport");
57 }
58 
59 static void dummy_loop(struct aura_node *node, const struct aura_pollfds *fd)
60 {
61  struct aura_buffer *buf;
62  if (node->status != AURA_STATUS_ONLINE) {
63  dummy_populate_etable(node);
64  aura_set_status(node, AURA_STATUS_ONLINE);
65  }
66 
67  while(1) {
68  buf = aura_dequeue_buffer(&node->outbound_buffers);
69  if (!buf)
70  break;
71  aura_queue_buffer(&node->inbound_buffers, buf);
72  aura_eventloop_interrupt(aura_eventloop_get_data(node));
73  }
74 }
75 
76 static void dummy_buffer_put(struct aura_buffer *dst, struct aura_buffer *buf)
77 {
78  slog(0, SLOG_DEBUG, "dummy: serializing buf 0x%x", buf);
79  uint64_t ptr = (uintptr_t) buf;
80  aura_buffer_put_u64(dst, ptr);
81 }
82 
83 static struct aura_buffer *dummy_buffer_get(struct aura_buffer *buf)
84 {
85  struct aura_buffer *ret = (struct aura_buffer *) (uintptr_t) aura_buffer_get_u64(buf);
86  slog(0, SLOG_DEBUG, "dummy: deserializing buf 0x%x", ret);
87  return ret;
88 }
89 
90 static struct aura_transport bench = {
91  .name = "bench",
92  .open = dummy_open,
93  .close = dummy_close,
94  .loop = dummy_loop,
95  .buffer_overhead = 16,
96  .buffer_offset = 8,
97  .buffer_get = dummy_buffer_get,
98  .buffer_put = dummy_buffer_put,
99 };
100 AURA_TRANSPORT(bench);
void aura_set_status(struct aura_node *node, int status)
Definition: aura.c:808
struct aura_buffer * aura_dequeue_buffer(struct list_head *head)
Definition: queue.c:45
const char * name
Required.
Definition: aura.h:168
struct aura_eventloop * aura_eventloop_get_data(struct aura_node *node)
Definition: aura.c:243
void aura_buffer_put_u64(struct aura_buffer *buf, uint64_t value)
Put an unsigned 64 bit integer to aura buffer.
uint64_t aura_buffer_get_u64(struct aura_buffer *buf)
Get an unsigned 64 bit integer from aura buffer.
void aura_queue_buffer(struct list_head *list, struct aura_buffer *buf)
Definition: queue.c:16