Hello Gioh, If you can use ftrace and perftool, you can also put probes on caller site. perf-probe will give you source-code level probes. Or, just trace kmalloc event with ftrace stacktrace option, which gives you caller information so that you can filter your driver by postprocessing.
Thank you, (2014/10/14 11:16), Gioh Kim wrote: > > Hi, > > I am trying to find a way to make statistics for memory allocation of my > device driver. > I want to know how much memory it allocates and how many times it calls > kmalloc(). > > So I am considering to use kprobe but I think it doesn't provide a way to > identify who makes the probe point. > Can I distinguish kmalloc() calling only from my driver? > > For example I think it could be like this: > > diff --git a/samples/kprobes/kretprobe_example.c > b/samples/kprobes/kretprobe_example.c > index 1041b67..5322e0a 100644 > --- a/samples/kprobes/kretprobe_example.c > +++ b/samples/kprobes/kretprobe_example.c > @@ -32,6 +32,7 @@ MODULE_PARM_DESC(func, "Function to kretprobe; this module > will report the" > > /* per-instance private data */ > struct my_data { > + unsigned long signature; > ktime_t entry_stamp; > }; > > @@ -43,8 +44,10 @@ static int entry_handler(struct kretprobe_instance *ri, > struct pt_regs *regs) > if (!current->mm) > return 1; /* Skip kernel threads */ > > - data = (struct my_data *)ri->data; > - data->entry_stamp = ktime_get(); > + if (signature == 0xabcdabcd) { > + data = (struct my_data *)ri->data; > + data->entry_stamp = ktime_get(); > + } > return 0; > } > > @@ -60,10 +63,12 @@ static int ret_handler(struct kretprobe_instance *ri, > struct pt_regs *regs) > s64 delta; > ktime_t now; > > - now = ktime_get(); > - delta = ktime_to_ns(ktime_sub(now, data->entry_stamp)); > - printk(KERN_INFO "%s returned %d and took %lld ns to execute\n", > - func_name, retval, (long long)delta); > + if (signature == 0xabcdabcd) { > + now = ktime_get(); > + delta = ktime_to_ns(ktime_sub(now, data->entry_stamp)); > + printk(KERN_INFO "%s returned %d and took %lld ns to > execute\n", > + func_name, retval, (long long)delta); > + } > return 0; > } > > -- Masami HIRAMATSU Software Platform Research Dept. Linux Technology Research Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu...@hitachi.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/