Add recorder: raw CAN and GNSS sessions with failsafes and a storage bound
Reads SocketCAN and gpsd directly. Sessions start on the first frame or on 'ctl start', end after 15 s of bus idle or on 'ctl stop'; blips under 3 s are discarded. candump -L chunks fdatasync'd every second and zstd'd once closed; oldest sessions deleted to stay under 50 GB / above 20 GB free. Kernel and queue drops, link changes and clock steps are recorded as events. Bench-tested on vcan with the first car capture (byte-identical) and installed on the car Orin as yukart-recorder.service. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
---
|
||||
type: report
|
||||
date: 2026-10-09
|
||||
---
|
||||
# Recorder bench test
|
||||
|
||||
Replaying the first in-car capture (`z27ag-20261009-163736-ign.log`, 10 s,
|
||||
8925 frames) onto a `vcan0` with its original timing, against a fake gpsd on the
|
||||
workstation and the real gpsd on the car Orin.
|
||||
|
||||
## Scenarios
|
||||
|
||||
| # | Scenario | Result |
|
||||
|---|---|---|
|
||||
| 1 | Full replay, `mark` at t≈3 s | auto session; 8925 frames; ID#DATA sequence **byte-identical** to the source; 3 chunks at `--chunk-secs 4`, all compressed |
|
||||
| 2 | 1 s replay | discarded at close (under `--min-secs`, no marks) — after fixing the span to first→last frame; the first version counted the idle wait too and kept it |
|
||||
| 3 | `ctl start bench-test`, no CAN, `mark`, `stop` | manual session with label, mark and GNSS; no CAN chunk left behind |
|
||||
| 4 | `vcan0` deleted mid-session, recreated 1 s later | one session; `Network is down` → `No such device` → `socket open` recorded as `can_link` events |
|
||||
| 5 | SIGTERM mid-session | session closed, reason `shutdown`, exit 0 |
|
||||
| 6 | SIGKILL mid-session (3 s replay), restart | all 2676 frames on disk; marked `truncated` and compressed at restart |
|
||||
| 7 | `--cap-gb 0` | every older closed session deleted, the active one kept; sequence numbers continue from `.last-seq` |
|
||||
|
||||
On the car Orin (aarch64 cross-build, highest GLIBC_2.34 against its 2.35): the
|
||||
same full replay recorded 8925 frames and 55 KB of zstd; real gpsd reports (no
|
||||
fix indoors) recorded with the last TPV before start stamped `before_start`.
|
||||
Resident memory at idle: 5 MB.
|
||||
|
||||
## Not tested
|
||||
|
||||
- Real PCAN-USB hot-plug in the car (the `vcan` deletion stands in for it).
|
||||
- Sustained throughput beyond 890 frames/s, and the queue-overflow path.
|
||||
- A clock step during a session (the detection is in place; nothing stepped).
|
||||
|
||||
## Installed
|
||||
|
||||
`yukart-recorder.service` on `mikkeli-orin-nano`, enabled, running as `mikkeli`,
|
||||
waiting for `can_pcan`. Recordings: `/var/lib/yukart/recordings/`.
|
||||
Reference in New Issue
Block a user