Wednesday, December 18, 2019

Computer Hardware Juggling for fun (but not profit)

Any self-respecting computer nerd has a pile of various castoff bits of computer hardware and cables, saved because "you never know when you might need it for something..."

This a story from mine.

First, backstory:
In late 2008, I built my mom a budget computer (bought motherboard, cpu, memory, etc. and assembled it myself). It originally went into an old full ATX case that itself was something I had on hand from when I built my then girlfriend, now ex-wife a computer in college.
In 2010, I built my first file server from an old computer I got from my in-laws.
In 2011, I bought my current PC and did another round of hand-me-down shuffling, resulting in the innards from my mom's computer going into a smaller case, with a reused hard drive so as to upgrade from XP to 7 (during which I discovered that Windows 7 doesn't care if you move a functional hard drive with the OS already installed on it to a completely different system) and my frankenserver (now using a newer CPU/Motherboard/RAM from my recently retired desktop) went into the full ATX case, for which I had to use some spare fans from my pile to make enough airflow to get it happy.
In 2013, frankenserver died (capacitors on the motherboard) and I bought an actual new server for it, and stripped the old one for parts, including a lot of fans and cabling for such.
One of those fans and a heatsink from an abandoned PCI card (fakeraid or GigE, don't remember which) was pressed into service to keep my ODroid cool when it became clear it couldn't deal with ambient cooling inside its case at full load. A 12v 30MM fan is a lot less annoying when you're only driving it with +5vDC off of the GPIO pins of a Pi clone.
A couple of years ago, my mom replaced her computer, and so the old one came back to me. I realized that as old as it was, it was a better CPU and more memory than the (castoff) Atom netbooks the kids had been playing with, so I grabbed the old SSD out of the netbook (running windows 10) and slapped it into that to make them a desktop. It's still impressive to me that Windows 10 is perfectly content to run on what was fairly low-end hardware 12 years ago, and how much of a difference an SSD makes in terms of day to day performance on a box like that. But there was basically no driver for the ancient on-board Nvidia chipset and Java wouldn't recognize graphics, so I needed a different video card. A friend from work gave me an AMD Radeon R9 200 he wasn't using, that made Minecraft work, but was seriously bottlenecked by the CPU, PCIe 1.0, and probably wasting a lot of power in the process.

That brings us to today. The kids have been complaining about the slowness of the current box in terms of its ability to do more than play Minecraft and Youtube, and it was getting laggy even for that, so I decided part of their Christmas gift this year would be an upgrade. Bought myself a new PC with intent to hand them my old one, with the graphics card from the old box. I went from a 2nd-gen Intel i7 to a 9th gen, but because it was a Cyber Monday door buster there was no configuring it, and I elected to not pay Dell's premium for a different box with more memory and a relatively small SSD, so I ended up with only 8GB of RAM and a 1TB spinning rust drive + 16GB of Optane (aka tiny, fast NVME SSD as cache). Got the computer Friday, booted it, realized that I'm utterly spoiled by the SSD in my current machine, because it felt slower than the current, much older box, ordered an SSD and the other 8GB of RAM the same day. Side note: 1TB Samsung Evo 860 is flirting with $100, which boggles my mind.

Meanwhile, the 11 year old box that's aging out of my fleet found a new home, so I grabbed a video card (Nvidia Geforce 9500 GS) I'd rescued from another actually, for real dead (fried CPU) box my ex-father-in-law gave me and set to getting that working, since it's still lightyears ahead of the onboard video. Many bluescreens were the result. Unsurprisingly, Windows gets a little cranky when you yank an AMD video card and install an Nvidia without first uninstalling all the AMD software and drivers. Finally got drivers and such wrangled, which involved safe mode in Windows, and was still getting bluescreens, albeit less frequently. Discover that the fan in the video card seemed to not be spinning, figured maybe bluescreens were because of overheating. Rummaged in my pile-o-parts for a fan and rigged something up to serve as a card fan. I'm simultaneously proud and ashamed to admit it involved zip ties and an 80mm fan. Happened to have a cable on hand to split the single case fan power terminal to drive both fans. Finally got the box happy after a complete reset (what Win10 now calls a clean install) of Windows and a video driver update.

SSD and memory for the new box arrived first thing Sunday, so I set to installing it so that I could clone the existing drive over. Turns out that Dell got cute with their power supply and there are no SATA power cables from the power supply itself. There are two 6-pin female PCIe connectors on the motherboard labeled for SATA power, and only one is being used. The optical drive has some other connector (it looks like they used a slimline), so I couldn't steal that, meaning that I had to temporarily use a SATA splitter I had on hand to power both drives long enough to clone them. Long term plan is to move the 1TB disk to the kids' box to replace the 400GB drive that is original to the computer, but I need to hang onto it long enough to confirm that the new Dell doesn't have any sudden hardware failures and need to be sent back, so it'll sit for a bit first. Protip: If you have a box with Optane, make sure to disable it before you go cloning the hard drive. If you don't, the Optane disk will disappear when you swap to the new drive, and you'll have to swap back, disable Optane, then swap again so you can re-enable.

Now for moving the Radeon to the kids' new box. I had forgotten that the Radeon needs 2 6-pin PCIe power cables to run. In the last box, that required a Molex to 6-pin adapter because the power supply only had one. I figured I'd just move that over. Except... in this box, (with apologies to Ghostbusters) there is no Molex, only SATA. I have Molex to SATA power cables in the pile-o-parts from my old frankenserver, but they're for powering SATA devices off of Molex, not the other way around, so wrong gender. So I had to wait on a SATA to 6-pin adapter (the opposite of what I would have needed above), which fortunately was $6 and ships free one day from everyone's favorite rainforest retailer. Also convenient that I had a SATA power splitter/extension on hand, as there aren't that many SATA cables in the right place for this. Fast forward a bit, cable arrives. Install card, plug everything in, and... nothing. Powers up, but won't boot. I figure maybe the OEM Dell power supply, which tends to be sized for exactly what it leaves the factory with and little margin for upgrades, is too anemic, and got to swapping it for the 500W power supply in the box that's aging out, since it no longer needs anything that burly. Which conveniently means I now have plenty of Molex to power the video card and didn't need that cable after all, so into the spares bin it goes. That one also has very few SATA power and lots of Molex, so in go the Molex to SATA power adapters. And the old box's IDE/Molex CD-RW gets swapped for a SATA one so that I don't have to worry about powering Molex stuff with the SATA-only power supply from the Dell (which is incidentally now in a Gateway-branded case).
Power supplies juggled, power up... still nothing. Argh. Research and picking a few friends' brains leads me to discover that I'm doubly on the wrong side of the transition between legacy BIOS and UEFI. I have a computer with legacy BIOS that is dependent on a very specific video mode in order to boot, and a video card that requires UEFI and does not support the required mode. Nevermind the fact that the same card worked in a legacy-BIOS MSI motherboard that is 3 years older. Dell cheaped out on compatibility in some way, and Gigabyte cheaped out on their card being dual-mode, unlike some other variants of that AMD card. So I put the call out on BookFace for assistance and effectively raided someone else's spare parts bin for another video card (GTX 660) and tried again, and that worked just fine, other than being a very tight fit between the back of the case and the hard drive cage.

My son (10) is on a kick watching Linus Tech Tips on youtube, and was asking me why I didn't just build my new PC from parts like they do. My answer was that for what I need, I usually can't touch the price and convenience of "Dude, you're gettin' a Dell!" -- and also this exact hardware integration debacle, while an interesting challenge, ate an awful lot of my time that I'd frankly rather pay someone else to deal with at this point in my life. But I'll happily help him build his next PC if that's something he wants to do together.


Friday, September 27, 2019

Tinder is terrible, but not for the reason you think

I'm ~2 years post divorce. That's not for sympathy, in this context, that only serves to set up the fact that I recently decided that I should start taking some sort of action to get back into dating. Since it's been two decades since I last was in the dating pool, I'm basically starting over from scratch, and honestly, dating as an adult in a major city is almost completely different from the closely packed social scene that is college anyway. So, Tinder seemed like as good a place as any to start. Low commitment in terms of the effort to put together a profile and get to a point where you can potentially meet people (i.e. no huge questionnaire), and I figured it would be ok if I had some missteps where I am awkward, and "not looking for anything serious right now" would be ok, as would something more.

Turns out, the idea might still be right, but the platform is really, really not. I went from signing up to deleting my account in 3 weeks.

While there are other reasons related to the actual framework it provides for human interaction that make Tinder terrible for exactly the reasons you might think, the primary reason I left is that Tinder, the app itself, is awful, and it leads to a terrible user experience. And as the geek I am, I thought there might be some value in writing that up, even though it means having to admit to any readers (all...both of you?) that I was using Tinder in the first place.
I come away from this experience feeling like I've wasted a pretty phenomenal amount of time in the last 3 weeks or so, and wanting to bail on the app that quickly is probably the opposite of what Tinder is going for, since they make their money by showing you ads and getting you to pay for additional tiers of service. Here's a few brief points about why:
  • Navigation and interaction: Pretty much everyone is familiar with Tinder's basic UI at this point as it's entered pop culture - swipe left for no, right for yes. You can also press a heart button or an X if you prefer. But there's a bunch of other stuff overloaded on that basic interaction that makes it counter-intuitive and frustrating. 
    • On the main screen (the one that each new profile defaults to), which is just the picture, work/education, and distance, you can tap on the left or right side of the screen to go back and forth between the pictures, swiping left and right is no and yes for the profile itself, and swiping up is a super-like. Based on the number of people who make a point to note that super-likes are always an accident in their bio, that last bit is something that confuses nearly everyone, and seems to have no actual value for its intended purpose. Want to scroll down a bit to read the rest of the bio that happens to be truncated on this screen? Don't swipe up like you do everywhere else, oops congratulations you just super-liked that person, and there's no way to undo it unless you want to upgrade to a paid tier.
    • In the detailed profile where you can actually see what they've written in their bio, swipe left and right scrolls between the pictures, and swipe up/down scrolls the screen just like every other app on the planet. But here, you cannot swipe right/left for yes/no on the profile, only use the buttons. So you have two completely different modes of interaction, that you are rapidly switching between and must keep that context handy as you switch. What could possibly go wrong?
  • Upsells - Tinder really, really wants you to pay for service, and they are busily making the free tier less and less attractive. The problem is that in the process, they're making their platform less attractive and reducing the perceived value of upgrading. Tinder already feels a bit like a ghost town for a number of different reasons, and limiting access just makes that feel worse because it takes longer for matches to surface. Add in effectively accentuating the bad UI so that they can sell you features that compensate for it like undos, and it becomes pretty disillusioning.
  • Silent failures. Ever get lost, and realize that you've gone in a circle because you start recognizing landmarks? No fewer than six times (aka, at least twice a week), I had the same thing happen on Tinder. "I recognize that girl - I already swiped {left/right} on her." Turns out for reasons that I can't be bothered to troubleshoot, Tinder doesn't always register your swipes, even though the app moves on to the next person as if it did, rather than throwing any sort of error. And it's fairly common, because there's an entry in the FAQ about it that suggests switching from WiFi to cellular data or vice versa, or logging out and logging back in to your account, which means they can't be bothered to troubleshoot it either, but clearly there's some serious fragility in the way that they deal with network connectivity issues. The latter fixed it for me, but since there's no way to know that it is broken, you don't know that you need to do something to fix it. You can swipe and swipe and swipe and swipe, and your only clue there might be an issue is that you start seeing repeats, or you realize that you haven't hit your yes quota (common belief is you get about 50 right swipes per day as a guy) in the typical amount of time.  How's it feel to literally waste an hour swiping when you're already wondering about the usefulness of the app and platform due to low numbers of matches for time spent?
  • Brand confusion: Tinder has two different types of people on it - those still using it as a way to find no-strings hookups, and those using it as a more traditional dating app to meet people for something more serious. Those two types are at complete cross purposes as far as the interaction with the platform. 
    • Tinder only lets you filter your candidates on age range and distance from you. But it does not indicate whether people matching your distance range are there temporarily. It also has a paid feature called "passport" that allows a user to change their location and get a head start on finding matches wherever they're going to be soon. But this means that people who have limited the location so that they only see local people get a bunch of profiles for people who don't live anywhere near them, and that fact may or may not be obvious from the profile, meaning you have to watch carefully for the "nn miles away" to be higher than expected, or to notice that the "lives in" location doesn't sound familiar, or or catch a keyword in the bio. Miss it, and you may "waste" one of your limited daily right swipes on someone who is nowhere near you.
    • The inability to identify and filter which type of Tinder user you are means that everyone tries to filter by saying things in their bio, which still gets ignored, and leads to a situation where (as far as I can tell) women get inundated with messages from the wrong type of guy, and the resulting noise means they don't see messages from users that they might actually be interested in.
  • Opaque algorithm - no one really has any idea how Tinder decides what profiles to show you in what order. One would hope that perhaps it would show you profiles that have already liked you, followed by profiles that have been active recently, so that you're not seeing a bunch of people who have mostly abandoned their profiles or only check them once every 2 weeks and increase the chances of both matches and the subsequent chat interaction between matches. But I think that's probably optimistic and not really backed up by my experiences on the platform and their efforts to sell you access to those that liked you. There also seems to be no weighting given to completeness of profile, so you constantly see profiles that have no bio, only one picture or images that even a very rudimentary image processor could tell is not a person, super low-quality images, or repeated images. An app that lives and dies by the visual doesn't seem to put much effort into that aspect of things. 
I'll readily admit that some of this might be that I was somehow fundamentally "doin' it wrong" on Tinder, and that was more to blame for the fact that after 3 weeks of being on the site daily, I had 3 matches to show for it, 1 of which unmatched me a day after I messaged, the other two never responded to my initial message. I get it; I'm a 41 year old divorcee with 2 kids on an app for twentysomethings, but I think I would have been more willing to tolerate the issues with the app if it led to some level of success. Because it didn't, it just added insult to injury.

Sunday, July 14, 2019

Engineers and complexity, a cautionary tale

This is a story about overly complex engineering, subsection: German, sub-subsection: sports cars. 

As they eventually do, the battery died in my 911 (997.1) sometime in the last couple of weeks. Not just too weak to start the car - stone dead, no interior lights, nichts. I've had the car for >5 years, and I suspect the battery wasn't new when I got it, so it was due, and the car was in my garage, so it's not like it stranded me or anything. But there's still the matter of the battery replacement to deal with. And that, my friends, is a funny story.

As you may be aware, the 911 is a rear-engine vehicle, but the battery is still up front, in the "frunk".
The battery is under that Porsche logo near the windshield washers

Because it's a trunk, and not a hood, it has an electric release, so that it can be opened via a button on the key from outside of the car in addition to the switch in the driver's door sill. 

Betcha you can guess where this is going... Surely the brilliant engineering minds at Porsche wouldn't leave you with no way open the trunk to access a dead battery? Of course not, but being Germans, and fans of both demonstrating their own engineering prowess and overly complex solutions to relatively simple problems, Porsche forgoes the Occam's Razor solution of an auxiliary cable-actuated release somewhere in the car. Well, that's not entirely true - there's apparently one for if you're really stuck, like if the electric release actuator fails, but it requires jacking up the car (remember, jack and wrench are in the trunk you can't get into), and removing the left front wheel and inner fender liner. Also there is an electric release for the engine cover hatch, so there's no point in putting an auxiliary set of terminals back there for jump starting the way some cars with the battery in a weird location have. I suppose in theory you could try to backfeed through one of the cigarette lighters, but those have fairly weak fuses (I've blown them more than once using the factory-supplied 12V air compressor for longer than a few minutes, so I'm not sure.

No, Porsche has an "ingenious solution" to this problem. And there is a procedure which must be followed, that you are completely familiar with because you've carefully read and understood your entire operator's manual, ja? 

Owners Manual

Assuming that you are starting with a locked car:
  1. Manually unlock the driver's door with the key.
  2. Locate and remove the access cover for the fuse panel in the driver's footwell. (No interior lights means it's going to be dark under the dash, have fun with that.)
  3. Locate a red plastic bit with a picture of a car with the hood up in the upper right corner of the fuse panel (i.e. the part furthest away from the door). It will be pushed in far enough that you can't actually grab it with your fingers, so use the small metal tool attached to the back of the fuse panel cover to catch and pull this plastic bit so that it sticks out of the fuse panel. 
  4. Source a set of jumper cables and what Porsche's manual refers to as a "donor battery". Yes, it can be attached to another vehicle, but the manual has pictures of it just being a spare battery you happen to have lying around.
  5. Connect the positive jumper cable to the now-exposed metal contacts on the red bit in the fuse panel.
  6. Connect the negative jumper cable to the door latch. Note that because you opened the car without disarming the alarm via the keyless entry, the alarm will immediately sound. So you're going to be rooting around under the dashboard of a Porsche, while the alarm goes off. Nope, not trying to steal the car, honest! 
  7. Pressing the trunk release button on the key will disable and silence the alarm, and open the trunk, after which you can disconnect the cables and access the battery as needed.
Other important notes: This does not provide enough power to jump start the car, nor will it run anything else in the electrical system. It is only to power the modules that run the keyless entry RF receiver and the trunk actuator. I know this because I tried 3 or 4 times to open the trunk via the switch right next to me in the driver's door sill, which does not work. Additionally, the ignition switch in these cars is all electronic. When you turn the key to any position, it returns to the original position once you release it, so there is a mechanical catch that keeps you from removing the key when the ignition is on. When the battery is dead, it fails closed, so if you insert the key and turn it without realizing the battery is dead like I did today, it latches on your key but does not have any power to release, meaning your key is now stuck in the ignition (though it did release my key when I applied power to the terminals for the third time). When the key is in the ignition, the buttons on the key don't seem to work, so I had to go get my other key to actually open the trunk.

That red bit hiding under the 404 on the top right is what you're looking for
So now we have access to the battery, but there's still some fun to be had. The battery is in the very center of the car, and the hood trunk opens toward the windshield, meaning that even with the hood open, there's not a lot of clearance near where the battery is. 
still a long reach from the side

Faced with several equally bad options for how to remove the 53 lb (~25 kg) battery by myself, I ended up standing in the trunk, still bent over to avoid smacking my head against the hood, but much closer to the battery and thus with a much shorter lever length than if I'd tried to do it from either side or the front of the car. I ended up basically deadlifting it like a kettlebell since it had a set of handles in the center. Installation is, as Chiltons is fond of saying, the reverse of removal, and thus equally awkward. I'm also not sure that there is any particularly easy way to do this as a team lift either. A friend joked that there's probably some $3000 Porsche tool to make this process easier. It's a wonder I didn't hurt my back.

If there's any moral to this story, it's a cautionary tale on dismissing the simplest solution, and it's based on some experiences I've had troubleshooting networking and computer issues, where my predecessors or vendors were enamored with solutions that were too cute by half because it showed how smart they were, and basically failed the 2AM test*, or violated the principle of least astonishment, or both. 


*The 2AM test is a test of complexity and ease of understanding: simply, whether you, as someone who didn't design it originally, can figure out the problem and fix it when it wakes you up out of a good dream at 2AM because it's broken.

Friday, June 14, 2019

Adventures in non-Raspberry flavored cheap SoC boards

I was recently looking for a replacement for my old Odroid C1, which was serving as my local DNS server, but has basically become orphaned, because all of the Linux distributions I’m aware of for it, including Hardkernel’s official ones, are based on Debian Jesse, which is rapidly approaching EOL and already has had some of its package repos deprecated so updates are thin and the writing appears to be on the wall. My preferred distro was dietpi, but after cruising their forums a little, I found one where they said “we would roll a Stretch based image, but the one guy who has a C1 can’t find it” which made me realize that depending on that is setting myself up for failure at some point in the future anyway. Plus the maintainers of dietpi have irritated me twice now by first forcing an upgrade between versions via wipe and reimage about a year ago, and then inducing some bug that breaks my networking every time I do an upgrade in-place via their update mechanism (likely because they weren’t actively regression testing with my specific flavor of OS and hardware) which has resulted in me being stuck on the current version unless I do a clean install (again) because the upgrade now also fails due to the aforementioned expired repos.

A regular, current-gen Raspberry Pi is sort of the default answer here, because none of these support issues are a concern, but the fact that there is still no 64-bit version of Raspbian for the ARM64 (v8 and later) based machines, and the answers on most other pi-friendly distros sound a little too much like “compile your own” for my taste, I went looking at alternatives. Stumbled across the Atomic Pi not too long ago. Same basic price point as a Pi, but with a quad core Intel Atom and real (not USB2) Ethernet, plus built-in eMMC storage for the OS. Seems like pretty good news.

The slightly less good news is that it’s a different form factor than a Pi, so this isn’t exactly a direct drop-in alternative for whatever pi-based project you were planning.

Atomic Pi as shipped, with a RPi 2 in a case for size comparison


It’s also simultaneously more and less novice-friendly. More, in that it comes preloaded with an OS (Ubuntu 18.04 desktop) such that plugging it in will produce a functional computer right away without needing to buy storage and burn an image onto it. Less, because… well, about that whole “plug it in” part:

It has no typical onboard power interface. No micro-USB, no DC barrel connector. You need to feed it regulated 5vDC @3A, so in theory you could wire up something to use a micro-USB or USB-C wall wart charger but you’d have to include the right bits to convince the charger that it shouldn’t default to the 500mA that is USB’s failsafe output for things it can’t negotiate charge rates with. The options available are to buy and use the full breakout board, which has a molex (old-style hard drive power) connector on it, or the mini breakout board, which only exists to serve as a physical adapter to connect to the GPIO socket so you can plug in a DC barrel connector. The first seems less than optimal unless you already have a spare computer power supply laying around, and it’s not likely to be very efficient as a means to power something that small. Maybe if you want to power multiple Atomic Pis with one bench power supply that makes more sense. Otherwise I suppose maybe they expect you to just use a spare connector from another nearby computer and be ok with the dependency on the other machine? Or you can do what I did, and buy a set of jumper wires with male to male dupont connectors and a wall wart that includes a barrel connector with screw terminals. The instructions tell you to use 2 pins for each of positive and negative to ensure you don’t overdo the current draw on the tiny wiring.
Atomic Pi with dupont connectors and barrel connector for power

Also there is a serial port, but it requires wiring to a UART on the board unless you buy the full breakout board. https://www.digital-loggers.com/api_faqs.html#SerialPassword

The only case options I’m aware of are in the form of something you need to 3D print yourself, and because of the dupont pins, which connect on the bottom and stick straight out a good ½” from there, it has to hang off the edge of whatever it’s sitting on, so I suspect even the case design the manufacturer is providing will require modification. Haven’t spent the time yet to investigate this since it’s going to live in my utility room and doesn’t really need a case at the moment anyway. 

close-up of dupont connectors on bottom

Initial boot does look for PXE, both IPv4 and IPv6, so I suspect the best bet is to bootstrap it headlessly is via PXE and push config to it directly. 

Initial access if you’re not doing PXE requires keyboard and mouse (and there’s only one USB port, so you need a hub too) and HDMI. Login splash screen defaults to user atomicpi, but the password is unique per device, so you can’t just figure out what IP it got in DHCP and ssh directly in. The password is displayed in a box next to the login. Type it in and you get presented with typical Ubuntu desktop.

The instructions they supply don’t tell you to write the password down, but you really want to if you want to do anything that requires sudo. I had to log out and back in to get it. It’s apparently stored in a file somewhere, but I can’t remember which one (It triggered a “hey what should I do” prompt in apt-get upgrade because it wanted to overwrite the file with the stock maintainer’s version for some package. Also I was having trouble doing anything in the GUI that required sudo auth, because it kept asking for root, and wouldn’t accept the atomicpi user’s password, nor would it let you change the user it was authenticating. Sudo worked just fine with the atomicpi user's password from CLI.

The preinstalled version of Ubuntu has docker running by default, but didn’t have traceroute, dnsutils, or fail2ban preinstalled, so part of your hardening includes throwing the necessary switches to disable docker if you’re not using it for your application. Since this is Ubuntu desktop and not server, it's also missing netplan, the new hotness for configuring IPs, meaning you're still (for now) editing /etc/network/interfaces like you'd expect to, and I threw the necessary switch to tell linux not to rename eth0 to something stupid.

Also I am starting to suspect that it doesn’t like having the HDMI cable unplugged and replugged, because while temps were fine and it has been otherwise stable, I have managed to get it to lock completely up on me twice when trying to switch back to the desktop by switching HDMI cables on the back of my monitor that only has one HDMI input.

Network performance:

Iperf3 shows 770mbps throughput between local servers on the same LAN, so the GE is pretty stout for a SoC system like this, though I was expecting a little closer to linerate than that.

Disk performance:

pi@rpi3b+:~ $ sudo hdparm -Tt /dev/mmcblk0 (technically a Samsung Evo 32G microSD MB-ME32GA/AM, claimed 95MB/s)

/dev/mmcblk0:

Timing cached reads: 1408 MB in 2.00 seconds = 704.05 MB/sec
Timing buffered disk reads: 68 MB in 3.02 seconds = 22.48 MB/sec

atomicpi@atomicpi:~$ sudo hdparm -Tt /dev/mmcblk0
(built-in eMMC)
/dev/mmcblk0:


Timing cached reads: 2116 MB in 2.00 seconds = 1059.33 MB/sec
Timing buffered disk reads: 466 MB in 3.01 seconds = 154.90 MB/sec

Temperature:

With all 4 cores at 100% the temp hovers at 57-59°C on each core using only ambient air cooling via the heatsink at typical room temp (72°F).

Amusingly, putting the device under an exhaust fan from another (fairly lightly loaded) device such that there’s warmer than room temperature air moving across the very large heat sink drops the temps under load by almost 15°C. Appears that there’s a good bit of cooling capacity available if you wanted to put this in a slightly less temperature controlled environment without it throttling, especially if you’re willing to add a fan, though there are no mounts on the heatsink for a fan, so chances are you'd have to design the case with that in mind.

My typical CPU benchmark is the distributed.net client, running rc5. Been running it on various computers since I was in college, so I have lots of comparisons available.

The rate on this box is 15.09 Mkeys/sec. Intel is being weird about TDP and quoting “SDP”, but it appears like TDP might be 4W, which appears to mean that it’s roughly equivalent in raw numeric horsepower to a 14 year old AMD, but at less than 1/10th the power draw.

By comparison, here are some other boxes in the fleet:

ODroid C1 Amlogic S805 quad core, ca 2015, 8.6 Mkeys/sec (32 bit mode)
Pi3b+ (Cortex-A53 quad core), 9.4 Mkeys/sec (32 bit mode)
Pi4b (Cortex-A72 quad core), 11 Mkeys/sec (32 bit mode)
AMD Athlon 64 X2 4800, 2 core ca. 2005, 110W TDP, 17 Mkeys/sec
Nvidia Geforce 9500, ca 2008, 50W TDP, 20 Mkeys/sec
Intel i7-2600 4 core + HT, ca 2011, 95W TDP, 44 Mkeys/sec
Intel i7-8750 6 core + HT, 45W TDP 303 Mkeys/sec
Intel i7-9600 8 core, no HT, 65W TDP, 87 Mkeys/sec
Intel UHD Graphics 630, 96 Mkeys/sec - yes, Intel has implemented OpenCL on their on-chip GPU such that it can now run the client and this is a simultaneous number with the above i7.
Nvidia GTX 660, 130W TDP, ca. 2012, 450 Mkeys/sec
Nvidia GTX 1050Ti, 75W TDP, ca. 2016, 1.6 Gkeys/sec
AMD R9 270, 150W TDP, ca. 2013, 2 Gkeys/sec (!!)