Files
papers/lux-pq-consensus-benchmarks/sections/01-test-environment.tex
zooqueen ebe2ebcb3c papers: retire boschini2024corona key -> ringtail (third-party prior art); fix Pulsar/Corona/Ringtail provenance + lattice labels
Ringtail (Boschini et al., ePrint 2024/1113) is third-party prior art; Lux's
Corona (Ring-LWE = Module-LWE rank-1) builds on it; Pulsar is Module-LWE rank-k.
Retired the conflated boschini2024corona/corona2024/coronago/... bib keys to the
single canonical ringtail/corona/pulsar/magnetar keys, rewrote \cite + \bibitem
by context, and fixed 'Pulsar (Ring-LWE)' mislabels (Corona where corona.metal/
single-ring/Ringtail-derived; Pulsar where Module-LWE rank-k/ML-DSA). Cryptographer-led.
2026-06-19 22:33:10 -07:00

63 lines
4.7 KiB
TeX

%% ====================================================================
\section{Test Environment}
\label{sec:test-environment}
%% ====================================================================
All measurements are taken from the Mar-3 freeze tag of the production Lux Go canonical at \texttt{v0.1.0-rc1-pq-consensus-freeze}, with the build / test gate \texttt{GOWORK=off go test -count=1 -short -timeout 300s ./...}. Reproduction commands are included alongside each table.
\subsection{Hardware}
\begin{tabular}{@{}p{0.30\textwidth}p{0.65\textwidth}@{}}
\toprule
\textbf{Class} & \textbf{Specifics} \\
\midrule
CPU primary & Apple M1 Max, 10 cores (8 performance + 2 efficiency), \texttt{darwin/arm64} \\
CPU secondary & Apple M2 Ultra, 24 cores, \texttt{darwin/arm64} \\
CPU x86\_64 & AMD EPYC 7763, 64 cores, \texttt{linux/amd64} \\
GPU primary & Apple M1 Max integrated GPU, Metal 3 \\
RAM & 32 GiB unified (M1 Max), 192 GiB unified (M2 Ultra), 256 GiB DDR4 (EPYC) \\
\bottomrule
\end{tabular}
Unless otherwise noted, single-core measurements are taken on the M1 Max performance core, with thermal throttling monitored via \texttt{powermetrics}; runs that triggered throttling are discarded. Multi-core measurements use Go's default GOMAXPROCS.
\subsection{Software}
\begin{tabular}{@{}p{0.30\textwidth}p{0.65\textwidth}@{}}
\toprule
\textbf{Component} & \textbf{Version} \\
\midrule
Go toolchain & 1.26.1 \\
Build flags & \texttt{CGO\_ENABLED=0 GOOS=$\langle$os$\rangle$ GOARCH=$\langle$arch$\rangle$} for cross-compile, native otherwise \\
Pulsar canonical & \texttt{github.com/luxfi/pulsar} at v0.1.0-rc1-pq-consensus-freeze \cite{pulsar} \\
Lens canonical & \texttt{github.com/luxfi/lens} at v0.1.0-rc1-pq-consensus-freeze \cite{lensgo} \\
Threshold framework & \texttt{github.com/luxfi/threshold} at v0.1.0-rc1-pq-consensus-freeze \cite{thresholdgo} \\
Consensus engine & \texttt{github.com/luxfi/consensus} at v1.22.84 \cite{consensusgo} \\
Warp & \texttt{github.com/luxfi/warp} at v1.18.0 \cite{warpgo} \\
Lattigo (lattice library) & \texttt{github.com/luxfi/lattice/v7} pinned (Lux fork) \cite{lattigov7} \\
Crypto BLS & \texttt{github.com/luxfi/crypto/bls} v1.17.25 \\
Crypto ML-DSA & \texttt{github.com/luxfi/crypto/mldsa} v1.17.25 \\
ZAP wire & \texttt{github.com/luxfi/zap} \\
\bottomrule
\end{tabular}
\subsection{Methodology}
\paragraph{Microbenchmarks.} Run via \texttt{go test -bench=$\cdot$ -benchtime=N -count=K -benchmem ./$\cdot$/$\cdot$}. Each result is the median of $K$ runs at $N$ iterations per run. We report \emph{median}, \emph{mean}, and where relevant \emph{p99}; we do not report just-mean. Hot iterations are warmed up via Go's \texttt{Benchmark} loop semantics; cold-start measurements are flagged as such.
\paragraph{Reshare benchmarks.} Run via the LSS-Pulsar / LSS-Lens \texttt{TestDynamicReshare*} tests with timing instrumentation; the test suite runs the full $(t, n) \to (t', n')$ transition path including JVSS broadcast, lattice Pedersen verify, and activation cert. Per-party CPU time is reported; wall-clock time reflects local-loop simulation (no WAN delay) unless explicitly cross-WAN.
\paragraph{Cross-WAN projections.} Pulse latency at WAN distances is projected from local measurements plus a measured RTT distribution to Lux mainnet validator regions; Section~\ref{sec:cross-wan-latency} explains the projection. Direct cross-WAN measurements at $K=21$ are taken from the production Lux mainnet bundle-Pulse path; projections at $K \in \{64, 128\}$ are derived from the per-party Round 1 / Round 2 cost curve.
\subsection{What we did not measure}
\begin{itemize}[leftmargin=2em,nosep]
\item GPU \emph{end-to-end} BLS aggregate verify on a Pulsar pulse path: the GPU dispatch overhead dominates at $K \leq 64$, and the production hot path runs on CPU. We measure the GPU primitive throughput (Section~\ref{sec:gpu-headroom}); the end-to-end production GPU path is research, not production.
\item Adversarial network conditions: the cross-WAN measurements assume honest validator behavior over commodity internet. Adversarial-delay scenarios are not in the production benchmark surface.
\item Cold-start full-chain restart: we benchmark the steady-state operations the chain runs every block / bundle, not the ceremony-startup or chain-bootstrap path.
\end{itemize}
\subsection{Reproducibility}
The KAT regen scripts (\texttt{pulsar/scripts/regen-kats.sh}) produce byte-equal outputs across runs. The fuzz harnesses (\texttt{warp/pulsar/fuzz\_*.go}, \texttt{warp/fuzz\_envelope\_test.go}) return zero panics in 60 s. Every table below is reproducible from the published canonical at the freeze tag using the listed reproduction command. Numbers in this report should match a fresh-clone run within $\pm 5\%$ on the listed hardware.