]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - include/trace/events/vmscan.h
mm, vmscan: add classzone information to tracepoints
[karo-tx-linux.git] / include / trace / events / vmscan.h
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM vmscan
3
4 #if !defined(_TRACE_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_VMSCAN_H
6
7 #include <linux/types.h>
8 #include <linux/tracepoint.h>
9 #include <linux/mm.h>
10 #include <linux/memcontrol.h>
11 #include <trace/events/mmflags.h>
12
13 #define RECLAIM_WB_ANON         0x0001u
14 #define RECLAIM_WB_FILE         0x0002u
15 #define RECLAIM_WB_MIXED        0x0010u
16 #define RECLAIM_WB_SYNC         0x0004u /* Unused, all reclaim async */
17 #define RECLAIM_WB_ASYNC        0x0008u
18
19 #define show_reclaim_flags(flags)                               \
20         (flags) ? __print_flags(flags, "|",                     \
21                 {RECLAIM_WB_ANON,       "RECLAIM_WB_ANON"},     \
22                 {RECLAIM_WB_FILE,       "RECLAIM_WB_FILE"},     \
23                 {RECLAIM_WB_MIXED,      "RECLAIM_WB_MIXED"},    \
24                 {RECLAIM_WB_SYNC,       "RECLAIM_WB_SYNC"},     \
25                 {RECLAIM_WB_ASYNC,      "RECLAIM_WB_ASYNC"}     \
26                 ) : "RECLAIM_WB_NONE"
27
28 #define trace_reclaim_flags(page) ( \
29         (page_is_file_cache(page) ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \
30         (RECLAIM_WB_ASYNC) \
31         )
32
33 #define trace_shrink_flags(file) \
34         ( \
35                 (file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \
36                 (RECLAIM_WB_ASYNC) \
37         )
38
39 TRACE_EVENT(mm_vmscan_kswapd_sleep,
40
41         TP_PROTO(int nid),
42
43         TP_ARGS(nid),
44
45         TP_STRUCT__entry(
46                 __field(        int,    nid     )
47         ),
48
49         TP_fast_assign(
50                 __entry->nid    = nid;
51         ),
52
53         TP_printk("nid=%d", __entry->nid)
54 );
55
56 TRACE_EVENT(mm_vmscan_kswapd_wake,
57
58         TP_PROTO(int nid, int zid, int order),
59
60         TP_ARGS(nid, zid, order),
61
62         TP_STRUCT__entry(
63                 __field(        int,    nid     )
64                 __field(        int,    zid     )
65                 __field(        int,    order   )
66         ),
67
68         TP_fast_assign(
69                 __entry->nid    = nid;
70                 __entry->zid    = zid;
71                 __entry->order  = order;
72         ),
73
74         TP_printk("nid=%d zid=%d order=%d", __entry->nid, __entry->zid, __entry->order)
75 );
76
77 TRACE_EVENT(mm_vmscan_wakeup_kswapd,
78
79         TP_PROTO(int nid, int zid, int order),
80
81         TP_ARGS(nid, zid, order),
82
83         TP_STRUCT__entry(
84                 __field(        int,            nid     )
85                 __field(        int,            zid     )
86                 __field(        int,            order   )
87         ),
88
89         TP_fast_assign(
90                 __entry->nid            = nid;
91                 __entry->zid            = zid;
92                 __entry->order          = order;
93         ),
94
95         TP_printk("nid=%d zid=%d order=%d",
96                 __entry->nid,
97                 __entry->zid,
98                 __entry->order)
99 );
100
101 DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template,
102
103         TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx),
104
105         TP_ARGS(order, may_writepage, gfp_flags, classzone_idx),
106
107         TP_STRUCT__entry(
108                 __field(        int,    order           )
109                 __field(        int,    may_writepage   )
110                 __field(        gfp_t,  gfp_flags       )
111                 __field(        int,    classzone_idx   )
112         ),
113
114         TP_fast_assign(
115                 __entry->order          = order;
116                 __entry->may_writepage  = may_writepage;
117                 __entry->gfp_flags      = gfp_flags;
118                 __entry->classzone_idx  = classzone_idx;
119         ),
120
121         TP_printk("order=%d may_writepage=%d gfp_flags=%s classzone_idx=%d",
122                 __entry->order,
123                 __entry->may_writepage,
124                 show_gfp_flags(__entry->gfp_flags),
125                 __entry->classzone_idx)
126 );
127
128 DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin,
129
130         TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx),
131
132         TP_ARGS(order, may_writepage, gfp_flags, classzone_idx)
133 );
134
135 DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin,
136
137         TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx),
138
139         TP_ARGS(order, may_writepage, gfp_flags, classzone_idx)
140 );
141
142 DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin,
143
144         TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx),
145
146         TP_ARGS(order, may_writepage, gfp_flags, classzone_idx)
147 );
148
149 DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template,
150
151         TP_PROTO(unsigned long nr_reclaimed),
152
153         TP_ARGS(nr_reclaimed),
154
155         TP_STRUCT__entry(
156                 __field(        unsigned long,  nr_reclaimed    )
157         ),
158
159         TP_fast_assign(
160                 __entry->nr_reclaimed   = nr_reclaimed;
161         ),
162
163         TP_printk("nr_reclaimed=%lu", __entry->nr_reclaimed)
164 );
165
166 DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_direct_reclaim_end,
167
168         TP_PROTO(unsigned long nr_reclaimed),
169
170         TP_ARGS(nr_reclaimed)
171 );
172
173 DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_reclaim_end,
174
175         TP_PROTO(unsigned long nr_reclaimed),
176
177         TP_ARGS(nr_reclaimed)
178 );
179
180 DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_softlimit_reclaim_end,
181
182         TP_PROTO(unsigned long nr_reclaimed),
183
184         TP_ARGS(nr_reclaimed)
185 );
186
187 TRACE_EVENT(mm_shrink_slab_start,
188         TP_PROTO(struct shrinker *shr, struct shrink_control *sc,
189                 long nr_objects_to_shrink, unsigned long pgs_scanned,
190                 unsigned long lru_pgs, unsigned long cache_items,
191                 unsigned long long delta, unsigned long total_scan),
192
193         TP_ARGS(shr, sc, nr_objects_to_shrink, pgs_scanned, lru_pgs,
194                 cache_items, delta, total_scan),
195
196         TP_STRUCT__entry(
197                 __field(struct shrinker *, shr)
198                 __field(void *, shrink)
199                 __field(int, nid)
200                 __field(long, nr_objects_to_shrink)
201                 __field(gfp_t, gfp_flags)
202                 __field(unsigned long, pgs_scanned)
203                 __field(unsigned long, lru_pgs)
204                 __field(unsigned long, cache_items)
205                 __field(unsigned long long, delta)
206                 __field(unsigned long, total_scan)
207         ),
208
209         TP_fast_assign(
210                 __entry->shr = shr;
211                 __entry->shrink = shr->scan_objects;
212                 __entry->nid = sc->nid;
213                 __entry->nr_objects_to_shrink = nr_objects_to_shrink;
214                 __entry->gfp_flags = sc->gfp_mask;
215                 __entry->pgs_scanned = pgs_scanned;
216                 __entry->lru_pgs = lru_pgs;
217                 __entry->cache_items = cache_items;
218                 __entry->delta = delta;
219                 __entry->total_scan = total_scan;
220         ),
221
222         TP_printk("%pF %p: nid: %d objects to shrink %ld gfp_flags %s pgs_scanned %ld lru_pgs %ld cache items %ld delta %lld total_scan %ld",
223                 __entry->shrink,
224                 __entry->shr,
225                 __entry->nid,
226                 __entry->nr_objects_to_shrink,
227                 show_gfp_flags(__entry->gfp_flags),
228                 __entry->pgs_scanned,
229                 __entry->lru_pgs,
230                 __entry->cache_items,
231                 __entry->delta,
232                 __entry->total_scan)
233 );
234
235 TRACE_EVENT(mm_shrink_slab_end,
236         TP_PROTO(struct shrinker *shr, int nid, int shrinker_retval,
237                 long unused_scan_cnt, long new_scan_cnt, long total_scan),
238
239         TP_ARGS(shr, nid, shrinker_retval, unused_scan_cnt, new_scan_cnt,
240                 total_scan),
241
242         TP_STRUCT__entry(
243                 __field(struct shrinker *, shr)
244                 __field(int, nid)
245                 __field(void *, shrink)
246                 __field(long, unused_scan)
247                 __field(long, new_scan)
248                 __field(int, retval)
249                 __field(long, total_scan)
250         ),
251
252         TP_fast_assign(
253                 __entry->shr = shr;
254                 __entry->nid = nid;
255                 __entry->shrink = shr->scan_objects;
256                 __entry->unused_scan = unused_scan_cnt;
257                 __entry->new_scan = new_scan_cnt;
258                 __entry->retval = shrinker_retval;
259                 __entry->total_scan = total_scan;
260         ),
261
262         TP_printk("%pF %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d",
263                 __entry->shrink,
264                 __entry->shr,
265                 __entry->nid,
266                 __entry->unused_scan,
267                 __entry->new_scan,
268                 __entry->total_scan,
269                 __entry->retval)
270 );
271
272 DECLARE_EVENT_CLASS(mm_vmscan_lru_isolate_template,
273
274         TP_PROTO(int classzone_idx,
275                 int order,
276                 unsigned long nr_requested,
277                 unsigned long nr_scanned,
278                 unsigned long nr_taken,
279                 isolate_mode_t isolate_mode,
280                 int file),
281
282         TP_ARGS(classzone_idx, order, nr_requested, nr_scanned, nr_taken, isolate_mode, file),
283
284         TP_STRUCT__entry(
285                 __field(int, classzone_idx)
286                 __field(int, order)
287                 __field(unsigned long, nr_requested)
288                 __field(unsigned long, nr_scanned)
289                 __field(unsigned long, nr_taken)
290                 __field(isolate_mode_t, isolate_mode)
291                 __field(int, file)
292         ),
293
294         TP_fast_assign(
295                 __entry->classzone_idx = classzone_idx;
296                 __entry->order = order;
297                 __entry->nr_requested = nr_requested;
298                 __entry->nr_scanned = nr_scanned;
299                 __entry->nr_taken = nr_taken;
300                 __entry->isolate_mode = isolate_mode;
301                 __entry->file = file;
302         ),
303
304         TP_printk("isolate_mode=%d classzone=%d order=%d nr_requested=%lu nr_scanned=%lu nr_taken=%lu file=%d",
305                 __entry->isolate_mode,
306                 __entry->classzone_idx,
307                 __entry->order,
308                 __entry->nr_requested,
309                 __entry->nr_scanned,
310                 __entry->nr_taken,
311                 __entry->file)
312 );
313
314 DEFINE_EVENT(mm_vmscan_lru_isolate_template, mm_vmscan_lru_isolate,
315
316         TP_PROTO(int classzone_idx,
317                 int order,
318                 unsigned long nr_requested,
319                 unsigned long nr_scanned,
320                 unsigned long nr_taken,
321                 isolate_mode_t isolate_mode,
322                 int file),
323
324         TP_ARGS(classzone_idx, order, nr_requested, nr_scanned, nr_taken, isolate_mode, file)
325
326 );
327
328 DEFINE_EVENT(mm_vmscan_lru_isolate_template, mm_vmscan_memcg_isolate,
329
330         TP_PROTO(int classzone_idx,
331                 int order,
332                 unsigned long nr_requested,
333                 unsigned long nr_scanned,
334                 unsigned long nr_taken,
335                 isolate_mode_t isolate_mode,
336                 int file),
337
338         TP_ARGS(classzone_idx, order, nr_requested, nr_scanned, nr_taken, isolate_mode, file)
339
340 );
341
342 TRACE_EVENT(mm_vmscan_writepage,
343
344         TP_PROTO(struct page *page),
345
346         TP_ARGS(page),
347
348         TP_STRUCT__entry(
349                 __field(unsigned long, pfn)
350                 __field(int, reclaim_flags)
351         ),
352
353         TP_fast_assign(
354                 __entry->pfn = page_to_pfn(page);
355                 __entry->reclaim_flags = trace_reclaim_flags(page);
356         ),
357
358         TP_printk("page=%p pfn=%lu flags=%s",
359                 pfn_to_page(__entry->pfn),
360                 __entry->pfn,
361                 show_reclaim_flags(__entry->reclaim_flags))
362 );
363
364 TRACE_EVENT(mm_vmscan_lru_shrink_inactive,
365
366         TP_PROTO(int nid,
367                 unsigned long nr_scanned, unsigned long nr_reclaimed,
368                 int priority, int file),
369
370         TP_ARGS(nid, nr_scanned, nr_reclaimed, priority, file),
371
372         TP_STRUCT__entry(
373                 __field(int, nid)
374                 __field(unsigned long, nr_scanned)
375                 __field(unsigned long, nr_reclaimed)
376                 __field(int, priority)
377                 __field(int, reclaim_flags)
378         ),
379
380         TP_fast_assign(
381                 __entry->nid = nid;
382                 __entry->nr_scanned = nr_scanned;
383                 __entry->nr_reclaimed = nr_reclaimed;
384                 __entry->priority = priority;
385                 __entry->reclaim_flags = trace_shrink_flags(file);
386         ),
387
388         TP_printk("nid=%d nr_scanned=%ld nr_reclaimed=%ld priority=%d flags=%s",
389                 __entry->nid,
390                 __entry->nr_scanned, __entry->nr_reclaimed,
391                 __entry->priority,
392                 show_reclaim_flags(__entry->reclaim_flags))
393 );
394
395 #endif /* _TRACE_VMSCAN_H */
396
397 /* This part must be outside protection */
398 #include <trace/define_trace.h>