b09f3215 |
1 | |
04180f7f |
2 | /* LTTng user-space "fast" tracing header |
b09f3215 |
3 | * |
4 | * Copyright 2006 Mathieu Desnoyers |
5 | * |
6 | */ |
7 | |
04180f7f |
8 | #ifndef _LTT_USERTRACE_FAST_H |
9 | #define _LTT_USERTRACE_FAST_H |
b09f3215 |
10 | |
11 | #include <errno.h> |
b09f3215 |
12 | #include <asm/atomic.h> |
700d350d |
13 | #include <pthread.h> |
b09f3215 |
14 | |
47d7d576 |
15 | |
16 | #ifndef LTT_N_SUBBUFS |
17 | #define LTT_N_SUBBUFS 2 |
18 | #endif //LTT_N_SUBBUFS |
19 | |
20 | #ifndef LTT_SUBBUF_SIZE_CPU |
21 | #define LTT_SUBBUF_SIZE_CPU 1048576 |
51bf1553 |
22 | #endif //LTT_BUF_SIZE_CPU |
b09f3215 |
23 | |
47d7d576 |
24 | #define LTT_BUF_SIZE_CPU (LTT_SUBBUF_SIZE_CPU * LTT_N_SUBBUFS) |
25 | |
26 | #ifndef LTT_SUBBUF_SIZE_FACILITIES |
27 | #define LTT_SUBBUF_SIZE_FACILITIES 4096 |
51bf1553 |
28 | #endif //LTT_BUF_SIZE_FACILITIES |
b09f3215 |
29 | |
47d7d576 |
30 | #define LTT_BUF_SIZE_FACILITIES (LTT_SUBBUF_SIZE_FACILITIES * LTT_N_SUBBUFS) |
31 | |
77b31f39 |
32 | #ifndef LTT_USERTRACE_ROOT |
33 | #define LTT_USERTRACE_ROOT "/tmp/ltt-usertrace" |
34 | #endif //LTT_USERTRACE_ROOT |
35 | |
47d7d576 |
36 | |
37 | /* Buffer offset macros */ |
38 | |
39 | #define BUFFER_OFFSET(offset, buf) (offset & (buf->alloc_size-1)) |
40 | #define SUBBUF_OFFSET(offset, buf) (offset & (buf->subbuf_size-1)) |
41 | #define SUBBUF_ALIGN(offset, buf) \ |
42 | (((offset) + buf->subbuf_size) & (~(buf->subbuf_size-1))) |
43 | #define SUBBUF_TRUNC(offset, buf) \ |
44 | ((offset) & (~(buf->subbuf_size-1))) |
45 | #define SUBBUF_INDEX(offset, buf) \ |
46 | (BUFFER_OFFSET(offset,buf)/buf->subbuf_size) |
47 | |
48 | |
b09f3215 |
49 | struct ltt_buf { |
b09f3215 |
50 | atomic_t offset; |
47d7d576 |
51 | atomic_t consumed; |
52 | atomic_t reserve_count[LTT_N_SUBBUFS]; |
53 | atomic_t commit_count[LTT_N_SUBBUFS]; |
b09f3215 |
54 | |
55 | atomic_t events_lost; |
47d7d576 |
56 | atomic_t full; /* futex on which the writer waits : 1 : full */ |
57 | unsigned int alloc_size; |
58 | unsigned int subbuf_size; |
b09f3215 |
59 | }; |
60 | |
700d350d |
61 | struct ltt_trace_info { |
1c48e587 |
62 | int init; |
b09f3215 |
63 | int filter; |
700d350d |
64 | pid_t daemon_id; |
b09f3215 |
65 | atomic_t nesting; |
66 | struct { |
67 | struct ltt_buf facilities; |
68 | struct ltt_buf cpu; |
700d350d |
69 | char facilities_buf[LTT_BUF_SIZE_FACILITIES] __attribute__ ((aligned (8))); |
51bf1553 |
70 | char cpu_buf[LTT_BUF_SIZE_CPU] __attribute__ ((aligned (8))); |
b09f3215 |
71 | } channel; |
72 | }; |
73 | |
700d350d |
74 | extern __thread struct ltt_trace_info *thread_trace_info; |
b09f3215 |
75 | |
51bf1553 |
76 | void ltt_thread_init(void); |
b09f3215 |
77 | |
700d350d |
78 | void ltt_usertrace_fast_buffer_switch(void); |
79 | |
04180f7f |
80 | #endif //_LTT_USERTRACE_FAST_H |