From: Christoph Hellwig on
Hmm, thinking about it a bit more, what do you trace events give us that
the event based syscall tracer doesn't?

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Steven Rostedt on
On Fri, 2010-07-09 at 16:53 +0100, Eric B Munson wrote:
> As requested by Peter Zijlstra, this patch builds on my earlier patch
> and adds the corresponding trace points to mmap and brk.
>
> Signed-off-by: Eric B Munson <emunson(a)mgebm.net>
> ---
> include/trace/events/mm.h | 38 ++++++++++++++++++++++++++++++++++++++
> mm/mmap.c | 10 +++++++++-
> 2 files changed, 47 insertions(+), 1 deletions(-)
>
> diff --git a/include/trace/events/mm.h b/include/trace/events/mm.h
> index c3a3857..1563988 100644
> --- a/include/trace/events/mm.h
> +++ b/include/trace/events/mm.h
> @@ -24,6 +24,44 @@ TRACE_EVENT(munmap,
> TP_printk("unmapping %u bytes at %lu\n", __entry->len, __entry->start)
> );
>
> +TRACE_EVENT(brk,
> + TP_PROTO(unsigned long addr, unsigned long len),
> +
> + TP_ARGS(addr, len),
> +
> + TP_STRUCT__entry(
> + __field(unsigned long, addr)
> + __field(unsigned long, len)
> + ),
> +
> + TP_fast_assign(
> + __entry->addr = addr;
> + __entry->len = len;
> + ),
> +
> + TP_printk("brk mmapping %lu bytes at %lu\n", __entry->len,
> + __entry->addr)
> +);
> +
> +TRACE_EVENT(mmap,
> + TP_PROTO(unsigned long addr, unsigned long len),
> +
> + TP_ARGS(addr, len),
> +
> + TP_STRUCT__entry(
> + __field(unsigned long, addr)
> + __field(unsigned long, len)
> + ),
> +
> + TP_fast_assign(
> + __entry->addr = addr;
> + __entry->len = len;
> + ),
> +
> + TP_printk("mmapping %lu bytes at %lu\n", __entry->len,
> + __entry->addr)
> +);
> +

Please convert the above two into DECLARE_EVENT_CLASS() and
DEFINE_EVENT(). You don't need the "mapping" and "brk mapping" in the
TP_printk() format since the event name will be displayed as well to
differentiate the two.

Thanks,

-- Steve

> #endif /* _TRACE_MM_H_ */
>
> /* This part must be outside protection */
> diff --git a/mm/mmap.c b/mm/mmap.c
> index 0775a30..252e3e0 100644
> --- a/mm/mmap.c
> +++ b/mm/mmap.c
> @@ -952,6 +952,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
> unsigned int vm_flags;
> int error;
> unsigned long reqprot = prot;
> + unsigned long ret;
>
> /*
> * Does the application expect PROT_READ to imply PROT_EXEC?
> @@ -1077,7 +1078,12 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
> if (error)
> return error;
>
> - return mmap_region(file, addr, len, flags, vm_flags, pgoff);
> + ret = mmap_region(file, addr, len, flags, vm_flags, pgoff);
> +
> + if (!(ret & ~PAGE_MASK))
> + trace_mmap(addr, len);
> +
> + return ret;
> }
> EXPORT_SYMBOL(do_mmap_pgoff);
>
> @@ -2218,6 +2224,8 @@ out:
> if (!mlock_vma_pages_range(vma, addr, addr + len))
> mm->locked_vm += (len >> PAGE_SHIFT);
> }
> +
> + trace_brk(addr, len);
> return addr;
> }
>


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: KOSAKI Motohiro on
> Hmm, thinking about it a bit more, what do you trace events give us that
> the event based syscall tracer doesn't?

Yup. I think we need two tracepoint.

1) need to know userland argument.
-> syscall tracer
2) need to know actual vma change.
-> need to trace more low layer


As I said, if userland app have following code,

mmap(0x10000, PROT_READ|PROT_WRITE)
mmap(0x10000, PROT_NONE)

second mmap implicitly unmap firt mmap region and map another region.
so if we want to track munmap activity, syscall exiting point is not
so good place. we need to trace per-vma activity.

btw, perf_event_mmap() already take vma argument.





--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/