trappy issueshttps://gitlab.arm.com/tooling/trappy/-/issues2021-07-20T10:59:52Zhttps://gitlab.arm.com/tooling/trappy/-/issues/304TrappyParseError: TRAPpy's parser for 'function' failed to parse the line: wo...2021-07-20T10:59:52ZDarryl GreenTrappyParseError: TRAPpy's parser for 'function' failed to parse the line: work struct=000000003a52dd5d function=vmpressure_work_fn workqueue=00000000ec7af7a6 req_cpu=32 cpu=7*Created by: shivendra2015iiit*
Android S systrace gives error*Created by: shivendra2015iiit*
Android S systrace gives errorhttps://gitlab.arm.com/tooling/trappy/-/issues/296trappy doesn't parse raw_syscalls2019-09-21T04:50:17ZDarryl Greentrappy doesn't parse raw_syscalls*Created by: v0lker*
and since it seems to fail whenever there is a line that it can't parse (maybe that warrants a ticket on its own?), this is very inconvenient.
i resorted to implementing ```Base```-derived classes for parsing sys...*Created by: v0lker*
and since it seems to fail whenever there is a line that it can't parse (maybe that warrants a ticket on its own?), this is very inconvenient.
i resorted to implementing ```Base```-derived classes for parsing sys_exit and sys_enter, in case anybody would like a PR, let me know.https://gitlab.arm.com/tooling/trappy/-/issues/294Publishing TRAPpy 6.0 to PyPI2019-07-01T15:33:30ZDarryl GreenPublishing TRAPpy 6.0 to PyPI*Created by: antrianimappoura*
Installing TRAPpy from `pip` for Python 3 requires TRAPpy 6.0.
However, [PyPi](https://pypi.org/project/TRAPpy/) currently hosts version 5.9 as its latest version.
Would it be possible to publish the...*Created by: antrianimappoura*
Installing TRAPpy from `pip` for Python 3 requires TRAPpy 6.0.
However, [PyPi](https://pypi.org/project/TRAPpy/) currently hosts version 5.9 as its latest version.
Would it be possible to publish the latest version of TRAPpy to enabling installing the package in Python 3?https://gitlab.arm.com/tooling/trappy/-/issues/293Load all available events2019-08-05T13:41:48ZDouglas RaillardLoad all available eventsWhen a `Trace` object is created, the list of events can be omitted. Unfortunately, it will not default to loading all the events the trace contains, but a subset.When a `Trace` object is created, the list of events can be omitted. Unfortunately, it will not default to loading all the events the trace contains, but a subset.https://gitlab.arm.com/tooling/trappy/-/issues/257Explore possibility of time-based tests for trappy2017-06-27T00:51:05ZDarryl GreenExplore possibility of time-based tests for trappy*Created by: joelagnel*
Recently lot of speed up related patches have posted. It would be good to be able to test and make sure these improvements aren't regressed in the future. One concern is that its hardware dependent and is hard to...*Created by: joelagnel*
Recently lot of speed up related patches have posted. It would be good to be able to test and make sure these improvements aren't regressed in the future. One concern is that its hardware dependent and is hard to measure. This issue is created to discuss this.
I think we can still come up with a worst-case upper bound experimentally and set that as the expectation. If we are threading trappy in the future, then we can perhaps limit the number of threads so that the number of cores that the test is run on doesn't change or artificially make a failure result as passed (as a false-positive). (CC @derkling)https://gitlab.arm.com/tooling/trappy/-/issues/250Add a generic DF join API2017-07-08T21:23:38ZDarryl GreenAdd a generic DF join API*Created by: derkling*
In many analysis it happens that we are interested in joining information coming from different DF.
For example, let say we have a trace like this:
```
adbd-5709 [007] 2943.184105: sched_contrib...*Created by: derkling*
In many analysis it happens that we are interested in joining information coming from different DF.
For example, let say we have a trace like this:
```
adbd-5709 [007] 2943.184105: sched_contrib_scale_f: cpu=7 cpu_scale_factor=1
adbd-5709 [007] 2943.184105: sched_load_avg_cpu: cpu=7 util_avg=825
->transport-5713 [006] 2943.184106: sched_load_avg_cpu: cpu=6 util_avg=292
->transport-5713 [006] 2943.184107: sched_contrib_scale_f: cpu=6 cpu_scale_factor=2
adbd-5709 [007] 2943.184108: sched_load_avg_cpu: cpu=7 util_avg=850
adbd-5709 [007] 2943.184109: sched_contrib_scale_f: cpu=7 cpu_scale_factor=3
adbd-5709 [007] 2943.184110: sched_load_avg_cpu: cpu=6 util_avg=315
```
Currently we can easily build two DF, one for sched_load_avg_cpu and another for sched_contrib_scale_f.
However, in some analysis it could be useful and correlate the information from these two events, thus getting a single DF where we see a consistent view of the most updated information from both.
In these cases we have a **"master_df"**, e.g. sched_load_avg_cpu, where we want to propagate into the information from a **"secondary_df"**, e.g. sched_contrib_scale_f.
This would require to:
1. Join the master_df with the secondary_df
2. Fix any index collision eventually happening, for example in the previous small trace we can see that at the exact time 2943.184105 we have one event for both master_df and secondary_df on each CPU.
A join of these two DF should grant that:
- the order of the events is consistent with the trace ordering, i.e. sched_contrib_scale_f should be before sched_load_avg_cpu in CPU7 but after in CPU6
- the time difference between the two events should be almost not noticiable, thus probably we should fix the overlapping timestamps by adding one 1ns to each duplicated index, thus removing the index collision without risking to create a new one with a following event.
Than we need to:
3. forward propagate each secondary_df columns by considering the value of a "pivot" column which is shared among the two DFs, for example the value `cpu` can be used to forward propagate the others `sched_contrib_scale_f` columns (i.e. `freq_scale_factor` and `cpu_scale_factor`) in the `sched_load_avg_cpu` rows
4. remove all the secondary_df rows which values have been already properly propagated in the following primary_df rows
All these operations together should be supported by a new generic convenience API which, once called with something like:
```python
trappy.ftrace.utils.merge_df(primary_df = 'sched_load_avg_cpu',
secondary_df='sched_contrib_scale_f',
pivot='cpu')
```
Where, primary_df is:
```
cpu util_avg
Time
0.000000 7 825
0.000001 6 292
0.000003 7 850
0.000005 6 315
```
and secondary_df is:
```
cpu cpu_scale_factor
Time
0.000000 7 1
0.000002 6 2
0.000004 7 3
```
should returns a single DF which is:
```
cpu util_avg cpu_scale_factor
Time
0.000000 7.0 825.0 1.0
0.000001 6.0 292.0 NaN <- since we do not have before a valid secondary_df entry
0.000003 7.0 850.0 1.0 <- propagation of the previous value
0.000005 6.0 315.0 2.0
```
Here is a notebook to play with the same example:
https://gist.github.com/derkling/786e911ae01ca170377e1893d6696384
where we can see that the current join API needs to be extended to get the exact result we described before.https://gitlab.arm.com/tooling/trappy/-/issues/240compare_runs expects Ftrace only but should handle Systrace too2017-03-13T13:33:59ZDarryl Greencompare_runs expects Ftrace only but should handle Systrace too*Created by: mcgeagh*
compare_runs only works if provided an Ftrace capture.
It should be able to handle both Ftrace as well as Systrace captures.*Created by: mcgeagh*
compare_runs only works if provided an Ftrace capture.
It should be able to handle both Ftrace as well as Systrace captures.https://gitlab.arm.com/tooling/trappy/-/issues/227Options to disable event plot summary while allowing to scale with browser wi...2016-10-17T16:21:19ZDarryl GreenOptions to disable event plot summary while allowing to scale with browser window size*Created by: farleylai*
Hi,
I would like to show the event plot aligned with another image graph vertically.
To make it concise, showSummary is set false but the event plot does not scale its width with the browser window size. Is it p...*Created by: farleylai*
Hi,
I would like to show the event plot aligned with another image graph vertically.
To make it concise, showSummary is set false but the event plot does not scale its width with the browser window size. Is it possible to do so while disabling showSummary?
(the event plot seems to scale its width only when showSummary is true )
Thanks.
https://gitlab.arm.com/tooling/trappy/-/issues/218Make trappy parse trace coming from dmesg2016-08-20T01:33:37ZJavi MerinoMake trappy parse trace coming from dmesgTrace allows you to dump trace to dmesg on oops. Make sure trappy can read it, adding a FtraceFromDmesg() if necessary. You can use [this sample](https://github.com/ARM-software/trappy/files/374400/dump-on-oops_sample.txt) to test it.
...Trace allows you to dump trace to dmesg on oops. Make sure trappy can read it, adding a FtraceFromDmesg() if necessary. You can use [this sample](https://github.com/ARM-software/trappy/files/374400/dump-on-oops_sample.txt) to test it.
Suggested by @jlelli
https://gitlab.arm.com/tooling/trappy/-/issues/217Add a contributing.md2016-07-20T17:45:49ZJavi MerinoAdd a contributing.mdYou can base it on [this](https://github.com/ARMmbed/greentea/blob/master/docs/CONTRIBUTING.md) or [this](https://github.com/ARMmbed/mbedtls#contributing)
You can base it on [this](https://github.com/ARMmbed/greentea/blob/master/docs/CONTRIBUTING.md) or [this](https://github.com/ARMmbed/mbedtls#contributing)
LPC 2016https://gitlab.arm.com/tooling/trappy/-/issues/214Add dynamic zooming for dygraphs2016-07-17T12:10:48ZJavi MerinoAdd dynamic zooming for dygraphs@John-P suggests [this site](https://kaliatech.github.io/dygraphs-dynamiczooming-example/) for an example about plotting really large datasets by using dynamic zooming.
@John-P suggests [this site](https://kaliatech.github.io/dygraphs-dynamiczooming-example/) for an example about plotting really large datasets by using dynamic zooming.
https://gitlab.arm.com/tooling/trappy/-/issues/177trappy plotter should throw an appropriate message if it's asked to pivot on ...2016-04-15T07:32:59ZJavi Merinotrappy plotter should throw an appropriate message if it's asked to pivot on something that's not in the trace`trappy.ILinePlot(trace, signals["sched_switch:next_pid"], pivot="cqu").view()` throws back an exception like "no plots for the given constraints". While it is true, it could be a bit more specific. In this case it's obvious that the pi...`trappy.ILinePlot(trace, signals["sched_switch:next_pid"], pivot="cqu").view()` throws back an exception like "no plots for the given constraints". While it is true, it could be a bit more specific. In this case it's obvious that the pivot doesn't exist, but if we gave back something like "You're trying to pivot on "cqu" which is not present in sched_switch:next_pid" it would be a lot more clear that I typoed "cpu".
Reported by @deggeman.
https://gitlab.arm.com/tooling/trappy/-/issues/149traces with aliased events confuse the plotter2016-04-14T07:41:07ZJavi Merinotraces with aliased events confuse the plotter@mdigiorgio reports that a `trappy.FTrace` object created with an `events=` parameter that aliases one that already exists confuse the plotter and doesn't let you plot what you want. For example:
```
trace = trappy.FTrace(trace_file, e...@mdigiorgio reports that a `trappy.FTrace` object created with an `events=` parameter that aliases one that already exists confuse the plotter and doesn't let you plot what you want. For example:
```
trace = trappy.FTrace(trace_file, events=["thermal_temperature"])
trappy.LinePlot(trace, signals=["thermal_temperature:temp"]).view()
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-6-07a8dbdfd061> in <module>()
----> 1 trappy.LinePlot(trace, signals=["thermal_temperature:temp"]).view()
/home/javi/src/trappy/trappy/plotter/StaticPlot.pyc in view(self, test)
172 if self._attr["style"]:
173 with plt.rc_context(AttrConf.MPL_STYLE):
--> 174 self._resolve(permute, self._attr["concat"])
175 else:
176 self._resolve(permute, self._attr["concat"])
/home/javi/src/trappy/trappy/plotter/StaticPlot.pyc in _resolve(self, permute, concat)
236 width=self._attr["width"],
237 length=self._attr["length"],
--> 238 title=self._attr['title'])
239
240 self._fig = self._layout.get_fig()
/home/javi/src/trappy/trappy/plotter/PlotLayout.pyc in __init__(self, cols, num_plots, **kwargs)
47 self._single_plot = False
48 if self.num_plots == 0:
---> 49 raise RuntimeError("No plots for the given constraints")
50
51 if self.num_plots < self.cols:
RuntimeError: No plots for the given constraints
```
However, `trappy.thermal_trace.data_frame["temp"].plot()` works. The aliased `thermal_temperature` confuses the plotter.
https://gitlab.arm.com/tooling/trappy/-/issues/141Plotter: using permute and pivot together does not work2016-02-15T17:36:07ZDarryl GreenPlotter: using permute and pivot together does not work*Created by: mdigiorgio*
When trying to plot two or more traces with pivoting and permute python raises an exception. In my example I want to pivot on a column having 2 different values, and want to permute on 2 columns. Hence, I should...*Created by: mdigiorgio*
When trying to plot two or more traces with pivoting and permute python raises an exception. In my example I want to pivot on a column having 2 different values, and want to permute on 2 columns. Hence, I should get 4 subplots, but I get the following exception:
``` python
~/lisa/libs/trappy/trappy/plotter/PlotLayout.py in get_axis(self, plot_index)
144 return self._attr["axes"]
145 else:
--> 146 return self._attr["axes"][self.get_2d(plot_index)]
147
148 def get_fig(self):
IndexError: index 2 is out of bounds for axis 0 with size 2
```
https://gitlab.arm.com/tooling/trappy/-/issues/93Clarify which events are predefined2016-07-12T19:48:04ZJavi MerinoClarify which events are predefined`Run(events=["thermal_temperature"])` reuses the event that `trappy` has for `thermal_temperature`. From a user point of view, it's unclear why trappy knows how to pivot it (or why does bart's `Analyzer.getStatement()` know that `select...`Run(events=["thermal_temperature"])` reuses the event that `trappy` has for `thermal_temperature`. From a user point of view, it's unclear why trappy knows how to pivot it (or why does bart's `Analyzer.getStatement()` know that `select` should operate on the thermal zone id). Even worse, in the resulting object, the event is found in `run.thermal` (instead of the expected `run.thermal_temperature`). This is all very confusing for the new user.
- We should document which classes are known by trappy.
- We can keep `run.thermal` (and basically every class derived from Base that has a `name`), but we should alias it to the event name: `run.thermal_temperature`, `run.thermal_power_cpu_limit`,... All documentation should be updated to use the event names to avoid confusion and the old names should only be kept for compatibility with old notebooks. Brownie points (i.e. you win a :heart:) if we mark the old names as "deprecated".
- Extra brownie points (you win :two_hearts: :two_hearts: and a badge) if we make `Run` instances introspectable. That is, you can call a function to know which events are registered. Ideally the introspection tells the user which events have been parsed without the user having to look at the help of the function to understand the output. At the same time, the output should be programmatic, a program should be able to use the return value without too much hassle. Maybe something like (better proposals welcome):
```
In [1]: import trappy
In [2]: run = trappy.Run(events=["thermal_temperature", "thermal_power_cpu_limit"])
In [3]: run.get_events()
Out[3]:
trace_event name num_events
0 thermal_temperature thermal 249
1 thermal_power_cpu_limit cpu_in_power 152
[2 rows x 3 columns]
```
LPC 2016https://gitlab.arm.com/tooling/trappy/-/issues/75Ensure tests are run for the modules local to the checkout2015-11-20T15:19:42ZDarryl GreenEnsure tests are run for the modules local to the checkout*Created by: sinkap*
We need to ensure this to avoid an endless limbo where nosetests ends up picking the modules from a different location.
(remember the 20th November)
*Created by: sinkap*
We need to ensure this to avoid an endless limbo where nosetests ends up picking the modules from a different location.
(remember the 20th November)
https://gitlab.arm.com/tooling/trappy/-/issues/74trappy should be able to narrow the trace to the actual run if done with WA2016-06-21T11:30:25ZJavi Merinotrappy should be able to narrow the trace to the actual run if done with WAWA introduces a TRACE_START and TRACE_STOP markers in the trace when doing a run. `trappy.wa` should learn to get those and, using the `abs_window` feature of the `Run` object, limit the trace to that.
Note: `Run.normalize_time()` shou...WA introduces a TRACE_START and TRACE_STOP markers in the trace when doing a run. `trappy.wa` should learn to get those and, using the `abs_window` feature of the `Run` object, limit the trace to that.
Note: `Run.normalize_time()` should probably need to accept a basetime parameter again.
Javi MerinoJavi Merinohttps://gitlab.arm.com/tooling/trappy/-/issues/47Add ability to filter data on EventPlot UI2016-08-21T02:31:22ZDarryl GreenAdd ability to filter data on EventPlot UI*Created by: sinkap*
*Created by: sinkap*
https://gitlab.arm.com/tooling/trappy/-/issues/18Move thermal code out of trapp/run.py2017-02-20T17:25:51ZDarryl GreenMove thermal code out of trapp/run.py*Created by: sinkap*
We should think of moving functions like plot_all_freqs plot_freq_hists to a specific module or have another class that inherits trappy.Run which is thermal specific. We can even have such code in bart.thermal and m...*Created by: sinkap*
We should think of moving functions like plot_all_freqs plot_freq_hists to a specific module or have another class that inherits trappy.Run which is thermal specific. We can even have such code in bart.thermal and move all subsystem specific code to their respective subsystem in BART.
Please share your thoughts on this as well? Considering existing dependencies and backward compatibility.
Javi MerinoJavi Merino