Prev: [PATCH 1/2] usb gadget: don't save bind callback in struct usb_gadget_driver
Next: BTS based perf user callchains
From: Frederic Weisbecker on 2 Aug 2010 14:40 Hi, As you may know there is an issue with user stacktraces: it requires userspace apps to be built with frame pointers. So there is something we can try: dump a piece of the top user stack page each time we have an event hit and let the tools deal with that later using the dwarf informations. But before trying that, which might require heavy copies, I would like to try something based on BTS. The idea is to look at the branch buffer and only pick addresses of branches that originated from "call" instructions. So we want BTS activated, only in user ring, without the need of interrupts once we reach the limit of the buffer, we can just run in a kind of live mode and read on need. This could be a secondary perf event that has no mmap buffer. Something only used by the kernel internally by others true perf events in a given context. Primary perf events can then read on this BTS buffer when they want. Now there are two ways: - record the whole branch buffer each time we overflow on another perf event and let post processing userspace deal with "call" instruction filtering to build the stacktrace on top of the branch trace. - do the "call" filtering on record time. That requires to inspect each recorded branches and look at the instruction content from the fast path. I don't know which solution could be the faster one. I'm not even sure that will work. Also, while looking at the BTS implementation in perf, I see we have one BTS buffer per cpu. But that doesn't look right as the code flow is not linear per cpu but per task. Hence I suspect we need one BTS buffer per task. But may be someone tried that and encountered a problem? Tell me your feelings. Thanks. -- 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/ |