9.3 KiB
Performance Tests
Deployment-binding numbers require Tier T4 (real Jetson Orin Nano Super @ 25 W). T1 runs are functional plausibility checks only — same caveat as
test-data.mdD2.
NFT-PERF-01: End-to-end latency p95 ≤400 ms (AC-4.1)
Summary: From camera-frame capture to GPS_INPUT emission, p95 latency ≤ 400 ms on Orin Nano Super @ 25 W.
Traces to: AC-4.1. Tier: T4 (deferred-hil) for binding result; T1 functional smoke.
Metric: end-to-end latency in ms, sampled per-frame, aggregated to p50 / p95 / p99.
Preconditions:
- Tier T4: real Jetson Orin Nano Super, 25 W power mode (
nvpmodel -m 0+ 25 W profile), thermals stabilized at +25 °C ambient. - TRT engines warmed (≥1 min steady-state replay before measurement).
- 30-min sustained replay of
synthetic_8h_loadslice (or AerialVL S03 mid-segment). - Frame timestamping uses the camera-shim
time_usecand matches against the GPS_INPUTtime_usec.
Steps:
| Step | Consumer Action | Measurement |
|---|---|---|
| 1 | Stream nav-cam frames at 3 fps for 30 min after warm-up | per-frame (t_emit_gps_input - t_capture) |
| 2 | Drop the first 60 s as warm-up | aggregate the rest |
| 3 | Compute p50, p95, p99, max | report |
| 4 | Verify drop rate | dropped_frames / total_frames ≤ 10% |
Pass criteria: p95 ≤ 400 ms; drop rate ≤ 10 % (per AC-4.1's "skip-allowed" clause). Duration: 30 min + 60 s warm-up.
NFT-PERF-02: cuVSLAM single-frame latency ≤20 ms
Summary: cuVSLAM inference completes within 20 ms per frame. Traces to: results_report row 37, F-T1b. Tier: T4 binding; T1 functional. Metric: cuVSLAM per-frame inference duration, p95.
Preconditions: cuVSLAM warmed; mono+IMU mode.
Steps:
| Step | Consumer Action | Measurement |
|---|---|---|
| 1 | Replay 5 min of nav-cam frames at 3 fps | per-frame cuvslam_inference_ms (publicly exposed metric) |
| 2 | p95 over the run | report |
Pass criteria: p95 ≤ 20 ms. Duration: 5 min.
NFT-PERF-03: Cross-view matcher latency
Summary: Inline matcher (SP+LG TRT FP16/INT8) ≤ 200 ms / pair; LiteSAM re-loc fallback ≤ 2000 ms / pair. Traces to: AC-4.1 (sub-budget), results_report row 38. Tier: T4 binding. Metric: per-pair matcher inference time, p95.
Preconditions: matcher warmed; representative resolution (1024×768 SP+LG / GIM-LG).
Steps:
| Step | Consumer Action | Measurement |
|---|---|---|
| 1 | Replay 1000 cross-view pairs through inline path | inline_matcher_ms per pair |
| 2 | Replay 100 cross-view pairs through re-loc path | reloc_matcher_ms per pair |
Pass criteria: inline p95 ≤ 200 ms; re-loc p95 ≤ 2000 ms. Duration: ≤30 min.
NFT-PERF-04: Orthority per-frame latency ≤50 ms
Summary: Orthority's per-frame ortho call on Orin Nano Super stays within budget.
Traces to: F-T14, M-27. Tier: T4 binding. If exceeded, fall back to cv2.warpPerspective + bilinear DEM per Component 1b documented fall-back.
Metric: ortho per-frame duration, p95.
Preconditions: Orthority loaded; SRTM-30 m DEM mmap warm; sector classified flat or moderate.
Steps:
| Step | Consumer Action | Measurement |
|---|---|---|
| 1 | Replay 1000 frames | per-frame ortho_ms |
Pass criteria: p95 ≤ 50 ms. If FAIL: open task to switch to fall-back path (not a blocking gate at this test, but a flow trigger). Duration: ≤10 min.
NFT-PERF-05: Spoofing-promotion latency ≤3 s p95 (AC-NEW-2)
Summary: Time from spoof onset to SUT promotion as primary GPS source.
Traces to: AC-NEW-2. Tier: T3 (deferred-sitl).
Metric: t_promote = t_promotion_event - t_spoof_onset, p95 over 50 trials.
Preconditions: SITL + gps-spoof-injector; FC EKF3 lane-switch event observable via EKF_STATUS_REPORT.
Steps:
| Step | Consumer Action | Measurement |
|---|---|---|
| 1 | At t=0 inject spoof signal | observe SUT GPS_INPUT promotion (raised fix_type to 3D-fix-with-priority + STATUSTEXT PROMOTE) |
| 2 | Repeat 50 trials with randomised spoof magnitudes | distribution |
Pass criteria: p95 ≤ 3 s. Duration: ≤30 min.
NFT-PERF-06: Frame-by-frame output cadence (AC-4.4)
Summary: GPS_INPUT is streamed per-frame, not batched. Traces to: AC-4.4. Tier: T1 + T4. Metric: inter-frame interval distribution.
Preconditions: 30 min steady-state replay.
Steps:
| Step | Consumer Action | Measurement |
|---|---|---|
| 1 | Replay at 3 fps | sniff GPS_INPUT timestamps |
| 2 | Compute inter-arrival deltas | distribution |
| 3 | Verify no frame is delayed >1 inter-frame interval | — |
Pass criteria: |Δt - 1/3 s| ≤ 50 ms for ≥99 % of frames; no batches (no clusters of frames within the same 50 ms window). Duration: 30 min.
NFT-PERF-07: GPS_INPUT message rate (results_report row 9)
Summary: GPS_INPUT emitted at 5–10 Hz continuous (matches per-frame at 3 fps + duplicates for FC stability when configured). Traces to: AC-4.3, results_report row 9. Tier: T1. Metric: rate over 60 s windows.
Preconditions: steady-state tracking.
Steps:
| Step | Consumer Action | Measurement |
|---|---|---|
| 1 | Sniff GPS_INPUT for 5 min | per-second rate |
Pass criteria: rate ∈ [5, 10] Hz throughout. Duration: 5 min.
NFT-PERF-08: VPR latency under conditional invocation
Summary: VPR's DINOv2 forward only fires on re-loc triggers; in cruise it stays near zero CPU/GPU. Traces to: AC-8.6, restrictions §Satellite (VPR retrieval unit). Tier: T4. Metric: VPR invocations / second; cruise idle vs re-loc burst.
Preconditions: 60-min replay with scripted re-loc triggers (cold start, sharp turn, σ_xy > 50 m, VO failure ≥2 frames).
Steps:
| Step | Consumer Action | Measurement |
|---|---|---|
| 1 | Run replay | per-second vpr_invocations counter |
| 2 | Compute average across cruise window vs re-loc window | — |
Pass criteria:
- Cruise window (no triggers): VPR invocations / 100 frames ≤ 1 (i.e., not invoked per-frame).
- Re-loc window: VPR invokes within 1 frame of trigger; latency ≤ 200 ms p95 for the DINOv2 forward. Duration: 60 min.
NFT-PERF-09: Top-K dynamic sizing matches sector / σ_xy
Summary: VPR top-K honours AC-8.6 dynamic-K rules. Traces to: AC-8.6. Tier: T1 + T4. Metric: K value selected per VPR call vs sector class + σ_xy.
Preconditions: scripted scenarios with (sector ∈ {stable, active}) × (σ_xy ∈ {10, 30, 60}).
Steps:
| Step | Consumer Action | Measurement |
|---|---|---|
| 1 | Trigger VPR in each combination | observe vpr_top_k metric |
Pass criteria:
- stable + σ_xy ≤ 20 m → K=5.
- active-conflict → K=20.
- expanding-window fallback (σ_xy > 50 m or fail-N) → K=50. Duration: 5 min.
NFT-PERF-10: Failsafe latency ≤3 s no-fix → FC fallback (AC-5.2)
Summary: When SUT cannot produce any estimate for >3 s, FC observably falls back to IMU-only DR.
Traces to: AC-5.2. Tier: T3.
Metric: time from last-fix-emission to FC fallback signal in EKF_STATUS_REPORT.
Preconditions: scripted blackout in SITL.
Steps: blackout pipeline; observe FC.
Pass criteria: FC fallback observable within 4 s of blackout (3 s budget + 1 s observation latency). Duration: 5 min.
NFT-PERF-11: Bench-off candidates — accuracy-vs-latency frontier
Summary: Score inline matcher candidates on the documented bench-off corpora. Traces to: AC-1.1 / AC-1.2 / AC-2.2 / R2 / R3, F-T15. Tier: T2. Metric: per-candidate (recall@30 m, p95 latency, peak GPU mem, sustained 30-min thermal stability, seasonal-robustness score).
Preconditions: AerialVL, UAV-VisLoc, AerialExtreMatch, 2chADCNN, TartanAir V2, internal Mavic.
Steps: run each candidate (SP+LG, GIM-LG, XFeat sparse, XFeat semi-dense) and each ceiling reference (RoMa v2, MASt3R-SLAM, MapGlue, MATCHA — offline only) over the corpora.
Pass criteria:
- Inline candidates must fit in 200 ms / pair on Orin Nano Super @ 25 W.
- Re-loc candidates (LiteSAM) must fit in 2 s / pair.
- Selected inline matcher's recall@30 m on AerialVL S03 must support AC-1.1 / AC-1.2. Duration: 4 h Monte Carlo.
NFT-PERF-12: Latency under adversarial input — no infinite stall
Summary: Pathological inputs (uniform-grey frame, all-black frame, very low contrast) do not cause unbounded latency. Traces to: AC-3.x (resilience), AC-4.1 (negative). Tier: T1. Metric: per-frame latency capped.
Preconditions: replay with 5 % of frames replaced by uniform-grey or all-black.
Steps: replay 30 min; observe latency CDF.
Pass criteria: each frame's latency ≤ 600 ms (1.5× p95 budget); pipeline never stalls beyond a single frame interval. Duration: 30 min.
Test execution caveats
- T1 runs: produced numbers are NOT deployment-binding. AC-4.1 / NFT-PERF-01 specifically requires Orin Nano Super 25 W (T4) for binding pass.
- T4 runs: bench scheduler enforces single-tenant access; thermal warm-up ≥1 min before measurement window starts.
- Frame-rate floor: AC-4.1 allows ~10 % drop under sustained load. Drop rate IS measured and reported in NFT-PERF-01.