Wednesday, December 20, 2017

Building a Dynamics GP test environment on a B-series Azure Virtual Machine: Not so fast!

By Steve Endow

With the recent release of Dynamics GP 2018, I wanted to setup a new virtual machine that I could use for testing and development.

I currently run my own Hyper-V server, which serves up 20 different virtual machines, and has been very low cost and is extremely fast.  I would be happy to outsource my VMs to the "cloud", but having looked into the cost several times over the last few years, it just isn't economical for me.  I previously estimated it would cost me over $300 a month to host just a few VMs.  That cost, on top of having to severely limit the number of VMs I can run just didn't make sense for hosting my internal development VMs.

But recently fellow MVP Beat Bucher told me about a new Azure VM that was lower cost:  the B-Series "burstable" VMs.

Beat explained that he was able to run two of the B4ms machines continuously for a cost of roughly $150 per month.  I was intrigued.

After reviewing the different sizes, I setup a new B2ms virtual machine on Azure, running Windows Server.  The provisioning process was very simple, easy, and fast, and I had a VM a few minutes later.

I then downloaded and installed SQL Server and SQL Management Studio.  There were a few subtle hints that something wasn't quite right, but at the time the machine seemed great.

I then downloaded the 1.6 GB Dynamics GP 2018 DVD as a zip file.  Like when I downloaded SQL Server, I noticed that when I downloaded the GP 2018 zip file, the Chrome browser didn't show the download status.  When I opened Windows File Explorer, nothing showed up in the download directory during the download or after the downloaded appeared to complete.  It took quite a while for Windows File Explorer to show the downloaded file.

I noticed Windows File Explorer seemed unresponsive as well.  It just didn't feel right, but I hadn't yet pieced together the clues.

I then tried to unzip the GP 2018 file.  That's when it was clear something was wrong.

This status window appeared, showing that it would take over 30 minutes to extract the 1.6 zip file.  What??  1.36MB/s?

I then did dozens of other tests, simply copying large (1GB+) files on the C: drive and between the C: and D: temporary drive.  The performance was abysmal.

After several tests, I noticed that on average, the file copies were clearly being throttled around 21-22MB/s.

What in the world was going on?

The B-Series VMs are supposed to have "Premium SSD" storage, and 21MB/s is definitely not SSD performance.

I submitted an Azure support case and after several days, received a response.  The support rep admitted that because the B-Series VMs were relatively new, he didn't have much experience with them and would need me to do some tests to narrow down the cause.  No problem.

He first had me "redeploy" the Azure VM, which apparently pushes the VM to a new "node" or physical host machine.  I completed that process and tested again, but got the same results: file copies were still painfully slow.

He then had me install the Performance Insights plugin on the VM, which apparently runs some automated performance tests and automatically submits the results to the support case (a very cool feature).  I completed that process and a few days later, he emailed me with an explanation for the slow disk performance I was seeing.

This is the critical information that I overlooked when selecting the B-Series VM:

Notice that the B2ms size has a maximum disk speed of 22.5 MB/s.  That is the maximum.

The B4ms offers 35MB/s and the B8ms tops out at 50MB/s.  50 sounds a lot better than 22.5, but even 50MB/s is horrifically slow compared to any competent modern storage.

Even if you add an additional high performance Premium SSD, such as a 1023GB drive with 5,000 IOPS and 200MB/s throughput (which is VERY expensive), if it is attached to a B2ms VM, you will still be limited to 22.5 MB/s.

For comparison, my local Hyper-V server can copy files at 100MB/s from my NAS, and the limiting factor is the gigabit network connection between the NAS and the server, not my NAS or the SSDs in my server.

Local file copies on the SSDs on my Hyper-V server can be as high as 1GB/s!! It's so fast that I had a very hard time getting a screen shot while copying the 1.6GB Dynamics GP 2018 zip file.

If you are used to even half-decent disk performance on a server, can you live with 22.5 or 35 MB/s on an Azure B-Series VM?

And am I willing to spend an extra hour or two setting up an Azure B-Series VM, due to its brutally slow disk IO, for a Dynamics GP 2018 test environment?  Am I confident that once I set it up and don't have to do many large file copies, that the disk performance will be sufficient for my needs?

Can SQL Server actually run well enough on a disk throttled at 22.5MB/s?  Now that I see the disk specs, I am pretty sure that the B-Series was never intended to ever run SQL Server.

And I'm not willing to waste my time to find out.  Those disk speeds are so slow that I am not confident that the B-Series VM will meet my needs even for a test + development server.  Even if I used the B4ms, that's roughly $75 a month for a potentially painfully slow VM.

So, I have ruled out the B-Series Azure VMs for now, and would have to look at the "standard" VMs, which would likely still cost $150-$300 per month for 1-2 non-production VMs.

Since I have a very fast Hyper-V server in my office that can easily host 20 VMs with a marginal cost of $0 per month per VM, it seems that I will be sticking with an on premises server for at least a few more years.

Steve Endow is a Microsoft MVP in Los Angeles.  He is the owner of Precipio Services, which provides Dynamics GP integrations, customizations, and automation solutions.

You can also find him on Twitter, YouTube, and Google+


paulus_999 said...

Agree with the issues on Transfer Speeds
We have a Production and UAT GP Environment in Azure
Backup of the SQL Database is around 150Gb (many years of data - don't ask) on A6 VM's
We have to use Robocopy to copy the backup from production to UAT as a straight copy and paste don't cut it

Unknown said...

Steve, couldn't agree with you more. Computers are SO CHEAP now, you don't even need to buy a "Server" per se, you could use an old quad core desktop and load it up with a bunch of ram and a couple of fast SSD drives and go to town. The main expense in having your own "Server" is the software obviously, licensing to Windows Server and all that fun stuff can really add up quickly.

We had a customer who moved to Azure, and I had to install GP and all the stuff, and it was EXACTLY the same speeds you are showing here. They ended up having to move everything to SSD premium storage, and everything hums along quite nicely now with the SSD. They are quite happy with it, and we even recently got ODATA working which was not an easy feat. :) The bottom line for those who are moving to the cloud is make sure your storage is in the same region as your VM and make sure that you invest in as fast as you can possibly afford on the storage side or it will come back to bite you. 64 gigs of RAM is worthless if you're only pulling 20MBPS to SQL.

seann said...

I don't see any mention of RAID in the article, you should be configuring 2 or more disks in a striped RAID.

Steve Endow said...

Hi seann,

Have you tested Azure RAID with a B-series VM?

The issue I discuss in my post is not about disk performance or disk throughput, it is the artificial IO throttling imposed on B-series VMs, regardless of disk type or configuration.

If you have tested Azure RAID with a B-series VM, I would be interested in seeing your performance results comparing a single disk with a RAID array.