<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>TinyComputers.io (Posts about sd high-speed)</title><link>https://tinycomputers.io/</link><description></description><atom:link href="https://tinycomputers.io/categories/sd-high-speed.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Original site content © 2022–2026 Tiny Machines Workshop, LLC, except where otherwise noted. Some rights reserved.</copyright><lastBuildDate>Thu, 10 Sep 2026 22:40:41 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>The Pine64 Star64: RISC-V's Baseline Problem</title><link>https://tinycomputers.io/posts/pine64-star64-riscv-review.html?utm_source=feed&amp;utm_medium=rss&amp;utm_campaign=rss</link><dc:creator>A.C. Jokela</dc:creator><description>&lt;div class="audio-widget"&gt;
&lt;div class="audio-widget-header"&gt;
&lt;span class="audio-widget-icon"&gt;🎧&lt;/span&gt;
&lt;span class="audio-widget-label"&gt;Listen to this article&lt;/span&gt;
&lt;/div&gt;
&lt;audio controls preload="metadata"&gt;
&lt;source src="https://tinycomputers.io/pine64-star64-riscv-review_tts.mp3" type="audio/mpeg"&gt;
&lt;/source&gt;&lt;/audio&gt;
&lt;div class="audio-widget-footer"&gt;34 min · AI-generated narration&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The Pine64 Star64 is the third RISC-V board to go through my benchmark fleet, and it makes a better showing than the one everybody would expect it to beat. That is a lower bar than it sounds.&lt;/p&gt;
&lt;p&gt;It is built on StarFive's JH7110: four SiFive U74-MC cores at 1.5 GHz, 4 GB of RAM, and an ISA string that turns out to be the entire story. That string is &lt;code&gt;rv64imafdc&lt;/code&gt;. Plain RV64GC. No vector extension, no scalar crypto extension, no bit-manipulation extensions, and an &lt;code&gt;isa-ext&lt;/code&gt; field that is simply empty. This is the RISC-V baseline profile and nothing above it.&lt;/p&gt;
&lt;p&gt;For compiling Rust that hardly matters. A compiler is integer and branch work, and baseline RV64GC does integer and branch work perfectly well. The Star64 posts &lt;strong&gt;461.28 seconds&lt;/strong&gt; on my fleet-comparable tree, tenth of eleven. For cryptography it matters enormously. The same board manages &lt;strong&gt;21.7 MB/s of AES-128-GCM&lt;/strong&gt;, roughly one &lt;em&gt;hundredth&lt;/em&gt; of what a Cortex-A76 does on the identical benchmark.&lt;/p&gt;
&lt;p&gt;That hundredfold gap is the most interesting number this fleet has produced, and it decomposes into two very different things. Unpacking it says something precise about where RISC-V actually stands in 2026, and the answer is not "the cores are bad."&lt;/p&gt;
&lt;h3&gt;The Hardware&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Pine64 Star64 single-board computer, component side up, showing the JH7110 SoC under its metal lid, the PCIe slot along the top edge, stacked USB-A ports with a 4GB RAM sticker, gigabit Ethernet, HDMI, a 40-pin GPIO header, and two Wi-Fi antenna leads taped down across the board" src="https://tinycomputers.io/images/pine64-star64/IMG_4640.jpeg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The 4 GB variant: the sticker on the USB stack matches the 3.8 GiB the OS reports. The JH7110 sits under the metal lid at center; the PCIe slot along the top edge and the 40-pin header are the expansion this board leans on, since its microSD is stuck in high-speed mode.&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Specification&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SoC&lt;/td&gt;
&lt;td&gt;StarFive &lt;strong&gt;JH7110&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU&lt;/td&gt;
&lt;td&gt;4 × SiFive &lt;strong&gt;U74-MC&lt;/strong&gt;, dual-issue in-order, 1.5 GHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ISA&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rv64imafdc&lt;/code&gt;: &lt;strong&gt;RV64GC baseline; no V, no K, no Z*&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAM&lt;/td&gt;
&lt;td&gt;4 GB (3.8 GiB usable), 32-bit LPDDR4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;SanDisk SN64G microSD, 59.5 GB, ext4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU&lt;/td&gt;
&lt;td&gt;Imagination &lt;strong&gt;BXE-4-32&lt;/strong&gt;, DRM nodes present&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Video&lt;/td&gt;
&lt;td&gt;JH7110 VPU, &lt;code&gt;/dev/video0&lt;/code&gt;–&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network&lt;/td&gt;
&lt;td&gt;2 × gigabit (&lt;code&gt;st_gmac&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OS&lt;/td&gt;
&lt;td&gt;PinIx 2.1, kernel &lt;strong&gt;5.15.131&lt;/strong&gt; (vendor BSP, Sept 2023)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toolchain&lt;/td&gt;
&lt;td&gt;rustc / cargo &lt;strong&gt;1.98.1&lt;/strong&gt;, &lt;code&gt;riscv64gc-unknown-linux-gnu&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Three practical notes for anyone setting one of these up, each of which cost me time. Root's home directory is &lt;strong&gt;&lt;code&gt;/home/root&lt;/code&gt;, not &lt;code&gt;/root&lt;/code&gt;&lt;/strong&gt;. My first toolchain install failed outright because I assumed otherwise. The login shell is &lt;code&gt;/bin/sh&lt;/code&gt;, so anything wanting bash has to say so explicitly. And the board ships with no Rust toolchain at all; rustup's &lt;code&gt;riscv64gc-unknown-linux-gnu&lt;/code&gt; target installs cleanly, which is itself a quiet sign of how far RISC-V tooling has come.&lt;/p&gt;
&lt;h3&gt;The Benchmark, and Why It Has Two Numbers&lt;/h3&gt;
&lt;p&gt;My standard workload is a clean release build of &lt;a href="https://github.com/ajokela/ballistics-engine"&gt;ballistics-engine&lt;/a&gt;, three runs after &lt;code&gt;cargo clean&lt;/code&gt;. As I wrote in the &lt;a href="https://tinycomputers.io/posts/friendlyelec-nanopc-t6n-review.html"&gt;NanoPC-T6N review&lt;/a&gt;, that project outgrew its own benchmark. The tree the October 2025 fleet compiled was 16,639 lines, and today's &lt;code&gt;main&lt;/code&gt; is 155,867. Numbers from the two are not the same measurement.&lt;/p&gt;
&lt;p&gt;So every run now comes in two tiers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pinned: &lt;code&gt;2821bba&lt;/code&gt;&lt;/strong&gt;, verified on the board at 43 &lt;code&gt;.rs&lt;/code&gt; files / 16,639 LOC / 144 crates. Byte-for-byte the tree the archived fleet was measured against. Every fleet comparison below uses this.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HEAD: &lt;code&gt;b0cfcd4&lt;/code&gt;&lt;/strong&gt;, 196 files / 155,867 LOC / 243 crates. Deliberately &lt;strong&gt;the same commit the &lt;a href="https://tinycomputers.io/posts/freebsd-on-a-2011-macbook-pro.html"&gt;FreeBSD MacBook&lt;/a&gt; ran&lt;/strong&gt; a couple of weeks ago, so those two HEAD figures are directly comparable to each other rather than being another orphan.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before the HEAD tier I added an 8 GB swapfile, reasoning that 243 crates at &lt;code&gt;-j4&lt;/code&gt; might blow past 3.8 GB of RAM. &lt;strong&gt;It was never touched&lt;/strong&gt;: zero swap use across all 2,455 samples of the run. A sensible precaution that turned out to be unnecessary, which I would rather say plainly than let you assume it rescued something.&lt;/p&gt;
&lt;h3&gt;Compilation Results&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Pinned tier (&lt;code&gt;2821bba&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;458.17 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;463.08 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;462.59 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mean&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;461.28 s&lt;/strong&gt; (median 462.59, σ 2.71, &lt;strong&gt;0.59% CV&lt;/strong&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;HEAD tier (&lt;code&gt;b0cfcd4&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2933.59 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2927.88 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;2934.15 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mean&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2931.88 s&lt;/strong&gt;, 48.9 minutes (σ 3.47, &lt;strong&gt;0.12% CV&lt;/strong&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A 0.12% coefficient of variation across three 49-minute builds is the most consistent result on my bench, and the instrumentation says exactly why: nothing varied. Across 2,455 samples spanning 3.4 hours, all four cores held 1.5 GHz for &lt;strong&gt;100% of under-load samples&lt;/strong&gt;, temperature stayed between 56.9 and 70.0 °C, and swap was never touched. No thermal ceiling, no memory pressure, no clock wobble.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Star64 Rust compile performance against the fleet" src="https://tinycomputers.io/images/star64-fleet-compile.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Left: the fleet on the pinned September-2025 tree, the only apples-to-apples axis I have. Right: the same board and toolchain against both sizes of the same project, 6.36x the build time for 9.37x the code.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The HEAD/pinned ratio of &lt;strong&gt;6.36×&lt;/strong&gt; compares against the MacBook's 5.45× on the identical commit. With clock and memory both ruled out as causes, that difference is architectural rather than environmental: the bigger tree leans harder on whatever the U74 is worse at.&lt;/p&gt;
&lt;h4&gt;Two Comparisons That Matter&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Against the other RISC-V design, the Star64 wins convincingly.&lt;/strong&gt; It beats the &lt;a href="https://tinycomputers.io/posts/the-orangepi-rv2.html"&gt;Orange Pi RV2&lt;/a&gt; by &lt;strong&gt;1.41× while carrying half the cores&lt;/strong&gt; (four U74s against eight Ky X1s), which works out to &lt;strong&gt;2.82× better per core-second&lt;/strong&gt;. The RV2's cores bring RVV 1.0 vector units that a Rust compile never touches, while their scalar integer throughput lags well behind SiFive's. For general-purpose work, four decent cores beat eight weak ones, and it is not close.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Against ARM, it loses to a design from 2012.&lt;/strong&gt; The quad Cortex-A53 in the &lt;a href="https://tinycomputers.io/posts/horizon-robotics-x3-cm-review.html"&gt;Horizon X3 CM&lt;/a&gt;, a board I reviewed as a cautionary tale running a core Arm announced fourteen years ago, still finishes &lt;strong&gt;1.22× faster&lt;/strong&gt;. That is the honest framing of where this silicon sits on ordinary work: current-generation RISC-V application cores trailing decade-old budget ARM.&lt;/p&gt;
&lt;p&gt;Against a &lt;a href="https://tinycomputers.io/posts/raspberry-pi-compute-module-5-review.html"&gt;Raspberry Pi 5&lt;/a&gt;, the Star64 is &lt;strong&gt;6.02× slower&lt;/strong&gt;. Hold onto that number; it comes back.&lt;/p&gt;
&lt;h4&gt;The Same-Silicon Control&lt;/h4&gt;
&lt;p&gt;The &lt;a href="https://tinycomputers.io/posts/milk-v-mars-review.html"&gt;Milk-V Mars&lt;/a&gt; runs the &lt;em&gt;same&lt;/em&gt; JH7110 SoC as the Star64 (same four U74 cores, same 1.5 GHz, same &lt;code&gt;rv64imafdc&lt;/code&gt;) with twice the RAM. That makes it the best control I have ever had for one of these reviews, so I re-ran it.&lt;/p&gt;
&lt;p&gt;I need to be upfront about why a re-run was necessary. When I reviewed the Mars in February, I reported &lt;strong&gt;936 seconds&lt;/strong&gt; and called it the slowest board in my fleet. That figure recorded &lt;strong&gt;no commit hash and no line count&lt;/strong&gt;, so it was measured against whatever &lt;code&gt;main&lt;/code&gt; happened to be in February 2026, a tree substantially larger than the pinned one. It was an orphan number, comparable to nothing, and the "slowest in the fleet" claim built on it was simply wrong. This is exactly the failure the T6N review warned about, and my own archive was already carrying an instance of it.&lt;/p&gt;
&lt;p&gt;So: both boards, both tiers, the same two pinned commits, and (because the Mars needed a fresh toolchain anyway) the identical rustc 1.98.1.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Pinned &lt;code&gt;2821bba&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;HEAD &lt;code&gt;b0cfcd4&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Milk-V Mars (8 GB)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;458.00 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2932.35 s&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pine64 Star64 (4 GB)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;461.28 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2931.88 s&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;difference&lt;/td&gt;
&lt;td&gt;3.28 s (0.71%)&lt;/td&gt;
&lt;td&gt;0.48 s (&lt;strong&gt;0.016%&lt;/strong&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;On the long tier the two boards finish a 49-minute build within half a second of each other. That gap is 0.11× the pooled run-to-run noise, and the sign &lt;em&gt;flips&lt;/em&gt; between tiers (the Mars is marginally ahead on the pinned tree, the Star64 marginally ahead on HEAD), which is the signature of noise rather than a real difference. These boards are the same speed.&lt;/p&gt;
&lt;p&gt;Two things follow. First, the Mars's extra 4 GB of RAM buys it exactly nothing, consistent with the Star64 never touching swap. Second, and more useful: &lt;strong&gt;the ~6× deficit against contemporary ARM is a property of the JH7110 itself&lt;/strong&gt;, not of one board's BSP, distro, kernel, or microSD. Two independent implementations landing within 0.02% of each other is about as clean a confirmation of that as this bench can produce.&lt;/p&gt;
&lt;p&gt;The corrected fleet ordering puts the two JH7110 boards adjacent, where identical silicon belongs, and moves the actual slowest board back to the Orange Pi RV2 at 650.60 s.&lt;/p&gt;
&lt;h3&gt;Cryptography: Where the Baseline ISA Bites&lt;/h3&gt;
&lt;p&gt;Now the interesting part. Single-threaded OpenSSL 3.x, 16 KB blocks:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Star64 crypto throughput and the gap by algorithm" src="https://tinycomputers.io/images/star64-crypto-gap.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Left: absolute throughput on a linear scale. I deliberately did not use a log axis, because the Star64's bars really are that small and a log plot would flatter them. Right: how far behind the Cortex-A76 each algorithm falls, with the dashed line marking the 5.9x gap that is the core itself.&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;Star64 U74&lt;/th&gt;
&lt;th&gt;i5-2435M&lt;/th&gt;
&lt;th&gt;RK3588 A76&lt;/th&gt;
&lt;th&gt;A76 / Star64&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AES-128-GCM&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;21.7 MB/s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1112.4&lt;/td&gt;
&lt;td&gt;2185.7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100.9×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AES-256-GCM&lt;/td&gt;
&lt;td&gt;17.9&lt;/td&gt;
&lt;td&gt;988.2&lt;/td&gt;
&lt;td&gt;1763.9&lt;/td&gt;
&lt;td&gt;98.3×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AES-128-CBC&lt;/td&gt;
&lt;td&gt;31.4&lt;/td&gt;
&lt;td&gt;575.6&lt;/td&gt;
&lt;td&gt;1831.8&lt;/td&gt;
&lt;td&gt;58.4×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SHA-256&lt;/td&gt;
&lt;td&gt;35.4&lt;/td&gt;
&lt;td&gt;251.8&lt;/td&gt;
&lt;td&gt;1429.4&lt;/td&gt;
&lt;td&gt;40.4×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SHA-512&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;63.5&lt;/td&gt;
&lt;td&gt;361.2&lt;/td&gt;
&lt;td&gt;376.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5.9×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChaCha20-Poly1305&lt;/td&gt;
&lt;td&gt;51.0&lt;/td&gt;
&lt;td&gt;761.9&lt;/td&gt;
&lt;td&gt;674.4&lt;/td&gt;
&lt;td&gt;13.2×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;SHA-512 is the control, and it decomposes everything else.&lt;/strong&gt; None of these three chips has SHA-512 acceleration: not the U74, not the Cortex-A76, not Sandy Bridge. All three run software implementations. On that even footing the U74 sits &lt;strong&gt;5.9× behind&lt;/strong&gt; the A76, and that is the honest measure of the core itself.&lt;/p&gt;
&lt;p&gt;Every gap wider than 5.9× is the instruction set talking. AES-128-GCM's 100.9× factors cleanly into roughly 6× &lt;em&gt;"the U74 is a slower core"&lt;/em&gt; multiplied by about 17× &lt;em&gt;"the A76 has AES instructions and this chip has none."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And that 5.9× independently corroborates the compile result. The Star64 is 6.02× slower than a Raspberry Pi 5, both quad-core, measured by a completely unrelated workload, landing on the same number. When two independent measurements agree that closely, the figure is real and the decomposition holds.&lt;/p&gt;
&lt;p&gt;The asymmetric results split along the same seam:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Star64&lt;/th&gt;
&lt;th&gt;RK3588 A76&lt;/th&gt;
&lt;th&gt;Gap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RSA-2048 sign&lt;/td&gt;
&lt;td&gt;66.5 /s&lt;/td&gt;
&lt;td&gt;269.6 /s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4.1×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ECDSA P-256 sign&lt;/td&gt;
&lt;td&gt;211.2 /s&lt;/td&gt;
&lt;td&gt;16,917.2 /s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;80.1×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;RSA-2048 is bignum arithmetic that nobody accelerates in silicon here, and its 4.1× gap sits right in the neighborhood of the core's raw deficit. ECDSA P-256's 80× gap is not silicon at all. It is OpenSSL shipping hand-tuned P-256 assembly for ARM and x86 and generic C for RISC-V. Some of RISC-V's disadvantage is missing hardware. A good deal of it is missing software investment, which is a different problem with a different fix.&lt;/p&gt;
&lt;h4&gt;The Practical Inversion&lt;/h4&gt;
&lt;p&gt;On the Star64, &lt;strong&gt;ChaCha20-Poly1305 runs 2.35× faster than AES-128-GCM&lt;/strong&gt;. On the RK3588, that comparison runs the other way, with AES 3.2× ahead.&lt;/p&gt;
&lt;p&gt;The correct cipher suite flips depending on whether the silicon has AES instructions, which is exactly the case ChaCha20 was designed for. If you are terminating TLS on a baseline RISC-V board, prefer ChaCha20. Anyone who copies an AES-first cipher preference list off an ARM server onto this hardware leaves more than half their throughput on the floor.&lt;/p&gt;
&lt;h4&gt;The Hardware Engine Nobody Can Reach&lt;/h4&gt;
&lt;p&gt;Here I have to correct my own framing, because my first pass at this section was wrong.&lt;/p&gt;
&lt;p&gt;The JH7110 &lt;strong&gt;does&lt;/strong&gt; have a hardware crypto block. The kernel registers &lt;strong&gt;21 algorithms&lt;/strong&gt; from the &lt;code&gt;jh7110&lt;/code&gt; driver: AES in ECB, CBC, CTR, CFB, OFB, GCM and CCM; SHA-1 through SHA-512 with HMAC variants; SM3; and RSA at priority 3000. I had written "software-only crypto" before I actually looked at &lt;code&gt;/proc/crypto&lt;/code&gt;, and that was not true.&lt;/p&gt;
&lt;p&gt;What &lt;em&gt;is&lt;/em&gt; true is narrower and more annoying. &lt;code&gt;openssl engine&lt;/code&gt; lists only &lt;code&gt;dynamic&lt;/code&gt;: there is no AF_ALG or cryptodev bridge wired up, so &lt;strong&gt;userspace OpenSSL never sees any of it&lt;/strong&gt; and falls back to pure software. The 21.7 MB/s figure is real for userspace TLS; it is what nginx or a userspace WireGuard would actually get. But it is &lt;em&gt;not&lt;/em&gt; the ceiling of what this silicon can do. Kernel-space consumers (dm-crypt, IPsec, kernel TLS) should reach the accelerator and do considerably better.&lt;/p&gt;
&lt;p&gt;So the accurate statement is not "RISC-V is terrible at crypto." It is: &lt;strong&gt;this SoC's crypto acceleration is real but stranded behind missing userspace plumbing&lt;/strong&gt;, and the ISA itself offers nothing to fall back on when it is unreachable. Fixing the plumbing is a software task, and it would move these numbers a long way for the workloads that can use it.&lt;/p&gt;
&lt;h3&gt;Thermals and Scaling: The Good News&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Star64 thermal trace and thread scaling" src="https://tinycomputers.io/images/star64-thermal-scaling.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Left top: SoC temperature across 3.4 hours of continuous compilation. Left bottom: the CPU clock over the same window: flat at the 1.5 GHz maximum for the entire run. Right: thread scaling against perfect linear.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The temperature trace has a shape worth reading. Each build ramps to a peak near 70 °C, then decays to a plateau around 62 °C and holds there. That is not cooling catching up. It is the build's own structure. The early phase compiles many independent crates across four cores and runs hot; the long tail is a single &lt;code&gt;rustc&lt;/code&gt; doing final codegen on the main crate, one core busy and three idle. The same asymmetry showed up in the memory sampling, where peak pressure landed at load 1.00.&lt;/p&gt;
&lt;p&gt;The sharp dips to 57 °C are the &lt;code&gt;cargo clean&lt;/code&gt; and cache-drop gaps between runs.&lt;/p&gt;
&lt;p&gt;Thread scaling is genuinely excellent:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Threads&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Events/s&lt;/th&gt;
&lt;th&gt;Scaling&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;12.15 s&lt;/td&gt;
&lt;td&gt;246.96&lt;/td&gt;
&lt;td&gt;1.00×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;6.07 s&lt;/td&gt;
&lt;td&gt;494.19&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.00×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3.09 s&lt;/td&gt;
&lt;td&gt;970.90&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.93×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Essentially perfect. Four real cores, no SMT, no floating-point units shared between siblings, no thermal limit and no memory bottleneck. This board scales about as well as it is physically possible to scale, a useful contrast with the FreeBSD MacBook, where Hyper-Threading contributed literally nothing to SIMD work because SMT siblings share the FP pipeline. The Star64 has fewer and slower cores, but the ones it has are entirely independent.&lt;/p&gt;
&lt;h4&gt;One Measurement Trap&lt;/h4&gt;
&lt;p&gt;The benchmark's own before-and-after readings showed 625 MHz and 750 MHz, which looks like severe throttling, and for about twenty minutes I believed it was. Those samples are taken &lt;em&gt;between&lt;/em&gt; builds, while the CPU is idle and the &lt;code&gt;ondemand&lt;/code&gt; governor has wound down. Only continuous sampling during the runs showed the truth: 100% of 677 under-load samples at the full 1.5 GHz.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An instantaneous clock reading taken at an arbitrary moment is not a measurement.&lt;/strong&gt; That is the same lesson the MacBook's MSR readings taught me two weeks ago, on completely different hardware, and I nearly published the wrong conclusion twice.&lt;/p&gt;
&lt;h3&gt;Memory and Storage&lt;/h3&gt;
&lt;p&gt;Memory measured &lt;strong&gt;5,488 MB/s read and 5,070 MB/s write&lt;/strong&gt;. Notably (and unlike every other board in this fleet) those numbers are &lt;em&gt;plausible&lt;/em&gt;. The JH7110's 32-bit LPDDR4 interface tops out near 11 GB/s, so ~5.5 GB/s is about half of theoretical rather than a physical impossibility. The 1 MB block size still means part of the working set is cache-resident, so treat it as an upper bound. But this is the first time in this benchmark series that sysbench's memory test has not handed me a number that beats physics.&lt;/p&gt;
&lt;p&gt;Storage is the weak point:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;hdparm buffered read&lt;/td&gt;
&lt;td&gt;22.38 MB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dd write 1 GB&lt;/td&gt;
&lt;td&gt;19.9 MB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dd read 1 GB (caches dropped)&lt;/td&gt;
&lt;td&gt;23.5 MB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;The card is not the problem: the controller is.&lt;/strong&gt; The exact same SanDisk SN64G model read at &lt;strong&gt;64.85 MB/s&lt;/strong&gt; in the NanoPC-T6N. Checking &lt;code&gt;/sys/kernel/debug/mmc1/ios&lt;/code&gt; explains it:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;clock&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;50000000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Hz&lt;/span&gt;
&lt;span class="n"&gt;bus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;timing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;speed&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The Star64 runs the card in &lt;strong&gt;SD High-Speed mode at 50 MHz&lt;/strong&gt;, not UHS-I SDR104 at 208 MHz. Four-bit high-speed caps out near 25 MB/s in practice, which is exactly what I measured. This is a board or BSP limitation, and it means microSD performance here is about a third of what the same card delivers elsewhere.&lt;/p&gt;
&lt;p&gt;For the compile benchmark it barely mattered: 0.12% run-to-run variance says the build was CPU-bound with its working set in page cache. For a NAS, a container host, or anything doing bulk I/O, it would be the whole story.&lt;/p&gt;
&lt;h3&gt;What Works, What Doesn't&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Better than expected.&lt;/strong&gt; The GPU has real DRM nodes (&lt;code&gt;/dev/dri/card1&lt;/code&gt; and &lt;code&gt;renderD128&lt;/code&gt;, backed by the Imagination BXE-4-32), plus &lt;code&gt;/dev/video0&lt;/code&gt; through &lt;code&gt;7&lt;/code&gt; for the video engine. That is more functional graphics support than the FreeBSD MacBook managed. Gigabit Ethernet is live via &lt;code&gt;st_gmac&lt;/code&gt;. Four independent cores scale nearly perfectly. Nothing throttles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not working, or not measured.&lt;/strong&gt; The hardware crypto engine is unreachable from userspace. The microSD controller is stuck in high-speed mode. The kernel is a vendor BSP from September 2023, with everything that implies for long-term support. And &lt;strong&gt;network throughput was never measured&lt;/strong&gt;. I had a live gigabit link and simply did not set up an iperf3 peer, so that section is a gap in my testing rather than a finding about the board.&lt;/p&gt;
&lt;h3&gt;Three Things I Got Wrong&lt;/h3&gt;
&lt;p&gt;I keep a section like this in these reviews because benchmarking unfamiliar hardware generates plausible nonsense, and the nonsense is instructive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My ISA check reported the vector extension as present.&lt;/strong&gt; It substring-matched single-letter extensions against the full ISA string, and &lt;code&gt;rv64imafdc&lt;/code&gt; contains a literal "v" in the &lt;code&gt;rv64&lt;/code&gt; &lt;em&gt;prefix&lt;/em&gt;. Re-parsed with the prefix stripped, V is absent, &lt;code&gt;isa-ext&lt;/code&gt; is empty, and the kernel has no vector support compiled in at all. Had I trusted that line, this entire review would have rested on a false premise about what the chip can do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sysbench silently produced nothing.&lt;/strong&gt; This board ships &lt;strong&gt;sysbench 0.4.12&lt;/strong&gt;, whose CLI differs from the 1.0.x I use everywhere else. My 1.0-syntax invocations failed and emitted empty sections, which is worse than an error because it looks like missing data rather than a broken command. The figures above are re-runs with 0.4 syntax; the scaling ratios are sound, but the absolute numbers cannot be compared to the T6N's sysbench results.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;/usr/bin/time -v&lt;/code&gt; reports zero for every rusage field&lt;/strong&gt; on this board: max RSS, page faults, context switches, all zero, from a GNU time build that identifies its own version as "UNKNOWN." I lost peak-memory instrumentation and fell back to sampling &lt;code&gt;free -m&lt;/code&gt;, which turned out to be the better instrument anyway.&lt;/p&gt;
&lt;p&gt;The general rule, and the reason these sections keep earning their place: &lt;strong&gt;a benchmark number that beats the hardware's physical limits is a bug report, not a result.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Who Is This For?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Reasonable uses.&lt;/strong&gt; As a RISC-V development and porting target, this is a sound machine. Four independent cores that scale cleanly, 4 GB of RAM, working GPU and video nodes, gigabit networking, and enough compile throughput to build real software locally instead of cross-compiling. If your goal is finding out whether your code works on RISC-V, it does that job without drama.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Poor uses.&lt;/strong&gt; Anything crypto-heavy in userspace is off the table until the AF_ALG plumbing exists. Anything I/O-bound is throttled to a third of the microSD's capability. And anything where you simply want the work finished quickly is better served by nearly any ARM board on this list, including, remarkably, one built on a 2012-era Cortex-A53.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The honest framing&lt;/strong&gt; is that you buy a Star64 because it is RISC-V, not because it is fast. That is a completely legitimate reason to buy one. Somebody has to run real software on this architecture for the ecosystem to mature, and the JH7110 is a reasonable place to do it. But it should be a deliberate choice rather than a value comparison you expect to win.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;The Star64's defining characteristic is its ISA string. &lt;code&gt;rv64imafdc&lt;/code&gt; is RISC-V's baseline, and everything above baseline (vectors, crypto, bit manipulation) is simply absent.&lt;/p&gt;
&lt;p&gt;On integer work that costs relatively little: 5.9× behind a Cortex-A76 on software SHA-512, corroborated by 6.02× behind a Raspberry Pi 5 on compilation. Those are the numbers for the core itself, and while they are not flattering, they are not disastrous either. A 6× deficit against the best ARM cores in this price class is a gap you can live with for development work.&lt;/p&gt;
&lt;p&gt;Where it becomes disastrous is anywhere the competition has dedicated instructions. AES-128-GCM at 100× behind is not a core-quality problem. It is an extensions problem, and it multiplies a manageable 6× disadvantage into an unusable one. That the SoC has a perfectly good crypto engine sitting unreachable behind missing userspace plumbing makes that worse rather than better: the silicon is there, and software is the thing in the way.&lt;/p&gt;
&lt;p&gt;RISC-V's problem in this benchmark is not that its cores cannot compete. It is that the baseline profile ships without accelerators everyone else has had for a decade, and the software stack has not yet caught up to the hardware that does exist. Both are fixable. Neither is fixed on this board today.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;By the numbers:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rust clean release build, pinned tree (&lt;code&gt;2821bba&lt;/code&gt;, 16,639 LOC): &lt;strong&gt;461.28 s&lt;/strong&gt; mean (σ 2.71), 10th of 11 on my bench&lt;/li&gt;
&lt;li&gt;Rust clean release build, current tree (&lt;code&gt;b0cfcd4&lt;/code&gt;, 155,867 LOC, 243 crates): &lt;strong&gt;2931.88 s&lt;/strong&gt; mean (σ 3.47)&lt;/li&gt;
&lt;li&gt;vs. the other RISC-V design: &lt;strong&gt;1.41× faster&lt;/strong&gt; than the Orange Pi RV2 with half the cores (2.82× per core-second)&lt;/li&gt;
&lt;li&gt;vs. its own twin: within &lt;strong&gt;0.016%&lt;/strong&gt; of the Milk-V Mars on HEAD: same JH7110, same rustc, statistically identical&lt;/li&gt;
&lt;li&gt;vs. a 2012-era Cortex-A53: &lt;strong&gt;1.22× slower&lt;/strong&gt; than the Horizon X3 CM&lt;/li&gt;
&lt;li&gt;SHA-512 (no hardware anywhere): &lt;strong&gt;63.5 MB/s&lt;/strong&gt;, only 5.9× behind a Cortex-A76, the honest core-to-core figure&lt;/li&gt;
&lt;li&gt;AES-128-GCM: &lt;strong&gt;21.7 MB/s&lt;/strong&gt;, 100.9× behind: the cost of no K extension&lt;/li&gt;
&lt;li&gt;ChaCha20-Poly1305 &lt;strong&gt;51.0 MB/s&lt;/strong&gt;, 2.35× faster than AES-GCM &lt;em&gt;on this board&lt;/em&gt;: the inversion that matters for TLS&lt;/li&gt;
&lt;li&gt;ECDSA P-256 211.2 sign/s (80× behind, mostly missing assembly); RSA-2048 66.5 sign/s (4.1× behind)&lt;/li&gt;
&lt;li&gt;Hardware crypto: 21 &lt;code&gt;jh7110&lt;/code&gt; algorithms registered in the kernel, &lt;strong&gt;zero reachable from OpenSSL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Thread scaling: &lt;strong&gt;2.00× at 2 threads, 3.93× at 4&lt;/strong&gt;, near perfect&lt;/li&gt;
&lt;li&gt;Thermals: 55.7 °C idle, 70.0 °C peak, &lt;strong&gt;1.5 GHz held for 100% of 677 under-load samples&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;microSD 22.4 MB/s: SD high-speed 50 MHz, not UHS-I; the same card does 64.85 MB/s elsewhere&lt;/li&gt;
&lt;li&gt;Memory 5,488 MB/s read, the first sysbench memory figure in this series that does not exceed physics&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Caveats.&lt;/strong&gt; My run used rustc 1.98.1; the archived October 2025 fleet used 1.90/1.91. Commit &lt;code&gt;2821bba&lt;/code&gt; predates the repository having a &lt;code&gt;Cargo.lock&lt;/code&gt;, so dependency versions resolved fresh. sysbench is 0.4.12 here and 1.0.20 elsewhere, so those absolute figures are intra-machine only. OpenSSL numbers are userspace software crypto and are not this silicon's AES ceiling. The governor was left at the as-shipped &lt;code&gt;ondemand&lt;/code&gt;, and no &lt;code&gt;performance&lt;/code&gt; comparison was run because sampling showed the clock already pinned at maximum. Network throughput was never measured. The February 2026 Milk-V Mars result uses this same SoC but recorded no commit or LOC, so it is excluded from every comparison here.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Review Date: September 9, 2026&lt;/p&gt;
&lt;p&gt;Hardware Tested: Pine64 Star64, StarFive JH7110 (4 × SiFive U74-MC @ 1.5 GHz), 4 GB LPDDR4, 64 GB SanDisk microSD&lt;/p&gt;
&lt;p&gt;OS Tested: PinIx 2.1, kernel 5.15.131 (vendor BSP)&lt;/p&gt;
&lt;p&gt;Benchmark Workload: &lt;a href="https://github.com/ajokela/ballistics-engine"&gt;ballistics-engine&lt;/a&gt; clean release builds at commits &lt;code&gt;2821bba&lt;/code&gt; (fleet-comparable) and &lt;code&gt;b0cfcd4&lt;/code&gt; (current), rustc 1.98.1&lt;/p&gt;
&lt;p&gt;Conclusion: Competent baseline RISC-V silicon whose cores are roughly 6× behind contemporary ARM and whose crypto is 100× behind. The first number is the hardware, the second is the missing instruction set, and a stranded on-chip accelerator sits between them waiting for someone to write the plumbing.&lt;/p&gt;</description><category>aes-ni</category><category>benchmarks</category><category>chacha20</category><category>crypto extensions</category><category>hardware review</category><category>microsd</category><category>openssl</category><category>pine64</category><category>risc v</category><category>riscv64</category><category>rust compilation</category><category>sd high-speed</category><category>sifive u74</category><category>single board computers</category><category>star64</category><category>starfive jh7110</category><category>thermals</category><category>uhs-i</category><category>vendor bsp</category><guid>https://tinycomputers.io/posts/pine64-star64-riscv-review.html</guid><pubDate>Thu, 10 Sep 2026 14:15:00 GMT</pubDate></item></channel></rss>