Share this
Part 2 – Performance testing Microsoft Exchange using Jetstress and Load Generator
by Clive Williams on 05 April 2016
In the previous blog post in this series I outlined the performance risks with Microsoft Exchange. One way to mitigate performance risks when changing Exchange implementations is to run a performance test. While this may not be the only way to mitigate performance risks, it’s something well worth considering. In this post I discuss the key steps for performance testing Microsoft Exchange.
1. Determine Exchange workload
One of the main issues in testing or diagnosing Exchange performance is getting details of the workload. Without a good estimate of what users are doing and in what volume, it is difficult to mitigate performance risks. It is also important to know what the user behaviour currently is and how changes may alter this.
For example, in one upgrade, user behaviour was categorised in terms of average emails per day. Even after applying some factors to estimate peak loads, the actual peak rate at the start of the working day was found to be much higher. Also some user groups were found to have even more particular behaviours; a small group of administrators needed to review all the emails received for executives in a very short time before summarising them for the start of the executives’ day. This created a short but very high transient load for critical business decision makers.
It is necessary to get accurate estimates of workload for planning a good architecture and design for Exchange. The workload needs to recognise peaks versus average. It needs to take into account the behaviour of workgroups as this will influence design considerations such as mailbox databases, throttling policies, and Exchange roles that can impact performance.
Even with a good measure of current workload, future changes need to be considered. For example, there can be a number of workload changes that come from increased mobilisation. How will users change their behaviour? For example, will they read emails in concentrated intervals or, vice versa, spread the load throughout the working day?
There are a choice of techniques to go about getting details of the workload. If you have access to the current set-up, look to collect details about the workload from perfmon counters. Refer to the Microsoft documentation for your current version of Exchange to look at which counters describe the workload. The data from these counters may need to be analysed by considering architectural changes between Exchange versions.
There are tools available from Microsoft and other sources that can help you obtain similar data about workload. These tools are usually specific to Exchange versions, so I’ll talk about these later in the post. Be careful though as some of these tools only collect data about part of the overall Exchange traffic so you may need to use more than one tool.
2. Performance test changes to Exchange
How can you go about performance testing your Exchange environment prior to go-live to reduce risk?
Use Microsoft Exchange specific tools for performance testing
In my experience I have found that it is complex to script all of the transaction types supported by Exchange (email, calendar, address book, synchronisation etc) when using conventional performance and load testing tools. I have had more success with special Exchange specific tools, including Jetstress and Load Generator and so my focus in this section is on using this set of tools.
Understand estimated system capacity requirements
Before looking at any testing, it’s worth checking how your design team has estimated the system capacity requirements for the planned Exchange platform. Microsoft provides posts on Exchange Sizing and Configuration Recommendations. Here, Microsoft recommends using an estimating spreadsheet (one version can found here, Exchange Server Role Requirements Calculator). This should be completed as a pre-requisite for any Exchange implementation. For performance risk investigation and test design, I’ve found it useful to use the spreadsheet with the completed design to:
- Vary some of the assumptions in the design to see the impact on delivered load (sensitivity analysis)
- Get the calculated disk IOPS from the design
- Look at how the workload has been defined in the design.
Performance test the Exchange disk subsystem using Jetstress
Once you have the design, I’d consider how to test the implementation.
Microsoft indicate that the most critical component of a modern Exchange implementation is the disk subsystem particularly if this is implemented via a SAN. Microsoft provides a free tool to assist testing load on the disk subsystem, Jetstress (see Microsoft Exchange Server Jetstress 2013 Tool for the tool and Disk performance Testing with Jetstress 2013 for information about its use). This tool provides a simple way to test the proposed Exchange disk system which Microsoft highlights as a key area to get right. Where you’re using a SAN, this is absolutely essential to getting the disk subsystem set up right for Exchange.
The tool works well and is relatively simple to set-up. It provides good summary results and it is simple to vary the load so different scenarios can be tested.
There are some considerations about using JetStress that you need to keep in mind:
- You need the majority of your planned, full sized Exchange environment to execute the tests. In particular the Mailbox servers and SAN need to be production like.
- The software running on the Exchange servers is Jetstress plus some Exchange components. You are not testing the servers themselves only the disk subsystem. The servers will need to be rebuilt after testing.
- Populating the disk subsystem prior to testing takes an appreciable amount of time. The documentation gives estimates but think of days rather than hours!
- Where to build the disk subsystem is a tricky consideration. The ideal place is in the same SAN as production but you could be potentially subjecting the SAN to load which could risk the rest of production. If you use a separate SAN, you need to consider the effect of not having the rest of the load the SAN needs to support from other applications.
- Tests are recommended to be run over extended periods. I would choose to run short verification tests first but you need to plan for 8 hours minimum for tests. This has an impact on the number of tests you can run and the cycle time for execution, analysis, fix and re-test. Also be aware of any potential conflicts in your testing environment – back-ups, re-use and re-configuration of the environment will impact the success of your testing. Also make sure the design of the test environment is suitable for such testing. In a recent example, daily housekeeping processes impacted the testing as long running processes got automatically tidied up!
- The summary results are good but the tool also produces lots of other useful metrics in the form of counters. Analysing these is highly recommended as it provides valuable insight into disk subsystem behaviour especially if running over long periods. You are going to need a suitable tool to analyse these. You do not have to worry about creating lots of individual user accounts. The tool simulates the whole load by using a system account. So no large load is placed on any Active Directory server you may have. This is both a good and bad thing. The good is that it simplifies set-up; the bad is that your Active Directory environment doesn’t get tested.
Performance test the Microsoft Exchange implementation using Exchange Load Generator
Microsoft provides a comprehensive test tool Exchange Load Generator (see Exchange Load Generator 2013 for the tool and documentation about this tool). This allows a real simulated load to be sent to the whole planned Exchange implementation.
This tool is also free. This tool is not for the faint-hearted! While I have used it to get very useful results, there’s a number of things to bear in mind!
- If you don’t have a good idea of your Exchange workload (see above), you could end up with the old problem of ‘garbage in, garbage out’ after spending time and cost doing the testing. This is true of one engagement I was involved in. The new system worked very well for the planned workload but in production, the actual workload was significantly different – lots of additional peaks and a different traffic mix during the day!
- You need to have a suitable full-sized environment to test. This environment needs to be isolated from production. This means not only having the Exchange servers but also suitable ancillary components such as Active Directory and DHCP servers to facilitate whatever number of users you support. Getting this set-up can be resource consuming. You also need the environment to be stable over long periods while the set-up and testing take place – not always achievable in some test environments.
- You will need to create a suitable number of test accounts. Scripts are provided but test user set-up can be problematic in some situations. Also be careful of the effect of Group Policy Object (GPO) updates – I’ve found that these can alter the way users need to be set up to operate with the tool.
- The tool is released ‘as-is’ by Microsoft with no support! Any issues need to be solved by yourself or by researching through the internet.
- It takes a long time to set-up. Before starting any tests, you need to build and populate mailboxes which can take a fair while (again think days rather than hours). Then Exchange will start to build search indices on the Exchange databases which as I have noted previously takes time and consumes resources. The tool also tries to build and populate the mailboxes as quickly as possible and you can easily hit threshold issues (see the next post for notes about thresholds in later versions of Exchange).
- The way you set up different user profiles in the tool is not fully documented and you may need some trial and error to achieve your target workloads.
- Again there’s lots of additional metrics provided by means of counters. You need a good tool to analyse these. Some of the metrics provided describe the delivered workload so it is essential these are analysed to see what the actual workload achieved is.
- The tool does not fully test the disk subsystem as it does not deliver some I/O load. Use Jetstress (as above) for this.
3. Performance issues when migrating Exchange users
You are going to hit performance issues relating to migrating users both during performance testing and during actual migration.
When you migrate users to a new version of Exchange, there’s special performance issues you need to be aware of that won’t reappear post migration:
- Mailbox build – existing messages being migrated will cause mailboxes to be built. This takes time – you may want to understand the time it takes by undertaking a trial migration. Ensure the mailbox build has completed before running any performance testing.
- Index build – as new messages are added to the mailboxes, newer versions of Exchange will automatically try to index them. This indexing can take appreciable time and can be seen to continue well after the completion of mailbox migration. This will consume system resources. In normal operation (after migration), index build reduces in intensity and you would expect it to run continuously (you may want to test this!). The service that runs indexing can be stopped temporarily in peak times and restarted when load decreases. You may want to consider this during migration.
The final part of this blog post series covers another performance risk mitigation approach – production monitoring of Microsoft Exchange. If you’re migrating users in phases, this is may be the recommended strategy to take.
Share this
- Agile Development (153)
- Software Development (126)
- Agile (76)
- Scrum (66)
- Application Lifecycle Management (50)
- Capability Development (47)
- Business Analysis (46)
- DevOps (43)
- IT Professional (42)
- Equinox IT News (41)
- Agile Transformation (38)
- IT Consulting (38)
- Knowledge Sharing (36)
- Lean Software Development (35)
- Requirements (35)
- Strategic Planning (35)
- Solution Architecture (34)
- Digital Disruption (32)
- IT Project (31)
- International Leaders (31)
- Digital Transformation (26)
- Project Management (26)
- Cloud (25)
- Azure DevOps (23)
- Coaching (23)
- IT Governance (23)
- System Performance (23)
- Change Management (20)
- Innovation (20)
- MIT Sloan CISR (15)
- Client Briefing Events (13)
- Architecture (12)
- Working from Home (12)
- IT Services (10)
- Data Visualisation (9)
- Kanban (9)
- People (9)
- Business Architecture (8)
- Communities of Practice (8)
- Continuous Integration (7)
- Business Case (4)
- Enterprise Analysis (4)
- Angular UIs (3)
- Business Rules (3)
- GitHub (3)
- Java Development (3)
- Lean Startup (3)
- Satir Change Model (3)
- API (2)
- Automation (2)
- Scaling (2)
- Security (2)
- Toggles (2)
- .Net Core (1)
- AI (1)
- Diversity (1)
- Testing (1)
- ✨ (1)
- August 2024 (1)
- February 2024 (3)
- January 2024 (1)
- September 2023 (2)
- July 2023 (3)
- August 2022 (4)
- August 2021 (1)
- July 2021 (1)
- June 2021 (1)
- May 2021 (1)
- March 2021 (1)
- February 2021 (2)
- November 2020 (2)
- September 2020 (1)
- July 2020 (1)
- June 2020 (3)
- May 2020 (3)
- April 2020 (2)
- March 2020 (8)
- February 2020 (1)
- November 2019 (1)
- August 2019 (1)
- July 2019 (2)
- June 2019 (2)
- April 2019 (3)
- March 2019 (2)
- February 2019 (1)
- December 2018 (3)
- November 2018 (3)
- October 2018 (3)
- September 2018 (1)
- August 2018 (4)
- July 2018 (5)
- June 2018 (1)
- May 2018 (1)
- April 2018 (5)
- March 2018 (3)
- February 2018 (2)
- January 2018 (2)
- December 2017 (2)
- November 2017 (3)
- October 2017 (4)
- September 2017 (5)
- August 2017 (3)
- July 2017 (3)
- June 2017 (1)
- May 2017 (1)
- March 2017 (1)
- February 2017 (3)
- January 2017 (1)
- November 2016 (1)
- October 2016 (6)
- September 2016 (1)
- August 2016 (5)
- July 2016 (3)
- June 2016 (4)
- May 2016 (7)
- April 2016 (13)
- March 2016 (8)
- February 2016 (8)
- January 2016 (7)
- December 2015 (9)
- November 2015 (12)
- October 2015 (4)
- September 2015 (2)
- August 2015 (3)
- July 2015 (8)
- June 2015 (7)
- April 2015 (2)
- March 2015 (3)
- February 2015 (2)
- December 2014 (4)
- September 2014 (2)
- July 2014 (1)
- June 2014 (2)
- May 2014 (9)
- April 2014 (1)
- March 2014 (2)
- February 2014 (2)
- December 2013 (1)
- November 2013 (2)
- October 2013 (3)
- September 2013 (2)
- August 2013 (6)
- July 2013 (2)
- June 2013 (1)
- May 2013 (4)
- April 2013 (5)
- March 2013 (2)
- February 2013 (2)
- January 2013 (2)
- December 2012 (1)
- November 2012 (1)
- October 2012 (2)
- September 2012 (3)
- August 2012 (3)
- July 2012 (3)
- June 2012 (1)
- May 2012 (1)
- April 2012 (1)
- February 2012 (1)
- December 2011 (4)
- November 2011 (2)
- October 2011 (2)
- September 2011 (4)
- August 2011 (2)
- July 2011 (3)
- June 2011 (4)
- May 2011 (2)
- April 2011 (2)
- March 2011 (3)
- February 2011 (1)
- January 2011 (4)
- December 2010 (2)
- November 2010 (3)
- October 2010 (1)
- September 2010 (1)
- May 2010 (1)
- February 2010 (1)
- July 2009 (1)
- April 2009 (1)
- October 2008 (1)