<?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 aes-ni)</title><link>https://tinycomputers.io/</link><description></description><atom:link href="https://tinycomputers.io/categories/aes-ni.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>Sat, 26 Sep 2026 18:52:28 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><item><title>FreeBSD on a 2011 MacBook Pro: Fifteen Years of Progress, and Per Core It's a Tie</title><link>https://tinycomputers.io/posts/freebsd-on-a-2011-macbook-pro.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/freebsd-on-a-2011-macbook-pro_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;Every machine I have put through this benchmark has been a single-board computer. Rockchip, Broadcom, Intel's N-series, a RISC-V pioneer that took eleven minutes to do what the others did in one. This one is not an SBC at all. It is a 13-inch MacBook Pro from early 2011, an Apple MacBookPro8,1 with a Sandy Bridge Core i5, running FreeBSD 15.1-RELEASE-p3 instead of the macOS Apple stopped shipping it years ago.&lt;/p&gt;
&lt;p&gt;I did not add it to the fleet to find out whether a 2011 laptop is fast. I added it because it is a control. Every claim about how far single-board computers have come is implicitly a claim about what they came &lt;em&gt;from&lt;/em&gt;, and I had never actually measured the "from." A $60 Raspberry Pi 5 against a machine that cost well north of a thousand dollars new is a clean test of how much of the last fifteen years was real.&lt;/p&gt;
&lt;p&gt;The short version: it lands &lt;strong&gt;sixth of nine&lt;/strong&gt; on my bench, at 131.00 seconds: behind every current ARM board with four or more modern cores, comfortably ahead of the Cortex-A53 boards and the RISC-V entry. That is the boring part. The interesting part is what happens when you normalize that number per core and per gigahertz, at which point a 2011 Intel core and a 2023 ARM core turn out to do &lt;strong&gt;the same amount of work to within 0.3%&lt;/strong&gt;. Fifteen years of progress went almost entirely into core count, power, and specialized instructions, not into making an individual core meaningfully better at compiling Rust.&lt;/p&gt;
&lt;p&gt;Along the way this machine also tried to sell me a mechanical hard drive that reads at 2.86 GB/s, and a CPU benchmark that claimed five million prime-sieve passes per second. Both were lies, and both are instructive.&lt;/p&gt;
&lt;h3&gt;The Hardware: Sandy Bridge in 2026&lt;/h3&gt;
&lt;p&gt;The MacBookPro8,1 is built on an &lt;strong&gt;Intel Core i5-2435M&lt;/strong&gt;: two physical cores, four threads via Hyper-Threading, 2.4 GHz base, 3.0 GHz single-core turbo, 2.8 GHz two-core turbo. A 32 nm Sandy Bridge part with a 35 W TDP.&lt;/p&gt;
&lt;p&gt;That core count is the whole story of where it lands. Every ARM board in this comparison has at least four cores; the RK3588 boards have eight. This machine brings two real cores to a fight against four and eight, and Hyper-Threading only partly closes the gap.&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;CPU&lt;/td&gt;
&lt;td&gt;Intel Core i5-2435M, 2C/4T, 2.4 GHz base / 3.0 GHz turbo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microarchitecture&lt;/td&gt;
&lt;td&gt;Sandy Bridge, 32 nm, 35 W TDP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ISA extensions&lt;/td&gt;
&lt;td&gt;SSE4.2, &lt;strong&gt;AVX&lt;/strong&gt;, &lt;strong&gt;AES-NI&lt;/strong&gt;, PCLMULQDQ (no SHA extensions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAM&lt;/td&gt;
&lt;td&gt;2 × 4 GiB DDR3-1333, dual channel (21.3 GB/s theoretical)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;Seagate ST9500325ASG: 500 GB, 2.5", &lt;strong&gt;5400 RPM mechanical&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU&lt;/td&gt;
&lt;td&gt;Intel HD Graphics 3000 (no driver under FreeBSD)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ethernet&lt;/td&gt;
&lt;td&gt;Broadcom BCM57765 Gigabit (present, uncabled)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wireless&lt;/td&gt;
&lt;td&gt;USB Realtek RTL8188EU 1T1R 802.11n&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OS&lt;/td&gt;
&lt;td&gt;FreeBSD 15.1-RELEASE-p3 amd64, ZFS on root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toolchain&lt;/td&gt;
&lt;td&gt;rustc / cargo 1.98.0, &lt;code&gt;x86_64-unknown-freebsd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Two rows carry most of the weight. &lt;strong&gt;AES-NI and AVX&lt;/strong&gt; are what keep this chip relevant in 2026: Sandy Bridge was the generation that introduced both, and as we will see, that timing decides several benchmarks outright. The &lt;strong&gt;5400 RPM mechanical hard drive&lt;/strong&gt; is what drags it back into the past. Nothing else on my bench has spinning rust in it.&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-mode build of &lt;a href="https://github.com/ajokela/ballistics-engine"&gt;ballistics-engine&lt;/a&gt;, a Rust project of mine. Rust compilation stresses integer throughput, branch prediction, memory bandwidth, and parallel scaling simultaneously, and it is what I actually use these machines for.&lt;/p&gt;
&lt;p&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 benchmark quietly outgrew itself. The October 2025 fleet sweep compiled 43 source files and 16,639 lines. Today's &lt;code&gt;main&lt;/code&gt; is 196 files and 155,867 lines, nine times the code. Any number produced against current &lt;code&gt;HEAD&lt;/code&gt; is meaningless next to an archived 2025 result.&lt;/p&gt;
&lt;p&gt;So, as with the T6N, this run has &lt;strong&gt;two tiers&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pinned: commit &lt;code&gt;2821bba&lt;/code&gt;&lt;/strong&gt;, verified on the machine at 43 &lt;code&gt;.rs&lt;/code&gt; files / 16,639 LOC / 144 crates. Byte-for-byte the tree the fleet was measured on. Every fleet comparison below uses this.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HEAD: commit &lt;code&gt;b0cfcd4&lt;/code&gt;&lt;/strong&gt;, 196 files / 155,867 LOC / 246 crates. Useful as a 2026-scale data point, comparable only to future runs of the same commit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each tier got an untimed warm-up build to fetch and compile dependencies, then three timed &lt;code&gt;cargo build --release&lt;/code&gt; runs, each preceded by &lt;code&gt;cargo clean&lt;/code&gt; and a &lt;code&gt;sync&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A note for anyone repeating this on FreeBSD: the base system ships without &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;sudo&lt;/code&gt;, or &lt;code&gt;bash&lt;/code&gt; (they are all ports, not base), and the default login shell is &lt;code&gt;tcsh&lt;/code&gt;, which cannot parse &lt;code&gt;2&amp;gt;&amp;amp;1&lt;/code&gt;. I fetched both source trees as GitHub codeload tarballs pinned to exact commit hashes rather than cloning, and wrapped every remote command in &lt;code&gt;sh -c&lt;/code&gt;. Neither changes the source tree; both will trip you up if you assume Linux habits transfer.&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;, 16,639 LOC), fleet-comparable:&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;127.78 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;131.33 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;133.87 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;131.00 s&lt;/strong&gt; (median 131.33 s, σ 3.06 s)&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;, 155,867 LOC):&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;711.95 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;718.60 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;712.00 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;714.18 s&lt;/strong&gt; (median 712.00 s, σ 3.82 s)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The current tree takes &lt;strong&gt;5.45×&lt;/strong&gt; as long for 9.4× the source volume: sublinear, because a growing share of the work is dependency compilation the two trees partly share.&lt;/p&gt;
&lt;h4&gt;Against the Fleet&lt;/h4&gt;
&lt;p&gt;Clean &lt;code&gt;cargo build --release&lt;/code&gt;, pinned tree, mean of three runs:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;System&lt;/th&gt;
&lt;th&gt;SoC&lt;/th&gt;
&lt;th&gt;Cores&lt;/th&gt;
&lt;th&gt;Arch&lt;/th&gt;
&lt;th&gt;Mean&lt;/th&gt;
&lt;th&gt;vs. best&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;&lt;a href="https://tinycomputers.io/posts/friendlyelec-nanopc-t6n-review.html"&gt;NanoPC-T6N&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Rockchip RK3588&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;arm64&lt;/td&gt;
&lt;td&gt;52.55 s&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;&lt;a href="https://tinycomputers.io/posts/rk3588-orange-pi-5-max-review.html"&gt;Orange Pi 5 Max&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Rockchip RK3588&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;arm64&lt;/td&gt;
&lt;td&gt;62.31 s&lt;/td&gt;
&lt;td&gt;1.19×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tinycomputers.io/posts/raspberry-pi-compute-module-5-review.html"&gt;Raspberry Pi CM5&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;BCM2712&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;arm64&lt;/td&gt;
&lt;td&gt;71.04 s&lt;/td&gt;
&lt;td&gt;1.35×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tinycomputers.io/posts/lattepanda-iota-a-review.html"&gt;LattePanda IOTA&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Intel N150&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;x86_64&lt;/td&gt;
&lt;td&gt;72.21 s&lt;/td&gt;
&lt;td&gt;1.37×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Raspberry Pi 5&lt;/td&gt;
&lt;td&gt;BCM2712&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;arm64&lt;/td&gt;
&lt;td&gt;76.65 s&lt;/td&gt;
&lt;td&gt;1.46×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;MacBookPro8,1 (FreeBSD)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Core i5-2435M&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2C/4T&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;x86_64&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;131.00 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.49×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tinycomputers.io/posts/banana-pi-cm5-pro-review.html"&gt;Banana Pi CM5-Pro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;RK3576&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;arm64&lt;/td&gt;
&lt;td&gt;167.15 s&lt;/td&gt;
&lt;td&gt;3.18×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tinycomputers.io/posts/horizon-robotics-x3-cm-review.html"&gt;Horizon X3 CM&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sunrise X3 (A53)&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;arm64&lt;/td&gt;
&lt;td&gt;378.81 s&lt;/td&gt;
&lt;td&gt;7.21×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tinycomputers.io/posts/the-orangepi-rv2.html"&gt;Orange Pi RV2&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Ky X1 (RISC-V)&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;riscv64&lt;/td&gt;
&lt;td&gt;650.60 s&lt;/td&gt;
&lt;td&gt;12.38×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Archived figures are from the October 2025 fleet sweep on rustc 1.90/1.91; the MacBook figure is from August 2026 on rustc 1.98.0 against the same source tree. See the caveats at the end.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Mid-table. It is 1.71× slower than a Raspberry Pi 5, 1.81× slower than a LattePanda IOTA, and 2.49× off the leading NanoPC-T6N, while being 1.28× faster than a Banana Pi CM5-Pro and 4.97× faster than the RISC-V Orange Pi RV2. For scale, the AMD AI Max+ 395 desktop in the same archived sweep did the pinned tree in 13.71 s.&lt;/p&gt;
&lt;h4&gt;The Number That Actually Matters&lt;/h4&gt;
&lt;p&gt;A 2011 laptop losing to a 2023 Raspberry Pi is not a story. Losing by only 1.71× is.&lt;/p&gt;
&lt;p&gt;The gap is almost entirely core count. Rust compilation parallelizes well across crates, and the Pi 5 brings four Cortex-A76 cores where this machine brings two Sandy Bridge cores plus SMT. So normalize it.&lt;/p&gt;
&lt;p&gt;The Pi 5 spends &lt;strong&gt;306.6 core-seconds&lt;/strong&gt; on the build (4 cores × 76.65 s). The MacBook spends &lt;strong&gt;262.0&lt;/strong&gt; (2 cores × 131.00 s), 1.17× &lt;em&gt;fewer&lt;/em&gt; per core. But the i5 is also running at 2.8 GHz against the A76's 2.4 GHz, and once you divide that out the two land at &lt;strong&gt;1.003×. A 0.3% difference.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Per core, per gigahertz, a 2011 Sandy Bridge core and a 2023 Cortex-A76 do the same amount of Rust compilation.&lt;/p&gt;
&lt;p&gt;That needs one honest caveat: count the i5's four SMT threads instead of its two physical cores and the ratio flips to 0.59×, because SMT threads are not cores. The defensible reading is per &lt;em&gt;physical&lt;/em&gt; core, and on that basis fifteen years of core design produced parity, not progress.&lt;/p&gt;
&lt;p&gt;This is the clearest evidence I have for where SBC progress actually came from. It is not that ARM cores became dramatically faster than 2011 x86 cores. It is that you can now buy eight of them, on one die, drawing a tenth of the power, for eighty dollars.&lt;/p&gt;
&lt;p&gt;I want to be careful about the efficiency claim, because &lt;strong&gt;I never measured power.&lt;/strong&gt; The machine stayed on AC and reported a 0 mA discharge rate throughout. On &lt;em&gt;nominal TDP&lt;/em&gt; alone (35 W against the Pi 5's ~12 W and the N150's ~6 W), this laptop does less work for several times the energy. Treat that as an order-of-magnitude statement, not a measurement.&lt;/p&gt;
&lt;h3&gt;Cryptography: A Tale of Two Instruction Sets&lt;/h3&gt;
&lt;p&gt;Here the comparison stops being about core counts and starts being about what silicon designers chose to put in hardware. Single-threaded OpenSSL 3.5.6, 16 KB blocks, against the NanoPC-T6N's Cortex-A76:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;i5-2435M&lt;/th&gt;
&lt;th&gt;RK3588 (A76)&lt;/th&gt;
&lt;th&gt;Ratio&lt;/th&gt;
&lt;th&gt;Winner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AES-128-CBC&lt;/td&gt;
&lt;td&gt;575.6 MB/s&lt;/td&gt;
&lt;td&gt;1831.8 MB/s&lt;/td&gt;
&lt;td&gt;3.18×&lt;/td&gt;
&lt;td&gt;Cortex-A76&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AES-128-GCM&lt;/td&gt;
&lt;td&gt;1112.4 MB/s&lt;/td&gt;
&lt;td&gt;2185.7 MB/s&lt;/td&gt;
&lt;td&gt;1.96×&lt;/td&gt;
&lt;td&gt;Cortex-A76&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AES-256-GCM&lt;/td&gt;
&lt;td&gt;988.2 MB/s&lt;/td&gt;
&lt;td&gt;1763.9 MB/s&lt;/td&gt;
&lt;td&gt;1.78×&lt;/td&gt;
&lt;td&gt;Cortex-A76&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SHA-256&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;251.8 MB/s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1429.4 MB/s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5.68×&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cortex-A76&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SHA-512&lt;/td&gt;
&lt;td&gt;361.2 MB/s&lt;/td&gt;
&lt;td&gt;376.1 MB/s&lt;/td&gt;
&lt;td&gt;1.04×&lt;/td&gt;
&lt;td&gt;Cortex-A76&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChaCha20-Poly1305&lt;/td&gt;
&lt;td&gt;761.9 MB/s&lt;/td&gt;
&lt;td&gt;674.4 MB/s&lt;/td&gt;
&lt;td&gt;1.13×&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Sandy Bridge&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That pattern is not noise, and it is not "newer is faster."&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SHA-256 is the blowout, and it is an instruction-set gap rather than a performance gap.&lt;/strong&gt; ARMv8 gained dedicated SHA-256 instructions. Sandy Bridge has none. Intel did not ship SHA extensions until Goldmont and Ice Lake, years later. The A76 does SHA-256 in hardware while the i5 grinds it out in general-purpose integer code. No clock speed closes 5.68×.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SHA-512 is the control that proves the point.&lt;/strong&gt; Neither chip accelerates SHA-512, so both run software implementations, and they land within 4% of each other. Take away the instruction-set advantage and a 2011 Intel core matches a 2023 ARM core almost exactly. That is the same conclusion the compile normalization reached, arrived at from a completely different direction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ChaCha20-Poly1305 is the one outright win&lt;/strong&gt;, and it comes from AVX. ChaCha20 was designed to be fast in software on SIMD units, and Sandy Bridge's AVX serves it well enough to beat the A76 by 13%. This is exactly why ChaCha20 exists: it is what you reach for when you cannot count on AES hardware.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AES sits in between&lt;/strong&gt;, and the i5 does have hardware for it. Disabling AES-NI isolates the contribution:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AES-128-CBC&lt;/th&gt;
&lt;th&gt;Throughput&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AES-NI enabled&lt;/td&gt;
&lt;td&gt;575.6 MB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AES-NI disabled&lt;/td&gt;
&lt;td&gt;296.9 MB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Speedup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.94×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Under 2× looks disappointing for dedicated hardware until you remember that CBC &lt;em&gt;encryption&lt;/em&gt; is inherently serial: every block depends on the one before it, so the pipelined AES-NI units can never be filled. Parallelizable GCM tells the real story at &lt;strong&gt;1112 MB/s&lt;/strong&gt;, nearly 4× the unaccelerated CBC figure. AES-NI works fine; CBC just cannot use it.&lt;/p&gt;
&lt;p&gt;Asymmetric operations round it out: RSA-2048 at 743.7 signs/s and 24,962 verifies/s; ECDSA P-256 at 22,696 signs/s and 7,426 verifies/s.&lt;/p&gt;
&lt;p&gt;Practically: as a TLS terminator this machine is respectable, roughly a gigabit of AES-GCM on a single core. As anything that hashes heavily (content-addressed storage, a Git server, bulk checksumming), it is badly handicapped against any ARMv8 board.&lt;/p&gt;
&lt;h3&gt;Hyper-Threading Does Nothing Here (And That's Fine)&lt;/h3&gt;
&lt;p&gt;Intra-machine scaling, &lt;code&gt;stress-ng --cpu&lt;/code&gt; with the &lt;code&gt;matrixprod&lt;/code&gt; method:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Threads&lt;/th&gt;
&lt;th&gt;Bogo-ops/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;1378.90&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;2077.40&lt;/td&gt;
&lt;td&gt;1.51×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;2077.78&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.51×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Hyper-Threading contributes &lt;strong&gt;exactly nothing&lt;/strong&gt;: 2077.40 to 2077.78 is noise. That is not a fault. &lt;code&gt;matrixprod&lt;/code&gt; is floating-point and SIMD-bound, and on Sandy Bridge, SMT siblings share the floating-point execution units. Two threads already saturate them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not generalize this to the compile benchmark.&lt;/strong&gt; Rust compilation is mixed integer, branch, and pointer-chasing work with frequent memory stalls, precisely the profile SMT was built to exploit. The compile results &lt;em&gt;do&lt;/em&gt; benefit from four threads. These two measurements answer different questions about the same chip, and conflating them would be an easy way to draw a badly wrong conclusion.&lt;/p&gt;
&lt;p&gt;The 1→2 scaling of 1.51× rather than 2.00× is also explainable: single-threaded work runs at the 3.0 GHz one-core turbo, two-threaded work at the 2.8 GHz two-core ceiling. Correct for that and real two-core scaling is about 1.62×.&lt;/p&gt;
&lt;h3&gt;Storage: The 5400 RPM Anchor&lt;/h3&gt;
&lt;p&gt;The system disk is a &lt;strong&gt;Seagate ST9500325ASG&lt;/strong&gt;: 500 GB, 2.5-inch, spinning at 5400 RPM, confirmed by the drive's own &lt;code&gt;rotationrate&lt;/code&gt; field rather than inferred from the model number.&lt;/p&gt;
&lt;p&gt;Raw sequential read via &lt;code&gt;diskinfo -t&lt;/code&gt;, bypassing the filesystem:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Zone&lt;/th&gt;
&lt;th&gt;Throughput&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Outside tracks&lt;/td&gt;
&lt;td&gt;77.2 MB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Middle tracks&lt;/td&gt;
&lt;td&gt;65.7 MB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inside tracks&lt;/td&gt;
&lt;td&gt;40.2 MB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A textbook ZCAV curve, 1.92× falloff from outer to inner tracks, because the outer edge of the platter passes under the head faster. Seek times are what you would expect and worse: &lt;strong&gt;33.3 ms full stroke&lt;/strong&gt;, 23.8 ms half, 18.5 ms quarter. An NVMe drive services a request roughly a thousand times faster.&lt;/p&gt;
&lt;p&gt;At the filesystem level, on ZFS with compression off: &lt;strong&gt;74.8 MB/s write, 75.0 MB/s read&lt;/strong&gt;, tracking the outer-track raw number closely.&lt;/p&gt;
&lt;p&gt;Getting that read figure honestly took two attempts. The first returned &lt;strong&gt;2.86 GB/s&lt;/strong&gt;, thirty-six times what the drive can physically do. The ZFS ARC was the culprit: the 1 GB test file fit entirely inside a 2040 MB cache, so the read never touched a platter. Setting &lt;code&gt;primarycache=none&lt;/code&gt; &lt;em&gt;after&lt;/em&gt; writing does not fix it, because the data is already cached. Only creating the dataset with &lt;code&gt;compression=off&lt;/code&gt; and &lt;code&gt;primarycache=none&lt;/code&gt; from the outset forces real I/O. I threw the first number away.&lt;/p&gt;
&lt;p&gt;For a compile box the mechanical disk matters far less than it looks. &lt;code&gt;cargo build&lt;/code&gt; is CPU-bound once sources are on disk, the working set fits in ARC, and run-to-run standard deviation was only 3.06 s on a 131 s mean: no I/O stalls. Swapping in an SSD would barely move the compile numbers. Cold boots, big checkouts, and anything touching many small files are a different conversation entirely.&lt;/p&gt;
&lt;h3&gt;Thermals: Riding Tjmax With a Lazy Fan&lt;/h3&gt;
&lt;p&gt;Sustained load, four &lt;code&gt;stress-ng&lt;/code&gt; workers for 120 seconds, sampled every 10 seconds:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Die temp&lt;/th&gt;
&lt;th&gt;Fan&lt;/th&gt;
&lt;th&gt;Delivered clock&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10 s&lt;/td&gt;
&lt;td&gt;81 °C&lt;/td&gt;
&lt;td&gt;1996 RPM&lt;/td&gt;
&lt;td&gt;2800 MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20 s&lt;/td&gt;
&lt;td&gt;92 °C&lt;/td&gt;
&lt;td&gt;2540 RPM&lt;/td&gt;
&lt;td&gt;2800 MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;30 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100 °C&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3646 RPM&lt;/td&gt;
&lt;td&gt;2800 MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40 s&lt;/td&gt;
&lt;td&gt;99 °C&lt;/td&gt;
&lt;td&gt;5170 RPM&lt;/td&gt;
&lt;td&gt;2700 MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50 s&lt;/td&gt;
&lt;td&gt;94 °C&lt;/td&gt;
&lt;td&gt;6200 RPM&lt;/td&gt;
&lt;td&gt;2800 MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;60–100 s&lt;/td&gt;
&lt;td&gt;92–98 °C&lt;/td&gt;
&lt;td&gt;~6200 RPM&lt;/td&gt;
&lt;td&gt;2800 MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;110 s&lt;/td&gt;
&lt;td&gt;100 °C&lt;/td&gt;
&lt;td&gt;6200 RPM&lt;/td&gt;
&lt;td&gt;2800 MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Idle is 45 °C with the fan at its 2000 RPM floor and the CPU parked at 1200 MHz. Thirty seconds into load the die is at &lt;strong&gt;Tjmax, 100 °C&lt;/strong&gt;, because the SMC fan curve is reactive and takes about 50 seconds to reach its 6200 RPM maximum. The fan chases the heat rather than anticipating it.&lt;/p&gt;
&lt;p&gt;And yet the delivered clock &lt;strong&gt;holds 2800 MHz for the entire run&lt;/strong&gt;, with a single 10-second sample at 2700. That 2800 figure is the two-core turbo ceiling straight out of &lt;code&gt;MSR_TURBO_RATIO_LIMIT&lt;/code&gt;: the chip is delivering its rated maximum multi-core turbo while sitting at its thermal limit. Across 221 samples taken during the compile runs the mean delivered clock was &lt;strong&gt;2757 MHz&lt;/strong&gt;, with 86.9% of samples at or above 2800.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One methodological warning, because it nearly cost me the whole thermal analysis.&lt;/strong&gt; On x86, &lt;code&gt;dev.cpu.N.freq&lt;/code&gt; is useless for this. It reported 2401 MHz for the entire benchmark, because it reflects the &lt;em&gt;requested&lt;/em&gt; P-state, not what the silicon delivers. The real number comes from &lt;code&gt;IA32_PERF_STATUS&lt;/code&gt; (MSR &lt;code&gt;0x198&lt;/code&gt;, bits 15:8), read with &lt;code&gt;cpucontrol&lt;/code&gt;. Early on I took a single such reading, got multiplier 11 (1100 MHz) and briefly concluded the machine was throttling catastrophically. Sustained sampling showed that was an idle-sample artifact: I had caught the core between compile jobs. &lt;strong&gt;One instantaneous MSR read is not a measurement.&lt;/strong&gt; It took 221 of them to get the right answer, which was nearly the opposite of the first one.&lt;/p&gt;
&lt;p&gt;The verdict: this fifteen-year-old cooling system, aged thermal paste and all, is still doing its job. Loudly, with zero margin, at the edge of Tjmax, but doing it. Compile throughput is not meaningfully thermally limited.&lt;/p&gt;
&lt;h3&gt;What Doesn't Work&lt;/h3&gt;
&lt;p&gt;FreeBSD on Apple hardware is functional, not complete.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No GPU acceleration.&lt;/strong&gt; The Intel HD Graphics 3000 shows up as a PCI device, but no &lt;code&gt;i915&lt;/code&gt;/DRM module loads and no &lt;code&gt;/dev/dri&lt;/code&gt; nodes exist: Sandy Bridge (gen6) support has been dropped from current &lt;code&gt;drm-kmod&lt;/code&gt;. This is a console-and-SSH machine, not a desktop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The internal WiFi is not in use.&lt;/strong&gt; The Broadcom BCM4331 probes and attaches via &lt;code&gt;bwn_pci0&lt;/code&gt;/&lt;code&gt;bhnd0&lt;/code&gt;, but the active interface is a &lt;strong&gt;USB Realtek RTL8188EU&lt;/strong&gt;: a 1T1R 802.11n 2.4 GHz dongle, about the slowest wireless configuration still sold. Every byte of this testing crossed that link.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Networking is therefore uncharacterized, deliberately.&lt;/strong&gt; The BCM57765 gigabit port is present and well supported but had no cable in it, and the machine was reachable only over that wireless dongle for the entire test window. Benchmarking a NIC with no cable, or reporting throughput across a link that tops out near 150 Mbps of PHY rate, would produce a number describing the dongle rather than the machine. I ran no network benchmark and I am reporting none. Treat this machine's networking as genuinely unknown: there is no reason to expect the BCM57765 to disappoint, but this review does not demonstrate it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The battery is at 85.7% of design capacity&lt;/strong&gt; (4944 of 5770 mAh after fifteen years), which is frankly remarkable, though it reports "discharging" at 0 mA while on AC, an ACPI quirk of this hardware.&lt;/p&gt;
&lt;h3&gt;Two Results I Threw Out&lt;/h3&gt;
&lt;p&gt;Benchmarking old hardware invites plausible-looking nonsense. Two numbers here went in the bin rather than into the tables.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sysbench CPU is broken on this FreeBSD build.&lt;/strong&gt; It reported &lt;strong&gt;5,176,529 events/s&lt;/strong&gt; single-threaded with &lt;code&gt;--cpu-max-prime=20000&lt;/code&gt;. The NanoPC-T6N scored 967 on the identical test. A 5000× gap is not a performance difference: computing primes to 20,000 five million times a second would need something like 10¹¹ operations per second from one 2.8 GHz core. sysbench 1.0.20 accepts the flag and dutifully echoes "Prime numbers limit: 20000" back at you, but its event accounting in this build is wrong. Every sysbench CPU number was discarded; the CPU comparison rests on the compile benchmark and OpenSSL instead.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sysbench memory measures cache, not DRAM.&lt;/strong&gt; It reported 40.4 GB/s read. This machine has 2 × 4 GiB of DDR3-1333 in dual channel, a theoretical ceiling of 21.3 GB/s. Beating physics by 1.9× means the working set never left cache. The T6N run flagged the same failure mode, which suggests it is a property of the benchmark rather than of either machine.&lt;/p&gt;
&lt;p&gt;The general rule, and the reason I keep writing these sections: &lt;strong&gt;a benchmark number that beats the hardware's physical limits is a bug report, not a result.&lt;/strong&gt; Three of the numbers this machine initially handed me (2.86 GB/s from a 5400 RPM disk, 5.2 million prime passes per second, 40 GB/s from DDR3-1333) were all physically impossible, and all three looked perfectly ordinary sitting in a terminal.&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 home build server, a network service host, or a FreeBSD and ZFS learning machine, this is genuinely useful hardware. It compiles a 16,000-line Rust project in about two minutes, terminates roughly a gigabit of AES-GCM on one core, has 8 GB of RAM (more than most boards on my bench), plus a real SATA bus, a real gigabit NIC, a keyboard, and a screen. It also has an uninterruptible power supply bolted to the bottom of it that still holds 86% of its original charge, which no SBC here can say.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Poor uses.&lt;/strong&gt; Anything hash-heavy loses badly to any ARMv8 board. Anything needing a GPU or a desktop is out. Anything power- or space-constrained is better served by a $60 Pi. Anything depending on fast random I/O is throttled by a 5400 RPM disk with 33 ms full-stroke seeks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The honest framing&lt;/strong&gt; is that this machine's value is that it already exists. Nobody should go buy a 2011 MacBook Pro for this: a Raspberry Pi 5 beats it on speed, power, size, and noise simultaneously, for a fraction of what this cost new. But a laptop otherwise headed for a drawer or a recycler, given a current OS, lands mid-pack in a fleet of 2026 single-board computers. That is a better argument for FreeBSD on old Apple hardware than any benchmark table I could build.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Fifteen years of progress turn out to be real, but much narrower than the marketing implies. Per core and per gigahertz, this Sandy Bridge chip and a Cortex-A76 compile Rust at the same rate to within 0.3%. The SHA-512 result, where neither side has hardware acceleration and the two land within 4%, says the same thing from a different angle. What changed was not that cores got dramatically better. It was core density, power efficiency, and the arrival of specialized instructions. The 5.68× SHA-256 gap is not Intel being slow; it is Intel not having shipped the instruction yet in 2011.&lt;/p&gt;
&lt;p&gt;The MacBookPro8,1 slots in sixth of nine at 131.00 seconds: behind every current ARM board with four or more modern cores, comfortably ahead of the A53-class boards and the RISC-V entry. Thermally maxed out but not throttled. Storage-limited in ways that barely touch this workload. Network-limited in a way an Ethernet cable would fix.&lt;/p&gt;
&lt;p&gt;It is also, fifteen years on, still doing useful work. That was not the result I expected when I plugged it in.&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;131.00 s&lt;/strong&gt; mean (σ 3.06 s), 6th of 9 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, 246 crates): &lt;strong&gt;714.18 s&lt;/strong&gt; mean (σ 3.82 s)&lt;/li&gt;
&lt;li&gt;Per core per GHz vs Cortex-A76: &lt;strong&gt;1.003×&lt;/strong&gt;, a statistical tie&lt;/li&gt;
&lt;li&gt;AES-128-GCM 1112.4 MB/s; AES-256-GCM 988.2 MB/s; ChaCha20-Poly1305 761.9 MB/s; SHA-256 251.8 MB/s&lt;/li&gt;
&lt;li&gt;AES-NI contribution on AES-128-CBC: 575.6 vs 296.9 MB/s (&lt;strong&gt;1.94×&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;ECDSA P-256 22,696 sign/s; RSA-2048 743.7 sign/s, 24,962 verify/s&lt;/li&gt;
&lt;li&gt;Storage: 77.2 / 65.7 / 40.2 MB/s outer/middle/inner; 33.3 ms full-stroke seek; 74.8 MB/s ZFS write&lt;/li&gt;
&lt;li&gt;CPU scaling (FP-bound): 1.51× at 2 threads, &lt;strong&gt;1.51× at 4&lt;/strong&gt;: SMT contributes nothing to SIMD work&lt;/li&gt;
&lt;li&gt;Thermals: 45 °C idle, &lt;strong&gt;100 °C&lt;/strong&gt; peak, 2800 MHz two-core turbo sustained throughout&lt;/li&gt;
&lt;li&gt;Discarded as physically impossible: sysbench CPU, sysbench memory, and a first-attempt 2.86 GB/s disk read&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Caveats.&lt;/strong&gt; My run used rustc 1.98.0; the archived fleet used 1.90/1.91 and the T6N used 1.97.1. 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. &lt;code&gt;coretemp&lt;/code&gt; and &lt;code&gt;asmc&lt;/code&gt; were loaded mid-run, between HEAD runs 1 and 2, and observed temperatures dropped from ~98 °C to ~90 °C across that window, but runs 1, 2, and 3 came in at 711.95, 718.60, and 712.00 s, statistically identical, so the perturbation had no measurable effect. Power was never measured; efficiency statements rest on nominal TDP. Network throughput was never measured. No random-I/O benchmark was run.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Review Date: August 29, 2026&lt;/p&gt;
&lt;p&gt;Hardware Tested: Apple MacBookPro8,1 (13-inch, early 2011), Intel Core i5-2435M, 8 GB DDR3-1333, 500 GB Seagate ST9500325ASG 5400 RPM HDD&lt;/p&gt;
&lt;p&gt;OS Tested: FreeBSD 15.1-RELEASE-p3 amd64, ZFS on root&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.0&lt;/p&gt;
&lt;p&gt;Conclusion: A fifteen-year-old laptop that lands mid-pack against 2026 single-board computers, and a useful reminder that most of what we call CPU progress has been core count, power, and specialized instructions rather than raw per-core throughput.&lt;/p&gt;</description><category>aes-ni</category><category>apple</category><category>asmc</category><category>benchmarks</category><category>coretemp</category><category>e-waste</category><category>freebsd</category><category>hardware review</category><category>intel core i5</category><category>macbook pro</category><category>msr</category><category>old hardware</category><category>openssl</category><category>rust compilation</category><category>sandy bridge</category><category>single board computers</category><category>thermals</category><category>x86_64</category><category>zfs</category><guid>https://tinycomputers.io/posts/freebsd-on-a-2011-macbook-pro.html</guid><pubDate>Sat, 29 Aug 2026 21:30:00 GMT</pubDate></item></channel></rss>