Messages in this thread | | | Subject | Re: Tracing thread name (was: ltt comm tracking) | From | Peter Zijlstra <> | Date | Mon, 03 Aug 2009 16:28:27 +0200 |
| |
On Mon, 2009-08-03 at 09:48 -0400, Mathieu Desnoyers wrote: > * Matthieu CASTET (matthieu.castet@parrot.com) wrote: > > Hi, > > > > I use ltt on a 2.6.27 on an arm architecture. > > It works quite well, but I have a minor problem : > > > > my application sets thread name with prctl PR_SET_NAME. But ltt viewer > > doesn't seem to saw it. > > > > Hrm, I guess we might want to instrument set_task_comm as you propose to > get the correct process name, but if this gets us the thread name, I > think it's only an implementation side-effect: > > If I look at the man page: > > PRCTL(2) > > PR_SET_NAME (since Linux 2.6.9) > Set the process name for the calling process, using the value in > the location pointed to by (char *) arg2. The name can be up to > 16 bytes long, and should be null terminated if it contains > fewer bytes. > > It seems to officially set the process name, not thread name.
Then the man page is wrong, it really only sets the task (thread) name.
> The way LTTng handles thread names is by adding a userspace "thread > branding" event. It should be executed at thread startup. The downside > of the current LTTng approach is that we cannot know the name of threads > already executing before we started tracing. > > Ideally, having something like prctl PR_SET/GET_THREAD_NAME would > probably make sense.
Going by the current behaviour, you'd need to add process name.
fs/exec.c:
void set_task_comm(struct task_struct *tsk, char *buf) { task_lock(tsk); strlcpy(tsk->comm, buf, sizeof(tsk->comm)); task_unlock(tsk); perf_counter_comm(tsk); }
| |