Ryzen is for Programmers

When I heard about AMD’s Ryzen series CPU launch I immediately wondered how much performance I could get out of one. This article relates my experience building a PC to replace my much loved but aging 2013 Macbook Pro with a Ryzen powerhouse. First I’ll share the reasons why I wanted to build my own PC. Then I’ll run through the build process. At the end are my programmer oriented task timings comparing my new machine with my laptop.





Why build a PC?

Tim, do you *really* need a faster computer? Aren’t you just editing text files?

Ha ha ha yes. Ultimately I am just editing text files, and could easily do that on my favorite PC of all time, my university days 386. But those little text files drive a system, and that system is a hungry bear. My work involves back-end development, web interface development, browser testing, and video conferencing. So let’s take a look at what a day in my development life looks like, and why compute power matters to me.

Back-end service development:

Our development environment consists of 12 docker containers in a VirtualBox host. The containers provide a database, the core logic service, an event pipeline, data service, and Nginx routing. All of them except for the database and Nginx proxy are Clojure services that use between 500 MB and 8 GB of memory in production. In development they squeeze into 8 GB of memory. On my Macbook Pro I cannot fit two customer specific environments into the 16 GB of memory available. An attempt to run them side by side results in so much thrashing that the only way to regain control is to hard reboot. It’s a fairly heavy development environment, I’ll be the first to agree, but not unusually so. The biggest advantage of running a full stack is that it is pretty close to how the software gets deployed to production, so I can do end to end testing.

Web interface development:

Our User Interface (UI) is a Reagent/ClojureScript app. As you might have guessed already from previous posts I really like Reagent/ClojureScript. Using the same language, tools, and mental models on the front end and back end make it easy to work features that traverse the whole system. Our UI has grown to be about 7k lines of code. Still a small/medium sized code base by most measures, but in the realm that performance while developing is becoming a drag. ClojureScript has slow initial compile times. As your project gets large you end up with many dependencies and this leads to hundreds of files being loaded in development mode. And if you want to test the advanced mode compilation output, you need to be patient for a full build on every change (so don’t make too many mistakes with that!). Also the page itself can end up doing more work than I’d like. In order to be able to tune it, I need to be able to run and profile the slow code, then do it all again.

Browser testing:

I run virtual machines for IE8, 9, 10, 11, and Edge. On my Macbook Pro they crawl.

Video conferencing:

Our development team consists entirely of promiscuous pair programming practitioners. That means we all spend all day with video chat on and sharing our screens. Tmate is the least resource intensive way for us to share our terminals, and often prefered for this reason. Typing responsiveness is excellent, so bouncing between driver and observer is easy. Sometimes Tmate isn’t enough. Sometimes we need to share a browser screen. I like using Cursive (a Clojure IDE), which doesn’t work over Tmate, so I share that too. We use screen sharing regularly. Google Hangouts was way too resource intensive for doing work while conferencing. Instead we use zoom.us, which is a native video chat application. Zoom is much less resource intensive, but still uses at least 15% of my Macbook Pro when pairing. When I screen share that goes up to 30% and starts to affect the responsiveness of my system. Sometimes we stop sharing and mute video while a process is starting up. Pair programming is fantastic, but it can be hampered when my system is under heavy load.

Tim, why didn’t you buy a 2017 Macbook Pro?

Macs are nice. They work out of the box. The look fantastic. They are reliable. They are best of class. They have great software. Homebrew works pretty well for development dependencies. However the latest Macbook Pro is not a big leap forward in processing power. I do think the latest Macbook is great… But according to the pre-launch benchmarks, the Ryzen CPU was ahead on horsepower. When I do travel, my trusty 2013 Macbook Pro is perfectly fine. So I am willing to go with a desktop solution if it provides a performance improvement.

But why build when you can buy an out of the box PC or iMac?

I want the fastest hardware at a reasonable price. Pre-built high end systems are expensive, and are often optimized for use cases that aren’t quite what I have in mind. I can do better. Building a PC is easy. Modular components make up a computer. You just order them and put them together inside a case. All you need is a screwdriver. Components only fit in their assigned spot, and there are plenty of instructions accompanying the components and on the web to guide you through the process. The end result is a low cost, high spec custom built desktop. Also, I must admit to harboring a little hubris; to me building my PC is akin to building my own light-saber.

The programmer’s guide to a DIY PC build:





  1. Set a budget
    • Performance goal: I’m aiming for double the power of my 2013 model Macbook Pro
    • Cost of a boxed solution: A fully loaded 2017 Macbook Pro retails for $3500. A premium desktop PC retails between $2000-$3000
    • Value judgement: I can build a *better* than premium desktop for $2000. Everything will be customized exactly how I want it
  2. Allocate the budget between components
    • CPU, Memory, Storage, Motherboard/Power Supply Unit/Case, Peripherals.
    • An equal distribution between these categories is a good starting point. About $400 in each of the categories listed above. Most premium PCs are gaming systems, and are dominated by a hefty graphics card. For programming I am focused on CPU/Memory/Storage.
  3. Select a draft build. Use PCPartPicker to spec out the system. This tool will check the compatibility of parts, highlight any missing parts, and compare prices from multiple vendors.
    • It helps to have a CPU in mind to narrow down the options.
    • Sorting parts by price and choosing something appealing in the price range allocated in the component budget is a good starting point for the draft.
    • Visiting a premium PC builder site such as iBuyPower can provide some ideas. Keep in mind that they have a different pricing model and cater to gaming, so no need to follow them too closely.
  4. Research benchmarks and reviews for each component from your draft. Find candidate components to swap around. Lock in on 1 to 3 products per component that are excellent value propositions in the desired budget range.
  5. Prepare to purchase.
    • Are all the selected components compatible? Read the product specifications carefully.
    • Verify your expected power consumption.
    • Does your case fit you components?
    • Do you have a rough idea of how everything will fit together?
    • Are any of the components over spec or under spec?
  6. Buy. Don’t pay full price!
    • Pcpartpicker compares prices from several vendors, but is not comprehensive or up to date. If you search around you will definitely find even better deals. I recommend doing a Google search by part number. Then a Slickdeals search. Then visit Newegg, Bestbuy, and Amazon directly and search for the product.
    • 30% off list price is a good deal on components and peripherals. 10% off is not great, you might want to keep searching… or look at a different product in the same performance band that has a better deal. Compare the bottom line cost, because some seller “discounts” aren’t.
    • Buy parts individually as you find a good deal. These days free shipping is never a problem, so there is rarely any advantage to consolidating an order. Don’t try to fill your cart up with everything you need because:
      • It is complicated to figure out an optimal set of purchases across vendors that contains all your parts.
      • It is simpler to focus on making one good purchase at a time.
      • Missing a good deal can delay the build while looking for an alternative.
      • There are enough vendors and products that you can be confident of filling your full system order, and you already have a baseline from PCPartPicker on the worst case scenario.
    • Consider joining Ebates. It is very easy to sign up for. You receive a 1-5% cashback on purchases sent as a check to you in the mail. If you join as a referral from the green button here you will also get a $10 bonus after your first purchase (and I’ll get a $5 bonus!)
      Ebates Coupons and Cash Back
      All the major component suppliers have Ebates cash back, so you will definitely end up with an extra $30-60 in your pocket. And yes, you will still earn points or cashback from your credit card separately.
  7. Assembly.
    • Start with the case, it will have a build manual which will walk through the important steps such as attaching your CPU and RAM to the motherboard before putting it in the case. As you unbox each component it will have a manual. Read the manual. Most manuals are short, pictorial, and cryptic. However they contain essential information that will make the build go smoothly.
    • Take your time. Components fit together easily and neatly by following the diagrams.
    • There are heaps and heaps of build guides and in depth analysis of all sorts of topics like thermal paste application, fan configuration, and every possible consideration you might have on the web. I chose the “pea” method for thermal paste, and front mounted my radiator based on advice from enthusiasts on YouTube.





My component purchases:


Case $80 Fractal Design Define R5

I love this case. Roomy! Removing all the drive bays was easy and freed up even more space. Who uses 5.25” bays? There is a spot for SSDs behind the motherboard. Cables are nicely hidden away behind the motherboard backing plate and tied neatly with velcro straps. Thumbscrews appear pretty much everywhere which makes building much less fiddly than regular screws. Two good fans are included. Top mounted power and USB ports are easy to access over a monitor. The build instructions were clear and well presented. The top holes for CPU power are too small to pass the CPU power cable head through while the rubber grommet is in place, so I needed to kink the grommet temporarily to pass it through. Replacing the top removable panels takes a bit of care; one end is a lock while the other is a latch. The case has removable dust filters. I did not connect the front panel fan controller (what benefit is there to manually changing fan speed?) Instead I connected my fans to motherboard pins. I had no use for the second included fan because of the large cooling unit I installed.

Power supply $80 EVGA SuperNOVA 550 G3, 80+ GOLD, 550W

I loved unboxing and installing this PSU. It looks fantastic, is small, fully modular and easy to install. Cabling was easy, neat and fast.

CPU $500 Ryzen 1800X

The Ryzen proposition is that you get equal performance to the best consumer grade Intel CPU at half the price. I bought it at launch which was a bit of a risk, but that price is very attractive for the best CPU performance available. This value proposition is the catalyst for the build. So yeah, gonna go for the big one here. Now that the launch is over, it seems that the 1700 and 1700X are definitely better value. I am happy with my 1800X, it might not have been as cost efficient, but it is the fastest! And really that’s my whole goal here, to have a dramatically faster system than my Macbook Pro.

Cooling $100 Cooler Master MasterLiquid Pro 280

Urrrgh! I have angst about this component. I bought this cooler believing that it would support AM4 (the Ryzen socket) with a bracket. But the bracket is not available and will not be until April at the earliest. So how exactly am I running my system? The cooler is jerry rigged on with wire and a cable tie. The good news is that it’s running nice and cool between 30-40 Celsius. But really, is this a good idea? No. The sad thing is that all I need is a little plate of metal with the right dimensions to allow me to screw the cooler head securely to the motherboard. Searching for a cooler (air or water) was a real let down. It was very confusing as to which products have brackets now as opposed to promising them in the future. There was only a very limited selection of AM4 CPU cooling options at launch. When I was able to find a product (water or air), it was out of stock or overpriced. The MasterLiquid Pro 280 specifically has some issues. The pipes are quite rigid, which makes it difficult to position. The pipes are also only just long enough. These two factors cause torque on the CPU attachment. This made it very challenging to jerry rig because the CPU attachment had a tendency to twist and slide away from the correct position. It also produces more noise that I would like even with the fans configured to “silent” setting in BIOS. On the other hand my CPU never goes above 40 Celsius under medium load with the radiator fans running at 20%. Temperatures of up to 80 Celsius are considered normal for operation. This cooler is working very effectively! There is something cool about water. The installment looks awesome in the box. I'm happy with the component now that it is installed. If you don't like the water cooling options, then go with a heat-sink and fan air cooler instead. Temperature only makes a difference for overclocking, and air coolers are very good. Air is cheaper, easier to install, quieter and plenty cool enough. Whichever you choose, check the AM4 compatibility carefully. I hope fanless cooling systems become available.

Motherboard $100 Asus PRIME B350-PLUS ATX AM4

B350 is not the premium chipset (X370), but the only difference is the lack of SLI. SLI is only necessary if you want to run dual ultra graphics cards. I do not. You will need to pick up a dedicated video card (the motherboard has a HDMI port, but there are no integrated video CPUs available in AM4 yet). The Asus PRIME was the only motherboard I could find available for purchase aside from the more expensive Asus X370 gaming offering. Supposedly there should be a selection of motherboard options, but to actually buy one the choices at launch were limited. Fortunately the Asus PRIME is a *really* nice board at an inexpensive price point. By default the BIOS fan settings are at full power. I changed the chassis fans from DC to PWR mode silent, and the CPU to silent. But it isn’t silent. There is still audible fan noise. The board looks great, is well built, and has excellent specifications. The only minor annoyance I had was that it is actually slightly smaller than the full ATX form factor, which means that it has a few less riser connections to the case, so the right side of the board remains a tad flexible.

Memory $185 G.Skill TridentZ Series 32GB (2 x 16GB) DDR4-3200

Choosing memory sounds easy. You need a good amount of any brand named RAM with reasonable specs. Unfortunately the RAM market is extremely variable for such a standard component. For example the exact same RAM I bought for $185 currently retails at $325. You have to shop around between many different manufacturers and ratings to find a good price. After I got my system setup and Ubuntu installed I went into the BIOS and used DCOSP to detect my RAM and rebooted for 3200… and nothing. It is a sickening feeling when your wiz-bang computer will not even boot to BIOS anymore. It made me queasy resetting the BIOS. I popped out the CMOS battery and shorted a special pair of pins with a screwdriver as per the motherboard manual. After replacing the battery, the machine booted, almost! It did about 5 false starts before it finally loaded back into BIOS. Just because I have 3200 memory doesn’t mean I can use it at that speed. No big deal, I only got it because it was cheap from a reliable brand. The default/stable DDR4 speed for my motherboard is 2333, so I do not need anything rated higher. There is a spreadsheet that is useful for comparing various speed and latency ratings on RAM.

Storage $480 Samsung 960 Evo 1TB M.2-2280 Solid State Drive

This was an expensive component. The performance specs are far out in front of “normal” SSDs, and leave physical HDDs for dead. Given it outperforms “normal” SSDs by such a large margin, I was willing to pay the price. As a programmer I host databases, process large files, and load virtual machines from disk regularly. I anticipate fast storage having a significant impact on overall system performance for my usage. 1TB is possibly more than I need. My Macbook Pro has 512GB and I’ve only had to clean out files once. It is nice to have double the capacity, but the read/write performance is what I’m primarily after here. An attractive alternative is to get a smaller 256GB M.2 drive, and a large “normal” SSD. It would be much cheaper. I went with the 1TB seeing as there is only one M.2 drive slot, and I’d rather not have to think too much about where files belong. Installing the M.2 form factor was super easy, just one screw in. Gosh they are small!




Total cost

All up these components cost $1525 excluding peripherals. Considering that these are all premium components with higher specs than you can even select for a pre-built system, that’s a screaming deal! It is also worth noting that choosing a “normal” SSD and going with the slightly slower Ryzen 1700 with included wraith spire instead of water cooling you can still build a pretty fantastic system for under $1000.

Performance comparison

I now have a desktop PC that is 2X better in every dimension than my Macbook Pro, on paper. But does it help me with my day to day activities? I fired up Slack and Chrome on both systems (as I always have these open) and got my stopwatch ready. All times quoted herein are wall-clock times formatted as minutes:seconds.

Paper match up:

Macbook Pro (2013 model):
2.3 GHz Intel Core i7 (4 cores),
16 GB 1600 MHz DDR3,
512G SSD.

Ryzen PC (2017 custom build):
3.6GHz Ryzen 1800X (8 cores),
32 GB 2333 MHz DDR4,
1TB NVMe SSD.




Docker-compose up:

This is the command I use to fire up my development environment, when I switch customers, and when I make a system configuration change. It starts the 12 docker containers in an already running host.

Ryzen: 1:30 1:28 with zoom share 1:41 1:41
MBP: 2:45 2:38 with zoom share 2:59 2:54
323/178 == 1.8 with zoom share 353/202 == 1.7

Just short of 2X.

How about docker-compose up two environments simultaneously?

Ryzen: with zoom share 2:30 2:29
MBP: Cannot do

I can fire up two customer specific environments simultaneously in 30 seconds less than it takes to fire up one customer specific environment on my Macbook Pro! I think this result due to the extra cores in my Ryzen. The Macbook Pro has 4 cores, while the Ryzen has 8 cores. For this particular scenario I’m getting more than 2X performance, but it is not a direct comparison because the Macbook Pro cannot fit both environments in memory at the same time. This test highlights that the extra capacity provides a capability that was missing before (running two customer specific environments simultaneously).

Make up:

This command sets up an environment from scratch. It builds containers. It compiles ClojureScript, migrates database schemas, and does a docker up.

Ryzen: 4:30 4:38 with zoom sharing: 4:59 5:14
MBP: 6:24 6:12 with zoom sharing: 7:12 7:18
756/548 == 1.38 with zoom sharing: 870/613 == 1.42

Pretty handy, but not the the full 2X I was hoping for. Maybe `make up` is bottle-necking in other departments. I did a little digging and vagrant up takes about the same time on both systems, accounting for 30 seconds. So there is an example of something that was not improved at all. Perhaps I’m bottle-necking on network for some tasks?

During these tests my Macbook Pro goes bonkers. Full fans, hot to touch. The Ryzen? Fans at the same low hum, CPU sitting cool at 40 celsius. But the most noticeable difference is that when I did subsequent runs I also did some multi-tasking. The Ryzen remains fully responsive and completely usable. You wouldn’t even know that it had anything else to do. The Macbook Pro has some serious lag going on.

I had expectations that my PC would be more responsive. The Ryzen greatly exceeded those expectations. The whole experience of using my Ryzen PC is a big leap from using my Macbook Pro. On the Ryzen everything is noticeably snappier. Having the extra capacity available is great.

Compiling ui.js

I was hoping that ClojureScript compile times would be dramatically better with fast disk and more CPU. To my surprise it wasn’t as much as I anticipated. Perhaps the compiles are dominated by single thread CPU performance?

Ryzen: 0:18 0:19 0:18 with zoom sharing 0:20 0:20
MBP: 0:24 0:24 0:24 with zoom sharing: 0:27 0:27
72/55 == 1.3 with zoom sharing 54/40 == 1.4

Profiling a web page:

Ryzen: Scripting 1109ms



MBP: Scripting 1681ms



1681/1109 == 1.5


To be able to tune and improve web pages, it helps to be able to profile them quickly. The Ryzen gets a 1.5X advantage. This page is a pretty standard public facing high traffic site. I wasn't expecting the extra compute power to have such a dramatic impact on normal browsing times. But so much of the web is JavaScript driven these days that it actually makes a big difference. So for profiling, bench-marking, and general web browsing there is a significant advantage here.


Loading an IDE (Cursive/IntelliJ)

I use VIM to edit files here and there because it opens instantly, and jump into Cursive for longer coding sessions.

Ryzen: 0:9 0:9 0:9 with zoom sharing: 0:12 0:11
MBP: 0:11 0:12 0:12 with zoom sharing: 0:14 0:15
35/27 == 1.3 with zoom sharing: 29/23 == 1.3

Starting figwheel:

For interactive web development I first need to fire up `lein figwheel`.

Ryzen with zoom sharing: 0:12 0:11 0:11
MBP with zoom sharing: 0:16 0:15 0:15
46/34 == 1.4

Less waiting, more coding.

Processing a large text file:

I took a 9GB file containing 300k events and used wc (word count) and ag (silver searcher, like grep):

wc enriched_300k.tsv
Ryzen: 0:54 0:54 0:54
MBP: 0:24 0:24 0:24
72/162 == 0.4

wc -l enriched_300k.tsv
Ryzen: 0:01 0:01 0:01
MBP: 0:09 0:09 0:09
27/3 == 9

ag foo enriched_300k.tsv
Ryzen: 0:09 0:09 0:09
MBP: Cannot do (ERR: expected to read 2445307116 bytes but read 4294967295)

grep foo enriched_300k.tsv
Ryzen: 0:01 0:01 0:01
MBP: 1:45 1:46 1:44
315/3 == 105

These results are all over the map. I don't understand why wc full is faster on the Macbook Pro. Or why grep is ridiculously faster on the Ryzen. Perhaps the implementations differ between OSX and Ubuntu?

Starting an IE9 Virtual Machine (from saved state):

Ryzen: 2s 2s 2s
MBP: 10s 9s 9s
28/6 == 4.7 ?!??!!

Using an IE9 Virtual Machine is very smooth on the Ryzen, it feels like a native browser. I can run the developer tools and profile the page comfortably. On the MBP, the virtual browser is painfully sluggish. I don’t see why the Ryzen does so much better here. Probably there is some VM specific factor at play.

Switching to Linux





I installed Ubuntu. It was really easy to install. I made a bootable USB jump drive on my Macbook Pro, put it in the PC, bam, installed! Amazingly fast. Everything worked out of the box. No driver problems. Great!

I like the Ubuntu interface. Window management is better than mac out of the box. Unity has hotkey and drag dock left right maximize and corners. Positioning windows is a breeze. PrintScreen takes a screenshot of the desktop, and Alt+PrintScreen captures the current application. It brings up a preview so you can edit/rename the image.

The jarring difference from OSX is the slightly different use of common keyboard shortcuts. Copy + paste in the terminal require either shift+ins or ctrl+shift+c/v. I find this slows me down because I have to think about whether I’m in a terminal or not, and use different keys. Ctrl-a Ctrl-e don’t go to start of line or end of line in Ubuntu apps, so I am retraining myself to use the home/end key.

For programmers Linux is an upgrade over OSX or Windows. Why? Apt-get. Software dependency management with apt-get is fast, easy and works. Homebrew on OSX attempts to emulate apt-get, but is more wild west and falls short.

Final thoughts:

Should you build a Ryzen based PC? Yes! Absolutely! There is a discontinuity in the CPU price to performance ratio introduced by the launch of this new CPU range. Programmers and enthusiasts stand to benefit with more raw power for their dollar.

Building a PC is fun. It is just like Christmas with all sorts of interesting packages are arriving at your front door. I got a sense of accomplishment from putting my PC together. The final result looks and performs great. It did take a significant investment of time, effort, and attention to detail. As a computing enthusiast, that time was well spent.

The Ryzen build specs on paper promised to be 2X better than my previous hardware. In most programming oriented tasks it delivered an improvement factor of around 1.5X. Responsiveness while multitasking was vastly improved. The cost of $1525 excluding peripherals was well below a premium off the shelf equivalent.

Can Linux cut it? Yes! Ubuntu just keeps getting better. Linux on the desktop is really, really good these days.

Is Intel doomed? Doubtful. On March 19 the Intel i7-6900K retails for over $1000; twice the price of the equivalent AMD Ryzen 1800X. It sure looks to me like AMD has jumped way ahead of Intel in CPUs for programmers. Such a direct comparison is for a small segment of the CPU market. There are other price points where Intel still beats AMD; ultra servers, low end servers, and laptops.

Should you feel bad if you still prefer Mac? No! OSX software and Mac hardware are pretty great. It is impressive that a 4 year old laptop can still be in the same league as a modern desktop.

Thank you for reading my blog, and have a great day!

50 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. Do you think Random or Sequential IO is more important in your SSD?

    And Read or Write?

    ReplyDelete
    Replies
    1. Hmmmm I want it all!!! Here's one set of real world results: https://www.youtube.com/watch?v=EdF_aerWcW8 I expect that for most things I do any SSD is fine and that the full benefit of faster disk only kicks in for a handful of scenarios. Optane promises high performance even with low queue depths. https://arstechnica.com/information-technology/2017/02/specs-for-first-intel-3d-xpoint-ssd-so-so-transfer-speed-awesome-random-io/
      So I guess my answer is queue depth now that I've heard about it and it seems like it would be the most common driver of better performance.

      Delete
  3. Selecting Emacs shortcuts in GTK preferences should do the trick for Ctrl-a Ctrl-e etc.:

    http://tiborsimko.org/emacs-bindings-in-gtk-apps.html

    ReplyDelete
    Replies
    1. Awesome! Thank you very much, yes this is much better :)

      Delete
  4. Thanks for the review. I'm on an i5 right now and I'm considering getting back together with AMD after all these years. Are you able to use virtualisation technologies (like HAXM for Android Studio) with your new Ryzen setup? I went from my AMD FX chip to Intel for that particular reason.

    ReplyDelete
    Replies
    1. Hi Matthew, I don't have any direct experience with that... but this link https://www.reddit.com/r/Amd/comments/60va1u/any_android_studiointelij_idea_ides_users_using/ looks promising. Also linked in that thread: http://stackoverflow.com/questions/25263360/intels-haxm-equivalent-for-amd-on-windows-os

      Delete
    2. Ah nice. I actually don't use Windows anymore, so I guess I don't even have to worry about that anymore anyways.

      Delete
  5. What is the large c/c++ program compile speed difference?

    ReplyDelete
  6. I'm torn. I hate waiting on my computer. I like the idea of running ubuntu. But the mac hardware is really nice. Crazy that your 4 year old laptop keeps up that well. I suppose it still wins the computing power per unit volume? Great post, Tim.

    ReplyDelete

  7. Awesome info & Thank you so a lot for sharing this sort of wonderful data.

    Carrier services in Laredo
    Transportation services in Laredo

    ReplyDelete
  8. Great post! btw what version of Ubuntu & type of GPU are you using?

    I tried to install Ubuntu 16.04.2 on Ryzen 5 1500X + GTX 1070 but stuck at black screen at installation process.

    ReplyDelete
    Replies
    1. It sounds like 16.04.2 doesn't have good graphics drivers for the GTX 1070. Check the forums for advice there...

      Once you have it up and running the proprietary NVIDIA drivers are really good!

      Delete
    2. Hi Bayu, I installed Ubuntu 16.04 and RX470 graphics card

      Delete
  9. You should give Fedora a shot. I've found it to be a great OS for being productive. I just like the desktop environment (gnome) better than Ubuntu's and it comes with some handy (albeit easy to install anyway) dev tools out of the box. It feels like it was made by and for developers, and I cannot stress enough how much I love Gnome. It feels more like the OS X desktop with some really really smart ideas.

    ReplyDelete
    Replies
    1. Thank you for the suggestion Chuck, I'll try it out :)

      Delete
    2. Ubuntu Gnome works fine too and has LTS version - upgrade every 2 years. Fedora has to be upgraded every 6 months.

      Delete
  10. Nice description of your programming habits. http://github.com/spolu/warp might interest you!

    ReplyDelete
    Replies
    1. Interesting, I'll try it out! Thanks for the tip.

      Delete
  11. Nice post, I came to similar conclusions and built myself a system with very similar specs.

    ReplyDelete
  12. A couple of things...

    First, I'm also curious which GPU you chose and whether you had any issues there.

    I think some of your benchmark results are due to things being cached in RAM rather than being read off your SSD. You need to be careful to clear cache to benchmark mass storage. It'd be interesting to see how the latest MacBook Pros fare against your rig, they're very fast. I was quite disappointed to see they only support up to 16 GB RAM though! (And no ECC which is a drag.) Speaking of ECC, you can use it with Ryzen and at least some of the AM4 boards.

    I run an older Nehalem Hackintosh, and will likely build a new one this year. Sadly, that'll require an Intel chip, but I hope Ryzen leads Intel to drop prices further. I'll probably also build a Ryzen system as a gaming and Linux box. I hope Apple adopts/supports Ryzen at some point. The Naples workstation/server chips look really impressive with up to 32 cores and 64 threads...

    ReplyDelete
    Replies
    1. I got a RX470 Gaphics card and had no issues with it :)

      Delete
  13. Great article, I'm doing a very similar migration from mac book pro to Ubuntu on the Dell XPS15 due to running a 8gb container stack for development. I've found much the same results. My big take away conclusions so far are to not do updates, out of 7 weekly updates I've tried, 1 black screened due to nvidia drivers, another bricked the machine so you couldn't even get past the Dell logo on boot (not even to bios) thanks to a dodgy Dell firmware update and the latest was a locking process preventing the login manager loading so I had to use a boot usb to get it all back! "If it ain't broke, don't fix it" seems to be good advise for Linux in my experience.

    One thing which has pained me, as you mentioned is the ctrl+v/c in the terminal. I noticed my terminal in IntelliJ works as I want so I know it's possible but so far I've failed to make this work as I want in tilix.

    ReplyDelete
    Replies
    1. Ah interesting that the Intellij terminal uses normal copy/paste... I should use it more! :)

      Delete
  14. Actually you really want to run your RAM at as high speeds as possible. Ryzen benefits quite a bit from fast ram. One reason for this is that rather than being monolithic 8 core CPU - it's actually two quad core modules(known as CCX or core complexes) and the link between the two CCX operates at the speed of memory controller. In other words the faster your ram is, the smaller latency there is when there is cross CCX communication.

    To get your RAM to run faster you need to first update your BIOS/UEFI to latest version and then try to enable DOCP in BIOS. If this doesn't do the trick, then you may need to play with different speeds, timings and possibly increase SOC voltage to 1.1v.

    ReplyDelete
    Replies
    1. Thanks for the details, I'll definitely give it another try now that the new BIOS is out!

      Delete
  15. OSX and Linux do have different core utils.
    OSX's is based on BSDs.
    There was an article a while back (2010 or so) by one of the authors of GNU grep on the FreeBSD mailing list discussing why it had better performance.

    ReplyDelete
  16. Nice article. I was waiting for Apple to update iMac but I got tired of waiting so I built a PC couple weeks ago. Though I didn't throw the money at a Ryzen. https://www.youtube.com/watch?v=i3Ppt379kPA

    ReplyDelete
    Replies
    1. Cool! Looks like a pretty sweet system you have there :)

      Delete
  17. Hi
    great post!
    as you may know, Ryzen 5 has been launched and with that new BIOS too, now it has full support for 3200MHz RAM.
    I have the same ram, and i could use it a 3200 without effort, all from the BIOS. No matter if it was X370 or B350, it worked in both chipsets.

    What GPU did you choose?

    Regards

    ReplyDelete
    Replies
    1. I got a RX470 GPU. Thanks for the info about the 3200MHz RAM, I'll try that out tonight :)

      Delete
  18. On the subject of grep, try installing the gnu grep via homebrew and giving that a run. I've found it *drastically* outperforms the BSD grep that ships with OS X.

    I was doing some log diving on Friday, and while my mac laptop is a better spec, the desktop running ubuntu processed the logs in < 30s that the mac, with faster processor and disk, took 20-25 minutes to do. Switching out BSD grep for GNU grep resulted in the Mac finally being faster.

    ReplyDelete
    Replies
    1. Aha! Very good to know, thank you :)

      Delete
  19. Hi Timothy,

    Check your locale settings on Ubuntu for the "wc -c" step. With LC_ALL=C LANG=C, wc -c amounts to a stat() call. With UTF-8, the process is much heavier, and I'd expect the kind of decoding task that is heavily optimized for existing CPUs

    ReplyDelete
    Replies
    1. Hmmm very interesting!! Yes, my env has LANG=en_US.UTF-8

      Delete
  20. "Buy parts individually as you find a good deal. These days free shipping is never a problem, so there is rarely any advantage to consolidating an order. "

    I couldn't disagree more. For one, no where is free shipping not a problem. Everyone charges shipping for something. Two, if you order from 6 different places, you have 6 different PO's, emails, customer service departments, etc. Which leads into Three: buying from one place reduces hassle, turn around time for returned parts if there is more than one, and gets you unified service. Four: it may not be cheaper overall, but only going for the best price is more trouble, time and effort than its worth. Stick to one site unless you are dead set on that part and can't get it anywhere else. PCPartsPicker is great and all and is good to help you find all the components you will need, but it should be a guide and not a definitive reference. You will likely get better components all around if you stick to the same place instead of ordering the cheapest memory from some fly by night in China.

    I did this for my first build in 2000 when AMD's Thunderbolts were a slot package. I bought from 7 different places and it was a nightmare keeping track of it all. Prices changed before I finally made all the purchases as well. I did this for a few builds to try to give people the best price and it was stressful. One buyer said forget it, buy it all at one place so it all comes on one order and I don't have to give out my credit card number to so many websites. Once I did this, the buying became easier, decision making became MUCH MUCH MUCH easier, as I didn't have to try to find it on 15 different sites to see which had the best deal, shipping and price. In the long run, if you will only do this once in a blue moon, knock yourself out. But from my experience, I would suggest to stick to NewEgg and just find all the parts there. If you aren't sure you have it all right, put the parts into pcpartpicker and use some similar parts if they aren't in their catalog. For PCPartsPicker compatibility checking, close is good enough.

    ReplyDelete
    Replies
    1. As someone who just did exactly what the suthor did, and has had a similar experience to yours in 2000, I disagree with you entirely. As long as you stick to the same 3 or 4 reputable stores and are intelligent about what parts you buy and when (and have a few spare parts at home to use as placeholders) shopping around and getting the best deals is TOTALLY worth it. My most recent build was MSRP 3200 dollars in components, I waited for sales and price drops on PCpartpicker and saved 1000 bucks on the final build. Thats about 30% off what I would've paid had I stuck with one store and bought it all at once. I agree that 17 years ago this was a terrible idea, but today it is incredibly manageable, and worth it!

      Delete
    2. Thank you for the additional perspectives Tim and Jeremy.

      Delete
  21. Good post....thanks for sharing.. very useful for me i will bookmark this for my future needs. Thanks. Complete Set of Desktop on Rent

    ReplyDelete
  22. Nice tutorial. Thanks for sharing the valuable info about c Training. it’s really helpful. Who want to learn c language this blog most helpful. Keep sharing on updated tutorials…..

    ReplyDelete
  23. It is imperative that we read blog post very carefully. I am already done it and find that this post is really amazing. kodux

    ReplyDelete
  24. Hi, nice blog check out management software & employee management software are in high demand since it helps a lot in tracking the regular activities of the employees. Visit here http://smartmanager.com.qa/

    ReplyDelete
  25. where the holes in your testing are, and to build trends from this data, to set code coverage targets and watch out for people cutting back on testing under pressure.  kodu

    ReplyDelete
  26. Have you had segfaults when compiling code or crashes during your work session? There are many who are experiencing these issues with GCC on Linux. It's unclear yet what is causing it, but it has been nearly 5 months since release and there is no resolution. At first, it seemed like only complete saturation of the cpu threads caused the segfaults. Later, a test program was devised that could cause the segfault with just 2 threads on the same core. Not exclusive to the Linux kernel, this also happened on the Windows Linux sub-system and on stock CPU with ECC RAM.

    TLDR; To this day, Ryzen still cannot reliably compile code. Therefore, until AMD releases a fix (hardware or firmware) or GCC does, RyZen might not be for all programmers.

    ReplyDelete
    Replies
    1. Hi mouacyk; no I haven't experienced those... I code in Clojure which is JVM based and the system has been stable for me. Thanks for pointing out the issue, I'm sure other readers will find that useful.

      Delete
  27. Forgot to point to the official AMD support thread detailing the issue with ongoing discussion:
    https://community.amd.com/thread/215773?start=555&tstart=0

    ReplyDelete
  28. thanks Timothy, usefull article for peaple like me (Programmer)

    ReplyDelete