On Fri, 29 Aug 2025 13:54:08 -0700 Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > On Fri, 29 Aug 2025 at 11:11, Steven Rostedt <rostedt@xxxxxxxxxxx> wrote: > > > > The idea is this (pseudo code): > > > > user_stack_trace() { > > foreach vma in each stack frame: > > key = hash(vma->vm_file); > > if (!lookup(key)) { > > trace_file_map(key, generate_path(vma), generate_buildid(vma)); > > add_into_hash(key); > > } > > } > > I see *zero* advantage to this. It's only doing stupid things that > cost extra, and only because you don't want to do the smart thing that > I've explained extensively that has *NONE* of these overheads. > > Just do the parsing at parse time. End of story. What does "parsing at parse time" mean? > > Or don't do this at all. Justy forget the whole thing entirely. Throw > the patch that started this all away, and just DON'T DO THIS. Maybe we are talking past each other. When I get a user space stack trace, I get the virtual addresses of each of the user space functions. This is saved into an user stack trace event in the ring buffer that usually gets mapped right to a file for post processing. I still do the: user_stack_trace() { foreach addr each stack frame vma = vma_lookup(mm, addr); callchain[i++] = (addr - vma->vm_start) + (vma->vm_pgoff << PAGE_SHIFT); Are you saying that this shouldn't be done either? And to just record the the virtual address in the chain and the vma->vm_start and vma->vm_pgoff in another event? Where the post processing could do the math? This other event could also record the path and build id. The question is, when do I record this vma event? How do I know it's new? I can't rely too much on other events (like mmap) and such as those events may have occurred before the tracing started. I have to have some way to know if the vma has been saved previously, which was why I had the hash lookup, and only add vma's on new instances. My main question is, when do I record the vma data event? -- Steve