This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi Wenji,Yes, it will search the existing entry before adding entry to list.
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?
Regards, Wenji
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |