Reading and writing data to disk is one of the core performance aspects of the Exchange mailbox role.  Exchange uses the Jet Blue Extensible Storage Engine (ESE), do not confuse this with an Access database else you will invoke the mighty wrath of the squeaky lobster!  

ESE is responsible for the physical structure of the database on disk.  ESE does not actually know or care that it is storing email, it is a B+ database structure that stores pages and records.  An often missed but critical aspect of an Exchange installation is validating that the storage design as envisioned actually matches the physical, or virtual, reality.    Issues can arise with gbics, cables, switch ports, disk firmware, array firmware, poor storage design, faulty array backplanes and a plethora of other issues.


What happens if you place a server into production with one of the above issues?  In a nutshell, nothing good!  Would it be better to know about this in advance?  Oh yes, and JetStress is the tool that can help us. 


Exchange 2013 Jetstress DownloadJetStress is the official tool from the Exchange product group that is used to test and validate an Exchange server’s disk subsystem.  By using Jetstress it is possible to place an artificial load onto a set of disks and to test their response.  Note that there are versions of Jetstress for each version of Exchange.  For convenience the download links are below.




This is the blurb from the download page:


Use Jetstress to verify the performance and stability of a disk subsystem prior to putting an Exchange server into production. Jetstress helps verify disk performance by simulating Exchange disk Input/Output (I/O) load. Specifically, Jetstress simulates the Exchange database and log file loads produced by a specific number of users. You use Performance Monitor, Event Viewer, and ESEUTIL in conjunction with Jetstress to verify that your disk subsystem meets or exceeds the performance criteria you establish. After a successful completion of the Jetstress Disk Performance and Stress Tests in a non-production environment, you will have ensured that your Exchange disk subsystem is adequately sized (in terms of performance criteria you establish) for the user count and user profiles you have established. It is highly recommended that the Jetstress user read through the tool documentation before using the tool.


What does this really mean? 

Well after you go through the Mailbox sizing exercise for the Mailbox Role Requirements Calculator (AKA Storage Calc), the number of databases etc. is then plugged into the Jetstress configuration.  When defining the configuration, you want to validate that the storage will perform with the required latency for the designed IOPS.  Additionally you should also test to find at what point the storage maxes out in terms of IOPS and latency so you know the performance ceiling of the storage.  This is achieved by tweaking the thread count.    Once you have determined what the configuration should be, and Jetstress will pass a short test run, then it is time to increase the test duration.  My preference is that this should build up to a soak test that runs for 48 hours.  That way you can work the storage controllers and cache for a realistic period of time.  Also if the storage is shared with other applications of services you have a chance to see if this will introduce any performance issues or challenges.   Once the test has finished then review the .Perfmon .Blg files and the HTML reports. 



imageIn addition to the inbox documentation, you must also take a look at the Jetstress field guide.  This is an indispensable resource to assist with configuring and troubleshooting the tool.