Breaking changes#

Here is a list of commits introducing breaking changes in LISA:

Thu Jul 17 15:56:41 2025 +0100
b0b5500a303074f1a381eee8b1b9d0462b0940cf
lisa._assets.kmodules.lisa: Avoid unnecessary string copies

BREAKING CHANGE

Avoid copying strings unnecessarily and use an empty string when there
is no data to display, rather than the "(null)" string. This avoids
wasting space on such fixed string, and avoids potential conflict with
something that would actually be named "(null)".
Wed Jul 16 14:06:45 2025 +0100
066db889ca116b8f5223727c635101b741f06384
lisa._kmod: Do not uninstall() kmod before installing it

BREAKING CHANGE

Changes DynamicKmod.install() and DynamicKmod.run() to not attempt to
uninstall the module before installing it. This will increase the
chances of install failing if the module was already loaded but is
necessary to not wipe existing module configuration in nested cases.

As a result, installing the module after having interrupted e.g. the
DynamicKmod.run() context manager may fail as the module will be loaded
already. It will then be on the user to cleanup the system and manually
rmmod the module.
Wed May 28 10:43:38 2025 +0100
d5ad941d55f591d34bf910c5c8bf141c912b9d49
install_base.sh: Remove --install-bisector-dbus

BREAKING CHANGE

Remove --install-bisector-dbus and the associated infrastructure in
install_base.sh as it is broken. Bisector is not used much anymore, and
its DBus support even less. DBus features also haven't been tested in
years, and given the difficulty of installing the associated libraries
when it was developped, the chances it has bit rotted are extremely
high.
Mon Feb 3 16:18:03 2025 +0000
5ce348f3aeae957ed6afe629489bd0782034aefe
lisa.datautils: Remove df_refit_index(method=...) parameter

BREAKING CHANGE

Remove the "method" parameter and make the function effectively match
the behavior of passing method='pre'.

The parameter was never needed in practice and made implementing a
streaming version harder for no benefit. Changing the behavior from
"inclusive" to "pre" means the last row added by df_refit_index() will
not be reflecting the future value of the signal but instead the actual
current value of the signal at that timestamp. This should have very
little effect on real-world computations, as the last row is usually not
really used for anything else than its timestamp.
Thu Oct 24 23:25:48 2024 +0000
9c349c39e765b9e3fcb2b0dab7a8ff1f8e287dee
lisa.trace: Make event namespaces simple prefixes

BREAKING CHANGE

Event names were previously constructed with f"{namespace}__{event}".
This commit changes it to f"{namespace}{event}" to allow using
namespaces in more circumstances.
Fri Sep 20 17:46:07 2024 +0100
01b2dbb4f6ed66e1202dd4ffec77e25893ce23d3
lisa: Remove support for Vagrant

BREAKING CHANGE

Vagrant is not supported anymore by Ubuntu, making it unsuitable for us.
Mon Jun 17 14:07:36 2024 +0100
d2c63822fb8c4b481582e07f184041df41d3da53
lisa.datautils: Enforce string for column names in converted dataframes

BREAKING CHANGE

Ensure we only have string column names, as this is the only type that
can:
* survive serialization to parquet
* be converted between different dataframe libraries
Tue May 7 10:25:56 2024 +0000
c0c4e7a00aa3974d98e93d6f84f086ce10d99715
lisa: Remove matplotlib options for holoviews plots

BREAKING CHANGE

Remove the matplotlib options for holoviews plot as that currently
requires the matplotlib backend to be enabled just to validate the options.

If and when this gets merged, this commit can be reverted:

https://github.com/holoviz/holoviews/pull/6196
Tue May 7 10:25:56 2024 +0000
63fa02f31c182c51dd2c14ccd0ca5856e107f732
lisa.wa_results_collector: Remove the module

BREAKING CHANGE

This module has been unused and undocumented for several years, so
finally remove it as it depends on matplotlib.
Wed Apr 24 18:57:36 2024 +0100
2e7256f82e31588908e38087f85839986e7c7bb6
lisa.trace: Convert TxtTraceParserBase internals to polars

BREAKING CHANGE

Convert the internals of TxtTraceParserBase to polars.

This unfortunately comes at a loss of feature as polars' regexes (based
on the "regex" Rust crate at the time of writing) does not handle
look-around (look-behind and look-ahead). In turn, that prevents from
parsing correctly string fields with spaces in the values, e.g.

    comm=hello world anotherfield=42

This change is deemed acceptable as this fully removes the dependency on
pandas for lisa.trace (apart from converting legacy pandas inputs), and
the human-readable format of trace-cmd is ambiguous in any case. The
only ftrace format currently really supported is the binary trace.dat
format created by trace-cmd, which does not suffer from these issues.
Wed Apr 24 18:57:35 2024 +0100
195549b63f4c41736ae811a7f930132ce9bf9ebf
lisa.trace: Use Categorical for polars LazyFrame string columns

BREAKING CHANGE

Make all string columns use Categorical rather than just columns that
contain "comm" when using TraceDumpTraceParser.
Wed Mar 27 18:40:37 2024 +0000
8413bca99de43dd235487f519ba5f2dfcde372da
lisa_tests: Split off lisa_tests

BREAKING CHANGE

Split lisa_tests package.
Wed Mar 27 11:47:35 2024 +0000
716d4d29af6196b3e3d7b2d2dcac0a470116256b
lisa.notebook: Do not initialize holoviews

BREAKING CHANGE

Do not initialize holoviews extensions as it is the user's
responsability to choose a backend. This may also simplify debugging of
initializing issues by getting closer to a standard recommended setup.
Tue Mar 26 15:37:04 2024 +0000
769492371286e23d1503c5f471d139cbde094256
lisa.trace: Remove TrappyTraceParser

BREAKING CHANGE

Remove compatibility layer with trappy library. It hasn't been used in
years and was fully replaced by TxtTraceParserBase family of classes.
Tue Mar 26 15:33:43 2024 +0000
02e41c429aea9fc7644e0ff8dacf1cb990a740cc
lisa.datautils: Disallow df_window(clip_window=False)

BREAKING CHANGE

Raise an exception if clip_window=False is passed to df_window(). This
behavior was never really needed and is not possible to support polars
LazyFrame since the actual Time values are not known until collect() is
called.
Tue Mar 26 15:33:43 2024 +0000
8b1d82c4dcee0afb13742e7af071a7069eb6616a
lisa.trace: Remove Trace.df_event(raw=...) parameter

BREAKING CHANGE

Disallow any non-True value for "raw" parameter, as the sanitization is
now the responsibility of the parser.
Tue Mar 26 15:33:43 2024 +0000
1cd321479479825d4b5f913291c312dc88511ffe
lisa.trace: Move event sanitization to parser classes

BREAKING CHANGE

Move the sanitization into the parser classes where they actually
belong.

As a result, remove the sanitization of "print"/"bprint"/"bputs" that
turns the str column into bytes, since the values in-kernel are expected
to be ASCII-encoded strings.
Mon Mar 25 13:46:24 2024 +0000
f56a2d56037e08fd78d820eb91eb06beae19f364
lisa.trace: Make TraceCache private

BREAKING CHANGE

Rename TraceCache into _TraceCache as no value of this type was ever
made public. It's a de-facto implementation detail of Trace, so make it
private.
Tue Feb 13 16:43:01 2024 +0000
02da758c8611fdffa7d57236643c8334997597ef
lisa.trace: Remove cpumask sanitization

BREAKING CHANGE

cpumask fields cannot be handled in a uniform way between all parsers,
so remove any attempts at doing so.  Since the new default trace-dump
parser has direct support for them, drop the sanitization.

The new format for cpumask values is an iterable of booleans where each
position corresponds to one bit, starting from CPU 0, e.g. [True, False,
False] for the cpumask 0b100
Wed Jan 10 12:06:06 2024 +0000
6bdace0fff3a2e87e1642f299e77e58dade1c6c9
lisa.trace: Remove trace_printk@ meta event bputs support

BREAKING CHANGE

trace_printk@... meta events now require a bprint event, bputs is not
supported anymore.
Wed Jan 10 12:06:06 2024 +0000
9cdf0d68078254431a601dec9894222bd0f1c9cf
lisa.trace: Remove optional field support in meta events

BREAKING CHANGE

Remove support for positional field ("__positional") for meta events
such as trace_printk@* or userspace@* events. This feature was not used
and complexifies parsers for little gain.
Wed Oct 11 13:59:29 2023 +0100
7e2cd50bdd5ef9d43de908332c859fe8371b01f1
lisa: Move test application code into its own package

BREAKING CHANGE

This is a breaking change from a setup point of view (separate package)
and when using "exekall run lisa" that now needs to be
"exekall run lisa lisa_tests" since the most class definitions are moved
to the new package.

However, from the API perspective this is not a breaking change, as a
later commit adds import shims (with a deprecation warning) in the old
locations.
Tue Apr 4 15:22:01 2023 +0100
a83f4b32526591af83115b28993220851848599d
lisa.analysis.pixel6: Change df_power_meter() "value" column to "power"

BREAKING CHANGE

Use the more descriptive "power" column name than "value".
Mon Apr 25 12:26:58 2022 +0100
50f179d9fb6cacbfa116e9056d2fe0ac0e9a00eb
lisa.tests.base: Require root for ftrace

BREAKING CHANGE

Previously, we attempted to detect if tracefs was available as non-root
user. Since most distribution do not allow non-root user to use tracefs
and being root is usually not a problem in test setups, force being root
when ftrace is used.
Mon Apr 11 15:08:47 2022 +0100
ef3ecbea05fd2aff901520c808a78125273eb136
lisa.target_script: Remove deprecated module

BREAKING CHANGE

Remove module as it's a leaky abstraction that is not used anymore and
has been deprecated for over a year.
Fri Apr 1 15:06:54 2022 +0100
ebdf75a2a5fafab6be5cc9f084b5fd3daea0c7ff
lisa.trace: Drop df.name attribute

BREAKING CHANGE

Trace.df_event() used to set a .name attribute on dataframes it returns.
This is unfortunately problematic, as it will also set the value of a
column named "name" if it exists.

The replacement is df.attrs['name'] and has been there for a while now.
It's also the recommended way of doing it by pandas documentation
itself.
Thu Mar 31 16:42:43 2022 +0100
7c93c68f28e0802f3da2a934213857d09c53d537
lisa.fuzz: Port lisa.fuzz.Gen over the new lisa.monad API

BREAKING CHANGE

Introduce GenMonad inheriting from lisa.monad.State and make Gen simply
embed a GenMonad action.

Breaking change: retry_until() now needs to be awaited, otherwise it's a
no-op. This will ensure future-proofing of the API, should the
implementation of retry_until need access to the internal state.
Thu Mar 31 16:42:43 2022 +0100
c8c8c6d51ff956bc7554b7dce1f403ebb363653e
lisa.monad: Replace the State monad implementation

BREAKING CHANGE
FEATURE

Replace the original custom-made State monad implementation with a full
featured monad transformer implementation.

This will allow combining multiple independent state monads, as well as
interop with event loops (e.g. asyncio), and allow new effects to be
added along the way such as the short-circuiting Option.

Breaking changes:

* Remove the automatic awaiting of monadic arguments to user-defined
  coroutine functions. The reason is that it was a misfeature that
  worked for the lisa.fuzz.Gen monad, but is actually quite problematic
  for other state monads as the user looses control over the ordering of
  side effects. This can unfortunately be extremely important for some
  monads.

* Re-purpose the "lift" method to act like a monad transformer lift.
  Existing use of "Monad.lift()" need to be converted to "Monad.do()"
  instead.

* Rename StateMonad into State

* StateMonad values can now only be called once.
Thu Sep 30 15:01:32 2021 +0100
f7819202727f8538f4da16deacbd3f810227cc9e
lisa.utils: Replace serialized_whitelist/blacklist/placeholders by ATTRIBUTES_SERIALIZATION

BREAKING CHANGE

Remove:
    * Serializable.serialized_whitelist
    * Serializable.serialized_blacklist
    * Serializable.serialized_placeholders

And replace them by:
    * Serializable.ATTRIBUTES_SERIALIZATION['allowed']
    * Serializable.ATTRIBUTES_SERIALIZATION['ignored']
    * Serializable.ATTRIBUTES_SERIALIZATION['placeholders']
Thu Jul 22 09:53:54 2021 +0100
c5bdd884876a923a291e16e83740eed011a0d38b
lisa.doc: Rename to lisa._doc

BREAKING CHANGE
Thu Jul 22 09:53:54 2021 +0100
0f8be195ba174ec9d31421b8829e822cd1e061a5
lisa.proxy: Rename to lisa._proxy

BREAKING CHANGE
Thu Jul 22 09:53:54 2021 +0100
a5efaaebacb54bf714a2336b6a3199e029030d9b
lisa.typeclass: Rename to lisa._typeclass

BREAKING CHANGE
Thu Jul 22 09:53:54 2021 +0100
f4ae7be508824c8935668648a765adf368311302
lisa.generic: Rename to lisa._generic

BREAKING CHANGE
Thu Jul 22 09:53:54 2021 +0100
23aeb26da9880958d82f880f6c54729eca5e4045
lisa.assets: Rename to lisa._assets

BREAKING CHANGE
Thu Jul 22 09:53:54 2021 +0100
d168e565ab3f49a41cb5ac0a1d03f612bd5ea1d0
lisa.git: Rename to lisa._git

BREAKING CHANGE
Tue Jul 13 18:46:29 2021 +0100
1686a31c095480f8f8faeae08063ef0cdf96e34d
lisa-plot: Update to use refurbished analysis plot backends

Update to use holoviews, using the bokeh backend.

BREAKING CHANGE

--xkcd option is removed as it is not supported by bokeh.
--matplotlib-backend option is removed as it becomes irrelevant.
Tue Jul 13 18:46:29 2021 +0100
a721aa42b060a4b5a8e40124fef7143b700ce1e1
lisa.stats: Use holoviews for plots

BREAKING CHANGE

Plot methods of lisa.stats.Stats used to return matplotlib Axes objects,
they now return holoviews elements.
Tue Jul 13 18:46:29 2021 +0100
c20e0e9be4bff21eec848493413b6093220575a3
lisa.stats: rename Stats.plot_histogram nbins parameter to bins

BREAKING CHANGE

Align all "bins" parameters in lisa to "bins".

Old calls:

    Stats.plot_histogram(nbins=...)

Need to be turned into:

    Stats.plot_histogram(bins=...)
Thu May 13 11:00:22 2021 +0100
5a6613be785e278979f3c760bc4e979e5ff01e75
lisa.tests.base: Remove CannotCreateError

Remove CannotCreateError and turn ResultBundleBase into an Exception.
This allows raising it directly, avoiding the need for a separate
exception type.

BREAKING CHANGE

Replace "raise CannotCreateError(...) from X" by
"ResultBundle.raise_skip(..., from_=X)"
Fri Apr 9 15:44:06 2021 +0100
ebba071bcbddf5171268fdbfde6f619afd974ad9
lisa.colors: Remove lisa.colors as it is unused

BREAKING CHANGE
Thu Apr 8 10:07:33 2021 +0100
4aae9d9c9a071d2c8011fdbf139133d12b6cfc8e
lisa.tests: Pass a composed collector to _from_target()

_from_target() now takes a "collector" parameter, which is an instance
of lisa.trace.ComposedCollector. This collector value is filled-in by
the TestBundleMeta machinery, according to the classes you inherited
from. For example, inheriting from DmesgTestBundle will add a
DmesgCollector to the composed collector.

The "ftrace_coll" parameter is removed since it becomes useless.

BREAKING CHANGE

External API:
TestBundle.from_target(ftrace_coll=...) parameter is removed.

Internal API: Each _from_target() implementation needs to take an
"collector" parameter, which will be filled-in with the
ComposedCollector instance.
Thu Mar 25 12:06:28 2021 +0000
de3e9dbcec4d58e98b772210e027fe5472031325
lisa.wlgen.workload: Rename required_tools to REQUIRED_TOOLS

BREAKING CHANGE

Use an upper case name to reflect the fact that it's a class constant.
Thu Mar 25 12:06:28 2021 +0000
d611979d7a8f8fef717e05ee7e94d62bbf8a373b
lisa.wlgen.sysbench: Port Sysbench to the new Workload API

BREAKING CHANGE

Extra sysbench CLI options passed directly to Sysbench.run() will now
have to be passed inside a dictionary to the "cli_options" parameters:

    # Old code:
    wload = Sysbench(...)
    wload.run(foobar=42)

    # New code:

    # Using deprecated API:
    wload = Sysbench(...)
    wload.run(cli_options=dict(foobar=42))

    # Using the recommended API
    wload = Sysbench(..., cli_options=dict(foobar=42))
    wload.run()

    # Or
    wload = Sysbench(...)
    wload = wload(cli_options=dict(foobar=42))
    wload.run()

This will avoid clashes between CLI options of Sysbench and future
expansion of the Workload API.
Thu Mar 25 12:06:28 2021 +0000
ccc73979bb1bf7986833d368cb5ebc30c396ebb6
lisa.wlgen.rta: Port RTA to the new Workload API

BREAKING CHANGE

The main user-visible change is that some files in res_dir will not be
created as eagerly as they used to be:

  * RTA.local_json is created by RTA.deploy() instead of by RTA.__init__
  * The rt-app log files pulled with log_stats=True are pulled in
    RTA.cleanup(), so they will not be available right after RTA.run()
Thu Mar 25 12:06:28 2021 +0000
20e78a0b0c11ff6484ae6164e50b6ee5780c0b7a
lisa.wlgen.workload: Fix long standing Workload API issues

* Return output from run() instead of mutating an attribute.
* Add a background_run() method
* Provide access to all the settings in workload constructors, rather
  than delayed information through run(). This allows workloads to take
  advantage of settings like "as_root"
* Allow reinitialization of the workload instances with another set of
  constructor parameters, e.g.:
    wload = Workload(...)
    # Create a new instance with other settings
    wload = wload(as_root=True)

BREAKING CHANGE

The user-level API is still backward compatible but subclasses will need
to be ported to the new internal API.
Mon Mar 15 15:53:53 2021 +0000
f950bab5958fcc028a62d2097f143fe32b39bd4b
lisa.tests.base: Add TestConfBase class

Allow hosting all the configurations under a single "test-conf"
top-level key.

BREAKING CHANGE

The DmesgTestConf class top-level key is now test-conf/dmesg instead of
dmesg-test-conf.
Wed Mar 3 11:11:56 2021 +0100
9a6f6b1a0b0a2e1681987edab57d8816c577864f
lisa.tests.base: Add buffer phase in get_rtapp_profile()

BREAKING CHANGE

Subclasses of RTATestBundle will now need to implement
_get_rtapp_profile() rather than directly get_rtapp_profile(), since the
buffer phase will be added by RTATestBundle.get_rtapp_profile().
Also, _get_rtapp_profile() will only be forwarded keyword arguments, not
positional ones.

The change is necessary in order to resolve phase names from the trace,
since the code needs to use the real profile that was used. Otherwise,
the phase IDs are shifted.
Wed Mar 3 11:11:56 2021 +0100
ca8490db86d7edc6b46485b5df483e1a6938b244
lisa.wlgen.rta: Introduce new wlgen rt-app API

BREAKING CHANGE

Implement legacy classes as shims around the new classes.
The only breaking change is loops=-1 not being supported anymore in
RTATask, since rt-app provides no way of correctly composing workloads
with infinite loops (for now).

Also, all the new classes are designed to be immutable, which means that
inplace operations (e.g. +=) will return a new instance instead of
modifying the existing one.

Also split the responsibilities of RTAWorkload:
* running the workload => RTAWorkload
* creating the JSON configuration => RTAConf

This allows creating a configuration file without having to connect to a
target if needed.
Thu Jan 14 19:43:34 2021 +0100
1e3fcafd68392d3720de8240cbe6072986118403
lisa.trace: Use trace-cmd raw report for unknown events

BREAKING CHANGE

Events without a parser already in LISA will now default to parsing the
raw output of trace-cmd, since the human readable one will either be
identical or impossible to parse without a handcrafted parser.

In order to get the old behavior, a custom trace parser needs to be used
(or more likely, use a trace parser with custom event parser). See
Trace(parser=...) parameter documentation for how to do that.
Fri Nov 13 17:52:20 2020 +0000
32782c7b39e18fc9f4ce091687930023f2f001c0
lisa.trace: Rename 'func' column to 'ip' for print events

BREAKING CHANGE

print/bprint/bputs events will now have an "ip" column instead of "func"
to align with kernel names, so it is consistent across parsers.

Note: There is no guarantee on whether the content is an address or
a function name anyway, so filtering it using
FunctionsAnalysis.df_resolve_ksym() is the only reliable way of getting
a function name out of it.

Note 2: This does not affect meta events like trace_printk@... or
userspace@..., which is the typical way of interacting with
print/bprint/bputs.
Wed Nov 11 16:52:13 2020 +0000
1ec18af78bcdca2c762feb3d203844809f27fd0f
lisa.trace: TxtTraceParserBase: rename __time into __timestamp

BREAKING CHANGE

Classes derived from TxtTraceParserBase will have to use "__timestamp"
instead of "__time" as regex group name.

This is done to ease alignment of different parsers.
Wed Nov 11 10:57:30 2020 +0000
357d106ca3008c9ecfa90cb8e8dfa96bd2131668
lisa.trace: Use HRTxtTraceParser by default for .txt trace

BREAKING CHANGE

Since text trace are typically in the human readable format (as opposed
to the semi-machine readable raw output of trace-cmd report), use this
by default for .txt extension.

If the old behaviour is still wanted, traces can be built with:

    from lisa.trace import Trace, TxtTraceParser
    Trace(..., parser=TxtTraceParser.from_txt_file)

The new behaviour is equivalent to:

    from lisa.trace import Trace, HRTxtTraceParser
    Trace(..., parser=HRTxtTraceParser.from_txt_file)

As a side effect, this will enable lisa-plot to work out of the box (to
some extent) with such text trace.
Thu Oct 15 12:17:34 2020 +0100
cfa3dfbbb11e59efbc317666c7aae0ff9a7d4148
lisa.analysis.base: Move COLOR_CYCLES to notebook and rename to COLOR_CYCLE

BREAKING CHANGE

Replace:
from lisa.analysis.base import COLOR_CYCLES

by:
from lisa.notebook import COLOR_CYCLE
Fri Jun 5 17:25:29 2020 +0100
154e994b9ee62abfe418d228cf753bdd8d5b5742
tools: lisa-plot: Rename --platinfo into --plat-info

BREAKING CHANGE

Rename --platinfo into --plat-info to align with other tools.
Wed Jun 3 15:38:28 2020 +0100
66103ec81e257c458735432a17a1bf185aa42d2a
lisa.wlgen: Make Workload 'name' parameter optional

BREAKING CHANGE

The "name" parameter has changed position to make it optional. This code:

    wload = RTA.by_profile(target, "4_50_tasks", profile)

Needs to be rewritten as:

    wload = RTA.by_profile(target, profile, name="4_50_tasks")

Being forced to specify a meaningful name always buggered me, especially
since it is not at all required under the hood - we get uniquely identified
directories and all that.

That plus the qualname ought to be good enough. I was actually tempted to
remove it alltogether, but then there's things like naming the JSON file
for the rt-app calibration that makes sense.

Signed-off-by: Valentin Schneider <valentin.schneider@arm.com>
Wed May 13 13:02:50 2020 +0100
48d761f154d6eab8922ba0adf086a4731f102577
lisa.trace: Remove barely used Trace.df_events(rename_cols=True) option

BREAKING CHANGE

Since the scope of sanitization functions have been reduced to
formatting data so that it matches what is used inside the kernel,
remove column renaming.

This was already done in analysis methods anyway, which are much better
suited to having ad-hoc parameters tailored to a specific event.
Wed May 13 13:02:50 2020 +0100
551ec432a865dbc974456a1829567cfb842bae80
lisa.analysis.functions: Move ksym resolution from event sanitization to analysis

BREAKING CHANGE

Move more advanced data processing to trace analysis for the following
events:

    * funcgraph_entry: trace.analysis.functions.df_funcgraph('entry')
    * funcgraph_exit: trace.analysis.functions.df_funcgraph('exit')
Wed May 13 13:02:50 2020 +0100
9789de3d43e60879abd7cb943f46eea281f71c60
lisa.analysis.functions: Rename FunctionsAnalysis

BREAKING CHANGE

Rename into JSONStatsFunctionsAnalysis to free up the name for an
ftrace-based analysis.
Wed May 13 13:02:50 2020 +0100
e7cb1ccea25b71adbb73226bae45a8a5704cdd4e
lisa.trace: Remove sanitization for cpu_frequency event

BREAKING CHANGE

Consolidate the cleanup logic in FrequencyAnalysis.df_cpus_frequency().
If you want that cleaned up version, please use that:
  trace.analysis.frequency.df_cpus_frequency()
Instead of that:
  trace.df_events('cpu_frequency')

Since the later is the raw version.
Wed May 13 13:02:49 2020 +0100
aa61fcf244a1db5885b2ca6a3d124c2531bea192
lisa.trace: Add text trace parser

BREAKING CHANGE

Parse text traces based on the output of `trace-cmd report -R`
Also add some convenience parser for the human readable format.

Quick & dirty events based on calling trace_printk() in the kernel now
need to be prefixed with "trace_printk@" when parsed in lisa:

 kernel: trace_printk("foo: field1=42 field2=hello world")
 lisa  : trace.df_events('trace_printk@foo')

Matching on calling function name can be achieved with:

 kernel: (called from function foo()) trace_printk("field1=42 field2=hello world")
 lisa  : trace.df_events('trace_printk@func@foo')

Similarly, events generated from userspace by writing to
/sys/kernel/debug/tracing/trace_marker need to be prefixed:

 user: echo "foo: field1=42 field2=hello world" > /sys/kernel/debug/tracing/trace_marker
 lisa: trace.df_events('userspace@foo')

Note: The format is expected to follow the raw format of
`trace-cmd report -R`, such as in the example.

Also, event field names are now reflecting the name they have in the
kernel. Since trappy has non-optional renaming of the fields, client
code update might be needed. The recommended way is to use the high
level df_* functions from the analysis where applicable, since they will
give friendlier names and can usually cope with multiple formats of the
event across kernel versions if necessary.
Wed Apr 22 18:55:34 2020 +0100
22ab4075cdf1d24902f723a5999d09e41cb0044c
lisa.generic: Move generic classes from lisa.conf to lisa.generic

BREAKING CHANGE

Split unrelated classes into a separate module.
Wed Feb 19 14:18:32 2020 +0000
f28c9efcec417a88828cbe899e6fe83b7ea8f2c8
lisa.analysis.tasks: Make df_task_activation() duty_cycle aware of preemption

BREAKING CHANGE

Make sure the duty cycle is not affected by preemption by default.

The former behaviour where preempted == sleeping can be restored with
preempted_is_sleeping=True.
Fri Feb 14 15:29:26 2020 +0000
48af7a276cc0b16d80d6947e24470c8e8358ebb1
lisa.analysis.rta: Rename RTAEventsAnalysis.tasks_window() into task_window()

BREAKING CHANGE

Fix a typo in function name.
Thu Feb 6 17:27:27 2020 +0000
0a2293ae4838001f7103e4461273817051b07a60
lisa.trace: Remove big/LITTLE assumption in events sanitization

BREAKING CHANGE

Remove logic that is big-little specific in events sanitization. If this kind of
processing is still needed, it needs to be added in an analysis as it goes well
beyond sanitization.

Removed features:
* max_capacity column from cpu_capacity event dataframe
* tip_capacity column from cpu_capacity event dataframe
* nrg_diff_pct column from sched_energy_diff event dataframe

* usage_delta_group column from sched_energy_diff event dataframe
* nrg_payoff_group column from sched_energy_diff event dataframe
Thu Feb 6 17:27:19 2020 +0000
f42b49114018a5a2fb1ae89dfe70c6981a70be2a
lisa.analysis.status: Move sched_overutilized synthetic "len" column to analysis

BREAKING CHANGE

Remove the "len" column from the "sanitization" function of sched_overutilized,
and move the feature into StatusAnalysis.df_overutilized().

Code using:
    df = trace.df_events('sched_overutilized')
    df['len']

Should use this instead:
    df = trace.analysis.status.df_overutilized()
    df['len']
Thu Feb 6 17:27:19 2020 +0000
da991ff64e210900f630335afcf2d93d0b8fbb62
lisa.datautils: Update df_window_signals to take a list of signals

BREAKING CHANGE

Rather than taking a list of columns defining the signals, take a list of
SignalDesc. In the future, this could permit defining the end of a signal, which
df_window_signals() would need to take into account.
Thu Jan 16 14:50:22 2020 +0000
692da950dd5ea34466a5016601a68718044f04ae
lisa.platforms.platinfo: Change cpu-capacities key

BREAKING CHANGE: The key has now multiple subkeys:

cpu-capacities:
    orig: {CPU: capa, ...} # Previously "cpu-capacities" key
    rtapp: {CPU: capa, ...} # CPU capacities adjusted to fit rtapp calibration
    writeable: True/False # True if CPU capacities are writeable in sysfs

When using the capacities to create an rtapp workload in implementations of
RTATestBundle.get_rtapp_profile(), "rtapp" subkey must be used in order to work
with the capacities that will be written in sysfs by RTATestBundle.run_rtapp().

If the capacities are not writeable, the "rtapp" subkey is equal to the "orig"
subkey.