From 8b83133133cfa305193f093ceba28a95d31381eb Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Thu, 19 Mar 2015 12:55:48 -0400 Subject: [PATCH] Fix: kmem instrumentation: mm_page_alloc extfrag change_ownership field Linux kernel 3.12.30 and onward changes the parameter received by this callback. It's the same type, but the meaning differs. This is why it did compile fine, but the data gathered did not really represent change_ownership. This change has been introduced in the Linux kernel by this commit: commit 52c8f6a5aeb0bdd396849ecaa72d96f8175528f5 Author: KOSAKI Motohiro Date: Tue Nov 12 15:08:19 2013 -0800 mm: get rid of unnecessary overhead of trace_mm_page_alloc_extfrag() Signed-off-by: Mathieu Desnoyers --- instrumentation/events/lttng-module/kmem.h | 44 +++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/instrumentation/events/lttng-module/kmem.h b/instrumentation/events/lttng-module/kmem.h index 203a19c..cde2a20 100644 --- a/instrumentation/events/lttng-module/kmem.h +++ b/instrumentation/events/lttng-module/kmem.h @@ -286,7 +286,49 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_PRINT(mm_page, mm_page_pcpu_drain, __entry->order, __entry->migratetype) ) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,30)) + +LTTNG_TRACEPOINT_EVENT(mm_page_alloc_extfrag, + + TP_PROTO(struct page *page, + int alloc_order, int fallback_order, + int alloc_migratetype, int fallback_migratetype, int new_migratetype), + + TP_ARGS(page, + alloc_order, fallback_order, + alloc_migratetype, fallback_migratetype, new_migratetype), + + TP_STRUCT__entry( + __field_hex( struct page *, page ) + __field( int, alloc_order ) + __field( int, fallback_order ) + __field( int, alloc_migratetype ) + __field( int, fallback_migratetype ) + __field( int, change_ownership ) + ), + + TP_fast_assign( + tp_assign(page, page) + tp_assign(alloc_order, alloc_order) + tp_assign(fallback_order, fallback_order) + tp_assign(alloc_migratetype, alloc_migratetype) + tp_assign(fallback_migratetype, fallback_migratetype) + tp_assign(change_ownership, (new_migratetype == alloc_migratetype)) + ), + + 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", + __entry->page, + page_to_pfn(__entry->page), + __entry->alloc_order, + __entry->fallback_order, + pageblock_order, + __entry->alloc_migratetype, + __entry->fallback_migratetype, + __entry->fallback_order < pageblock_order, + __entry->change_ownership) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) LTTNG_TRACEPOINT_EVENT(mm_page_alloc_extfrag, From 2cf0c2ca8759ed6103b5aab149efea34e6986818 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Thu, 19 Mar 2015 13:02:38 -0400 Subject: [PATCH] Fix: kmem instrumentation update for mm_page_alloc_extfrag kernel 3.19.2+ This commit introduces an API change for mm_page_alloc_extfrag instrumentation: commit cdf476685b5c9dcd20f0305791bd60212cace25d Author: Vlastimil Babka Date: Wed Feb 11 15:28:15 2015 -0800 mm: when stealing freepages, also take pages created by splitting buddy page Signed-off-by: Mathieu Desnoyers --- instrumentation/events/lttng-module/kmem.h | 45 +++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/instrumentation/events/lttng-module/kmem.h b/instrumentation/events/lttng-module/kmem.h index cde2a20..3782ac6 100644 --- a/instrumentation/events/lttng-module/kmem.h +++ b/instrumentation/events/lttng-module/kmem.h @@ -286,7 +286,50 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_PRINT(mm_page, mm_page_pcpu_drain, __entry->order, __entry->migratetype) ) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,30)) +#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,2)) || LTTNG_KERNEL_RANGE(3,14,36, 3,15,0)) || LTTNG_KERNEL_RANGE(3,18,10, 3,19,0)) + +LTTNG_TRACEPOINT_EVENT(mm_page_alloc_extfrag, + + TP_PROTO(struct page *page, + int alloc_order, int fallback_order, + int alloc_migratetype, int fallback_migratetype), + + TP_ARGS(page, + alloc_order, fallback_order, + alloc_migratetype, fallback_migratetype), + + TP_STRUCT__entry( + __field_hex( struct page *, page ) + __field( int, alloc_order ) + __field( int, fallback_order ) + __field( int, alloc_migratetype ) + __field( int, fallback_migratetype ) + __field( int, change_ownership ) + ), + + TP_fast_assign( + tp_assign(page, page) + tp_assign(alloc_order, alloc_order) + tp_assign(fallback_order, fallback_order) + tp_assign(alloc_migratetype, alloc_migratetype) + tp_assign(fallback_migratetype, fallback_migratetype) + tp_assign(change_ownership, + (alloc_migratetype == get_pageblock_migratetype(page))) + ), + + 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", + __entry->page, + page_to_pfn(__entry->page), + __entry->alloc_order, + __entry->fallback_order, + pageblock_order, + __entry->alloc_migratetype, + __entry->fallback_migratetype, + __entry->fallback_order < pageblock_order, + __entry->change_ownership) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,30)) LTTNG_TRACEPOINT_EVENT(mm_page_alloc_extfrag,