Nat! bio photo

Nat!

Senior Mull

Twitter Github Twitch

Building a new Killer Box for Linux (?) development - Part 3

Continued from Part 2

Lots of boxes arrived yesterday. One aspect, that’s very much in favor of not building your own system is the large amount of trash that buying everything in discrete parts produces. The packaging by and large is pretty nifty, but I used to care about this more. Nowadays I would be happier with much less packaging.

PC assembly has gotten even easier over the years. Especially the placement of the CPU is now a cinch. During assembly I remembered, why I prefer big cases.

For one, I couldn’t mount the liquid cooler at the top. There was just no space with the mainboard filling up the whole cavity. And then connecting everything up in a compact case is very cramped.

Quick first impressions

Component Manufacturer/Model
Mainboard Asrock TRX40 TAICHI TRX40
CPU AMD Ryzen Threadripper 3970X 3.7GHz
Cooler XILENCE LiQuRizer LQ240
RAM 128 GB G-Skill D4128GB 3200-16 RipJaws V K4 16-18-18-38
GFX MSI GeForce RTX 3060 Ti 8GB
SSDs SSD 2TB Western Digital SN850 NVMe Black PCIe 4.0
Power Corsair RM750 750W
Case Fractal D. Define 7 Compact

The mainboard looks a little tacky, but feature wise its very nice. I especially like that I got an extension board, with which I can install 4 more M.2 SSDs.

The CPU packaging was pretty much over the top. Like I purchased a Rolex watch or something. But installation has been super simple and the momentum screwdriver for fastening the CPU in the socket made it even more idiot-proof. Cool.

From the waterpump of the cooler I don’t hear any noises and the fans can be made to run quiet, if the system is idle. The system does rev up when its working though. A real positive side effect of water cooling, is that there is more room on the mainboard, where you don’t have to worry about a massive air-cooler and its placement and possible entanglement with other cables.

The RAM worked. :)

The MSI is a huge card with three fans. It just barely fit into the compact case. It’s the loudest component when starting up. Maybe the two fan variant is a better buy ?

The SSD were easy to install and they worked. But I underestimated how much stuff I have. 6 TB would have been better. One disk has 1TB free the other 0.5 TB.

The only component I might replace is the PSU (but I probably won’t). Its fan noise could be better, though it is quiet. The PSU fan is supposed to stop, when its idle, but I guess this system never lets it idle.

The case is just as good as my Phanteks in every respect. Very, very good. Out of sheer luck, the Define 7 Compact has a USB-C front plug and the motherboard has a spare USB-C port. I didn’t remember to check the case for compatibility, but everything fits perfectly.

Quick Review

Once I got the fans dialed in, the new box is much quieter than the old one.

Initially the Ubuntu 21.4 install set up the “Nouveau” driver and put me into Wayland. Things appeared fairly stable, but I am sceptical. The graphic card fans kept running at 100% though and were unpleasantly noisy. When I changed to the proprietary NVIDIA driver, the fans shut off. A quick check with OBS in Wayland, showed that I couldn’t capture “Firefox” or “Terminal” just like before. So no dice… Back to X11 and the proprietary driver.

MEMO

In the BIOS don’t set the fan connctor, that is feeding the watercooler pump to “silent”. This seemingly turns it off. I saw temperatures climbing rapidly and had to shut off the machine before it fried itself.

Boot times are much better now. After the BIOS is through, the machine boots into the desktop in like three seconds. Unfortunately the BIOS boot process is still fairly length. There is an ultra fast BIOS boot option, but then you can’t get back into the BIOS. I might try this some time as there is a BIOS CMOS reset button on the board…

Old box notices new box and behaves better

Ironically, once I moved the old box from Display Port to HDMI and removed the DVI connection, the old box reboot time was drastically improved. That makes no sense to me, but whatever.

The new box can be put to sleep and brought back. That’s also fairly huge, though not as huge as it would have been, if boot times were still abysmal.

Benchmarks

Geekbench 5 results. Now I knew these numbers before I bought the new box. I looked mostly at the “clang” result to estimate the gain to be had:

Old box

Weird differences in Geekbench, I combined two best results of Geekbench5 Run 1 and Geekbench5 Run 2

Single-Core Score Multi-Core Score Clang Multi-Core Score
755 12235 16459

New box

I only did one run of Geekbench 5 as the scores looked sensible:

Single-Core Score Multi-Core Score Clang Multi-Core Score
1310 24405 36894

Massive build of MulleFoundation

First the benchmark that vindicates the purchase. Here I rebuilt all projects of the MulleFoundation. That’s something I would do quite often during a mulle-objc release. A semi-annual event…

cat <<EOF > REPOS
MulleObjCArchiverFoundation
MulleObjCCalendarFoundation
MulleObjCContainerFoundation
MulleObjCExpatFoundation
MulleObjCInetOSFoundation
MulleObjCKVCFoundation
MulleObjCLockFoundation
MulleObjCMathFoundation
MulleObjCOSFoundation
MulleObjCPlistFoundation
MulleObjCStandardFoundation
MulleObjCUnicodeFoundation
MulleObjCValueFoundation
Foundation
MulleFoundation
objc-compat
mulle-bunchobjects
mulle-testgen
MulleObjCStandardFoundation-startup
Foundation-startup
MulleFoundation-startup
EOF

mulle-project-all -p -m mulle-sde clean all
mulle-project-all -p -m mulle-sde craft
mulle-project-all -p -m mulle-sde clean all
time mulle-project-all -p -m mulle-sde craft

I am doing this twice to have the caches filled. It’s not much of a difference though.

This builds all projects in parallel, and as each project is built with ninja all files are built in parallel (up to load)

Old box

These are two Intel Xeon E5-2660 v3 @ 2.60GHz CPUs with 10 cores each:

real  1m25,387s
user  40m6,258s
sys   5m12,614s

If we add user and sys together and divide by real, I believe we have a measurement of the parallelism:

Time Seconds
real 85
user 2406
sys 312
   
parallelism 31

A speedup of 31 with 20 cores and 40 hyperthreads sounds reasonable.

New box

One AMD Ryzen Threadripper 3970X 32-Core Processor:

real  0m44,872s
user  28m35,786s
sys   5m23,769s

So that’s approximately two times faster than the old box.

Time Seconds
real 45
user 1716
sys 323
   
parallelism 45

That’s 45 with 32 cores and 64 hyperthreads. It might be a case of slightly diminishing returns with the more cores available, but it still scales fairly nicely.

Small build of MulleFoundation

The second benchmark casts some doubt over the purchase though. Only one project is being rebuilt. That can happen quite often during daily development:

cd MulleFoundation/Foundation
mulle-sde clean all
mulle-sde craft
mulle-sde clean all
time mulle-sde craft

Old box

real  0m36,941s
user  3m40,608s
sys   0m29,265s
Time Seconds
real 40
user 221
sys 29
   
parallelism 6

This may indicate that a six core machine with a higher clock rate might be doing better.

New box

real  0m22,185s
user  1m57,616s
sys   0m21,850s

That’s only like 1.5 times faster, not 2 as expected.

MEMO

Initially the time i got was 26s. I had forgotten to install ninja. ninja makes a huge difference.

Time Seconds
real 22
user 118
sys 22
   
parallelism 6

Parallelism ist just about the same as the old box. The reason why this isn’t more, is because mulle-objc consists of many small projects, that just can’t saturate the available cores. Six is likely close to the average number of files to build in my projects. Throwing more cores on this problem won’t make it faster.

Power consumption

The new box isn’t exactly green though…

Old box

Power usage State
70W Idle, Ubuntu Login Screen

New box

Power usage State
5W Sleep
85W Idle, Ubuntu Login Screen
150W Desktop, editing something in Sublime Text

Conclusion

Old and New Box

There are some very nice quality of life improvements that the new box brings. It is in all respects a better machine than the old box. But the old box isn’t yet obsolete in 2021.

I didn’t mind the somewhat louder old box, tough the relative quietness of the new one is appreciated, when it is quiet. As the workload increases the fans rev up and that may eventually get on my nerves. I might have to tweak this some more.

I frankly expected more improvement in development turn-around. For day-to-day development eight cores are probably sufficient.

It might be necessary to restructure my projects, so that more files are compiled during a cmake/ninja invocation to improve parallelism. Project composition is currently done at the link level with mostly static libraries. Maybe the composition should be at the source file level at least as an option.

So with hindsight, I probably could have waited a bit longer with the purchase of a new work horse.


Post a comment

All comments are held for moderation; basic HTML formatting accepted.

Name:
E-mail: (not published)
Website: