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
|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.
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.
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.
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:
|Single-Core Score||Multi-Core Score||Clang Multi-Core Score|
I only did one run of Geekbench 5 as the scores looked sensible:
|Single-Core Score||Multi-Core Score||Clang Multi-Core Score|
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)
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:
A speedup of 31 with 20 cores and 40 hyperthreads sounds reasonable.
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.
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
real 0m36,941s user 3m40,608s sys 0m29,265s
This may indicate that a six core machine with a higher clock rate might be doing better.
real 0m22,185s user 1m57,616s sys 0m21,850s
That’s only like 1.5 times faster, not 2 as expected.
Initially the time i got was 26s. I had forgotten to install ninja.
ninjamakes a huge difference.
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.
The new box isn’t exactly green though…
|70W||Idle, Ubuntu Login Screen|
|85W||Idle, Ubuntu Login Screen|
|150W||Desktop, editing something in Sublime Text|
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.