This is a valid Atom 1.0 feed.
This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.
... " href="https://taoofmac.com/atom.xml"/>
^
line 21, column 0: (105 occurrences) [help]
<p><a href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/wind ...
line 239, column 0: (6 occurrences) [help]
<video controls="" autoplay="" loop="" muted="" playsinline="" style="widt ...
line 239, column 0: (6 occurrences) [help]
<video controls="" autoplay="" loop="" muted="" playsinline="" style="widt ...
line 239, column 0: (6 occurrences) [help]
<video controls="" autoplay="" loop="" muted="" playsinline="" style="widt ...
line 239, column 0: (6 occurrences) [help]
<video controls="" autoplay="" loop="" muted="" playsinline="" style="widt ...
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Tao of Mac</title>
<subtitle>The Tao of Mac is the personal wiki of Rui Carmo, featuring a technology-oriented blog, links to articles, several compilations of resources around various key technology topics, and a collection of photos and videos.</subtitle>
<link rel="alternate" type="text/xml" href="https://taoofmac.com"/>
<link rel="self" type="application/atom+xml" href="https://taoofmac.com/atom.xml"/>
<id>https://taoofmac.com/atom.xml</id>
<updated>2024-11-19T19:00:00+00:00</updated>
<rights>CC Attribution-NonCommercial-NoDerivs 3.0</rights>
<entry>
<title>Windows 365 Link</title>
<id>https://taoofmac.com/space/links/2024/11/19/1900</id>
<published>2024-11-19T19:00:00+00:00</published>
<updated>2024-11-19T19:00:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/links/2024/11/19/1900"/>
<content type="html"><![CDATA[
<p><a href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/windows-365-link%E2%80%94the-first-cloud-pc-device-for-windows-365/4302687?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" title="external link to https://techcommunity.microsoft.com/blog/windows-itpro-blog/windows-365-link—the-first-cloud-pc-device-for-windows-365/4302687" alt="screenshot of https://techcommunity.microsoft.com/blog/windows-itpro-blog/windows-365-link—the-first-cloud-pc-device-for-windows-365/4302687" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2024/11/19/1900/640,480/i2x2pavqztZu-P56lSxTlWRG2PM=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">This is nice. As someone who lives mostly inside Remote Desktop regardless of what actual physical machine I’m using, I’d be OK with getting one of these for work. </p>
<p>The price point feels a little high (especially since it appears to have no built-in biometrics or anything that really sets it apart from the slew of mini-PCs currently flooding the market), but I guess that for a first-party dual 4K thin terminal that’s… kind of OK?</p>
<br/>
]]></content>
<category term="microsoft" label="microsoft" />
<category term="client" label="client" />
<category term="thin" label="thin" />
<category term="365" label="365" />
<category term="remote" label="remote" />
<category term="desktop" label="desktop" />
<category term="windows" label="windows" />
</entry>
<entry>
<title>Notes for November 11-17</title>
<id>https://taoofmac.com/space/notes/2024/11/17/1700</id>
<published>2024-11-17T17:00:00+00:00</published>
<updated>2024-11-17T17:00:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/notes/2024/11/17/1700"/>
<content type="html"><![CDATA[
<p class="lead">I have been taking a bit more care of myself–largely by forcing myself out of the house as much as possible, completely shutting off Teams every now and then (focus time doesn’t prevent people from messaging you, only calling, even if it does mute notifications) and, by and large, getting up (and going to bed) earlier.</p>
<p>I’ve lost 3Kg over the past few weeks, which should tell you something about how my return to work has been going.</p>
<p>I’ve also silently quit pretty much every single social media site in existence (the new iOS feature to “hide” apps and require Face ID to access them is pretty useful for that), although I did go and check if the few people I still follow on Twitter have moved to Bluesky already.</p>
<p>Right now, I’ve put almost everything on hold–unless it’s essential to work, relaxation or self-fulfillment, it’s just not happening. Having burned out more than once, I know the signs, and I was clearly already way too deep before I switched roles–I should <em>definitely</em> have taken a break.</p>
<p>With more guardrails in place, work stress leveled off a bit and is… almost OK. The structure of consulting work is comfortable (if far from satisfactory) and lends itself to both keeping your mind busy and blurring out any grievances you may have towards specific projects, although I still hate the constant context switching.</p>
<p>That said, whatever free time I could scrounge together was mostly spent doing chores.</p>
<p>I’ve also tried to spend a little time converting a bunch of <a href="/space/dev/python" rel="next" style="color: #0000cc;">Python</a> stuff to <a href="/space/dev/golang" rel="next" style="color: #0000cc;">Go</a>, for three reasons:</p>
<ol>
<li><a href="/space/dev/golang" rel="next" style="color: #0000cc;">Go</a> is now over ten years old and <em>finally</em> stable enough as a language to both have enough batteries included for most of my common use cases and a stable library ecosystem (although I still don’t like the way packages are namespaced and mapped directly into URLs, or the way I’m pulling packages out of GitHub repos without much in the way of supply chain security).</li>
<li>I’d rather write <a href="/space/dev/golang" rel="next" style="color: #0000cc;">Go</a> than <a href="/space/dev/cplusplus" rel="next" style="color: #0000cc;">C++</a> (or <a href="/space/dev/rust" rel="next" style="color: #0000cc;">Rust</a>) for my own things–there’s so much less ceremony and overhead for everything that I’m just more productive in it.</li>
<li>As much as I love <a href="/space/dev/python" rel="next" style="color: #0000cc;">Python</a>, I needed the challenge and the ability to write faster, more efficient lower-level code without dipping in and out of <code>async</code>.</li>
</ol>
<p>Besides that, this weekend I started playing with <a href="http://xogot.com?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Xogot</a>, Miguel De Icaza’s amazing <a href="/space/apps/godot" rel="next" style="color: #0000cc;">Godot</a> port to the iPad–and am loving it, although I’ve always found it hard to come up with game mechanics and code them.</p>
<p>And, of course, <a href="/space/links/2021/12/30/1515" rel="next" style="color: #0000cc;">I’m watching Arcane again</a> and loving it, fully conscious that I will be very sad when it’s over. I haven’t seen anything else quite like it.</p>
<figure>
<img src="https://taoofmac.com/media/notes/2024/11/17/1700/iY18yuceApBr8NTmlc-UH-bpKso=/arcane.jpg" alt="Arcane poster" style="max-width: 100%;width: 70%;height: auto" title="such a poignant image" width="1080" height="1350"/>
<figcaption>A perfect counterpoint to the first season poster</figcaption>
</figure>
<br/>
]]></content>
<category term="work" label="work" />
<category term="personal" label="personal" />
<category term="notes" label="notes" />
</entry>
<entry>
<title>Knowledge Management</title>
<id>https://taoofmac.com/space/km</id>
<published>2006-02-25T19:55:57+00:00</published>
<updated>2024-11-17T16:12:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/km"/>
<content type="html"><![CDATA[
<p class="lead">(no, this is not yet a good reference for KM in management terms - having a strong <a href="/space/ai" rel="next" style="color: #0000cc;">AI</a> and UI design background, I stuck to the mechanics of the thing)</p>
<a class="anchor" id="anchor-resources" rel="anchor" href="/space/km#resources" style="color: #0000cc;"><h2 id="resources">Resources</h2></a><ul>
<li><a href="http://www.thebrain.com?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">The Brain</a></li>
<li><a href="/space/apps/groove" rel="next" style="color: #0000cc;">Groove</a> - sadly dead for a long time</li>
<li><a href="http://www.usercreations.com/spring/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Spring</a></li>
<li><a href="PhpWiki" rel="nofollow" style="color: #0000cc;">PhpWiki</a></li>
<li><a href="http://www.jspwiki.org/Wiki.jsp?page=TouchGraphWikiBrowser&utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">TouchGraph Wiki Browser</a></li>
</ul>
<a class="anchor" id="anchor-interesting-stuff" rel="anchor" href="/space/km#interesting-stuff" style="color: #0000cc;"><h2 id="interesting-stuff">Interesting Stuff</h2></a><ul>
<li><a href="https://github.com/docmost/docmost?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">docmost</a></li>
<li><a href="https://github.com/toeverything/affine?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">AFFINE</a></li>
<li><a href="http://haystack.lcs.mit.edu/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Haystack</a></li>
<li><a href="http://www.visualcomplexity.com/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Visual Complexity</a> - amazing visualizations</li>
<li><a href="https://github.com/archivy/archivy?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Archivy</a> - simple archiving tool that saves to Markdown format</li>
<li><a href="https://github.com/ArchiveBox/ArchiveBox?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">ArchiveBox</a> - full-blown web archiving tool</li>
</ul>
<br/>
]]></content>
<category term="management" label="management" />
<category term="knowledge" label="knowledge" />
<category term="wiki" label="wiki" />
</entry>
<entry>
<title>OBS Studio</title>
<id>https://taoofmac.com/space/apps/obs_studio</id>
<published>2020-07-18T20:21:00+00:00</published>
<updated>2024-11-17T15:35:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/apps/obs_studio"/>
<content type="html"><![CDATA[
<p class="lead"><a href="https://obsproject.com?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Open Broadcaster Software Studio</a> is a cross-platform, integrated solution for video recording and live streaming that can be plugged in to video conferencing solutions via a virtual camera device.</p>
<p/><table class="compact" style="background: transparent;margin: 0px;padding: 0px;border-collapse: collapse;font-size: 90%;">
<thead>
<tr style="border-top: 1px solid #aaa;">
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Category</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Date</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Link</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Notes</th>
</tr>
</thead>
<tbody style="border-top: 2px solid black;border-bottom: 2px solid black;">
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Audio</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2020</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://gitlab.com/gravydanger/obs-rnnoise/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">obs-rnnoise</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Windows plugin to use the Mozilla RNNoise audio filter</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="5" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Video</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2024</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/Glimesh/broadcast-box?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">broadcast-box</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a WebRTC broadcasting server</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2022</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/royshil/obs-backgroundremoval?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">obs-backgroundremoval</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>adds GPU-accelerated (but CPU-compatible) background removal</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2020</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/Palakis/obs-ndi?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">obs-ndi</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Network A/V iusing NewTek’s NDI technology</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/Xaymar/obs-streamfx?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">obs-StreamFX</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>adds new sources, filters and transitions</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/johnboiles/obs-mac-virtualcam?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">obs-mac-virtualcam</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Virtual camera plugin for macOS</p></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
<category term="video" label="video" />
<category term="production" label="production" />
<category term="ndi" label="ndi" />
<category term="streaming" label="streaming" />
<category term="webrtc" label="webrtc" />
</entry>
<entry>
<title>Gitea</title>
<id>https://taoofmac.com/space/apps/gitea</id>
<published>2022-02-10T12:00:00+00:00</published>
<updated>2024-11-17T14:46:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/apps/gitea"/>
<content type="html"><![CDATA[
<p class="lead"><a href="https://gitea.io/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Gitea</a> is a very efficient, <a href="/space/dev/golang" rel="next" style="color: #0000cc;">Go</a>-based <a href="/space/cli/git" rel="next" style="color: #0000cc;"><code>git</code></a> service that I have adopted as part of my <a href="/space/blog/2022/02/12/1930" rel="next" style="color: #0000cc;">homelab</a> setup.</p>
<a class="anchor" id="anchor-additions" rel="anchor" href="/space/apps/gitea#additions" style="color: #0000cc;"><h2 id="additions">Additions</h2></a><ul>
<li><a href="https://github.com/thomiceli/opengist?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">opengist</a> is a small git-backed service that you can use to have a self-hosted Gist-like service.</li>
<li><a href="https://github.com/42wim/caddy-gitea?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">caddy-gitea</a> is a Caddy module that can publish Gitea repositories in a <code>gh-pages</code>-like fashion.</li>
</ul>
<br/>
]]></content>
<category term="scm" label="scm" />
<category term="github" label="github" />
<category term="git" label="git" />
</entry>
<entry>
<title>The Debix Model A</title>
<id>https://taoofmac.com/space/blog/2024/11/16/1700</id>
<published>2024-11-16T17:00:00+00:00</published>
<updated>2024-11-16T17:00:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/blog/2024/11/16/1700"/>
<content type="html"><![CDATA[
<p class="lead">I’m still trying to work my way down the stack of single-board computers I have to review, and the Debix <a href="https://debix.io/hardware/model-a.html?utm_campaign=review&utm_source=taoofmac.com&utm_medium=web&utm_content=external_link" rel="external" style="color: #0000cc;">Model A</a> has been queued up for far too long–for a few interesting reasons, and a lot of mundane ones.</p>
<p>The mundane ones range from flu to the work rollercoaster that is my life, but the interesting ones include the OS it shipped with (Windows 10 IoT Enterprise) and the challenges associated with testing that consistently.</p>
<blockquote>
<p><strong>Disclaimer:</strong> <a href="https://debix.io?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Debix</a> supplied me with a <a href="https://debix.io/hardware/model-a.html?utm_campaign=review&utm_source=taoofmac.com&utm_medium=web&utm_content=external_link" rel="external" style="color: #0000cc;">Model A</a> free of charge, for which I thank them. And, as usual, this article follows my <a href="/space/site/review_policy" rel="next" style="color: #0000cc;">review policy</a>.</p>
</blockquote>
<p>But I’m getting ahead of myself. Let’s start with the hardware.</p>
<a class="anchor" id="anchor-hardware" rel="anchor" href="/space/blog/2024/11/16/1700#hardware" style="color: #0000cc;"><h2 id="hardware">Hardware</h2></a><figure>
<img src="https://taoofmac.com/media/blog/2024/11/16/1700/DubxhJAB6TAeXp47B6yyqt5LTYs=/debix.jpg" alt="The Debix Model A" title="quite pretty" width="2048" height="1284" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>The Debix Model A</figcaption>
</figure>
<p>The board is pretty a drop-in replacement for a <a href="/space/hw/raspberry_pi" rel="next" style="color: #0000cc;">Raspberry Pi</a> from a form factor perspective, with a few interesting changes–most notably the second set of pins (not really GPIOs, but LVDS and the primary Ethernet interface), a (thankfully) full-sized HDMI port and dual USB-C ports for power and USB 2.0 OTG:</p>
<figure class="full-width">
<img src="https://taoofmac.com/media/blog/2024/11/16/1700/lriaf6Q75rlPmoYmHpX1K2zA-Gk=/board.jpg" alt="The Debix Model A ports and connectors" title="pretty crowded" width="2440" height="800" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>Port layout</figcaption>
</figure>
<p>Then there’s the stuff that is harder to notice:</p>
<ul>
<li>A NXP i.MX 8M Plus 1.6GHz CPU (4xA53)</li>
<li>8GB of LPDDR4 RAM</li>
<li>2.4GHz & 5GHz Wi-Fi, Bluetooth 5.0</li>
<li>A tiny, easy to miss PCIe Gen 3 1-lane port</li>
<li>Headphone and Mic combo port</li>
<li>The usual round of UART, I2C, SPI, etc.</li>
</ul>
<p>The second set of pins has:</p>
<ul>
<li>1xLVDS, single & dual channel 8bit</li>
<li>1xMIPI CSI (4-lane)</li>
<li>1xMIPI DSI (4-lane)</li>
<li>Bare Ethernet (without a line driver)</li>
</ul>
<p>This is the first time I’ve tested an NXP chipset, and this one includes a 2.3 TOPS NPU (that I was unable to test given the usual challenges of non-mainstream SoCs) and a 1080p60 H.264/H.265 video encoder/decoder (which I was also unable able to test fully, although I suspect it was actually working in Windows since video playback was quite decent).</p>
<a class="anchor" id="anchor-software" rel="anchor" href="/space/blog/2024/11/16/1700#software" style="color: #0000cc;"><h2 id="software">Software</h2></a><p>The board has nominally complete OS support–besides the Windows 10 IoT image my board shipped with pre-installed, you can also download Android 11, Yocto, Ubuntu 22.04 and Debian 12 images, <em>some of which</em> (alas, not the Debian one) can self-install to the eMMC (which should be the norm).</p>
<p>Annoyingly, though, downloading images and flashing them was a mess. Some downloads are hosted on WeTransfer (which is <em>not</em> an improvement over the usual “public folder on Google Drive” setup from most manufacturers and caused me a lot of grief), and some of the eMMC images came bundled with a Windows executable to flash them to the device.</p>
<p>If, like me, you use almost exclusively a Mac, having to use a random Windows executable to flash things an additional hassle to deal with.</p>
<p>But, if like me, you deal with embedded systems a lot <em>and</em> have a <a href="/space/blog/2024/07/04/2200" rel="next" style="color: #0000cc;">small mini-PC</a> <em>dedicated</em> to running Windows (because of Rockchip tooling), you’d expect that random executable to work, right?</p>
<p>Well, I was unable to flash the board via USB with most images, and was resigned to booting the board off the SD card–until I tried the Ubuntu 22.04 image that self-flashed to eMMC.</p>
<p><em>That</em> was the key reason why it took me so long to get to this review: I had to try doing this a number of times, and even though Debix has a great deal of documentation (including, for a change, nice PDFs with all steps spelled out), I wait for a day when I could dedicate a few hours to plugging everything in, trying to flash things, etc. And then another, and another…</p>
<a class="anchor" id="anchor-windows-10-iot-enterprise" rel="anchor" href="/space/blog/2024/11/16/1700#windows-10-iot-enterprise" style="color: #0000cc;"><h3 id="windows-10-iot-enterprise">Windows 10 IoT Enterprise</h3></a><p>The board booted directly to the desktop, and after a little bit of setup, I was able to use Remote Desktop to do most of the testing, starting with checking system information:</p>
<figure>
<video controls="" autoplay="" loop="" muted="" playsinline="" style="width: 100%" poster="/media/blog/2024/11/16/1700/jdNy8Fkl8vGdZMmtCKfbmfIYVA0=/win10.jpg">
<source src="/media/blog/2024/11/16/1700/mb8Xmqnx1PqXWKlLQHb3mEBuPjc=/win10.mp4" type="video/mp4">
<img src="https://taoofmac.com/media/blog/2024/11/16/1700/jdNy8Fkl8vGdZMmtCKfbmfIYVA0=/win10.jpg" style="max-width: 100%;height: auto;width: 100%" alt="Your browser cannot play this video" width="1848" height="1080"/>
</source></video>
<figcaption>
The Debix Model A running Windows 10 IoT Enterprise
</figcaption>
</figure>
<p>Windows 10 seemed to have support for all the relevant hardware–except wireless and audio (although of course I was able to get RDP audio to work).</p>
<p>The RAM was reported as 6GB (which was odd, since the values for GPU shared memory were inconsistent), and that did have an impact–the machine was usable (I could use Edge to browse and download other stuff without issues), but not as snappy as I would have liked.</p>
<p>However, the one thing I was interested in was in testing legacy industrial software on it. I first tried a couple of small apps I knew had both ARM and Intel versions, and all the ARM executables I tried (not many, granted) worked without issues–but 64-bit Intel executables did not.</p>
<p>That included some of the OPC-UA software I had lying around, so I had to spend a bit of time trying to get older software to work.</p>
<p>And it did–I can’t show the OPC-UA stuff running (it was licensed for a client), but Firefox 32-bit ran without issues–if a bit slowly:</p>
<figure>
<video controls="" autoplay="" loop="" muted="" playsinline="" style="width: 100%" poster="/media/blog/2024/11/16/1700/jdNy8Fkl8vGdZMmtCKfbmfIYVA0=/win10.jpg">
<source src="/media/blog/2024/11/16/1700/DXvOQ6YY6Q2QaNZ0QAuOSnb2wXg=/emulation.mp4" type="video/mp4">
<img src="https://taoofmac.com/media/blog/2024/11/16/1700/e6dbeYrw4paDQzVmq2WlCFvCCv4=/emulation.jpg" style="max-width: 100%;height: auto;width: 100%" alt="Your browser cannot play this video" width="1848" height="1080"/>
</source></video>
<figcaption>
Running some test software, both ARM64 and Intel 32-bit--64-bit Intel MSIs refused to install
</figcaption>
</figure>
<p>However, I was unable to do any real performance testing in Windows, so I tried to move on to Debian 12.</p>
<a class="anchor" id="anchor-ubuntu-22-04" rel="anchor" href="/space/blog/2024/11/16/1700#ubuntu-22-04" style="color: #0000cc;"><h3 id="ubuntu-2204">Ubuntu 22.04</h3></a><p>After a <em>lot</em> of attempts, I was able to flash the board with the Ubuntu 22.04 image, and it booted directly to a GNOME desktop without any login screen. After a few updates and disabling graphical login, I set to work.</p>
<p>The good news is that it runs a relatively recent kernel:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>❯<span class="w"> </span>uname<span class="w"> </span>-a
Linux<span class="w"> </span>debix<span class="w"> </span><span class="m">6</span>.1.22<span class="w"> </span><span class="c1">#4 SMP PREEMPT Mon Mar 11 08:30:49 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux</span>
</code></pre></div>
<p>The not-so-good news is that there were no hardware sensors visible to <code>lm-sensors</code> (so I had to resort to reading the CPU temp directly). </p>
<p>Another thing I noticed was that <code>lshw</code> had trouble figuring out the number of CPU cores, which I suspect is a quirk of the NXP chipset:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>❯<span class="w"> </span>lshw
debix
<span class="w"> </span>description:<span class="w"> </span>Computer
<span class="w"> </span>product:<span class="w"> </span>NXP<span class="w"> </span>i.MX8MPlus<span class="w"> </span>EVK<span class="w"> </span>board
<span class="w"> </span>serial:<span class="w"> </span>181108008530a3b9
<span class="w"> </span>width:<span class="w"> </span><span class="m">64</span><span class="w"> </span>bits
<span class="w"> </span>capabilities:<span class="w"> </span>smp<span class="w"> </span>tagged_addr_disabled
<span class="w"> </span>*-core
<span class="w"> </span>description:<span class="w"> </span>Motherboard
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">0</span>
<span class="w"> </span>*-cpu:0
<span class="w"> </span>description:<span class="w"> </span>CPU
<span class="w"> </span>product:<span class="w"> </span>cpu
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">0</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>cpu@0
<span class="w"> </span>size:<span class="w"> </span>1600MHz
<span class="w"> </span>capacity:<span class="w"> </span>1600MHz
<span class="w"> </span>capabilities:<span class="w"> </span>fp<span class="w"> </span>asimd<span class="w"> </span>evtstrm<span class="w"> </span>aes<span class="w"> </span>pmull<span class="w"> </span>sha1<span class="w"> </span>sha2<span class="w"> </span>crc32<span class="w"> </span>cpuid<span class="w"> </span>cpufreq
<span class="w"> </span>*-cache
<span class="w"> </span>description:<span class="w"> </span>L1<span class="w"> </span>Cache
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">0</span>
<span class="w"> </span>size:<span class="w"> </span>32KiB
<span class="w"> </span>*-cpu:1
<span class="w"> </span>description:<span class="w"> </span>CPU
<span class="w"> </span>product:<span class="w"> </span>cpu
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">1</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>cpu@1
<span class="w"> </span>size:<span class="w"> </span>1600MHz
<span class="w"> </span>capacity:<span class="w"> </span>1600MHz
<span class="w"> </span>capabilities:<span class="w"> </span>fp<span class="w"> </span>asimd<span class="w"> </span>evtstrm<span class="w"> </span>aes<span class="w"> </span>pmull<span class="w"> </span>sha1<span class="w"> </span>sha2<span class="w"> </span>crc32<span class="w"> </span>cpuid<span class="w"> </span>cpufreq
<span class="w"> </span>*-cache
<span class="w"> </span>description:<span class="w"> </span>L1<span class="w"> </span>Cache
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">0</span>
<span class="w"> </span>size:<span class="w"> </span>32KiB
<span class="w"> </span>*-cpu:2
<span class="w"> </span>description:<span class="w"> </span>CPU
<span class="w"> </span>product:<span class="w"> </span>cpu
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">2</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>cpu@2
<span class="w"> </span>size:<span class="w"> </span>1600MHz
<span class="w"> </span>capacity:<span class="w"> </span>1600MHz
<span class="w"> </span>capabilities:<span class="w"> </span>fp<span class="w"> </span>asimd<span class="w"> </span>evtstrm<span class="w"> </span>aes<span class="w"> </span>pmull<span class="w"> </span>sha1<span class="w"> </span>sha2<span class="w"> </span>crc32<span class="w"> </span>cpuid<span class="w"> </span>cpufreq
<span class="w"> </span>*-cache
<span class="w"> </span>description:<span class="w"> </span>L1<span class="w"> </span>Cache
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">0</span>
<span class="w"> </span>size:<span class="w"> </span>32KiB
<span class="w"> </span>*-cpu:3
<span class="w"> </span>description:<span class="w"> </span>CPU
<span class="w"> </span>product:<span class="w"> </span>cpu
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">3</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>cpu@3
<span class="w"> </span>size:<span class="w"> </span>1600MHz
<span class="w"> </span>capacity:<span class="w"> </span>1600MHz
<span class="w"> </span>capabilities:<span class="w"> </span>fp<span class="w"> </span>asimd<span class="w"> </span>evtstrm<span class="w"> </span>aes<span class="w"> </span>pmull<span class="w"> </span>sha1<span class="w"> </span>sha2<span class="w"> </span>crc32<span class="w"> </span>cpuid<span class="w"> </span>cpufreq
<span class="w"> </span>*-cache
<span class="w"> </span>description:<span class="w"> </span>L1<span class="w"> </span>Cache
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">0</span>
<span class="w"> </span>size:<span class="w"> </span>32KiB
<span class="w"> </span>*-cpu:4<span class="w"> </span>DISABLED
<span class="w"> </span>description:<span class="w"> </span>CPU
<span class="w"> </span>product:<span class="w"> </span>idle-states
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">4</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>cpu@4
<span class="w"> </span>*-cpu:5<span class="w"> </span>DISABLED
<span class="w"> </span>description:<span class="w"> </span>CPU
<span class="w"> </span>product:<span class="w"> </span>l2-cache0
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">5</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>cpu@5
<span class="w"> </span>*-memory
<span class="w"> </span>description:<span class="w"> </span>System<span class="w"> </span>memory
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">6</span>
<span class="w"> </span>size:<span class="w"> </span>7889MiB
<span class="w"> </span>*-usbhost:0
<span class="w"> </span>product:<span class="w"> </span>xHCI<span class="w"> </span>Host<span class="w"> </span>Controller
<span class="w"> </span>vendor:<span class="w"> </span>Linux<span class="w"> </span><span class="m">6</span>.1.22<span class="w"> </span>xhci-hcd
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">1</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>usb@1
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>usb1
<span class="w"> </span>version:<span class="w"> </span><span class="m">6</span>.01
<span class="w"> </span>capabilities:<span class="w"> </span>usb-2.00
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">driver</span><span class="o">=</span>hub<span class="w"> </span><span class="nv">slots</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">speed</span><span class="o">=</span>480Mbit/s
<span class="w"> </span>*-usbhost:1
<span class="w"> </span>product:<span class="w"> </span>xHCI<span class="w"> </span>Host<span class="w"> </span>Controller
<span class="w"> </span>vendor:<span class="w"> </span>Linux<span class="w"> </span><span class="m">6</span>.1.22<span class="w"> </span>xhci-hcd
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">2</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>usb@2
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>usb2
<span class="w"> </span>version:<span class="w"> </span><span class="m">6</span>.01
<span class="w"> </span>capabilities:<span class="w"> </span>usb-3.00
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">driver</span><span class="o">=</span>hub<span class="w"> </span><span class="nv">slots</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">speed</span><span class="o">=</span>5000Mbit/s
<span class="w"> </span>*-usbhost:2
<span class="w"> </span>product:<span class="w"> </span>xHCI<span class="w"> </span>Host<span class="w"> </span>Controller
<span class="w"> </span>vendor:<span class="w"> </span>Linux<span class="w"> </span><span class="m">6</span>.1.22<span class="w"> </span>xhci-hcd
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">3</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>usb@3
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>usb3
<span class="w"> </span>version:<span class="w"> </span><span class="m">6</span>.01
<span class="w"> </span>capabilities:<span class="w"> </span>usb-2.00
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">driver</span><span class="o">=</span>hub<span class="w"> </span><span class="nv">slots</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">speed</span><span class="o">=</span>480Mbit/s
<span class="w"> </span>*-usb
<span class="w"> </span>description:<span class="w"> </span>USB<span class="w"> </span>hub
<span class="w"> </span>product:<span class="w"> </span><span class="m">4</span>-Port<span class="w"> </span>USB<span class="w"> </span><span class="m">2</span>.1<span class="w"> </span>Hub
<span class="w"> </span>vendor:<span class="w"> </span>Generic
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">1</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>usb@3:1
<span class="w"> </span>version:<span class="w"> </span><span class="m">1</span>.01
<span class="w"> </span>capabilities:<span class="w"> </span>usb-2.10
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">driver</span><span class="o">=</span>hub<span class="w"> </span><span class="nv">slots</span><span class="o">=</span><span class="m">4</span><span class="w"> </span><span class="nv">speed</span><span class="o">=</span>480Mbit/s
<span class="w"> </span>*-usbhost:3
<span class="w"> </span>product:<span class="w"> </span>xHCI<span class="w"> </span>Host<span class="w"> </span>Controller
<span class="w"> </span>vendor:<span class="w"> </span>Linux<span class="w"> </span><span class="m">6</span>.1.22<span class="w"> </span>xhci-hcd
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">4</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>usb@4
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>usb4
<span class="w"> </span>version:<span class="w"> </span><span class="m">6</span>.01
<span class="w"> </span>capabilities:<span class="w"> </span>usb-3.00
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">driver</span><span class="o">=</span>hub<span class="w"> </span><span class="nv">slots</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">speed</span><span class="o">=</span>5000Mbit/s
<span class="w"> </span>*-usb
<span class="w"> </span>description:<span class="w"> </span>USB<span class="w"> </span>hub
<span class="w"> </span>product:<span class="w"> </span><span class="m">4</span>-Port<span class="w"> </span>USB<span class="w"> </span><span class="m">3</span>.1<span class="w"> </span>Hub
<span class="w"> </span>vendor:<span class="w"> </span>Generic
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">1</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>usb@4:1
<span class="w"> </span>version:<span class="w"> </span><span class="m">1</span>.01
<span class="w"> </span>capabilities:<span class="w"> </span>usb-3.10
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">driver</span><span class="o">=</span>hub<span class="w"> </span><span class="nv">slots</span><span class="o">=</span><span class="m">4</span><span class="w"> </span><span class="nv">speed</span><span class="o">=</span>5000Mbit/s
<span class="w"> </span>*-mmc0
<span class="w"> </span>description:<span class="w"> </span>MMC<span class="w"> </span>Host
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">5</span>
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>mmc0
<span class="w"> </span>*-device
<span class="w"> </span>description:<span class="w"> </span>SDIO<span class="w"> </span>Device
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">1</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>mmc@0:0001
<span class="w"> </span>serial:<span class="w"> </span><span class="m">0</span>
<span class="w"> </span>capabilities:<span class="w"> </span>sdio
<span class="w"> </span>*-interface:0
<span class="w"> </span>description:<span class="w"> </span>Wireless<span class="w"> </span>interface
<span class="w"> </span>product:<span class="w"> </span><span class="m">43455</span>
<span class="w"> </span>vendor:<span class="w"> </span>Broadcom
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">1</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>mmc@0:0001:1
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>mmc0:0001:1
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>wlan0
<span class="w"> </span>serial:<span class="w"> </span>ac:6a:a3:31:38:d0
<span class="w"> </span>capabilities:<span class="w"> </span>ethernet<span class="w"> </span>physical<span class="w"> </span>wireless
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">broadcast</span><span class="o">=</span>yes<span class="w"> </span><span class="nv">driver</span><span class="o">=</span>brcmfmac<span class="w"> </span><span class="nv">driverversion</span><span class="o">=</span><span class="m">7</span>.45.173<span class="w"> </span><span class="nv">firmware</span><span class="o">=</span><span class="m">01</span>-d2799ea2<span class="w"> </span><span class="nv">multicast</span><span class="o">=</span>yes<span class="w"> </span><span class="nv">wireless</span><span class="o">=</span>IEEE<span class="w"> </span><span class="m">802</span>.11
<span class="w"> </span>*-interface:1
<span class="w"> </span>product:<span class="w"> </span><span class="m">43455</span>
<span class="w"> </span>vendor:<span class="w"> </span>Broadcom
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">2</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>mmc@0:0001:2
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>mmc0:0001:2
<span class="w"> </span>*-bt
<span class="w"> </span>description:<span class="w"> </span>BlueTooth<span class="w"> </span>interface
<span class="w"> </span>product:<span class="w"> </span><span class="m">43455</span>
<span class="w"> </span>vendor:<span class="w"> </span>Broadcom
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">3</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>mmc@0:0001:3
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>mmc0:0001:3
<span class="w"> </span>capabilities:<span class="w"> </span>wireless<span class="w"> </span>bluetooth
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">wireless</span><span class="o">=</span>BlueTooth
<span class="w"> </span>*-mmc1
<span class="w"> </span>description:<span class="w"> </span>MMC<span class="w"> </span>Host
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">6</span>
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>mmc1
<span class="w"> </span>*-mmc2
<span class="w"> </span>description:<span class="w"> </span>MMC<span class="w"> </span>Host
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">7</span>
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>mmc2
<span class="w"> </span>*-device
<span class="w"> </span>description:<span class="w"> </span>SD/MMC<span class="w"> </span>Device
<span class="w"> </span>product:<span class="w"> </span>CJTD4R
<span class="w"> </span>vendor:<span class="w"> </span>Unknown<span class="w"> </span><span class="o">(</span><span class="m">21</span><span class="o">)</span>
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">1</span>
<span class="w"> </span>bus<span class="w"> </span>info:<span class="w"> </span>mmc@2:0001
<span class="w"> </span>date:<span class="w"> </span><span class="m">04</span>/2022
<span class="w"> </span>serial:<span class="w"> </span><span class="m">1568669415</span>
<span class="w"> </span>capabilities:<span class="w"> </span>mmc
<span class="w"> </span>*-interface:0
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">1</span>
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/mmcblk2rpmb
<span class="w"> </span>*-interface:1
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">2</span>
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/mmcblk2
<span class="w"> </span>size:<span class="w"> </span><span class="m">62537072640</span>
<span class="w"> </span>capabilities:<span class="w"> </span>partitioned<span class="w"> </span>partitioned:dos
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">logicalsectorsize</span><span class="o">=</span><span class="m">512</span><span class="w"> </span><span class="nv">sectorsize</span><span class="o">=</span><span class="m">512</span><span class="w"> </span><span class="nv">signature</span><span class="o">=</span>fda602fe
<span class="w"> </span>*-volume:0
<span class="w"> </span>description:<span class="w"> </span>Windows<span class="w"> </span>FAT<span class="w"> </span>volume
<span class="w"> </span>vendor:<span class="w"> </span>mkfs.fat
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">1</span>
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/mmcblk2p1
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/boot
<span class="w"> </span>version:<span class="w"> </span>FAT16
<span class="w"> </span>serial:<span class="w"> </span><span class="m">2078</span>-019e
<span class="w"> </span>size:<span class="w"> </span>479MiB
<span class="w"> </span>capacity:<span class="w"> </span>490MiB
<span class="w"> </span>capabilities:<span class="w"> </span>primary<span class="w"> </span>fat<span class="w"> </span>initialized
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">FATs</span><span class="o">=</span><span class="m">2</span><span class="w"> </span><span class="nv">filesystem</span><span class="o">=</span>fat<span class="w"> </span>mount.fstype<span class="o">=</span>vfat<span class="w"> </span>mount.options<span class="o">=</span>rw,relatime,fmask<span class="o">=</span><span class="m">0022</span>,dmask<span class="o">=</span><span class="m">0022</span>,codepage<span class="o">=</span><span class="m">437</span>,iocharset<span class="o">=</span>iso8859-1,shortname<span class="o">=</span>mixed,errors<span class="o">=</span>remount-ro<span class="w"> </span><span class="nv">state</span><span class="o">=</span>mounted
<span class="w"> </span>*-volume:1
<span class="w"> </span>description:<span class="w"> </span>EXT4<span class="w"> </span>volume
<span class="w"> </span>vendor:<span class="w"> </span>Linux
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">2</span>
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/mmcblk2p2
<span class="w"> </span>version:<span class="w"> </span><span class="m">1</span>.0
<span class="w"> </span>serial:<span class="w"> </span>0dda7379-98cf-4613-b507-5f371e182d9c
<span class="w"> </span>size:<span class="w"> </span>57GiB
<span class="w"> </span>capacity:<span class="w"> </span>57GiB
<span class="w"> </span>capabilities:<span class="w"> </span>primary<span class="w"> </span>journaled<span class="w"> </span>extended_attributes<span class="w"> </span>large_files<span class="w"> </span>huge_files<span class="w"> </span>dir_nlink<span class="w"> </span>recover<span class="w"> </span>64bit<span class="w"> </span>extents<span class="w"> </span>ext4<span class="w"> </span>ext2<span class="w"> </span>initialized
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">created</span><span class="o">=</span><span class="m">2022</span>-04-28<span class="w"> </span><span class="m">17</span>:42:32<span class="w"> </span><span class="nv">filesystem</span><span class="o">=</span>ext4<span class="w"> </span><span class="nv">lastmountpoint</span><span class="o">=</span>/<span class="w"> </span><span class="nv">modified</span><span class="o">=</span><span class="m">2024</span>-11-14<span class="w"> </span><span class="m">18</span>:35:46<span class="w"> </span><span class="nv">mounted</span><span class="o">=</span><span class="m">2024</span>-11-14<span class="w"> </span><span class="m">18</span>:35:46<span class="w"> </span><span class="nv">state</span><span class="o">=</span>clean
<span class="w"> </span>*-sound:0
<span class="w"> </span>description:<span class="w"> </span>audiohdmi
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">8</span>
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>card0
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/snd/controlC0
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/snd/pcmC0D0p
<span class="w"> </span>*-sound:1
<span class="w"> </span>description:<span class="w"> </span>es8316audio
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span><span class="m">9</span>
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>card1
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/snd/controlC1
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/snd/pcmC1D0c
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/snd/pcmC1D0p
<span class="w"> </span>*-input:0
<span class="w"> </span>product:<span class="w"> </span><span class="m">30370000</span>.snvs:snvs-powerkey
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span>a
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>input0
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/input/event0
<span class="w"> </span>capabilities:<span class="w"> </span>platform
<span class="w"> </span>*-input:1
<span class="w"> </span>product:<span class="w"> </span>audio-hdmi<span class="w"> </span>HDMI<span class="w"> </span>Jack
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span>b
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>input1
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>/dev/input/event1
<span class="w"> </span>*-network:0
<span class="w"> </span>description:<span class="w"> </span>Ethernet<span class="w"> </span>interface
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span>c
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>ens34
<span class="w"> </span>serial:<span class="w"> </span><span class="m">10</span>:07:23:6e:00:20
<span class="w"> </span>capacity:<span class="w"> </span>1Gbit/s
<span class="w"> </span>capabilities:<span class="w"> </span>ethernet<span class="w"> </span>physical<span class="w"> </span>tp<span class="w"> </span>mii<span class="w"> </span>10bt<span class="w"> </span>10bt-fd<span class="w"> </span>100bt<span class="w"> </span>100bt-fd<span class="w"> </span>1000bt-fd<span class="w"> </span>autonegotiation
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">autonegotiation</span><span class="o">=</span>on<span class="w"> </span><span class="nv">broadcast</span><span class="o">=</span>yes<span class="w"> </span><span class="nv">driver</span><span class="o">=</span>fec<span class="w"> </span><span class="nv">driverversion</span><span class="o">=</span><span class="m">6</span>.1.22<span class="w"> </span><span class="nv">link</span><span class="o">=</span>no<span class="w"> </span><span class="nv">multicast</span><span class="o">=</span>yes<span class="w"> </span><span class="nv">port</span><span class="o">=</span>twisted<span class="w"> </span>pair
<span class="w"> </span>*-network:1
<span class="w"> </span>description:<span class="w"> </span>Ethernet<span class="w"> </span>interface
<span class="w"> </span>physical<span class="w"> </span>id:<span class="w"> </span>d
<span class="w"> </span>logical<span class="w"> </span>name:<span class="w"> </span>ens33
<span class="w"> </span>serial:<span class="w"> </span><span class="m">10</span>:07:23:6e:00:1d
<span class="w"> </span>size:<span class="w"> </span>1Gbit/s
<span class="w"> </span>capacity:<span class="w"> </span>1Gbit/s
<span class="w"> </span>capabilities:<span class="w"> </span>ethernet<span class="w"> </span>physical<span class="w"> </span>tp<span class="w"> </span>mii<span class="w"> </span>10bt-fd<span class="w"> </span>100bt-fd<span class="w"> </span>1000bt-fd<span class="w"> </span>autonegotiation
<span class="w"> </span>configuration:<span class="w"> </span><span class="nv">autonegotiation</span><span class="o">=</span>on<span class="w"> </span><span class="nv">broadcast</span><span class="o">=</span>yes<span class="w"> </span><span class="nv">driver</span><span class="o">=</span>st_gmac<span class="w"> </span><span class="nv">driverversion</span><span class="o">=</span><span class="m">6</span>.1.22<span class="w"> </span><span class="nv">duplex</span><span class="o">=</span>full<span class="w"> </span><span class="nv">ip</span><span class="o">=</span><span class="m">192</span>.168.1.202<span class="w"> </span><span class="nv">link</span><span class="o">=</span>yes<span class="w"> </span><span class="nv">multicast</span><span class="o">=</span>yes<span class="w"> </span><span class="nv">port</span><span class="o">=</span>twisted<span class="w"> </span>pair<span class="w"> </span><span class="nv">speed</span><span class="o">=</span>1Gbit/s
</code></pre></div>
<p>This prompted me to have a look at the device tree, and I found that Debix had added support for a number of devices, including (apparently) the Raspberry Pi touchscreen:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>❯<span class="w"> </span>ls<span class="w"> </span>-1<span class="w"> </span>/boot/
Image
boot_logo.bin
boot_logo.sh
imx8mp-debix-4g-board.dtb
imx8mp-debix-core-HC050IG40029-D58V.C.dtb
imx8mp-debix-core-HC080IY28026-D60V.C.dtb
imx8mp-debix-core-HC101IK25050-D59V.C.dtb
imx8mp-debix-core-JW050R0320I01.dtb
imx8mp-debix-core-JW070R0520B02.dtb
imx8mp-debix-core-JW080R1120B02.dtb
imx8mp-debix-core-JW101HD-X00.dtb
imx8mp-debix-core-ar1335.dtb
imx8mp-debix-core-board.dtb
imx8mp-debix-core-gc2145.dtb
imx8mp-debix-core-ov5640.dtb
imx8mp-debix-io-HC050IG40029-D58V.C.dtb
imx8mp-debix-io-HC080IY28026-D60V.C.dtb
imx8mp-debix-io-HC101IK25050-D59V.C.dtb
imx8mp-debix-io-JW050R0320I01.dtb
imx8mp-debix-io-JW070R0520B02.dtb
imx8mp-debix-io-JW080R1120B02.dtb
imx8mp-debix-io-JW101HD-X00.dtb
imx8mp-debix-io-board.dtb
imx8mp-debix-io-imx219.dtb
imx8mp-debix-io-raspberrypi-touchscreen.dtb
imx8mp-debix-lora-HC050IG40029-D58V.C.dtb
imx8mp-debix-lora-HC080IY28026-D60V.C.dtb
imx8mp-debix-lora-HC101IK25050-D59V.C.dtb
imx8mp-debix-lora-JW050R0320I01.dtb
imx8mp-debix-lora-JW070R0520B02.dtb
imx8mp-debix-lora-JW080R1120B02.dtb
imx8mp-debix-lora-JW101HD-X00.dtb
imx8mp-debix-lora-board.dtb
imx8mp-evk.dtb
</code></pre></div>
<p>This is a nice touch, and likely to speed up integration into vertical solutions.</p>
<a class="anchor" id="anchor-power" rel="anchor" href="/space/blog/2024/11/16/1700#power" style="color: #0000cc;"><h2 id="power">Power</h2></a><p>The board can be powered via USB-C or PoE (via an additional module), and I used a 5V/3A power supply plugged into a Zigbee power socket, which gave me the following measurements:</p>
<ul>
<li>4W on Windows, <em>idle</em>, peaking up to 5W under load</li>
<li>2.7W idle on Ubuntu (with or without a graphical session)</li>
<li>5W under load on Ubuntu</li>
</ul>
<p>This sort of confirmed why the board felt very hot under Windows–it was drawing a lot more power, which is a common theme in Windows on ARM devices.</p>
<a class="anchor" id="anchor-temperature" rel="anchor" href="/space/blog/2024/11/16/1700#temperature" style="color: #0000cc;"><h2 id="temperature">Temperature</h2></a><p>Given that it came without any cooling solution, and even though Debix touts the fact that the board features industrial-grade components, I added one of my trademark copper blocks as soon as I could.</p>
<p>While running Windows 10, the board got <em>considerably</em> hot. Not uncomfortably so to the touch, but enough for me to worry about. Under Ubuntu, it idled at 49 C, but with a sustained 100% load across all cores for several minutes (courtesy of <code>ollama</code>) I couldn’t get it to go past 64C with the copper shim in place–nor did it ever throttle below 1.6GHz, which was impressively stable:</p>
<figure>
<img src="https://taoofmac.com/media/blog/2024/11/16/1700/d9YNF2DCGD0_z7Mk-sc9f3abvGI=/load.png" alt="running ollama" title="mildly toasty" width="2440" height="1318" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>One of my test runs</figcaption>
</figure>
<a class="anchor" id="anchor-performance" rel="anchor" href="/space/blog/2024/11/16/1700#performance" style="color: #0000cc;"><h2 id="performance">Performance</h2></a><p>Of course, this stability comes at a price: It was slightly slower than a Raspberry Pi 4 at running ollama, (3.5 tokens/s vs 3.77), but <code>sbc-bench</code> gave me some interesting results when I compared it to similar boards:</p>
<table style="background: transparent;margin: 0px;padding: 0px;border-collapse: collapse;font-size: 90%;">
<thead>
<tr style="border-top: 1px solid #aaa;">
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Device / details</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: center">Clockspeed</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: center">Kernel</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: center">Distro</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: right">7-zip multi</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: right">7-zip single</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: right">AES</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: right">memcpy</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: right">memset</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: right">kH/s</th>
</tr>
</thead>
<tbody style="border-top: 2px solid black;border-bottom: 2px solid black;">
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><strong>NXP i.MX8MPlus EVK board</strong></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">1600 MHz</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">6.1</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">Ubuntu 22.04.5 LTS (jammy) arm64</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">4400</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1198</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">746700</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">2610</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">12340</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">-</td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Rockchip RK3566 EVB2 LP4X V10 Board</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">1800 MHz (throttled)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">5.10</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">Raspbian (bullseye)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">3080</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1294</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">827780</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">2930</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">7910</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">3.98</td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Rockchip RK3566 EVB2 LP4X V10 Board</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">~1340 MHz</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">5.10</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">Debian 11 bullseye</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">3390</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">948</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">620820</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">2060</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">4220</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">-</td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Radxa Zero</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">1800 MHz</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">6.6</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">Armbian 24.5.5 bookworm</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">4530</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1337</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">834820</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1580</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">5620</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">6.65</td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Raspberry Pi Zero 2 (RP3A0)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">1200 MHz</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">5.10</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">Raspberry Pi OS Buster</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">3640</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1007</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">36300</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1320</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1790</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">-</td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Raspberry Pi 4B</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">1800 MHz</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">5.15</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: center">Armbian <strong>Jammy arm64</strong></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">5640</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1752</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">36260</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">2580</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">3110</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">-</td>
</tr>
</tbody>
</table>
<p><br/></p>
<p>I found the <code>memset</code> value particularly interesting, as it was the highest of all comparable boards I tested, and the AES performance was also quite good–for other tests like 7-zip multi/single performance, AES, and memcpy, the <a href="https://debix.io/hardware/model-a.html?utm_campaign=review&utm_source=taoofmac.com&utm_medium=web&utm_content=external_link" rel="external" style="color: #0000cc;">Model A</a> is still quite competitive, and I think that a 1800MHz board would nudge it a hair beyond the Pi 4B.</p>
<p>But, as usual, benchmarks are only part of the story, and my gut feeling is that the performance of this board is more than enough for most applications, even clocked at 1.6GHz–and the overall stability under load is a big plus for industrial applications.</p>
<a class="anchor" id="anchor-conclusion" rel="anchor" href="/space/blog/2024/11/16/1700#conclusion" style="color: #0000cc;"><h2 id="conclusion">Conclusion</h2></a><p>In summary, the <a href="https://debix.io/hardware/model-a.html?utm_campaign=review&utm_source=taoofmac.com&utm_medium=web&utm_content=external_link" rel="external" style="color: #0000cc;">Debix Model A</a> is a capable and versatile <a href="/space/hw/raspberry_pi" rel="next" style="color: #0000cc;">Raspberry Pi</a> alternative, and so far the only SBC I tested that came with Windows 10 IoT Enterprise pre-installed–and thus, thanks to the x86 emulation, an interesting choice for industrial applications that require Windows compatibility.</p>
<p>As to software, I am a bit sad I couldn’t get neither the Windows flashing tool nor Debian 12 to work–I have no idea why the self-flashing process the Ubuntu image uses isn’t available for all images, but on the upside the documentation is quite detailed and comprehensive.</p>
<p>That documentation is a big plus, and the board itself is well-built, with a lot of interesting features that make it a good choice for a variety of projects–from industrial to hobbyist–and the power consumption is OK, although I would ship a cooling solution with boards pre-loaded with Windows.</p>
<br/>
]]></content>
<category term="debix" label="debix" />
<category term="hardware" label="hardware" />
<category term="review" label="review" />
<category term="nxp" label="nxp" />
<category term="windows" label="windows" />
<category term="iot" label="iot" />
<category term="ubuntu" label="ubuntu" />
<category term="sbc" label="sbc" />
</entry>
<entry>
<title>OP-XY</title>
<id>https://taoofmac.com/space/links/2024/11/15/1320</id>
<published>2024-11-15T13:20:00+00:00</published>
<updated>2024-11-15T13:20:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/links/2024/11/15/1320"/>
<content type="html"><![CDATA[
<p><a href="https://teenage.engineering/store/op-xy?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" title="external link to https://teenage.engineering/store/op-xy" alt="screenshot of https://teenage.engineering/store/op-xy" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2024/11/15/1320/640,480/ynBJrZkLlnAvy4bXL7aUJNUHtbo=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">Nope. I still own <a href="/space/blog/2021/04/17/1610" rel="next" style="color: #0000cc;">the original OP-1</a> and quite enjoy it, but this is quite a few Euro notches above the <a href="/space/links/2022/05/12/1411" rel="next" style="color: #0000cc;">Field version</a> and I think I’d rather build my music gadgets from here on out.</p>
<p>Still, it’s one heck of a fashion statement. Can’t wait to see it on <a href="https://www.youtube.com/c/AudioPilz/videos?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Bad Gear</a>.</p>
<br/>
]]></content>
<category term="music" label="music" />
<category term="synths" label="synths" />
<category term="teenage" label="teenage" />
<category term="engineering" label="engineering" />
<category term="madness" label="madness" />
</entry>
<entry>
<title>Notes for November 4-10</title>
<id>https://taoofmac.com/space/notes/2024/11/10/1700</id>
<published>2024-11-10T17:00:00+00:00</published>
<updated>2024-11-10T18:32:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/notes/2024/11/10/1700"/>
<content type="html"><![CDATA[
<p class="lead">Yeah, I skipped a few weeks’ worth of notes, but the gist of things is that I moved <a href="/space/blog/2024/11/01/1920" rel="next" style="color: #0000cc;">to a new role</a>, had a grueling first week (wasn’t able to leave the house for breaks), slept through most of Saturday and am still trying to figure out where all my free time went.</p>
<p>The high point of the week is that I got a <a href="https://www.terra-master.com/global/products/homesoho-nas/f4-424-max.html?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">TerraMaster F4-424 MAX</a> NAS in the post, courtesy of Wendell Wilson from <a href="https://level1techs.com?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Level1Techs</a>–that was (mostly) unexpected, very touching (I appreciate it tremendously), and the starting point for a great project to tackle over the next few weeks (maybe months).</p>
<p>But, overall, it is funny because a few months ago TerraMaster point blank refused to collaborate with me unless I published their press releases (which would make absolutely no sense). And it is also a bit tragic because <a href="https://www.level1techs.com/node/3034?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">the hardware is <em>excellent</em></a> and they are shooting themselves in the foot with that ridiculous requirement.</p>
<p>After dropping in a couple of SSDs for a redundant OS disk, I am now in the process of scrounging together the cash to upgrade the RAM to <em>at least</em> 64GB and get enough NAS HDDs to rotate my existing stock into it, but the fact that the thing is running Ubuntu 22.04 on a 10-core 12th Gen i5-1235U <em>and</em> has dual 10GbE ports makes it an <em>amazing</em> homelab platform.</p>
<p>I can’t wait to set it up properly and install <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a>, since I want to shut down <a href="/space/blog/2016/12/17/1840" rel="next" style="color: #0000cc;"><code>rogueone</code></a>, re-purpose the ancient i7 in it and further consolidate my cluster, which thanks to the <a href="/space/notes/2024/11/09/1940" rel="next" style="color: #0000cc;">CM3588</a> now hosting my ARM64 workloads is down to five nodes instead of seven.</p>
<p>But first, I’m going to take another SBC off the shelf and see if I can do a bit more testing before Monday rolls along.</p>
<br/>
]]></content>
<category term="terramaster" label="terramaster" />
<category term="level1techs" label="level1techs" />
<category term="notes" label="notes" />
<category term="homelab" label="homelab" />
<category term="nas" label="nas" />
<category term="hardware" label="hardware" />
</entry>
<entry>
<title>Proxmox on the FriendlyELEC CM3588 NAS Kit</title>
<id>https://taoofmac.com/space/notes/2024/11/09/1940</id>
<published>2024-11-09T19:40:00+00:00</published>
<updated>2024-11-09T19:40:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/notes/2024/11/09/1940"/>
<content type="html"><![CDATA[
<p class="lead">After my review of the <a href="/space/blog/2024/10/26/1900" rel="next" style="color: #0000cc;">CM3588</a> running <a href="https://www.openmediavault.org?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OpenMediaVault</a>, I spent a little while trying to get it to run <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> with ZFS enabled.</p>
<p>There still isn’t any official version of <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> for ARM64, so I stuck to <a href="https://github.com/jiangcuo/Proxmox-Port?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Proxmox-Port</a>, which has been working great for me on all the Rockchip devices I tested it on.</p>
<p>Getting ZFS to work proved a bit challenging, through.</p>
<p>I initially tried using the official CM3588 Debian 12 image, but I simply could not get <code>zfs-dkms</code> to work–the module errored out when loading, and I decided to cheat–I reinstalled the <a href="https://www.openmediavault.org?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OpenMediaVault</a> image, removed all its packages, reinstalled <a href="https://github.com/jiangcuo/Proxmox-Port?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Proxmox-Port</a> on top, and… Nothing. Same error messages.</p>
<p>I eventually realized that was because even though the kernel versions (running, source, module, etc.) were all the same, the magic number and build options for the running kernel weren’t. That was odd, since I got them to work with <a href="https://www.openmediavault.org?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OpenMediaVault</a> before…</p>
<p>So I went back through my notes and realized that I had to install <em>both</em> the headers and kernel image that ship with the FriendlyELEC image:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>❯<span class="w"> </span>ls<span class="w"> </span>-al<span class="w"> </span>/opt/archives
total<span class="w"> </span><span class="m">38728</span>
drwxr-xr-x<span class="w"> </span><span class="m">2</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">4096</span><span class="w"> </span>Aug<span class="w"> </span><span class="m">16</span><span class="w"> </span><span class="m">09</span>:36<span class="w"> </span>.
drwxr-xr-x<span class="w"> </span><span class="m">3</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">4096</span><span class="w"> </span>Aug<span class="w"> </span><span class="m">16</span><span class="w"> </span><span class="m">09</span>:36<span class="w"> </span>..
-rw-r--r--<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">9001344</span><span class="w"> </span>Aug<span class="w"> </span><span class="m">16</span><span class="w"> </span><span class="m">09</span>:36<span class="w"> </span>linux-headers-6.1.57_6.1.57-21_arm64.deb
-rw-r--r--<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">30645296</span><span class="w"> </span>Aug<span class="w"> </span><span class="m">16</span><span class="w"> </span><span class="m">09</span>:36<span class="w"> </span>linux-image-6.1.57_6.1.57-21_arm64.deb
</code></pre></div>
<p>I <em>think</em> these are also present on the vanilla Debian 12 image, but since I had already reinstalled the machine twice I wasn’t in the mood to do it again, and this fixed everything:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>❯<span class="w"> </span>dpkg<span class="w"> </span>-i<span class="w"> </span>/opt/archives/*
❯<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>--reinstall<span class="w"> </span>zfs-dkms<span class="w"> </span>zfsutils-linux
</code></pre></div>
<p>After a reboot, I was able to set up the pool via the <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> web UI (although I still had to do <code>zpool set autotrim=on local-zfs</code> to enable TRIM):</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>❯<span class="w"> </span>zpool<span class="w"> </span>status
<span class="w"> </span>pool:<span class="w"> </span>local-zfs
<span class="w"> </span>state:<span class="w"> </span>ONLINE
config:
<span class="w"> </span>NAME<span class="w"> </span>STATE<span class="w"> </span>READ<span class="w"> </span>WRITE<span class="w"> </span>CKSUM
<span class="w"> </span>local-zfs<span class="w"> </span>ONLINE<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span>
<span class="w"> </span>raidz1-0<span class="w"> </span>ONLINE<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span>
<span class="w"> </span>nvme-WD_Blue_SN580_1TB_242734802371<span class="w"> </span>ONLINE<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span>
<span class="w"> </span>nvme-WD_Blue_SN580_1TB_242734800584_1<span class="w"> </span>ONLINE<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span>
<span class="w"> </span>nvme-WD_Blue_SN580_1TB_242734801916_1<span class="w"> </span>ONLINE<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span>
<span class="w"> </span>nvme-WD_Blue_SN580_1TB_242734801947<span class="w"> </span>ONLINE<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">0</span>
errors:<span class="w"> </span>No<span class="w"> </span>known<span class="w"> </span>data<span class="w"> </span>errors
</code></pre></div>
<p>This has been working OK for a few days, and I’ve since migrated most of my ARM64 containers onto the <a href="/space/blog/2024/10/26/1900" rel="next" style="color: #0000cc;">CM3588</a>–the eMMC is reserved for <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a>, and everything else is running off ZFS.</p>
<a class="anchor" id="anchor-setting-up-cifs/smb" rel="anchor" href="/space/notes/2024/11/09/1940#setting-up-cifs/smb" style="color: #0000cc;"><h2 id="setting-up-cifssmb">Setting up CIFS/SMB</h2></a><p>But since my containers currently take up less than 300GB, I also wanted to keep using the machine as a NAS and share the spare volume capacity.</p>
<p>Since I wanted to have minimal overhead, I created an Ubuntu 24.01 LXC container, installed <code>samba</code> and had it mount the ZFS pool directly:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>❯<span class="w"> </span>zfs<span class="w"> </span>create<span class="w"> </span>local-zfs/folders
❯<span class="w"> </span>pct<span class="w"> </span><span class="nb">set</span><span class="w"> </span><span class="m">203</span><span class="w"> </span>-mp0<span class="w"> </span>/local-zfs/folders/shares,mp<span class="o">=</span>/mnt/shares
</code></pre></div>
<p>For testing, I whipped up a quick Mac-friendly test share inside the container:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code><span class="na">❯ cat /etc/samba/smb.conf</span>
<span class="k">[global]</span>
<span class="na">workgroup</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">WORKGROUP</span>
<span class="na">server string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">%h LXC (Ubuntu ARM64)</span>
<span class="na">log file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/var/log/samba/log.%m</span>
<span class="na">max log size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">1000</span>
<span class="na">logging</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">file</span>
<span class="na">panic action</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/usr/share/samba/panic-action %d</span>
<span class="na">server role</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">standalone server</span>
<span class="na">obey pam restrictions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
<span class="na">unix password sync</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
<span class="na">passwd program</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/usr/bin/passwd %u</span>
<span class="na">passwd chat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">*Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .</span>
<span class="na">pam password change</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
<span class="na">map to guest</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">bad user</span>
<span class="na">usershare allow guests</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
<span class="c1">; Mac settings</span>
<span class="na">mdns name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">mdns</span>
<span class="na">gfs objects</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">catia fruit streams_xattr</span>
<span class="na">vfs objects</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">catia fruit streams_xattr</span>
<span class="na">fruit</span><span class="o">:</span><span class="s">aapl = yes</span>
<span class="na">fruit</span><span class="o">:</span><span class="s">model = Xserve</span>
<span class="na">fruit</span><span class="o">:</span><span class="s">posix_rename = yes</span><span class="w"> </span>
<span class="na">fruit</span><span class="o">:</span><span class="s">veto_appledouble = no</span>
<span class="na">fruit</span><span class="o">:</span><span class="s">wipe_intentionally_left_blank_rfork = yes</span><span class="w"> </span>
<span class="na">fruit</span><span class="o">:</span><span class="s">delete_empty_adfiles = yes</span>
<span class="na">fruit</span><span class="o">:</span><span class="s">encoding = native</span>
<span class="na">fruit</span><span class="o">:</span><span class="s">metadata = stream</span>
<span class="na">fruit</span><span class="o">:</span><span class="s">zero_file_id = yes</span>
<span class="na">fruit</span><span class="o">:</span><span class="s">nfs_aces = no</span>
<span class="k">[scratch]</span>
<span class="na">public</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
<span class="na">writeable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
<span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/mnt/shares/scratch</span>
<span class="na">guest ok</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
<span class="na">force user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">nobody</span>
<span class="na">force group</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">nogroup</span>
<span class="na">create mask</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">0777</span>
<span class="na">directory mask</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">0777</span>
</code></pre></div>
<p>I also tried using <a href="https://github.com/45Drives/cockpit-file-sharing?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">the 45 Drives cockpit plugin</a>, but I had some trouble getting it to work on Debian, so I parked that idea for the moment.</p>
<p>Either way, using LXC and a sub-volume seems like a pattern to follow when I replicate this on an Intel machine–I see a lot of people doing PCI pass-through of their SATA controllers into a TrueNAS VM, but I honestly don’t see the point of the added complexity for a small homelab, and I can set CPU/RAM/storage quotas on this setup just as easily (if not more so) than I could with a VM.</p>
<br/>
]]></content>
<category term="zfs" label="zfs" />
<category term="cifs" label="cifs" />
<category term="arm" label="arm" />
<category term="nas" label="nas" />
<category term="proxmox" label="proxmox" />
<category term="samba" label="samba" />
<category term="cm3588" label="cm3588" />
</entry>
<entry>
<title>Trump's improbable comeback</title>
<id>https://taoofmac.com/space/links/2024/11/06/1830</id>
<published>2024-11-06T18:30:00+00:00</published>
<updated>2024-11-06T18:30:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/links/2024/11/06/1830"/>
<content type="html"><![CDATA[
<p><a href="https://thehill.com/homenews/campaign/4969061-trump-wins-presidential-election/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" title="external link to https://thehill.com/homenews/campaign/4969061-trump-wins-presidential-election/" alt="screenshot of https://thehill.com/homenews/campaign/4969061-trump-wins-presidential-election/" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2024/11/06/1830/640,480/SzT7r8MKnDjy6O6in17H1va7bk0=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">I had a lot on my mind today (my <a href="/space/blog/2024/11/01/1920" rel="next" style="color: #0000cc;">recent change</a> is taking a much bigger toll than anticipated), but this was, of course, inescapable, even for someone like me who abhors politics and never mentions it.</p>
<p>To my US readership: I didn’t get a vote. And I understand that the US is a deeply divided country, and that at least half of you actually thought using yours to bring this about was a good idea, somehow–in a way that I just can’t fathom.</p>
<p>The only thing I can say is that, from the outside, it was <em>agony</em> to witness his first presidency and how it impacted the world, and that it is fundamentally incomprehensible that you’ve allowed this to happen. Again.</p>
<p>I now fear the worst where it regards <a href="/space/links/2022/02/24/0821" rel="next" style="color: #0000cc;">Ukraine</a>, Taiwan, and the bubbling pot of madness that is North Korea, and see us all sliding towards a dystopian future where the US is no longer neither a beacon of democracy and freedom nor a reliable economic partner–and that will hurt <em>everyone</em>.</p>
<p>All the small town jobs, all the tech startups, all the farmers, all the people who just want to live their lives in peace, are now at the mercy of someone who has shown time and time again that he is not fit to lead a country, let alone the world, and who has in place a cadre of sycophants and enablers that actually have a plan to undermine the government apparatus from within.</p>
<p>And I am also very sad to read through the news and see that leaders in the technology industry are actually <em>celebrating</em> this.</p>
<p>But hey, stocks are up, right?</p>
<p>Too bad that will never help most of the people who voted for this.</p>
<br/>
]]></content>
<category term="trump" label="trump" />
<category term="election" label="election" />
<category term="democracy" label="democracy" />
<category term="comeback" label="comeback" />
<category term="usa" label="usa" />
<category term="politics" label="politics" />
</entry>
<entry>
<title>M5Stack LLM Module for Edge AI Applications</title>
<id>https://taoofmac.com/space/links/2024/11/05/0714</id>
<published>2024-11-05T07:13:36+00:00</published>
<updated>2024-11-05T07:13:36+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/links/2024/11/05/0714"/>
<content type="html"><![CDATA[
<p><a href="https://www.hackster.io/news/m5stack-adds-large-language-model-support-to-its-offerings-with-the-3-2-tops-llm-module-f0a4e061f0de?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" title="external link to https://www.hackster.io/news/m5stack-adds-large-language-model-support-to-its-offerings-with-the-3-2-tops-llm-module-f0a4e061f0de" alt="screenshot of https://www.hackster.io/news/m5stack-adds-large-language-model-support-to-its-offerings-with-the-3-2-tops-llm-module-f0a4e061f0de" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2024/11/05/0714/640,480/7IRMKG5pxXWmr6n1jDWhkGCZ4N4=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">I think this both vindicates my year-long interest in running LLMs on industrial “edge” hardware and signals that it’s time to step back and re-assess how to address that space.</p>
<p>3.2 TOPS isn’t exactly stellar performance when compared to what you can (nominally) get out of a RK35xx’s built-in NPU and way below the target for things like Copilot PCs, but the fact that we’re starting to get what is effectively commodity hardware at very low wattages changes the game a bit–AI is going to get cheaper and cheaper to deploy at the edge, and I don’t expect that trend to be limited to low-end hardware.</p>
<p>The stated compatibility with various small LLMs and the promise of future updates is commendable, but the real test (and hints at solution TCO) will be in short-term execution and software support, as always.</p>
<br/>
]]></content>
<category term="m5stack" label="m5stack" />
<category term="llms" label="llms" />
<category term="hardware" label="hardware" />
<category term="edge" label="edge" />
<category term="ai" label="ai" />
</entry>
<entry>
<title>Apple Acquires Pixelmator</title>
<id>https://taoofmac.com/space/links/2024/11/01/2238</id>
<published>2024-11-01T22:40:00+00:00</published>
<updated>2024-11-01T22:40:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/links/2024/11/01/2238"/>
<content type="html"><![CDATA[
<p><a href="https://www.pixelmator.com/blog/2024/11/01/a-new-home-for-pixelmator/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" title="external link to https://www.pixelmator.com/blog/2024/11/01/a-new-home-for-pixelmator/" alt="screenshot of https://www.pixelmator.com/blog/2024/11/01/a-new-home-for-pixelmator/" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2024/11/01/2238/640,480/qGeoH14u3uK5GTTJAf65PODrzQw=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">Well, this came completely out of left field.</p>
<p>As someone who relies on <a href="/space/apps/pixelmator" rel="next" style="color: #0000cc;">Pixelmator</a> daily since they shipped 1.0, I am happy for them, but sincerely quite afraid Apple will botch this–their track record with acquisitions is dismal (just look at how they gimped <a href="/space/apps/shortcuts" rel="next" style="color: #0000cc;">Shortcuts</a> even as they folded it into the OS, how Dark Sky essentially vanished, and what happened to the AI startups they acquired).</p>
<p>To be honest I would be surprised if it still exists a year from now, and even more if it keeps shipping new features.</p>
<br/>
]]></content>
<category term="graphics" label="graphics" />
<category term="apple" label="apple" />
<category term="editor" label="editor" />
<category term="acquisition" label="acquisition" />
<category term="pixelmator" label="pixelmator" />
</entry>
<entry>
<title>My Take On This Week’s Mac Updates</title>
<id>https://taoofmac.com/space/blog/2024/11/01/2030</id>
<published>2024-11-01T20:30:00+00:00</published>
<updated>2024-11-01T20:30:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/blog/2024/11/01/2030"/>
<content type="html"><![CDATA[
<p class="lead">Since I’m <a href="/space/blog/2024/11/01/1920" rel="next" style="color: #0000cc;">changing jobs</a> without even taking a proper break, I haven’t been able to take part in the blow by blow as Apple “phoned in” the Mac updates this week, but I still have feelings about them.</p>
<p>I must confess I have zero enthusiasm for the iMac update. But I did chuckle at <a href="https://www.theverge.com/2024/10/28/24281965/honestly-this-is-a-work-of-art?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Nilay Patel’s take on Apple’s latest work of art</a> in the unlabelled charts space, and think it is a very good example of how Apple’s marketing can be completely out of touch with reality:</p>
<figure>
<img src="https://taoofmac.com/media/blog/2024/11/01/2030/sOhmCI0HQbGd3Ww-JrKemn1_1Rg=/excel.jpg" title="a work of art, indeed" alt="Excel productivity with the M4" width="2400" height="1346" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>the unit is probably <tt>VLOOKUP()</tt>s per second</figcaption>
</figure>
<p>But re-focusing on the hardware, I found most of it <em>meh</em>. For starters, the iMac is not for me anymore (even if I did find the “desk cam” feature very neat), and the new Magic Mouse is still… <a href="/space/links/2024/10/29/0754" rel="next" style="color: #0000cc;">just badly designed</a>.</p>
<p>My years of using iMacs since the original, lovely G4 Luxo-like “lamp” and from then through the G5 and the 27” Intel i5 (which is gathering dust in a corner) have shown that the iMac is a flawed machine if you value long-term maintenance–and any sort of upgrade ever since the M-series machines took over.</p>
<p>The MacBooks are… nice, but mine is plenty good enough for quite a few more years, even if Apple Intelligence evolves apace (like I wrote <a href="/space/links/2024/10/31/0747" rel="next" style="color: #0000cc;">the other day</a>, it is very far from either useful or impressive).</p>
<figure>
<img src="https://taoofmac.com/media/blog/2024/11/01/2030/8N6Jgn9sFY9Z_2cBFql0CSj9EqQ=/mini.jpg" title="so cute" alt="the new, more compact mini" width="1024" height="222" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>Power button included, but not shown because it was designed by the folk who did the Magic Mouse...</figcaption>
</figure>
<p>The new mini, though, is <em>the</em> thing. The M4 Pro models almost nail the sweet spot a few notches below the Mac Studio (which will, of course, move the goalposts again when it comes out), and I am <em>very</em> tempted to get one once I can scrounge up enough money to spare, since my M2 Pro is starting to feel a bit “tight” in terms of CPU and storage.</p>
<p>However, the mini remains a hostage of the Apple tax on storage and RAM.</p>
<p>I know how much 1TB of decent SSD storage costs–in fact, <a href="/space/blog/2024/10/26/1900" rel="next" style="color: #0000cc;">I recently bought <em>four times that amount</em></a> for roughly €200, and it just <em>stinks</em> that Apple still charges through the nose to have a decent base amount of storage built in and gimps the entry-level at 512GB.</p>
<p>The real story, though, is the baseline amounts of RAM–starting at either 16Gb or 24GB (for the Pro), they simultaneously remove the stigma of the 8GB entry-level and make the available upgrades (48GB for €460, for instance) seem like a rip-off.</p>
<p>This was definitely a conscious decision to make the base models more attractive while ensuring they will fully support Apple Intelligence (which will likely require your machine to have local models permanently loaded in-RAM), but the SKU tiering is still a bit too rich for my taste.</p>
<p>And, of course, having to pay a premium for a 10GbE network interface (with mini-PCs and €100 SBCs shipping with 2.5GbE) just sours this particularly cute Apple.</p>
<p>But hey, at least the Mac mini got a real upgrade, unlike the <a href="/space/links/2024/10/15/1655" rel="next" style="color: #0000cc;">iPad mini</a>. It is finally a machine free of most of its previous compromises, and if it weren’t for the power button being on the bottom, it would be perfect.</p>
<br/>
]]></content>
<category term="mini" label="mini" />
<category term="ram" label="ram" />
<category term="mac" label="mac" />
<category term="upgrades" label="upgrades" />
<category term="storage" label="storage" />
<category term="apple" label="apple" />
<category term="m4" label="m4" />
<category term="premium" label="premium" />
</entry>
<entry>
<title>Back to the Grind</title>
<id>https://taoofmac.com/space/blog/2024/11/01/1920</id>
<published>2024-11-01T19:20:00+00:00</published>
<updated>2024-11-01T19:20:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/blog/2024/11/01/1920"/>
<content type="html"><![CDATA[
<p class="lead">As of today, I am back at Microsoft Consulting–or, as it’s known these days, Industry Solutions Delivery, in the role of a Principal Program Architect.</p>
<p>And even with today being a local bank holiday, I already had two calls and have a deadline for Monday.</p>
<p><a href="/space/blog/2020/01/19/2230" rel="next" style="color: #0000cc;">The first time it happened</a> I completely re-vamped my office, <a href="/space/blog/2020/12/28/1830" rel="next" style="color: #0000cc;">the pace of things changed markedly</a> and I <a href="/space/blog/2021/07/04/1230" rel="next" style="color: #0000cc;">finished the fiscal year</a> pondering about how moving to consultancy and advisory was something that didn’t really sit all that well with the engineer in me.</p>
<p>I know I will go through all of those mindset changes again–<a href="/space/blog/2021/10/15/1830" rel="next" style="color: #0000cc;">a bit more willingly</a> this time simply because I need to get my kids through college, although it does come with the bittersweet benefit of working with people whom I’ve known for a long time now.</p>
<p>The scenario is a marked change, again: Instead of doing niche technical stuff in the telco industry (AI-centric, but with very tightly focused use cases), I’m going back to large-scale, cross-technology program management. </p>
<p>And instead of doing it with US engineering and product teams for a global market (in the telco industry), I will be doing it with Western European folk for the “local” market–but cross-industry and focusing on improving our customers’ business, which seems like a great way to leverage the soft skills I’ve picked up in the intervening years doing startup advisory at <a href="https://brpx.com?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Bright Pixel</a> and the odd bit of industrial systems design.</p>
<p>So yes, there is going to be a lot of Excel (and Powerpoint) in my life again. And calls. And discussions about governance, processes, timelines, people and outcomes, with tech going back to being “just” an enabler and having to field a fair chunk of sales madness and constant, short notice pivots.</p>
<p>And it is going to drive the engineer in me absolutely crazy, because I <em>really</em> liked the engineering bits of my old role and I’ve <a href="/space/blog/2021/10/10/2300" rel="next" style="color: #0000cc;">always known what I like to do</a>.</p>
<p>But things change, and these days you can’t just commit to doing bleeding edge technology in a niche. I’ve always been <a href="/space/blog/2023/03/18/0140" rel="next" style="color: #0000cc;">mildly skeptical of LLMs</a> and <a href="/space/blog/2024/02/24/1600" rel="next" style="color: #0000cc;">where Generative AI is going</a>, so even though I would love to do pure ML/AI work in a few very specific use cases where I <em>know</em> it makes a difference the truth is that there just isn’t an opportunity to do it outside the US.</p>
<p>And sticking to a single industry (especially one <a href="/space/blog/2024/06/08/1200" rel="next" style="color: #0000cc;">with growth pains</a>) isn’t a good survival strategy, so this would ordinarily be a good thing.</p>
<a class="anchor" id="anchor-the-travel-thing" rel="anchor" href="/space/blog/2024/11/01/1920#the-travel-thing" style="color: #0000cc;"><h2 id="the-travel-thing">The Travel Thing</h2></a><p>Except that I am currently freaking out about the fact that, somehow, we’re back to the completely stupid idea that we need to have to take an assorted set of meatbags, fly them thousands of kilometers across a continent to a single location by leveraging the most time-wasting and environmentally-unfriendly processes known to our civilization (at which airports still excel), and then fly them back home after a set of meetings that could have been an email.</p>
<p>This is the bane of consulting, especially since it is still done at too short notice and without even considering the meatbags might have a life–and personal plans, and a family, a pressing need to unwind, daily, in the face of a stressful occupation, or just health issues that make flying (and disrupting their personal routines) an ordeal.</p>
<p>So yes, it seems that face-to-face meetings are back on the menu, and I am going ballistic since I happen to both hate traveling for business purposes and the hypocrisy of building vapid pseudo-relationships.</p>
<p>It’s as if a part of the industry has forgotten we’ve spent the past five years being almost supernaturally effective working remotely and sharing information much more effectively through video calls (and never mind that audio conferencing has been with us for many, many decades).</p>
<p>It is not an auspicious (or even sane) way to start a new role, and I am already dreading the first time I have to fly somewhere for a meeting that could have been a Teams call, seniority be damned.</p>
<br/>
]]></content>
<category term="career" label="career" />
<category term="remote work" label="remote work" />
<category term="consultancy" label="consultancy" />
<category term="travel" label="travel" />
<category term="microsoft" label="microsoft" />
</entry>
<entry>
<title>Staying in Control with Apple’s AI Writing Tools</title>
<id>https://taoofmac.com/space/links/2024/10/31/0747</id>
<published>2024-10-31T07:46:59+00:00</published>
<updated>2024-10-31T07:46:59+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/links/2024/10/31/0747"/>
<content type="html"><![CDATA[
<p><a href="https://ia.net/topics/how-to-stay-in-control-of-apples-ai-writing-tools?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" title="external link to https://ia.net/topics/how-to-stay-in-control-of-apples-ai-writing-tools" alt="screenshot of https://ia.net/topics/how-to-stay-in-control-of-apples-ai-writing-tools" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2024/10/31/0747/640,480/wOUJFo_RYuiW480t2OPukmxQXp0=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">What little I can use of Apple’s “Intelligence” in the EU right now (mostly on my Mac) is barely useful (especially when compared to the <a href="/space/notes/2024/02/22/1900" rel="next" style="color: #0000cc;">ones I built myself</a>), but <a href="/space/apps/ia_writer" rel="next" style="color: #0000cc;">iA Writer</a> has an interesting take on how to keep tabs on it (pun intended) and is going a little further.</p>
<p>I’ve always liked using it for my drafts (including this one), but I wasn’t really aware of some of its niceties since <a href="/space/blog/2024/02/24/1600" rel="next" style="color: #0000cc;">I don’t typically use LLMs for writing</a>–word or sentence completion is just about where I draw the line.</p>
<p>But this does make me think about Apple Intelligence and how it’s being rolled out (and advertised): The promise of a “Friendly, Professional, or Concise” tone is nice, but if the AI can’t accurately capture your intent, you might end up with something that sounds good but means something entirely different, and I’m not looking forward to the notion of turning human communication into a sea of AI-generated fluff.</p>
<p>I get enough of that at work already.</p>
<br/>
]]></content>
<category term="ia writer" label="ia writer" />
<category term="apple" label="apple" />
<category term="tools" label="tools" />
<category term="writing" label="writing" />
<category term="ai" label="ai" />
</entry>
<entry>
<title>Notice: Mastodon Changes</title>
<id>https://taoofmac.com/space/notices/2024/10/30/1200</id>
<published>2024-10-30T12:00:00+00:00</published>
<updated>2024-10-30T12:00:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/notices/2024/10/30/1200"/>
<content type="html"><![CDATA[
<p class="lead">Given the <a href="https://muffinlabs.com/posts/2024/10/29/10-29-rip-botsin-space/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">upcoming demise of botsin.space</a>, I’m in the process of moving this site’s account to <a href="https://mastodon.social/@taoofmac?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">mastodon.social</a>. </p>
<p>Since <a href="/space/apps/mastodon" rel="next" style="color: #0000cc;">Mastodon</a> seems to have trouble with follower migrations, I would advise you to double-check if you’re following the right account.</p>
<blockquote>
<p><strong>Update:</strong> Everything seems to be fixed now.</p>
</blockquote>
<br/>
]]></content>
<category term="social" label="social" />
<category term="bots" label="bots" />
<category term="mastodon" label="mastodon" />
<category term="publishing" label="publishing" />
</entry>
<entry>
<title>The Indefensible Location of the Magic Mouse’s Charging Port</title>
<id>https://taoofmac.com/space/links/2024/10/29/0754</id>
<published>2024-10-29T07:53:45+00:00</published>
<updated>2024-10-29T07:53:45+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/links/2024/10/29/0754"/>
<content type="html"><![CDATA[
<p><a href="https://daringfireball.net/2024/10/in_defense_i_swear_of_the_magic_mouses_charging_port_placement?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" title="external link to https://daringfireball.net/2024/10/in_defense_i_swear_of_the_magic_mouses_charging_port_placement" alt="screenshot of https://daringfireball.net/2024/10/in_defense_i_swear_of_the_magic_mouses_charging_port_placement" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2024/10/29/0754/640,480/wTzgdEYlbva3o81igtVa1vvmDv4=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">I wasn’t terribly excited about Apple’s announcements yesterday, but the fact that the Magic Mouse’s charging port was only “fixed” by making it USB-C was definitely a low point until I read this, which I rate as either a perfect piece of satire or a self-infliced massacre on the one hill you wouldn’t want to die on defending Apple’s design choices. </p>
<p>I’m just not sure which yet.</p>
<p>Apple seems to think that forcing users to go wireless is a feature, not a bug (which is a bit rich, if you ask me), and I would have stuck to my old AA battery model if it wasn’t based on an old Bluetooth version that now throws up a warning on modern Macs. So I switched to a <a href="https://www.amazon.es/gp/product/B01KZVQB42/ref=as_li_tl?_encoding=UTF8&tag=taoofmac-21&linkCode=ur2&camp=3638&creative=24630&utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Logitech M720</a> and never looked back.</p>
<p>And yeah, it’s kind of funny to read John’s defense and realize he’s been using a Lenovo mouse all along.</p>
<br/>
]]></content>
<category term="madness" label="madness" />
<category term="design" label="design" />
<category term="apple" label="apple" />
<category term="usb-c" label="usb-c" />
<category term="ergonomics" label="ergonomics" />
<category term="mouse" label="mouse" />
</entry>
<entry>
<title>Making the Radxa X4 Even Cooler</title>
<id>https://taoofmac.com/space/blog/2024/10/27/2230</id>
<published>2024-10-27T22:30:00+00:00</published>
<updated>2024-10-27T22:48:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/blog/2024/10/27/2230"/>
<content type="html"><![CDATA[
<p class="lead">Back <a href="/space/blog/2024/08/03/1200" rel="next" style="color: #0000cc;">when I reviewed the Radxa X4</a>, I went to some trouble to go over its thermal characteristics and how well that massive heatsink worked.</p>
<p>At the time, I resorted to using my own thermal pad to get the best possible contact between the CPU and the heatsink, but apparently that was not enough, because the board still ran a bit hot under load.</p>
<p>This weekend I decided to do something about that–I took one of the SSD copper heatsinks I had lying around, verified that it was thin enough (it was exactly 1mm), cut it to match the heatsink contact plate, and applied some thermal paste:</p>
<figure>
<img src="https://taoofmac.com/media/blog/2024/10/27/2230/dwa1HGPwpMEsIDOyacTTuw-71jc=/shim.jpg" alt="Copper shim in place" title="nice and coppery" width="1280" height="832" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>Checking the shim size after cutting. I also padded out the VRM "trench" to ensure they had some cooling.</figcaption>
</figure>
<p>And behold, the <a href="http://radxa.com/products/x/x4/?utm_campaign=review&utm_source=taoofmac.com&utm_medium=web&utm_content=external_link" rel="external" style="color: #0000cc;">X4</a> booted to a nice, cool 28°C:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code><span class="c1"># sensors</span>
coretemp-isa-0000
Adapter:<span class="w"> </span>ISA<span class="w"> </span>adapter
Package<span class="w"> </span>id<span class="w"> </span><span class="m">0</span>:<span class="w"> </span>+28.0°C<span class="w"> </span><span class="o">(</span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+105.0°C,<span class="w"> </span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+105.0°C<span class="o">)</span>
Core<span class="w"> </span><span class="m">0</span>:<span class="w"> </span>+29.0°C<span class="w"> </span><span class="o">(</span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+105.0°C,<span class="w"> </span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+105.0°C<span class="o">)</span>
Core<span class="w"> </span><span class="m">1</span>:<span class="w"> </span>+29.0°C<span class="w"> </span><span class="o">(</span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+105.0°C,<span class="w"> </span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+105.0°C<span class="o">)</span>
Core<span class="w"> </span><span class="m">2</span>:<span class="w"> </span>+29.0°C<span class="w"> </span><span class="o">(</span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+105.0°C,<span class="w"> </span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+105.0°C<span class="o">)</span>
Core<span class="w"> </span><span class="m">3</span>:<span class="w"> </span>+29.0°C<span class="w"> </span><span class="o">(</span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+105.0°C,<span class="w"> </span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+105.0°C<span class="o">)</span>
</code></pre></div>
<p>To verify that this was not a fluke, I ran the same load test I had used in my original review, and the temperatures peaked at 48°C, staying well below the 96°C I got last time:</p>
<figure>
<img src="https://taoofmac.com/media/blog/2024/10/27/2230/EPfUrR6G-eMI28sX1D8Hz7SCWiA=/temp.png" alt="temperature chart" title="soooo cooool" width="997" height="545" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>A vastly improved result over the initial benchmark</figcaption>
</figure>
<p>Even better, the board had a steadier CPU boost to 3GHz at the start, and held up nicely at 2.5GHz for the duration of the test, without the slight throttling I had observed before:</p>
<figure>
<img src="https://taoofmac.com/media/blog/2024/10/27/2230/MCLEZQO7GDXheJgelyGezyTD0UI=/mhz.png" alt="MHz chart" title="much, much nicer" width="1014" height="545" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>Average MHz across cores</figcaption>
</figure>
<p>I’m quite pleased with these results, and I’m going to leave the shim in place to (finally) do some testing with Windows. It’s a simple, effective solution that doesn’t require any permanent modifications to the board, and it seems to work quite well.</p>
<a class="anchor" id="anchor-caveats" rel="anchor" href="/space/blog/2024/10/27/2230#caveats" style="color: #0000cc;"><h2 id="caveats">Caveats</h2></a><p>I should note that the original testing was done in August and at higher ambient temperatures (even if, according to my office thermometer, by only about 4°C), but even then the difference is quite noticeable. I’m not sure if the thermal pad I used was sub-par (it was what I had on hand that bridged the pretty wide gap between the <a href="http://radxa.com/products/x/x4/?utm_campaign=review&utm_source=taoofmac.com&utm_medium=web&utm_content=external_link" rel="external" style="color: #0000cc;">X4</a>’s CPU and the heatsink), but the shim definitely seems to have done the trick.</p>
<p>Also, I kept the heatsink fan, but I’m not sure it’s even necessary anymore. I’ll have to do some more testing to see if it makes a difference in practice (I suspect it will, but I’m not sure how much).</p>
<br/>
]]></content>
<category term="heatsink" label="heatsink" />
<category term="intel" label="intel" />
<category term="x4" label="x4" />
<category term="cooling" label="cooling" />
<category term="n100" label="n100" />
<category term="radxa" label="radxa" />
<category term="copper" label="copper" />
<category term="sbc" label="sbc" />
</entry>
<entry>
<title>The FriendlyELEC CM3588 NVMe NAS Kit</title>
<id>https://taoofmac.com/space/blog/2024/10/26/1900</id>
<published>2024-10-26T19:00:00+00:00</published>
<updated>2024-10-26T21:10:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/blog/2024/10/26/1900"/>
<content type="html"><![CDATA[
<p class="lead">This one took me a long time, and it was actually the third or fourth RK3588 board I got to review–but the timing of its arrival was completely off (it was in the middle of a work crisis) and I had to put it on the back burner for a while.</p>
<p>Then a bunch of other things happened, and a few months later I eventually got four <a href="https://www.amazon.es/gp/product/B0C8XMH264/ref=as_li_tl?_encoding=UTF8&tag=taoofmac-21&linkCode=ur2&camp=3638&creative=24630&utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">WD Blue SN580 1TB</a> NVMe SSDs at a good price and I could finally set it up.</p>
<blockquote>
<p><strong>Disclaimer</strong>: <a href="https://www.friendlyelec.com/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">FriendlyELEC</a> supplied me with a <a href="https://www.friendlyelec.com/index.php?route=product%2Fproduct&product_id=294&utm_campaign=review&utm_source=taoofmac.com&utm_medium=web&utm_content=external_link" rel="external" style="color: #0000cc;">CM3588</a> compute module and NAS board free of charge, and I bought the SSDs and case with my own money. As usual, this post follows my <a href="/space/site/review_policy" rel="next" style="color: #0000cc;">review policy</a>.</p>
</blockquote>
<p>In the meantime a lot of people have looked at this board (it’s become a bit of an Internet sensation), so as usual I’ll try to focus on the things that I found interesting or that I think haven’t been covered in detail elsewhere.</p>
<a class="anchor" id="anchor-hardware" rel="anchor" href="/space/blog/2024/10/26/1900#hardware" style="color: #0000cc;"><h2 id="hardware">Hardware</h2></a><figure>
<img src="https://taoofmac.com/media/blog/2024/10/26/1900/LpMd7-YyRWr0hDWHP4KVtV7VTcM=/board.jpg" alt="The FriendlyELEC CM3588 NAS Kit" title="the full Monty" width="4096" height="3106" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>The assembled kit, sitting on a 3D printed tray.</figcaption>
</figure>
<p>A key aspect of the NAS kit is that it is a two-part system: the CM3588 compute module and the NAS board. There are now a few different variants of the compute module, but the NAS board is a single-purpose carrier board that provides all the necessary I/O.</p>
<p>Let’s get the specs out of the way first, starting with the module:</p>
<ul>
<li>RK3588 SoC (4xA76/2.4GHz cores, 4xA55/1.8GHz cores, plus a Mali-G610 MP4 GPU and the usual 6-TOPS NPU)</li>
<li>16GB LPDDR4X rated at 2133MHz (which is great, as it’s a lot more than the usual 4GB or 8GB I got on most SBCs)</li>
<li>64GB eMMC (mine came with <a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OpenMediaVault</a> pre-installed, but I’ll get to that in a bit)</li>
</ul>
<p>The module itself is 55x65mm in size and is <em>not</em> interchangeable with, say, the Raspberry Pi compute module as it has a custom form factor that is only compatible with the NAS board, and the various SKU options for the kit are all based on variations of the RAM and eMMC sizes (there is also a “Plus” variant that adds even more RAM and storage as well as faster 2400MHz RAM).</p>
<p>All the I/O is on the carrier, which is quite a bit larger than usual and compares more to a nano-ITX board than a typical SBC. The board itself is 153x116mm and looks like this:</p>
<figure class="full-width">
<img src="https://taoofmac.com/media/blog/2024/10/26/1900/XqWN1P_bZTez8fsKs9Y2Y2SWoHc=/ports.jpg" alt="The carrier board" title="loads of expandability" width="4096" height="1638" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>A lot of ports indeed.</figcaption>
</figure>
<p>Out of all the above, the most interesting bits are:</p>
<ul>
<li>4xPCIe 3.0x1 NVMe SSD slots (which are the star of the show)</li>
<li>A single 2.5 GbE port </li>
<li>Three HDMI ports (two outputs and one input, just like the <a href="/space/blog/2024/01/20/1800" rel="next" style="color: #0000cc;">Orange Pi 5+</a>)</li>
<li>Three USB-A ports (two USB 3.0 and one USB 2.0)</li>
<li>One USB-C port (USB 3.0/DP 1.4)</li>
<li>The usual 40-pin GPIO header</li>
<li>Two MIPI CSI/DSI connectors on the underside</li>
<li>Barrel Jack (for a 12V 3A PSU, which was included in my box)</li>
<li>And a plethora of other connectors and buttons (the usual MASKROM and reset buttons, a power button, and a user button, but also alternate power, RTC clock and fan connectors for a change)</li>
</ul>
<p>One of the reasons I wanted to test it is that this is possibly the only RK3588 configuration I’ve seen that seems to fully use all the PCIe lanes the SoC provides–and also seems to overshoot that a little, since the Realtek NIC is also on the PCI bus (as a 2.0 device), so internal bandwidth might actually be over-subscribed–it’s hard to tell from the schematics as the module exposes dedicated PCIe lanes for the NVMe slots and an MDI interface for the LAN port.</p>
<p>Which, I think, is also why you don’t get Wi-Fi or a second LAN port. Digging into the schematics a bit shows only one PCIe 3.0 line to the outside world:</p>
<figure>
<img src="https://taoofmac.com/media/blog/2024/10/26/1900/X9qmOAJO57jQwAvsT8erUpXL-3M=/compute.jpg" alt="Block diagram of the compute module" title="Seems simple, right?" width="1280" height="1028" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>The compute module, as per the docs</figcaption>
</figure>
<p>…but four PCIe 3.0 lanes to the NVMe slots:</p>
<figure>
<img src="https://taoofmac.com/media/blog/2024/10/26/1900/UoHv0KxTtiUARWPoNKHbq6CbW6E=/overall.jpg" alt="Block diagram of the whole thing" title="I still think this is missing something" width="2048" height="1221" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>Overall block diagram of the NAS Kit</figcaption>
</figure>
<p>And given the main selling point of the board is the NVMe slots, I was quite interested to see how this setup would perform in practice.</p>
<p>As mentioned above, I populated the board with four <a href="https://www.amazon.es/gp/product/B0C8XMH264/ref=as_li_tl?_encoding=UTF8&tag=taoofmac-21&linkCode=ur2&camp=3638&creative=24630&utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">WD Blue SN580 1TB</a> NVMe SSDs. These are completely overkill (they are PCIe 4.0x4 devices, and as such much faster than the board supports), but I have future designs for them–and I also got an M.2 to SATA adapter so I can re-use the NAS Kit later in a more conventional way.</p>
<a class="anchor" id="anchor-system-software" rel="anchor" href="/space/blog/2024/10/26/1900#system-software" style="color: #0000cc;"><h2 id="system-software">System Software</h2></a><p>Since I had shelved this project for a couple of months, I had forgotten that the CM3588 shipped with <a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OpenMediaVault</a> pre-installed on the eMMC–which was a bit of a relief since I was expecting to have to go through the usual dance of using the Rockchip tools to install an OS I could work with.</p>
<p>Digging further, I realized that <a href="https://www.friendlyelec.com/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">FriendlyELEC</a> has put together a very clean setup–the SD card images you download from their site will automatically install to the eMMC (if present), and the OS is <a href="/space/os/linux/distributions/debian" rel="next" style="color: #0000cc;">Debian</a> 12 without any frills <em>and</em> kernel 6.1 (which I have since automatically upgraded to 6.1.57 without any hitches).</p>
<p>Moreover, <code>apt.sources.list</code> and friends all listed perfectly ordinary Debian sources <em>and</em> the official <a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OMV</a> package repositories, without any proprietary repos (and no mystery meat packages I could see), so instead of wiping it and installing vanilla <a href="/space/os/linux/distributions/armbian" rel="next" style="color: #0000cc;">Armbian</a> and <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> on top, I decided to take <a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OMV</a> for a spin (I lost track of it years ago, and I was curious to see how it had evolved).</p>
<p>But the key point here is that as such things go in the SBC world this is pretty excellent software support right off the bat, and I didn’t feel any need to use <a href="/space/os/linux/distributions/armbian" rel="next" style="color: #0000cc;">Armbian</a> even though the board is <a href="https://www.armbian.com/nanopc-cm3588-nas/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">community supported</a>.</p>
<h2 id="openmediavault-setup"><a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OpenMediaVault</a> Setup</h2>
<p>I took a few different passes at this, starting with getting a feel for what was already installed:</p>
<figure>
<video controls="" autoplay="" loop="" muted="" playsinline="" style="width: 100%" poster="/media/blog/2024/10/26/1900/2GduUfB6R82ATpCbSF87ObU83Jk=/omv.jpg">
<source src="/media/blog/2024/10/26/1900/dvDUWH5DBDheMF3dFkCo36KsSik=/omv.mp4" type="video/mp4">
<img src="https://taoofmac.com/media/blog/2024/10/26/1900/2GduUfB6R82ATpCbSF87ObU83Jk=/omv.jpg" style="max-width: 100%;height: auto;width: 100%" alt="Your browser cannot play this video" width="1206" height="720"/>
</source></video>
<figcaption>
The stock OMV UI, before I installed a bunch of plugins.
</figcaption>
</figure>
<p>There are a few things of note here:</p>
<ul>
<li>You get comprehensive LVM storage management and SMART monitoring out of the box</li>
<li>System monitoring is also quite good</li>
<li>File services include Samba, NFS, and my old buddy <a href="/space/cli/rsync" rel="next" style="color: #0000cc;"><code>rsync</code></a>, which is nice</li>
<li>You get UPS support out of the box</li>
<li>You also get comprehensive network service and user account support</li>
</ul>
<p>But I wanted to do more–I wanted to see how I could handle virtualization, and, most importantly, I also wanted to set up ZFS for my testing.</p>
<p>So I set to work installing things the <a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OMV</a> way, by using the Web UI to add plugins for those–and I was quite surprised to see that almost everything worked out of the box.</p>
<p>I did have a few relevant issues, though:</p>
<ul>
<li><code>/etc/apt/sources.list.d/omvdocker.list</code> (which tried to point to the mainstream Docker package repository) was broken, so I could only install Debian’s <code>docker.io</code> package instead of the mainstream one</li>
<li>The LXC bridge didn’t work out of the box, but that was because the <code>lxc-net</code> service wasn’t running (which in turn was because I had to create <code>/run/resolvconf</code> manually)</li>
<li>The ZFS plugin didn’t work out of the box, but that was because the kernel sources weren’t installed (which I’ll get to in a bit)</li>
</ul>
<p>All of these seem like things that should have been sorted out by the plugins themselves, and I acknowledge that other than the ZFS issue, neither <a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OMV</a>’s ARM packagers nor <a href="https://www.friendlyelec.com/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">FriendlyELEC</a> probably expected me to use the NAS kit in the way I did–but I think it’s worth mentioning that the plugins could be a bit more robust.</p>
<a class="anchor" id="anchor-installing-zfs" rel="anchor" href="/space/blog/2024/10/26/1900#installing-zfs" style="color: #0000cc;"><h3 id="installing-zfs">Installing ZFS</h3></a><p>I tried installing ZFS by just activating the OMV ZFS plugin, but that didn’t really work–I had the UI components loaded, but there were no ZFS kernel modules.</p>
<p>As it turned out, DKMS kernel configuration didn’t work because the kernel sources weren’t actually installed–which was weird, since I would expect that to be sorted out by the plugin.</p>
<p>Fortunately, the fix was easy–I just had to SSH in, install the kernel headers (I could have done that via the GUI as well, but I wanted to check loaded modules), and then re-run the ZFS plugin setup. </p>
<p>I then set <code>autotrim=on</code> and turned on <code>lz4</code> compression using the GUI, and was good to go:</p>
<figure>
<video controls="" autoplay="" loop="" muted="" playsinline="" style="width: 100%" poster="/media/blog/2024/10/26/1900/4RVuc4OosyAvGxXgBwJu_tzYUsE=/zfs.jpg">
<source src="/media/blog/2024/10/26/1900/y7jzIipX5b3Gmqf_XSQhodtao7g=/zfs.mp4" type="video/mp4">
<img src="https://taoofmac.com/media/blog/2024/10/26/1900/4RVuc4OosyAvGxXgBwJu_tzYUsE=/zfs.jpg" style="max-width: 100%;height: auto;width: 100%" alt="Your browser cannot play this video" width="1206" height="720"/>
</source></video>
<figcaption>
The ZFS configuration after I installed the SSD drives.
</figcaption>
</figure>
<a class="anchor" id="anchor-storage-performance" rel="anchor" href="/space/blog/2024/10/26/1900#storage-performance" style="color: #0000cc;"><h3 id="storage-performance">Storage Performance</h3></a><p>I then ran <code>fio</code> as usual:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>fio<span class="w"> </span>--filename<span class="o">=</span>/mnt/pool/test/file<span class="w"> </span>--size<span class="o">=</span>5GB<span class="w"> </span>--direct<span class="o">=</span><span class="m">1</span><span class="w"> </span>--rw<span class="o">=</span>randrw<span class="w"> </span>--bs<span class="o">=</span>64k<span class="w"> </span>--ioengine<span class="o">=</span>libaio<span class="w"> </span>--iodepth<span class="o">=</span><span class="m">64</span><span class="w"> </span>--runtime<span class="o">=</span><span class="m">120</span><span class="w"> </span>--numjobs<span class="o">=</span><span class="m">4</span><span class="w"> </span>--time_based<span class="w"> </span>--group_reporting<span class="w"> </span>--name<span class="o">=</span>random-read-write<span class="w"> </span>--eta-newline<span class="o">=</span><span class="m">1</span>
</code></pre></div>
<p>…and this gave me only 10K IOPS at 667MiB/s, which is quite lower than, say the 13K I got from the <a href="/space/blog/2024/01/20/1800" rel="next" style="color: #0000cc;">Orange Pi 5+</a> and a bit disappointing–but which can be explained by the fact that ZFS compression was on, since all the CPU cores fired up to 100%.</p>
<p>I then turned off compression and ran the test again, and got 13K IOPS at 882MiB/s–with the CPUs pretty heavily loaded but peaking at 95% instead of fully saturated.</p>
<p>So there’s a trade-off here–and given that we’re stuck with PCIe 3.0, I actually think either value is OK. After all, the CPU compression overhead might be a decent compromise if you intend to use ZFS to host development containers or serve compressible data.</p>
<p>Hitting the server from the network proved that it had <em>zero</em> issues serving data at line speed while peaking at 45-50% CPU–I got the equivalent of 2.3Gbps on a single SMB/CIFS connection, and I don’t think it would have any issues saturating a 5GBps link.</p>
<p>I think this is perfectly OK for a fast home NAS, and the only real bottleneck seems to be the built-in Realtek 2.5GbE NIC.</p>
<p>I have a <a href="https://www.wisdpi.com/products/wisdpi-usb-3-2-5g-ethernet-adapter-wp-ut5-wired-lan-network-connection-for-mac-os-linux-windows-backward-compatible-on-5g-2-5g-1g-100mbps-ideal-for-gaming?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">5GbE USB adapter</a> (and it worked), but I didn’t run a proper end-to-end test–that will be coming in a later post after I switch to <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> and (with luck) find the time to re-wire one run of my home network.</p>
<h2 id="omv-as-a-hypervisor-on-arm"><a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OMV</a> as a Hypervisor on ARM</h2>
<p>And why would I switch to <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a>, you might ask? Well, I wanted to see how well <a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OMV</a> could handle virtualization–and the answer is “not very well”.</p>
<p>This is not <a href="https://www.friendlyelec.com/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">FriendlyELEC</a>’s fault (especially since they don’t control the plugins that <a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OMV</a> uses), but it’s worth mentioning that it’s a clunky experience.</p>
<a class="anchor" id="anchor-docker-compose" rel="anchor" href="/space/blog/2024/10/26/1900#docker-compose" style="color: #0000cc;"><h3 id="docker-compose">Docker Compose</h3></a><p>The Docker plugin worked out of the box–I was expecting to have to install the <code>docker.io</code> package and then manually configure the plugin, but it was already there and working. The Compose one, though, took a little bit of fiddling to get right, but to be honest I don’t like its reliance on setting up shared folders for the compose files–even if you do get a workable GUI to manage them:</p>
<figure>
<video controls="" autoplay="" loop="" muted="" playsinline="" style="width: 100%" poster="/media/blog/2024/10/26/1900/7X567tIk2PXcycDpoM7h7prAsJs=/compose.jpg">
<source src="/media/blog/2024/10/26/1900/x6TCzQSB-IjaGlFHyIVizMeXMw8=/compose.mp4" type="video/mp4">
<img src="https://taoofmac.com/media/blog/2024/10/26/1900/7X567tIk2PXcycDpoM7h7prAsJs=/compose.jpg" style="max-width: 100%;height: auto;width: 100%" alt="Your browser cannot play this video" width="1206" height="720"/>
</source></video>
<figcaption>
The Docker Compose plugin in action.
</figcaption>
</figure>
<p>However, I didn’t spend any time fiddling with Compose, as I typically rely on <a href="https://www.portainer.io/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">Portainer</a>–I just wanted to see how viable it was out-of-the-box, and the answer is that it’s perfectly OK.</p>
<a class="anchor" id="anchor-kvm/lxc" rel="anchor" href="/space/blog/2024/10/26/1900#kvm/lxc" style="color: #0000cc;"><h3 id="kvmlxc">KVM/LXC</h3></a><p>LXC support was a bit more interesting–it’s joined at the hip to KVM via <code>virt-tools</code>, and besides the fact that KVM didn’t work out of the box (it assumes <code>x86_64</code> hosts, which is wrong), it was a bit of a pain to set up.</p>
<figure>
<video controls="" autoplay="" loop="" muted="" playsinline="" style="width: 100%" poster="/media/blog/2024/10/26/1900/8Zyi1vN0a36oCe5zcnJFnIfgkD8=/kvm.jpg">
<source src="/media/blog/2024/10/26/1900/c88qYVa4nYiz34pKp6W2UWtromY=/kvm.mp4" type="video/mp4">
<img src="https://taoofmac.com/media/blog/2024/10/26/1900/8Zyi1vN0a36oCe5zcnJFnIfgkD8=/kvm.jpg" style="max-width: 100%;height: auto;width: 100%" alt="Your browser cannot play this video" width="1206" height="720"/>
</source></video>
<figcaption>
The KVM/LXC plugin in action.
</figcaption>
</figure>
<p>Besides having to reset and reconfigure the LXC bridge (which even after being set up dies every now and then), accessing LXC containers via the console is a bit of a pain–you have to SSH in and then use <code>virsh</code> to access the console:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>sudo<span class="w"> </span>virsh<span class="w"> </span>-c<span class="w"> </span>lxc:///<span class="w"> </span>console<span class="w"> </span>omv-test
</code></pre></div>
<p>This, together with the fact that I prefer <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> and rely on it already to run, backup and migrate LXC containers across all my other ARM devices, is just another reason why I’ll be wiping the <a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OMV</a> install and replacing it with <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a>–but, again, <a href="https://www.openmediavault.org/?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">OMV</a> is <em>fine</em> if you don’t need virtualization, and I was actually pleasantly surprised by how well it worked as a NAS.</p>
<a class="anchor" id="anchor-thermals-power-and-cpu-performance" rel="anchor" href="/space/blog/2024/10/26/1900#thermals-power-and-cpu-performance" style="color: #0000cc;"><h2 id="thermals-power-and-cpu-performance">Thermals, Power and CPU Performance</h2></a><p>The massive heatsink on the CM3588 module is quite effective–I never saw the CPU go above 85°C even under full load, and the clock stayed pegged at 1.8GHz for most of the test, only dropping to 1.4GHz after 2 minutes of full load–and bouncing back up again when the temperature dropped to 75°C.</p>
<p>The CPU performance, however, was a bit under what I’ve seen from other RK3588 devices–I got 13.889 tokens/s, which is a bit lower than the 15.37 I got from the <a href="/space/blog/2024/06/16/1800" rel="next" style="color: #0000cc;">Banana Pi M7</a> (with the same model version), but I think that might be due to some variation in RAM speeds (and maybe just a bit better cooling on the M7, since it dissipates heat through the case).</p>
<a class="anchor" id="anchor-power-consumption" rel="anchor" href="/space/blog/2024/10/26/1900#power-consumption" style="color: #0000cc;"><h2 id="power-consumption">Power Consumption</h2></a><p>The NAS kit is a bit power-hungry, though–with the SSDs installed, I measured 5W at idle and 14-19W from the wall (using one of my Zigbee sockets) under load, which despite low in the grand scheme of things is enough to give me pause.</p>
<p>By the way, the board has a voltage sensor, which is a nice touch:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code><span class="c1"># sensors</span>
simple_vin-isa-0000
Adapter:<span class="w"> </span>ISA<span class="w"> </span>adapter
in0:<span class="w"> </span><span class="m">12</span>.46<span class="w"> </span>V<span class="w"> </span>
nvme-pci-33100
Adapter:<span class="w"> </span>PCI<span class="w"> </span>adapter
Composite:<span class="w"> </span>+43.9°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-40.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+83.8°C<span class="o">)</span>
<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+87.8°C<span class="o">)</span>
Sensor<span class="w"> </span><span class="m">1</span>:<span class="w"> </span>+60.9°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-273.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+65261.8°C<span class="o">)</span>
Sensor<span class="w"> </span><span class="m">2</span>:<span class="w"> </span>+43.9°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-273.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+65261.8°C<span class="o">)</span>
npu_thermal-virtual-0
Adapter:<span class="w"> </span>Virtual<span class="w"> </span>device
temp1:<span class="w"> </span>+59.2°C<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+115.0°C<span class="o">)</span>
nvme-pci-11100
Adapter:<span class="w"> </span>PCI<span class="w"> </span>adapter
Composite:<span class="w"> </span>+47.9°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-40.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+83.8°C<span class="o">)</span>
<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+87.8°C<span class="o">)</span>
Sensor<span class="w"> </span><span class="m">1</span>:<span class="w"> </span>+65.8°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-273.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+65261.8°C<span class="o">)</span>
Sensor<span class="w"> </span><span class="m">2</span>:<span class="w"> </span>+47.9°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-273.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+65261.8°C<span class="o">)</span>
center_thermal-virtual-0
Adapter:<span class="w"> </span>Virtual<span class="w"> </span>device
temp1:<span class="w"> </span>+59.2°C<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+115.0°C<span class="o">)</span>
bigcore1_thermal-virtual-0
Adapter:<span class="w"> </span>Virtual<span class="w"> </span>device
temp1:<span class="w"> </span>+59.2°C<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+115.0°C<span class="o">)</span>
soc_thermal-virtual-0
Adapter:<span class="w"> </span>Virtual<span class="w"> </span>device
temp1:<span class="w"> </span>+59.2°C<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+115.0°C<span class="o">)</span>
nvme-pci-0100
Adapter:<span class="w"> </span>PCI<span class="w"> </span>adapter
Composite:<span class="w"> </span>+45.9°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-40.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+83.8°C<span class="o">)</span>
<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+87.8°C<span class="o">)</span>
Sensor<span class="w"> </span><span class="m">1</span>:<span class="w"> </span>+61.9°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-273.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+65261.8°C<span class="o">)</span>
Sensor<span class="w"> </span><span class="m">2</span>:<span class="w"> </span>+45.9°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-273.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+65261.8°C<span class="o">)</span>
tcpm_source_psy_6_0022-i2c-6-22
Adapter:<span class="w"> </span>rk3x-i2c
in0:<span class="w"> </span><span class="m">0</span>.00<span class="w"> </span>V<span class="w"> </span><span class="o">(</span><span class="nv">min</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+0.00<span class="w"> </span>V,<span class="w"> </span><span class="nv">max</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+0.00<span class="w"> </span>V<span class="o">)</span>
curr1:<span class="w"> </span><span class="m">0</span>.00<span class="w"> </span>A<span class="w"> </span><span class="o">(</span><span class="nv">max</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+0.00<span class="w"> </span>A<span class="o">)</span>
nvme-pci-22100
Adapter:<span class="w"> </span>PCI<span class="w"> </span>adapter
Composite:<span class="w"> </span>+47.9°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-40.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+83.8°C<span class="o">)</span>
<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+87.8°C<span class="o">)</span>
Sensor<span class="w"> </span><span class="m">1</span>:<span class="w"> </span>+66.8°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-273.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+65261.8°C<span class="o">)</span>
Sensor<span class="w"> </span><span class="m">2</span>:<span class="w"> </span>+47.9°C<span class="w"> </span><span class="o">(</span><span class="nv">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>-273.1°C,<span class="w"> </span><span class="nv">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+65261.8°C<span class="o">)</span>
gpu_thermal-virtual-0
Adapter:<span class="w"> </span>Virtual<span class="w"> </span>device
temp1:<span class="w"> </span>+59.2°C<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+115.0°C<span class="o">)</span>
littlecore_thermal-virtual-0
Adapter:<span class="w"> </span>Virtual<span class="w"> </span>device
temp1:<span class="w"> </span>+59.2°C<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+115.0°C<span class="o">)</span>
bigcore0_thermal-virtual-0
Adapter:<span class="w"> </span>Virtual<span class="w"> </span>device
temp1:<span class="w"> </span>+59.2°C<span class="w"> </span><span class="o">(</span><span class="nv">crit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>+115.0°C<span class="o">)</span>
</code></pre></div>
<a class="anchor" id="anchor-case-and-ventilation" rel="anchor" href="/space/blog/2024/10/26/1900#case-and-ventilation" style="color: #0000cc;"><h2 id="case-and-ventilation">Case and Ventilation</h2></a><figure>
<img src="https://taoofmac.com/media/blog/2024/10/26/1900/W7wqMS969FQdiBrq6XZUHgPVbI4=/case.jpg" alt="The FriendlyELEC case" title="very airy" width="2048" height="1098" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>The case is thick aluminum, and has a lot of airflow</figcaption>
</figure>
<p>A couple of weeks ago, after getting the SSDs and starting testing, I finally ordered the case–which is a <em>very</em> sturdy piece of kit, and includes ventilation holes, an RTC clock battery and and a fan.</p>
<p>Most of my testing was done without the case, but I did install it for the final <code>ollama</code> run and temperature checks, and am pretty happy with it–it’s compact, sturdy, well made (the feet contain screws that hold both halves together in an ingenious way) and has a lot of ventilation.</p>
<p>I should mention that the fan supplied with the case was… very disappointing. The 40x40x7mm 5V fan was <em>very</em> noisy and had almost unbearable coil whine both while ramping up and at peak speeds, and wins my personal award for the worst fan I’ve ever used.</p>
<p>So all the tests were done <em>without</em> the fan, and I honestly don’t think it’s necessary for most use cases–the heatsink seems more than enough to keep the system cool.</p>
<p>However, I have ordered a couple of replacements since my server closet gets rather toasty in Summer, and the current temperature isn’t really representative of what I’ll see next year. I’ll update this post with the results once I get them.</p>
<a class="anchor" id="anchor-conclusion" rel="anchor" href="/space/blog/2024/10/26/1900#conclusion" style="color: #0000cc;"><h2 id="conclusion">Conclusion</h2></a><p>Hardware-wise, I am quite happy with the <a href="https://www.friendlyelec.com/index.php?route=product%2Fproduct&product_id=294&utm_campaign=review&utm_source=taoofmac.com&utm_medium=web&utm_content=external_link" rel="external" style="color: #0000cc;">CM3588</a> NAS kit–it’s a well thought-out solution that works very well out of the box if you want a small fire-and-forget NAS.</p>
<p>NVMe storage is still more expensive than SATA (spinning rust or otherwise), but there is clearly a trend towards NVMe in the small NAS world, and even at PCIe 3.0 speeds it’s a good fit for a home or small office server. Most people will be perfectly happy with the Docker support to run a few containers, but I need a bit more control and flexibility–and that’s where <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> comes in.</p>
<p>My current plan is to get <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> running on it and set up the ZFS pool to use both for consolidating all my ARM LXC containers and provide at least 2TB of fast shared storage for machine learning models and maybe even video editing (which I can’t do off my <a href="/space/blog/2020/04/04/2310" rel="next" style="color: #0000cc;">Synology</a>). That will, however, require a bit more storage, which is a bit out of my budget at the moment.</p>
<p>Consolidating all (or at least most) of my ARM devices into a single server will compensate for the slightly higher idle power consumption, and the combination of ZFS RAID and <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> (with both LXC snapshots and migration) will make it easy to preserve my home automation setup and other services.</p>
<p>I’ll put up a follow-up post once I’ve done that, and I’ll also be testing the <a href="https://www.wisdpi.com/products/wisdpi-usb-3-2-5g-ethernet-adapter-wp-ut5-wired-lan-network-connection-for-mac-os-linux-windows-backward-compatible-on-5g-2-5g-1g-100mbps-ideal-for-gaming?utm_source=taoofmac.com&utm_medium=web&utm_campaign=unsolicited_traffic&utm_content=external_link" rel="external" style="color: #0000cc;">5GbE USB adapter</a> and the M.2 to SATA adapter I got for the SSDs–so stay tuned.</p>
<br/>
]]></content>
<category term="arm" label="arm" />
<category term="rk3588" label="rk3588" />
<category term="rockchip" label="rockchip" />
<category term="nvme" label="nvme" />
<category term="review" label="review" />
<category term="friendlyelec" label="friendlyelec" />
<category term="hardware" label="hardware" />
<category term="openmediavault" label="openmediavault" />
<category term="zfs" label="zfs" />
<category term="debian" label="debian" />
<category term="nas" label="nas" />
</entry>
</feed>
If you would like to create a banner that links to this page (i.e. this validation result), do the following:
Download the "valid Atom 1.0" banner.
Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)
Add this HTML to your page (change the image src
attribute if necessary):
If you would like to create a text link instead, here is the URL you can use: