↝ OWC / MacSales.com... ↜
↝ diglloyd Deal Finder... ↜
Buy other stuff at Amazon.com...
Optimizing Developer Builds Performance
Related: CPU cores, eSATA, hard drive, how-to, Mac Pro, MacBook, optimization, software
Software developers are always looking for a faster way to build their code. The answer to faster builds is surprisingly simple, but it does depend on the type of build.
Two very different types of builds are documented here.
Building the GlassFish V3 application server
The GlassFish V3 application server is an open-source Java EE enterprise server consisting of a large number of modules. Its build system is complex, based on the popular maven 2.0 environment. Yet it is more or less brain-dead in terms of exploiting system resources: it runs single-threaded for most of its invocation, though some internal threading does occur, making dual-core systems worthwhile.
I tested the GlassFish V3 build as of mid-December 2008. I did an initial build, which downloads all dependencies from internet maven repositories. I then repeated the following command five or six times, to verify consistency in results: "mvn clean; mvn -o install". The "-o" flat tells maven not to access the network; it builds locally.
The systems were clones of each other, and both used the same model Hitachi 320GB hard drive, so the runtime environment was nearly identical.
Blazing fast, 1TB, 2TB, 4TB, 8TB.
The results are striking: the fast Hitachi 320GB hard drive was just as fast as a RAM disk, and faster than any external eSATA solution. This is not too surprising, given Mac OS X caching, and the fact that builds do lots of small I/Os, which are not efficient for eSATA on the MacBook Pro, and do not benefit from the striped reads or writes from a RAID (32K stripe size).
(a) So long as the internal hard drive remains fast (not too full), builds will run at top speed without any special effort; a RAM disk (risky in the event of a crash) offers no meaningful help.
(b) External eSATA does not help and a striped RAID actually degrades performance.
(c) Build speed scale closely with CPU clock speed.
|Build GlassFish V3|
|Configuration||Build time (seconds)|
|MBP 2.4GHz, 4GB, internal drive 15% full||188
196, 185, 189, 183, 189
|MBP 2.4GHz, 6GB, internal drive 15% full||
191, 196, 196
|MBP 2.4GHz, 6GB, eSata*||
|MBP 2.4GHz, 6GB, eSATA stripe**||
|MBP 2.4GHz, RAM disk||187
186, 187, 187, 176
|MBP 2.8GHz, 4GB, internal drive 14% full||154
156, 149, 157, 151, 155
|MBP 2.8GHz, 4GB, eSATA stripe**||155
|MBP 2.8GHz, 4GB, RAM disk||
* Single 1TB Western Digital RE3 via Sonnet SATA Pro, FirmTek SeriTek/2EN2 Details.
** Striped dual 1TB Western Digital RE3 via Sonnet SATA Pro, FirmTek SeriTek/2EN2 Details.
The MacBook Pro 2.8GHz (2008 unibody) showed a 22% performance advantage over the previous generation 2.4GHz model. But this is not very impressive: its clock speed is 17% faster, accounting for most of the difference; its faster memory and larger CPU cache must account for the rest. It means that a previous generation MBP at the same clock speed would perform at effectively the same speed, so get a refurbished at a huge discount while they last (late 2008/early 2009).
Building with Apple’s XCode
XCode is Apple’s integrated development environment. It is highly efficient, using all available CPU cores and fully exploits a quad-core Mac Pro at 400% CPU usage (an 8 core system would likely be fully exploited as well).
For this test, I built a universal binary DiskTester (32/64 bit for PowerPC and Intel), which means the entire application is built 4 times for the four combinations.
Bottom line: XCode scales linearly with the number of cores! Fast builds means as many CPU cores as possible. Build speed also scales ~linearly with the clock speed, but that is of minor importance relative to adding even a single extra core.
|Build DiskTester 64/32 bit for Intel and PPC|
|Configuration||Build time (seconds)|
|MBP 2.4GHz, internal drive 15% full||170
170, 171, 169
|MBP 2.8GHz, internal drive 15% full||
|Mac Pro, RAM disk||
|Mac Pro, core #4 disabled||97|
|Mac Pro, cores #2, #4 disabled||146|
|Mac Pro, cores #2, #3, #4 disabled||283|
* MacPro is 2006-vintage quad-core 3.0GHz
Protect your data with fast storage and backup.
Get the best system for your money!
Diglloyd consulting starts you out on solid footing. 🖥
For the GlassFish V3 build, the dominant factor is CPU speed, multiple cores are of little relevance due to the inefficiencies of its maven-based build.
For XCode, the dominant factor is the number of CPU cores, with CPU speed a secondary factor.
$899 SAVE $380 = 29.0% $19 FREE ITEMS Apple 12.9" iPad Pro (Mid 2017, 512GB, Wi-Fi + 4G LTE, Gold) in Electronics: iPads and Tablets
$5999 SAVE $700 = 10.0% $49 FREE ITEMS Apple 15.4" MacBook Pro with Touch Bar (Mid 2018, Space Gray) in Computers: Apple Macs
$1099 SAVE $200 = 15.0% Apple 21.5" iMac with Retina 4K Display (Early 2019) in Computers: Apple Macs
$649 SAVE $150 = 18.0% Olympus OM-D E-M10 Mark III Mirrorless with 14-42mm EZ in Cameras: Mirrorless
$898 SAVE $200 = 18.0% Panasonic 8-18mm f/2.8-4 Leica DG Vario-Elmarit ASPH. in Lenses: Mirrorless
$50 SAVE $110 = 68.0% Sennheiser PMX 684i In-Ear Neckband Sports Headphone Kit for iOS… in Electronics: Audio