Re: Kernelshark: funcgraph_exit events don't seem to exit?

Yordan Karadzhov <[email protected]> Tue, 6 Sep 2022 21:01:09 +0300
Newsgroups org.kernel.vger.linux-trace-users
Message-ID <[email protected]>
Hi Matteo,

I confirm that the logic that you want can be implemented via plugin. 
However, there is even simpler way to accomplish what you want. When 
recording your trace, enable the 'sched_switch' events. This way in your 
data you will know exactly when the execution switches form one task to 
another (or to idle). The good thing here is that KernelShark already 
has a plugin for 'sched_switch' end you will see a the behavior that you 
expect.

cheers,
Y.


On 9/6/22 14:57, Matteo Bertolino wrote:
> Dear Yordan,
> Thanks for your reply!
> 
> I would like to do a double check to be sure that we're on the same rail.
> Can you please take my screenshot again? Between 8.090000 and 8.130000 the trace doesn't provide any information.
> 
> We don't know whether:
> A) task1 continues after the end of foo1 running something else that is not traced
> Or
> B) The CPU is idle/a non-traced task is running.
> 
> Today, the default behavior of kernelshark is A). Indeed, in my screenshot, the bar indicated by the light-blue arrow is red.
> 
> Instead, I wish to code a plugin with a third option:
> C) when we do not know what happens, just color with gray.
> 
> Do your instructions cover this case?
> If so, I would like to have some hints and I will try to implement it :-)
> 
> Best Regards,
> Matteo
> 
> -----Original Message-----
> From: Yordan Karadzhov [mailto:[email protected]]
> Sent: Tuesday, September 6, 2022 12:45 PM
> To: Matteo Bertolino <[email protected]>; [email protected]
> Subject: Re: Kernelshark: funcgraph_exit events don't seem to exit?
> 
> Hi Matteo,
> Thanks for reporting this issue!
> 
> I understand what you would like to see being visualized, but
> unfortunately this is different from the implemented generic logic of
> the visualization model that changes the color at the place of the first
> event that belongs to the new task. Note that this generic logic is
> expected to provide adequate visualization for all types of events,
> while the behavior that you would like to see makes sense only for very
> specific events.
> 
> However, what you want is actually very easy to achieve. You just have
> to write a kernelshark plugin for funcgraph_exit events. If you are
> interested in contributing such plugin to kernelshark, I can send you
> instructions what has to be done. It will be really trivial work.
> 
> cheers,
> Yordan
> 
> 
> On 9/6/22 12:29, Matteo Bertolino wrote:
>> Dear community,
>> In order to explain my problem, I need to ask you to have a look to the visual trace in my github (I cannot attach it to the mail nor using an image uploading service): https://github.com/the-red-robin/trace-cmd-experiments/blob/main/README.md
>>
>> In the trace, we have one CPU, CPU0. On it:
>> - `Task3` runs `foo5()` at time 8.000000 cycles
>> - `Task2` takes place running `foo3()` at time 8.010000 cycles.
>> - `Task1` takes place running `foo1()` at time 8.060000 cycles.
>> For now, everything OK.
>> Then, I wish to `exit` the three tasks.
>>
>> - `Task1` exits at 8.090000 cycles. Here the trace does not show what I expect, namely `Task1` (in red) shall end at 8.090000 cycles. Instead, there is a red trace until the beginning of the next exit event, `Task2` at 8.130000.
>>
>> This doesn't seem an `exit` event. Do you have any suggestions to show what I wish on Kernelshark?
>>
>> Best Regards,
>> Matteo