Overview
armrx is a CPU-only RandomX v1 miner for AArch64 Linux, written in C++20 with a native ARM JIT compiler. I built it to explore low-level performance engineering on constrained hardware, including older Cortex-A53 devices running Linux.
The implementation covers the hashing pipeline, interpreted VM execution, native code generation, pool communication, and multi-worker mining. Light mode supports devices that cannot accommodate the full RandomX dataset. An optional partial dataset caches a configurable prefix, trading additional memory and startup time for less repeated computation.
Much of the work happens between a proposed optimization and its measured result. The project includes reference-hash checks, JIT/interpreter comparisons, hardware-counter analysis, and device A/B experiments. Its 400+ commit history records successful changes alongside regressions, reverts, and corrected performance claims.
On the documented Snapdragon 415 test setup, a 512 MiB partial dataset produced roughly 30–32 hashes per second in steady pool mining, with an initial fill wait of about 175 seconds. These are historical measurements for that configuration; performance depends on the processor, memory, worker count, and operating environment.
armrx has run on real AArch64 hardware and submitted valid pool shares. Development continues around correctness, runtime behavior, and measurements on additional ARM processors. The accompanying blog post follows the engineering journey: shared correctness bugs, optimizations that made execution slower, and the experiments that shaped the implementation.
Technologies: C++20, AArch64 Assembly, NEON, Linux, CMake
Project Tags: