pixy (DFI ITOX ST102-CS-SVR)
Table of Contents
Summary
TODO
Notes
TODO
Hardware
Make | DFI |
Year | 2021 |
Model | ST102-CS-SVR |
Chassis | ST100 |
Power Supply | EDAC EA11011D-1200 12V 8.33A |
Processor | Intel Core i5-8500T |
Memory | 32GB DDR4 2666 (Micron MT40A2G4WE chips) |
Ports | 4x USB A 3.1 |
2x RJ-45 LAN | |
HDMI 2.0 | |
2x DisplayPort 1.2 | |
4x DB-9 Serial | |
2x Front USB A 2.0 | |
2x Front Audio Jacks | |
Graphics | Intel UHD Graphics 630 |
Storage | 1TB NVMe SSD Micron MTFDHBA1T0TCK |
Display | - |
Int. Peripherals | Intel I219-LM Gigabit Ethernet |
Intel I211 Gigabit Ethernet | |
Ext. Peripherals | |
Dimensions | |
Length/Depth | 23.0 cm |
Width | 21.9 cm |
Height/Thickness | 7.5 cm |
Weight | TODO 2.29kg (5 lbs 1 oz) |
Software
Operating System | |
Unique applications |
Log
A moderner frigate machine
I was looking for something to replace Yamato since it is GPU crashy. Intel 8th gen seemed like a decent compromise between cost, performance, and something that I thought would be stable. I ran across this little server with two NICs in a compact ITX case. The price seemed OK, though it was more than other capable mini PCs. I hoped to avoid the whiny fans though so I went for it.
Nice drives
I got the machine and opened it up. It had a 1TB 2.5" drive. I thought this was the Windows drive so I pulled it, but Windows kept booting. I looked around, but none of the M.2, Mini PCIe, or PCIe slots were occupied. Pulling the board I found another M.2 slot on the bottom populated with a 1TB NVMe SSD. It's a bit older so the write speed isn't all that, but 2.5 GB/s reads, and 570 MB/s writes is pretty good.
I didn't know what drives there were going in, but after finding these two I feel pretty good about how much I paid.
Not so quiet, Case mod
It turned out to be pretty loud. Due to the fan configuration only the CPU fan could be controlled. I happened to have a spare Thermalright AXP90 X36 cooler which fit the 75x75mm mount of the LGA 1151 socket. I installed it, but due to component locations I had to flip the mounting bracket. With the mounting bracket flipped it no longer fit behind the motherboard. So I modded the case.
The new heatsink is more massive, but the fan is very close to the drive mounting plate. I'm probably going to remove the plate, but I sketched out a some possible holes I could cut to let air flow. The new cooler weighs 258g, while the old one was 164g. It is also a bit heavier because the larger fan which also has a plastic frame.
It's not the prettiest, but I took two measurements for each heatsink nut from the motherboard stand-offs then located the new holes. I started with a step drilled hole, then sketched in the rest of the bracket and filed it out.
I had to trade the rubber feet out for slightly taller ones, but I have an idea for a slightly better solution. The current solution leaves exposed holes, and steel bits on the bottom that might scratch things. My plan is to get a piece of metal/wood/plastic, and mount it under the case with some little spacers, then attach the original rubber feet to that.
The fan situation is just a single 4-pin header that was split. The CPU fan was controlled by PWM, but the chassis fan got straight 12V.
I traded the 60mm chassis fan for a Gelid Silent 6, but since I couldn't control it, I used a 3-pin adapter with a resistor in-line (10 or 12 ohm I think) to cut the voltage a bit. After tuning the BIOS fan control this machine is no louder than the workstation it sits on.
Serial Setup
My workstation has a serial port header. This machine has 4 serial ports, and the ability to redirect the console to one or more. So I went to work putting a serial header in dreadnought which lead to a whole saga of my workstation breaking.
That put a nice damper on things so this sat for a few days.
Serial Setup Again
The serial console is working great for accessing BIOS, but we need a proper OS install with serial support too. Why stop there though. We need to install the OS with the serial console.
What does that look like? You grab your regular install ISO, unpack it, modify some things, repack it, and you're off to the races. Right? No, you failed. We've got other things to do though so I did the install the old fashioned way.
If you want to read about my failure (or maybe my future success) you can check out: Installing with serial consoles
So the install is done, but we're not done discovering new ways to fail. Onwards to the next cool thing. Ansible configuration management. That's right, we're going to automate every last bit of configuring this machine from configuring serial ports, to docker, and frigate.
Our starting point is a machine with a configured network interface, and an SSH server, both of which were achieved by the installer.
Hiding the heatsink holes
Previously, I cut holes in the bottom of the case. They need to be covered to prevent scratching things, and to look nice.
I got some acrylic sheets. The plan was to use one with a cut-out to fit around the CPU cooler mounting bracket, then a second one to cover it up.
To cut them to size I used a steel straight edge, and a utility knife to score both sides. The first attempt failed with the break wandering. Next I scored more deeply, and clamped them to a table with a wood block, and used a second wood block to snap the piece off. The amount of force needed to snap them was still surprising. No pictures of the process.
For the middle cut out I just drilled a hole, and used the scroll saw to cut a window. The finish is rough, but that gets covered up.
The sheets are held on by the original feet with some longer M3 button head screws.
More memory
I wanted more memory, but didn't have it, or did I?
I had a single 16GB stick, and forbidden had a 16GB stick. I looked at them, and they are both Micron chips. The first stick was marked D9TBJ, and the other D9TZX.
Micron has a FBGA parts decoder that will give you the part number. Then you can look up the data sheet, which lets you decode the last bit of the model number, and actually tell how fast your chips are.
FBGA Code | Part Number | Speed | CL |
---|---|---|---|
D9TBJ | MT40A2G4WE-083E:B | 2400 | 16 |
D9TZX | MT40A2G4WE-075E:D | 2666 | 18 |
Noting that these were both marked as DDR4-2666 you can see that cheap RAM sellers like to inflate numbers. Anyway, my old sticks were Transcend TS1GSH64V6B (DDR4-2666 CL19) so even the slower stick is a slight improvement.
When I loaded them up the machine chose DDR4-2666 CL19, so I ended up at the same speed, but now I've got 32GB.
Memtest86+ bandwidth weirdness
Of course I had to run a memtest to ensure these two different sticks got along. I got worried when I tested this machine before because the bandwidth Memtest86+ reports seems quite low.
Intel says their i5-8500t has a max of 41.6 GB/s.
Memtest86+ reports 14.2 GB/s. Meanwhile I'm also running a test on my i5-3210M Mac Mini that reports 15.7 GB/s for /DDR3-1600. What gives?
What should you do when a benchmark disagrees with your expectations? Run another benchmark.
I needed a Linux one, because Linux. A search found sysbench, and this article on how to do it. In this article a curious thing was said:
Make sure to run sysbench with only 1 thread, when testing ram speed. If more than 1 thread is used, the reported speed will be higher. So if you use the –threads option it should always be set to 1.
Why wouldn't I want the speed to be higher? But performance was worse than even Memtest86+ reported, only 13 GB/s. So naturally I ran it with 6 threads on my 6-core CPU. Now I get 41 GB/s.
The mystery numbers Memtest86+ reports seem to be single threaded.
I found a similarly concerned issue, and that person was nice enough to link to the relevant code which is indeed just some single threaded assembly.
Mystery solved, right? Probably, I'm no expert.
Partial drive solution
Due to the limited space I needed some creative solutions for adding storage.
Initially I failed to find a low-profile NVMe + SATA combo PCIe adapter so I designed my own. I ordered some PCBs, but then I realized I forgot to adjust trace lengths. When I got the PCBs the prep by JLCPCB was a little disappointing. I made the PCB taller because it was a requirement for V-cut on the edge connector, but it looks like the cutter barely touched it.
It would have looked something like (missing M.2 connectors):
Before I got around to ordering components I stumbled on Silverstone's SST-ECM28. It's a little pricy at $27, but I guess you can do that when you're the only one making such a thing. The components to complete my boards probably would have cost as much, and I might have needed to redo the board anyway. This seemed like a good compromise for now.
I stuck in a 1TB SATA SSD, and a 16GB Optane (mostly to verify functionality).
It looks like:
I still need to find a suitable 2-4TB drive, which might end up being spinning rust.
This still leaves a free SATA port. If I want there to be a 2.5" drive I can cut a hole in the old drive mounting tray (for CPU fan clearance), and add it back.
This also leaves the Mini-PCIe, and M.2 E Key sockets to fill. They might get a Coral TPU, and 2.5GbE interface respectively.