mirror of
https://github.com/lux-apps/papers.git
synced 2026-10-30 18:15:21 +00:00
Restructured from flat .tex/.pdf files into per-paper subdirectories. Added Antje Worring as co-author on all papers. Synced PDFs to pdfs/ for download site.
56 lines
1.9 KiB
TeX
56 lines
1.9 KiB
TeX
\section{C++ EVM vs Go EVM}
|
|
|
|
|
|
\subsection{EVM-Only Throughput (Signatures Pre-Cached)}
|
|
|
|
To isolate interpreter performance, signatures are pre-verified and cached. Measurements
|
|
reflect pure EVM opcode dispatch and state access.
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\small
|
|
\begin{tabular}{lrrr}
|
|
\toprule
|
|
\textbf{Implementation} & \textbf{Throughput} & \textbf{Best Run} & \textbf{vs Go} \\
|
|
\midrule
|
|
Go EVM (full StateDB) & 4.2--5.4\,Ggas/s & 5.4\,Ggas/s & 1.0$\times$ \\
|
|
C++ evmone++ (full state) & 20.9\,Ggas/s & 23.4\,Ggas/s & \textbf{5.1$\times$} \\
|
|
C++ evmone++ (interpreter) & 416\,Ggas/s & --- & 96$\times$$^*$ \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{EVM-only gas throughput, signatures pre-cached. 10{,}000 transactions per run.
|
|
$^*$Interpreter-only number excludes state access entirely (in-memory balance tracking,
|
|
no trie, no DB); it represents the ceiling of opcode dispatch speed.}
|
|
\label{tab:cpp_vs_go}
|
|
\end{table}
|
|
|
|
The 5.1$\times$ speedup with full state comes from:
|
|
\begin{itemize}
|
|
\item No garbage collector pauses (C++ deterministic deallocation)
|
|
\item Cache-friendly memory layout (no GC headers per object)
|
|
\item Compiler-optimized opcode dispatch (computed \texttt{goto} vs switch table)
|
|
\item Inlined hash operations (no cgo FFI overhead)
|
|
\end{itemize}
|
|
|
|
\subsection{End-to-End Throughput (With Signatures)}
|
|
|
|
End-to-end numbers include secp256k1 ecrecover for every transaction:
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\small
|
|
\begin{tabular}{lrr}
|
|
\toprule
|
|
\textbf{Implementation} & \textbf{Total Throughput} & \textbf{Notes} \\
|
|
\midrule
|
|
Go EVM (sequential) & 534--1{,}038\,Mgas/s & Workload-dependent \\
|
|
Go EVM (typical) & $\sim$546\,Mgas/s & ETH transfers, 10k txs \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{End-to-end Go EVM throughput including signature verification.
|
|
The wide range reflects workload variation: simple transfers achieve higher
|
|
Mgas/s than complex DeFi due to lower gas per transaction.}
|
|
\label{tab:e2e_go}
|
|
\end{table}
|
|
|