Blame view

include/trace/events/sched.h 10.2 KB
d0b6e04a4   Li Zefan   tracing/events: M...
1
2
  #undef TRACE_SYSTEM
  #define TRACE_SYSTEM sched
ea20d9293   Steven Rostedt   tracing: consolid...
3
  #if !defined(_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ)
0a16b6075   Mathieu Desnoyers   tracing, sched: L...
4
5
6
7
  #define _TRACE_SCHED_H
  
  #include <linux/sched.h>
  #include <linux/tracepoint.h>
ea20d9293   Steven Rostedt   tracing: consolid...
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  /*
   * Tracepoint for calling kthread_stop, performed to end a kthread:
   */
  TRACE_EVENT(sched_kthread_stop,
  
  	TP_PROTO(struct task_struct *t),
  
  	TP_ARGS(t),
  
  	TP_STRUCT__entry(
  		__array(	char,	comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	pid			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, t->comm, TASK_COMM_LEN);
  		__entry->pid	= t->pid;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
26
  	TP_printk("comm=%s pid=%d", __entry->comm, __entry->pid)
ea20d9293   Steven Rostedt   tracing: consolid...
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  );
  
  /*
   * Tracepoint for the return value of the kthread stopping:
   */
  TRACE_EVENT(sched_kthread_stop_ret,
  
  	TP_PROTO(int ret),
  
  	TP_ARGS(ret),
  
  	TP_STRUCT__entry(
  		__field(	int,	ret	)
  	),
  
  	TP_fast_assign(
  		__entry->ret	= ret;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
45
  	TP_printk("ret=%d", __entry->ret)
ea20d9293   Steven Rostedt   tracing: consolid...
46
47
48
  );
  
  /*
ea20d9293   Steven Rostedt   tracing: consolid...
49
   * Tracepoint for waking up a task:
ea20d9293   Steven Rostedt   tracing: consolid...
50
   */
091ad3658   Ingo Molnar   events: Rename TR...
51
  DECLARE_EVENT_CLASS(sched_wakeup_template,
ea20d9293   Steven Rostedt   tracing: consolid...
52

27a9da653   Peter Zijlstra   sched: Remove rq ...
53
  	TP_PROTO(struct task_struct *p, int success),
ea20d9293   Steven Rostedt   tracing: consolid...
54

27a9da653   Peter Zijlstra   sched: Remove rq ...
55
  	TP_ARGS(p, success),
ea20d9293   Steven Rostedt   tracing: consolid...
56
57
58
59
60
61
  
  	TP_STRUCT__entry(
  		__array(	char,	comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	pid			)
  		__field(	int,	prio			)
  		__field(	int,	success			)
434a83c3f   Ingo Molnar   events: Harmonize...
62
  		__field(	int,	target_cpu		)
ea20d9293   Steven Rostedt   tracing: consolid...
63
64
65
66
67
68
69
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
  		__entry->pid		= p->pid;
  		__entry->prio		= p->prio;
  		__entry->success	= success;
434a83c3f   Ingo Molnar   events: Harmonize...
70
  		__entry->target_cpu	= task_cpu(p);
ea20d9293   Steven Rostedt   tracing: consolid...
71
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
72
  	TP_printk("comm=%s pid=%d prio=%d success=%d target_cpu=%03d",
ea20d9293   Steven Rostedt   tracing: consolid...
73
  		  __entry->comm, __entry->pid, __entry->prio,
434a83c3f   Ingo Molnar   events: Harmonize...
74
  		  __entry->success, __entry->target_cpu)
ea20d9293   Steven Rostedt   tracing: consolid...
75
  );
75ec29ab8   Steven Rostedt   tracing: Convert ...
76
  DEFINE_EVENT(sched_wakeup_template, sched_wakeup,
27a9da653   Peter Zijlstra   sched: Remove rq ...
77
78
  	     TP_PROTO(struct task_struct *p, int success),
  	     TP_ARGS(p, success));
75ec29ab8   Steven Rostedt   tracing: Convert ...
79

ea20d9293   Steven Rostedt   tracing: consolid...
80
81
  /*
   * Tracepoint for waking up a new task:
ea20d9293   Steven Rostedt   tracing: consolid...
82
   */
75ec29ab8   Steven Rostedt   tracing: Convert ...
83
  DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,
27a9da653   Peter Zijlstra   sched: Remove rq ...
84
85
  	     TP_PROTO(struct task_struct *p, int success),
  	     TP_ARGS(p, success));
ea20d9293   Steven Rostedt   tracing: consolid...
86

02f726949   Peter Zijlstra   sched, trace: Fix...
87
88
89
90
91
92
93
94
95
96
  #ifdef CREATE_TRACE_POINTS
  static inline long __trace_sched_switch_state(struct task_struct *p)
  {
  	long state = p->state;
  
  #ifdef CONFIG_PREEMPT
  	/*
  	 * For all intents and purposes a preempted task is a running task.
  	 */
  	if (task_thread_info(p)->preempt_count & PREEMPT_ACTIVE)
557ab4254   Peter Zijlstra   sched, tracing: S...
97
  		state = TASK_RUNNING | TASK_STATE_MAX;
02f726949   Peter Zijlstra   sched, trace: Fix...
98
99
100
101
102
  #endif
  
  	return state;
  }
  #endif
ea20d9293   Steven Rostedt   tracing: consolid...
103
104
  /*
   * Tracepoint for task switches, performed by the scheduler:
ea20d9293   Steven Rostedt   tracing: consolid...
105
106
   */
  TRACE_EVENT(sched_switch,
27a9da653   Peter Zijlstra   sched: Remove rq ...
107
  	TP_PROTO(struct task_struct *prev,
ea20d9293   Steven Rostedt   tracing: consolid...
108
  		 struct task_struct *next),
27a9da653   Peter Zijlstra   sched: Remove rq ...
109
  	TP_ARGS(prev, next),
ea20d9293   Steven Rostedt   tracing: consolid...
110
111
112
113
114
  
  	TP_STRUCT__entry(
  		__array(	char,	prev_comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	prev_pid			)
  		__field(	int,	prev_prio			)
937cdb9db   Steven Rostedt   tracing: add prev...
115
  		__field(	long,	prev_state			)
ea20d9293   Steven Rostedt   tracing: consolid...
116
117
118
119
120
121
122
123
124
  		__array(	char,	next_comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	next_pid			)
  		__field(	int,	next_prio			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN);
  		__entry->prev_pid	= prev->pid;
  		__entry->prev_prio	= prev->prio;
02f726949   Peter Zijlstra   sched, trace: Fix...
125
  		__entry->prev_state	= __trace_sched_switch_state(prev);
ea20d9293   Steven Rostedt   tracing: consolid...
126
127
128
129
  		memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN);
  		__entry->next_pid	= next->pid;
  		__entry->next_prio	= next->prio;
  	),
557ab4254   Peter Zijlstra   sched, tracing: S...
130
  	TP_printk("prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> next_comm=%s next_pid=%d next_prio=%d",
ea20d9293   Steven Rostedt   tracing: consolid...
131
  		__entry->prev_comm, __entry->prev_pid, __entry->prev_prio,
557ab4254   Peter Zijlstra   sched, tracing: S...
132
133
  		__entry->prev_state & (TASK_STATE_MAX-1) ?
  		  __print_flags(__entry->prev_state & (TASK_STATE_MAX-1), "|",
937cdb9db   Steven Rostedt   tracing: add prev...
134
135
136
  				{ 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" },
  				{ 16, "Z" }, { 32, "X" }, { 64, "x" },
  				{ 128, "W" }) : "R",
557ab4254   Peter Zijlstra   sched, tracing: S...
137
  		__entry->prev_state & TASK_STATE_MAX ? "+" : "",
ea20d9293   Steven Rostedt   tracing: consolid...
138
139
140
141
142
143
144
  		__entry->next_comm, __entry->next_pid, __entry->next_prio)
  );
  
  /*
   * Tracepoint for a task being migrated:
   */
  TRACE_EVENT(sched_migrate_task,
de1d72860   Mathieu Desnoyers   tracepoint: trace...
145
  	TP_PROTO(struct task_struct *p, int dest_cpu),
ea20d9293   Steven Rostedt   tracing: consolid...
146

de1d72860   Mathieu Desnoyers   tracepoint: trace...
147
  	TP_ARGS(p, dest_cpu),
ea20d9293   Steven Rostedt   tracing: consolid...
148
149
150
151
152
153
154
155
156
157
158
159
160
  
  	TP_STRUCT__entry(
  		__array(	char,	comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	pid			)
  		__field(	int,	prio			)
  		__field(	int,	orig_cpu		)
  		__field(	int,	dest_cpu		)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
  		__entry->pid		= p->pid;
  		__entry->prio		= p->prio;
de1d72860   Mathieu Desnoyers   tracepoint: trace...
161
  		__entry->orig_cpu	= task_cpu(p);
ea20d9293   Steven Rostedt   tracing: consolid...
162
163
  		__entry->dest_cpu	= dest_cpu;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
164
  	TP_printk("comm=%s pid=%d prio=%d orig_cpu=%d dest_cpu=%d",
ea20d9293   Steven Rostedt   tracing: consolid...
165
166
167
  		  __entry->comm, __entry->pid, __entry->prio,
  		  __entry->orig_cpu, __entry->dest_cpu)
  );
091ad3658   Ingo Molnar   events: Rename TR...
168
  DECLARE_EVENT_CLASS(sched_process_template,
ea20d9293   Steven Rostedt   tracing: consolid...
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
  
  	TP_PROTO(struct task_struct *p),
  
  	TP_ARGS(p),
  
  	TP_STRUCT__entry(
  		__array(	char,	comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	pid			)
  		__field(	int,	prio			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
  		__entry->pid		= p->pid;
  		__entry->prio		= p->prio;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
185
  	TP_printk("comm=%s pid=%d prio=%d",
ea20d9293   Steven Rostedt   tracing: consolid...
186
187
188
189
  		  __entry->comm, __entry->pid, __entry->prio)
  );
  
  /*
75ec29ab8   Steven Rostedt   tracing: Convert ...
190
   * Tracepoint for freeing a task:
ea20d9293   Steven Rostedt   tracing: consolid...
191
   */
75ec29ab8   Steven Rostedt   tracing: Convert ...
192
193
194
195
  DEFINE_EVENT(sched_process_template, sched_process_free,
  	     TP_PROTO(struct task_struct *p),
  	     TP_ARGS(p));
  	     
ea20d9293   Steven Rostedt   tracing: consolid...
196

75ec29ab8   Steven Rostedt   tracing: Convert ...
197
198
199
200
201
202
  /*
   * Tracepoint for a task exiting:
   */
  DEFINE_EVENT(sched_process_template, sched_process_exit,
  	     TP_PROTO(struct task_struct *p),
  	     TP_ARGS(p));
ea20d9293   Steven Rostedt   tracing: consolid...
203
204
  
  /*
210f76691   Li Zefan   tracing: Convert ...
205
206
207
208
209
210
211
   * Tracepoint for waiting on task to unschedule:
   */
  DEFINE_EVENT(sched_process_template, sched_wait_task,
  	TP_PROTO(struct task_struct *p),
  	TP_ARGS(p));
  
  /*
ea20d9293   Steven Rostedt   tracing: consolid...
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
   * Tracepoint for a waiting task:
   */
  TRACE_EVENT(sched_process_wait,
  
  	TP_PROTO(struct pid *pid),
  
  	TP_ARGS(pid),
  
  	TP_STRUCT__entry(
  		__array(	char,	comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	pid			)
  		__field(	int,	prio			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
  		__entry->pid		= pid_nr(pid);
  		__entry->prio		= current->prio;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
231
  	TP_printk("comm=%s pid=%d prio=%d",
ea20d9293   Steven Rostedt   tracing: consolid...
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
  		  __entry->comm, __entry->pid, __entry->prio)
  );
  
  /*
   * Tracepoint for do_fork:
   */
  TRACE_EVENT(sched_process_fork,
  
  	TP_PROTO(struct task_struct *parent, struct task_struct *child),
  
  	TP_ARGS(parent, child),
  
  	TP_STRUCT__entry(
  		__array(	char,	parent_comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	parent_pid			)
  		__array(	char,	child_comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	child_pid			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->parent_comm, parent->comm, TASK_COMM_LEN);
  		__entry->parent_pid	= parent->pid;
  		memcpy(__entry->child_comm, child->comm, TASK_COMM_LEN);
  		__entry->child_pid	= child->pid;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
257
  	TP_printk("comm=%s pid=%d child_comm=%s child_pid=%d",
ea20d9293   Steven Rostedt   tracing: consolid...
258
259
260
261
262
  		__entry->parent_comm, __entry->parent_pid,
  		__entry->child_comm, __entry->child_pid)
  );
  
  /*
768d0c272   Peter Zijlstra   sched: Add wait, ...
263
264
265
   * XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE
   *     adding sched_stat support to SCHED_FIFO/RR would be welcome.
   */
091ad3658   Ingo Molnar   events: Rename TR...
266
  DECLARE_EVENT_CLASS(sched_stat_template,
768d0c272   Peter Zijlstra   sched: Add wait, ...
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
  
  	TP_PROTO(struct task_struct *tsk, u64 delay),
  
  	TP_ARGS(tsk, delay),
  
  	TP_STRUCT__entry(
  		__array( char,	comm,	TASK_COMM_LEN	)
  		__field( pid_t,	pid			)
  		__field( u64,	delay			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
  		__entry->pid	= tsk->pid;
  		__entry->delay	= delay;
  	)
  	TP_perf_assign(
  		__perf_count(delay);
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
286
  	TP_printk("comm=%s pid=%d delay=%Lu [ns]",
768d0c272   Peter Zijlstra   sched: Add wait, ...
287
288
289
  			__entry->comm, __entry->pid,
  			(unsigned long long)__entry->delay)
  );
75ec29ab8   Steven Rostedt   tracing: Convert ...
290
291
292
293
294
295
296
297
298
299
300
301
302
  
  /*
   * Tracepoint for accounting wait time (time the task is runnable
   * but not actually running due to scheduler contention).
   */
  DEFINE_EVENT(sched_stat_template, sched_stat_wait,
  	     TP_PROTO(struct task_struct *tsk, u64 delay),
  	     TP_ARGS(tsk, delay));
  
  /*
   * Tracepoint for accounting sleep time (time the task is not runnable,
   * including iowait, see below).
   */
470dda741   Li Zefan   tracing: Restore ...
303
304
305
  DEFINE_EVENT(sched_stat_template, sched_stat_sleep,
  	     TP_PROTO(struct task_struct *tsk, u64 delay),
  	     TP_ARGS(tsk, delay));
75ec29ab8   Steven Rostedt   tracing: Convert ...
306
307
308
309
310
  
  /*
   * Tracepoint for accounting iowait time (time the task is not runnable
   * due to waiting on IO to complete).
   */
470dda741   Li Zefan   tracing: Restore ...
311
312
313
  DEFINE_EVENT(sched_stat_template, sched_stat_iowait,
  	     TP_PROTO(struct task_struct *tsk, u64 delay),
  	     TP_ARGS(tsk, delay));
75ec29ab8   Steven Rostedt   tracing: Convert ...
314

768d0c272   Peter Zijlstra   sched: Add wait, ...
315
  /*
b781a602a   Andrew Vagin   events, sched: Ad...
316
317
318
319
320
321
322
   * Tracepoint for accounting blocked time (time the task is in uninterruptible).
   */
  DEFINE_EVENT(sched_stat_template, sched_stat_blocked,
  	     TP_PROTO(struct task_struct *tsk, u64 delay),
  	     TP_ARGS(tsk, delay));
  
  /*
f977bb493   Ingo Molnar   perf_counter, sch...
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
   * Tracepoint for accounting runtime (time the task is executing
   * on a CPU).
   */
  TRACE_EVENT(sched_stat_runtime,
  
  	TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime),
  
  	TP_ARGS(tsk, runtime, vruntime),
  
  	TP_STRUCT__entry(
  		__array( char,	comm,	TASK_COMM_LEN	)
  		__field( pid_t,	pid			)
  		__field( u64,	runtime			)
  		__field( u64,	vruntime			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
  		__entry->pid		= tsk->pid;
  		__entry->runtime	= runtime;
  		__entry->vruntime	= vruntime;
  	)
  	TP_perf_assign(
  		__perf_count(runtime);
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
348
  	TP_printk("comm=%s pid=%d runtime=%Lu [ns] vruntime=%Lu [ns]",
f977bb493   Ingo Molnar   perf_counter, sch...
349
350
351
352
  			__entry->comm, __entry->pid,
  			(unsigned long long)__entry->runtime,
  			(unsigned long long)__entry->vruntime)
  );
1ac9bc694   Arun Sharma   sched/tracing: Ad...
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
  #ifdef CREATE_TRACE_POINTS
  static inline u64 trace_get_sleeptime(struct task_struct *tsk)
  {
  #ifdef CONFIG_SCHEDSTATS
  	u64 block, sleep;
  
  	block = tsk->se.statistics.block_start;
  	sleep = tsk->se.statistics.sleep_start;
  	tsk->se.statistics.block_start = 0;
  	tsk->se.statistics.sleep_start = 0;
  
  	return block ? block : sleep ? sleep : 0;
  #else
  	return 0;
  #endif
  }
  #endif
  
  /*
   * Tracepoint for accounting sleeptime (time the task is sleeping
   * or waiting for I/O).
   */
  TRACE_EVENT(sched_stat_sleeptime,
  
  	TP_PROTO(struct task_struct *tsk, u64 now),
  
  	TP_ARGS(tsk, now),
  
  	TP_STRUCT__entry(
  		__array( char,	comm,	TASK_COMM_LEN	)
  		__field( pid_t,	pid			)
  		__field( u64,	sleeptime		)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
  		__entry->pid		= tsk->pid;
  		__entry->sleeptime = trace_get_sleeptime(tsk);
  		__entry->sleeptime = __entry->sleeptime ?
  				now - __entry->sleeptime : 0;
  	)
  	TP_perf_assign(
  		__perf_count(__entry->sleeptime);
  	),
  
  	TP_printk("comm=%s pid=%d sleeptime=%Lu [ns]",
  			__entry->comm, __entry->pid,
  			(unsigned long long)__entry->sleeptime)
  );
a8027073e   Steven Rostedt   tracing/sched: Ad...
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
  /*
   * Tracepoint for showing priority inheritance modifying a tasks
   * priority.
   */
  TRACE_EVENT(sched_pi_setprio,
  
  	TP_PROTO(struct task_struct *tsk, int newprio),
  
  	TP_ARGS(tsk, newprio),
  
  	TP_STRUCT__entry(
  		__array( char,	comm,	TASK_COMM_LEN	)
  		__field( pid_t,	pid			)
  		__field( int,	oldprio			)
  		__field( int,	newprio			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
  		__entry->pid		= tsk->pid;
  		__entry->oldprio	= tsk->prio;
  		__entry->newprio	= newprio;
  	),
  
  	TP_printk("comm=%s pid=%d oldprio=%d newprio=%d",
  			__entry->comm, __entry->pid,
  			__entry->oldprio, __entry->newprio)
  );
ea20d9293   Steven Rostedt   tracing: consolid...
430
  #endif /* _TRACE_SCHED_H */
a8d154b00   Steven Rostedt   tracing: create a...
431
432
433
  
  /* This part must be outside protection */
  #include <trace/define_trace.h>