rtic-scope / cargo-rtic-scope

Non-intrusive ITM tracing/replay toolset for RTIC programs with nanosecond timestamp accuracy.
16 stars 4 forks source link

Replay output is not deterministic #113

Open tmplt opened 2 years ago

tmplt commented 2 years ago

Replaying the trace file in trace.zip yields different output each time:

$ cargo rtic-scope replay --trace-file /path/to/trace-file
     Warning cannot map Instrumentation { port: 8, payload: [128, 136, 14, 28] } packet
       Error /home/tmplt/.cargo/bin/rtic-scope-frontend-dummy: @63 µs (+63 ns): [Unknown(Instrumentation { port: 8, payload: [128, 136, 14, 28] })]
       Error /home/tmplt/.cargo/bin/rtic-scope-frontend-dummy: @626 µs (+563 ns): []
     Warning Overflow detected! Packets may have been dropped and timestamps will be diverged until the next global timestamp
     Warning cannot map ExceptionTrace { exception: ThreadMode, action: Returned } packet: The IRQ ThreadMode does not map to any hardware task or software task dispatcher
       Error /home/tmplt/.cargo/bin/rtic-scope-frontend-dummy: @689 µs (+63 ns): [Task { name: "app::hardware", action: Exited }]
       Error /home/tmplt/.cargo/bin/rtic-scope-frontend-dummy: @3127 µs (+2375 ns): [Task { name: "app::software", action: Exited }, Overflow, Unmappable(ExceptionTrace { exception: ThreadMode, action: Returned }, "The IRQ ThreadMode does not map to any hardware task or software task dispatcher")]
    Replayed atsamd-demo: 12 packets processed in 0s (~inf packets/s; 0 malformed, 2 non-mappable); 1/1 sinks operational.
$ cargo rtic-scope replay --trace-file /path/to/trace
     Warning cannot map Instrumentation { port: 8, payload: [128, 136, 14, 28] } packet
     Warning Overflow detected! Packets may have been dropped and timestamps will be diverged until the next global timestamp
     Warning cannot map ExceptionTrace { exception: ThreadMode, action: Returned } packet: The IRQ ThreadMode does not map to any hardware task or software task dispatcher
       Error /home/tmplt/.cargo/bin/rtic-scope-frontend-dummy: @63 µs (+63 ns): [Unknown(Instrumentation { port: 8, payload: [128, 136, 14, 28] })]
       Error /home/tmplt/.cargo/bin/rtic-scope-frontend-dummy: @689 µs (+63 ns): [Task { name: "app::hardware", action: Exited }]
       Error /home/tmplt/.cargo/bin/rtic-scope-frontend-dummy: @752 µs (+63 ns): [Task { name: "app::software", action: Entered }]
       Error /home/tmplt/.cargo/bin/rtic-scope-frontend-dummy: @3127 µs (+2375 ns): [Task { name: "app::software", action: Exited }, Overflow, Unmappable(ExceptionTrace { exception: ThreadMode, action: Returned }, "The IRQ ThreadMode does not map to any hardware task or software task dispatcher")]
    Replayed atsamd-demo: 12 packets processed in 0s (~inf packets/s; 0 malformed, 2 non-mappable); 1/1 sinks operational.

This is because of the async reading of the frontend stderr, so the above should be expected, but it is not very intuitive.