discussion about registering task_finder in user space probing

Mark Wielaard mjw@redhat.com
Tue Mar 24 11:03:00 GMT 2009


Hi Wenji,

On Tue, 2009-03-24 at 17:06 +0800, Wenji Huang wrote:
> I found our task_finder embedded in each stap_uprob_spec even it is 
> same. That will cause many times registering similar task_finder.
> [...]
>    for (i=0; i<220; i++) {
>      struct stap_uprobe_spec *sups = & stap_uprobe_specs[i];
>      probe_point = sups->pp;
>      if (sups->finder.pathname) sups->finder.callback = & 
> stap_uprobe_process_found;
>      else if (sups->pathname) sups->finder.vm_callback = & 
> stap_uprobe_vmchange_found;
>      rc = stap_register_task_finder_target (& sups->finder);
>      if (rc) break;
>    }
> [snip]
> 
> So we will have 220 times registering similar task_finder. I think
> the probe point is irrelevant to task_finder. Can we just keep only one 
> and invoke callbacks to register all the stap_uprobes[i] once interested 
> process found?

I was just looking at this since I am doing something similar on the
pr6866 branch (not just for uprobes, but also for utrace and itrace
probes). My idea was to have stap_register_task_finder_target ()
recognize when the callback is already registered for that particular
pathname/pid. stap_register_task_finder_target () already avoids
duplication when it sees an existing entry for pathname/pid. So where
there is now a

    // Add this target to the callback list for this task.
    list_add_tail(&new_tgt->callback_list, &tgt->callback_list_head);

We could do a lookup of whether the callback is already in the list and
only add it when it isn't already there. What do you think?

Cheers,

Mark



More information about the Systemtap mailing list