c3cea695c8
`air-trace run` subcommand allows to run AquaVM on any data, it allows to define most AquaVM inputs, providing defaults for most of them, and sets up either human-readable or JSON tracing output, the latter can be later processed by `air-trace stats`. Anomaly data input is also supported, that is useful for slow data investigation. Native execution mode can be used for native profiling. Please note, however, that current version cannot be built natively on Apple Sillicon processor yet, as invariably depends on the `avm-server` because of leaking types that should be refactored or hidden. The `--repeat` option can repeat the execution several times for the execution to dominate on input data reading and output. High-level or rare calls have "info" trace level, instructions are "debug", and sub-instruction calls are "tracing". Over-detailed tracing can induce overhead that spoils timing data. |
||
---|---|---|
.. | ||
src | ||
.rustfmt.toml | ||
Cargo.toml | ||
README.md |
AIR trace handler
This crate contains implementation of the CRDT-based merging data algorithm. It exposes the TraceHandler
struct that based on the visitor pattern and has public methods that should be called in certain places of AIR instructions execution. Internally TraceHandler
contains several FSM and each of such public methods does state transitioning of one or more these FSMs. Below are state transition sequences for all instructions that caller must follow.
Ap instruction
Expected sequence of TraceHandler
calls for the ap
instruction:
meet_ap_start
-> meet_ap_end
Call instruction
Expected sequence of TraceHandler
calls for the call
instruction:
meet_call_start
-> meet_call_end
Par instruction
Expected sequence of TraceHandler
calls for the par
instruction:
meet_par_start
-> meet_par_subgraph_end(..., SubgraphType::Left)
-> meet_par_subgraph_end(..., SubgraphType::Right)
Fold instruction
Expected sequence of TraceHandler
calls for the fold
instruction:
meet_fold_start.1 ->
meet_generation_start.N ->
meet_next.M ->
meet_prev.M ->
meet_generation_end.N ->
meet_fold_end.1
where .T means that this function should be called exactly T times.