Messages in this thread | | | Date | Tue, 16 Jun 2009 10:09:24 +0200 | From | Ingo Molnar <> | Subject | Re: [tip:perfcounters/core] perf record/report: Add call graph / call chain profiling |
| |
* Frederic Weisbecker <fweisbec@gmail.com> wrote:
> > @@ -43,11 +44,19 @@ static int full_paths; > > static unsigned long page_size; > > static unsigned long mmap_window = 32; > > > > +struct ip_chain_event { > > + __u16 nr; > > Is it needed to have the nr encoded in the ip_chain? We can > already find it by doing kernel + user.
That's a good observation. Since we havent exposed the call-chain bits in upstream version of the tools, we could still improve on this a little bit.
I think the best would be context separators which occupy a special address in some quiet corner of the 64-bit address space.
That way we'd have streams of u64 entries:
ip-1 ip-2 CONTEXT_IRQ ip-3 ip-4 CONTEXT_SYSCALL ip-5 ip-6
The following contexts IDs would be useful:
CONTEXT_NMI CONTEXT_HARDIRQ CONTEXT_SOFTIRQ CONTEXT_KERNEL CONTEXT_USER CONTEXT_GUEST_NMI CONTEXT_GUEST_HARDIRQ CONTEXT_GUEST_SOFTIRQ CONTEXT_GUEST_KERNEL CONTEXT_GUEST_USER
The context IDs would occupy some rare and unlikely-to-be-allocated-soon corner of the address space - say startig at 0x8765432112345000. (and real RIPs would be filtered and nudged just outside that space of a handful IDs.)
The advantage would be that this is infinitely flexible and extensible - any level of nesting can be expressed without having separate fields for nr_hv_guest_irq, etc. It's also pretty fast to parse.
Hm?
Ingo
| |