Results · phases 1–2
Evidence, not claims
Each hypothesis with its number, its figure, its archive and the caveat that matters most. Every value is quoted from FACTS.md, the registry that copies each frozen summary in vxperiments/results/.
| Hypothesis | Experiment | Verdict | Headline |
|---|---|---|---|
| H1 — slice isolation under overload | exp-001 | holds | adas p99 81.9 µs at 600 mbit vs 89.6 µs baseline |
| H2 — real S-NSSAI slicing vs static VLAN | exp-010 | holds | p99 growth 0.95× vs 0.91× |
| H3 — virtual-ECU packaging | exp-002b | holds | transport Δp50 −26.0 µs |
| H4 — OTA co-location | exp-003 | holds | Δp50 −0.3 µs, inside IQR |
Every campaign: 5 reps per arm or load point, 1000 pps × 60 s per point (60 000 probes), 10 s warmup discarded. Each result was reproduced by an independent second campaign ( VLAN mapping plus a tc HTB queue-tree reservation keeps the Caveat. An earlier version of this campaign measured loopback delivery instead of the gateway path, because probe and reflector sat in the same network namespace. That defect was fixed with real netns isolation and is now covered by a CI regression test; the numbers above are the corrected re-run. Summary → S-NSSAI PDU sessions through Open5GS and UERANSIM, compared against Caveat. The first campaign did not hold: nothing in the 5G path applied per-slice QoS. Configuring 5QI/AMBR alone was checked first and changed nothing; the fix was real HTB enforcement on the slice path, then a re-run with host-noise mitigations (CPU governor, core pinning, randomized load order). Every intermediate campaign is kept in the results directory. Summary → Caveat. libvirt beating raw QEMU is likely because libvirt enables vhost and optimized virtio settings a bare QEMU invocation does not; that attribution is an inference, not a separate measurement. Summary → Sustained back-to-back 5 MB artifact delivery — 361 deliveries per repetition, 0 failed — runs alongside the Caveat. The v1 OTA transport binds a plain host address, so this measures host-level CPU and scheduling contention between OTA and the probe, not gateway-QoS-enforced network contention. A same-day second campaign moved every absolute number outside the first campaign's IQR (0 of 6 metric/arm pairs inside) while the comparative verdict held — session-to-session host drift that within-campaign IQRs do not bound. Summary → These are properties of the host class used for phases 1–2, not of one machine: Every archive carries --repro) that reached the same verdict. Hover a point or bar for its value and IQR. Every number here is quoted from the facts registry.Slice isolation under overload
adas slice's tail at baseline while the infotainment slice is driven from idle to 1.2× overload of the 500 mbit uplink. Loss is 0.0 % at every load level. Holds.exp-001, 5 reps × 5 loads, 60 000 probes per point. adas p99 RTT; dashed line is the 0-load baseline. Manifest sha256 2666fbf561ae…. Archive: vxperiments/results/exp-001/.load (mbit) p50 µs (IQR) p95 µs (IQR) p99 µs (IQR) loss % 0 49.9 (0.8) 71.4 (6.7) 89.6 (6.4) 0.0 100 51.1 (3.0) 72.0 (6.1) 87.5 (7.0) 0.0 250 49.8 (1.9) 70.1 (3.3) 84.5 (4.7) 0.0 400 50.6 (1.3) 72.3 (3.1) 85.2 (4.2) 0.0 600 51.4 (1.8) 69.2 (2.8) 81.9 (5.0) 0.0 Real slicing vs static mapping
exp-001's VLAN arm. The 5G path has a higher absolute floor — p99 ≈ 317–337 µs, since it crosses a software UPF and GTP-U — but its tail grows no faster under load than the VLAN path's. Holds, inside the 1.1× tolerance.exp-010 vs exp-001, 5 reps × 5 loads each. p99 RTT indexed to each path's own 0-load value, so the two floors compare on one axis. Manifest sha256 4fa24418b7a1…. Archive: vxperiments/results/exp-010/.load (mbit) p50 µs (IQR) p95 µs (IQR) p99 µs (IQR) loss % 0 269.3 (7.3) 305.2 (11.5) 335.1 (14.1) 0.0 100 254.1 (3.6) 299.5 (2.6) 324.1 (6.9) 0.0 250 261.6 (4.0) 313.1 (4.7) 336.6 (12.7) 0.0 400 260.9 (1.9) 294.7 (7.4) 318.7 (23.0) 0.0 600 260.7 (4.7) 293.4 (5.9) 317.2 (10.8) 0.0 Packaging choice — and the obvious explanation was wrong
exp-002 found microVMs slowest and attributed it to the machine type. exp-002b was built to separate the factors, and the ranking survived while the cause did not: the virtio transport dominates, and machine type alone has no measurable effect. Holds.exp-002b, 5 reps × 6 arms, 1.8M probes over 30 archives. adas p50 RTT per packaging arm. Manifest sha256 625840eeeb0c…. Archive: vxperiments/results/exp-002b/.factor arms compared Δp50 verdict virtio transport (MMIO → PCI) microvm-pci vs microvm-mmio−26.0 µs matters (IQR 2.2 µs) management (libvirt vs raw QEMU) libvirt-q35 vs q35-pci−17.3 µs matters (IQR 2.0 µs) vhost-net (on vs off) q35-vhost vs q35-pci−9.5 µs matters (IQR 2.5 µs) machine type (q35 vs microvm) q35-pci vs microvm-pci−0.3 µs no measurable effect arm p50 µs (IQR) p99 µs (IQR) CPU % RSS MB container 54.6 (1.3) 94.4 (2.8) 4.3 7.3 libvirt-q35 70.3 (1.6) 117.6 (2.4) 8.2 166.2 q35-vhost 78.1 (2.5) 122.9 (4.4) 9.1 150.6 q35-pci 87.6 (2.0) 138.6 (2.6) 11.3 150.9 microvm-pci 87.9 (2.2) 138.2 (3.2) 11.4 150.2 microvm-mmio 113.9 (2.0) 165.0 (6.3) 15.0 146.4 A co-located OTA burst vs the safety slice
adas probe. The median moves by less than the baseline's own spread. Holds.exp-003, 5 reps × 2 arms, 60 000 probes per arm-repetition, 0.0 % loss in both arms. adas RTT percentiles. Manifest sha256 1efebdef615f…. Archive: vxperiments/results/exp-003/.arm p50 µs (IQR) p95 µs (IQR) p99 µs (IQR) OTA deliveries ok/fail baseline 52.2 (6.0) 80.7 (4.9) 97.7 (5.6) n/a ota-burst 51.9 (1.7) 79.9 (6.3) 93.1 (5.5) 361 / 0 What applies to everything above
performance CPU governor, measurement cores pinned.SO_TIMESTAMPING is tracked open work.metadata.json, the manifest, raw Prometheus scrapes, structured samples and run-env.json. Host requirements per tier, the full methodology and every caveat are in the docs. To reproduce a number: Getting started.