fix: mm/tracing: add 'accounted' entry into output of allocation tracepoints (v6.0)
[lttng-modules.git] / include / instrumentation / events / kmem.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM kmem
4
5 #if !defined(LTTNG_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define LTTNG_TRACE_KMEM_H
7
8 #include <lttng/tracepoint-event.h>
9 #include <linux/types.h>
10 #include <lttng/kernel-version.h>
11
12 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0))
13
14 #include <../../mm/slab.h>
15
16 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc,
17
18 TP_PROTO(unsigned long call_site,
19 const void *ptr,
20 struct kmem_cache *s,
21 size_t bytes_req,
22 size_t bytes_alloc,
23 gfp_t gfp_flags),
24
25 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags),
26
27 TP_FIELDS(
28 ctf_integer_hex(unsigned long, call_site, call_site)
29 ctf_integer_hex(const void *, ptr, ptr)
30 ctf_integer(size_t, bytes_req, bytes_req)
31 ctf_integer(size_t, bytes_alloc, bytes_alloc)
32 ctf_integer(gfp_t, gfp_flags, gfp_flags)
33 ctf_integer(bool, accounted, IS_ENABLED(CONFIG_MEMCG_KMEM) ?
34 ((gfp_flags & __GFP_ACCOUNT) ||
35 (s && s->flags & SLAB_ACCOUNT)) : false)
36 )
37 )
38
39 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc, kmalloc,
40
41 kmem_kmalloc,
42
43 TP_PROTO(unsigned long call_site, const void *ptr, struct kmem_cache *s,
44 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
45
46 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags)
47 )
48
49 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc, kmem_cache_alloc,
50
51 TP_PROTO(unsigned long call_site, const void *ptr, struct kmem_cache *s,
52 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
53
54 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags)
55 )
56
57 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node,
58
59 TP_PROTO(unsigned long call_site,
60 const void *ptr,
61 struct kmem_cache *s,
62 size_t bytes_req,
63 size_t bytes_alloc,
64 gfp_t gfp_flags,
65 int node),
66
67 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node),
68
69 TP_FIELDS(
70 ctf_integer_hex(unsigned long, call_site, call_site)
71 ctf_integer_hex(const void *, ptr, ptr)
72 ctf_integer(size_t, bytes_req, bytes_req)
73 ctf_integer(size_t, bytes_alloc, bytes_alloc)
74 ctf_integer(gfp_t, gfp_flags, gfp_flags)
75 ctf_integer(int, node, node)
76 ctf_integer(bool, accounted, IS_ENABLED(CONFIG_MEMCG_KMEM) ?
77 ((gfp_flags & __GFP_ACCOUNT) ||
78 (s && s->flags & SLAB_ACCOUNT)) : false)
79 )
80 )
81
82 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node, kmalloc_node,
83
84 kmem_kmalloc_node,
85
86 TP_PROTO(unsigned long call_site, const void *ptr,
87 struct kmem_cache *s, size_t bytes_req, size_t bytes_alloc,
88 gfp_t gfp_flags, int node),
89
90 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node)
91 )
92
93 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node, kmem_cache_alloc_node,
94
95 TP_PROTO(unsigned long call_site, const void *ptr,
96 struct kmem_cache *s, size_t bytes_req, size_t bytes_alloc,
97 gfp_t gfp_flags, int node),
98
99 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node)
100 )
101 #else
102 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc,
103
104 TP_PROTO(unsigned long call_site,
105 const void *ptr,
106 size_t bytes_req,
107 size_t bytes_alloc,
108 gfp_t gfp_flags),
109
110 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags),
111
112 TP_FIELDS(
113 ctf_integer_hex(unsigned long, call_site, call_site)
114 ctf_integer_hex(const void *, ptr, ptr)
115 ctf_integer(size_t, bytes_req, bytes_req)
116 ctf_integer(size_t, bytes_alloc, bytes_alloc)
117 ctf_integer(gfp_t, gfp_flags, gfp_flags)
118 )
119 )
120
121 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc, kmalloc,
122
123 kmem_kmalloc,
124
125 TP_PROTO(unsigned long call_site, const void *ptr,
126 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
127
128 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)
129 )
130
131 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc, kmem_cache_alloc,
132
133 TP_PROTO(unsigned long call_site, const void *ptr,
134 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
135
136 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)
137 )
138
139 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node,
140
141 TP_PROTO(unsigned long call_site,
142 const void *ptr,
143 size_t bytes_req,
144 size_t bytes_alloc,
145 gfp_t gfp_flags,
146 int node),
147
148 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node),
149
150 TP_FIELDS(
151 ctf_integer_hex(unsigned long, call_site, call_site)
152 ctf_integer_hex(const void *, ptr, ptr)
153 ctf_integer(size_t, bytes_req, bytes_req)
154 ctf_integer(size_t, bytes_alloc, bytes_alloc)
155 ctf_integer(gfp_t, gfp_flags, gfp_flags)
156 ctf_integer(int, node, node)
157 )
158 )
159
160 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node, kmalloc_node,
161
162 kmem_kmalloc_node,
163
164 TP_PROTO(unsigned long call_site, const void *ptr,
165 size_t bytes_req, size_t bytes_alloc,
166 gfp_t gfp_flags, int node),
167
168 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node)
169 )
170
171 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node, kmem_cache_alloc_node,
172
173 TP_PROTO(unsigned long call_site, const void *ptr,
174 size_t bytes_req, size_t bytes_alloc,
175 gfp_t gfp_flags, int node),
176
177 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node)
178 )
179 #endif
180
181 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,12,0))
182 LTTNG_TRACEPOINT_EVENT_MAP(kfree,
183
184 kmem_kfree,
185
186 TP_PROTO(unsigned long call_site, const void *ptr),
187
188 TP_ARGS(call_site, ptr),
189
190 TP_FIELDS(
191 ctf_integer_hex(unsigned long, call_site, call_site)
192 ctf_integer_hex(const void *, ptr, ptr)
193 )
194 )
195
196 LTTNG_TRACEPOINT_EVENT(kmem_cache_free,
197
198 TP_PROTO(unsigned long call_site, const void *ptr, const char *name),
199
200 TP_ARGS(call_site, ptr, name),
201
202 TP_FIELDS(
203 ctf_integer_hex(unsigned long, call_site, call_site)
204 ctf_integer_hex(const void *, ptr, ptr)
205 ctf_string(name, name)
206 )
207 )
208 #else
209 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_free,
210
211 TP_PROTO(unsigned long call_site, const void *ptr),
212
213 TP_ARGS(call_site, ptr),
214
215 TP_FIELDS(
216 ctf_integer_hex(unsigned long, call_site, call_site)
217 ctf_integer_hex(const void *, ptr, ptr)
218 )
219 )
220
221 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_free, kfree,
222
223 kmem_kfree,
224
225 TP_PROTO(unsigned long call_site, const void *ptr),
226
227 TP_ARGS(call_site, ptr)
228 )
229
230 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_free, kmem_cache_free,
231
232 TP_PROTO(unsigned long call_site, const void *ptr),
233
234 TP_ARGS(call_site, ptr)
235 )
236 #endif
237
238 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0))
239 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free, kmem_mm_page_free,
240 #else
241 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_direct, kmem_mm_page_free_direct,
242 #endif
243
244 TP_PROTO(struct page *page, unsigned int order),
245
246 TP_ARGS(page, order),
247
248 TP_FIELDS(
249 ctf_integer_hex(struct page *, page, page)
250 ctf_integer(unsigned long, pfn, page_to_pfn(page))
251 ctf_integer(unsigned int, order, order)
252 )
253 )
254
255 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0))
256 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched, kmem_mm_page_free_batched,
257
258 TP_PROTO(struct page *page),
259
260 TP_ARGS(page),
261
262 TP_FIELDS(
263 ctf_integer_hex(struct page *, page, page)
264 ctf_integer(unsigned long, pfn, page_to_pfn(page))
265 )
266 )
267 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0))
268 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched, kmem_mm_page_free_batched,
269
270 TP_PROTO(struct page *page, int cold),
271
272 TP_ARGS(page, cold),
273
274 TP_FIELDS(
275 ctf_integer_hex(struct page *, page, page)
276 ctf_integer(unsigned long, pfn, page_to_pfn(page))
277 ctf_integer(int, cold, cold)
278 )
279 )
280 #else
281 LTTNG_TRACEPOINT_EVENT_MAP(mm_pagevec_free, kmem_pagevec_free,
282
283 TP_PROTO(struct page *page, int cold),
284
285 TP_ARGS(page, cold),
286
287 TP_FIELDS(
288 ctf_integer_hex(struct page *, page, page)
289 ctf_integer(unsigned long, pfn, page_to_pfn(page))
290 ctf_integer(int, cold, cold)
291 )
292 )
293 #endif
294
295 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc, kmem_mm_page_alloc,
296
297 TP_PROTO(struct page *page, unsigned int order,
298 gfp_t gfp_flags, int migratetype),
299
300 TP_ARGS(page, order, gfp_flags, migratetype),
301
302 TP_FIELDS(
303 ctf_integer_hex(struct page *, page, page)
304 ctf_integer(unsigned long, pfn,
305 page ? page_to_pfn(page) : -1UL)
306 ctf_integer(unsigned int, order, order)
307 ctf_integer(gfp_t, gfp_flags, gfp_flags)
308 ctf_integer(int, migratetype, migratetype)
309 )
310 )
311
312 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,19,0))
313 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page,
314
315 TP_PROTO(struct page *page, unsigned int order, int migratetype,
316 int percpu_refill),
317
318 TP_ARGS(page, order, migratetype, percpu_refill),
319
320 TP_FIELDS(
321 ctf_integer_hex(struct page *, page, page)
322 ctf_integer(unsigned long, pfn,
323 page ? page_to_pfn(page) : -1UL)
324 ctf_integer(unsigned int, order, order)
325 ctf_integer(int, migratetype, migratetype)
326 ctf_integer(int, percpu_refill, percpu_refill)
327 )
328 )
329
330 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page, mm_page_alloc_zone_locked,
331
332 kmem_mm_page_alloc_zone_locked,
333
334 TP_PROTO(struct page *page, unsigned int order, int migratetype,
335 int percpu_refill),
336
337 TP_ARGS(page, order, migratetype, percpu_refill)
338 )
339
340 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_pcpu_drain,
341
342 kmem_mm_page_pcpu_drain,
343
344 TP_PROTO(struct page *page, unsigned int order, int migratetype),
345
346 TP_ARGS(page, order, migratetype),
347
348 TP_FIELDS(
349 ctf_integer(unsigned long, pfn,
350 page ? page_to_pfn(page) : -1UL)
351 ctf_integer(unsigned int, order, order)
352 ctf_integer(int, migratetype, migratetype)
353 )
354 )
355 #else
356 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page,
357
358 TP_PROTO(struct page *page, unsigned int order, int migratetype),
359
360 TP_ARGS(page, order, migratetype),
361
362 TP_FIELDS(
363 ctf_integer_hex(struct page *, page, page)
364 ctf_integer(unsigned long, pfn,
365 page ? page_to_pfn(page) : -1UL)
366 ctf_integer(unsigned int, order, order)
367 ctf_integer(int, migratetype, migratetype)
368 )
369 )
370
371 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page, mm_page_alloc_zone_locked,
372
373 kmem_mm_page_alloc_zone_locked,
374
375 TP_PROTO(struct page *page, unsigned int order, int migratetype),
376
377 TP_ARGS(page, order, migratetype)
378 )
379
380 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page, mm_page_pcpu_drain,
381
382 kmem_mm_page_pcpu_drain,
383
384 TP_PROTO(struct page *page, unsigned int order, int migratetype),
385
386 TP_ARGS(page, order, migratetype)
387 )
388 #endif
389
390 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,19,2) \
391 || LTTNG_KERNEL_RANGE(3,14,36, 3,15,0) \
392 || LTTNG_KERNEL_RANGE(3,16,35, 3,17,0) \
393 || LTTNG_KERNEL_RANGE(3,18,10, 3,19,0) \
394 || LTTNG_DEBIAN_KERNEL_RANGE(3,16,7,9,0,0, 3,17,0,0,0,0) \
395 || LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,50, 3,14,0,0) \
396 || LTTNG_UBUNTU_KERNEL_RANGE(3,16,7,34, 3,17,0,0))
397
398 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag,
399
400 kmem_mm_page_alloc_extfrag,
401
402 TP_PROTO(struct page *page,
403 int alloc_order, int fallback_order,
404 int alloc_migratetype, int fallback_migratetype),
405
406 TP_ARGS(page,
407 alloc_order, fallback_order,
408 alloc_migratetype, fallback_migratetype),
409
410 TP_FIELDS(
411 ctf_integer_hex(struct page *, page, page)
412 ctf_integer(unsigned long, pfn, page_to_pfn(page))
413 ctf_integer(int, alloc_order, alloc_order)
414 ctf_integer(int, fallback_order, fallback_order)
415 ctf_integer(int, alloc_migratetype, alloc_migratetype)
416 ctf_integer(int, fallback_migratetype, fallback_migratetype)
417 ctf_integer(int, change_ownership,
418 (alloc_migratetype == get_pageblock_migratetype(page)))
419 )
420 )
421
422 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,30))
423
424 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag,
425
426 kmem_mm_page_alloc_extfrag,
427
428 TP_PROTO(struct page *page,
429 int alloc_order, int fallback_order,
430 int alloc_migratetype, int fallback_migratetype, int new_migratetype),
431
432 TP_ARGS(page,
433 alloc_order, fallback_order,
434 alloc_migratetype, fallback_migratetype, new_migratetype),
435
436 TP_FIELDS(
437 ctf_integer_hex(struct page *, page, page)
438 ctf_integer(unsigned long, pfn, page_to_pfn(page))
439 ctf_integer(int, alloc_order, alloc_order)
440 ctf_integer(int, fallback_order, fallback_order)
441 ctf_integer(int, alloc_migratetype, alloc_migratetype)
442 ctf_integer(int, fallback_migratetype, fallback_migratetype)
443 ctf_integer(int, change_ownership, (new_migratetype == alloc_migratetype))
444 )
445 )
446
447 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0))
448
449 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag,
450
451 kmem_mm_page_alloc_extfrag,
452
453 TP_PROTO(struct page *page,
454 int alloc_order, int fallback_order,
455 int alloc_migratetype, int fallback_migratetype,
456 int change_ownership),
457
458 TP_ARGS(page,
459 alloc_order, fallback_order,
460 alloc_migratetype, fallback_migratetype,
461 change_ownership),
462
463 TP_FIELDS(
464 ctf_integer_hex(struct page *, page, page)
465 ctf_integer(unsigned long, pfn, page_to_pfn(page))
466 ctf_integer(int, alloc_order, alloc_order)
467 ctf_integer(int, fallback_order, fallback_order)
468 ctf_integer(int, alloc_migratetype, alloc_migratetype)
469 ctf_integer(int, fallback_migratetype, fallback_migratetype)
470 ctf_integer(int, change_ownership, change_ownership)
471 )
472 )
473
474 #else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */
475
476 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag,
477
478 kmem_mm_page_alloc_extfrag,
479
480 TP_PROTO(struct page *page,
481 int alloc_order, int fallback_order,
482 int alloc_migratetype, int fallback_migratetype),
483
484 TP_ARGS(page,
485 alloc_order, fallback_order,
486 alloc_migratetype, fallback_migratetype),
487
488 TP_FIELDS(
489 ctf_integer_hex(struct page *, page, page)
490 ctf_integer(unsigned long, pfn, page_to_pfn(page))
491 ctf_integer(int, alloc_order, alloc_order)
492 ctf_integer(int, fallback_order, fallback_order)
493 ctf_integer(int, alloc_migratetype, alloc_migratetype)
494 ctf_integer(int, fallback_migratetype, fallback_migratetype)
495 )
496 )
497
498 #endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */
499
500 #endif /* LTTNG_TRACE_KMEM_H */
501
502 /* This part must be outside protection */
503 #include <lttng/define_trace.h>
This page took 0.041578 seconds and 4 git commands to generate.