litl  0.1.9
litl_types.h
Go to the documentation of this file.
1 /* -*- c-file-style: "GNU" -*- */
2 /*
3  * Copyright © Télécom SudParis.
4  * See COPYING in top-level directory.
5  */
6 
18 #ifndef LITL_TYPES_H_
19 #define LITL_TYPES_H_
20 
21 #include "litl_config.h"
22 
52 #include <stdio.h>
53 #include <stdint.h>
54 
55 #if USE_GETTID
56 #include <unistd.h>
57 #include <sys/syscall.h> // For SYS_xxx definitions
58 #else
59 #include <pthread.h>
60 #endif
61 
62 // current thread id
63 #if USE_GETTID
64 
68 #define CUR_TID syscall(SYS_gettid)
69 #else
70 
74 #define CUR_TID pthread_self()
75 #endif
76 
77 #if HAVE_32BIT
78 
82 typedef uint32_t litl_tid_t;
87 typedef uint32_t litl_time_t;
92 typedef uint32_t litl_trace_size_t;
97 typedef uint32_t litl_param_t;
102 typedef uint32_t litl_offset_t;
103 
104 #else /* HAVE_32BIT */
105 
109 typedef uint64_t litl_tid_t;
114 typedef uint64_t litl_time_t;
119 typedef uint64_t litl_trace_size_t;
124 typedef uint64_t litl_param_t;
129 typedef uint64_t litl_offset_t;
130 #endif /* HAVE_32BIT */
131 
135 typedef uint8_t* litl_buffer_t;
136 // TODO: there is a possibility of using uint16_t, however then the alignment
137 // would collapse
142 typedef uint32_t litl_code_t;
147 typedef uint32_t litl_size_t;
152 typedef uint16_t litl_med_size_t;
157 typedef uint8_t litl_data_t;
158 
163 #define LITL_OFFSET_CODE 13
164 
169 #define LITL_MAX_PARAMS 10
170 
174 #define LITL_MAX_DATA (LITL_MAX_PARAMS * sizeof(litl_param_t))
175 
180 typedef enum {
185 }__attribute__((packed)) litl_type_t;
186 
192 typedef struct {
200  union {
205  struct {
208  }__attribute__((packed)) regular;
213  struct {
216  }__attribute__((packed)) raw;
221  struct {
222  litl_size_t size;
224  }__attribute__((packed)) packed;
229  struct {
230  litl_data_t nb_params;
232  }__attribute__((packed)) offset;
233  } parameters;
234 }__attribute__((packed)) litl_t;
235 
242 #define NBTHREADS 32
243 
249 typedef struct {
250  litl_data_t litl_ver[8];
251  litl_data_t sysinfo[128];
253 }__attribute__((packed)) litl_general_header_t;
254 
260 typedef struct {
261  litl_data_t process_name[256];
267 }__attribute__((packed)) litl_process_header_t;
268 
273 typedef struct {
277 
282 typedef struct {
287 
292 typedef struct {
302 
307 typedef struct {
308  int f_handle;
309  char* filename;
329  pthread_once_t index_once;
330  pthread_key_t index;
331  pthread_mutex_t lock_litl_flush;
332  pthread_mutex_t lock_buffer_init;
340 
345 typedef struct {
349 
354 typedef struct {
365 
370 typedef struct {
378  int cur_index;
381 
387 typedef struct {
388  int f_handle;
397 
402 typedef struct {
403  int f_handle;
404  char* filename;
407  char** traces_names;
415 
420 typedef struct {
421  int f_handle;
433 
434 /*
435  * Defining formats for printing data
436  */
437 #define PRTIu32 "u"
438 #define PRTIx32 "x"
439 
440 #if HAVE_32BIT
441 #define PRTIu64 "u"
442 #define PRTIx64 "x"
443 
444 #else
445 #define PRTIu64 "lu"
446 #define PRTIx64 "lx"
447 
448 #endif /* HAVE_32BIT */
449 
450 /*
451  * For internal use only.
452  * Computes the offset of MEMBER in structure TYPE
453  */
454 #define __litl_offset_of(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER)
455 
456 /*
457  * For internal use only.
458  * Computes the offset of the first parameter in an event
459  */
460 #define LITL_BASE_SIZE __litl_offset_of(litl_t, parameters)
461 
462 #endif /* LITL_TYPES_H_ */
litl_read_thread_t::buffer
litl_buffer_t buffer
Definition: litl_types.h:358
litl_write_trace_t::nb_allocated_buffers
litl_size_t nb_allocated_buffers
Definition: litl_types.h:325
litl_med_size_t
uint16_t litl_med_size_t
An auxiliary data type for the optimized storage of data.
Definition: litl_types.h:152
litl_general_header_t
A general data structure that corresponds to the header of a trace file.
Definition: litl_types.h:249
litl_trace_split_t::trace_header
litl_general_header_t * trace_header
Definition: litl_types.h:425
litl_trace_merge_t::general_offset
litl_offset_t general_offset
Definition: litl_types.h:413
litl_process_header_t::offset
litl_offset_t offset
Definition: litl_types.h:266
litl_read_thread_t
A data structure for reading thread-specific events.
Definition: litl_types.h:354
litl_trace_split_t::f_handle
int f_handle
Definition: litl_types.h:421
LITL_MAX_PARAMS
#define LITL_MAX_PARAMS
Defines the maximum number of parameters.
Definition: litl_types.h:169
regular
A regular event.
litl_trace_triples_t::position
litl_offset_t position
Definition: litl_types.h:284
litl_read_event_t
A data structure for reading one event.
Definition: litl_types.h:345
litl_read_thread_t::offset
litl_offset_t offset
Definition: litl_types.h:360
litl_write_buffer_t::buffer_ptr
litl_buffer_t buffer_ptr
Definition: litl_types.h:293
litl_write_trace_t::nb_slots
litl_med_size_t nb_slots
Definition: litl_types.h:321
litl_t::offset
litl_param_t offset
Definition: litl_types.h:231
litl_read_thread_t::thread_pair
litl_thread_pair_t * thread_pair
Definition: litl_types.h:355
litl_read_trace_t::header_buffer_ptr
litl_buffer_t header_buffer_ptr
Definition: litl_types.h:391
litl_write_trace_t::allow_thread_safety
litl_data_t allow_thread_safety
Definition: litl_types.h:337
litl_write_trace_t::is_litl_initialized
litl_data_t is_litl_initialized
Definition: litl_types.h:334
litl_read_trace_t
A data structure for reading events from both regular trace files and archives of traces.
Definition: litl_types.h:387
litl_write_trace_t::general_offset
litl_offset_t general_offset
Definition: litl_types.h:311
litl_write_trace_t::header_size
litl_size_t header_size
Definition: litl_types.h:315
litl_trace_split_t::buffer
litl_buffer_t buffer
Definition: litl_types.h:430
litl_trace_merge_t::buffer
litl_buffer_t buffer
Definition: litl_types.h:410
litl_trace_split_t::process_header
litl_process_header_t * process_header
Definition: litl_types.h:426
litl_read_thread_t::tracker
litl_offset_t tracker
Definition: litl_types.h:361
litl_write_trace_t
A data structure for recording events.
Definition: litl_types.h:307
litl_write_buffer_t::tid
litl_tid_t tid
Definition: litl_types.h:296
litl_read_event_t::tid
litl_tid_t tid
Definition: litl_types.h:346
litl_trace_merge_t::traces_names
char ** traces_names
Definition: litl_types.h:407
litl_config.h
litl_write_trace_t::header
litl_buffer_t header
Definition: litl_types.h:314
litl_write_trace_t::header_nb_threads
litl_med_size_t header_nb_threads
Definition: litl_types.h:317
litl_trace_split_t::header_buffer
litl_buffer_t header_buffer
Definition: litl_types.h:424
litl_type_t
litl_type_t
The enumeration of event types.
Definition: litl_types.h:180
litl_general_header_t::nb_processes
litl_med_size_t nb_processes
Definition: litl_types.h:252
litl_write_trace_t::allow_buffer_flush
litl_data_t allow_buffer_flush
Definition: litl_types.h:336
litl_code_t
uint32_t litl_code_t
A data type for storing events codes.
Definition: litl_types.h:142
litl_write_trace_t::buffer_size
litl_size_t buffer_size
Definition: litl_types.h:326
litl_write_trace_t::lock_buffer_init
pthread_mutex_t lock_buffer_init
Definition: litl_types.h:332
litl_read_trace_t::header
litl_general_header_t * header
Definition: litl_types.h:390
parameters
Event parameters.
litl_read_process_t::threads
litl_read_thread_t ** threads
Definition: litl_types.h:376
litl_write_buffer_t::buffer
litl_buffer_t buffer
Definition: litl_types.h:294
litl_write_trace_t::is_buffer_full
litl_data_t is_buffer_full
Definition: litl_types.h:327
litl_trace_split_t::header_buffer_ptr
litl_buffer_t header_buffer_ptr
Definition: litl_types.h:423
litl_t::code
litl_code_t code
Definition: litl_types.h:194
LITL_MAX_DATA
#define LITL_MAX_DATA
Defines the "maximum" size of raw data.
Definition: litl_types.h:174
litl_read_thread_t::buffer_ptr
litl_buffer_t buffer_ptr
Definition: litl_types.h:357
litl_t::nb_params
litl_data_t nb_params
Definition: litl_types.h:206
litl_read_process_t::header
litl_process_header_t * header
Definition: litl_types.h:371
litl_process_header_t::header_nb_threads
litl_med_size_t header_nb_threads
Definition: litl_types.h:263
litl_write_trace_t::is_header_flushed
litl_data_t is_header_flushed
Definition: litl_types.h:318
litl_read_process_t::header_buffer
litl_buffer_t header_buffer
Definition: litl_types.h:373
raw
A raw event.
litl_write_trace_t::lock_litl_flush
pthread_mutex_t lock_litl_flush
Definition: litl_types.h:331
litl_write_trace_t::header_ptr
litl_buffer_t header_ptr
Definition: litl_types.h:313
litl_t::size
litl_size_t size
Definition: litl_types.h:214
litl_write_trace_t::index_once
pthread_once_t index_once
Definition: litl_types.h:329
litl_trace_split_t::buffer_size
litl_size_t buffer_size
Definition: litl_types.h:431
litl_size_t
uint32_t litl_size_t
An auxiliary data type for storing data.
Definition: litl_types.h:147
litl_process_header_t
A general data structure that corresponds to the header of a trace file.
Definition: litl_types.h:260
litl_process_header_t::nb_threads
litl_med_size_t nb_threads
Definition: litl_types.h:262
LITL_TYPE_OFFSET
@ LITL_TYPE_OFFSET
Definition: litl_types.h:184
litl_trace_merge_t
A data structure for merging trace files into an archive of traces.
Definition: litl_types.h:402
litl_param_t
uint64_t litl_param_t
A data type for the non-optimized storage of parameters.
Definition: litl_types.h:124
litl_trace_merge_t::f_handle
int f_handle
Definition: litl_types.h:403
litl_trace_triples_t::offset
litl_offset_t offset
Definition: litl_types.h:285
litl_write_trace_t::header_offset
litl_size_t header_offset
Definition: litl_types.h:316
litl_read_process_t
A data structure for reading process-specific events.
Definition: litl_types.h:370
litl_trace_merge_t::buffer_ptr
litl_buffer_t buffer_ptr
Definition: litl_types.h:409
litl_trace_merge_t::buffer_size
litl_size_t buffer_size
Definition: litl_types.h:411
litl_tid_t
uint64_t litl_tid_t
A data type for storing thread IDs.
Definition: litl_types.h:109
litl_read_trace_t::nb_processes
litl_med_size_t nb_processes
Definition: litl_types.h:394
litl_write_trace_t::nb_threads
litl_med_size_t nb_threads
Definition: litl_types.h:320
litl_read_trace_t::header_buffer
litl_buffer_t header_buffer
Definition: litl_types.h:392
litl_thread_pair_t::tid
litl_tid_t tid
Definition: litl_types.h:274
litl_process_header_t::trace_size
litl_trace_size_t trace_size
Definition: litl_types.h:265
litl_trace_merge_t::filename
char * filename
Definition: litl_types.h:404
litl_write_buffer_t::offset
litl_offset_t offset
Definition: litl_types.h:297
litl_trace_size_t
uint64_t litl_trace_size_t
A data type for storing traces sizes.
Definition: litl_types.h:119
litl_read_thread_t::cur_event
litl_read_event_t cur_event
Definition: litl_types.h:363
litl_thread_pair_t::offset
litl_offset_t offset
Definition: litl_types.h:275
litl_offset_t
uint64_t litl_offset_t
A data type for storing offsets.
Definition: litl_types.h:129
litl_t::type
litl_type_t type
Definition: litl_types.h:195
litl_write_trace_t::is_recording_paused
volatile litl_data_t is_recording_paused
Definition: litl_types.h:335
litl_write_trace_t::allow_tid_recording
litl_data_t allow_tid_recording
Definition: litl_types.h:338
litl_write_buffer_t
Thread-specific buffer.
Definition: litl_types.h:292
litl_write_trace_t::index
pthread_key_t index
Definition: litl_types.h:330
litl_trace_triples_t
A data structure for triples (nb_processes, position, offset)
Definition: litl_types.h:282
LITL_TYPE_RAW
@ LITL_TYPE_RAW
Definition: litl_types.h:182
offset
An offset event.
litl_data_t
uint8_t litl_data_t
A data type for the optimized storage of parameters.
Definition: litl_types.h:157
litl_t
A general structure of LiTL event type.
Definition: litl_types.h:192
litl_write_buffer_t::already_flushed
litl_data_t already_flushed
Definition: litl_types.h:299
litl_read_process_t::nb_threads
litl_med_size_t nb_threads
Definition: litl_types.h:375
litl_process_header_t::buffer_size
litl_size_t buffer_size
Definition: litl_types.h:264
litl_buffer_t
uint8_t * litl_buffer_t
A data type for storing sets of events.
Definition: litl_types.h:135
litl_t::time
litl_time_t time
Definition: litl_types.h:193
litl_write_buffer_t::initialized
int initialized
Definition: litl_types.h:300
litl_read_process_t::header_buffer_ptr
litl_buffer_t header_buffer_ptr
Definition: litl_types.h:372
litl_write_trace_t::threads_offset
litl_param_t threads_offset
Definition: litl_types.h:322
litl_read_process_t::cur_index
int cur_index
Definition: litl_types.h:378
litl_read_trace_t::processes
litl_read_process_t ** processes
Definition: litl_types.h:395
litl_read_event_t::event
litl_t * event
Definition: litl_types.h:347
litl_trace_split_t
A data structure for splitting an archive of traces.
Definition: litl_types.h:420
litl_time_t
uint64_t litl_time_t
A data type for storing time stamps.
Definition: litl_types.h:114
litl_write_trace_t::filename
char * filename
Definition: litl_types.h:309
LITL_TYPE_PACKED
@ LITL_TYPE_PACKED
Definition: litl_types.h:183
litl_write_trace_t::buffers
litl_write_buffer_t ** buffers
Definition: litl_types.h:324
litl_thread_pair_t
A data structure for pairs (tid, offset) stored in the trace header.
Definition: litl_types.h:273
packed
A packed event.
litl_read_trace_t::f_handle
int f_handle
Definition: litl_types.h:388
litl_trace_merge_t::nb_traces
litl_med_size_t nb_traces
Definition: litl_types.h:406
litl_trace_triples_t::nb_processes
litl_med_size_t nb_processes
Definition: litl_types.h:283
LITL_TYPE_REGULAR
@ LITL_TYPE_REGULAR
Definition: litl_types.h:181
litl_trace_split_t::nb_processes
litl_med_size_t nb_processes
Definition: litl_types.h:428
litl_read_process_t::is_initialized
int is_initialized
Definition: litl_types.h:379
litl_write_trace_t::f_handle
int f_handle
Definition: litl_types.h:308