mm: cma: add trace events for CMA allocations and freeings
Subsystems (3)
PATCH 1/1 mm: cma: add trace events for CMA allocations and freeings
Add trace events for cma_alloc() and cma_release().
The cma_alloc tracepoint is used both for successful and failed allocations, in case of allocation failure pfn=-1UL is stored and printed.
---
Took out from the patch set "mm: cma: add some debug information for CMA" v4
(http://thread.gmane.org/gmane.linux.kernel.mm/129903) because of probable uselessness of the rest of the patches.
Changes from the version from the patch set:
- Constify the struct page * parameter passed to the tracepoints.
- Pass both pfn and struct page * to the tracepoints to decrease unnecessary pfn_to_page() and page_to_pfn() calls and avoid using them in TP_printk.
- Store and print pfn=-1UL instead of pfn=0, because 0th pfn can truly exist on some architectures.
include/trace/events/cma.h | 63 ++++++++++++++++++++++++++++++++++++++++++++++ mm/cma.c | 5 ++++ 2 files changed, 68 insertions(+) create mode 100644 include/trace/events/cma.h
include/trace/events/cma.h new file +63 -0
@@ -0,0 +1,63 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM cma + +#if !defined(_TRACE_CMA_H) || defined(TRACE_HEADER_MULTI_READ ) +#define _TRACE_CMA_H + +#include <linux/types.h> +#include <linux/tracepoint.h> + +TRACE_EVENT (cma_alloc, + + TP_PROTO(unsigned long pfn, const struct page *page, + unsigned int count), + +TP_ARGS (pfn, page, count), + +TP_STRUCT__entry ( + __field(unsigned long, pfn) + __field(const struct page *, page) + __field(unsigned int, count) + ), + +TP_fast_assign ( + __entry->pfn = pfn; + __entry->page = page; + __entry->count = count; + ), + +TP_printk ("pfn=%lx page=%p count=%u" , + __entry->pfn, + __entry->page, + __entry->count) +); + +TRACE_EVENT (cma_release, + + TP_PROTO(unsigned long pfn, const struct page *page, + unsigned int count), + +TP_ARGS (pfn, page, count), + +TP_STRUCT__entry ( + __field(unsigned long, pfn) + __field(const struct page *, page) + __field(unsigned int, count) + ), + +TP_fast_assign ( + __entry->pfn = pfn; + __entry->page = page; + __entry->count = count; + ), + +TP_printk ("pfn=%lx page=%p count=%u" , + __entry->pfn, + __entry->page, + __entry->count) +); + +#endif /* _TRACE_CMA_H */ + +/* This part must be outside protection */ +#include <trace/define_trace.h>
mm/cma.c +5 -0
@@ -23,6 +23,7 @@# define DEBUG #endif #endif +#define CREATE_TRACE_POINTS #include <linux/memblock.h> #include <linux/err.h>
@@ -34,6 +35,7 @@#include <linux/cma.h> #include <linux/highmem.h> #include <linux/io.h> +#include <trace/events/cma.h> #include "cma.h"
@@ -414,6 +416,8 @@ struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align) start = bitmap_no + mask +1 ; } +trace_cma_alloc (page ? pfn :-1UL , page, count); +pr_debug ("%s(): returned %p\n" , __func__, page);return page; }
@@ -446,6 +450,7 @@ bool cma_release(struct cma *cma, const struct page *pages, unsigned int count)free_contig_range (pfn, count);cma_clear_bitmap (cma, pfn, count); +trace_cma_release (pfn, pages, count);return true; }
Signature · 7 lines
2.1.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Hello,
Quoted 11 lines · Stefan Strogin
Add trace events for
cma_alloc()andcma_release().The
cma_alloctracepoint is used both for successful and failed allocations, in case of allocation failure pfn=-1UL is stored and printed.Signed-off-by Stefan Strogin <[email protected]>---
Took out from the patch set "mm: cma: add some debug information for CMA" v4
(http://thread.gmane.org/gmane.linux.kernel.mm/129903) because of probable uselessness of the rest of the patches.
I think that patch 5/5 in previous submission is handy and simple to merge. Although we can calculate it by using bitmap, it would be good to get that information(used size and maxchunk size) directly.
mm/cma.c struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align) · line 420
Quoted 6 lines
mm/cma.c +2
-0@@ -414,6 +416,8 @@ struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align) start = bitmap_no + mask +1 ; } +trace_cma_alloc (page ? pfn :-1UL , page, count); +
I think that tracing align is also useful.
Is there any reason not to include it?
Thanks.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Hello Joonsoo,
Quoted 11 lines · Joonsoo Kim
Hello,
Quoted 8 lines · Stefan Strogin
Add trace events for
cma_alloc()andcma_release().The
cma_alloctracepoint is used both for successful and failed allocations, in case of allocation failure pfn=-1UL is stored and printed.Signed-off-by Stefan Strogin <[email protected]>---
Quoted 8 lines
Quoted 3 lines
Took out from the patch set "mm: cma: add some debug information for CMA" v4
(http://thread.gmane.org/gmane.linux.kernel.mm/129903) because of probable uselessness of the rest of the patches.I think that patch 5/5 in previous submission is handy and simple to merge. Although we can calculate it by using bitmap, it would be good to get that information(used size and maxchunk size) directly.
Well, then I can send the patch 5/5 once more, this time singly.
Quoted 10 lines
mm/cma.c struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align) · line 420
Quoted 7 lines
mm/cma.c +2
-0@@ -414,6 +416,8 @@ struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align) start = bitmap_no + mask +1 ; } +trace_cma_alloc (page ? pfn :-1UL , page, count); +I think that tracing align is also useful.
Is there any reason not to include it?
In our case (DMA) alignment is easily calculated from the allocation size and CONFIG_CMA_ALIGNMENT. But I think you're right, e.g. it may be not so obvious on powerpc kvm? Anyway it won't be a shortcoming if we trace 'align' too.
Quoted 2 lines
Thanks.
Thank you for the reply.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 1/1 mm-cma-add-trace-events-for-cma-allocations-and-freeings-fix
Trace 'align' too in cma_alloc trace event.
--- include/trace/events/cma.h | 11 +++++++---- mm/cma.c | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-)
include/trace/events/cma.h +7 -4
@@ -10,26 +10,29 @@TRACE_EVENT (cma_alloc, TP_PROTO(unsigned long pfn, const struct page *page, - unsigned int count), + unsigned int count, unsigned int align), -TP_ARGS (pfn, page, count), +TP_ARGS (pfn, page, count, align),TP_STRUCT__entry ( __field(unsigned long, pfn) __field(const struct page *, page) __field(unsigned int, count) + __field(unsigned int, align) ),TP_fast_assign ( __entry->pfn = pfn; __entry->page = page; __entry->count = count; + __entry->align = align; ), -TP_printk ("pfn=%lx page=%p count=%u" , +TP_printk ("pfn=%lx page=%p count=%u align=%u" , __entry->pfn, __entry->page, - __entry->count) + __entry->count, + __entry->align) ); TRACE_EVENT(cma_release,
mm/cma.c +1 -1
@@ -416,7 +416,7 @@ struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align) start = bitmap_no + mask +1 ; } -trace_cma_alloc (page ? pfn :-1UL , page, count); +trace_cma_alloc (page ? pfn :-1UL , page, count, align);pr_debug ("%s(): returned %p\n" , __func__, page);return page;
Signature · 7 lines
2.1.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>