The ROme OpTimistic Simulator  2.0.0
A General-Purpose Multithreaded Parallel/Distributed Simulation Platform
statistics.h
Go to the documentation of this file.
1 
54 #pragma once
55 
56 #include <scheduler/process.h>
57 
59 #define DEFAULT_OUTPUT_DIR "outputs"
60 
62 #define MAX_PATHLEN 512
63 
64 enum stat_file_unique {
65  STAT_FILE_U_NODE = 0,
66  STAT_FILE_U_GLOBAL,
67  NUM_STAT_FILE_U
68 };
69 
70 /* Definition of statistics file names/indices for unique files */
71 #define STAT_FILE_NAME_NODE "execution_stats"
72 #define STAT_FILE_NAME_GLOBAL "global_execution_stats"
73 
74 enum stat_file_per_thread {
75  STAT_FILE_T_THREAD = 0,
76  STAT_FILE_T_GVT,
77  STAT_FILE_T_LP,
78  NUM_STAT_FILE_T
79 };
80 
81 /* Definition of statistics file names/indices for per-thread files */
82 #define STAT_FILE_NAME_THREAD "local_stats"
83 #define STAT_FILE_NAME_GVT "gvt"
84 #define STAT_FILE_NAME_LP "lps"
85 
86 /* Definition of LP Statistics Post Messages */
87 enum stat_msg_t {
88  STAT_ANTIMESSAGE = 1001,
89  STAT_EVENT,
90  STAT_COMMITTED,
91  STAT_ROLLBACK,
92  STAT_CKPT,
93  STAT_CKPT_TIME,
94  STAT_CKPT_MEM,
95  STAT_RECOVERY,
96  STAT_RECOVERY_TIME,
97  STAT_EVENT_TIME,
98  STAT_IDLE_CYCLES,
99  STAT_SILENT,
100  STAT_GVT_ROUND_TIME,
101  STAT_GET_SIMTIME_ADVANCEMENT, //xxx totally unused
102  STAT_GET_EVENT_TIME_LP
103 };
104 
111 };
112 
113 // this is used in order to have more efficient stats additions during gvt reductions
114 typedef double vec_double __attribute__((vector_size(16 * sizeof(double))));
115 
116 // Structure to keep track of (incremental) statistics
117 struct stat_t {
118  union {
119  struct {
120  double tot_antimessages,
121  tot_events,
122  committed_events,
123  reprocessed_events,
124  tot_rollbacks,
125  tot_ckpts,
126  ckpt_time,
127  ckpt_mem,
128  tot_recoveries,
129  recovery_time,
130  event_time,
131  idle_cycles,
132  memory_usage,
133  simtime_advancement,
134  gvt_computations, exponential_event_time;
135  };
136  vec_double vec;
137  };
138  double gvt_time,
139  gvt_round_time,
140  gvt_round_time_min, gvt_round_time_max, max_resident_set;
141 };
142 
143 extern void _mkdir(const char *path);
144 
145 extern void print_config(void);
146 
147 extern void statistics_init(void);
148 extern void statistics_fini(void);
149 
150 extern void statistics_start(void);
151 extern void statistics_stop(int exit_code);
152 
153 extern inline void statistics_on_gvt(double gvt);
154 extern inline void statistics_on_gvt_serial(double gvt);
155 
156 extern inline void statistics_post_data(struct lp_struct *, enum stat_msg_t type, double data);
157 extern inline void statistics_post_data_serial(enum stat_msg_t type, double data);
158 
159 extern double statistics_get_lp_data(struct lp_struct *, unsigned int type);
160 
void _mkdir(const char *path)
Definition: statistics.c:198
stats_levels
Definition: statistics.h:105
void statistics_fini(void)
Definition: statistics.c:736
void statistics_init(void)
Definition: statistics.c:660
LP control blocks.
void statistics_stop(int exit_code)
Definition: statistics.c:442
void statistics_start(void)
Definition: statistics.c:286