Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[linuxtools-dev] TMF Name of processes from LTTng kernel traces

Again along the lines of perfecting the display of processes states from kernel traces, I have another small suggestion. The code needed to convert event data to "state" information is simple and well localized. It is therefore fairly easy to leverage the infrastructure put in place by the TMF team to refine the control flow view display. As an example, my suggested improvement makes a noticeable change yet the patch is a one liner! If you have suggestions and ideas, we will be most interested in discussing possible further improvements.

I am tracing a shell script which does among other things "sleep 1; myprog". In the control flow view, we see the new process, for example 10192, called sh waiting for 1 second and then, on another line, a process named sleep with the same pid (10192) which comes out of waiting and terminates (lasting only a few miliseconds). This is rather counter-intuitive as sleep is not doing the sleep part. This is explained by the fact that the command name is taken from the sched_switch event. TMF thus only sees the new name long after the execve, when coming back from waiting; it then starts a new line for that process with the same pid but a new name.

One possibility is to change the name at the execve. However, the execve event contains the file name but not the (sometimes different) command name. My proposed change is to update the name at each sched_switch, thus in practice retaining the last command name seen for the process. Update means change the value for the whole interval, instead of Modify which keeps the old value up to now and changes for the new value after now. This one line change is provided at the message end.

Another possibility is to "modify" the name at each execve, using the "file name" which may differ from the command name, and to "update" with the correct command name at later sched_switch events. This would put on a separate line in the control flow view each different program executed, even if they are the same process.

diff --git a/lttng/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/internal/lttng2/kernel/core/stateprovider/CtfKernelStateInput.java b/lttng/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/internal/lttng2/kernel/core/stateprovider/CtfKernelStateInput.java
index 2d48bbb..4e1d422 100644
--- a/lttng/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/internal/lttng2/kernel/core/stateprovider/CtfKernelStateInput.java
+++ b/lttng/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/internal/lttng2/kernel/core/stateprovider/CtfKernelStateInput.java
@@ -242,7 +247,7 @@ public class CtfKernelStateInput extends AbstractStateChangeInput {
                 /* Set the exec name of the new process */
                 quark = ss.getQuarkRelativeAndAdd(newCurrentThreadNode, Attributes.EXEC_NAME);
                 value = TmfStateValue.newValueString(nextProcessName);
-                ss.modifyAttribute(ts, value, quark);
+                ss.updateOngoingState(value, quark);
 
                 /*
                  * Check if we need to set the syscall state and the PPID of


Back to the top