diff options
| author | Namhyung Kim <namhyung@kernel.org> | 2015-04-06 01:36:09 -0400 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-04-13 10:44:52 -0400 |
| commit | 9fdd8a875c6f3b02af48d5fa426206ca009b2b06 (patch) | |
| tree | 9a37cc4e8fc35c333bdfe35075bb3ba1b82bbf18 /include/trace | |
| parent | 066450be419fa48007a9f29e19828f2a86198754 (diff) | |
tracing, mm: Record pfn instead of pointer to struct page
The struct page is opaque for userspace tools, so it'd be better to save
pfn in order to identify page frames.
The textual output of $debugfs/tracing/trace file remains unchanged and
only raw (binary) data format is changed - but thanks to libtraceevent,
userspace tools which deal with the raw data (like perf and trace-cmd)
can parse the format easily. So impact on the userspace will also be
minimal.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Based-on-patch-by: Joonsoo Kim <js1304@gmail.com>
Acked-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/1428298576-9785-3-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'include/trace')
| -rw-r--r-- | include/trace/events/filemap.h | 8 | ||||
| -rw-r--r-- | include/trace/events/kmem.h | 42 | ||||
| -rw-r--r-- | include/trace/events/vmscan.h | 8 |
3 files changed, 29 insertions, 29 deletions
diff --git a/include/trace/events/filemap.h b/include/trace/events/filemap.h index 0421f49a20f7..42febb6bc1d5 100644 --- a/include/trace/events/filemap.h +++ b/include/trace/events/filemap.h | |||
| @@ -18,14 +18,14 @@ DECLARE_EVENT_CLASS(mm_filemap_op_page_cache, | |||
| 18 | TP_ARGS(page), | 18 | TP_ARGS(page), |
| 19 | 19 | ||
| 20 | TP_STRUCT__entry( | 20 | TP_STRUCT__entry( |
| 21 | __field(struct page *, page) | 21 | __field(unsigned long, pfn) |
| 22 | __field(unsigned long, i_ino) | 22 | __field(unsigned long, i_ino) |
| 23 | __field(unsigned long, index) | 23 | __field(unsigned long, index) |
| 24 | __field(dev_t, s_dev) | 24 | __field(dev_t, s_dev) |
| 25 | ), | 25 | ), |
| 26 | 26 | ||
| 27 | TP_fast_assign( | 27 | TP_fast_assign( |
| 28 | __entry->page = page; | 28 | __entry->pfn = page_to_pfn(page); |
| 29 | __entry->i_ino = page->mapping->host->i_ino; | 29 | __entry->i_ino = page->mapping->host->i_ino; |
| 30 | __entry->index = page->index; | 30 | __entry->index = page->index; |
| 31 | if (page->mapping->host->i_sb) | 31 | if (page->mapping->host->i_sb) |
| @@ -37,8 +37,8 @@ DECLARE_EVENT_CLASS(mm_filemap_op_page_cache, | |||
| 37 | TP_printk("dev %d:%d ino %lx page=%p pfn=%lu ofs=%lu", | 37 | TP_printk("dev %d:%d ino %lx page=%p pfn=%lu ofs=%lu", |
| 38 | MAJOR(__entry->s_dev), MINOR(__entry->s_dev), | 38 | MAJOR(__entry->s_dev), MINOR(__entry->s_dev), |
| 39 | __entry->i_ino, | 39 | __entry->i_ino, |
| 40 | __entry->page, | 40 | pfn_to_page(__entry->pfn), |
| 41 | page_to_pfn(__entry->page), | 41 | __entry->pfn, |
| 42 | __entry->index << PAGE_SHIFT) | 42 | __entry->index << PAGE_SHIFT) |
| 43 | ); | 43 | ); |
| 44 | 44 | ||
diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h index 4ad10baecd4d..81ea59812117 100644 --- a/include/trace/events/kmem.h +++ b/include/trace/events/kmem.h | |||
| @@ -154,18 +154,18 @@ TRACE_EVENT(mm_page_free, | |||
| 154 | TP_ARGS(page, order), | 154 | TP_ARGS(page, order), |
| 155 | 155 | ||
| 156 | TP_STRUCT__entry( | 156 | TP_STRUCT__entry( |
| 157 | __field( struct page *, page ) | 157 | __field( unsigned long, pfn ) |
| 158 | __field( unsigned int, order ) | 158 | __field( unsigned int, order ) |
| 159 | ), | 159 | ), |
| 160 | 160 | ||
| 161 | TP_fast_assign( | 161 | TP_fast_assign( |
| 162 | __entry->page = page; | 162 | __entry->pfn = page_to_pfn(page); |
| 163 | __entry->order = order; | 163 | __entry->order = order; |
| 164 | ), | 164 | ), |
| 165 | 165 | ||
| 166 | TP_printk("page=%p pfn=%lu order=%d", | 166 | TP_printk("page=%p pfn=%lu order=%d", |
| 167 | __entry->page, | 167 | pfn_to_page(__entry->pfn), |
| 168 | page_to_pfn(__entry->page), | 168 | __entry->pfn, |
| 169 | __entry->order) | 169 | __entry->order) |
| 170 | ); | 170 | ); |
| 171 | 171 | ||
| @@ -176,18 +176,18 @@ TRACE_EVENT(mm_page_free_batched, | |||
| 176 | TP_ARGS(page, cold), | 176 | TP_ARGS(page, cold), |
| 177 | 177 | ||
| 178 | TP_STRUCT__entry( | 178 | TP_STRUCT__entry( |
| 179 | __field( struct page *, page ) | 179 | __field( unsigned long, pfn ) |
| 180 | __field( int, cold ) | 180 | __field( int, cold ) |
| 181 | ), | 181 | ), |
| 182 | 182 | ||
| 183 | TP_fast_assign( | 183 | TP_fast_assign( |
| 184 | __entry->page = page; | 184 | __entry->pfn = page_to_pfn(page); |
| 185 | __entry->cold = cold; | 185 | __entry->cold = cold; |
| 186 | ), | 186 | ), |
| 187 | 187 | ||
| 188 | TP_printk("page=%p pfn=%lu order=0 cold=%d", | 188 | TP_printk("page=%p pfn=%lu order=0 cold=%d", |
| 189 | __entry->page, | 189 | pfn_to_page(__entry->pfn), |
| 190 | page_to_pfn(__entry->page), | 190 | __entry->pfn, |
| 191 | __entry->cold) | 191 | __entry->cold) |
| 192 | ); | 192 | ); |
| 193 | 193 | ||
| @@ -199,22 +199,22 @@ TRACE_EVENT(mm_page_alloc, | |||
| 199 | TP_ARGS(page, order, gfp_flags, migratetype), | 199 | TP_ARGS(page, order, gfp_flags, migratetype), |
| 200 | 200 | ||
| 201 | TP_STRUCT__entry( | 201 | TP_STRUCT__entry( |
| 202 | __field( struct page *, page ) | 202 | __field( unsigned long, pfn ) |
| 203 | __field( unsigned int, order ) | 203 | __field( unsigned int, order ) |
| 204 | __field( gfp_t, gfp_flags ) | 204 | __field( gfp_t, gfp_flags ) |
| 205 | __field( int, migratetype ) | 205 | __field( int, migratetype ) |
| 206 | ), | 206 | ), |
| 207 | 207 | ||
| 208 | TP_fast_assign( | 208 | TP_fast_assign( |
| 209 | __entry->page = page; | 209 | __entry->pfn = page ? page_to_pfn(page) : -1UL; |
| 210 | __entry->order = order; | 210 | __entry->order = order; |
| 211 | __entry->gfp_flags = gfp_flags; | 211 | __entry->gfp_flags = gfp_flags; |
| 212 | __entry->migratetype = migratetype; | 212 | __entry->migratetype = migratetype; |
| 213 | ), | 213 | ), |
| 214 | 214 | ||
| 215 | TP_printk("page=%p pfn=%lu order=%d migratetype=%d gfp_flags=%s", | 215 | TP_printk("page=%p pfn=%lu order=%d migratetype=%d gfp_flags=%s", |
| 216 | __entry->page, | 216 | __entry->pfn != -1UL ? pfn_to_page(__entry->pfn) : NULL, |
| 217 | __entry->page ? page_to_pfn(__entry->page) : 0, | 217 | __entry->pfn != -1UL ? __entry->pfn : 0, |
| 218 | __entry->order, | 218 | __entry->order, |
| 219 | __entry->migratetype, | 219 | __entry->migratetype, |
| 220 | show_gfp_flags(__entry->gfp_flags)) | 220 | show_gfp_flags(__entry->gfp_flags)) |
| @@ -227,20 +227,20 @@ DECLARE_EVENT_CLASS(mm_page, | |||
| 227 | TP_ARGS(page, order, migratetype), | 227 | TP_ARGS(page, order, migratetype), |
| 228 | 228 | ||
| 229 | TP_STRUCT__entry( | 229 | TP_STRUCT__entry( |
| 230 | __field( struct page *, page ) | 230 | __field( unsigned long, pfn ) |
| 231 | __field( unsigned int, order ) | 231 | __field( unsigned int, order ) |
| 232 | __field( int, migratetype ) | 232 | __field( int, migratetype ) |
| 233 | ), | 233 | ), |
| 234 | 234 | ||
| 235 | TP_fast_assign( | 235 | TP_fast_assign( |
| 236 | __entry->page = page; | 236 | __entry->pfn = page ? page_to_pfn(page) : -1UL; |
| 237 | __entry->order = order; | 237 | __entry->order = order; |
| 238 | __entry->migratetype = migratetype; | 238 | __entry->migratetype = migratetype; |
| 239 | ), | 239 | ), |
| 240 | 240 | ||
| 241 | TP_printk("page=%p pfn=%lu order=%u migratetype=%d percpu_refill=%d", | 241 | TP_printk("page=%p pfn=%lu order=%u migratetype=%d percpu_refill=%d", |
| 242 | __entry->page, | 242 | __entry->pfn != -1UL ? pfn_to_page(__entry->pfn) : NULL, |
| 243 | __entry->page ? page_to_pfn(__entry->page) : 0, | 243 | __entry->pfn != -1UL ? __entry->pfn : 0, |
| 244 | __entry->order, | 244 | __entry->order, |
| 245 | __entry->migratetype, | 245 | __entry->migratetype, |
| 246 | __entry->order == 0) | 246 | __entry->order == 0) |
| @@ -260,7 +260,7 @@ DEFINE_EVENT_PRINT(mm_page, mm_page_pcpu_drain, | |||
| 260 | TP_ARGS(page, order, migratetype), | 260 | TP_ARGS(page, order, migratetype), |
| 261 | 261 | ||
| 262 | TP_printk("page=%p pfn=%lu order=%d migratetype=%d", | 262 | TP_printk("page=%p pfn=%lu order=%d migratetype=%d", |
| 263 | __entry->page, page_to_pfn(__entry->page), | 263 | pfn_to_page(__entry->pfn), __entry->pfn, |
| 264 | __entry->order, __entry->migratetype) | 264 | __entry->order, __entry->migratetype) |
| 265 | ); | 265 | ); |
| 266 | 266 | ||
| @@ -275,7 +275,7 @@ TRACE_EVENT(mm_page_alloc_extfrag, | |||
| 275 | alloc_migratetype, fallback_migratetype), | 275 | alloc_migratetype, fallback_migratetype), |
| 276 | 276 | ||
| 277 | TP_STRUCT__entry( | 277 | TP_STRUCT__entry( |
| 278 | __field( struct page *, page ) | 278 | __field( unsigned long, pfn ) |
| 279 | __field( int, alloc_order ) | 279 | __field( int, alloc_order ) |
| 280 | __field( int, fallback_order ) | 280 | __field( int, fallback_order ) |
| 281 | __field( int, alloc_migratetype ) | 281 | __field( int, alloc_migratetype ) |
| @@ -284,7 +284,7 @@ TRACE_EVENT(mm_page_alloc_extfrag, | |||
| 284 | ), | 284 | ), |
| 285 | 285 | ||
| 286 | TP_fast_assign( | 286 | TP_fast_assign( |
| 287 | __entry->page = page; | 287 | __entry->pfn = page_to_pfn(page); |
| 288 | __entry->alloc_order = alloc_order; | 288 | __entry->alloc_order = alloc_order; |
| 289 | __entry->fallback_order = fallback_order; | 289 | __entry->fallback_order = fallback_order; |
| 290 | __entry->alloc_migratetype = alloc_migratetype; | 290 | __entry->alloc_migratetype = alloc_migratetype; |
| @@ -294,8 +294,8 @@ TRACE_EVENT(mm_page_alloc_extfrag, | |||
| 294 | ), | 294 | ), |
| 295 | 295 | ||
| 296 | TP_printk("page=%p pfn=%lu alloc_order=%d fallback_order=%d pageblock_order=%d alloc_migratetype=%d fallback_migratetype=%d fragmenting=%d change_ownership=%d", | 296 | TP_printk("page=%p pfn=%lu alloc_order=%d fallback_order=%d pageblock_order=%d alloc_migratetype=%d fallback_migratetype=%d fragmenting=%d change_ownership=%d", |
| 297 | __entry->page, | 297 | pfn_to_page(__entry->pfn), |
| 298 | page_to_pfn(__entry->page), | 298 | __entry->pfn, |
| 299 | __entry->alloc_order, | 299 | __entry->alloc_order, |
| 300 | __entry->fallback_order, | 300 | __entry->fallback_order, |
| 301 | pageblock_order, | 301 | pageblock_order, |
diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h index 69590b6ffc09..f66476b96264 100644 --- a/include/trace/events/vmscan.h +++ b/include/trace/events/vmscan.h | |||
| @@ -336,18 +336,18 @@ TRACE_EVENT(mm_vmscan_writepage, | |||
| 336 | TP_ARGS(page, reclaim_flags), | 336 | TP_ARGS(page, reclaim_flags), |
| 337 | 337 | ||
| 338 | TP_STRUCT__entry( | 338 | TP_STRUCT__entry( |
| 339 | __field(struct page *, page) | 339 | __field(unsigned long, pfn) |
| 340 | __field(int, reclaim_flags) | 340 | __field(int, reclaim_flags) |
| 341 | ), | 341 | ), |
| 342 | 342 | ||
| 343 | TP_fast_assign( | 343 | TP_fast_assign( |
| 344 | __entry->page = page; | 344 | __entry->pfn = page_to_pfn(page); |
| 345 | __entry->reclaim_flags = reclaim_flags; | 345 | __entry->reclaim_flags = reclaim_flags; |
| 346 | ), | 346 | ), |
| 347 | 347 | ||
| 348 | TP_printk("page=%p pfn=%lu flags=%s", | 348 | TP_printk("page=%p pfn=%lu flags=%s", |
| 349 | __entry->page, | 349 | pfn_to_page(__entry->pfn), |
| 350 | page_to_pfn(__entry->page), | 350 | __entry->pfn, |
| 351 | show_reclaim_flags(__entry->reclaim_flags)) | 351 | show_reclaim_flags(__entry->reclaim_flags)) |
| 352 | ); | 352 | ); |
| 353 | 353 | ||
