Microsoft Exchange Server Jetstress 2010


Applies to: Exchange Server 2010 SP1, Exchange Server 2010

Topic Last Modified: 2012-07-23

Jetstress 2010 works with the Microsoft Exchange Server 2010 database engine to simulate the Exchange database and log disk input/output (I/O) load.

You can use Jetstress 2010 to verify the performance and stability of a disk subsystem prior to putting an Exchange 2010 server into production. Jetstress helps verify disk performance by simulating Exchange disk I/O load. Jetstress simulates the Exchange database and log file loads produced by a specific number of users.

You use Performance Monitor, Event Viewer, and the Exchange Server Database Utilities (Eseutil.exe) tool in conjunction with Jetstress to verify that your disk subsystem meets or exceeds the performance criteria you establish. After successful completion of the Jetstress disk performance and stress tests in a non-production environment, you will have verified that your Exchange 2010 disk subsystem is adequately sized (in terms of performance criteria you establish) for the user count and user profiles you have established.


Jetstress testing should be performed before you install Exchange on the server.

This topic isn't intended to provide Exchange storage design guidance. For guidance about Exchange server design and planning, see Mailbox Server Storage Design.


If you are going to install Exchange in a virtual environment, we support running the Microsoft Exchange Server Jetstress 2010 tool in a virtual guest machine if it’s deployed on one of the following host computers:

  • Microsoft Windows Server 2008 R2, or a later version

  • Microsoft Hyper-V Server 2008 R2, or a later version

  • VMware ESX 4.1, or a later version

Jetstress Components

Jetstress is an Extensible Storage Engine (ESE)-based application. It runs in user memory space and makes API calls to ESE, which in turn makes calls to the file system and the I/O manager to gain access to the data stored on disk. During each of these tasks, Windows records performance information about the specific task and the operating system. After the test is completed, Jetstress analyses the performance data to determine if the system meets the targets specified at the beginning of the test.

Jetstress main components

Jetstress Components Overview

Auto Tuning

The auto tuning component attempts to determine the maximum thread count that the solution can support. Each thread performs a set amount of ESE calls, which generates a set amount of disk I/O. By raising or lowering the thread count per database, the storage workload can be modified. The auto tuning component attempts to programmatically determine the maximum thread count that the storage solution can support, while remaining within the published disk latency guidelines for Exchange.


Auto tuning is unsuccessful if more than a single database is stored on the same set of physical disk spindles.

Thread Dispatcher

The thread dispatcher is responsible for managing workload within Jetstress. The main parameters within the thread dispatcher are the following:

  • ThreadCount   This parameter specifies the number of transactional threads per database. (Prior to Exchange 2010, it was the number of threads per storage group.)

  • ThreadTypes   This parameter specifies the type of work that a thread performs against a database. The same thread can perform different types of work during a specific run. There are four types of work, which are all performed against records in a table:

    • Insert

    • Read

    • Update

    • Delete

    The default operation mix for an Exchange 2010 simulation is: 40 percent for insert, 35 percent for read, 5 percent for update, and 20 percent for delete.

  • SluggishSessions   You can use the SluggishSessions parameter to fine-tune the amount of work performed by a specific thread. Internally, a thread sleeps (for the time period SluggishSessions × TaskRunTime) before picking up the next task to run. For example, if you have a value of 3 for SluggishSessions and an insert thread took 100 milliseconds (msec) in the last cycle, the thread sleeps for 300 msec before moving on to the next cycle. The default value is 1 for Exchange 2010.

Background Log Checksummer

The background log checksummer component simulates the I/O overhead of additional database copies. This copy operation has an I/O cost that increases with each additional copy.

Offline Log and Database Checksummer

The offline log and database checksummer process checksums all database and log files at the end of a Jetstress run to ensure that all data is intact. It also provides performance data for cyclic redundancy check (CRC) checksum speed should Volume Shadow Copy Service (VSS) copies require a checksum prior to backup.

Reporting and Verification

At the end of a Jetstress test, the reporting and verification process compares the observed performance results against a set of acceptable values. These results are then written to an HTML file. During the test, binary performance data is written to a binary performance log (.blg) file.

Test Scenarios in Jetstress 2010

Jetstress 2010 validates performance with Exchange 2010 ESE binaries, as well as legacy ESE versions of Exchange Server 2007 and Exchange Server 2003.

Jetstress 2010 supports the Windows Server 2008 and Windows Server 2003 operating systems. However, although Exchange 2010 supports Windows Server 2008 Service Pack 2 (SP2) and Windows Server 2008 R2; it doesn't support Windows Server 2003. You must use Windows Server 2008 SP2 or Windows Server 2008 R2 with Jetstress 2010 when using Exchange 2010 ESE binaries.

There are two categories of test scenarios:

  • Disk subsystem throughput   In this test scenario, you can do the following types of tests:

    • Performance of database transactions

    • Streaming backup

    • Soft recovery

  • Exchange mailbox profile   In this test scenario, you can specify the number of mailbox users and I/O per second (IOPS) per mailbox to simulate the profiled Exchange mailbox load. The performance test becomes a stress test when its duration is longer than six hours so that it uses a lenient set of the disk I/O latency thresholds.

JetstressWin.exe and JetstressCmd.exe

Two separate Jetstress applications are included in the Jetstress download package:

  • JetstressWin.exe   Graphical user interface (GUI) version of Jetstress

  • JetstressCmd.exe   Command-line version of Jetstress

Using JetstressWin.exe, you can open, edit, and save a test scenario from and into an XML configuration file. Using JetstressCmd.exe, you can run an existing test scenario from a specific XML configuration file. The results from both applications are comparable, producing the same XML configuration input file, because they both use common Jetstress core library files.

You can use JetstressWin.exe to easily configure and execute a test scenario, whereas JetstressCmd.exe requires some expertise to manually edit parameters in an XML configuration file. We recommend that you use JetstressWin.exe to create test scenarios and JetstressCmd.exe to run the saved test scenarios.

The configuration pages of JetstressWin.exe have group parameters that you can use in your Exchange pre-deployment planning. Each configuration page validates the user input and displays errors, if any, as you continue with the next page.

Changes in the Latest Version of Jetstress

The following items changed in this version of Jetstress:

  • Exchange 2010 mailbox I/O profile is updated, including 32-kilobyte (KB) page size, average database read size, average database write size, and average log write size.

  • Database duplication is now multicast, which reduces the time to prepare databases for Jetstress testing.

  • Instead of using Logical Disk performance counters, MSExchange Database I/O counters are used for I/O measurement. Databases and logs can be placed on the same volume. Jetstress now works correctly when there's a Logical Disk performance counter problem.

  • Calculations for log checksums are now multithreaded. (Log checksums from different ESE instances are calculated in parallel.)

  • Maximum number of databases per test is increased to 100 for Exchange 2010 ESE binaries.

  • Log replication I/O is now simulated based on Exchange 2010 high availability architecture. You can simulate a maximum number of 16 database copies to drive the log replication I/O (log read I/O) via XML configuration or UI in JetstressWin.exe. The I/O generated by simulating log shipping as well as the configuration is provided in the HTML report.

  • Background database maintenance (checksum) is now simulated for Exchange 2010 test configurations. This is the default behavior. The background database maintenance work performed during the test is reported separately from the normal transactional I/O in the HTML report. This can be disabled via the XML configuration or via a check box in JetstressWin.exe.

  • Traces now contain date and time information for every entry.

  • Improved informative messages and warnings are provided to prevent administrators from using mismatched ESE/ESE performance counters.

  • Only the minimum necessary number of databases is created or replicated, rather than five databases per ESE instance.

  • ESE performance counters are now unregistered or registered again if it's detected that the current registered version is inconsistent with the version Jetstress will use. Restarting Jetstress is still required.

  • JetstressCmd.exe and JetstressWin.exe are now consistent in overriding the test type from Performance to Stress if the duration is longer than six hours.

  • System and application events are now saved for each Jetstress run for the time of the run, along with HTML reports and Performance Monitor logs.

  • Simplified configuration of JetstressWin.exe has exposed many parameters on configuration pages to help the beginner to intermediate user focus on the important parameters of a test scenario. Other parameters in the XML configuration file are hidden. The XML configuration file can be used by the advanced user to fine-tune a test run.

  • Test pass/fail criteria in Jetstress still reports memory system information with performance counters such as Memory/Available/Available MBytes, Memory\Free System Page Table Entries, Memory\Pool Nonpaged Bytes, and Memory\Pool Paged Bytes. It no longer uses the test/fail criteria on 64-bit editions of the Windows Server operating systems.

  • Throttled load generation, also known as fine-grained disk throughput, is now available. Jetstress artificially throttles the amount of disk I/O that a thread generates to support the fine-grained control on the overall I/O throughput.

  • If you select the time range of a performance log, Jetstress saves a performance log for the whole time range of a test run. However, the test report accounts for a valid time range of performance samples from a point where it has reached 90 percent of the maximum cache size.