# Philadelphia-fast SCAN DAC warmup probe

Run started 2026-10-01 22:52:06 UTC; reviewed 2026-10-02. The original is
`~/archive/libhft/fullbench/scan-philadelphia-fast-warmup/phfast_20261001_225206/`
on SCAN. The complete [retained bundle](evidence/scan-dac-20261001/philadelphia-fast-warmup/manifest.json)
includes successful and failed arms, binary samples, process logs, Java
reports, physical counters and canonical-cycle audits. Original bytes are
preserved; [SHA256SUMS](evidence/scan-dac-20261001/philadelphia-fast-warmup/SHA256SUMS)
covers every retained file.

## Shape and gates

The accepted Stage 5 topology is `scan/mlx5-DAC/same-host-netns`, through the
physical mlx5 DAC. The outer controller held `isol-no-shared` through
`host-cpu-slot`. Each flow used one server/client process pair and three
internal runs: 50,000 excluded warmups, 10,000 measured iterations per run,
offered rate 10,000/s. Warmup was **unpaced**, as the Java manifests record.
Increasing its count does not change the measured report contract.

Server I/O, client I/O and measurement threads were pinned to cores 13, 17
and 16. The manifest pins the installed launcher, jars and affinity library,
and controller revision `0d874fb08e845a9dd2a22c3c968dcdd3e2b041fc`.

| Flow | Grade | Samples | Achieved rate /s | Mean run p99, us | p99 CV | Result |
|---|---|---:|---|---:|---:|---|
| `nos_er` | S5 pass | 30,000 | 9,960–9,983 | 35.055 | 0.085916 | all gates pass |
| `md` | S5 diag | 30,000 | 9,960–9,982 | 3,282.282 | 1.440304 | stability fails |
| `md_nos_er` | S5 diag | none retained | unavailable | unavailable | unavailable | both processes time out, exit 124 |
| `tick_to_trade` | S5 pass | 30,000 | 9,953–9,982 | 27.147 | 0.034258 | server-clock gates pass |

All four retained first-cycle contract audits pass and both physical ports
show positive TX deltas per arm. That wire proof does not promote the
timed-out combined arm: it has no completed measured run or raw report.
Tick-to-trade uses the server's W-send to D-receive clock; the client's
reaction probe is diagnostic.

The [independent audit](evidence/scan-dac-20261001/philadelphia-fast-warmup/independent-audit.json)
re-reads each binary sample series and repeats the shared canonical auditor.
Each completed arm has exactly three 10,000-sample raw series, positive
latencies and zero dropped samples. No status in the global coverage table
is changed by this partial SCAN result: two passing flows do not complete
a four-flow comparison.

## Follow-up

The installed hft-bench supports `-Dhftbench.paceWarmup=true`; its default
is false. The measured loop is paced regardless of that setting. Unpaced
warmup can fill the bidirectional transport before measurement; this is a
possible explanation for the market-data behavior, not a proven cause of
the timeout. The subsequent
[controlled localhost diagnostic](evidence/philadelphia-paced-local-20261002/verification.json)
uses the same installed jars, affinity, 50,000 warmups and three measured
runs, with `paceWarmup=true`. Both server/client pairs exit zero, retain
30,000 raw samples, and pass the canonical-cycle, rate and stability gates:

| Flow | Achieved rate /s | Mean run p99, us | p99 CV |
|---|---|---:|---:|
| `md` | 9,980–9,983 | 33.156 | 0.073029 |
| `md_nos_er` | 9,980–9,983 | 53.226 | 0.018573 |

This is `scan/localhost/kernel-TCP` diagnostic evidence. It supports enabling
paced warmup; it does not establish a physical pass or isolate the precise
cause of the earlier DAC timeout. The narrow
`install-dac-philadelphia-warmup-stage5.sh` update verifies the unchanged jar
and affinity-library hashes before installing the paced namespace launcher.
It refuses installation while a Philadelphia JVM is active. Root installation
and a fresh four-flow physical report remain required.
