ContainerTracer  0.1
docker-driver.h
Go to the documentation of this file.
1 
25 #ifndef _DOCKER_DRIVER_H
26 #define _DOCKER_DRIVER_H
27 
28 #include <linux/limits.h>
29 #include <unistd.h>
30 #include <sys/types.h>
31 
32 #include <json.h>
33 
34 #include <generic.h>
35 #include <trace_replay.h>
36 
37 #define DOCKER_ID_LEN 65
38 
46 #define docker_info_list_traverse(ptr, head) \
47  for (ptr = head; ptr != NULL; ptr = ptr->next)
48 
56 #define docker_json_field_traverse(ptr, begin, end) \
57  for (ptr = begin; ptr != end; ptr++)
58 
59 #ifdef DEBUG
60 #define docker_print_info(info) \
61  pr_info(INFO, \
62  "\n" \
63  "\t\t[[ current %p ]]\n" \
64  "\t\tpid: %d\n" \
65  "\t\ttime: %u\n" \
66  "\t\tq_depth: %u\n" \
67  "\t\tnr_thread: %u\n" \
68  "\t\tweight: %u\n" \
69  "\t\ttrace_repeat: %u\n" \
70  "\t\twss: %u\n" \
71  "\t\tutilization: %u\n" \
72  "\t\tiosize: %u\n" \
73  "\t\tmqid: %d\n" \
74  "\t\tshmid: %d\n" \
75  "\t\tsemid: %d\n" \
76  "\t\tprefix_cgroup_name: %s\n" \
77  "\t\tscheduler: %s\n" \
78  "\t\tname: %s\n" \
79  "\t\ttrace_replay_path: %s\n" \
80  "\t\ttrace_data_path: %s\n" \
81  "\t\tdevice: %s\n" \
82  "\t\tglobal_config: %p\n" \
83  "\t\tnext: %p\n", \
84  (info), (info)->pid, (info)->time, (info)->q_depth, \
85  (info)->nr_thread, (info)->weight, (info)->trace_repeat, \
86  (info)->wss, (info)->utilization, (info)->iosize, \
87  (info)->mqid, (info)->shmid, (info)->semid, \
88  (info)->prefix_cgroup_name, (info)->scheduler, \
89  (info)->cgroup_id, (info)->trace_replay_path, \
90  (info)->trace_data_path, (info)->device, \
91  (info)->global_config, (info)->next);
92 #endif
93 
94 enum { DOCKER_IPC_NOT_FREE = 0x0,
95  DOCKER_IPC_FREE = 0x1, };
97 
98 enum { DOCKER_NOT_SYNTH = 0,
99  DOCKER_SYNTH = 0x1, };
101 
105 
110  const char *name;
111  const void *member;
112 };
113 
118  struct json_object
119  *trace[MAX_THREADS];
120  struct json_object *per_trace
121  [MAX_THREADS];
122  struct json_object *synthetic
123  [MAX_THREADS];
124  struct json_object
125  *stats[MAX_THREADS];
126 };
127 
131 struct docker_info {
132  pid_t ppid;
133  pid_t pid;
135  unsigned int
137  unsigned int
139  unsigned int nr_thread;
141  unsigned int weight;
143  int mqid;
144  int shmid;
145  int semid;
147  unsigned int trace_repeat;
148  unsigned int wss;
149  unsigned int utilization;
150  unsigned int iosize;
152  char prefix_cgroup_name
153  [NAME_MAX];
154  char device[NAME_MAX];
155  char scheduler[NAME_MAX];
156  char cgroup_id
157  [NAME_MAX];
158  char trace_replay_path[PATH_MAX];
159  char trace_data_path[PATH_MAX];
162  struct docker_info *next;
164 };
165 
166 /* docker-driver.c */
167 int docker_init(void *object);
168 int docker_runner(void);
169 int docker_valid_scheduler_test(const char *scheduler);
170 int docker_has_weight_scheduler(const int scheduler_index);
171 int docker_get_interval(const char *key, char *buffer);
172 int docker_get_total(const char *key, char *buffer);
173 void docker_free(void);
174 
175 /* docker-serializer.c */
176 void docker_total_serializer(const struct docker_info *info,
177  const struct total_results *total, char *buffer);
178 void docker_realtime_serializer(const struct docker_info *info,
179  const struct realtime_log *log, char *buffer);
180 /* docker-info.c */
181 struct docker_info *docker_info_init(struct json_object *setting, int index);
182 int docker_is_synth_type(const char *trace_data_path);
183 
184 /* docker-shm.c */
185 int docker_shm_init(struct docker_info *info);
186 int docker_shm_get(const struct docker_info *info, void *buffer);
187 void docker_shm_free(struct docker_info *info, int flags);
188 
189 /* docker-mq.c */
190 int docker_mq_init(struct docker_info *info);
191 int docker_mq_get(const struct docker_info *info, void *buffer);
192 void docker_mq_free(struct docker_info *info, int flags);
193 
194 #endif
const void * member
Definition: docker-driver.h:111
This structure has the major information of the each process.
Definition: docker-driver.h:131
static const char * key[]
Definition: docker-driver-test.c:55
int semid
Definition: docker-driver.h:145
int shmid
Definition: docker-driver.h:144
pid_t ppid
Definition: docker-driver.h:132
int docker_mq_get(const struct docker_info *info, void *buffer)
Retrieve the data from Message Queue.
Definition: docker-mq.c:130
Definition: docker-driver.h:95
unsigned int trace_repeat
Definition: docker-driver.h:147
int docker_shm_get(const struct docker_info *info, void *buffer)
Retrieve the data from Shared Memory.
Definition: docker-shm.c:244
int docker_init(void *object)
Initialize the global configuration and per processes configuration.
Definition: docker-driver.c:253
const char * name
Definition: docker-driver.h:110
int docker_get_total(const char *key, char *buffer)
Get end-time results from trace-replay.
Definition: docker-driver.c:581
int docker_runner(void)
Run all processes&#39; trace-replay part.
Definition: docker-driver.c:454
int docker_has_weight_scheduler(const int scheduler_index)
Check the parameter&#39;s scheduler_index supports weight.
Definition: docker-driver.c:163
Definition: trace_replay.h:193
int docker_valid_scheduler_test(const char *scheduler)
Check the current inputted scheduler text can be supported by the driver.
Definition: docker-driver.c:142
void * global_config
Definition: docker-driver.h:161
unsigned int time
Definition: docker-driver.h:136
Definition: trace_replay.h:239
void docker_shm_free(struct docker_info *info, int flags)
Deallocate the Shared Memory resources.
Definition: docker-shm.c:269
void docker_total_serializer(const struct docker_info *info, const struct total_results *total, char *buffer)
Converts total_results to JSON string.
Definition: docker-serializer.c:433
int docker_get_interval(const char *key, char *buffer)
Get execution-time results from trace-replay.
Definition: docker-driver.c:540
unsigned int q_depth
Definition: docker-driver.h:138
void docker_free(void)
Deallocate resources of this driver.
Definition: docker-driver.c:615
unsigned int nr_thread
Definition: docker-driver.h:139
unsigned int wss
Definition: docker-driver.h:148
Definition: docker-driver.h:103
void docker_realtime_serializer(const struct docker_info *info, const struct realtime_log *log, char *buffer)
Converts realtime_log to JSON string.
Definition: docker-serializer.c:404
Definition: docker-driver.h:102
Definition: trace_replay.h:160
#define MAX_THREADS
Definition: trace_replay.h:34
unsigned int weight
Definition: docker-driver.h:141
pid_t pid
Definition: docker-driver.h:133
Support structure of the total_results structures which located in include/trace_replay.h.
Definition: docker-driver.h:117
Support structure of the docker_stats_serializer() function.
Definition: docker-driver.h:109
int docker_shm_init(struct docker_info *info)
Do the __docker_shm_init() and __docker_sem_init()
Definition: docker-shm.c:201
char trace_data_path[PATH_MAX]
Definition: docker-driver.h:159
unsigned int utilization
Definition: docker-driver.h:149
char scheduler[NAME_MAX]
Definition: docker-driver.h:155
void docker_mq_free(struct docker_info *info, int flags)
Deallocate the Message Queue resources.
Definition: docker-mq.c:153
int mqid
Definition: docker-driver.h:143
Definition: docker-driver.h:98
#define DOCKER_ID_LEN
Definition: docker-driver.h:37
Definition: docker-driver.h:94
char container_id[DOCKER_ID_LEN]
Definition: docker-driver.h:163
Definition: trace_replay.h:176
unsigned int iosize
Definition: docker-driver.h:150
def info()
Definition: routes.py:6
int docker_mq_init(struct docker_info *info)
Wrapping function of __docker_mq_init()
Definition: docker-mq.c:98
Definition: docker-driver.h:99
int docker_is_synth_type(const char *trace_data_path)
Check the trace_data_path value form is synthetic from.
Definition: docker-info.c:107
struct docker_info * docker_info_init(struct json_object *setting, int index)
Generate and construct the per processes info object and return it.
Definition: docker-info.c:247
struct docker_info * next
Definition: docker-driver.h:162
This header maintain the driver&#39;s mapping information. It&#39;s definition in runner/generic.c.