discussion about registering task_finder in user space probing
Wenji Huang
wenji.huang@oracle.com
Tue Mar 24 12:22:00 GMT 2009
Hi Mark,
Thanks for your reply.
Mark Wielaard wrote:
> 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
Yes, it will search the existing entry before adding entry to list.
> 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?
Sounds good. Current code is harmless, but it's better if we could make
it more graceful.
Regards,
Wenji
More information about the Systemtap
mailing list