Hi Michel,

Thanks for the contribution!

I have pushed your 2 patches to Eclipse's Gerrit for review:
https://git.eclipse.org/r/#/c/9540/
https://git.eclipse.org/r/#/c/9541/

We use Gerrit for code review, so in the future you could push proposed
patches directly there, it would make it more simple. See
http://wiki.eclipse.org/Gerrit for instructions on how to set it up.


The WAIT_BLOCKED state seems to be much more common in kernel traces, so
I think we should keep our current yellow-ish (200,200,0) for that one.
In the patch I also renamed the current WAIT into WAIT_FOR_CPU to better
differentiate between both. But it's definitely a nice thing to have
them separated.

Cheers,
Alex


On 13-01-08 11:53 AM, Michel Dagenais wrote:
> I noticed that the control flow view does not distinguish between processes 
> waiting for CPU (runnable) and processes blocked (e.g. waiting for IO). The 
> information is available from the sched_switch event (prevState) and it is 
> thus easy to add this state information. 
>
> Please find at the end of the message a trivial patch which adds a state 
> (WAIT_BLOCKED) and gets the needed information from the sched_switch event. 
> You need to erase the precomputed state of a trace to see the effect of this 
> change; this could be automated, checking the precomputed state "version" or 
> "TMF build date" versus that of the Eclipse TMF tool. I selected a dark red 
> color for that state but have no strong opinion on the right color. Perhaps 
> you can see what other tools use. 
>
> It may be interesting to further distinguish the state of processes depending 
> on what they are waiting on (CPU, Disk, Network, Pipe, Child...). The state 
> can be determined either by looking at events leading to the wait, or at the 
> end of the wait when we get the wakeup event. 
>
> diff --git 
> a/lttng/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/internal/lttng2/kernel/core/StateValues.java
>  
> b/lttng/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/internal/lttng2/kernel/core/StateValues.java
> index c63d346..851abee 100644
> --- 
> a/lttng/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/internal/lttng2/kernel/core/StateValues.java
> +++ 
> b/lttng/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/internal/lttng2/kernel/core/StateValues.java
> @@ -36,6 +36,7 @@ public class StateValues {
>      public static final int PROCESS_STATUS_RUN_USERMODE = 2;
>      public static final int PROCESS_STATUS_RUN_SYSCALL = 3;
>      public static final int PROCESS_STATUS_INTERRUPTED = 4;
> +    public static final int PROCESS_STATUS_WAIT_BLOCKED = 5;
>  
>      /* SoftIRQ-specific stuff. -1: null/disabled, >= 0: running on that CPU 
> */
>      public static final int SOFT_IRQ_RAISED = -2;
> 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..ddb8ac7 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
> @@ -224,7 +224,7 @@ public class CtfKernelStateInput extends 
> AbstractStateChangeInput {
>               */
>              {
>                  Integer prevTid = ((Long) 
> content.getField(LttngStrings.PREV_TID).getValue()).intValue();
> -                //Long prevState = (Long) 
> content.getField(LttngStrings.PREV_STATE).getValue();
> +                Long prevState = (Long) 
> content.getField(LttngStrings.PREV_STATE).getValue();
>                  String nextProcessName = (String) 
> content.getField(LttngStrings.NEXT_COMM).getValue();
>                  Integer nextTid = ((Long) 
> content.getField(LttngStrings.NEXT_TID).getValue()).intValue();
>  
> @@ -233,7 +233,12 @@ public class CtfKernelStateInput extends 
> AbstractStateChangeInput {
>  
>                  /* Set the status of the process that got scheduled out. */
>                  quark = ss.getQuarkRelativeAndAdd(formerThreadNode, 
> Attributes.STATUS);
> -                value = 
> TmfStateValue.newValueInt(StateValues.PROCESS_STATUS_WAIT);
> +                if(prevState != 0) {
> +                    value = 
> TmfStateValue.newValueInt(StateValues.PROCESS_STATUS_WAIT_BLOCKED);
> +                }
> +                else {
> +                    value = 
> TmfStateValue.newValueInt(StateValues.PROCESS_STATUS_WAIT);
> +                }
>                  ss.modifyAttribute(ts, value, quark);
>  
>                  /* Set the status of the new scheduled process */
> @@ -374,9 +379,11 @@ public class CtfKernelStateInput extends 
> AbstractStateChangeInput {
>                  /* Set the process' status */
>                  quark = ss.getQuarkRelativeAndAdd(curThreadNode, 
> Attributes.STATUS);
>                  if (ss.queryOngoingState(quark).isNull()) {
> -                    /*"5" here means "LTTNG_WAIT" in the LTTng kernel tracer 
> */
> -                    if (status == 5) {
> +                    /*"2" here means "WAIT_FOR_CPU" and "5" "WAIT_BLOCKED" 
> in the LTTng kernel */
> +                    if (status == 2) {
>                          value = 
> TmfStateValue.newValueInt(StateValues.PROCESS_STATUS_WAIT);
> +                    } else if (status == 5) {
> +                            value = 
> TmfStateValue.newValueInt(StateValues.PROCESS_STATUS_WAIT_BLOCKED);
>                      } else {
>                          value = 
> TmfStateValue.newValueInt(StateValues.PROCESS_STATUS_UNKNOWN);
>                      }
> diff --git 
> a/lttng/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java
>  
> b/lttng/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java
> index 0023e78..a830ec0 100644
> --- 
> a/lttng/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java
> +++ 
> b/lttng/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java
> @@ -46,7 +46,8 @@ public class ControlFlowPresentationProvider extends 
> TimeGraphPresentationProvid
>          WAIT        (new RGB(200, 200, 0)),
>          USERMODE    (new RGB(0, 200, 0)),
>          SYSCALL     (new RGB(0, 0, 200)),
> -        INTERRUPTED (new RGB(200, 100, 100));
> +        INTERRUPTED (new RGB(200, 100, 100)),
> +        WAIT_BLOCKED (new RGB(100, 0, 0));
>  
>          public final RGB rgb;
>  
> @@ -82,6 +83,8 @@ public class ControlFlowPresentationProvider extends 
> TimeGraphPresentationProvid
>                  return State.SYSCALL.ordinal();
>              } else if (status == StateValues.PROCESS_STATUS_INTERRUPTED) {
>                  return State.INTERRUPTED.ordinal();
> +            } else if (status == StateValues.PROCESS_STATUS_WAIT_BLOCKED) {
> +                return State.WAIT_BLOCKED.ordinal();
>              }
>          }
>          return State.UNKNOWN.ordinal();
> @@ -99,6 +102,8 @@ public class ControlFlowPresentationProvider extends 
> TimeGraphPresentationProvid
>                  return State.SYSCALL.toString();
>              } else if (status == StateValues.PROCESS_STATUS_INTERRUPTED) {
>                  return State.INTERRUPTED.toString();
> +            } else if (status == StateValues.PROCESS_STATUS_WAIT_BLOCKED) {
> +                return State.WAIT_BLOCKED.toString();
>              }
>          }
>          return State.UNKNOWN.toString();
> _______________________________________________
> linuxtools-dev mailing list
> linuxtools-dev@eclipse.org
> https://dev.eclipse.org/mailman/listinfo/linuxtools-dev

_______________________________________________
linuxtools-dev mailing list
linuxtools-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/linuxtools-dev

Reply via email to