In the last two months we’ve had the opportunity to work with two pre-release Dell PowerEdge R910 servers equipped with Intel® Xeon® Processor 7500-series – more commonly referred to as Nehalem-EX processors.
The results were impressive: With this system we were able to run over 100,000 users concurrently over several organizations. This is the largest real-world business application workload that we’ve seen on a Microsoft Windows Server Hyper-V system and it proves the scalability of Microsoft Dynamics CRM in private cloud deployments. Using virtualization we were also able to consolidate 20 servers down to just two, which means that customers or partners that deploy Microsoft Dynamics CRM using this configuration, can reduce the power consumption, required rack space and management overhead all while maintaining a high level of performance with the CRM system.
For these tests, we had set out to see how well Microsoft Dynamics CRM 4.0 performed while exploring the use of virtualization with Hyper-V. To run the tests we reused the workloads from our 50,000 user benchmark in 2009. We partitioned the workload across five environments, each with four virtual servers.
We placed the five SQL Server VMs on one physical machine and the Web and Async servers on another. Each 20,000 user organization was part of a multi-tenant deployment with the Web servers added to a common, load balanced pool of servers.
The Microsoft Dynamics CRM 4.0 Performance Toolkit was installed onto 20 load generation servers which logged users on over the source of three hours. Tests were then sustained for several hours while data was collected. With each of the 20 virtual machines and hundreds of logical processors generating performance data, log files alone were several giga-bytes.
The machines performed very well with fast, sub second, response times – there is no question in my mind that these Dell servers, with Windows Server 2008 R2 Hyper-V and SQL Server 2008 R2 can handle massive workloads while running Microsoft Dynamics CRM. What our CRM focused readers may find more valuable are some of the lessons learned while running these tests:
1. Hyper-V virtual machines are limited to four virtual processors each. This limited the number of users that we were able to place on each SQL Server VM.
2. We found that each four processor SQL Server VM performed well at up to about 25,000 users each.
3. Storage is a critical component for large implementations like this.
4. As with the 50,000 user benchmark we found it necessary to use SSDs to alleviate SQL I/O issues with the large transaction volumes we were pushing.
5. Hyper-V requires disk space equal to the amount of memory in use by each VM. This may go unnoticed in small scale Hyper-V environments but each of our SQL Server VMs was assigned 32 GB of memory so we needed more than 150 GB of additional storage in the environment. A relatively small amount given how many disks we used but it did cause us to reconfigure our storage at one point.
6. In order to take advantage of Live Migration in Hyper-V you’ll need to use networked storage for the virtual machine’s OS files (such as the VHD) and this requires a storage controller for each of your physical servers.
7. Our configuration showed linear scale up to the number of VMs used. We very likely could have added more VMs and pushed utilization higher.
8. Viewing performance data for virtualized systems can be a bit confusing. When looking for processor utilization of a VM look at the “Hyper-V Hypervisor Virtual Processor” counter for the most accurate view of utilization.
To get the full benefits of virtualization administrators will need to learn a few new tricks, but overall, enterprises deploying Microsoft Dynamics CRM for multiple departments or using the xRM framework to deliver multiple applications using a private cloud approach can be confident the scale, economics and performance of Microsoft Dynamics CRM 4.0 when using Hyper-V. The complete white paper with details on the tests can be found here.
tweetmeme_style = ‘compact’;
tweetmeme_source = ‘MSdynamicsCRM’;